-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
1 parent
7eeaca7
commit bff152c
Showing
1 changed file
with
22 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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에 위임함으로서 프레젠테이션 로직을 수행한 후 컨테이너에 응답을 전달한다. |