처음부터 시작하는 개발자

[CS] Apache Tomcat 개요 본문

CS

[CS] Apache Tomcat 개요

hwcho0456 2023. 11. 9. 17:18

웹 서버의 개념과 발전

초창기의 웹은 웹 서버를 이용하여 특정 url에 위치한 정적 페이지만을 제공하였다. 하지만 유저에게 맞춤형 페이지를 제공할 필요성이 생기고, 이에 대응해 일일히 정적 페이지를 생성해두는 것은 큰 낭비이기 때문에 클라이언트의 요청이 들어올 때마다 프로그램을 이용해 페이지를 생성해 제공한다는 WAS(웹 어플리케이션 서버)가 등장하였다. WAS는 정적인 페이지를 제공하는 웹 서버에 추가적으로 동적인 페이지를 만드는 프로그램인 어플리케이션 서버, 그리고 HTTP 요청을 어플리케이션 서버에 사용된 프로그래밍 언어로 번역해주는 모듈(JAVA는 웹 컨테이너, Python은 WSGI 등)을 가지고 있다.

 

초창기 동적 웹 페이지는 CGI(Common Gateway Interface)를 이용해 어플리케이션 서버와 소통해 클라이언트의 요청을 처리했다. 이 방식은 클라이언트의 각 요청마다 어플리케이션 서버를 별도의 프로세스로 생성하여 처리하므로, 많은 리소스를 소모하고 효율성이 떨어지는 문제가 있었다. 이를 개선하기 위해, 어플리케이션 서버를 하나의 프로세스로 유지하면서, 요청을 쓰레드 등을 활용해 병렬로 처리하는 방식이 필요하게 되었다. 이를 위해, 파이썬은 WSGI(Web Server Gateway Interface), 자바는 서블릿 기술을 각각 도입하였다.

 

JAVA 서버 연결구조

Apache Tomcat 개요

Tomcat은 기본적으로 서블릿/JSP(HTML에 JAVA 코드가 들어간 템플릿)를 관리하는 웹 컨테이너로써 기능한다. 웹 컨테이너는 웹 서버가 동적 페이지를 요구하면 이에 맞는 서블릿/JSP을 찾아 실행하여 결과 값을 전달해주는 역할을 한다. 이 외에도 대부분의 WAS로써 기능을 할 수 있지만, 실제 상용 환경에서는 대용량의 트래픽을 처리하기 위해 별도의 전문 웹 서버(Apache HTTP, Nginx 등)를 따로 두고 함께 사용하는 경우가 많다. 이런 웹 서버들은 정적인 파일을 빠르게 제공하고 리버스 프록시(로드 밸런싱, 캐싱) 등의 추가 기능이 있기 때문이다.

 

서블릿 

서블릿은 JAVA진영에서 기존 CGI 형태를 개선한 기술이다. 두 기술의 큰 차이점을 나열하면 다음과 같다.

 

1. 이식성 : CGI와 달리 서블릿은 JVM 위에서 동작하므로 어느 플랫폼에 상관없이 잘 작동한다.

 

2. 데이터 공유:  CGI와 달리 서블릿은 데이터 공유가 가능하다.

 

3. 웹 서버와의 소통 : 서블릿은 WAS 내에서 직접 동작하므로 웹 서버와 직접 소통이 가능하지만, CGI는 별도의 프로그램이 실행된 결과를 웹서버 인터페이스에 전달하는 형태이다.

 

4. 효율성: 서블릿은 쓰레드 단위로 동작하므로 프로세스 단위로 동작하는 CGI보다 훨씬 효율적이다.

 

5. 쿠키 활용: CGI와 달리 서블릿은 클라이언트의 쿠키를 다룰 수 있다.

 

동적 페이지 생성과정

 

웹  컨테이너 (서블릿 컨테이너)

 

웹 컨테이너는 서블릿들을 적재적소에 사용될 수 있도록 관리하는 기능을 한다. 주요 웹 컨테이너의 기능들을 나열하면 다음과 같다.

 

1. 네트워크 서비스 : 서블릿 클래스를 로드하여 http 요청에 적절한 응답을 만들어 전달한다.

 

2. MINE 기반 메시지 인코딩/디코딩 : MINE(인터넷에서 널리 쓰이는 포맷 ex: text/html) 기반 메시지를 인코딩 및 디코딩한다.

 

3. 서블릿 관리 : 서블릿의 생명주기를 관리한다.

 

4. 리소스 관리 :  HTML 파일, 서블릿, JSP 페이지와 같은 정적 및 동적 리소스를 관리한다.

 

5. 보안 서비스 : 리소스 접근의 인증 및 권한 부여를 처리한다.

 

6. 세션 관리: URL 경로에 세션 ID를 추가하여 세션을 유지한다.

 

 

'CS' 카테고리의 다른 글

[CS] HTTP의 개념  (0) 2023.12.10
[CS] AI를 위한 수학  (0) 2023.12.02
SQL for Data Analysis Cheat Sheet  (0) 2023.11.17
[CS] Transformer 개요  (0) 2023.11.05
[CS] 객체지향 프로그래밍  (0) 2023.10.15