Spring VS Servelt

2021. 6. 12. 16:52Spring & Web 이론공부

시작하기 전에!

  • 해당 내용은 우아한테크코스 테크톡에 코기님의 설명과 자료로 만들었습니다! 동영상보러가기

Spring으로 Servlet을 다룬다는 것

  1. 서블릿이란
  2. 서블릿 컨테이너와 서블릿 동작 방식
  3. 프론트 컨트롤러 패턴
  4. Dispatcher Servlet의 요청 처리 과정
  5. 스프링 컨테이너 맛보기

서블릿이란?

2021-06-04-4-29-45.png

  • 처음 웹 서버는 클라이언트 요청에 대해서 정적인 페이지로만 응답할 수 있었다. 그래서 웹 서버의 프로그램을 붙여서 동적인 페이지를 나타내게 되었다. 서블릿도 동적인 페이지를 만들기 위해 웹 서버에 붙이는 프로그램 중 하나이다.
  • 서블릿의 모습

    2021-06-04-5-59-38.png

    • 서블릿이 생성되면 init() 메서드가 호출이 되고 삭제 될 때는 destory() 메서드가 호출 됩니다.
  • 서비스의 로직 수행(코기님이 다시 작성해주신 코드)

    2021-06-04-6-01-31.png

    • 우리가 처리하고 싶은 요청 메서드에 해당하는 doXXX 메서드를 찾아서 재정의 해주면 된다.

      2021-06-04-6-05-03.png

서블릿 컨테이너와 서블릿이 호출되는 과정

서블릿 컨테이너
  • 서블릿을 담고 관리하는 친구, 바구니라고 생각하면 될 거 같다!
    2021-06-04-6-08-28.png
    1. Servlet Request / Servlet Response 객체 생성
    2. 설정 파일을 참고하여 매핑할 Servlet을 확인
    3. 해당 서블릿 인스턴스 존재를 유무를 확인하여 없으면 생성(init())
    4. Servlet Container에 스레드를 생성하고, res req를 인자로 service 실행

서블릿 컨테이너가 어떤 서블릿 어떤 요청과 매핑되어 있는지 어떻게 알 수 있을까요?

  • 결론부터 말씀드리면 설정파일에 정의가 되어있습니다!

    설정파일 예시

    2021-06-04-6-24-38.png

    • /hello라는 요청이 들어오면 HelloServlet이란 서블릿으로 처리를 하겠다라고 읽는다.
    • 다음에 HelloServlet은 서블릿이라는 패키지 아래에 HelloServlet이라는 클래스 파일로 정의가 되어있다.

doGet() 메서드를 호출했을 때 우리가 정의한 요청처리 로직이 수행되고 Response, Request 객체를 소멸시키고 끝이난다.

  • 하지만 한 가지 의문점이 듭니다! response, request 객체는 생성하고 소멸시켰는데 서블릿은 생성만하고 소멸시키는 동작을 하지않는다????
    • 해답은 서블릿이 싱글톤으로 관리가 되어서 입니다!!!
      서블릿 객체는 소멸되지 않고 있다가 다음번 같은 요청이 들어왔을 때 서블릿 컨테이너에 의해서 또 호출돼서 사용이 되는 것이다.
    • 서블릿 컨테이너는 결국 서블릿의 생명주기를 관리하는 객체이다. 그래서 개발자가 아니라 서블릿 컨테이너라는 애들한테 위임되는 것임!!
  • 만약 여러 요청이 들어오게 된다면???
    • 이때는 멀티 스레드로 요청을 처리하게 된다!!
      2021-06-04-6-32-46.png

프론트 컨트롤러 패턴??

2021-06-04-6-35-17.png

  • 서블릿은 하나만 두고 모든 요청을 다 받을 수 있도록 한다.

Dispatcher Servlet이 web 요청을 처리하는 과정

2021-06-04-6-37-49.png

  • 개발자들이 신경써야 할 부분들은 HI, Hello, Bye 처리 핸들러만 담당하게 된다.
  • Handler Mapping, Handler Adapter, View부분들은 Dispatcher Servlet이 스프링 컨테이너로부터 주입을 받아서 사용하고 동작을 하게 된다.
    2021-06-04-6-43-01.png
  • 한 마디로 서블릿 설정파일만 잘 작성해주면 설정대로 생성된 객체가 스프링 컨테이너에서 관리되고 필요한 부분에서 주입 받아서 Dispatcher Servlet이 알아서 사용할 수 있게 된다는 얘기이다.

결국 스프링으로 웹 요청을 처리한다는 것은!!!!

스프링 mvc에서 제공하는 디스패처서블릿과 웹 요청 처리 관련 구현체들을 사용할 수 있다는 이야기와 동시에 스프링 컨테이너, 즉 스프링 Ioc를 사용해서 개발 할 수 있다는 이야기이다!

조금 더 나아가면

  • 웹 서버와 웹 어플리케이션 서버
  • WAS가 멀티 스레드를 관리하는 방식
  • 스프링 설정 파일과 서블릿 설정 파일
  • 스프링 컨테이너에 빈을 등록하는 방법/ 컨테이너가 주입 위치를 찾는 방법
  • 디폴트 서블릿
  • 스프링과 스프링 부트

'Spring & Web 이론공부' 카테고리의 다른 글

Spring VS SpringFrameWork  (0) 2021.06.12
Spring VS Spring Framework  (0) 2021.06.04