쿠키(Cookie)


쿠키(Cookie)란 이름과 값의 쌍으로 구성된 작은 정보(아스키 문자만)를 의미한다. 그 외에도 domain 정보, path 정보, 유효 기간이 있다.

 

서버에서 생성하여 전송하고 브라우저에 저장된다. 유효기간 이후에 자동으로 삭제된다. 서버에 요청 시 domain, path 정보가 일치하는 경우에만 자동 전송(path 하위 경로 포함)된다. 따라서 일종의 신분증 및 ID 카드 역할을 하며 클라이언트 식별 기술이라고 할 수 있다. 대략적인 과정은 다음과 같다.

 

1. 클라이언트의 요청(요청 헤더에 쿠키가 따라감)

2. Cooke cooke = new("id", "asdf"); // 쿠키 생성

    response.addCookie(cookie() // 응답

   => 응답에 쿠키가 추가되어 응답 헤더에 Set-Cookie 정보가 담김

 

Cookie cookie = new Cookie("이름", "값"); // 쿠키 생성
cookie.setMaxAge(60*60*24); // 유효 기간 설정(초단위)
response.addCookie(cookie); // 응답에 쿠키 추가

 

쿠키의 삭제의 경우 유효 기간을 0으로 설정해주면 되고, 변경의 경우 다양한 메서드들이 존재하는데 다음과 같다.

 

cookie.setValue => 값 변경

cookie.setDomain => 도메인 변경

cookie.setPath => 경로 변경

cookie.setMaxAge => 유효기간 변경

 

이때, setDomain과 setPath의 경우 생략하게 되면 서버의 응답을 가지고 판단해서 결정된다.

 

 

 

세션(Session)


세션(Session)은 서로 관련된 요청과 응답들을 하나로 묶은 것을 의미한다. 이때 쿠키를 이용한다. 브라우저마다(쿠키를 이용하기 때문) 개별 저장소(세션 객체)를 서버에서 제공한다. 원래는 요청과 응답이 독립적이나, 쿠키를 이용해서 세션 ID를 브라우저에게 보내줘서 그 이후 요청에는 같은 세션ID가 요청에 포함되게 함으로써 요청들을 하나로 묶어준다.

 

세션 객체를 얻기 위한 과정은 다음과 같다. 컨트롤러에서 세션 저장소를 사용하려면 request.getsession()을 통해 요청 헤더에 있는 JSESSIONID와 일치하는 세션ID를 찾는다. 해당 세션ID에 setAttribute()를 통해 값을 저장하거나 getAttribute()를 통해 값을 읽어온다.

 

세션에 대한 주요 메서드는 다음과 같다.

 

메서드 설명
String getId() 세션ID를 반환
long getLastAccessedTime() 세션 내에서 최근 요청을 받은 시간을 반환
boolean isNew() 새로 생성된 세션인지를 반환.
request.getSession() 호출 후 사용
void invalidate() 세션 객체를 제거(저장된 객체도 함께)
void setMaxInactiveInterval(int interval) 지정된 시간(초) 후에 세션을 종료
(예약 종료)
int getMaxInactiveInterval() 예약된 세션 종료 시간을 반환

 

 

세션의 종료에는 수동 종료와 자동 종료로 나뉜다.

 

수동 종료의 경우 session.invalidate() 메서드를 통해 세션을 즉시 종료할 수 있고, session.setMaxInactiveInterval(30*60)와 같이 예약 종료(30분 후) 할 수 있다.

 

자동 종료의 경우 web.xml을 이용하여 <session-config> 내에 <session-timeout>분</session-timeout>과 같이 종료시켜줄 수 있다. 예를 들어 사용자가 깜빡하고 로그아웃을 하지 않는 등의 경우 서버에 필요없는 세션을 제거하고 사용자 계정의 도용을 방지해줄 수 있다.

 

 

 

쿠키 vs 세션


 

쿠키 세션
브라우저 저장 서버 저장
서버 부담X 서버 부담O
보안에 불리 보안에 유리
서버 다중화에 유리 서버 다중화에 불리

 

쿠키의 경우 보안에 불리할 수 있어 암호화 된 쿠키를 이용하도록 한다. 세션은 서버에 저장된다는 특성 때문에 서버 다중화에 불리하여 암호화 된 쿠키를 이용하는 편이 서버 부담적인 측면에서나 다중화 측면에서 장점을 가진다.

+ Recent posts