Notice
Recent Posts
Recent Comments
Link
250x250
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | |||
| 5 | 6 | 7 | 8 | 9 | 10 | 11 |
| 12 | 13 | 14 | 15 | 16 | 17 | 18 |
| 19 | 20 | 21 | 22 | 23 | 24 | 25 |
| 26 | 27 | 28 | 29 | 30 |
Tags
- MySQL
- 프로그래머스
- BACK-END
- 백엔드
- java
- node.js
- 코드테스트
- 서버
- JavaScript
- spring
- 자바스크립트
- 쿼리
- Next.js
- 오라클
- 스프링
- 코드 테스트
- web
- 알고리즘
- SQL
- 데이터베이스
- 정리
- jsp
- 디자인 패턴
- jpa
- 프런트엔드
- oracle
- 미니정리
- 프론트엔드
- 자바
- 스프링부트
Archives
- Today
- Total
참치코더의 꿈 메모장
Spring / 웹 스코프 및 의존 관계 주입 시기를 결정하는 Provider, Proxy 본문
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 또는 프록시로 해결 가능.
- 스코프 활용은 유지보수, 테스트, 배포가 까다로워질 수 있음.
- 실무에서는 싱글톤 중심으로 개발하고, 꼭 필요할 때만 스코프 확장.
728x90
'Spring' 카테고리의 다른 글
| Spring / HttpServletRequest JSON 데이터 받기 및 객체 변환 미니 정리 (0) | 2025.08.28 |
|---|---|
| Spring / Http 연결 및 서블릿 미니 정리 (1) | 2025.08.27 |
| Spring / 빈 스코프(싱글톤 스코프, 프로토타입 스코프) 정리 (2) | 2025.08.14 |
| Spring / 빈 생명주기 콜백(DI 설정 후, 빈 종료 전) 정리 (4) | 2025.08.13 |
| Spring / 애노테이션 만들기, 자동 or 수동 스프링 빈 등록 미니 요약 (1) | 2025.08.11 |
Comments