Sunday Study

Dispatcherservlet 2

Dispatcher Servelt (2)

논의 -1 ( 톰캣과 멀티 쓰레드 )

[1분 개발터뷰 대용량 트래픽을 처리하는 방법](https://www.youtube.com/shorts/JT1Bea43mCc)

img

img

결론

논의 -2

→ 톰캣 인스턴스와 Spring Bean의 연관관계

배경 지식

요청에 대한 쓰레드들은 싱글톤 패턴의 Spring Bean을 공유하여 사용한다.

Tomcat의 Instance는 각각 Acceptor Thread 한 개가 있고, Dedicated Thread Pool을 보유하고 있다. 상태가 없는 객체를 공유하기 때문에 별도의 동기화 과정은 필요하지 않다. 따라서 컨트롤러가 수십회건 수만회건 요청을 받아도 문제가 생기지 않는다.

논의 -3

→ 서블릿은 왜 Request - Per - Thread 일까? , Connection - Per - Thread가 아닌 이유 ?

-

Thread-per-request를 쓰면 request가 진행될 때만 쓰레드가 개입을 하니까, 서비스는 수만명이 사용한다고 하더라도 현재 사용중인 요청에만 쓰레드를 투입시키면 되니까

→ 정적인 데이터 처리의 정의 ?

DispatcherServlet 의 Handler Mapping 방식

BeanNameUrlHandlerMapping

ControllerClassNameHandlerMapping

SimpleUrlHandlerMapping

DefaultAnnonationHandlerMapping

→ 였지만 ….

Deprecated.

as of Spring 3.2, in favor of [RequestMappingHandlerMapping](https://docs.spring.io/spring-framework/docs/4.3.7.RELEASE_to_4.3.8.RELEASE/Spring%20Framework%204.3.8.RELEASE/org/springframework/web/servlet/mvc/method/annotation/RequestMappingHandlerMapping.html)

RequestMappingHandlerMapping

  1. RequestMappingHandlermappig 빈 생성
  2. 빈 초기화 하면서 initHandlerMethods 호출
  3. 빈 팩토리에 등록되어 있는 빈들 중 @Controller 또는 @RequestMapping 를 가지고 있는 빈을 가져온다
  4. 핸들러가 될 수 있는 모든 메서드를 추출
  5. 추출된 메서드를 registry 에 등록