서블릿(Sevlet) 이란?
Servlet 은 Java EE(Java Enterprise Edition) 사양의 일종으로 웹 어플리케이션의 일종으로 클라이언트가 요청을 하고 결과를 클라이언트에 응답하는 기술로 Java 로 구현된 프로그램 입니다. 즉, java 로 구현된 프로그램의 수행 결과를 HTML로 답하도록 구현하는 기술입니다. 따라서 동적인 페이지를 구성할 수 있게 합니다. WAS(Web Application Server)의 서블릿 컨테이너 안에서 동작하며, 다중 스레드 기반으로 동작하여 CGI(프로세스 기반)의 한계를 극복하기 위해 나왔습니다.
서블릿 특징
- 서블릿은 자바 코드안에 html 포함하고 있다.
- HTTP 프로토콜 서비스를 지원하는 HttpServlet 클래스를 상속받는다. (javax.servlet.http.HttpServlet)
- 하나의 요청마다 Java의 thread를 사용하여 비교적 가볍다. (CGI -> 프로세스 기반)
- MVC 패턴의 Controller 역할을 맞는다.
- HTML 변경 시 서블릿을 다시 컴파일해야 한다.
- Java 구현되어 다양한 플랫폼에서 동작 가능하다.
서블릿 컨테이너(Servlet Container) 란?
서블릿 컨테이너는 서블릿을 담고 관리해주는 컨테이너로 서블릿의 생명주기를 관리합니다. 즉, 서블릿 컨테이너가 서블릿에 대하여 흐름을 제어하여 IoC(Inversion of Control)가 일어납니다. 클라이언트의 요청을 받으면 HttpServletRequest와 HttpServletResponse 객체를 생성하여 post, get 여부에 따라 동적인 페이지를 만들어 응답합니다.
클라이언트와 웹서버는 소켓으로 통신하며 대표적으로 톰캣(Tomcat)이 있습니다. 톰캣은 Servlet과 JSP가 작동하는 환경을 제공해 줍니다.
1. 서블릿 생명주기 관리
서블릿 컨테이너는 서블릿의 생성과 소멸을 관리합니다. 서블릿 클래스를 로딩하여 인스턴스화 하고, 초기화 메소드를 호출하고, 요청에 따라 적절한 서블릿 메소드를 찾아 동작하며 서블릿의 생명이 다하면 GC를 통해 메모리가 제거 됩니다.
2. 통신 지원
서블릿 컨테이너는 웹서버와 소켓을 만들어서 쉽게 통신하게 만들어주기 때문에 개발자가 비지니스 로직에 집중할 수 있습니다. 소켓을 만들고 listen,accept 하는 과정을 서블릿 컨테이너가 API로 제공하여 복잡한 과정을 생략할 수 있게 해줍니다.
3. 멀티쓰레드 지원 및 관리
서블릿 컨테이너는 클라이언트의 각 요청마다 새로운 자바 스레드를 생성합니다. 쓰레드는 HTTP 서비스 메소드를 실행하고 나면 자동으로 메모리가 해제 됩니다. 따라서, 쓰레드를 관리할 필요가 없으며 멀티쓰레드 환경에서 동시다발적으로 작업이 가능합니다.
4. 선언적 보안 관리
서블릿 컨테이너는 보안 관련된 기능을 제공하기 때문에 클래스에 구현하지 않아도 됩니다. XML에 기록하므로, 보안에 대해 수정할 일이 생겨도 자바 소스 코드는 수정하지 않아도 됩니다.
Servlet 과 JSP 차이점?
Servlet 과 JSP는 자바의 Enterprise Edition에 속하는 웹 어플리케이션 기술로 요청과 응답에 대한 처리를 합니다.
Servlet 프로그래밍 성격이 강하며, JSP는 프리젠테이션 성격이 강합니다.
Servlet은 상속 구문과 메소드 오버라이딩 구문을 적용한 Java로 구현된 프로그램으로서 수행 결과를 HTML로 응답하도록 구현하는 기술이며 JSP는 HTML 문서 안에 JSP태그와 동적인 처리를 담당하는 Java 코드 삽입하여 구현하는 기술입니다.
Servlet | JSP |
프로그래밍 성격 | 프리젠테이션 성격 |
Java | HTML |
따라서, 서블릿과 JSP로 부터 최상의 결과를 얻을려면 서블릿과 JSP를 적절하게 사용해야 합니다.
즉, 웹 페이지를 구성하는 화면은 JSP로 표현하고, 복잡한 프로그래밍은 서블릿으로 표현해야 합니다.
'Programing > Java' 카테고리의 다른 글
[ Java ] Servlet 구현하기 (0) | 2023.09.02 |
---|---|
[ JAVA 개발 환경 ] IntelliJ 2023.01 + Servlet,JSP 실행 환경 설정 (0) | 2023.08.30 |