Servlet이란
자바를 사용하여 웹을 만들 때 필요한 웹프로그래밍 기술로, 동적 웹사이트를 구축하기 위해 사용됩니다.
클라이언트의 요청을 처리하고, 그 결과를 반환하는역할을 합니다
클라이언트가 웹서버로 HTTP 요청을 보내면
정적 자원에 대한 요청일 경우 자원을 반환해주고, 그렇지 않은 경우 CGI 프로그램을 실행시켜 해당 결과를 리턴해줍니다.
여기서 웹서버가 동적인 페이지를 제공할 수 있도록 도와주는 어플리케이션이 Servlet(서블릿)입니다.
서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면,
서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.
http: 인터넷에서 웹 서버와 사용자의 사이에 하이퍼텍스트(hypertext) 문서를 교환 문서를 전송하기 위해 사용되는 통신 규약
CGI 프로그램: 웹 서버와 클라이언트를 연결하는 역할
서버와 응용 프로그램 간에 데이터를 주고받기 위한 방법이나 규약
단방향식 정보제공 역할을 보충하기 위한 외부 프로그램과 웹서버(HTTP server) 간의 연결 역할을 하기 위한 규약
Servlet 특징
- 클라이언트의 요청에 대해 동적으로 작동하는 웹 어플리케이션 컴포넌트
- html을 사용하여 요청에 응답한다.
- Java Thread를 이용하여 동작한다.
- MVC 패턴에서 Controller로 이용된다.
- HTTP 프로토콜 서비스를 지원하는 javax.servlet.http.HttpServlet 클래스를 상속받는다.
- UDP보다 처리 속도가 느리다.
- HTML 변경 시 Servlet을 재컴파일해야 하는 단점이 있다.
- 서블릿은 자바 소스코드 속에 HTML코드가 들어가는 형태
Servlet 동작 방식

- 사용자(클라이언트)가 URL을 입력하면 HTTP Request가 Servlet Container로 전송합니다.
- 요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성합니다.
- web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾습니다.
- 해당 서블릿에서 service메소드를 호출한 후 클리아언트의 GET, POST여부에 따라 doGet() 또는 doPost()를 호출합니다.
- doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 보냅니다.
- 응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸시킵니다.
Servlet 생명주기

- 클라이언트의 요청이 들어오면 컨테이너는 해당 서블릿이 메모리에 있는지 확인→ 없을 경우 init()메소드를 호출하여 적재
- init()메소드는 처음 한번만 실행되기 때문에, 서블릿의 쓰레드에서 공통적으로 사용해야하는 것이 있다면 오버라이딩하여 구현
- 실행 중 서블릿이 변경될 경우, 기존 서블릿을 파괴하고 init()을 통해 새로운 내용을 다시 메모리에 적재합니다.
- init()이 호출된 후 클라이언트의 요청에 따라서 service()메소드를 통해 요청에 대한 응답이 doGet()가 doPost()로 분기 됨.
- 이때 Servlet Container가 클라이언트의 요청이 오면 가장 먼저 생성하는
- HttpServletRequest, HttpServletResponse에 의해 request와 response객체가 제공됩니다.
- 컨테이너가 서블릿에 종료 요청을 하면 destroy()메소드가 호출 됨.
- 마찬가지로 한번만 실행 됨
- 종료시에 처리해야하는 작업들은 destroy()메소드를 오버라이딩하여 구현하면 됩니다.
Servlet Container(서블릿 컨테이너)
서블릿을 관리해주는 컨테이너로,
클라이언트의 요청(Request)을 받아주고 응답(Response)할 수 있게, 웹서버와 소켓으로 통신합니다
- 서블릿이 어떠한 역할을 수행하는 정의서라고 보면, 서블릿 컨테이너는 그 정의서를 보고 수행한다고 볼 수 있음
- ex) 톰캣(Tomcat)
- 톰캣은 실제로 웹 서버와 통신하여 JSP(자바 서버 페이지)와 Servlet이 작동하는 환경을 제공해줍니다.
출처
https://mangkyu.tistory.com/14 [MangKyu's Diary]
'IT > CS 공부' 카테고리의 다른 글
| [CS] 트리 (0) | 2022.06.11 |
|---|---|
| [CS] 해시테이블 (0) | 2022.05.01 |
| [CS] MVC (0) | 2022.04.01 |
| [CS] REST API (0) | 2022.03.08 |
| [기술 면접 대비] Spring Framework (0) | 2022.03.08 |