728x90
✍️ 학습 목표
- Servlet 이해하기
- Servlet Container 알아보기
📌 Servlet
MVC 패턴에서 사용되는 Controller는 Servlet을 활용한 기술이다.
따라서 MVC 패턴을 준수하는 스프링 공부하기 위해선 Servlet에 대한 이해도 필수적이다.
Servlet이란? 클라이언트의 요청을 처리하고, 처리 결과로 반환해주는 Java 기반의 CGI이다.
CGI : 웹 서버 상에서 User Program을 동작시키기 위한 조합
✔️ Servlet의 특징
결국 Servlet은 기존 웹 서버의 문제를 개선하고 동적인 여러 기능을 지원한다.
너무 기계적으로 적어둔 글이 많아서 핵심만 요약했고, 내용은 다음과 같다.
- 클라이언트의 요청에 대해 정적으로 작동하던 기존의 웹 프로그램의 문제점을 보완해 동적으로 작동
- JAVA 코드에 HTML이 있다. 즉, HTML을 통해서 작동한다. (HTML 변경 시 재컴파일 필요)
- JAVA thread를 사용한다.
✔️ Servlet의 동작 과정
클라이언트가 웹 서버에 요청을 보내면, 웹 서버는 이 요청을 WAS에 전달한다.
WAS는 전달받은 요청에 해당하는 서블렛을 실행하고 요청에 대한 기능을 수행한 뒤 결과를 반환하는 것이다.
더보기
- 클라이언트 요청
- HttpServletRequest, HttpServletResponse 객체 생성
- Web.xml이 어느 서블릿에 대해 요청한 것인지 탐색
- 해당하는 서블릿에서 service() 메소드 호출
- doGet() 또는 doPost() 호출
- 동적 페이지 생성 후 ServletResponse 객체에 응답 전송
- HttpServletRequest, HttpServletResponse 객체 소멸
✔️ Servlet의 생명주기
결국 Servlet도 일종의 자바 클래스이므로 생명주기를 가진다. 생성부터 소멸은 다음과 같다.
- Servlet Container가 필요한 Servlet이 메모리에 있는지 확인하고, 없다면 init() 메서드로 호출한다.
- 요청에 따라 doGet()과 doPost()로 분기된다. 이때 앞서 생성된 객체로부터 request, response 객체가 제공된다.
- Container가 종료 요청하면 destroy() 메서드를 호출한다.
📌 Servlet Container
스프링에서 빈을 관리해주는 IoC Container가 있듯이 Servlet을 관리해주는 Container가 존재한다.
이 컨테이너가 클라이언트의 요청을 받아주고, 응답할 수 있도록 웹 서버와 소켓을 만들어 통신한다.
✔️ Servlet Container의 역할
- 웹 서버와의 통신 지원 : 기존의 복잡한 기능들을 API로 지원해 웹 서버와 쉽게 통신할 수 있게 되었다.
- Servlet의 생명주기를 관리 : 요청에 맞는 Servlet을 호출하고 수명이 다하면 제거한다. (+가비지 콜렉터)
- 멀티스레드 지원 및 관리 : 요청이 올 때마다 새로운 스레드를 생성하고, 생성된 HTTP 서비스를 실행한 후 자동으로 죽는다.
- 선언적인 보안 관리 : 보안관리를 XML 배포 서술자에 기록해 보안적 문제로 소스 코드를 수정하지 않게 해 준다.
'Web > Spring' 카테고리의 다른 글
[토비의 스프링] 오브젝트와 의존관계 (1장) (0) | 2022.12.21 |
---|---|
[Spring] AOP (feat. Proxy Pattern) (0) | 2022.09.21 |
[Spring] Spring의 MVC (0) | 2022.09.14 |
[Spring] Spring의 DB 접근 기술 (0) | 2022.08.23 |
[Spring] Spring의 핵심 : IoC, DI (23.05.16 updated) (0) | 2022.08.23 |
댓글