Skip to content

Commit

Permalink
Servlet TIL
Browse files Browse the repository at this point in the history
  • Loading branch information
snowykte0426 committed Dec 19, 2024
1 parent 7eeaca7 commit bff152c
Showing 1 changed file with 22 additions and 0 deletions.
22 changes: 22 additions & 0 deletions Backend/Spring/Servlet.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# Servlet
Java 기반 웹 개발에서 가장 기본이 되는 단위 중 하나인 <b>서블릿(Servlet)</b>에 대해 알아본다.
## 정의
**클라이언트의 요청을 처리하고 결과를 반환하는 기술**로 동적 웹페이지 서버에서 수행되는 소형 프로그램이다.각 사용자의 요청이 하나의 쓰레드(Thread)로 수행된다.자바 서블릿은 자바를 사용해 웹페이지를 동적으로 생성하는 서버 내 프로그램이라고 한다.JSP와는 달리 자바 코드내에 **HTML**을 포함하고 있다.
## 장점
외부 요청에 대해 **쓰레드를 이용하여 응답하기 떄문에 프로세스를 통하여 응답하는 것보다 가볍고** 자바로 개발되어 **다양한 플랫폼에서 동작이 가능**하다.
## 특성
웹 서버가 **동적인 페이지**를 제겅할 수 있도록 도우며 HTML를 통하여 응답한다.자바 쓰레드를 통하여 동작하고 <b>MVC 패턴에서 컨트롤러(Controller)</b>로 이용된다.HTTP 프로토콜 서비스를 지원하는 ``javax.servlet.http.HttpServlet`` 클래스를 상속받는다.**UDP**보다 속도가 느리며 HTML이 변경된다면 **다시 컴파일 해야 한다는 단점이 있다**.**서블릿은 서블릿 컨테이너(Servlet Container)에서 관리되어 ``new``가 없고 ``main()``도 없다**.
## 동작과정
![Spirng Servlet](https://velog.velcdn.com/images/oyoungsun/post/4f93ddfb-c949-4fac-9f4d-ca2d99f99f00/image.png)
1. 클라이언트가 URL를 입력하면 HTTP 요청이 서블릿 컨테이너로 전송된다.
2. 서블릿 컨테이너가 <b>``HttpServletRequest``</b>,<b>``HttpServletResponse``</b> 객체를 생성한다.
3. **web.xml**을 기반으로 클라이언트의 요청이 어느 서블릿에 대한 것인지 **탐색**한다.
4. 해당 서블릿에서 **service** 메서드를 호출한 후 요청의 HTTP 메서드에 따라 **``doGet()``**,<b>``doPost()``</b>를 호출한다.
5. ``doGet()`` 또는 ``doPost()`` 메서드는 동적 페이지를 생성한 후 ``HttpServletResponse``에 응답을 반환한다.
6. 응답이 종료되면 ``HttpServletRequest``,``HttpServletResponse`` 두 객체모두 **소멸**시킨다.
## 서블릿 컨테이너
서블릿을 관리해주는 역할을 하며 클라이언트의 요청을 받고 응답할 수 있도록 **웹 서버(Web Server)와 소켓으로 통신**한다.요청이 들어오면 web.xml을 기반으로 어느 서블릿에 대한 요청인지 확인하고 해당 서블릿이 메모리에 없다면 <b>``init()``</b>을 통하여 적재하고 서블릿이 변경된 경우에도 파괴 후 ``init()``을 이용하여 재적재한다.컨테이너가 서블릿을 종료시킬때는 <b>``destroy()``를 통하여 종료한다.
## 서블릿 컨테이너의 기능
서블릿 컨테이너는 **서블릿과 웹 서버가 손쉽게 통신할 수 있도록 해줌으로서 개발자가 비즈니스 로직 개발에만 집중**할 수 있도록 해준다.**서블릿의 생명주기(Lifr Cycle)도 자동으로 관리**하여 서블릿 클래스를 적재하고 초기화하고 호출하며 서블릿의 역할이 다하면 GC를 진행하여 메모리 관리에도 편의를 제공한다.서블릿 컨테이너는 요청이 하나 올때마다 새로운 자바 쓰레드를 생성하는데 **HTTP 서비스 메서드가 완료되면 쓰레드는 자동으로 죽으며 이를 통해 쓰레드 안정성에 대해 걱정하지 않아도 된다**.또한, 서블릿 컨테이너를 사용한다면 **보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현하지 않아도 된다**.
## JSP 작동구조
웹 서버가 클라이언트로부터 서블릿에 대한 요청을 받으며 서블릿 컨테이너에 그 요청을 넘기며 요청을 받은 컨테이너는 HTTP 요청과 응답을 생성하고 이들을 통하여 ``doGet()``이나 ``doPost()`` 메서드 중 하나를 호출한다.View를 위해 서블릿만 사용하게 된다면 ``out`` 객체의 ``println`` 메서드르 이용하여 HTML 문서를 작성해야 하는데 이는 **추가/수정을 어렵게 하고 가독성도 떨어지기에** JSP를 이용하여 **비즈니스 로직과 프레젠테이션 로직**을 분리한다.서블릿은 데이터의 입력,수정 등에 대한 제어를 JSP에 위임함으로서 프레젠테이션 로직을 수행한 후 컨테이너에 응답을 전달한다.

0 comments on commit bff152c

Please sign in to comment.