무상태(stateless)에서 기억하는 방법
- HTTP는 기본적으로 무상태이므로 과거의 요청기록을 알 수 없다. HTTP가 무상태를 선택한 가장 큰 이유는 적은 자원으로 다수의 요청(Request)를 처리할 수 있기 때문이다. 하지만 과거의 방문 기록을 추적하는 기법이 필요하게 되었고 이 기법들을 세션 트랙킹(session tracking) 이라고 한다.
Servlet / Web Development
HTTP 무상태(Stateless)를 극복하는 기술: 쿠키, 세션, 필터, 리스너
서버가 클라이언트를 기억하고 관리하는 방법
💡 핵심 개념: HTTP는 무상태(Stateless) 프로토콜입니다. 적은 자원으로 많은 요청을 처리할 수 있는 장점이 있지만, 과거 요청을 기억하지 못한다는 단점도 있죠. 이를 해결하기 위해 사용되는 세션 트랙킹(Session Tracking) 기술들을 정리해 보았습니다
1. 쿠키(Cookie): 세션 트랙킹의 기본
쿠키는 문자열로 만들어진 데이터 조각으로, 서버와 브라우저 사이에서 요청/응답 시 주고받는 데이터입니다. name = value 구조를 가집니다.
- 확인 방법: 브라우저 개발자 도구(F12) → 'Application' 메뉴 → 'Cookies'에서 직접 확인할 수 있습니다.
- 쿠키 생성: 서버에서
new Cookie("key", "value")와 같은 방식으로 생성하여 클라이언트에 전달합니다.
2. 세션(Session)을 통한 상태 유지
쿠키가 브라우저에 저장된다면, 세션은 서버 측의 세션 저장소에 정보를 보관합니다.
- 상태 유지: 로그인에 성공하면 서버는 세션 저장소에 사용자 정보를 담고, 이에 접근할 수 있는 세션 ID를 쿠키에 담아 보냅니다.
- 서블릿 컨텍스트와의 차이: 서블릿 컨텍스트는 애플리케이션 전체에서 공유되는 저장소이고, 세션은 각 클라이언트(사용자)마다 개별적으로 생성되는 저장소입니다.


3. 효율적인 로그인 체크 방식
세션을 통한 방식
각 서블릿이나 컨트롤러에서 session.getAttribute("user")를 호출하여 로그인 여부를 일일이 확인하는 방법. 코드가 중복된다는 단점이 있다.

필터(Filter)를 통한 방식 (권장)
서블릿에 요청이 닿기 전, 필터에서 먼저 세션을 검사. 로그인하지 않은 사용자는 컨트롤러까지 가지 못하도록 입구에서 차단할 수 있어 코드 중복이 사라지고 관리가 좋아짐.

4. 리스너(Listener): 이벤트 감시자
서블릿 API에는 특정 사건(이벤트)이 발생하면 자동으로 실행되는 리스너(Listener) 인터페이스가 있습니다.
- 특징: 세션이 생성되거나 소멸될 때, 혹은 컨텍스트가 초기화될 때 등 특정한 타이밍에 로직을 실행.
- 비유: 센서등과 같습니다. 누군가(이벤트) 지나가면 자동으로 불이 켜지는 것과 비슷한 원리.
정리
1. 쿠키: 브라우저에 저장되는 문자열 데이터 조각.
2. 세션: 서버 저장소에서 클라이언트를 식별하여 상태를 유지하는 기법.
3. 필터: 공통적인 로그인 체크 로직을 한곳에서 처리하는 도구.
4. 리스너: 웹 애플리케이션 내 특정 이벤트 발생 시 자동으로 동작하는 인터페이스.
'Spring > spring 숙련' 카테고리의 다른 글
| RestTemplate (0) | 2026.04.09 |
|---|---|
| Vaildation (1) | 2026.04.09 |
| 쿠키(Cookie)와 세션(Session) (1) | 2026.04.09 |
| 인증(Authentication) vs 인가(Authorization) (0) | 2026.04.09 |
| Bean 수동 등록, 중복 빈 해결하기 (1) | 2026.04.09 |