본문 바로가기

[Kotlin&Spring] 5기 내일배움캠프

[Kotlin&Spring] 5기 Web Server, WAS의 차이와 Tomcat

Spring 내부에는 Tomcat 이라는 WAS가 존재한다

Tomcat과 WAS는 무엇일까?

Web 상에서 요청과 응답을 처리하는 서버에는 Web Server 와 WAS가 있다고 한다

그렇다면 이 둘이 하는 일과 차이점은 무엇일까?

 

Tomcat 로고

 

컴퓨터의 메모리를 공부하면 휘발성 저장 정치와 비휘발성 저장 장치를 배우게된다

휘발성 저장장치(Volatile Memory)는 컴퓨터 전원을 껐을 떄 RAM에 저장된 명령어와 데이터가 모두 날아간다

그러나 비휘발성 저장장치(Non-Volatile Memory)는 전원이 꺼져도 저장된 내용이 유지된다

비휘발성 저장장치는 하드 디스크, SSD, USB와 같은 보조장치 등이 있다

따라서 RAM 에는 실행할 대상, 비휘발성 저장장치에는 보관할 대상을 저장한다

 

일반적으로 사용하는 RAM은 DRAM(Dynamic Random Access Memory)이다

이 Dynamic은 동적이라는 의미를 지닌다

저장된 데이터가 동적으로 변하는, 즉 사라진다는 뜻을 지닌다

 

캐시를 공부할 때 봤던 SRAM(Static Random Access Memory)은 정적인 RAM을 뜻한다

 SRAM은 시간이 지나도 저장된 데이터가 사라지지 않고 일반적으로 DRAM 보다 속도가 빠르다

상대적으로 집적도가 낮고 소비 전력이 크며 비싸기 때문에 일반적으로 DRAM을 사용한다

 

Web Server는 HTTP 기반으로 동작하며 정적 리소스(HTML, CSS, JS, 이미지 등)를 제공한다

WAS(Web Appliocation Server)는 HTTP 기반으로 동작하며 웹 서버의 기능을 포함하고 코드를 실행해서 Application 로직을 수행하고 DB와 상호작요해 동적 컨텐츠를 생성한다

두 서버의 차이점은 요청과 응답의 대상을 누구로 하는가와 다루는 데이터로 나눌 수 있다

먼저 Web Server 는 클라이언트와 서버의 응답과 요청을 기본으로 한다

그리고 이때 정적 자원을 조회하는 역할 등을 한다

WAS는 클라이언트 또는 어플리케이션을 상대로 서버의 응답과 요청이 이루어진다

이때 정적 자원 조회 기능을 할 뿐아니라 비즈니스 로직 등의 연산을 통한 동적 자원을 반환한다

여기에서 말하는 정적 자원과 동적 자원은 무엇일까?

 

정적 자원(Static Resource)은 서버에 미리 저장되어있는 변경되지 않는 콘텐츠를 의미한다

정적자원의 대표적인 예시는 HTML등의 텍스트 파일과 PNG 등의 이미지 파일이 있다

클라이언트의 요청에 의해 파일 내용이 변하지 않고 항상 동일하다는 특징이 있다

따라서 다른 데이터에 접근하거나 연산처리가 필요없기 때문에 응답 속도는 빠르다

따라서 브라우저나 CDN(Content Delivery Network)을 통해 쉽게 캐싱할 수 있고 성능 최적화에 유리하다

 

동적자원(Dynamic Resource)은 요청 시점에 서버에서 생성되는 콘텐츠를 의미한다

사용자의 요청, 입력값, 세션 정보 등을 기반으로 컨텐츠가 생성된다

서버는 요청을 처리하기 위해 다른 데이터를 조회하기도 하고 외부 API를 호출하거나 내부적으로 비즈니스 로직을 실행하는 등 연산이 이루어진다

클라이언트의 요청마다 각 응답 내용이 변할 수 있다

요청마다 응답 내용이 달라질 수 있어 캐싱이 어렵다

그러나 CDN, Etag 등으로 캐싱할 수 있다

 

위의 자원 종류에 따른 Web Server 의 장단점은 다음과 같다

요청에 대한 파일만 전송하고, 서버에서 데이터를 가져와야 할 필요가 없기 때문에 응답 속도가 빠르다

서버 측에서 데이터베이스와 상호작용하지 않기 때문에 보안 공격할 여지가 없어 보안성이 높다

동적인 요소가 없기 떄문에 데이터베이스가 필요하지 않고 구축하기 쉽다

정적 파일을 호스팅하기 위한 웹서버의 저장소만 필요해 비용이 적게 든다

단점은 클라이언트와의 상호작용이나 동적 기능에 대해 제한적이다

또한 비즈니스 로직을 수행에 제한적이므로 일일이 작업하는 등 유지보수가 어렵다

 

WAS의 장단점도 존재한다

사용자가 웹 페이지와 상호작용할 수 있어 다양한 기능을 제공하다

서버 측에서 데이터를 처리하므로 페이지 수정과 업데이트에서 편리하다

데이터베이스와 연동하므로 데이터의 저장과 수정, 등의 기능을 사용할 수 있다

단점은 서버측에서 데이터를 처리하기 때문에 일정 수준의 성능 구축에 어려움이 있을 수 있다

서버와 데이터베이스가 상호작용하는 과정에서 데이터 정보를 공격하기 쉽다

추가적으로 WAS, 데이터베이스 등의 추가비용이 발생한다

 

내가 앞으로 공부할 Spring 은 Tomcat 이라는 WAS를 내장하고 있다

Tomcat is designed to be a fast and efficient implementation of the Servlet Specification. Tomcat came about as the reference implementation of this specification, and has remained rigorous in adhering to the specification. At the same time, significant attention has been paid to Tomcat's performance and it is on par with other servlet containers, including commercial ones.

In current releases of Tomcat, we aim to make Tomcat manageable via JMX. Manageability continues to be a primary area of concern and ongoing development.
Apache 공식 문서

 

Tomcat 은 JAVA EE 기반으로 만들어진 WAS이다

위 글에도 나와 있듯이 Tomcat은 JSP와 Servlet 을 구동하기 위한 Servlet 컨테이너 역할을 수행한다

Servlet 은 HTTP 기반 요청과 응답을 처리한다

서블릿은 Javax.servlet.http.HttpServlet 클래스를 상속해야한다

서블릿 컨테이너는 서블릿을 초기화, 생성, 관리, 호출, 종료하는 역할을 수행하고 서블릿의 생명주기도 관리한다(싱글톤)

서블릿 객체는 개발자가 직접 인스턴스화하여 사용하는 것이 아닌, 코드만 작성하면 서블릿 컨테이너가 생성한다

또한 동시 요청에 대한 처리를 위해 Multi Thread를 지원한다

JSP(Java Server Page)는 HTML 코드 형식을 하되 내부에 자바를 사용해 로직을 구성할 수 있다

 

Servlet, JSP 방식의 문제점은 다음과 같다

1. Servlet 만을 사용한 경우 View를 위한 코드와 비지니스 로직을 처리하는 코드가 Servlet에 모두 존재하여 우지보수가 어려워진다

2. JSP 를 사용하여 View를 분리했지만 비지니스 로직 일부가 JSP 파일안에 존재해 여전히 책임이 많아 유지보수가 어렵다

따라서 Tomcat은 아래 그림과 같이  하나의 Servlet이나 JSP 로 처리하던 것을 Model, View, Controller 영역으로 나눈 MVC 패턴을 적용한다

Tomcat MVC

 

두 서버를 공부하면서 느낀 점은 사람이 로직을 추가하는 만큼 다양한 기능을 추가할 수 있지만 사람에 의해 생성되는 만큼 오류가 생길 가능성도 생길 수 밖에 없다는 것이다

그러나 Tomcat 과 같이 서버를 관리해주는 WAS가 프레임워크 내에 존재하게 되면서 기본적인 틀이 생기고, 개발자들은 좀 더 비즈니스 로직 개발에만 전념할 수 있게 되는 것 같다

 

조금씩 천천히 오늘의 할 일을 해서 내일은 좀 더 꽉찬 내가 되고싶다

앞으로 남은 날이 많으니 차근차근 해보자 화이팅 ~

 

출처

https://tomcat.apache.org/tomcat-10.1-doc/architecture/overview.html

 

Apache Tomcat 10 Architecture (10.1.34) - Architecture Overview

This page provides an overview of the Tomcat server architecture. Tomcat is designed to be a fast and efficient implementation of the Servlet Specification. Tomcat came about as the reference implementation of this specification, and has remained rigorous

tomcat.apache.org