참치코더의 꿈 메모장

Spring / 웹 스코프 및 의존 관계 주입 시기를 결정하는 Provider, Proxy 본문

Spring

Spring / 웹 스코프 및 의존 관계 주입 시기를 결정하는 Provider, Proxy

참치깡 2025. 8. 19. 14:42
728x90

 

 

스프링 웹 스코프 정리

웹 스코프란?

  • 웹 스코프는 웹 환경에서만 동작한다.
  • 프로토타입과 달리 스프링이 종료 시점까지 관리하기 때문에 종료 메서드 호출이 가능하다.

웹 스코프의 종류

1. Request

HTTP 요청이 들어오고 나갈 때까지 유지되는 스코프.
요청마다 별도의 빈 인스턴스가 생성된다.

2. Session

HttpSession과 동일한 생명주기를 가진다.

3. Application

ServletContext와 동일한 생명주기를 가진다.

4. WebSocket

웹 소켓과 동일한 생명주기를 가진다.

Request 스코프 예시


@Component
@Scope(value = "request")
public class MyLogger {
    private String uuid;
    private String requestURL;

    public void log(String message) {
        System.out.println("[" + uuid + "] " + message);
    }
}
    

@Scope(value = "request") : HTTP 요청당 하나 생성되고, 요청이 끝나면 소멸된다.

Request 스코프 문제와 해결책

  • 싱글톤 빈은 애플리케이션 시작 시 생성되지만, request 스코프 빈은 요청이 와야 생성된다.
  • 따라서 서버 실행 시점에 주입하려고 하면 오류 발생.

해결 방법

  • Provider 사용
  • 프록시 사용

스코프와 Provider


@Autowired
private ObjectProvider<MyLogger> myLoggerProvider;

public void process() {
    MyLogger logger = myLoggerProvider.getObject();
    logger.log("비즈니스 로직 실행");
}
    
  • getObject() 호출 시점까지 생성 지연.
  • 같은 요청 내에서는 여러 번 호출해도 동일 빈 반환.

스코프와 프록시


@Component
@Scope(value = "request", proxyMode = ScopedProxyMode.TARGET_CLASS)
public class MyLogger {
    ...
}
    
  • 클래스: ScopedProxyMode.TARGET_CLASS
  • 인터페이스: ScopedProxyMode.INTERFACES
  • 프록시 객체는 진짜 빈 대신 주입되고, 요청 시 내부에서 실제 빈을 찾아 위임한다.
  • 클라이언트는 원본과 프록시를 구분할 필요 없이 사용 가능.

정리

  • 웹 스코프: request, session, application, websocket
  • request 스코프는 요청마다 빈을 생성/소멸하기 때문에 로그 처리 등에 유용.
  • 문제점은 Provider 또는 프록시로 해결 가능.
  • 스코프 활용은 유지보수, 테스트, 배포가 까다로워질 수 있음.
  • 실무에서는 싱글톤 중심으로 개발하고, 꼭 필요할 때만 스코프 확장.
© 2025 Spring Scope Study Note
728x90
Comments