쿠키 (Cookies) - 개념 및 활용 [JSP 기초]

2022. 1. 8. 13:00·JAVA/JSP & Servlet

1. 쿠키는 무엇인가?

간단하게 말하자면 텍스트 형식의 작은 정보 조각으로 웹 브라우저와 서버 사이에서 데이터를 교환할 때 필요한 것이다.

 

 


 

쿠키는 왜 필요할까?

HTTP의 중요한 특성으로는 비연결성(Connectionless)과 비상태성(Stateless)이 있다.

서비스를 이용하고 싶은 사람은 많고 서버의 자원은 한정적이기 때문에 클라이언트와 서버는 연결을 유지할 수 없다.

하지만 쿠키를 이용하면 사용자의 정보를 작은 조각 파일에 저장할 수 있기 때문에

연결과 해제가 반복되더라도 클라이언트가 쿠키를 보내주면 서버가 사용자를 식별할 수 있게 된다.

 

쿠키를 활용한 예는 다음과 같다.

  • 로그인 상태 유지
  • ID, 비밀번호 저장
  • 하루동안 보지 않기
  • 사용자 맞춤 웹 페이지 제공

 

 

쿠키의 원리

쿠키의 처음 교환과정은 다음과 같다.

해당 웹 페이지의 쿠키를 가지고 있지 않으면 1, 2, 3의 과정을 거쳐야 쿠키를 사용할 수 있지만,

만약 예전에 웹페이지를 이용한 적이 있다면 쿠키가 이미 클라이언트에게 저장되어있기 때문에

3번의 과정만으로도 웹 페이지를 요청할 수 있다. 

 

 

 


 

 

2. 세션과의 비교

(세션 포스트 https://myvelop.tistory.com/13?category=906898 )

 

JSP 기초 - 세션 트래킹 (Session Tracking)

1. 세션 트래킹이란? 세션이란 특정한 시점에서의 구간을 뜻하고, 세션 트래킹이란 요청된 세션을 찾아 주는 동작이다. 다시 말하자면, 세션 트래킹이란 사용했던 시점의 기록을 이용자에게 찾

myvelop.tistory.com

쿠키는 세션과 굉장히 유사한 기술이지만 여러 면에서 차이점을 보이고 있다.

쿠키 Cookie 세션 Session
클라이언트에 저장 (서버에게 유리) 서버에서 저장 (사용자에게 유리)
텍스트(String) 형식 객체(Object) 형식
보안에 취약함 보안 면에서 비교적 좋음
(RFC 6265 쿠키표준에 의하면)
1쿠키 당 4KB(4096byte) 저장가능

하나의 호스트나 도메인 당 50쿠키
최대 3000개까지
저장 데이터에 딱히 제한이 없음
비교적 빠른 편 비교적 느린 편

 

 


 

3. JSP에서의 쿠키 활용

쿠키를 생성하는 법은 아래와 같다.

<% Cookie cookie = new Cookie("쿠키이름", 쿠키값) %>

 

쿠키의 구성 요소는 이름, 값, 유효시간, 도메인, 경로 등이 있고, 메소드를 통해 반환받을 수 있다.

그 외에 쿠키의 값이나 경로를 지정하거나 유효시간 등을 정할 수도 있다.

메소드 설명
String getName() 쿠키의 이름 반환
String getValue() 쿠키의 값 반환
void setValue 쿠키의 값 설정
String getDomain() 쿠키의 도메인 반환
void setDomain() 쿠키의 도메인 설정
String getPath() 쿠키의 경로 반환
void setPath() 쿠키의 경로 설정
int getMaxAge() 쿠키의 유효시간 반환
void setMaxAge(int sec) 쿠키의 유효시간을 초 단위로 설정

 

 


 

 

4. 쿠키를 통해 구직서비스 만들기

  • homepage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 
<%@ page import="java.net.URLEncoder"%> 
<%@ page import="java.util.*" %>

<html>
<head>
	<title>구직사이트</title>
</head>
<%
	// 쿠키가 설정되기 전 초기화
	String job = "개발자";
	
	// 쿠키 값 가져오기
	Cookie[] jobCookies = request.getCookies();
	
	if(jobCookies != null){
		for(Cookie temp: jobCookies) {
			// 내가 선택한 값과 쿠키의 값이 동일하면 선택
			if("jobSite.jobSearch".equals(temp.getName())){
				job = temp.getValue();
				break;
			}
		}
	}
%>
<body>
<a href="selectPage.jsp">당신의 관심 구직분야를 선택하세요!</a><br><br>


<h2><%= job %>로서 경력을 개발하세요</h2>
1. 000 님의 <%= job %> 성공기<br>
2. <%= job %>로 취업하는 법은?<br><br>

<h2><%= job %>를 뽑는 회사</h2>
1. 00 회사
2. ㅁㅁ 회사
3. @@ 회사


</body>

</html>

 

 

  • selectPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 
<%@ page import="java.net.URLEncoder"%> 
<%@ page import="java.util.*" %>

<html>

<head>
	<title>구직사이트</title>
</head>

<body>

<form action="personalPage.jsp">
	원하는 분야를 선택하세요!
	<select name="wantJob">
		<option>개발자</option>
		<option>간호사</option>
		<option>기획자</option>
		<option>카피라이터</option>
		<option>도면설계가</option>
		<option>디자이너</option>
	</select>
	<br><br>
	
	<input type="submit" value="Submit">
</form>


</body>

</html>

 

 

  • personalPage.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %> 
<%@ page import="java.net.URLEncoder"%> 
<%@ page import="java.util.*" %>


<html>
<head>
	<title>구직사이트</title>
</head>
<%
	// SelectPage에서 선택한 직업을 job에 저장
	String job = request.getParameter("wantJob");

	// 쿠키 생성
	Cookie jobCookie = new Cookie("jobSite.jobSearch", job);
	
	// 유효기간 6개월(180일) 
	jobCookie.setMaxAge(60*60*24*180);
	
	// 만든 쿠키 저장
	response.addCookie(jobCookie);
%>
<body>
	감사합니다!! <br>
	당신의 관심사는 ${param.wantJob} 으로 설정되었습니다.
	<br><br>
	
	<a href="homepage.jsp">구직하러가기</a>


</body>

</html>

 

 


 

 

5. 결과

아직 쿠키가 생성되지 않았기 때문에 초기값인 "개발자"가 화면에 노출된다.

 

디자이너를 선택한 다음 submit 을 누르면

디자이너로 설정됐다는 퍼스널페이지가 나오고

 

홈페이지 맞춤이 디자이너로 바뀌었음을 알 수 있다!!

'JAVA/JSP & Servlet' 카테고리의 다른 글
  • JSTL 태그 사용 [JSP 기초]
  • JSTL 사용하는법 [JSP 기초 ]
  • 세션 트래킹 (Session Tracking) [JSP 기초]
  • HTML form 사용하기 [JSP 기초]
gakko
gakko
좌충우돌 개발기
  • gakko
    MYVELOP 마이벨롭
    gakko
  • 전체
    오늘
    어제
    • 분류 전체보기 (203)
      • Spring (23)
        • Spring (10)
        • Spring Boot (7)
        • Spring Security (1)
        • Hibernate (4)
      • Test (3)
      • 끄적끄적 (6)
      • 활동 (35)
        • 부스트캠프 (23)
        • 동아리 (3)
        • 컨퍼런스 (3)
        • 글또 (5)
        • 오픈소스 컨트리뷰션 (1)
      • 디자인패턴 (0)
      • Git & GitHub (22)
        • Git (13)
        • Github Actions (1)
        • 오류해결 (5)
        • 기타(마크다운 등) (3)
      • 리눅스 (6)
        • 기초 (6)
        • 리눅스 서버 구축하기 (0)
      • Infra (2)
        • Docker (1)
        • Elastic Search (0)
        • Jenkins (1)
        • AWS (1)
      • MySQL (7)
        • 기초 (6)
        • Real MySQL (1)
      • 후기 (3)
        • Udemy 리뷰 (3)
      • CS (26)
        • 웹 기본지식 (0)
        • 자료구조 (13)
        • 운영체제 OS (12)
        • 데이터베이스 (1)
        • 시스템 프로그래밍 (0)
        • 기타 (0)
      • Tools (1)
        • 이클립스 (1)
        • IntelliJ (0)
      • 프로젝트 (1)
        • 모여모여(부스트캠프) (1)
      • JAVA (32)
        • Maven (6)
        • 오류해결 (11)
        • 자바 클래스&메소드 (1)
        • JSP & Servlet (12)
      • Javascript (5)
        • 기초 (3)
        • React (2)
      • Python (28)
        • 파이썬 함수 (9)
        • 알고리즘 문제풀이 (16)
        • 데이터 사이언스 (2)
        • 웹 크롤링 (1)
      • 단순정보전달글 저장소 (0)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

    • 우진님
  • 공지사항

  • 인기 글

  • 태그

    웹개발
    스프링
    MySQL
    오류해결
    파이썬
    알고리즘
    부스트캠프 멤버십
    Git
    자바스크립트
    자바
    Python
    GitHub
    부스트캠프
    jsp
    Spring
    운영체제
    부스트캠프 7기
    java
    os
    스프링부트
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.0
gakko
쿠키 (Cookies) - 개념 및 활용 [JSP 기초]
상단으로

티스토리툴바