에이콘아카데미 회고/5회차) 자바기반 풀스택 개발자 양성과정
Servlet, JSP) 43번째 회고
유쨈미
2024. 5. 31. 09:38
1. Session
세션(Session)은 웹 애플리케이션에서 클라이언트와 서버 간의 상태를 유지하기 위한 방법이다.
HTTP는 무상태 프로토콜이기 때문에, 클라이언트와 서버 간의 상태를 유지하려면 별도의 메커니즘이 필요하다.
세션은 이러한 상태 유지를 가능하게 한다.
클라이언트가 HTTP요청을 보낼 때 쿠키에 세션 ID가 없다면 서버는 세션 ID를 생성해 쿠키에 담아서 돌려준다.
다시 HTTP 재요청을 할 때 쿠키를 보내기 때문에 서버에서는 세션 ID를 통해 클라이언트를 식별할 수 있다.
💻 Session 작동 원리
- 세션 생성
클라이언트가 웹 애플리케이션에 처음 요청을 보낼 때, 서버는 고유한 세션 ID를 생성하고
이를 클라이언트에게 응답 헤더 또는 쿠키를 통해 전달한다. - 세션 저장
서버는 세션 ID와 함께 관련된 데이터를 서버 측 저장소(메모리, 데이터베이스 등)에 저장한다.
이 데이터는 세션 객체에 저장된다. - 세션 유지
클라이언트는 이후의 요청마다 세션 ID를 서버에 전송한다.
서버는 세션 ID를 통해 해당 클라이언트의 세션 데이터를 찾아 처리한다. - 세션 만료
세션은 일정 시간이 지나면 만료되며, 사용자가 로그아웃하거나 서버가 재시작될 때도 만료될 수 있다.
💡 세션의 특징
- 웹 서버에 웹 컨테이너의 상태를 유지하기 위한 정보를 저장한다.
- 웹 서버에 저장되는 쿠키(세션 쿠키 / session cookie)이다.
- 브라우저를 닫거나, 서버에서 세션을 삭제했을 때만 삭제가 되기 때문에 쿠키보다 비교적 보안적으로 우수하다.
- 저장 데이터에 제한이 없다.(서버 용량 허용 범위 내에서)
- 각 클라이언트에 고유 세션 ID(Session ID)를 부여한다.
(중복 X) 세션 ID를 통해 클라이언트를 구분하여 각 요구에 맞는 서비스를 제공한다.
💡 Session의 장점
- 보안성
세션 데이터는 서버에 저장되므로 클라이언트가 직접 접근할 수 없다.
따라서 민감한 데이터를 저장하기에 적합하다. - 상태 유지
세션을 사용하면 사용자의 상태를 유지할 수 있어 사용자 맞춤형 경험을 제공할 수 있다.
💻 Session 사용 예시 코드 (Java Servlet)
1️⃣ Session 생성 및 데이터 저장
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession();
session.setAttribute("username", "john_doe");
response.getWriter().println("Session created and username set.");
}
2️⃣ Session 데이터 읽기
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(false);
if (session != null) {
String username = (String) session.getAttribute("username");
response.getWriter().println("Username: " + username);
} else {
response.getWriter().println("No session found.");
}
}
3️⃣ Session 무효화
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
HttpSession session = request.getSession(false);
if (session != null) {
session.invalidate();
response.getWriter().println("Session invalidated.");
} else {
response.getWriter().println("No session found.");
}
}
🚀 Cookie와 Session비교
항목 | 쿠키(Cookie) | 세션(Session) |
저장 위치 | 클라이언트 측 (브라우저) | 서버 측 |
보안성 | 낮음 (클라이언트가 쿠키를 수정할 수 있음) |
높음 (데이터가 서버에 저장됨) |
데이터 저장량 | 제한적 (브라우저마다 크기 제한 존재) |
무제한 (서버의 저장소 크기에 따름) |
유효 기간 | 쿠키 설정에 따라 다름 (특정 기간 동안 유지 가능) |
세션 설정에 따라 다름 (일반적으로 브라우저 종료 시 만료) |
사용 용도 | 로그인 상태 유지, 사용자 선호 설정 등 | 사용자 인증, 쇼핑 카트, 사용자 상태 유지 등 |
서버 부하 | 없음 (데이터가 클라이언트에 저장됨) |
있음 (데이터가 서버에 저장됨) |
전송 방법 | HTTP 헤더를 통해 자동 전송 | Session ID를 쿠키 또는 URL 파라미터를 통해 전송 |
주요 메소드 | setMaxAge(), getValue(), setValue() 등 | getSession(), setAttribute(), getAttribute() 등 |
[서블릿/JSP] 세션(session)의 마지막 접근시간 및 유효시간에 대해
참고글 [서블릿/JSP] 세션(Session)이란? 세션 생성하는 방법 및 세션 객체 설명 [서블릿/JSP] 세션(session)을 명시적으로 종료시키는 방법 세션의 자동 종료 세션은 지정한 유효시간만큼 접근하지 않
dololak.tistory.com
- 출처 : dololak