본문 바로가기
JAVA

쿠키(Cookie) 이용하는 방법

by enai 2019. 8. 23.

웹은 HTTP 프로토콜로 통신한다.

HTTP는 무상태 프로토콜이어서 서버는 클라이언트의 이전 상태를 기억하지 못한다.

(더 자세한 내용: 웹이 동작하는 법 (HTTP 프로토콜의 이해) )

하지만 상황에 따라 클라이언트의 이전 상태를 기억하고 있어야 하기도 하는데, 바로 이럴 때 쿠키라는 기술이 필요하다.

 

 

 

 

1. 쿠키(Cookie)란?

 

쿠키는 클라이언트 단에 저장되는 작은 정보의 단위이다.

클라이언트에서 생성하고 저장된다. 서버에서 전송한 쿠키가 클라이언트에 저장될 수 있다.

 

- 쿠키 이용 흐름

서버에서 쿠키 객체를 생성한 후, 응답과 함께 클라이언트의 브라우저로 전송되어, 사용자의 컴퓨터에 서버별로 저장된다.

저장된 쿠키는 다시 해당하는 웹 페이지에 접속할 때(서버한테 다시 요청 보낼 때) 브라우저에서 서버로 전송된다.

쿠키는 이름(name)과 값(value) 쌍으로 정보를 저장한다. (단순한 문자열로 된 데이터다.)

(이름-값 쌍 외에도 도메인, 경로, 유효기간, 보안, HttpOnly 속성을 저장할 수 있다.)

쿠키의 이름은 알파벳과 숫자로만 구성이 된다.

쿠키 값을 한글로 저장하고 싶다면 인코딩, 디코딩 과정이 필요하다.

 

쿠키의 크기는 브라우저별로 제한되는 값이 다르다.

※참고: Browser Cookie Limits

 

Browser Cookie Limits

* verified on 3.6.13/4/8/9/10/14/19. unverified 5-8/11-13/15-18, just assumed

browsercookielimits.squawky.net

 

참고로, 쿠키는 사용자 컴퓨터에 저장되는 만큼 다른 사람이나 시스템이 볼 수 있다는 단점이 있다.

 

 

 

 

 

2. 쿠키 사용 방법

 

javax.servlet.http.Cookie를 이용하여 쿠키를 생성하고 전송하고 삭제하는 방법

 

1) 서버에서 Response의 addCookie 메서드를 사용하여 쿠키를 클라이언트에게 전송한다.

Cookie cookie = new Cookie(이름, 값); //쿠키 생성
response.addCookie(cookie); //쿠키 전송

쿠키의 이름은 일반적으로 알파벳, 숫자, 언더바(_)로 구성한다.

※참고: RFC 6265 문서의 [4.1.1 Syntax] 항목

 

2) 서버에서 Request의 getCookie 메서드로 클라이언트가 보낸 쿠키 정보 읽기

Cookie[] cookies = request.getCookies();

쿠키 값이 없으면 null이 반환된다. (NullPointerException 같은 오류들 발생하지 않게 주의하기!)

하나의 서버에서 여러 개의 쿠키를 보낼 수 있어, getCookie 메서드의 리턴 타입은 배열로 되어 있다.

getName(), getValue()하는 메서드를 이용하여 원하는 쿠키 정보를 찾아올 수 있다.

setValue(String newValue)로 쿠키의 새로운 값을 설정할 수도 있다.

 

3) 서버에서 클라이언트에게 쿠키 삭제 요청하기

Cookie cookie = new Cookie("이름", null);
cookie.setMaxAge(0);
response.addCookie(cookie);

서버에서 쿠키를 삭제할 수는 없다. 쿠키는 클라이언트에서 관리하기 때문이다.

대신 클라이언트에 똑같은 이름의 쿠키를 또 만들 수 없다는 점을 이용한다.

삭제하려는 쿠키와 같은 이름의 쿠키를 생성하고, setMaxAge 메서드로 유효기간을 0으로 지정하여 클라이언트에게 보낸다.

그럼 기존의 쿠키가 새로 받은 쿠키로 바뀌고, 새 쿠키의 유효기간은 0이므로 바로 사라지게 된다.

 

setMaxAge 메서드의 인자는 유효기간을 나타내는 초 단위의 정수형이다.

음수이면 브라우저가 종료될 때 쿠키가 삭제된다.

 

 

 

 

3. Spring MVC에서 Cookie 사용 방법

 

@CookieValue 애노테이션 사용

컨트롤러 메소드의 파라미터에서 CookieValue 애노테이션을 사용하여, 원하는 쿠키 정보를 파라미터 변수에 담아 사용할 수 있다.

컨트롤러 메소드(@CookieValue(value="쿠키이름", required=false, defaultValue="기본값") String 변수명)

 

 

 

 

 

출처)

edwith 부스트코스 웹 프로그래밍

- 쿠키란?

댓글