Spring VS Servelt
2021. 6. 12. 16:52ㆍSpring & Web 이론공부
시작하기 전에!
- 해당 내용은 우아한테크코스 테크톡에 코기님의 설명과 자료로 만들었습니다! 동영상보러가기
Spring으로 Servlet을 다룬다는 것
- 서블릿이란
- 서블릿 컨테이너와 서블릿 동작 방식
- 프론트 컨트롤러 패턴
- Dispatcher Servlet의 요청 처리 과정
- 스프링 컨테이너 맛보기
서블릿이란?
- 처음 웹 서버는 클라이언트 요청에 대해서 정적인 페이지로만 응답할 수 있었다. 그래서 웹 서버의 프로그램을 붙여서 동적인 페이지를 나타내게 되었다. 서블릿도 동적인 페이지를 만들기 위해 웹 서버에 붙이는 프로그램 중 하나이다.
서블릿의 모습
- 서블릿이 생성되면 init() 메서드가 호출이 되고 삭제 될 때는 destory() 메서드가 호출 됩니다.
서비스의 로직 수행(코기님이 다시 작성해주신 코드)
서블릿 컨테이너와 서블릿이 호출되는 과정
서블릿 컨테이너
- 서블릿을 담고 관리하는 친구, 바구니라고 생각하면 될 거 같다!
- Servlet Request / Servlet Response 객체 생성
- 설정 파일을 참고하여 매핑할 Servlet을 확인
- 해당 서블릿 인스턴스 존재를 유무를 확인하여 없으면 생성(init())
- Servlet Container에 스레드를 생성하고, res req를 인자로 service 실행
서블릿 컨테이너가 어떤 서블릿 어떤 요청과 매핑되어 있는지 어떻게 알 수 있을까요?
결론부터 말씀드리면 설정파일에 정의가 되어있습니다!
설정파일 예시
- /hello라는 요청이 들어오면 HelloServlet이란 서블릿으로 처리를 하겠다라고 읽는다.
- 다음에 HelloServlet은 서블릿이라는 패키지 아래에 HelloServlet이라는 클래스 파일로 정의가 되어있다.
doGet() 메서드를 호출했을 때 우리가 정의한 요청처리 로직이 수행되고 Response, Request 객체를 소멸시키고 끝이난다.
- 하지만 한 가지 의문점이 듭니다! response, request 객체는 생성하고 소멸시켰는데 서블릿은 생성만하고 소멸시키는 동작을 하지않는다????
- 해답은 서블릿이 싱글톤으로 관리가 되어서 입니다!!!
서블릿 객체는 소멸되지 않고 있다가 다음번 같은 요청이 들어왔을 때 서블릿 컨테이너에 의해서 또 호출돼서 사용이 되는 것이다. - 서블릿 컨테이너는 결국 서블릿의 생명주기를 관리하는 객체이다. 그래서 개발자가 아니라 서블릿 컨테이너라는 애들한테 위임되는 것임!!
- 해답은 서블릿이 싱글톤으로 관리가 되어서 입니다!!!
- 만약 여러 요청이 들어오게 된다면???
프론트 컨트롤러 패턴??
- 서블릿은 하나만 두고 모든 요청을 다 받을 수 있도록 한다.
Dispatcher Servlet이 web 요청을 처리하는 과정
- 개발자들이 신경써야 할 부분들은 HI, Hello, Bye 처리 핸들러만 담당하게 된다.
- Handler Mapping, Handler Adapter, View부분들은 Dispatcher Servlet이 스프링 컨테이너로부터 주입을 받아서 사용하고 동작을 하게 된다.
- 한 마디로 서블릿 설정파일만 잘 작성해주면 설정대로 생성된 객체가 스프링 컨테이너에서 관리되고 필요한 부분에서 주입 받아서 Dispatcher Servlet이 알아서 사용할 수 있게 된다는 얘기이다.
결국 스프링으로 웹 요청을 처리한다는 것은!!!!
스프링 mvc에서 제공하는 디스패처서블릿과 웹 요청 처리 관련 구현체들을 사용할 수 있다는 이야기와 동시에 스프링 컨테이너, 즉 스프링 Ioc를 사용해서 개발 할 수 있다는 이야기이다!
조금 더 나아가면
- 웹 서버와 웹 어플리케이션 서버
- WAS가 멀티 스레드를 관리하는 방식
- 스프링 설정 파일과 서블릿 설정 파일
- 스프링 컨테이너에 빈을 등록하는 방법/ 컨테이너가 주입 위치를 찾는 방법
- 디폴트 서블릿
- 스프링과 스프링 부트
'Spring & Web 이론공부' 카테고리의 다른 글
Spring VS SpringFrameWork (0) | 2021.06.12 |
---|---|
Spring VS Spring Framework (0) | 2021.06.04 |