Applet
- Client Side 동작방식을 갖는다.
- 자바로 개발한 응용 프로그램을 웹 페이지와 함께 사용자측으로 보낼 수 있도록 만든 프로그램
- 클라이언트(브라우저)에서 호출시 클래스 파일이 클라이언트 PC로 다운로드 되어 클라이언트 측에 내장되어있는 JVM에 의해 실행된다.
Servlet
- 자바를 사용하여 동적인 웹페이지 콘텐츠를 생성하기 위한 기술
- Applet + Server로 자바로 개발한 응용프로그램을 웹 서버에서 실행시켜 HTML 형식의 문서로 만들어 클라이언트에게 반환하는 웹 어플리케이션 컴포넌트이다.
- 확장 CGI방식을 사용하며 하나의 완전한 자바파일의 형태를 갖는다.(확장자또한 .java 이다.)
- 자바 언어를 이용해 클라이언트에 보여줄 동적인 부분을 잘 구분하여 적절한 위치에 HTML 태그를 자바 코드 안에 삽입하는 형태이다.
- HTML과 이미지 등이 Java 코드 내에 존재하므로, 디자이너가 디자인 변경시 자바 프로그래머의 도움이 필요하게 되기 때문에 많은 불편함이 따른다.
- 많은 단점들이 존재함에도 불구하고 서버 측 프로그램의 기능이 있고 프레임워크의 기초 기술로 아직까지도 사용되고 있다.
Servlet 특징
- 클라이언트의 요청에 대해 동적으로 작동하는 하나의 웹 어플리케이션 컴포넌트
- 요청에 대한 응답 결과는 HTML문서이다.
- Java Thread를 이용하여 동작하며, 하나의 요청에대해 스레드를 할당하는 다중-스레드 방식이며. 사용되는 스레드는 Thread-pool에 의해 관리된다.
- HTTP프로토콜 서비스를 지원하는 HttpServlet 클래스를 상속받고, TCP기반 통신을 한다.
- Servlet의 내용을 변경시, 재컴파일을 해야하는 단점이 존재한다.
- 주로 MVC 패턴에서 Controller로 사용된다.
Servlet 동작방식
- 일반적으로 웹 서버는 클라이언트의 요청에 해당하는 웹 페이지를 전달하는 역할을 수행한다.
- 하지만 웹 서버는 이미 존재하는 정적인 페이지만을 제공할 수 있다.
- 때문에 동적 페이지를 제공하기 위해서 다른 도우미 애플리케이션이 필요한데, 자바에서는 이 역할을 해 주는 것이 서블릿이다.
- 서블릿(Servlet)은 스스로 동작할 수 없기 때문에 컨테이너의 도움을 받아 실행된다.
- 하나의 자바 프로그램처럼 구성이 되기 때문에 브라우저에서 호출이 되면 Server side에서 Servlet을 컴파일하여 HTML파일로 응답한다.
- 3-tier architecture 포스팅글에서 사용한 이미를 재활용 하겠다. 여기서 중요한 것은 WAS내부의 Cotainer의 동작 방식이다.
- 클라이언트가 URL을 통해 서버에 요청을 보내면 HTTP Request를 Servlet Container로 보낸다.
- Servlet Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성한다.
- 요청 URL을 분석하여 어느 서블릿에 대해 요청을 한것인지 찾는다.
- 찾은 서블릿을 스레드에 담은 뒤 service메서드를 호출한 후 HttpRequest 형식에 따라 doGet(), doPost()메서드를 호출한다.
- doGet(). doPost()메서드는 연결된 DB를 통해 데이터를 얻어오거나, 비지니스 로직을 처리한 뒤 동적 페이지를 생성한다.
- HttpServletResponse객체에 응답을 보낸 뒤, 응답을 끝마치면 HttServletRequest, HttpServletResponse 객체를 소멸시키킨다.
Servlet Container
- 스스로 동작하지 못하는 서블릿의 실행환경 제공 및 관리를 도와준다. (서블릿을 관리해주는 컨테이너)
- 클라이언트의 요청을 받아주고 응답할 수 있게 웹서버와 소켓으로 통신한다.
- 비유를 하자면 서블릿은 설명서이고, 서블릿 컨테이너는 설명서를 보고 실제 행동을 하는 주체인것이다.
Servlet Container의 역할
- 웹서버와의 통신 지원
- 서블릿과 웹서버가 손쉽게 통신할 수 있도록 API를 제공한다.
- API를 통해 개발자가 소켓을 만들고 관리하는 과정을 생략할 수 있게 도움으로써, 서블릿 개발에만 신경을 쏟을 수 있게 도와준다.
- 멀티쓰레드 지원 및 관리
- 클라이언트의 요청마다 스레드 풀에서 스레드가져와 서블릿에 할당해주며, Service() 메서드 호출 이후 자원의 반납까지 도와준다.
- 서버가 다중 쓰레드를 관리를 해주기 때문에 스레드 안정성 및 관리를 개발자가 신경쓰지 않아도 된다.
- 선언적인 보안 관리
- XML 배포 서술자에 보안관리를 위임함으로써 서블릿 또는 자바 클래스에 보안에 관련된 내용을 작성하지 않아도 된다. 때문에 코드의 수정 및 재컴파일 없이 보안관리가 가능해진다.
- 서블릿 생명주기(Life Cycle) 관리
- init(), service(), destroy()메서드를 통해 서블릿의 탄생, 요청, 죽음을 관리한다.
- 서블릿의 요청에 알맞는 메서드를 실행하며, 서블릿이 생명을 다 한 경우 Garbage Collection이 적절하게 수거해감으로써 편의를 제공한다.
Servlet의 생명주기
- Life Cycle(생명주기) : 클라이언트가 서버에 요청시 언제 객체가 만들어지고, 사용되고 종료되는가
- init() : 서블릿이 처음으로 요청되어 객체가 생성될 때 호출되는 메서드
- service() : 클라이언트가 재방문시마다 호출되는 메서드
- destory() : 애플리케이션 서비스의 종료 및 재시작 또는 서블릿의 코드 수정시 호출되는 메서드
- 클라이언트 서블릿 최초 요청시
- init(최초 한번 호출) -> service(반복 호출)
- 서블릿 재 요청시
- service(반복 호출)
- 서블릿 요청 종료시
- destroy(최후 한번 호출)
- service() 메서드는 HTTP요청 method에 따라 doGet(), doPost()등의 메서드로 분기되어 실행되며, HttpServletReqeust, HttpServletResponse객체가 인자로 주어진다.
- 실행 및 종료시 공통적으로 사용되어야 할 비지니스 로직은 init(), destory()메서드를 오버라이딩하여 구현할 수 있다.
'Servlet' 카테고리의 다른 글
[Servlet]Servlet의 주요 클래스와 실제 웹페이지 제작 (2) | 2023.03.14 |
---|