Servlet이란?

무삭이의 개발일지·2023년 5월 19일
0

Servlet에 대해 알아보자!!🫡

Servlet은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 '서블릿'이라 불린다.(https://ko.wikipedia.org/wiki/자바_서블릿)
간단하게 자바로 웹 애플리케이션을 개발하기 위한 기술입니다이다.

JSP도 간단하게 알아보자. JSP란 현재는 자카르타 서버 페이지(Jakarta Servet Pages)로 불리지만 전에는 자바서버 페이지(JavaServer Pages)로 불렸다. 뭐 아무튼 JSP는 HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 서버 사이드 스크립트 언어이다.(https://ko.wikipedia.org/wiki/자카르타_서버_페이지)
즉, JSP는 웹 페이지를 동적으로 생성하기 위한 기술.

WAS(Web Application Server)

웹 애플리케이션 서버(was)는 웹 애플리케이션을 실행하기 위한 서버 환경을 제공하는 소프트웨어.

주요 기능

  • web server : was는 웹서버의 역할을 수행하는데, 정적인 웹 콘텐츠(HTML, CSS, 이미지 등)를 처리하고 클라이언트로부터 HTTP 요청을 받아들이는 기능을 제공한다.

  • web container : was는 웹 컨테이너로서 동적인 웹 애플리케이션을 담당하여, 서블릿과 JSP를 실행하여 동적 컨텐츠를 생성한다.

  • 트랜잭션 관리 : was는 데이터베이스와의 트랜잭션 관리를 제공하여 웹 애플리케이션에서 데이터 일관성과 안정성을 더해주고, 트랜잭션 처리를 위한 컨테이너 관리와 데이터베이스 연동을 지원한다.

  • 보안 기능 : was는 웹 애플리케이션의 보안을 위해 인증(Autentication), 권한 부여(Authorization), 암호화(Encryption)등 다양한 보안 기능을 제공한다.

즉, WAS는 웹 서버와 웹 컨테이너 등을 포함한 다양한 기능을 제공하여 웹 애플리케이션의 실행과 관리를 담당한다.

HTTP 요청 응답에 대한 흐름

클라이언트의 HTTP요청이 들어오면 WAS의 Web Server에서 먼저 클라이언트의 해당 요청을 받게 된다. 그리고 나서 만약 정적인 컨텐츠(index.html)에 대한 것이라면, 웹 서버에서 직접 해당 파일을 처리하여 응답을 보낸다. 하지만 애플리케이션 로직같은 동적인 처리가 필요하면 Web Container에 요청을 위임하고, 웹 컨테이너는 서블릿이나 JSP 등의 동적 컴포넌트를 실행하여 애플리케이션 로직을 처리한다. 웹 컨테이너에서 처리된 응답 메시지는 다시 웹 서버로 전달되고, 웹 서버는 클라이언트에게 응답 메시지를 보낸다. 브라우저는 받은 응답 메시지를 렌더링 하여 클라이언트에게 제공한다.

Servlet 생명주기

동적인 컨텐츠를 처리할 땐 Servlet과 JSP를 실행해 애플리케이션 로직을 처리한다고 했는데, 그렇다면 Servlet은 어떻게 만들어지고 사용될까?

🎯 Web Container 내부에는 Servlet Container가 있다. Servlet Container는 클라이언트의 요청을 받으면 Servlet 객체를 생성한다. 하지만 해당 Servlet 객체가 로드되어 있다면 생성하지 않는다. 서블릿 객체는 싱글톤이기 때문에 한 번만 생성된다. Servlet객체가 생성이 되었다면, init()메서드를 호출하여 Servlet 객체 초기화 작업을 한다. 이 때 초기화 작업은 ServletConfig가 담당한다. init()메서드가 매개변수로 ServletConfig를 받기 때문에 init메서드 호출시에 초기화를 진행한다. (ServletConfig는 서블릿 객체당 하나만 만들어지면서, 서블릿의 구성 정보를 담고있다.) 그리고 나서 service()메서드를 호출한다. service()메서드는 클라이언트의 요청 방식이 무엇인지를 확인하고 요청에 맞는 메서드를 호출한다. get방식이라면 doGet()을, Post방식이라면 doPost()를 호출한다. service()메서드는 HttpServletRequest와 HttpServletResponse를 매개변수를 받기 때문에 여기서 요청에 대한 처리를 하고 응답을 내보낸다. Servlet이 종료될 때는 destory()메서드를 호출한다. 이 때 Servlet Container가 종료를 담당한다.

ServletContext
: ServletContext는 웹 애플리케이션의 전반적인 정보(환경 설정)를 담고 있는 객체이다. 웹 애플리케이션이 시작될 떄 Servlet Container에 의해 생성 되고, 단 하나의 인스턴스만 생성된다. 또한 ServletContext는 모든 Servlet들이 공유하는 정보를 저장하고 제공하는 역할을 수행한다. 이 때 이렇게 ServletContext에 접근할 수 있는 이유는 ServletConfig가 ServletContext를 참조하고 있기 때문이다. ServletContext는 웹 애플리케이션이 종료될 때까지 유지되며, 웹 애플리케이션 내의 모든 서블릿들이 공유하므로 서블릿들 간의 데이터 공유와 상호 작용이 쉽게 이루어진다.

👉 두서없이 정리해보았다..

profile
No. Try not. Do or Do not. There is no try.

0개의 댓글