2018년 1월 10일 수요일

Java Servlet이란?


A servlet is a java programming language class that is used to extend the capabilities of servers that host applications accessed by means of request-response programming model.

Java Servlet(이하 서블릿)은 자바 프로그래밍 언어를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 사양을 의미한다. 즉 스펙이다.
비슷한 기술로는 CGI가 있는데 CGI는 요청마다 새로운 프로세스를 생성하여 응답하는 데 비해, 서블릿은 요청마다 프로세스보다 가벼운 스레드로 응답하므로 보다 가볍다.

서블릿엔 'main'과 같은 진입점이 없다. (~let으로 끝나는 형태의 프로그램은 자체적인 실행파일구조를 가진게 아니라 다른 환경에 의해 실행되어지는 단위로 유추 가능하다.) 이러한 서블릿을 구동하기 위해서는 Tomcat이나 Jetty와 같은 서블릿 컨테이너가 필요하다. 따라서 서블릿이 올바르게 동작하려면 서블릿 컨테이너에게 구체적인 동작 정보를 알려주어야 하고 이러한 정보는 web.xml 파일에 기술된다.

web.xml에 기술되어야 하는 내용은 대략 다음과 같다. (서블릿 3.0 부터는 WebApplicationInitializer을 통해 설정을 자바 코드에서 할 수도 있고, 아예 없앨 수도 있다.)
- 특정 외부 요청에 대해 어떤 서블릿이 응답할 것인지. (servlet mapping)
- 특정 외부 요청에 대해 어떤 필터가 반응할 것인지. (filters)
- 웹 애플리케이션 내 특정 이벤트가 발생했을 때 어떤 클래스에게 통지해야 하는지. (listeners)
- 웹 애플리케이션의 설정 파라미터 (context-params), 보안 관련 설정 등..

서블릿 컨테이너는 초기 구동시에 사용자가 작성한 web.xml을 읽어 서블릿을 생성해주고 클라이언트의 Request를 받고, Response를 보낼 수 있게 통신을 해준다. (소켓을 만들고, Request / Response에 대한 스트림 처리등의 수고를 서블릿 컨테이너가 대신 수행해주는 것이다.) 서블릿의 생명주기 또한 서블릿 컨테이너가 관리해준다.

+ JSP vs Servlet
JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다. 그렇지만 결과적으로론 JSP를 컴파일 하면 서블릿으로 변환된다.

+ Spring과 Servlet
스프링과 서블릿 간에 직접적인 관계는 없다. 스프링은 '의존성 주입'이라는 디자인 패턴을 구현해놓은 자바 프레임워크이다. 단지 스프링 프레임워크가 서블릿 기반 MVC 웹 애플리케이션을 쉽게 구축할 수 있는 기능을 제공하고 있을 뿐이다.

댓글 없음:

댓글 쓰기