chanwoo23 2025. 4. 8. 17:01

🟦 세션(Session)이란?

사용자(브라우저)와 서버 사이의 "상태(state)"를 유지하기 위해 서버에서 관리하는 저장소입니다.

즉, 서버가 사용자를 구분해서 로그인 정보, 장바구니 등 중요한 상태 데이터를 기억하기 위해 사용됩니다.


✅ 세션은 왜 필요한가?

  • HTTP는 Stateless → 요청을 주고받을 때 누가 누구인지 모름
  • 사용자가 로그인했는지, 어떤 글을 썼는지 서버가 기억할 수 없으면 불편
  • 그래서 서버가 사용자를 구분해서 기억하기 위한 공간이 바로 Session

🔁 세션의 동작 원리

  1. 클라이언트가 서버에 처음 접속하면,
  2. 서버는 세션 객체를 생성하고 고유 ID(JSESSIONID)를 발급함
  3. 서버는 이 ID를 쿠키를 통해 클라이언트에게 전달
  4. 이후 클라이언트가 요청할 때마다 이 ID를 함께 전송
  5. 서버는 이 ID로 해당 사용자의 세션 정보를 조회

✅ 요약: 세션은 서버에, ID는 클라이언트에 (JSESSIONID 쿠키로)


✅ 자바에서 세션 사용법

🔹 1. 세션에 값 저장

java
HttpSession session = request.getSession(); session.setAttribute("userId", "kim123");

🔹 2. 세션에서 값 꺼내기

java
 
HttpSession session = request.getSession(); String id = (String) session.getAttribute("userId");

🔹 3. 세션 무효화 (로그아웃 등)

java
 
session.invalidate(); // 세션 전부 제거

✅ 세션 사용 예제

java
 
@WebServlet("/login") public class LoginServlet extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String id = request.getParameter("id"); String pw = request.getParameter("pw"); if ("kim".equals(id) && "1234".equals(pw)) { HttpSession session = request.getSession(); session.setAttribute("userId", id); // 세션에 로그인 정보 저장 response.sendRedirect("main.jsp"); } else { response.sendRedirect("login.jsp?error=1"); } } }

✅ 세션의 특징

항목설명
저장 위치 서버 (메모리)
식별 방식 JSESSIONID (클라이언트가 가지고 있음)
유효 시간 기본 30분 (설정 가능)
정보 보안 쿠키보다 훨씬 안전 (서버에 저장됨)
용도 로그인 유지, 장바구니, 권한 확인 등
삭제 방법 session.invalidate()

🆚 쿠키 vs 세션 비교

항목쿠키(Cookie)세션(Session)
저장 위치 클라이언트 (브라우저) 서버 (메모리)
저장 형태 key-value key-value
보안 낮음 (변조 가능) 높음 (서버 내부)
유지 조건 만료시간까지 유효시간 또는 브라우저 종료 전까지
민감 정보 저장 ❌ 위험함 ✅ 상대적으로 안전
식별 방법 클라이언트가 직접 값 전달 서버가 JSESSIONID로 식별

✅ 세션 유지 시간 설정 방법

xml
 
<!-- web.xml --> <session-config> <session-timeout>30</session-timeout> <!-- 단위: 분 --> </session-config>

⚠️ 세션 주의사항

  • 서버 메모리를 사용하므로 너무 많은 정보 저장 금지
  • 세션 유지 시간 설정 중요 (보안, 성능 모두 영향)
  • 클러스터링 환경(서버 여러 개)에서는 세션 동기화가 필요

✅ 마무리 요약

키워드설명
세션이란 서버가 사용자의 상태를 기억하는 저장 공간
식별방식 JSESSIONID라는 쿠키를 통해 연결
저장/조회 setAttribute(), getAttribute()
보안 쿠키보다 안전 (서버에만 저장됨)
용도 로그인 상태 유지, 장바구니 등