Back-End/Spring

[Spring MVC][웹 애플리케이션 이해] - 2. 서블릿

얄루몬 2022. 2. 28. 18:25

💻본 포스팅은 '스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 김영한'님의 강의를 듣고 작성되었습니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 - 인프런 | 강의

웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습니다., -

www.inflearn.com


[서블릿이 없었던 상황이라면?] 

  • 웹 애플리케이션 서버를 직접 구현해야 하는 상황이 닥칠 것이다..
  • 또한 HTTP 스펙을 전부 알고 이를 직접 개발자 본인이 진행해야 할 것이다.

 

 

[서블릿]

  • 의미 있는 비지니스 로직이라고 표시된 저 부분만 우리가 진행을 하고 나머지 전후 상황에 필요한 작업은 서블릿이 진행해준다.
  • 자바를 사용해서 웹을 만들 때 필요한 기술로 클라이언트가 어떠한 요청을 할 때 그에 대한 결과를 다시 전송해주어야 하는데, 이러한 역할을 해주는 자바 프로그램이다.
  • 예)
    • 사용자가 로그인을 하기 위해서 사용자는 아이디 비밀번호를 입력하고 로그인 버튼을 눌러야 한다.
    • 그때 서버는 클라이언트의 아이디와 비밀번호를 확인하고 다음 페이지를 띄워주어야 한다.
    • 이때 이러한 역할을 수행하는 것이 서블릿의 역할이다.
    • 서블릿은 자바로 구현된 CGI라고 흔히들 말하곤 한다.

 

 

[서블릿 특징]

[ Servlet 특징 ]

  • 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
  • html을 사용하여 요청에 응답한다.
  • Java Thread를 이용하여 동작한다.
  • MVC 패턴에서 Controller로 이용된다.
  • HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
  • UDP보다 처리 속도가 느리다.
  • HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다.

일반적으로 웹서버는 정적인 페이지만을 제공합니다. 그렇기 때문에 동적인 페이지를 제공하기 위해서 웹서버는 다른 곳에 도움을 요청하여 동적인 페이지를 작성해야 합니다. 동적인 페이지로는 임의의 이미지만을 보여주는 페이지와 같이 사용자가 요청한 시점에 페이지를 생성해서 전달해 주는 것을 의미합니다. 여기서 웹서버가 동적인 페이지를 제공할 수 있도록 도와주는 어플리케이션이 서블릿이며, 동적인 페이지를 생성하는 어플리케이션이 CGI입니다. 

📌출처: https://mangkyu.tistory.com/14 [MangKyu's Diary]

 

  • urlPatterns(/hello)의 URL이 호출되면 서블릿 코드가 실행된다.
  • HTTP 요청 정보를 편리하게 사용할 수 있는 HttpServletRequest
  • HTTP 응답 정보를 편리하게 제공할 수 있는 HttpServletResponse
  • 개발자는 HTTP 스펙을 매우 편리하게 사용할 수 있게 된다.
    • 그러나 HTTP 스펙을 어느정도는 숙지하고 있어야 한다.

 

 

[서블릿의 동작 방식]

 

 

[서블릿 컨테이너]

서블릿 컨테이너 

  • 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함
  • 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리해준다.
  • 서블릿 객체는 싱글톤으로 관리 한다.
    • 고객의 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율적이다.
    • 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용 한다.
    • 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근한다.
    • 공유 변수 사용 주의해야 한다.( = 같은 객체 인스턴스를 사용하기 때문이다.)
    • 서블릿 컨테이너 종료시 함께 종료된다.
  • JSP도 서블릿으로 변환 되어서 사용한다.
  • 동시 요청을 위한 멀티 쓰레드 처리 지원한다.