Servlet
출처 : https://www.geeksforgeeks.org/introduction-java-servlets/
- 서버 사이드 위에서 동작하는 클래스.
- 서버측에서 웹 관련된 요청 - 응답을 담당하는 클래스. 웹의 동적인 부분을 담당한다.
- Servlet 컨테이너라고 불리우는, Network side(ex : Http Request 파싱, Connection 핸들링)를 담당하는 컨테이너에서 실행된다. 대표적으로 탐캣이 있다.
- Java로 작성되었기 때문에, 플랫폼에 구애받지 않는다. (JDBC같은 데이터베이스에 접근도 용이하다.)
- 사용하기 쉽고, 요청을 핸들링하는 과정이 캡슐화 된다.
- CGI(Common Gateway Interface)라는, C 혹은 C++로 작성되어진 웹 서버 익스텐션보다 더 좋은 성능과 확장성을 갖고 있다.
💡 그렇다면 CGI란 뭘까? 간단하게 알아보자.
CGI
- 클라이언트 요청 마다 프로세스를 생성 / 파괴해야 한다. → 요청이 늘어날수록 작업량도 선형적으로 늘어난다.
- Servlet은 매 요청마다 해당 작업을 반복하지 않기 때문에, 성능이 더 좋은 것이다.
출처 : https://www.geeksforgeeks.org/introduction-java-servlets/
Dispatcher Servlet
출처 : https://www.geeksforgeeks.org/what-is-dispatcher-servlet-in-spring/
- 프론트 컨트롤러로써 동작하며, 요청 url을 핸들링 할 수 있는 컨트롤러로 작업을 위임하는 역할을 한다.
DispatcherServlet handles an incoming HttpRequest, delegates the request, and processes that request according to the configured HandlerAdapter interfaces that have been implemented within the Spring application along with accompanying annotations specifying handlers, controller endpoints, and response objects.
Servlet Container
- 서블릿 컴포턴트를 관리하는 컨테이너. 서블릿과 웹서버가 통신을 하기 위해 필요한 ServerSocket 을 대신 생성해줌으로써, 요청 / 응답을 전송하는 네트워크 서비스를 관장한다. → 개발자는 서버와 통신하는 부분을 크게 신경 쓸 필요 없다.
- 서블릿의 생명주기를 관리한다.
- 서블릿 클래스를 로딩해 인스턴스화하고, 서블릿의 초기화 메소드를 호출하고, 요청이 들어오면 적절한 서블릿 메소드를 호출하는 작업을 컨테이너가 한다. 서블릿의 사용이 끝난 시점에는 가비지 컬렉션(garbage collection)을 진행해 제거한다. 한마디로 서블릿이라는 자원을 컨테이너가 대신 관리해준다고 할 수 있다.
- 멀티스레딩 지원
- 컨테이너는 요청이 들어올때마다 해당 서블릿의 쓰레드를 생성해 다중요청을 처리한다.
- 요청이 끝나면 서블릿 스레드는 컨테이너가 관리하는 쓰레드 풀로 돌아가거나, 소멸된다.
- HTML같은 정적 리소스, 서블릿과 JSP같은 동적 리소스를 관리한다.
- 관리하는 리소스 접근의 인증 / 인가 처리를 담당한다.
- URL 경로에 세션 ID를 붙임으로써 세션을 유지한다.
Reference
https://medium.com/jiwon-bae/web-servlet-servlet-container-b6c3a4c6549f
https://www.geeksforgeeks.org/introduction-java-servlets/
유익한 글이었습니다.