1. 쿠키는 무엇인가?
간단하게 말하자면 텍스트 형식의 작은 정보 조각으로 웹 브라우저와 서버 사이에서 데이터를 교환할 때 필요한 것이다.
쿠키는 왜 필요할까?
HTTP의 중요한 특성으로는 비연결성(Connectionless)과 비상태성(Stateless)이 있다.
서비스를 이용하고 싶은 사람은 많고 서버의 자원은 한정적이기 때문에 클라이언트와 서버는 연결을 유지할 수 없다.
하지만 쿠키를 이용하면 사용자의 정보를 작은 조각 파일에 저장할 수 있기 때문에
연결과 해제가 반복되더라도 클라이언트가 쿠키를 보내주면 서버가 사용자를 식별할 수 있게 된다.
쿠키를 활용한 예는 다음과 같다.
- 로그인 상태 유지
- ID, 비밀번호 저장
- 하루동안 보지 않기
- 사용자 맞춤 웹 페이지 제공
쿠키의 원리
쿠키의 처음 교환과정은 다음과 같다.
해당 웹 페이지의 쿠키를 가지고 있지 않으면 1, 2, 3의 과정을 거쳐야 쿠키를 사용할 수 있지만,
만약 예전에 웹페이지를 이용한 적이 있다면 쿠키가 이미 클라이언트에게 저장되어있기 때문에
3번의 과정만으로도 웹 페이지를 요청할 수 있다.
2. 세션과의 비교
(세션 포스트 https://myvelop.tistory.com/13?category=906898 )
쿠키는 세션과 굉장히 유사한 기술이지만 여러 면에서 차이점을 보이고 있다.
쿠키 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 을 누르면
디자이너로 설정됐다는 퍼스널페이지가 나오고
홈페이지 맞춤이 디자이너로 바뀌었음을 알 수 있다!!