Servlet이란

Servlet이란??

서블릿은 Server+Applet으로 “Client의 요청을 처리하고 그 결과를 다시 Client에게 전송하는 Servlet Class의 구현 규칙을 지킨 자바 프로그램”이다.
자바프로그램이라고 정의했다면 당연히 JDK가 필요하며, 자바 API를 동작시키는 JVM이 필요하다. Servlet은 Web Application 확장이 용이하고 플랫폼에 독립적이다.

Servlet Container란??

Container라는 용어처럼 말그대로 Servlet이 제공하는 기능을 실행시켜주며 관리해주는 것이다. Servlet Container는 Servlet의 LifeCycle을 관리하고
요청에 따른 Thread를 생성해준다. 또한 Client의 요청을 받아주고 응답을 보낼 수 있게 웹서버와 소켓통신을 한다.
Servlet Container의 기능을 자세히 보면
-Servlet과 Web Server가 통신하기 용이하게 해준다. 우리가 통신을 한다고 생각했을 때 Socket을 만들고, 특정 Port를 수집하고, Request가 들어오면 Stream을 생성해서
요청을 받는것이 순서이다. 이과정을 Servlet Container가 담당한다. Servlet Container는 이과정을 API로 제공하고 있기 때문에 손쉽게 사용되고 있다.
-Servlet Container가 기동되는 순간 Servlet Class를 로딩하여 인스턴스화 시키고, 초기화 메소드를 호출한 후 요청이 들어오면 알맞은 Servlet 메소드를 호출한다.
Servlet의 Life Cycle이 끝나는 순간 Garbage Collection을 진행한다.
-Servet Container는 해당 Servlet의 요청이 들어오면 Thread를 생성하여 작업을 수행한다. 동시에 여러 요청이 들어온다면 멀티쓰레딩으로 동시다발적은 작업을 진행한다.
-Servlet Container는 보안 관련된 기능을 지원하여, Servlet 코드 안에 보안 관련 메소드를 구현하지 않아도 된다.

Servlet

Servlet은 자바 API를 모두 사용할 수 있고, O/S나 H/W에 영향을 받지 않아 유지보수가 수월하다. 그리고 컨텐츠와 비즈니스 로직을 분리하여 개발할 수 있고, 이렇게 분리가 되면 백엔드,미들웨어,프런트엔드 개발자들 끼리의 분업이 원활하게 이루어 질 수 있다. 이런 기능을 하기 위하여 Servlet은 LifeCycle이라는 것이 존재한다.

Servlet LifeCycle

Servlet

void init(ServletConfig config) - Servlet이 처음 적재될때 호출되는 초기화 함수이다. 이미 init method가 한번 호출되어 적재되어 있을 경우는 init method를 호출하지 않고 service()를 호출하게 된다. 즉 init()은 처음 Servlet 적재시만 사용된다.

void service(HttpServletRequest request, HttpServletResponse response) - client의 요청이 들어올 때 마다 호출되는 함수로써, 요청에 방식에 따라 그에 맞는 doGet(), doPost()를 호출한다. get,post 방식 둘다 받을 수 있는 service()메소드도 있다.

void destory() - Servlet의 메모리에서 해제할 때 호출되는 함수이다. 만약 destroy() 호출을 한다면 다시 Servlet에 적재할 경우 init()을 호출해야 한다.

이것이 Servlet LifeCycle이다. 하지만 거의 대부분은 아마 service()에서 이루어 질 것이다. service에서 doGet(),doPost() 메소드를 overriding하여 요청을 처리한다. 이 곳에서 HTML 코드를 코딩하여 결과를 생성할 수 있지만, Servlet을 사용해 봤다면 java code상으로 html을 생성한다는게 정말 귀찮다. 이것을 보완한 기능인 JSP를 많이 사용하고 있으며 JSP로 forwarding하여 처리하는 것이 코드상으로도 깔끔하다 유지보수도 용이하다.

Share