서블릿을 활용한 쿠키 및 세션 데이터 처리 방법

서블릿을 활용한 쿠키 및 세션 데이터 처리 방법

웹 애플리케이션에서 사용자의 상태를 관리하는 방법 중 가장 많이 사용되는 두 가지 방식이 쿠키와 세션입니다. 서블릿을 이용하여 클라이언트의 정보를 저장하고, 이를 통해 사용자의 상태를 유지하는 방법에 대해 알아보겠습니다.

1. 쿠키(Cookie)란?

쿠키는 클라이언트 측에 저장되는 작은 데이터 조각입니다. 웹 브라우저는 쿠키를 저장하고, 같은 사이트에 재접속할 때 서버로 쿠키를 전송하여 클라이언트의 정보를 전달합니다. 쿠키는 주로 사용자 식별, 로그인 정보 유지, 장바구니 데이터 저장 등에 사용됩니다.

쿠키 생성과 읽기

쿠키는 HttpServletResponse 객체를 통해 생성되며, HttpServletRequest 객체를 통해 읽을 수 있습니다.

쿠키 생성 예제

package com.bluesharehub;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/createCookie")
public class CreateCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        // 쿠키 생성
        Cookie userCookie = new Cookie("username", "BlueShare");
        userCookie.setMaxAge(60 * 60 * 24); // 쿠키 유효 기간: 1일
        response.addCookie(userCookie);

        // 응답 설정
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("<h1>쿠키가 생성되었습니다!</h1>");
    }
}
쿠키 생성 예제 실행 결과 화면

쿠키 읽기 예제

package com.bluesharehub;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;

@WebServlet("/readCookie")
public class ReadCookieServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        // 모든 쿠키 가져오기
        Cookie[] cookies = request.getCookies();
        String username = "Guest"; // 쿠키가 없을 경우 기본 값

        if (cookies != null) {
            for (Cookie cookie : cookies) {
                if ("username".equals(cookie.getName())) {
                    username = cookie.getValue();
                    break;
                }
            }
        }

        // 응답 설정
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("<h1>Hello, " + username + "!</h1>");
    }
}
쿠키 읽기 예제 코드 실행 결과 화면

2. 세션(Session) 관리

세션은 서버 측에서 사용자의 상태를 유지하는 방법입니다. 클라이언트가 서버와의 연결을 시작할 때마다 고유한 세션 ID가 부여되며, 이를 통해 사용자의 정보를 서버에 저장할 수 있습니다. 세션은 로그인 상태 유지, 장바구니, 사용자 설정 등에 활용됩니다.

세션 생성과 데이터 저장

세션은 HttpSession 객체를 사용하여 생성 및 관리됩니다.

세션 데이터 저장 예제

package com.bluesharehub;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/createSession")
public class CreateSessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        // 세션 생성 또는 기존 세션 가져오기
        HttpSession session = request.getSession();
        session.setAttribute("username", "BlueShare");

        // 응답 설정
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("<h1>세션이 생성되었습니다!</h1>");
    }
}
세션 데이터 저장 예제 코들 실행 결과 화면

세션 데이터 읽기

package com.bluesharehub;

import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

@WebServlet("/readSession")
public class ReadSessionServlet extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        // 세션 가져오기
        HttpSession session = request.getSession(false); // 세션이 없으면 null 반환
        String username = "Guest";

        if (session != null && session.getAttribute("username") != null) {
            username = (String) session.getAttribute("username");
        }

        // 응답 설정
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().write("<h1>Hello, " + username + "!</h1>");
    }
}

3. 쿠키와 세션의 차이점

쿠키는 클라이언트 측에 저장되며, 모든 요청 시 서버로 전송됩니다. 반면, 세션은 서버 측에 저장되며, 클라이언트는 세션 ID만을 통해 서버의 세션에 접근할 수 있습니다. 쿠키는 비교적 적은 양의 데이터를 장기간 저장할 때 유용하며, 세션은 보안이 중요한 데이터나 일시적인 데이터를 저장할 때 적합합니다.

쿠키와 세션 비교

  • 저장 위치: 쿠키는 클라이언트, 세션은 서버에 저장
  • 유효 기간: 쿠키는 설정한 시간까지 유지, 세션은 클라이언트가 연결을 종료하면 만료
  • 보안성: 세션이 쿠키보다 더 안전

결론

쿠키와 세션은 웹 애플리케이션에서 사용자의 상태를 관리하는 중요한 방법입니다. 각각의 사용 사례와 차이점을 잘 이해하고 적절한 상황에 맞게 선택하여 사용해야 합니다.

함께 보면 좋은 이전 게시글

위로 스크롤