제 블로그의 모든 글은 IMHO로 쓴 것입니다. 잘못된 부분이 있으면 덧글을 통해서 소통을 하면 더 좋은 글로 발전이 될 수 있을 것 같습니다. 그렇지만 소통을 할 때 서로의 감정을 존중하는 선에서 해주셨으면 좋겠습니다. 감사합니다:)
글 목표:
- servlet의 정의를 이해한다.
Servlet 탄생배경?
- Servlet은 웹에서 JAVA 프로그래밍을 구현하기 위해 탄생 함.
- HTTP protocol 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속하여 개발하며, Servlet은 Container에 의해서 실행되고, 관리된다.
Servlet 이란?
- 웹 서버에서 돌아가는 Java 코드
- 흔히 Java로 만든 CGI(Common Gateway Interface)라고들 한다.
- 클라이언트 요청 (request)에 대해 java코드로 된 로직을 수행 하고 응답(Response)을 돌려준다.
- 클라이언트 요청 시, 별도의 Thread가 생성되어 로직을 수행한다. (WAS 내의 Thread pool의 Thread 객체를 이용한다.)
- Servlet 객체는 실제로 WAS load시 하나의 Servlet 객체가 생성되어 Memory에 올라간다 (내부적으로 Sington을 구현하고 있지는 않다고한다.) 여기서 주의 해야 할 내용은 클라이언트 요청 별로 Thread가 생성 되기 때문에 하나의 Servlet에 동시 다발적으로 여러 Thread에 대한 접근이 이루어지게 된다. 따라서 Servlet에 대한 코드는 멀티스레드 환경에 대한 동기화처리가 필요하다.
- 요즘은 거의 Servlet을 사용하지는 않는다. 특히 Spring에서는 Spring MVC라는 강력한 구조가 있기 때문에 Spring에서는 웬만하면 Servlet생성을 하지 않는다. (오히려 Servlet을 생성하는게 더 귀찮다. 별도로 설정해야 되고, Dispatcher Servlet에서 지원하는 강려크(?) 한 기능을 사용하지 못한다.)
- MVC에서 컨트롤러로 이용됨..
웹프로그래밍에서 클라이언트의 요청을 처리하고 그 결과를 다시 클라이언트에게 전송하는 Servlet 클래스의 구현 규칙을 지킨 자바 프로그래밍 기술
Servlet Container란
HTTP 요청을 받아서 Servlet을 실행시키고, 그 결과를 사용자 브라우저에게 전달해주는 기능을 제공하는 컴포넌트 이다. Servlet을 실행하고 생명주기를 관리하는 역할을 한다. Servlet과 웹 서버(Apache, nginx..)가 서버 통신 할 수 있는 방법을 제공한다. 멀티 스레딩을 지원하여 클라이언트의 다중 요청을 알아서 처리해준다. 대표적인 Conatainer에는 Tomcat, jetty, jboss 등이 있다.
Servlet 동작과정
Servlet 단점
HTML 변경시 Servlet을 재컴파일
참고 :
https://unabated.tistory.com/entry/%EC%84%9C%EB%B8%94%EB%A6%BF%EC%9D%B4%EB%9E%80
https://mangkyu.tistory.com/14 https://jaehun2841.github.io/2018/09/01/2018-09-01-servlet/