본문 바로가기
WEB&WAS/Apache Tomcat

WAS) WAS에 대한 이야기 (1) - 서블릿과 서블릿 컨테이너

by LILO 2021. 7. 31.
반응형

WAS를 시작하기 전에 알아야 될 개념들

 

신입 면접을 보러 다닐 때 WAS는 "어떤거 경험해보셨어요?"라는 질문을 많이 받았었는데 Tomcat 설치만 해봤어요라는 말을 가장 많이 했었습니다.

 

지금 생각해보니 원리를 모르고 설치만 하면 결국에 T/S과정에서 아무것도 할 수 없게 된다는 생각을 하지 못했었네요.

 

일단 Tomcat을 설치해서 JVM을 하나 올려봤습니다. "JVM이라는 것을 보니 톰캣이 자바와 많이 관련되어 있나?" 

자료를 조금 더 찾아본 결과 "Servelt과 Servlet Container"라는 토픽이 먼저 보였습니다.

 

 

 

Servlet과 Servlet Container

 

서블릿은 클라이언트의 요청을 처리하고 결과를 다시 전송해주는 역할을 하는 자바 객체입니다.

WEB의 통신 구조를 공부하신 분들이라면 이해하기 다소 편할 수도 있습니다.

 

서블릿 개념의 이해를 돕기 위해 아래의 사진을 참고합니다.

 

 

일단 클라이언트가 브라우저를 통해 접속 요청을 합니다. 이 때 서블릿은 HTTP 요청에 응답을 합니다. 자바로 웹 개발을 하기위해서 이 서블릿이 클라이언트의 통신을 처리해주려면 서블릿을 관리해주는 서블릿 컨테이너가 필요합니다.

 

정확히는 이 service()이라는 메소드를 통해 활성화되면 서블릿이 요청을 처리하고 응답을 생성하는 과정을 가지게 되는 것입니다.

 

 

 

서블릿 컨테이너는 위의 서블릿 객체를 관리하고 클라이언트들에게 직접적인 서비스를 제공해주는 역할을 합니다.

 

 

 

 

Servlet LifeCycle

 

이 서블릿도 하나의 LifeCycle을 가집니다.

라이프 사이클이란 어떤 하나의 작업이 시작부터 끝나기까지의 과정입니다. 쉽게 생각하면 하나의 생명체가 태어나서부터 죽기까지의 과정이라고 생각하면 될 것 같습니다.

 

https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html

 

클라이언트가 요청하고 웹서버가 Web Container에 요청을 합니다. 

 

그렇다면 이 요청을 받은 웹 컨테이너가 서블릿을 이전에 요청한 이력이 없다면 서블릿 객체(요청 객체, 응답 객체)를 생성하고 그림에 있는 init() 메소드를 호출해서 메모리에 적재시킵니다.

 

사용자의 요청을 처리하기 위해 Thread를 생성합니다. Thread(스레드)가 생성되었으면 해당 Thread를 통해 service() 메소드를 실행합니다.

 

이 service() 메소드는 사용자의 요청에 따라 doGet(), doPost() 메소드가 호출됩니다. 

앞 단에서 사용자의 요청을 받은 정보를 담은 페이지를 생성한 뒤 앞에서 받은 repsponce 객체를 통해 Web Container에서 HTTP Responce로 바꿔서 웹서버에 전송합니다

 

이제 Destory시키는 단계입니다.

받은 request와 responce 객체를 소멸시키고 Thread를 종료합니다.

 

 

Servlet Container

 

서블릿 컨테이너는 여러가지 역할 중 핵심 역할입니다.

- 통신: 소캣 생성, 특정 포트에 대해 리스닝, 연결 요청 왔을 시 스트림을 생성 후 요청 수신 등을 통해 서블릿과 웹서버가 통신할 수 있는 방법입니다.

- LifeCycle 관리
: 서블릿 컨테이너가 시작될 때 서블릿 클래스를 로딩 및 객체화 시키고 요청이 왔을 때 그에 적합한 서블릿을 찾아 실행시키고 서블릿이 모든 할 일이 끝나면 서블릿 컨테이너를 이 서블릿을 제거합니다.

- 멀티 스레딩 관리
: 요청이 오면 스레드를 실행해서 서블릿을 실행합니다. 멀티 스레딩이니까 여러 요청이 오면 그만큼 스레드를 실행할 것입니다.  (MaxThreads)

- JSP를 지원합니다.

정리하면 Web Server와 Web Container가 합쳐진 것이라고 생각됩니다.

만들어진 목적이라고 하면 DB 조회나 다양한 액션을 요구하는 동적 컨텐츠를 만들어졌다고 생각합니다.

반응형