본문 바로가기
Web/Spring

[Spring] Servlet, 서블릿

by 희조당 2022. 9. 15.
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 배포 서술자에 기록해 보안적 문제로 소스 코드를 수정하지 않게 해 준다.

 

댓글