[Spring] 09. 스프링 웹 스코프 (Web Scopes)
웹 애플리케이션 환경에서 빈(Bean)의 생명주기를 결정하는 웹 스코프(Web Scopes)의 종류와 특징을 정리했습니다.
1. 요청 스코프 (Request Scope)
@RequestScope: 찰나의 순간을 위한 객체
- 메커니즘: 각 HTTP 요청마다 새로운 빈 인스턴스가 생성됩니다.
- 특징:
- 효율적인 메모리 관리: 요청 처리가 끝나면 즉시 소멸(GC)되어 메모리 관리에 유리합니다.
- 동시성 안전: 각 요청(Thread)마다 독립된 객체를 가지므로 데이터가 섞일 걱정이 없습니다.
- 사용 예시: 로그인 시도 시 아이디/비밀번호를 임시로 담아두는
LoginProcessor.
- 포인트: 단순히 HTML을 여는 GET 요청과 데이터를 처리하는 POST 요청 사이에서 데이터를 안전하게 전달하기 위해 사용합니다.

2. 세션 스코프 (Session Scope)
@SessionScope: 나만을 기억하는 사물함
- 메커니즘: HTTP 세션(브라우저 단위)별로 인스턴스가 생성됩니다.
- 특징:
- 이중적 성격: 동일 클라이언트에게는 싱글톤처럼 작동하여 데이터를 유지하고, 서로 다른 클라이언트에게는 프로토타입처럼 작동하여 데이터를 격리합니다.
- 주의점: 한 사용자가 브라우저 창을 여러 개 띄워 동시에 요청을 보낼 경우 동시성 문제가 발생할 수 있으므로 상태 관리에 유의해야 합니다.
- 사용 예시: 로그인 상태 유지(회원 정보 보관), 쇼핑몰 장바구니.

3. 애플리케이션 스코프 (Application Scope)
@ApplicationScope: 앱의 시작부터 끝까지 공유되는 전역 공간
- 메커니즘: 서블릿 컨텍스트(Servlet Context) 내에서 단 하나의 인스턴스만 존재합니다.
- 특징:
- 사실상 싱글톤 스코프와 유사하나, 웹 환경(ServletContext)에 종속됩니다.
- 위험성: 모든 유저가 하나의 객체를 공유하므로 불변(Immutable) 속성을 유지하는 것이 원칙입니다. (필드 값 변경 시
AtomicInteger 등 고려)
- 메모리에 계속 상주하므로 대량의 데이터 저장은 피해야 합니다.
- 대안: 프로덕션 수준의 설계에서는 공유 데이터를 메모리보다 데이터베이스(DB)에 저장하는 것이 권장됩니다.
💡 요약
- Request: 요청마다 생성, 동시성 안전, 임시 데이터 처리용.
- Session: 브라우저마다 생성, 사용자 상태 유지(로그인/장바구니).
- Application: 앱 전체 공유, 전역 설정용, DB 저장 방식을 우선 고려할 것.
웹 스코프 구현 로그인 프로젝트
https://github.com/woojin-archive/Spring_Study.git
#Spring #WebScope #RequestScope #SessionScope #ApplicationScope #백엔드공부