TIL

[Spring] MVC에서 자주 사용하는 객체와 어노테이션 정리

chungmani 2026. 7. 8. 23:27

 

로그인 기능을 구현하면서 HttpServletRequest, HttpSession, @RequestHeader, @SessionAttribute가 자주 등장한다. 이름도 비슷하고 역할도 헷갈리기 쉬워서 각각의 역할을 정리해보았다.

 


1. HttpServletRequest

무엇인가?

클라이언트(브라우저)가 서버로 보낸 HTTP 요청 전체를 담고 있는 객체이다.

쉽게 말하면, "사용자가 서버에게 보낸 모든 정보가 들어있는 상자" 라고 생각하면 된다.

 

예를 들어 사용자가

POST /login

을 요청했다면,

  • 요청 URL
  • 요청 방식(GET, POST)
  • 요청 헤더
  • 쿠키
  • 세션
  • Body(JSON)

등 모든 정보를 HttpServletRequest가 가지고 있다.

사용할 수 있는 예시

request.getParameter(...)
request.getHeader(...)
request.getSession()
request.getCookies()

 

 

요청과 관련된 거의 모든 정보를 얻을 수 있는 객체이다.

 


2. HttpSession

무엇인가?

세션은 "사용자 한 명의 정보를 서버가 잠시 기억해두는 공간"이다.

 

예를 들어 로그인을 하면

사용자 A 로그인 성공

이라는 사실을 서버가 기억해야 한다.

이때 사용하는 것이 Session이다.

 

예시

Session
 ├── loginUser
 └── cart

로그인 성공 후

loginUser → 사용자 정보

 

를 저장해두면, 이후 요청에서는

이 사용자는 로그인한 사람이다.

라고 판단할 수 있다.

 

자주 사용하는 메서드

값 저장

session.setAttribute("loginUser", sessionUser);

값 조회

session.getAttribute("loginUser");

삭제

session.invalidate();

 


3. @RequestHeader

무엇인가?

HTTP 요청 헤더의 값을 바로 받아오는 어노테이션이다.

 

예를 들어

Authorization: Bearer xxxx

또는

User-Agent

같은 Header 값을 사용할 때 사용한다.

 

예시

@GetMapping
public void test(
    @RequestHeader("User-Agent") String userAgent
) {

}

브라우저가 보낸

User-Agent

값이 그대로 들어온다.

 

언제 사용할까?

대표적으로

  • JWT 토큰
  • API Key
  • 브라우저 정보
  • Content-Type

등을 읽을 때 사용한다.

 


4. @SessionAttribute

무엇인가?

Session에 저장되어 있는 값을 바로 꺼내오는 어노테이션이다.

예를 들어 로그인 시

session.setAttribute("loginUser", sessionUser);

를 저장했다면 컨트롤러에서는

@SessionAttribute("loginUser")
SessionUser sessionUser

 

만으로 바로 가져올 수 있다.

 

 

예시

@PostMapping("/logout")
public void logout(
    @SessionAttribute("loginUser") SessionUser user
) {

}

별도로

session.getAttribute(...)

를 호출하지 않아도 된다.

 

required 옵션

@SessionAttribute(
    name = "loginUser",
    required = false
)

처럼 사용할 수 있다.

required = true (기본값)

세션이 없으면 예외 발생

required = false

세션이 없으면

null

이 들어온다.

 

그래서

if (sessionUser == null) {
    ...
}

같은 처리가 가능하다.

 


HttpServletRequest vs HttpSession

HttpServletRequestHttpSession

요청 정보를 담는다 사용자 정보를 기억한다
요청마다 새로 생성 로그인 동안 유지
Header, Body, URL 등을 읽는다 로그인 정보 등을 저장한다

 


HttpSession vs @SessionAttribute

둘 다 Session을 사용하지만 역할이 조금 다르다.

HttpSession

직접 저장하거나 직접 꺼낼 때 사용한다.

session.setAttribute(...)

session.getAttribute(...)

 

@SessionAttribute

이미 Session에 저장된 값을

자동으로 꺼내준다.

@SessionAttribute("loginUser")

처럼 사용할 수 있다.

 


한눈에 정리

기능사용하는 것

요청 전체 보기 HttpServletRequest
로그인 정보 저장 HttpSession
Header 읽기 @RequestHeader
Session 값 자동 조회 @SessionAttribute

 

기억하기 쉬운 비유

  • HttpServletRequest → 택배 상자 (사용자가 보낸 모든 정보)
  • HttpSession → 사물함 (사용자 정보를 잠시 보관)
  • @RequestHeader → 택배 상자의 송장만 확인
  • @SessionAttribute → 사물함에서 물건을 바로 꺼내오기