서블릿
서블릿 프로그래밍의 핵심은 바로 Servlet 인터페이스를 이해하는 것!
CGI 프로그램
- 웹 서버와 프로그램 사이에서 데이터를 주고 받는 규칙을
CGI(Common Gateway Interface)
라고 합니다. - 그리고 웹 서버에 의해 실행되며 CGI 규칙에 따라서 웹 서버와 데이터를 주고 받도록 작성된 프로그램을
CGI 프로그램
이라고 합니다. - CGI 프로그램은 C, C++, Java와 같은 컴파일 언어로 작성될 수도 있으며, PHP, Python과 같은 스크립트 언어로도 작성할 수 있습니다.
- 컴파일 방식은 실행 속도가 빠르지만 변경시 다시 컴파일하고 재배포해야 하는 문제가 있으며,
- 스크립트 방식은 실행할 때마다 소스 코드의 문법을 검증하고 해석해야 하기 때문에 느리지만 변경시 코드 수정 및 저장만 하면 되기 때문에 편리합니다.
서블릿
- 자바로 만든 CGI 프로그램을 '서블릿(Servlet)' 이라고 합니다.
- 웹 서버와 직접 데이터를 주고 받지 않으며, 전문 프로그램에 의해 관리되는 것이 다른 CGI 프로그램과 다른 점입니다.
서블릿 컨테이너
- 서블릿의 생성, 실행, 소멸 등 생명주기를 관리하는 프로그램을 '서블릿 컨테이너(Servlet Container)' 라고 합니다.
- 이 서블릿 컨테이너가 서블릿을 대신해 CGI 규칙에 따라 웹 서버와 데이터를 주고 받습니다.
- 즉, 개발자는 CGI 규칙을 알 필요는 없지만 서블릿과 서블릿 컨테이너에 대해서는 알아야 합니다.
WAS
- [클라이언트 - 서버] 구조에서 서버쪽 애플리케이션의 생성과 실행, 소멸을 관리하는 프로그램을 '애플리케이션 서버(Application Server)'라 합니다. 여기에 서블릿 컨테이너와 같은 웹 기술을 기반으로 동작되는 애플리케이션 서버를
WAS(Web Application Server)
라고 합니다. - 특히 자바에서 WAS란, Java EE 기술 사양을 준수하여 만든 서버를 가리킵니다.
- Java EE 기술 중에서 서블릿, JSP 등 웹 관련 부분만 구현한 서버도 있는데 이런 서버를 '서블릿 컨테이너'라 합니다. 대표적으로 톰캣(Tomcat)이 있죠.
javax.servlet.Servlet 인터페이스
서블릿 클래스는 반드시 javax.servlet.Servlet
인터페이스를 구현해야 합니다. 서블릿 컨테이너가 서블릿에 대해 호출할 메서드를 정의한 것이 Servlet 인터페이스입니다.
서블릿 구동 절차
- 클라이언트의 요청이 들어오면 서블릿 컨테이너는 서블릿을 찾습니다.
- 만약 서블릿 없다면 서블릿 클래스를 로딩하고, 인스턴스를 준비한 후 생성자를 호출합니다. 그리고 서블릿 초기화 메소드인
init()
을 호출합니다. - 클라이언트의 요청을 처리하는
service()
메소드를 호출합니다. - service() 메소드에서 만든 결과를 HTTP 프로토콜에 맞추어 클라이언트에 응답합니다.
- 서블릿 컨테이너를 종료하거나 웹 애플리케이션을 종료한다면,
- 서블릿 컨테이너는 종료되기 전에
destroy()
메소드를 호출하여 모든 작업을 마무리 합니다.
(주의)
서블릿 인스턴스는 하나만 생성되어 웹 애플리케이션이 종료될 때까지 사용된다.
그래서 인스턴스 변수에 특정 사용자를 위한 데이터를 보관해서는 안된다.
또한 클라이언트가 보낸 데이터를 일시적으로 보관하기 위해 사용하는 것도 안된다.
정리
웹 서버가 실행시키는 프로그램을 웹 애플리케이션이라고 합니다. 웹 서버와 웹 애플리케이션 사이에는 데이터를 주고받기 위한 규칙이 있는데 이것을 CGI(Common Gateway Interface)라고 합니다. 그래서 보통 웹 애플리케이션을 'CGI 프로그램' 이라고도 합니다.
특히 자바로 만든 웹 애플리케이션을 서블릿이라고 하는데, 명칭은 Server와 Applet의 합성어 입니다. 즉, 클라이언트에게 서비스를 제공하는 작은 단위의 서버 프로그램이라는 뜻입니다.
서블릿 컨테이너는 서블릿의 생성에서 실행, 소멸까지 서블릿의 생명주기를 관리하는 프로그램입니다. 클라이언트로부터 요청이 들어오면, 서블릿 컨테이너는 호출 규칙에 따라 서블릿의 메소드를 호출합니다. 서블릿 호출 규칙은 javax.servlet.Servlet
인터페이스에 정의되어 있습니다. 따라서 서블릿을 만들 때는 반드시 이 Servlet 인터페이스를 구현해야만 합니다.
Reference
- 자바 웹 개발 워크북 (정말 도움이 많이 된다.)
'공부 기록' 카테고리의 다른 글
[스프링 부트로 게시판 만들기] 01. 프로젝트 생성 (0) | 2021.07.18 |
---|---|
[스프링 부트로 게시판 만들기] 00. 앞으로 만들 프로젝트 (0) | 2021.07.18 |
GET 요청과 POST 요청 [간단 요약] (0) | 2021.05.20 |
Eclipse 개발 환경 구축 (톰캣) (0) | 2021.05.20 |
async & await (0) | 2020.10.22 |
댓글