[스프링-입문] Springboot 동작원리

박준수·2022년 11월 6일
0

[스프링-입문]

목록 보기
3/4

스프링부트 동작원리

1) 내장 톰켓을 가진다.

  • 톰켓을 따로 설치할 필요 없이 바로 실행가능하다.

Socket : 운영체제가 가지고 있는 것!

소켓 통신 : 처음 소켓 이후 생성된 다음 소켓(스레드 생성)과 연결지속
--> 연결이 계속 되어있기에 부하가 크지만 누구랑 통신하는지 계속 앎
http 통신 : 데이터를 주고 받으면 연결 끊김 (Stateless)
--> 연결이 끊기기 때문에 부하가 적지만 누구랑 통신하는지 구분 X

웹서버 = 아파치 + 톰켓
톰켓 : 자바 코드를 컴파일하고 HTML문서로 만들어준다. 이 문서를 아파치한테 돌려준다.
아파치 : 그 HTML문서를 response해준다.

웹 브라우저에서는 html, javascript, css, avi 등을 이해할 수 있지만 나머지 파일들을 이해하지 못하기에 jsp파일을 요청한다면 아파치는 웹 브라우저가 jsp를 이해하지 못한다는걸 알기에 톰켓에게 Html문서로 만들라하고 아파치가 응답해준다.


2) 서블릿 컨테이너(톰켓)

Client(request) --> 서블릿 컨테이너 (스레드 생성 - 서블릿 객체)
<서블릿 객체는 하나고 스레드가 만들어지면서 공유해서 사용한다.>

이때 서블릿 컨테이너 안에 생성할 수 있는 스레드와 서블릿 객체가 20개로 지정 되어있다고 가정해보자. 그렇다면 20번째 요청까지는 메모리 로딩, 객체 생성, init()을 반복한다. 21번째부터는 1번째 (스레드 생성- 서블릿 객체)를 재사용한다. 결국 마지막에는 톰켓이 HttpServletRequest, HttpServletResponse객체를 가지고 있는다.


3) web.xml

  • SevletContext의 초기 피라미터
  • Session의 유효시간 설정
  • Sevlet/JSP에 대한 정의
  • Sevlet/JSP매핑
  • Mine Type 매핑 (Mine Type : 내가 들고오는 데이터가 뭔지 알려줌)
  • Welcome File List
  • Error Pages 처리
  • 리스너/필터 설정
  • 보안

Servlet/JSP 매핑시(web.xml에 직접 매핑 or @WebServlet 어노테이션 사용)에 모든 클래스에 매핑을 적용시키기에는 코드가 너무 복잡해지기 때문에 FrontController 패턴을 이용함.


4) FrontController 패턴

최초 앞단에서 request 요청을 받아서 필요한 클래스에 넘겨준다. 왜? web.xml에 정의하기가 너무 힘듬. 이때 새로운 요청이 생기기 때문에 request와 response가 새롭게 new될 수 있다(내부에서는 자원 접근이 가능).
그러면 기존에 요청한 request, reponse가 묻히기 때문에 RequestDispatcher가 필요하다.


5) RequestDispatcher

필요한 클래스 요청이 도달했을 때 FrontController에 기존에 도착한 request와 response를 그대로 유지시켜준다.
!!데이터를 들고 페이지를 이동할수 있는 기법!!


6) DispatcherServlet(FrontController + RequestDispatcher) 컴포넌트 스캔 후 주소 분배

스프링에는 DispatcherServlet이 있기 때문에 FrontController , RequestDispatcher를 직접 구현할 필요가 없다. DispatcherServlet이 자동 생성되어 질 때 수 많은 객체가 생성(IOC)된다. 보통 필터들이다. 해당필터들은 내가 직접 등록할 수 도 있고 기본적으로 필요한 필터들은 자동 등록 되어진다.


7) 스프링 컨테이너

DispatchServlet에 의해 생성되어지는 수 많은 객체들은 어디에서 관리될까?

8) 요청 주소에 따른 적절한 컨트롤로 요청 (Handler Mapping)

GET 요청 -> 해당 주소 요청이 오면 적절한 컨트롤러의 함수를 찾아서 실행한다.

9) 응답

html 파일을 응답 -> ViewResolver가 관여
Data를 응답 -> MessageConverter가 작동(기본 전략은 Json)

전반적인 구동과정

  • 1.web.xml 파일을 로딩하여 Servlet Container 구동

  • 2.서블릿 컨테이너는 web.xml 파일에 등록된 ContextLoaderListener 객체를 Pre-Loading한다.

    이때, ContextLoaderListener 객체는 applicationContext.xml 파일을 로딩하여 스프링 컨테이너(Root Container)구동
    Business Layer 로서 Service 요청이 들어오기 전에 여러 Bean을 셋팅해 놓는 것.

    1. 서비스 요청이 들어오면 서블릿 컨테이너는 DispatcherServlet 객체를 생성.
      DispatcherServlet은 presentation-layer.xml 파일을 로딩하여 두번째 스프링 컨테이너 구동
profile
방구석개발자

0개의 댓글