Coding Planet

[Servlet]Servlet, CGI, Servlet Container의미 본문

Server

[Servlet]Servlet, CGI, Servlet Container의미

jhj.sharon 2023. 3. 17. 15:55
반응형

1. Servlet이란?

  • 동적 웹페이지를 만들 때 사용되는 자바 기반의 웹 애플리케이션 프로그래밍 기술
  • 웹 서비스를 위한 자바 클래스
  • 웹 프로그래밍에서 클라이언트의 요청(Request)을 처리하고 그 결과를 다시 클라이언트에게 응답(Response)하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그래밍 기술
  • 자바 어플리케이션 코딩을 하는 것처럼 웹 브라우저용 출력화면(HTML)을 만드는 방법
  • 예를 들어 사용자가 로그인을 하려고 할 때 아이디와 비밀번호를 입력하고 로그인 버튼을 누르면 서버는 아이디와 비밀번호를 확인하고 다음 페이지를 띄어주는 역할을 한다. 그래서 서블릿은 자바로 구현된 **CGI라고 한다.
**CGI(Common Gateway Interface)

- CGI는 특별한 라이브러리나 도구가 아니라 별도로 제작된 웹 서버의 프로그램간의 교환 방식이다.

- CGI방식은 어떠한 프로그래밍언어로도 구현이 가능하며 별도로 만들어 놓은 프로그램에 HTML의 Get 또는 Post 
  방법으로 클라이언트의 데이터를 환경변수로 전달하고, 프로그램의 표준 출력 결과를 클라이언트에게 전송하는 것이다.

 

 

 

2. Servlet의 특징

  • HTML을 사용하여 요청에 응답한다.
  • java thread를 이용하여 동작한다 -> 요청마다 별도 thread 생성
  • MVC Model2 패턴에서 Controller로 이용한다.
  • http프로토콜 서비스를 지원하는javax.servlet.http.HttpServlet 클래스를 상속 받는다.
  • 단, servlet에 작성한 html 코드 변경 시 재컴파일 해야 하는 단점이 있다.
**서블릿의 상속관계

- javax.servlet.Servlet 인터페이스
ᄂ javax.servlet.GenericServlet 추상클래스
ᄂ javax.servlet.http.HttpServlet 클래스

 

 

3. Servlet의 동작 순서

 

 

1) 사용자가 URL(Uniform Resource Locator)을 클릭하면 HTTP Request(요청)를 Servlet Container로 전송

 

2)  Http Request를 전송 받은 Servlet Container는 아래 두 객체를 생성

- HttpServletRequest(요청 관련 내용이 저장된 객체),
- HttpServletResponse(응답 관련 내용이 저장된 객체)

 

3)  DD (배포서술자, Deployment Descriptor) = web.xml은 사용자가 요청한 URL을 분석하여 어떤 서블릿 클래스에 요청 내용을 전달할지 찾음

 

4) 해당 서블릿에서 init() 메소드를 먼저 호출한 후 service() 메소드를 호출하여 클라이언트로부터 전송 받은 방식

   GET, POST 여부에 따라 해당 메소드(doXXX()) 를 호출함.

 

5) doGet() / doPost() 메소드는 동적 페이지를 생성 후 HttpServletResponse객체에 응답을 보냄

6) 응답 종료 시 HttpServletRequest, HttpServletResponse 객체 소멸

 

 

 

 

 

 

 

 

4. Servlet Container 의 역할

  • 웹 서버로부터 오는 동적 요청을 처리하는 서버
  • 배포를 위한 포트 연결, 웹 서버 통신을 위한 소켓, 입/출력 스트림을 생성하는 역할을 함
  • WAS(Web Application Server)가 Servlet Container에 해당하고 대표적으로 Tomcat이 있다.
  • 즉, Servlet이 어떤 역할을 수행하는 정의서이고 Servlet Container는 정의된 Servlet을 수행하는 역할이다.

 

  1. 웹 서버와의 통신 지원

  • 서블릿과 웹 서버가 손 쉽게 통신할 수 있게 함
  • 일반적으로 소켓을 만들고 listen, accept 등을 해야 하지만 서블릿 컨테이너는 이러한 기능을 API로 제공하여 복잡한 과정을 생략하게 한다

  2. 서블릿 생명주기(Life Cycle) 관리

  • 서블릿 클래스를 로딩하여 인스턴스화 하고,  초기 메소드를 호출하고,  요청이 들어오면 적절한 서블릿 메소드를 호출
  • 서블릿이 생명을 다 한 순간에는 적잘하게 가비지 컬렉션을 진행하여 편의를 제공한다.

 

  3. 멀티쓰레드 지원 및 관리

  • 서블릿 컨테이너는 요청이 올 때마다 새로운 자바 스레드 생성하는데 http서비스 메소드를 실행하고 나면 스레드는 자동으로 사라짐.
  • 원래는 스레드를 관리해야 하지만 서버가 다중 스레드를 생성/운영 해주어서 스레드의 안정성에 관해서는 걱정할 필요 없음

  4. 선언적인 보안 관리

  • 서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현하지 않아도 됨
  • 일반적으로 보안관리는 xml배포 서술자(DD (web.xml)에다가 기록하므로 보안에 대해 수정할 일이 생겨도
    자바소스코드를 수정하여 다시 컴파일 하지 않아도 보안관리 가능

 

 

 

반응형
Comments