728x90
Tomcat + Spring 간단 구조
Tomcat + Spring 구조는 위와 같다 = JAR(JVM) + Tomcat(Servlet) + Spring(Controller)
💡Spring Boot가 유저의 요청(Request)받고 -> 작업(Processing) 후 -> 응답(Response) 반환하는 절차
1. Request: 수많은 요청들을 Request Queue에 적재
2. Processing: Request Queue에서 하나를 가지고 수행 후
3. Response: 결과를 반환
이 설명만으로는 스프링 MVC가 어떻게 요청을 받고 작업하고 응답하는지 모름 (심화) 설명을 통해 자세히 알아보자
심화) Tomcat + Spring 실제 동작 과정
위에서 설명된 요청 -> 작업 -> 응답 절차를 Spring MVC에서 어떻게 처리하는지 더 자세히 알아보자
1. Request
수많은 요청들을 Connection Queue에 적재
- 모든 요청들을 Connection Queue에 적재하고, Thread Pool에서 할당 후 -> Catalina에게 전달
- OS레벨 Connection Queue: `acceptCount`
- Tomcat 레벨(Tomcat Connector 가 생성한) Connection Queue: `maxConnections`
- NIO Connector: 소켓 연결 + 요청을 ServletRequest 객체로 변환 후 Servlet에 전달
- Tomcat Thread Pool : `maxThreads`, `minSpareThreads` (멀티 스레드 처리)
- 자바 스레드 풀 관리 객체 사용 ThreadPoolExecutor
- Connection(TCP/IP) -> Catalina(Tomcat Engine) -> Context(Web Application) -> Servlet 에게 전달 (질문필요..)
- Catalina(Tomcat Engine) = Servlet Container
- Connection = 1 요청 : 1 스레드
2. Processing
Catalina(Tomcat Engine) 은 건네받은 ServletRequest 을 HttpServletRequest로 변환 후 Servlet할당
- Servlet 객체는 싱글톤: Servlet Contatiner는 각 종류의 Servlet당 한개의 객체만 사용
❓어떻게 수 많은 요청들을 단 하나의 객체로 커버 가능한가?
몇 개든지 N개의 스레드는 단 하나의 싱글톤 객체만 바라보게 된다(공유)
각 스레드는 각자 그들만의 Method Stack에서 메서드를 수행하기에 동시 + 격리 수행이 가능하다
그렇기에 모든 요청에 대해 동시적으로 Stateless and Thread-Safe 장점을 가질 수 있다.
- HandlerMapping: DispatcherServlet은 HandlerMapping을 통해 적합한 Controller 객체(Bean)를 찾고
- HandlerAdapter: DispatcherServlet 은 HandlerAdapter를 통해 찾은 Controllerr 객체(Bean)에게 요청을 넘겨 처리
3. Response
DispathcerServlet 처리 결과를 반환
728x90
'ASAC 웹 풀스택 > Spring Boot' 카테고리의 다른 글
Spring MVC 원리(3) - @Controller, MessageConverter (0) | 2024.10.08 |
---|---|
Spring MVC 원리(2) - Tomcat + Spring 상세구조 (0) | 2024.10.07 |
[Spring Boot] 기본 MVC 개발을 위한 Annotations 과 그 이해(1) - 컨트롤러로 정적/동적 페이지 반환, 타임리프 설정 변경 (1) | 2024.10.06 |
[Spring Boot] 기본 MVC 개발을 위한 Annotations 과 그 이해(1) - 컨트롤러 없이 정적 페이지 반환 (0) | 2024.10.06 |
Java 기본 문법 및 JVM 구성(14) - SOLID (3) | 2024.09.30 |