JSP - 쿠키

김강연·2022년 7월 15일
0
post-thumbnail

쿠키(Cookie)의 정의와 용도

쿠키: 웹 브라우저가 보관하는 데이터.

쿠키는 웹 브라우저가 웹 서버에게 요청을 보낼 때 쿠키를 함께 전송함으로써, 웹 서버가 필요한 데이터를 읽을 수 있도록 한다.
한 번 생성된 쿠키는 삭제되기 전까지 웹 서버에 요청을 보낼 때면 항상 함께 전송되므로, 웹 어플리케이션을 사용하면서 지속적으로 유지해야 하는 정보를 저장하기에 용이하다.

쿠키의 생성

쿠키는 웹 서버와 웹 브라우저 양쪽 모두 생성할 수 있다.
(출처: JSP 2.3 웹 프로그래밍, 최범균 저)
JSP에서 생성하는 쿠키는, 웹 서버에서 생성하는 쿠키이다.

쿠키 값 변경

쿠키의 값을 변경할 때에는, 변경하고자 하는 쿠키와 같은 이름, 다른 값(자신이 변경고 싶은 값)으로 생성한 뒤, 쿠키를 response 객체에 추가시키면 된다.

//english_name 이라는 쿠키의 값이 "Finn"이라고 가정하자.
Cookie c = new Cookie("english_name", "Jake");
request.addCookie(c);

여기서 의문점이 하나 들었다. 기존 쿠키의 값을 setValue(String value) 메소드를 통해 다시 지정할 수는 없을까? 시도해 보았다.

//Cookie cookie = new Cookie("english_name", "Jake");
//response.addCookie(cookie);

cookies[i].setValue("Jake");
response.addCookie(cookies[i]);

확인해 보니 쿠키의 값이 정상적으로 변경되었다. 개발자 도구를 사용해 응답 헤더를 확인해 보았다.

정상적으로 Set-Cookie 헤더 값이 포함된 것을 확인할 수 있다.
부차적으로 의문이 든 게 하나 있었다. response.addCookie() 메소드를 꼭 사용해야 할까? setValue() 메소드를 사용했으니 필요 없지 않을까?
나와 응답 헤더의 대답은 "No. 필요하다."이다. 이유는 아래 유효시간에서 생기는 의문점에서 같이 확인해보자.

쿠키의 유효시간(+쿠키 삭제)

위에서 소개한 과정을 통해 생성된 쿠키는 유효시간을 가진다. 유효시간 동안, 웹 브라우저가 종료되어도 쿠키는 삭제되지 않고 존재하며, 다시 서버에 전송될 수 있다.

유효시간을 지정하기 위한 메소드는 setMaxAge(long expiry) 메소드를 사용하게 된다. (파라미터는 초 단위.)
ex) cookie.setMaxAge(60) => 쿠키의 유효시간을 1분으로 설정.

*쿠키의 유효시간을 활용하여 내 아이디 기억하기 OR 자동 로그인 기능을 구현한다고 한다. (출처: "JSP 2.3 프로그래밍" 저: 최범균)

Q1: 쿠키의 유효시간을 설정하지 않으면 어떻게 되나요?
A1: 쿠키의 유효시간의 기본값은 -1입니다. 유효시간이 음수로 설정되어 있다면, 클라이언트로 쿠키가 전송되고 웹 브라우저가 종료될 때 쿠키가 함께 삭제된답니다.

Q2: 쿠키의 유효시간을 0으로 설정하면 어떻게 되나요?
A2: 쿠키를 바로 삭제(무효화)합니다. 참고로, Cookie 클래스는 쿠키를 삭제하는 기능을 따로 제공하지 않아서, 쿠키를 삭제하고자 할 때는 setMaxAge(0)을 호출해야 합니다.

쿠키 삭제 예시)
cookies[i].setMaxAge(0);
response.addCookie(cookies[i]);

여기서 위 쿠키 변경에서도 생겼던 동일한 의문점이 하나 들었다. 쿠키의 값, 유효 시간 등 기존 쿠키의 구성 요소를 변경 후, response.addCookie(Cookie cookie) 메소드 호출은 필수적인 것인가?

대답은 "Yes. 필수적이다."이다. 근거는 위 의문점에서도 미뤄뒀던 이유와 동일하다. 바로 살펴보도록 하자.

우선, 알아야 할 정보가 있다. 쿠키는 응답 헤더(Response Headers)를 사용해서 웹 브라우저에 전달된다. 위 response Headers 캡쳐 화면에 Set-Cookie 헤더 값이 쿠키의 정보이다. 쿠키를 삭제하였을 경우의 response Headers도 보여주겠다.

보다시피, 쿠키는 response.addCookie() 메소드를 실행함으로써 Set-Cookie 헤더를 통해서 전달되는 것이다. 하지만, response.addCookie(Cookie cookie) 메소드를 호출하지 않을 경우 위 Set-Cookie 헤더는 생성되지 않는 것을 확인하였다. 따라서 쿠키의 구성 요소를 변경 후에는 response.addCookie(Cookie cookie) 메소드를 호출해야 해당 변경 사항이 정상적으로 반영된다.

profile
Oasis of Knowledge

0개의 댓글