본문 바로가기
Backend - Java Spring/Spring Core

[SpringCore 핵심원리] 웹스코프

by VictorMeredith 2024. 2. 18.

1. 웹스코프

- 웹 환경에서만 동작

- 프로토타입과 다르게 스코프의 종료시점까지 스프링이 관리한다. (종료메서드 호출 됨)

 

- request : HTTP요청 하나가 들어오고 나갈때까지 유지되는 스코프

  : 각각의 요청마다 별도의 빈 인스턴스가 생성되고 관리된다.

- session : HTTP Session과 동일한 생명주기를 가지는 스코프

- application : 서블릿 컨텍스트와 동일한 생명주기를 가지는 스코프

- websocket : 웹소켓과 동일한 생명주기를 가지는 스코프

 

2. request 스코프의 예제

 

- Controller

 

- MyLogger에 저장하는 부분은 컨트롤러가 아닌 공통처리가 가능한 스프링 인터셉터, 서블릿 필터를 활용하는 것이 좋다.

- 웹과 관련된 정보는 서비스 계층에 넘어가면 안된다. 순수하게 유지하는게 좋다. 

 

- 맨 처음에 에러난다.

- 스프링이 뜨는 시점에 Http 요청이 없으므로 라이프사이클 주기와 안맞는다

- Provider 써야겠지 ? 

 

둘다 Provider 로 바꿔준다

 

- 이러고 여러번 요청하게 되면

 

- MyLogger는 각각 다른 인스턴스로 생성, 앞의 uuid 또한 http 요청에 따라 다르게 잘 생성되었다.

- 요청이 섞이더라도 각각의 http 요청에 따라 uuid가 유지된다.

 

3. 스코프와 프록시

- Provider도 귀찮은 개발자들이 만든거

- 프록시방식

proxy가 가짜로 만들어준다

- 이렇게 쓰면 Provider 안써도 됨!

- 적용 대상이 인터페이스가 아닌 클래스면 TARGET_CLASS

- 인터페이스면 INTERFACES 선택

- Proxy가 알아서 가짜 프록시 객체를 만들어서 등록해준다.

- 이 Proxy객체 덕분에 싱글톤 빈을 사용하듯 편리하게 쓴다.

- 진짜 객체 조회를 꼭 필요한 시점까지 지연해서 처리하는 점이 핵심

 

 

 

SpringCore 핵심원리 기본 끝! 

댓글