세션(Session)의 개념
세션(Session) 은 사용자가 웹사이트에 접속해 있는 동안 서버가 사용자 정보를 기억하도록 해주는 기술입니다.
HTTP는 기본적으로 상태를 유지하지 않는(stateless) 프로토콜이기 때문에, 사용자의 로그인 상태나 장바구니 등 상태 유지를 위해 세션이 사용됩니다.
📌 쉽게 말해, 세션은 "서버가 사용자 상태를 기억하기 위한 수첩"입니다.
세션의 동작 원리
세션은 쿠키와 함께 동작합니다.
서버는 사용자에게 고유한 세션 ID를 부여하고, 이를 쿠키로 브라우저에 저장시킵니다.
이후 사용자가 요청할 때마다 해당 세션 ID를 통해 상태 정보를 조회합니다.
🔁 세션 처리 흐름도
- 사용자가 로그인 요청을 보냄
- 서버가 세션 ID를 생성하고, 사용자 정보를 저장
- 세션 ID를 응답 쿠키(Set-Cookie)로 브라우저에 전달
- 이후 요청마다 이 세션 ID가 포함되어 서버로 전송
- 서버는 세션 ID를 통해 사용자 상태를 조회함
쿠키와 세션의 차이점
항목 | 쿠키 (Cookie) | 세션 (Session) |
저장 위치 | 클라이언트 (브라우저) | 서버 |
보안성 | 낮음 (위조 가능성 있음) | 높음 (서버 관리) |
용량 제한 | 약 4KB | 서버에 따라 다름 |
유지 시간 | 설정된 만료시간 | 브라우저 종료 시까지 (기본) |
예시 | 자동 로그인, 언어 설정 | 로그인 상태, 장바구니 유지 |
📌쿠키는 클라이언트에 저장, 세션은 서버에 저장되는 것이 핵심 차이입니다.
Spring Boot로 세션 처리하기
스프링부트에서는 HttpSession을 통해 간단히 세션을 다룰 수 있습니다.
✅ 로그인 시 세션 저장 예시
@PostMapping("/login")
public String login(@RequestParam String username, HttpSession session) {
session.setAttribute("loginUser", username);
return "redirect:/home";
}
✅ 세션 값 확인 예시
@GetMapping("/home")
public String home(HttpSession session) {
String user = (String) session.getAttribute("loginUser");
if (user == null) return "redirect:/login";
return "home";
}
📌서버 재시작시 세션 정보가 초기화되므로, DB 연동이 필요합니다.
세션의 장단점
✅ 장점
- 서버에서 직접 관리 → 보안에 유리
- 민감한 데이터 저장 가능
- 다양한 인증 시스템과 연동 쉬움
❌ 단점
- 사용자 수 증가 시 서버 메모리 사용량 증가
- 세션 공유가 필요할 경우 복잡한 인프라 구성 필요
- 세션 ID 탈취에 대한 대비 필요
세션 보안은 선택이 아닌 필수입니다
세션은 사용자 인증의 핵심입니다.
하지만 제대로 관리하지 않으면 오히려 보안의 허점이 될 수 있습니다.
HTTPS, 세션 속성 설정, 세션 재발급, 만료 시간 관리, XSS/CSRF 방지 등을 반드시 구현해야 안전한 웹 애플리케이션을 만들 수 있습니다.
'Web' 카테고리의 다른 글
개발은 기술이 아니라 공감이다 (1) | 2025.06.25 |
---|---|
웹 쿠키란? 브라우저 쿠키, 세션, 캐시 차이까지 한 번에 정리 (2) | 2025.06.20 |
라이브러리와 프레임워크의 차이점 (1) | 2025.06.19 |
API란 무엇인가? (1) | 2025.06.18 |