Servlet, Servlet 컨테이너란?

minisoo·2024년 3월 3일
0

스프링을 공부한다고 이런저런 강의를 구매해서 듣고있는데, 막상 기본적인 내용을 잘 모르고있어 간단히 정리해보는 시간을 갖게 되었다 🙌

Servlet ➰

  • 동적 웹 페이지를 만들기 위해 사용되는 자바의 웹 애플리케이션 프로그래밍 기술
  • 웹 클라이언트의 요청을 처리하고 응답하는 클래스(HttpServlet을 확장한 클래스)
  • 웹 요청의 저수준 처리를 담당함

생명주기

  • init(): servlet을 초기화하고 servlet이 이용하는 자원을 할당하는 동작을 수행
  • service(): 사용자의 요청이 올때마다 해당 메소드를 호출하여 요청을 처리
  • destroy(): servlet이 삭제될 때 호출

HTTP 요청, 응답 흐름

  1. 웹 브라우저에서 특정 url으로 요청
  2. WAS에서 HTTP 요청 메세지를 기반으로 request, response 생성
  3. WAS에서 서블릿 객체 호출
  4. 서블릿에서 실행이 끝나고 리턴
  5. WAS가 response객체에 담겨있는 내용으로 HTTP 응답 정보 생성 후 리턴

서블릿과 스프링 mvc의 controller와의 관계

Servlet Container ➰

  • Servlet의 생명주기를 관리하고, 매번 요청이 들어올 때마다 새로운 스레드를 요청 별로 부여한다
  • 서블릿 객체는 싱글톤으로 관리하고 동시 요청을 위한 멀티 쓰레드 처리를 지원한다
  • 쓰레드를 요청마다 생성하게 되면 생기는 문제
    • 쓰레드의 생성비용은 매우 높고, 컨텍스트 스위칭 비용이 발생하게 된다.
    • 이런 단점을 보완하고자 나온 것이 쓰레드 풀이다
    • 일정 갯수의 쓰레드를 미리 생성해두고, 요청이 올 때마다 해당 쓰레드 풀에서 쓰레드를 꺼내서 사용한다.
    • 이 쓰레드 사용이 끝나면 없애는것이 아닌 다시 쓰레드 풀에 반납하게 된다
    • 쓰레드 생성/소멸에 필요한 비용을 줄일 수 있고, 매번 요청마다 쓰레드를 생성함으로써 생기는 단점도 해결할 수 있다
  • 요청이 올 때마다 웹 서버에서 반복적으로 처리해야하는 작업을 대신 수행해 개발자가 비즈니스 로직에만 전념할 수 있도록 한다
  • 대표적으로 톰캣이 해당된다

Spring container와 Servlet container의 관계

  • 스프링 컨테이너는 자바 객체(빈)의 생명 주기를 관리하며, 객체 간의 의존 관계를 관리한다 이 과정에서 Ioc, DI와 같은 원칙을 사용한다
    • Bean Factory
      • 스프링 컨테이너의 최상위 인터페이스
      • 빈을 등록, 생성, 조회 등의 빈을 관리
    • ApplicationContext
      • Bean Factory를 포함한 여러 인터페이스들을 상송받은 인터페이스
      • 메시지 국제화 처리, 이벤트 발행, 애플리케이션 구동 정보 관리 등 확장된 기능 제공

[참고자료]
https://velog.io/@youns/%EC%84%9C%EB%B8%94%EB%A6%BF1-%EC%84%9C%EB%B8%94%EB%A6%BFServlet-%EC%9D%B4%EB%9E%80
https://sigridjin.medium.com/servletcontainer%EC%99%80-springcontainer%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%8B%A4%EB%A5%B8%EA%B0%80-626d27a80fe5
https://coding-factory.tistory.com/742

profile
코딩하는 돌멩이 👻

0개의 댓글