[JSP / WEB] 쿠키(Cookie)와 세션(Session)

김태희·2025년 7월 10일
0

JSP

목록 보기
4/6

Cookie & Session

쿠키(Cookie)

HTTP 프로토콜은 '상태가 없는(Stateless)' 특징을 가진다.

이는 서버가 각 요청을 독립적인 것으로 취급하여 이전 요청을 기억하지 못함을 의미한다.

"방금 로그인한 사용자가 누구인지" 알 수 없는 것이다.

이 문제를 해결하기 위해, 서버는 브라우저에 작은 정보를 남겨두는데 이것이 바로 쿠키(Cookie)다.

쿠키는 서버가 사용자의 브라우저(클라이언트)에 저장하는 작은 텍스트 조각이다.

브라우저는 서버에 요청을 보낼 때마다 이 쿠키를 함께 전송하여, 서버가 사용자를 식별할 수 있도록 돕는다.


쿠키의 주요 역할

상태 관리
사용자의 로그인 상태를 유지(자동로그인)한다.
비로그인 상태의 장바구니를 관리한다.

사용자 추적
사용자의 방문 기록이나 행동 패턴을 분석하는 데 사용된다.

개인화
"오늘 하루 이 창을 열지 않음" 팝업, 언어 설정 등 사용자 맞춤형 경험을 제공한다.


JSP 쿠키 객체(Cookie) 활용법

JSP에서 쿠키를 다루는 방법은 매우 간단하다.

1. 쿠키 생성 및 전송
response 내장 객체를 사용한다.

<%
    // 1. "userId"라는 이름에 "guest"라는 값을 가진 쿠키 객체 생성
    Cookie cookie = new Cookie("userId", "guest");

    // 2. 쿠키 유효기간 설정 (초 단위, 여기서는 24시간)
    cookie.setMaxAge(60 * 60 * 24);

    // 3. response 객체에 쿠키를 추가하여 클라이언트로 전송
    response.addCookie(cookie);
%>

2. 쿠키 읽기
request 내장 객체를 사용한다.
브라우저는 여러 쿠키를 가질 수 있으므로 배열 형태로 받아온다.

<%
    // 1. request로부터 모든 쿠키를 배열로 가져온다.
    Cookie[] cookies = request.getCookies();
    String userId = "";

    if (cookies != null) {
        // 2. 쿠키 배열을 순회하며 원하는 이름의 쿠키를 찾는다.
        for (Cookie c : cookies) {
            if (c.getName().equals("userId")) {
                userId = c.getValue();
                break; // 찾았으면 반복 종료
            }
        }
    }
%>
<p>현재 사용자 ID는 <%= userId %> 입니다.</p>

3. 쿠키 삭제
쿠키를 직접 삭제하는 메서드는 없다.
대신, 유효기간을 0으로 설정하여 브라우저가 즉시 삭제하도록 유도할 수 있다.

<%
    Cookie cookie = new Cookie("userId", ""); // 값은 비워도 무방하다.
    cookie.setMaxAge(0); // 유효기간을 0으로 설정
    response.addCookie(cookie);
%>

쿠키는 클라이언트 측에 데이터를 저장하는 간단하고 유용한 방법이다.

하지만 보안에 민감한 정보나 큰 데이터를 저장하기에는 적합하지 않다.

이러한 단점을 보완하기 위해 서버 측 저장 방식인 세션을 사용한다.


세션(Session)

쿠키는 브라우저에 저장되어 보안에 취약하고 저장 데이터의 양도 제한적이다.

로그인 정보나 장바구니처럼 중요하고 복잡한 정보는 세션(Session)을 이용해 처리해야 한다.

세션은 쿠키와 달리 데이터를 서버 쪽에 저장하는 방식이다.

서버는 각 클라이언트를 위한 고유한 저장 공간(세션)을 만들고, 클라이언트에게는 그 공간에 접근할 수 있는 '열쇠(ID)'만 쿠키 형태로 전달한다.

클라이언트는 요청 시마다 이 열쇠를 함께 보내고, 서버는 열쇠를 보고 맞는 세션 저장소의 데이터를 사용한다.

세션의 동작 원리

  1. 최초 접속
    클라이언트가 서버에 처음 접속하면, 서버는 고유한 세션 ID를 생성한다.

  2. 세션 저장소 생성
    서버 메모리에 해당 세션 ID와 연결되는 저장 공간을 만든다.

  3. 세션 ID 전송
    서버는 생성한 세션 ID를 클라이언트 브라우저에 쿠키(보통 JSESSIONID 이름) 형태로 저장시킨다.

  4. 재접속
    클라이언트가 다시 요청하면, 브라우저는 자동으로 세션 ID 쿠키를 함께 보낸다.

  5. 세션 데이터 활용
    서버는 전달받은 세션 ID를 통해 서버에 저장된 해당 클라이언트의 데이터를 찾아 사용한다.

JSP 세션(session) 내장 객체 활용법

JSP는 세션을 편리하게 다루도록 session이라는 내장 객체를 기본으로 제공한다.

1. 세션에 값 저장하기
setAttribute("이름", 값) 메서드를 사용한다. 값으로는 모든 종류의 객체(Object)를 저장할 수 있다.

<%
    String userId = "testuser";
    // "loginId" 라는 이름으로 userId 변수의 값을 세션에 저장
    session.setAttribute("loginId", userId);
%>

2. 세션에서 값 불러오기
getAttribute("이름") 메서드를 사용한다.
반환 타입이 Object이므로, 원래 타입으로 형 변환(Casting)이 필요하다.

<%
    // "loginId" 라는 이름의 세션 값을 가져온다.
    Object value = session.getAttribute("loginId");
    String loginId = "";
    if (value != null) {
        loginId = (String) value;
    }
%>
<p>현재 로그인한 아이디: <%= loginId %></p>

3. 세션에서 특정 값 삭제하기
removeAttribute("이름") 메서드를 사용한다.

<%
    // "loginId" 세션만 삭제
    session.removeAttribute("loginId");
%>

4. 세션 전체 무효화 (로그아웃)
invalidate() 메서드를 사용한다. 해당 클라이언트의 세션 저장소 전체가 서버에서 삭제된다.

<%
    // 세션을 완전히 종료시킨다 (로그아웃 시 사용).
    session.invalidate();
%>

0개의 댓글