ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 웹 스코프
    스프링/HTTP 기본 지식 2023. 2. 4. 15:40

    웹 스코프 종류

     

    request : HTTP 요청 하나가 들어오고 나갈 때까지 유지되는 스코프, 각각의 HTTP 요청마다 별도의 빈 인스턴스가 생성되고, 관리된다.

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

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

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

     

    request를 제외한 나머지는 웹 공부를 할 때 나중에 다시 정리하도록 하고 여기에서는 request 위주로 공부를 진행하겠다.

     

    prototype은 만들고 초기화만 관여했지만 request는 요청이 들어왔다가 나갈때까지 계속 관여한다.

     

    @Scope(value = "request")
    public class MyLogger {
    
        private String uuid;
    
        private String requestURL;
    
        public void setRequestURL(String requestURL) {
            this.requestURL = requestURL;
        }
    
        public void log(String message) {
            System.out.println("[" + uuid + "]" + "[" + requestURL + "] " + message);
        }
    
        @PostConstruct
        public void init() {
            uuid = UUID.randomUUID().toString();
            System.out.println("[" + uuid + "] request scope bean create: " + this);
        }
    
        @PreDestroy
        public void close() {
            System.out.println("[" + uuid + "] request scope bean close: " + this);
        }
    }

    @Scope (value = "request")를 통해 request Scope로 설정할 수 있다.

    uuid라는 고유의 id 값을 통해 웹 사이트에 고객이 요청을 하면 어떤 빈이 요청되는지 확인해 볼 것이다.

     

    @Controller
    @RequiredArgsConstructor
    public class LogDemoController {
    
        private final LogDemoService logDemoService;
        private final ObjectProvider<MyLogger> myLoggerProvider;
        // 윗 줄은 컨테이너에 요청해서 provider를 계속 만들어주게 한다.
    
    
        @RequestMapping("log-demo")
        @ResponseBody
        public String logDemo(HttpServletRequest request) {
            String requestURL = request.getRequestURI().toString();
            MyLogger myLogger = myLoggerProvider.getObject();
            myLogger.setRequestURL(requestURL);
    
            myLogger.log("controller test");
            logDemoService.logic("testId");
            return "OK";
        }
    }
    

    컨트롤러를 만들어서 localhost:8080/log-demo라는 웹을 구축하고 새로 입력할 때마다 나오는 코드는 아래와 같다

    @Service
    @RequiredArgsConstructor
    public class LogDemoService {
    
        private final ObjectProvider<MyLogger> myLoggerProvider;
    
        public void logic(String id) {
            MyLogger myLogger = myLoggerProvider.getObject();
            myLogger.log("service id = " + id);
        }
    }
    

    LogDemo.service 클래스

    출력코드를 보면 생성을 하고 종료를 하기까지 id가 같은 것을 확인할 수 있다. request 스코프는 생성을 했을 때부터 종료가 될때 까지 관리를 해주는 스코프이며, 고객의 요청이 있을 때마다 새로운 고유 빈을 만들어서 반환해준다는 사실을 알 수 있다.

    '스프링 > HTTP 기본 지식' 카테고리의 다른 글

    HTTP(4) - HTTP 상태코드  (0) 2023.02.06
    HTTP(3) - API 설계 예  (0) 2023.02.05
    HTTP(2) - 클라이언트에서 서버로 데이터 전송  (0) 2023.02.05
    HTTP(1) - HTTP 메서드  (0) 2023.02.05
    provider와 프록시  (0) 2023.02.04
Designed by Tistory.