웹서버(Web Server) 란?
웹 페이지를 사용자에게 전송하는 서버이다.
웹서버는 데이터를 전송하기 위해 HTTP 프로토콜을 사용한다.
사용자가 브라우저에 원하는 웹 페이지의 url을 입력하면 웹 페이지가 나타나는 것처럼
웹 서버가 하는 일은 웹페이지를 사용자에게 전송하는 것이다.
서블릿(Servlet) 이란?
자바를 사용해 클라이언트에게 동적인 웹페이지를 서비스하기 위해 사용한다.
https://ticssfm.tistory.com/177?category=1007516
서블릿 컨테이너(Servlet Container)란?
서블릿 컨테이너는 서블릿의 생성, 실행, 삭제같은 Life Cycle을 관리한다.
위 포스팅에서 언급했듯, 서블릿을 이용하여 자바로 웹 페이지를 동적으로 생성한다.
서빌릇은 스스로 작동하는 것이 아니라서 이 서블릿의 관리를 하는 것이 서블릿 컨테이너이다.
서블릿 컨테이너는 client의 요청(request)을 받고 응답(response)할 수 있도록 웹 서버와 소켓을 만들어 통신한다.
대표적으로 Tomcat(톰켓)을 사용한다.
톰켓(Tomcat) ?
톰켓은 웹 서버와 소켓을 만들어 통신하며, JSP와 서블릿이 작동할 수 있는 환경을 제공한다.
웹서버에서 정적인 요청(html, css, png)이 들어오면 apache가 서비스하고, 동적인 요청은 톰켓이 서비스한다.
톰켓에서 동적인 파일을 정적인 파일로 변환해주는 형식이다.
그니까 자바 파일을 컴파일해 .class 파일을 만들고 메모리에 올려 servlet 객체를 만드는 것이다.
서블릿 컨테이너의 역할
1. 웹서버와의 통신 지원
서블릿 컨테이너는 서블릿과 웹서버가 손쉽게 통신할 수 있게 해주어, 소켓을 만들고 listen, accept 등을 API로 제공해 복잡한 과정을 생략할 수 있게 한다.
2. 서블릿 생명주기(Life Cycle) 관리
1) 클라이언트로부터 Http 요청 받기 2) 서블릿 객체 생성 - 최초 요청 시 한 번만 3) service() 메소드는 요청 시마다 실행됨 - 요청 방식에 따라 doGet(), doPost() 메소드로 분기된다. 4) destroy() 메소드 실행 - 서버가 중지 또는 재실행될 때, 즉 메모리에서 서블릿 객체가 삭제될 때 실행된다. - 자원 반납 |
3. 멀티쓰레드 지원 및 관리
요청마다 새로운 자바 thread를 생성한다.
JVM이 각 요청을 분리된 자바 스레드 내부에서 처리하도록 함.
http 서비스 메소드를 실행하고 나면 스레드는 자동으로 소멸되므로 관리 없이 다중 스레드 생성 및 운영이 가능해진다.
서블릿 컨테이너의 요청 처리 순서
1. 웹서버가 Http 요청을 받음
2. 웹서버는 요청을 서블릿 컨테이너로 전달
3. 서블릿이 컨테이너에 없다면, 서블릿을 동적으로 검색하여 컨테이너의 주소 공간에 로드
4. 컨테이너가 서블릿의 init() 메소드를 호출하면 서블릿이 초기화됨
- 최초 한번만 실행
5. 컨테이너가 서블릿의 service() 메소드를 호출하며 Http 요청을 처리함
- 서블릿은 컨테이너 주소에 남아있고, 다른 Http 요청 처리 가능(멀티 스레드)
6. 웹서버가 동적으로 생성된 결과를 반환
'컴퓨터 > WEB' 카테고리의 다른 글
[Spring] DI(Dependency Injection)와 IoC(Inversion of Control)란? (0) | 2022.10.23 |
---|---|
[Spring] Servlet, JSP 그리고 세션을 이용한 로그인, 로그아웃 구현 (1) | 2022.09.25 |
[Spring] Servlet, JSP 그리고 MVC 패턴 (0) | 2022.09.18 |
[Django] 장고 User 모델 OneToOneField로 확장해서 사용하기 + 토큰으로 로그인하기 (0) | 2022.05.14 |
[Web] 로그인 메커니즘, 그리고 세션과 쿠키 (0) | 2022.05.10 |