ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 스코프와 Provider
    spring/스프링 핵심 원리 강의 내용 정리 2023. 12. 12. 20:44

    첫번째 해결방안은 앞서 배운 Provider를 사용하는 것이다
    간단히 ObjectProvider를 사용해보자

     

    이렇게 Provider를 사용하여 빈을 찾아올 수 있는 객체를 만들고, .getObject를 사용하여 myLogger를 입력했다

    하지만 여전히 동일한 오류가 나는 모습이다

     

     

    LogDemoService 에서도 동일하게 Provider 를 사용하고 다시 실행하니 성공하는 모습이다

     

     

    웹 애플리케이션에도 내가 반환한 문구가 출력되고 있다

    다시 로그를 살펴보자

     

     

    밑에 로그가 추가됐다

    객체가 생성되고, 소멸하는 것 까지도 확인했다

    중요한건 [ ] 안에 있는 uuid 이다

    새로고침을 반복적으로 해보자 (클라이언트 요청)

     

     

    이 처럼 요청별로 고유한 uuid를 받아 객체마다 따로 관리를 해주는 모습이다

    스레드를 걸어서 한번 요청이 뒤엉키도록 만들어보자

     

     

    이렇게 요청 사이에 다른 요청이 끼어들어도 객체가 유지되는 것을 알 수 있다

     

    - ObjectProvider 덕분에 ObjectProvider.getObject() 를 호출하는 시점까지 request scope 빈의
     생성을 지연할 수 있다
    - ObjectProvider.getObject() 를 호출하시는 시점에는 HTTP 요청이 진행중이므로 request scope 빈
     의 생성이 정상 처리된다
    - ObjectProvider.getObject() 를 LogDemoController , LogDemoService 에서 각각 한번씩 따로
     호출해도 같은 HTTP 요청이면 같은 스프링 빈이 반환된다. 내가 직접 이걸 구분하려면 얼마나 힘들까 ㅠㅠ…

    이 정도에서 끝내도 될 것 같지만... 개발자들의 코드 몇자를 더 줄이려는 욕심은 끝이 없다
    (Provider 도 귀찮았나보다)

    다음 시간에 알아보자

Designed by Tistory.