1. 클라이언트 요청 2. DispatcherServlet 가 요청을 수신 3. HandlerMapping으로 컨트롤러 매핑 4. HandlerAdapter로 실제 실행 5. 컨트롤러(@Controller, @RestController) 실행 6. 뷰 리졸버 또는 JSON 응답 처리 7. 응답 반환
DispatcherServlet 은 Spring 의 Front Controller 패턴의 구현체이자 HTTP 요청의 진입 지점이다. HttpServletRequest 객체로 변환하고, Servlet 객체에 전달하는 역할을 한다.스레드 생성량이 많아지면 그 만큼 메모리를 차지하고, Context Switch 가 많이 발생한다.


ServerSocket.accept()) PollerEvent Queue 를 파헤치는 글은 여기
maxConnection 까지 연결을 수락하고, Selector 를 통해 채널을 관리하므로 작업 큐 사이즈(acceptCount)와 관계없이 추가로 커넥션을 refuse하지 않고 받아놓을 수 있다.org.apache.coyote.Request 객체와 org.apache.coyote.Response 객체를 만든다. (Tomcat의 저수준 HTTP 파싱 결과를 담는 클래스)CoyoteAdapter.service() 을 호출하여 Http11Processor 에서 받은 객체를 Servlet API 객체로 감싸는 작업을 한다. 여기서 우리가 흔히 사용하는 HttpServletRequest, HttpSerlvetResponse 객체가 만들어진다.@Override
public void service(org.apache.coyote.Request req, org.apache.coyote.Response res) throws Exception {
Request request = (Request) req.getNote(ADAPTER_NOTES);
Response response = (Response) res.getNote(ADAPTER_NOTES);
if (request == null) {
// Create objects
request = connector.createRequest();
request.setCoyoteRequest(req);
response = connector.createResponse();
response.setCoyoteResponse(res);
// Link objects
request.setResponse(response);
response.setRequest(request);
import org.apache.catalina.connector
public class Request implements HttpServletRequest {
/**
* Coyote request.
*/
protected org.apache.coyote.Request coyoteRequest;
org.apache.catalina.connector.Request 객체가 우리가 흔히 사용하는 jakarta.servlet.http.HttpServletRequest 을 구현하고 있다는 것을 볼 수 있다. 우리는 이 Request 객체를 사용하고 있는 것이다.