dev_dbdb1114

Servlet이란? 본문

프로그래밍/JAVA

Servlet이란?

dbdb1114 2023. 9. 15. 23:39

1. Servlet ( 서블릿 )

클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술 간단히 말해서, 서블릿이란 자바를 사용하여 웹을 만들기 위해 필요한 기술입니다. 좀 더 들어가서 설명하면 클라이언트가 어떠한 요청을 하면 그에 대한 결과를 다시 전송해주어야 하는데, 이러한 역할을 하는 자바 프로그램입니다. 예를 들어, 어떠한 사용자가 요청을 보냈을 때 서버는 응답 페이지를 띄워주어야 하는데, 이러한 역할을 수행하는 것이 서블릿(Servlet)입니다. 그래서 서블릿은 자바로 구현된 CGI라고 합니다.

*CGI : 서버와 애플리케이션 간에 데이터를 주고 받는 방식 또는 컨벤션

Servlet특징

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

이러한 서블릿은 WAS내의 서블릿 컨테이너에서 동작하며, 요청 ( Request )을 받으면 요청에 맞는 로직을 실행하고 클라이언트에게 HTTP 형식으로 응답(Response)하게 된다.

Servlet Container

정의

서블릿 컨테이너는 서블릿을 담고 관리해주는 컨테이너이다. 서블릿 컨테이너는 구현되어 있는 서블릿 클래스의 규칙에 맞게 서블릿을 관리하며 클라이언트의 요청을 받으면 HttpServletRequest와 HttpServletReponse 객체를 생성하여 post,get 여부에 따라 동적인 페이지를 생성하여 응답한다.

역할

  1. 서블릿 생명주기 관리
    서블릿 컨테이너에 서블릿의 탄생과 죽음을 관리한다. 서블릿 클래스를 로딩하여 인스턴스화하고, 초기화 메서드를 호출하고, 요청이 들어오면 적절한 서블릿 메서드를 찾아서 동작한다. 또한 서블릿의 생명이 다하면 가비지 컬렉션(Garbage Collection)을 통해 메모리를 제거하다.
  2. 통신지원
    서블릿 컨테이너는 웹 서버와 소켓을 만들어서 클라이언트의 요청을 받고 응답할 수 있는 통신을 지원해준다. 통신을 하기 위한 Listen, accept 등의 과정을 API로 제공하여 복잡한 과정을 생략해주기 때문에 개발자가 비즈니스 로직 개발에 집중할 수 있게 도와준다.
  3. 멀티쓰레드 지원 및 관리
    서블릿 컨테이너는 클라이언트의 요청을 받을 때마다 새로운 자바 스레드를 생성한다. 따라서 동시에 여러 요청이 들어와도 멀티쓰레딩 환경에서 동시다발적인 작업을 관리할 수 있다.
  4. 선언적인 보안 관리
    서블릿 컨테이너는 보안 관련 기능을 제공하기 때문에 개발자는 서블릿에 보안 관련 메서드를 구현하지 않아도 된다.

Servlet 생명주기

  1. Servlet Request, Servlet Response 객체를 생성합니다.
  2. 설정 파일을 참고하여 매핑할 Servlet을 확인합니다.
  3. 해당 서블릿 인스턴스 존재의 유무를 확인하여 없으면 Init()메소드를 호출하여 생성합니다.
  4. Servlet Container에 스레드를 생성하고 service를 실행합니다.
  5. 응답을 처리하였으면 distroy()메소드를 실행하여 Servlet Request, Servlet Response 객체를 소멸합니다.

Servlet 메소드

  1. init() : 서블릿이 메모리에 로드될 때 한번만 호출 ( 코드 수정 시 다시 호출 )
  2. doGet() : Get 방식으로 data 전송 시 호출
  3. doPost() : Post 방식으로 data 전송 시 호출
  4. service() : 모든 요청은 service()를 통해 doxxx()메소드로 이동
  5. destroy() : 서블릿이 메모리에서 해제되면 호출

참고 블로그

Comments