학교 강의 중 웹 서비스 프로그래밍이란 과목을 들으면서 Servlet에 대해 배운 적이 있다. 그러나 여느 학교 강의와 똑같이 시험때만 기억을 하고 이후에는 까먹게 된다. 때문에 이번에 다시 정리를 해보면서 그때 배웠던 내용들과 조금 더 자세한 내용들에 대해서 알아보려고 한다!
Servlet에 대해서 얘기를 해야하는데 갑자기 WAS가 무엇이길래 나왔을까? Servlet은 단일의 개념으로만 보기엔 이해하기 어려운 부분들이 존재한다. WAS에 대해 먼저 이해를 한 뒤에 Servlet에 대해서 알아보자.
Web Application Server의 약자로, 인터넷 상에서 http 프로토콜을 통해 사용자 컴퓨터나 장치에 어플리케이션을 수행해주는 미들웨어이다.
조금 더 쉽게 얘기를 해보면 Web Server와 Web Container가 합쳐진 형태로 Web Server에서 단독으로 처리할 수 없는 다양한 로직의 처리가 필요한 동적 컨텐츠를 제공한다. 덕분에 우리가 원하는 다양한 요구에 맞춰 Web Service를 제공할 수 있는 것이다!
이때 WAS는 JSP, Servlet 구동 환경을 제공해주기 때문에 Web Container 혹은 Servlet Container라고 불린다.
이 WAS의 대표적인 예로 Tomcat이 있다. 이 Tomcat에 대해서는 조만간 따로 정리를 할테니 지금은 이런 게 있구나~ 만 알고 넘어가면 좋을 것 같다.
클라이언트의 요청을 처리하고, 그 결과를 반환하는 Servlet 클래스의 구현 규칙을 지킨 Java 웹 프로그래밍 기술
WAS과 Servlet의 정의를 봤다면 Servlet이 왜 필요한지 조금은 이해가 될 것 같다! 이해가 안된다고 해도 다시 차근차근 설명을 할 예정이니 너무 걱정하지 않아도 된다 ^^
이 Servlet이라는 것은 Java 기반의 웹 어플리케이션을 개발하기 위해 사용되는 기술이다. 이 Servlet을 사용하여 클라이언트의 HTTP 요청을 처리하고 응답을 생성해서 반환하는 역할을 한다.
이 역할이 필요한 이유는 HTTP 프로토콜을 사용하는 웹 서버를 개발하기 위해선 HTTP 프로토콜을 처리할 수 있어야 하고, 어느 웹 앱이든 HTTP 프로토콜을 처리하는 부분은 동일하다. 하지만 이러한 공통적으로 처리하게 되는 작업을 매 프로젝트마다 각각의 서비스마다 반복을 하게 된다.
이는 매우 귀찮고 비효율적이다. 때문에 이러한 공통 작업을 대신 해줄 수 있는 것이 필요했고, 그것이 바로 Servlet이다. 즉, Servlet은 요청과 응답에 메소드 호출이라는 간단한 작업만으로 다룰 수 있도록 해주는 기술이 되는 것이다!
이에 대한 간단한 예시로 로그인이 있다! 로그인을 시도할 때 서버가 클라이언트에서 넘어온 아이디와 비밀번호를 확인하고 결과를 응답하게 되는데 이러한 역할을 수행하는 것이 바로 Servlet이다!
그렇다면 이 Servlet의 주요 특징들에는 무엇이 있을까?
클라이언트의 요청에 대해서 HTML을 사용하여 응답(Response)
: 서블릿은 HTML, XML, JSON 등 다양한 형식의 응답을 생성할 수 있지만 주로 HTML을 사용하여 웹 페이지를 동적으로 생성한다.
💡 HTML을 사용하는 이유는?
HTML은 웹 페이지의 기본 표현 형식이며, 모든 웹 브라우저와 호환이 되고, 사용자와 상호작용을
하기 위한 필수적인 요소이기 때문이다.
Servlet은 동적으로 작동하는 웹 콘텐츠를 제공하는데 HTML을 사용하여 응답한다면 이러현 응답을
사용자에게 표시하는데 유용하다.
Java의 Thread를 이용
💡 Thread란?
프로세스 내부에서 실행되는 작은 작업의 단위로 모든 프로세스에는 최소 한 개 이상의
Thread가 존재하며 둘 이상 가진 프로세스를 Muti Thread라고 한다.
: Servlet Container는 각 요청을 독립적인 Thread에서 처리하기 때문에 많은 클라이언트의 요청을 동시에 처리할 수 있다. 이를 통해 동시성을 지원한다.
MVC 패턴에서의 컨트롤러로 이용
💡 MVC 패턴이란?
Model, View, Controller의 약자이다.
Model, View, Controller 라는 개념으로 나누어 일련의 작업을 처리하는 방법으로,
Model은 Controller에서 받은 데이터를 조작(가공)한다.
View는 Model의 데이터를 사용자에게 시각적으로 보여주는 역할을 한다.
Controller는 View와 Model 사이에서 데이터의 흐름을 제어한다.
: 여기서 Servlet은 웹 어플리케이션에서 Controller의 역할을 수행하며 클라이언트의 요청을 처리하고, 비즈니스 로직을 수행한 뒤 적절한 View를 선택하여 응답한다.
구현이 되어있는 Servlet Class의 규칙에 맞게 Servlet을 담고 관리해주는 Container
위에 얘기했던 것처럼 Servlet을 우리가 만들었다고 했을 때 이 Servlet을 관리해주는 어떠한 것이 필요한데 이 역할을 Servlet Container가 하게 된다. 즉, Servlet Class의 규칙에 맞도록 Servlet을 관리한다!
Servlet Conatiner는 클라이언트의 요청을 받고 응답을 할 수 있다. 그 이유는 웹서버와 소켓을 사용하여 통신을 하기 때문이다.
이때 클라이언트에서 요청을 하게되면 Container는 HttpServletRequest, HttpServletResponse 두 객체를 생성하여 post, get에 따라 동적인 페이지를 생성하여 응답한다.
💡 HttpServletRequest와 HttpServletResponse란?
HttpServletRequset는 http 프로토콜의 request 정보를 Servlet에게 전달하기 위해 사용하며,
헤더정보, 파라미터, 쿠키, URI/URL 등의 정보를 읽어들이는 메소드를 포함한다.
HttpServletResponse는 요청을 보낸 클라이언트에게 응답을 보내기 위해 WAS에서 생성되어
Servlet에게 전달이 되며, Servlet은 이 객체를 이용하여 content type, 응답 코드 등을 전송한다.
말 그대로 Servlet이 생성되고 사용되고 소멸되기까지의 일련의 과정을 뜻한다.
Servlet의 생명주기는 다음과 같다!
생명주기에 대해서 얘기할 때 나온 메소드들이 있다. 각각의 메소드들이 어떤 역할을 하는지 하나씩 살펴보자!
지금까지 Servlet에 대한 전반적인 내용을 알아보았다. 결국 이 동작방식을 설명하기 위한 발판이었다고 생각하면 좋을 것 같다. 위에서 배웠던 개념들을 바탕으로 Servlet의 동작방식에 대해서 알아보자!

사용자(클라이언트)가 URL을 입력하면 HTTP Request가 Servlet Container로 전송
요청을 전송받은 Servlet Container는 HttpServletRequest, HttpServletResponse 객체를 생성
web.xml을 기반으로 사용자가 요청한 URL이 어느 서블릿에 대한 요청인지 찾음
💡 web.xml이란?
웹 애플리케이션의 배포 설명자로 XML 형식의 파일이다.
Servlet 매핑되는 방법, 인증이 필요한 URL 등의 정보를 확인한다.
해당 서블릿에서 service메소드를 호출한 후 클리아언트의 GET, POST여부에 따라 doGet() 또는 doPost()를 호출
doGet() or doPost() 메소드는 동적 페이지를 생성한 후 HttpServletResponse객체에 응답을 보냄
응답이 끝나면 HttpServletRequest, HttpServletResponse 두 객체를 소멸
Servlet은 Java를 사용하여 동적 웹 페이지를 만들기 위해 필요한 기술이다!
Servlet은 Servlet Container가 관리하며 이 Servlet Container의 역할을 하는 것이 WAS이다!