
이 글은 2026년 05월 16일 작성된 글입니다.
오늘은 인터셉터 기반 인증/인가 처리와
스코프(scope), 세션, request 객체 활용까지 정리했다.
implementation("org.springframework.boot:spring-boot-starter-thymeleaf")
Spring MVC 기반 웹 프로젝트 환경을 구성했다.
registry.addInterceptor(new LoginInterceptor());
인터셉터를 등록하고 요청 흐름에서 로그를 확인했다.
public class LoginCheckInterceptor implements HandlerInterceptor {
}
로그인 여부를 검사하는 인터셉터를 추가했다.
<form method="post">
<input type="text" name="username">
<input type="password" name="password">
</form>
session.setAttribute("loginedMember", member);
session.invalidate();
세션 기반 로그인/로그아웃을 구현했다.
등 로그인 흐름을 보완했다.
@Scope("singleton")
기본적으로 스프링 빈은 싱글톤 스코프를 사용한다.
특징:
@SessionScope
브라우저(HTTP 세션)마다
별도의 객체가 생성된다.
@SessionScope(proxyMode = ScopedProxyMode.TARGET_CLASS)
세션 스코프 빈은 내부적으로 프록시 객체를 사용한다.
session.setAttribute("member", member);
사용자별 로그인 상태를 유지할 수 있게 되었다.
@RequestScope
public class Rq {
}
Rq 객체를 request 스코프로 변경했다.
request 스코프 객체는
하나의 요청 안에서 데이터를 공유하기 좋다.
활용 예시:
rq.getCurrentUrl();
현재 요청 주소를 쉽게 가져올 수 있도록 개선했다.
rq.setLoginedMember(member);
rq 객체에서 로그인 정보를 직접 관리하도록 변경했다.
rq 중심 구조로 리팩토링하면서
효과를 얻을 수 있었다.
기존:
Integer memberId
개선:
Member member
객체 기반 접근으로 코드가 더 직관적으로 바뀌었다.
| 스코프 | 범위 | 특징 |
|---|---|---|
| singleton | 컨테이너당 1개 | 기본 스코프 |
| prototype | 요청마다 새 객체 | 상태 독립 |
| application | ServletContext 단위 | 웹 전역 |
| session | 세션당 1개 | 사용자별 상태 |
| request | 요청당 1개 | 요청 임시 데이터 |
| 구분 | Singleton | Prototype |
|---|---|---|
| 생성 횟수 | 1개 | 매번 생성 |
| 메모리 사용 | 적음 | 많음 |
| 상태 공유 | O | X |