본문 바로가기

Develop/Spring

Springboot, Spring 개념정리 3

  1. 톰켓
  2. 서블릿 컨테이너
  3. web.xml
  4. FrontController 패턴
  5. RequestDispatcher
  6. DispatchServlet

 

1. 톰켓 : 웹이 이해하지 못하는 언어(java)들을 컴파일해서 html 파일로 만들어 웹에서 실행 가능하게 만듬

웸서버는 흔히 우리는 아파치를 사용한다. 그럼 컴퓨터에 특정한 폴더를 지정한다. c:\work 를 만들고 이 work 폴더를 공유한다고 하자.

그럼 폴더 안에 수많은 자원이 있을 것이다. 어떤 얘가 자원을 request 하면 아파치는 그 자원을 response 하면 된다.

만약 얘가 요청을 하는게 .jsp 파일 혹은 java code가 적혀있는 것을 요청하면 아파치는 자바 코드를 이해할 수 없다. 그래서 톰켓이라는 얘를 단다. 자기가 이해할 수 없는 파일이 오면 제어권을 톰켓에게 준다.

그리고 이 톰켓은 .jsp 파일에 있는 모든 자바파일을 컴파일 하고, 컴파일이 끝나면 컴파일된 데이터를 html에 덮여쓴다. → 이 과정에서 톰켓을 이용해 웹 요청을 가능하게 한다. (웹은 html, css, js만 인식 할 수 있기 때문에 이를 인식하게 도와주는 것이 톰켓이다.)

 

톰켓은 URL(location)을 접근할 수 없고 URI(identify)로만 접근이 가능 하도록한다. 

ex)      URL : http://naver.com/a.png

           URI :  http://naver.com/picture/a

 

 

2. 서블릿 컨테이너

서블릿 컨테이너 실행 순서

  1. 서블릿 컨테이너는 클라이언트로 부터 처음 요청이 들어오면 현재 실행할 서블릿이 최초의 요청인지 판단하고 없으면 해당 서블릿 객체를 새로 생성한다. 이작업은 최초 1회만 일어난다. → 두 번째 요청부터는 재사용한다.
  2. 서블릿 객체안에서 init()메소드가 실행된다. init() 메소드는 해당 사용자 서블릿이 최초 생성되고 바로 호출되는 메소드이다.
  3. 서블릿 객체안에서 service() 메소드가 실행된다. service() 메소드는 최초의 요청이든 2번쨰 요청이든 계속 호출되는 메소드이다.
  4. 그 후 service() 메소드에서 post, get, put, delete에 대해서 요청한 것을 실행

 

3. web.xml가 하는 일

  • ServletContext의 초기 파라미터
  • Session의 유효시간 설정
  • Servlet/JSP에 대한 정의
  • Servlet/JSP 매핑
  • Mime Type 매핑
  • Welcome File list
  • Error Pages 처리
  • 리스너/필터 설정
  • 보안

 

4. FrontController 패턴

최초 앞단에서 request 요청을 받아서 필요한 클래스에 넘겨준다. (web.xml에서 모두다 정의하기 힘들기 때문)

 

이때 새로운 요청이 생기기 때문에 request와 response가 새롭게 new될 수 있다. 그래서 이를 방지하기 위해 RequestDispatcher가 필요하다.

 

5. RequestDispatcher

필요한 클래스 요청이 도달했을 때 FrontController에 도착한 request와 response를 그대로 유지시켜준다.

 

 

6. DispatchServlet

앞서 존재하던 FrontController 패턴을 직접짜거나 RequestDispatcher를 직접구현할 필요가 없다. 

왜냐면 Spring에는 DispatchServlet이 존재하기 때문이다.

 

DispatchServlet : FrontController 패턴 + RequestDispatcher

 

DispatchServlet이 자동생성되어 질 때 수 많은 객체가 생성(IoC)된다. 보통 필터들이다. 해당 필터들은 내가 직접 등록할 수 도 있고 기본적으로 필요한 필터들은 자동 등록 되어진다.

DispatchServlet : 주소분배 해주는 녀석

 

'Develop > Spring' 카테고리의 다른 글

'코드로 배우는 스프링 웹 프로젝트' 정리(Controller)  (0) 2022.06.23
Spring 궁금했던거  (0) 2022.03.25
Springboot, Spring 개념정리 2  (0) 2022.03.22
Springboot, Spring 개념정리 1  (0) 2022.03.22
Spring 웹 개발 기초  (0) 2022.03.22