study/Spring boot
Spring Boot - 스프링 부트 동작 원리
올스왑
2021. 2. 18. 13:35
데어프로그래밍 님의 스프링 부트 강의를 듣고 정리하는 글입니다.(www.youtube.com/channel/UCVrhnbfe78ODeQglXtT1Elw)
스프링에 배우면서 본문을 채워갈 예정.
1. 내장 톰캣을 가진다
- 톰캣은 WAS다.
- 톰캣을 http 통신을 한다. http는 Stateless 방식이다.(연결 유지X) http 통신은 요청과 응답으로 이뤄진다.
- 아파치는 일반 자원만 응답할 수 있지만, 톰캣은 jsp파일을 컴파일하여 응답할 수 있다.
2. 서블릿 컨테이너
- 서블릿을 모른다면 먼저 읽고 오기 - jang-sn.tistory.com/49
- 스프링은 URI로만 접근할 수 있다. -> 요청시에는 무조건 WAS(자바)를 거쳐야 한다.
- 서블릿은 간단히 말해, 클라이언트 요청을 처리하는 프로그램이다.
- 서블릿 컨테이너는 서블릿은 모아놓은 것인데 이것이 톰캣이다.
- 톰캣은 최초의 요청이 들어오면 스레드를 만들고 이 스레드가 서블릿 객체를 만든다.
- 새로운 요청이 들어오면 동시 처리를 위해 새로운 스레드를 만들고 새로운 서블릿 객체를 만든다. 또 다시 요청이 들어오면 같은 과정을 반복한다.
- 만들어질 수 있는 스레드의 수는 정해져 있다. 모든 스레드가 작업중일 때 새로운 요청이 들어왔다면, 그 요청은 대기한다. 그리고 작업을 마친 스레드 또는 응답을 마친 스레드가 생기면 대기하고 있던 요청을 그 스레드가 처리한다. -> 스레드를 재사용한다. 그래서 속도가 빠르다.
- 정리: 스프링은 URI 요청을 받기 때문에, 서블릿 컨테이너가 동작할 수 밖에 없다. 그러면 그 요청이 최초 요청이라면 메모리를 로딩해 서블릿 객체를 만들고 사용하고, 계속 요청이 들어오는 대로 스레드를 생성해 서블릿을 만들다가 제한된 수를 넘어가면 원래 있던 스레드를 재사용한다.
- 마지막으로 최종적으로 만들어지는 것이 HtptServletRequest 객체와 HttpServletResponse 객체이다. 이건 스프링이 아니라 톰캣이 갖고 있는 객체다.
3. web.xml
- ServletContext의 초기 파라미터를 생성한다.
- ServletContext의 초기 파라미터를 생성한다.
- Servlet/JSP에 대한 정의 및 매핑을 한다.
- Mime Type을 매핑한다.
- Welcom File List를 설정한다.
- Error pages를 처리한다
- 리스터 / 필터를 설정한다.
- 보안을 설정한다.
4. FrontController 패턴
5. RequestDispatcher
6. DispatcherServlet
7. 스프링 컨테이너
8. 요청 주소에 따른 적절한 컨트롤러 요청(Handler Mapping)
9. 응답