728x90
서블릿(Servlet)
- 웹 서버가 동적인 페이지를 제공할 수 있도록 도와주는 애플리케이션
- 일명 동적인 페이지를 생성하는 애플리케이션, CGI
- 클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 자바 웹 프로그래밍 기술
- Java 소스코드 속에 HTML 소스코드가 들어가는 형태
- 자바를 사용하여 웹을 만들기 위해 필요한 기술
*CGI(Common Gateway Interface)
: 특별한 라이브러리나 도구를 의미하는 것은 아니고, 별도로 제작된 웹 서버와 프로그램 간의 교환 방식,
어떠한 프로그래밍 언어로도 구현 가능하며, 별도로 만들어 놓은 프로그램에 HTML의 GET/POST 방식으로 클라이언트의 데이터를 환경변수로 전달, 프로그램의 표준 출력 결과를 클라이언트에게 전송하는 것.
즉, 자바 애플리케이션 코딩을 하듯 웹 브라우저용 출력 화면을 만드는 방법
특징
- 클라이언트 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트
- HTML을 사용하여 요청에 응답
- Java Thread를 이용하여 동작
- MVC 패턴에서 Controller로 이용
- UDP보다 처리 속도가 느림
- HTML 변경 시 Servlet을 재컴파일 해야하는 단점
동작 방식
- 클라이언트가 URL을 입력하면 HttpRequest가 Servlet Container로 전송
- HTTP 요청을 처리하기 위한 HttpServletRequest 객체, HttpServletResponse 객체 생성
- web.xml을 기반으로 요청된 URL이 어느 서블릿 클래스에 대한 요청인지 찾음
- 찾은 서블릿 클래스가 서블릿 컨테이너에서 실행된 적 있는지 혹은 메모리에 생성된 인스턴스가 있는지 체크
- 처음 실행 : 인스턴스를 생성한 후 init() 호출 -> 초기화 후 스레드 생성
- 이미 실행 : 기존 인스턴스에 스레드 생성
- 서블릿 인스턴스는 서블릿 컨테이너 당 하나만 존재
5. 각 스레드의 service() 호출 후 GET/POST 방식에 따라 doGet()/doPost() 호출
6. 2.에서 생성된 HttpServletRequest 객체와 HttpServletResponse 객체를 인자로 전달
7. doGet()/doPost() 로직에서 생성된 동적 웹 페이지 결과물은 HttpServletResponse 객체에 담김
8. HttpServletResponse 객체를 서블릿 컨테이너에서 HTTP 형태로 바뀌어 웹서버로 전송
9. HttpServletRequest 객체와 HttpServletResponse 객체의 메모리 소멸 및 스레드 종료
서블릿 컨테이너(Servlet Container) / 서블릿 엔진(Servlet Engine)
- 서블릿을 관리해주는 컨테이너
- 서블릿을 만들었다고 스스로 작동하는 것X, 관리 필요
- 서블릿이 어떠한 역할을 수행하는 정의서라면, 서블릿 컨테이너는 그 정의서를 수행한다고 볼 수 있음
- 클라이언트의 요청(Request)을 받아 응답(Response)할 수 있게 웹 서버와 소켓으로 통신하며 JSP와 서블릿이 작동하는 환경 제공
- 대표적인 예, 톰캣(Tomcat)
역할
- 웹 서버와 통신 지원
- 개발자는 소켓을 만들고 listen, accept 등을 해야하지만, 서블릿 컨테이너가 이러한 기능을 API로 제공, 복잡한 과정을 생략할 수 있게 하여, 개발자는 서블릿에 구현해야 할 비즈니스 로직에 초점을 두게 도와줌
- 서블릿 생명 주기 관리
- 서블릿 클래스를 로딩하여 인스턴스화 후 초기화 및 요청이 들어오면 적절한 서블릿 메소드 호출
- 서블릿이 생명을 다 하면 GC(Garbage Collection)을 진행
- 멀티스레드 지원 및 관리
- 요청이 들어올 때마다 자바 스레드 생성, HTTP 서비스 메소드를 실행하고 나면 스레드는 자동으로 죽게 됨, 원래는 스레드를 관리해야 하지만 서버가 다중 스레드를 생성 및 운영
- 스레드 안정성
- 선언적인 보안 관리
- 보안 관련 내용을 서블릿 클래스/자바 클래스에 구현X
- 보안 관리는 XML 배포 서술자에 모두 기록
- 보안 관련 수정할 일이 생겨도 자바 소스 코드를 수정하여 다시 컴파일 할 필요X
서블릿 생명 주기(Servlet Life Cycle)
JSP(Java Server Page)
- Java 소스코드가 들어가 있는 HTML 소스코드
- HTML 소스코드 속에 Java 소스코드가 들어가는 구조를 갖는 웹 애플리케이션 프로그래밍 기술
- HTML 소스코드 속에 Java 소스코드가 <% 자바코드 %> 또는 <%= 자바코드 =%>형태로 들어감
- 자바 소스코드로 작성된 부분은 웹 브라우저로 보내는 것이 아니라 웹 서버에서 실행되는 부분
- HTML 소스코드 속에 Java 소스코드가 <% 자바코드 %> 또는 <%= 자바코드 =%>형태로 들어감
- WAS(Web Application Server)에 의하여 서블릿 클래스로 변환하여 사용됨
JSP 동작 방식
출처 및 참고)
728x90
반응형