WAS에 앞서, 웹 서버에 대한 명확한 정의를 알아보자.
https://aws.amazon.com/ko/compare/the-difference-between-web-server-and-application-server/
aws 공식 사이트에 의하면, 웹 서버는 간단히 말해
클라이언트 요청에 응답하여 이미지, 파일, 텍스트와 같은 정적 컨텐츠를 제공하는 소프트웨어 구성 요소이다.
WAS는 이러한 웹 서버의 기능에 더해, 비즈니스 로직을 통해 동적 컨텐츠를 제공하는 소프트웨어 구성 요소이다.
여기에는 어떠한 원리가 있을까?
그림을 보면 WAS는 웹 서버 + 웹 컨테이너로 구성된다.
웹 컨테이너가 데이터베이스와 상호 작용하는 것으로 보아, 웹 컨테이너를 명확히 이해하면 WAS가 동적 컨텐츠를 제공하는 원리에 대해 이해할 수 있을 것이다.
검색 결과, 많은 곳에서 웹 컨테이너 = 서블릿 컨테이너라고 명시하고 있다.
우선 서블릿에 대해 알아보자.
https://stackoverflow.com/questions/7213541/what-is-java-servlet
권위 있는 사이트 stackoverlflow에서 아주 좋은 질문과 답변을 확인할 수 있다.
I read many articles to understand Java servlet but I did not succeed.
Can you please give brief introduction of Java servlets (in easy language). What is a servlet? What are the advantages?
자바 서블릿을 이해하기 위해 많은 글을 읽었지만, 이해하지 못했습니다.
자바 서블릿에 대해 간단히 소개해 주실 수 있나요? 서블릿이 뭐죠? 어떤 장점이 있죠?
A servlet is simply a class which responds to a particular type of network request - most commonly an HTTP request. Basically servlets are usually used to implement web applications - but there are also various frameworks which operate on top of servlets (e.g. Struts) to give a higher-level abstraction than the "here's an HTTP request, write to this HTTP response" level which servlets provide.
서블릿은 단순히 특정 유형의 네트워크 요청 (가장 일반적으로 HTTP 요청)에 응답하는 클래스입니다.
(중략)
서블릿은 결국 클래스의 한 종류이며, HTTP 프로토콜을 지원하는 서블릿을 개발하기 위해선 javax.servlet.http.HttpServlet 클래스를 확장해야 한다.
또한 서블릿 컨테이너란 이러한 서블릿의 생명주기를 관리하고, 서블릿이 요청에 응답할 수 있는 환경을 제공하는 런타임 환경이다.
서블릿의 동작 방식은 다음과 같다.
1. 클라이언트의 동적 컨텐츠를 요청하는 HTTP Request가 웹 서버로부터 서블릿 컨테이너로 전송된다.
2. 서블릿 컨테이너는 클라이언트 요청에 대한 정보를 담고 있는 HTTPServletRequest 객체와 서블릿 인스턴스가 생성할 응답을 담기 위한 HttpServletResponse 객체를 생성한다.
3. 서블릿 컨테이너는 요청을 처리할 적절한 서블릿 인스턴스를 선택한다.
4. 서블릿 컨테이너는 선택된 서블릿 인스턴스의 service() 메서드를 호출한다.
5. service() 메서드는 요청의 HTTP 메서드 (GET, POST 등)에 따라 적절한 doXXX() 메서드를 호출한다.
6. doXXX() 메서드에 의해 생성된 동적 컨텐츠를 HttpServletResponse 객체를 통해 클라이언트에게 응답한다.
7. 응답 후 서블릿 컨테이너는 HTTPServletRequest 객체와 HttpServletResponse 객체를 소멸시킨다.
서블릿과 서블릿 컨테이너에 대해 이해함으로써 비로소 WAS가 어떻게 동적 컨텐츠를 제공하는지 이해할 수 있었다.
1. 클라이언트가 정적 컨텐츠를 요청했을 경우, WAS를 거치지 않고 웹 서버에서 자원을 제공한다.
2. 클라이언트가 동적 컨텐츠를 요청했을 경우, 웹 서버는 해당 요청을 서블릿 컨테이너로 위임한다.
Reference
'Spring' 카테고리의 다른 글
스프링부트 내장 톰캣에 대해 (0) | 2024.06.24 |
---|