본문 바로가기
Web

[Spring] Servlet Container

by DuncanKim 2022. 7. 29.
728x90

[Spring] Servlet Container

 

 

서블릿 컨테이너를 알아보기 전에 복습해야 할 개념이 있다. 웹 서버 개념이다.

 

2022.07.07 - [IT 지식/Web] - [Web] 웹 서버 : apache, NginX, Tomcat

 

[Web] 웹 서버 : apache, NginX, Tomcat

[Web] 웹 서버 : apache, NginX, Tomcat 1. 웹이 우리에게 오기까지 HTML, CSS, JavaScript 등의 파일은 페이지를 구현하기 위해 필요한 문서들이다. 이 문서들은 클라이언트에 있는 것이 아니라, 그 정보를 저

masterpiece-programming.tistory.com

 

웹 서버는 데이터를 전송하기 위해 HTTP 프로토콜을 사용한다. 웹 서버는 웹페이지 리소스들을 서버 데이터베이스에서 찾아 사용자에게 전송을 해주는 역할을 한다.

 

 

1. 서블릿 컨테이너의 위치

 

서블릿 컨테이너는 클라이언트의 요청을 받아주고 응답을 할 수 있도록 웹 서버와 소켓을 만들어 통신을 한다. 대표적으로 Tomcat이 이러한 역할을 한다. 톰캣은 웹 서버와 소켓을 만들어 통신하며 JSP와 Servlet이 작동할 수 있는 환경을 제시한다.

 

서블릿 컨테이너는 서블릿들의 생성, 실행, 파괴를 담당하며, 서블릿을 관리해준다.

 

일반적으로 사용자는 서버에서 정적인 웹페이지만을 요청할 수 있다. 하지만, 서블릿 컨테이너를 활용하면 서버 사이드에서 '동적으로 웹페이지를 생성'해주는데, 서블릿 컨테이너는 이를 위해 자바를 사용한다. 

 

 

2. 서블릿 컨테이너의 역할

 

1) 웹 서버와의 통신 지원

 

서블릿 컨테이너는 서블릿과 웹 서버가 쉽게 통신할 수 있게 해 주고, 소켓을 만들어 listen, accept 등을 API로 제공해서 복잡한 과정을 생략할 수 있게 해 준다.

 

 

2) 서블릿 생명주기 관리

 

서블릿 컨테이너는 서블릿의 생성과 소멸을 관리한다. 서블릿 클래스를 로딩하여 인스턴스화 하고, 초기화 메서드를 호출하며 요청이 들어오면 적절한 서블릿 메서드를 호출하고, 서블릿이 소멸할 때 GC를 진행한다.

 

 

3) 멀티스레드 지원 및 관리

 

서블릿 컨테이너는 요청이 올 때마다 새로운 자바 스레드를 하나 생성한다. HTTP 서비스 메서드를 실행하고 나면, 스레드는 자동으로 소멸된다. 원래 스레드를 관리해야 하지만, 서버가 다중 스레드를 생성 및 운영하므로 스레드의 안정성은 문제가 없다.

 

 

4) 선언적인 보안 관리

 

서블릿 컨테이너를 사용하면 개발자는 보안에 관련된 내용을 서블릿 또는 자바 클래스에 구현하지 않아도 된다.

일반적으로 보안관리는 XML 배포 서술자에 기록하므로, 보안에 대해 수정할 일이 생겨도 자바 소스 코드를 수정하여 다시 컴파일하지 않아도 보안 관리가 가능하다.

 

 

3. 서블릿 컨테이너와 웹 서버 사이의 request, response 과정

 

1) 웹 서버는 HTTP 요청을 수신한다.

2) 웹 서버는 서블릿 컨테이너로 요청을 전달한다.

3) 서블릿이 컨테이너에 없는 경우 동적으로 검색되고 컨테이너 주소 공간에 로드된다.

4) 컨테이너는 초기화를 위해 서블릿의 init() 메서드를 호출한다(서블릿이 처음 로드될 때 한 번 호출됨).

5) 컨테이너는 서블릿의 service() 메서드를 호출하여 HTTP 요청을 처리한다. 즉, 요청의 데이터를 읽고 응답을 공식화한다. 서블릿은 컨테이너의 주소 공간에 남아 있으며 다른 HTTP 요청을 처리할 수 있다.

6) 웹 서버는 동적으로 생성된 결과를 반환한다.

 

 

 

 

 

 

<출처>

 

: https://www.programcreek.com/2013/04/what-is-servlet-container/

: https://velog.io/@han_been/서블릿-컨테이너Servlet-Container-란

 

728x90

'Web' 카테고리의 다른 글

[Web] OSI 7 Layer  (0) 2022.08.01
[Web] 인증(Authentication)과 인가(Authorization)  (0) 2022.07.31
[Spring] Servlet과 Spring  (0) 2022.07.27
[Java] 내부 클래스와 익명 클래스 그리고 람다  (0) 2022.07.26
[Spring] MVC Pattern  (0) 2022.07.26

댓글