서블릿을 활용한 쿠키 및 세션 데이터 처리 방법
웹 애플리케이션에서 사용자의 상태를 관리하는 방법 중 가장 많이 사용되는 두 가지 방식이 쿠키와 세션입니다. 서블릿을 이용하여 클라이언트의 정보를 저장하고, 이를 통해 사용자의 상태를 유지하는 방법에 대해 알아보겠습니다.
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만을 통해 서버의 세션에 접근할 수 있습니다. 쿠키는 비교적 적은 양의 데이터를 장기간 저장할 때 유용하며, 세션은 보안이 중요한 데이터나 일시적인 데이터를 저장할 때 적합합니다.
쿠키와 세션 비교
- 저장 위치: 쿠키는 클라이언트, 세션은 서버에 저장
- 유효 기간: 쿠키는 설정한 시간까지 유지, 세션은 클라이언트가 연결을 종료하면 만료
- 보안성: 세션이 쿠키보다 더 안전
결론
쿠키와 세션은 웹 애플리케이션에서 사용자의 상태를 관리하는 중요한 방법입니다. 각각의 사용 사례와 차이점을 잘 이해하고 적절한 상황에 맞게 선택하여 사용해야 합니다.
함께 보면 좋은 이전 게시글
- 서블릿에서 HttpServletRequest와 HttpServletResponse 사용법
- 서블릿 생명주기 메서드와 @PostConstruct, @PreDestroy 활용
- 서블릿에서 GET 요청 파라미터와 POST 폼 데이터 처리하기
- JSP에서 세션 관리: 세션 시작, 데이터 저장 및 불러오기, 타임아웃
- JSP 쿠키 사용하기: 생성, 읽기, 삭제 방법
이 글이 도움이 되셨다면 공유 부탁 드립니다.