WAS를 이해하려면 웹서버와 웹 컨테이너에 대한 이해가 필요해 개념 정리를 하게 되었다.
클라이언트가 요청한 정적인 컨텐츠를 HTTP 프로토콜을 통해 제공해주는 서버
Apache, IIS(Internet Information Server), Nginx 등이 있다.
HTML, CSS 같은 정적인 페이지를 제공한다 생각하면 된다.
단순히 정적인 데이터만 반환해주면 되므로 처리 속도가 빠르고 트래픽 과부하를 잘 처리할 수 있는 장점이 있다.
동적인 데이터를 처리하여 정적인 페이지를 생성해주는 모듈
Servlet 컨테이너, JSP 컨테이너, EJB 컨테이너 등의 종류가 있으며,
대표적인 웹 컨테이너로는 아파치 톰캣이 있다.
자바에서는 동적인 데이터를 처리하는 서블릿이 있다. 이 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 스스로 작동하는 것이 아닌, 서블릿을 작동시켜주는 무언가가 필요하다.
그 것이 바로 서블릿 컨테이너
이다.
서블릿 컨테이너
는 서블릿의 생명주기를 관리하고, URL과 특정 서블릿을 맵핑하며 URL 요청이 올바른 접근 권한을 갖도록 보장한다.
WAS는 웹 서버와 웹 컨테이너를 결합한 서버를 의미한다.
대표적으로 톰캣이 있다.
특정 요청에 해당하는 데이터를 데이터베이스에서 가져와 비즈니스 로직을 구현해 그에 맞는 결과를 동적으로 나타내야 될 때 효율적이다.
서블릿이나 jsp등으로 작성된 동적인 파일들을 띄우는 서버라고 생각하면 된다.
https://ssup2.github.io/theory_analysis/Servlet_Servlet_Container/
웹브라우저에서 웹서버에 HTTP Request를 보내면 웹 서버는 받은 HTTP 요청을
WAS 서버의 웹서버에 전달한다.
WAS 서버의 웹서버는 HTTP 요청을 서블릿 컨테이너에 전달한다.
서블릿 컨테이너는 HTTP 요청 처리에 필요한 서블릿 인스턴스가 힙 메모리에 있는지 확인하고,
없다면 서블릿 인스턴스를 생성, 서블릿 인스턴스의 init 메서드를 실행하여 서블릿 인스턴스 초기화
서블릿 컨테이너는 서블릿 인스턴스의 service 메서드를 실행하여 HTTP 요청을 처리하고
WAS 서버의 웹서버에게 처리 결과를 전달한다.
WAS 서버의 웹서버는 HTTP 응답을 웹서버에 전달하고, 웹서버는 웹 브라우저에 전달한다.
WAS에 대한 개념이 부족해 이것저것 찾아보면서 공부하다가 결국 정리까지 하게되었다.
사실 구글링을 하면 WAS에 대한 개념들이 엄청나게 많이 나온다. 그 많은 것들을 다 이해하고 정리하기엔 나의 기초지식이 아직 많이 부족해 최대한 쏙쏙 빼서 정리하였다. 또한 스프링 컨테이너에 대한 개념도 묶어 정리하고 싶었는데 IOC와 DI에 대한 개념이 많이 부족해 더 공부해서 추후 따로 정리하도록 해야겠다.
https://vixxcode.tistory.com/174
http://gap85.tistory.com/45
https://frootjy.tistory.com/15
https://velog.io/@waoderboy
https://velog.io/@han_been
https://ko.wikipedia.org/wiki/%EC%9B%B9_%EC%BB%A8%ED%85%8C%EC%9D%B4%EB%84%88
https://jypthemiracle.medium.com/servletcontainer%EC%99%80-springcontainer%EB%8A%94-%EB%AC%B4%EC%97%87%EC%9D%B4-%EB%8B%A4%EB%A5%B8%EA%B0%80-626d27a80fe5