이 글은 2026년 05월 16일 작성된 글입니다.

오늘은 인터셉터 기반 인증/인가 처리와
스코프(scope), 세션, request 객체 활용까지 정리했다.


1. 인터셉터 프로젝트 세팅

implementation("org.springframework.boot:spring-boot-starter-thymeleaf")

Spring MVC 기반 웹 프로젝트 환경을 구성했다.


2. 인터셉터 등록

registry.addInterceptor(new LoginInterceptor());

인터셉터를 등록하고 요청 흐름에서 로그를 확인했다.


3. 로그인 체크 인터셉터

public class LoginCheckInterceptor implements HandlerInterceptor {
}

로그인 여부를 검사하는 인터셉터를 추가했다.


4. 로그인 폼 구현

<form method="post">
    <input type="text" name="username">
    <input type="password" name="password">
</form>

5. 로그인 / 로그아웃 처리

session.setAttribute("loginedMember", member);
session.invalidate();

세션 기반 로그인/로그아웃을 구현했다.


6. 로그인 기능 보완

  • 로그인 실패 처리
  • 세션 유지
  • 리다이렉트 흐름 개선

등 로그인 흐름을 보완했다.


7. 싱글톤 스코프

@Scope("singleton")

기본적으로 스프링 빈은 싱글톤 스코프를 사용한다.

특징:

  • 컨테이너당 1개
  • 메모리 효율적
  • 상태 공유 주의 필요

8. 세션 스코프

@SessionScope

브라우저(HTTP 세션)마다
별도의 객체가 생성된다.


9. 세션 스코프와 프록시

@SessionScope(proxyMode = ScopedProxyMode.TARGET_CLASS)

세션 스코프 빈은 내부적으로 프록시 객체를 사용한다.


10. 세션에 로그인 정보 저장

session.setAttribute("member", member);

사용자별 로그인 상태를 유지할 수 있게 되었다.


11. Request 스코프

@RequestScope
public class Rq {
}

Rq 객체를 request 스코프로 변경했다.


12. Request 스코프 특징

request 스코프 객체는
하나의 요청 안에서 데이터를 공유하기 좋다.

활용 예시:

  • 인터셉터
  • 컨트롤러
  • 템플릿

13. 현재 URL 조회

rq.getCurrentUrl();

현재 요청 주소를 쉽게 가져올 수 있도록 개선했다.


14. rq에 로그인 정보 저장

rq.setLoginedMember(member);

rq 객체에서 로그인 정보를 직접 관리하도록 변경했다.


15. rq 기반 코드 개선

rq 중심 구조로 리팩토링하면서

  • 중복 제거
  • 로그인 처리 통합
  • 코드 가독성 향상

효과를 얻을 수 있었다.


16. rq에서 Member 객체 직접 관리

기존:

Integer memberId

개선:

Member member

객체 기반 접근으로 코드가 더 직관적으로 바뀌었다.


17. 스코프 종류 정리

스코프범위특징
singleton컨테이너당 1개기본 스코프
prototype요청마다 새 객체상태 독립
applicationServletContext 단위웹 전역
session세션당 1개사용자별 상태
request요청당 1개요청 임시 데이터

18. Singleton vs Prototype

구분SingletonPrototype
생성 횟수1개매번 생성
메모리 사용적음많음
상태 공유OX

✅ 정리

  • 인터셉터를 사용하면 공통 인증/인가 처리를 효율적으로 관리할 수 있다.
  • 세션을 이용하면 사용자별 로그인 상태를 유지할 수 있다.
  • 세션 스코프와 request 스코프를 통해 상황에 맞는 객체 생명주기를 사용할 수 있다.
  • request 스코프 객체는 요청 단위 데이터 공유에 특히 유용하다.
  • rq 객체를 중심으로 로그인 정보를 관리하면서 코드 구조를 더 깔끔하게 정리할 수 있었다.

0개의 댓글