본문 바로가기
Dev/SpringBoot

JSP/Servlet의 3가지 Scope

by 컴포넌트설계자 2026. 5. 26.
# JSP / Servlet

세션과 쿠키, 그리고 Scope
— 웹이 나를 기억하는 방법

HTTP 무상태 프로토콜의 한계를 극복하는 방법

📌 이 글에서 다루는 내용
① HTTP가 stateless임에도 로그인이 유지되는 원리 (JSESSIONID)
② JSP/Servlet의 3가지 Scope (request / session / application)
③ setAttribute, EL 문법 실전 코드

웹은 기본적으로 나를 기억하지 못한다

HTTP는 stateless(무상태) 프로토콜이다.
요청을 하고 응답을 받으면 그것으로 끝 — 서버는 이전에 누가 왔었는지 기억하지 않는다.

그렇다면 로그인 후 페이지를 이동해도 "나"로 인식되는 건 어떻게 가능한 걸까?
바로 쿠키(Cookie)세션(Session)의 조합 덕분이다.

JSESSIONID — 서버가 나를 식별하는 열쇠

🖥 View (브라우저)
① 최초 응답 시 수신한 JSESSIONID
쿠키에 저장

③ 이후 요청마다 쿠키에 담긴
JSESSIONID를 함께 전송
① 최초 response에
JSESSIONID 포함
③ 이후 request마다
cookie 전송
⚙️ WAS (서버)
② 쿠키에 JSESSIONID가 없으면
→ 새 세션 생성 후 발급
   있으면 → 기존 유저로 판단

서버 메모리에 세션 정보를 저장,
JSESSIONID로 조회 가능

핵심은 서버가 세션을 메모리에 저장하고,
브라우저는 그 세션에 접근할 수 있는 키(JSESSIONID)만 쿠키로 보관한다는 점이다.
덕분에 페이지를 이동해도 서버는 "이 키를 가진 사람이구나"하고 나를 기억할 수 있다.


Scope — 데이터를 얼마나 넓게 공유할 것인가

JSP/Servlet은 데이터를 저장하고 공유하기 위한 세 가지 Scope 영역을 제공한다.
Scope가 클수록 더 많은 요청, 더 많은 사용자가 데이터를 공유한다.

request
가장 좁음
<
session
사용자 단위
<
application
가장 넓음

Scope 객체 생존 범위 활용 예
request HttpServletRequest 요청 1건이 끝나면 소멸 폼 데이터, 컨트롤러→뷰 전달값
session HttpSession 세션 만료 전까지 유지 로그인 사용자 정보
application ServletContext 서버 실행 중 계속 유지 공지사항, 방문자 수 등 전역 데이터

데이터 저장 — setAttribute / getAttribute

세 Scope 모두 동일한 방식으로 데이터를 읽고 쓴다.

// ① request scope — 요청 1건 동안만 유지 request.setAttribute("board", boardObj); request.getAttribute("board"); // ② session scope — 세션이 살아있는 동안 유지 session.setAttribute("loginUser", user); session.getAttribute("loginUser"); // ③ application scope — 서버가 켜져 있는 동안 유지 application.setAttribute("visitCount", count); application.getAttribute("visitCount");

JSP EL(Expression Language)로 접근하기

JSP에서는 Scope 이름을 prefix로 붙여 EL로 바로 접근할 수 있다.

<!-- request.setAttribute("board", ...) 와 동일 --> ${requestScope.board} <!-- session.setAttribute("loginUser", ...) 와 동일 --> ${sessionScope.loginUser} <!-- application.setAttribute("visitCount", ...) 와 동일 --> ${applicationScope.visitCount} <!-- Scope prefix 생략 시: request → session → application 순으로 자동 탐색 --> ${board}
💡 Scope 선택 원칙
데이터는 필요한 만큼만 작은 Scope에 담아라.
불필요하게 큰 Scope를 사용하면 메모리 낭비와 데이터 충돌의 위험이 생긴다.

정리

  • HTTP는 stateless라 기본적으로 요청 간 상태를 기억하지 못한다.
  • 서버는 세션을 메모리에 저장하고, 브라우저는 JSESSIONID 쿠키로 세션을 식별한다.
  • JSP/Servlet은 request < session < application 세 가지 Scope를 제공한다.
  • 모두 setAttribute / getAttribute로 읽고 쓰며, JSP에서는 EL(${requestScope.xxx})로 접근한다.
  • 적절한 Scope 선택이 좋은 웹 애플리케이션 설계의 기초다.

'Dev > SpringBoot' 카테고리의 다른 글

[SpringSecurity] 실습#2  (0) 2026.05.27
[SpringSecurity] 실습#1  (0) 2026.05.27