웹서버, WAS, 웹 프레임워크란
클라이언트의 요청을 처리하는 뒷단 서버에는 수많은 기술들이 존재한다. 그 중에서 요청 데이터를 처리하기 위한 가장 기본이 되는 웹 서버, 웹 어플리케이션 서버, 웹 프레임워크에 대해 알아보자.
웹 서버
웹서버는 정적인 데이터를 빠르고 안정적으로 처리하는 것에 중점을 두고 설계되었다. 웹서버는 다음과 같은 역할들을 맡는다.
- 정적 컨텐츠인 각종 파일을 클라이언트에 제공하는 역할
- 간단한 보안 및 로깅
- Reverse Proxy(클라이언트로 받은 요청을 뒷단으로 전달 - 라우팅, 부하 분산)
- 웹 어플리케이션 서버로의 로드 밸런싱
- SSL/TLS와 같은 보안기능 담당
동적 데이터 처리가 필요한 부분에 대해서는 웹 어플리케이션 서버로 요청을 전달한다. 웹 서버에는 대표적으로 Apache, Nginx 등이 존재한다.
💡 Apache C10K 문제
C10K(Current 10,000 clients)란 1초에 10,000번의 요청을 처리할 수 있는가에 대한 문제이다. 다수의 클라이언트가 서버와 연결을 맺으면서 I/O 병목현상이 발생한다. 이로 인해 서버의 처리가 느려지게 되고 결국 클라이언트와 연결이 끊어지고 만다. 해당 문제를 해결하기 위해 비동기 I/O, 멀티 프로세싱, 멀티쓰레딩 등 다양한 기술과 Nginx, Apache prepork MPM, Apache worker MPM와 같은 웹서버가 등장하였다.
웹 어플리케이션 서버(WAS)
동적 데이터 처리를 위해 서버 자원 관리 및 비즈니스 로직 처리를 위한 환경을 제공한다.
- 서블릿 컨테이너로서, 서블릿을 실행하고 관리
- 미들웨어로서 요청과 응답전 공통 처리를 담당(보안, 세션관리 등)
- 데이터베이스 풀링, 트랜잭션 관리, 스레드 풀링, 클러스터링 등 자원을 관리한다.
- 프로그램 실행 환경을 제공
대표적으로 Tomcat, JBoss, Jeus 등이 존재한다.
웹 프레임워크
동적 데이터 요청에 대해 직접적으로 비즈니스 로직을 처리하는 역할을 한다.
- 데이터 처리 로직에 대한 설계와 구현을 재사용이 가능한 형태로 만든 툴
- 모듈화, 재사용성, 확장성 등의 특징을 가진다.
- 요청에 대한 구체적인 로직 처리(데이터베이스 조회 등)
- 예외 처리, 보안 등 데이터에 따른 분기 처리
Spring, Django, NestJS 등이 존재한다.
More Think
💡 웹 프레임워크 혼자서 다 할 수 있던데요?
사실 오늘날의 웹 프레임워크(Django, NestJS 등)는 내부적으로 웹서버와 WAS의 기능을 모두 가지고 있다. 하지만 규모가 커지고 트래픽이 많아진다면 웹 프레임워크가 모든 기능을 담당하기엔 벅찬 상황이 된다. 따라서, 서버의 부하를 방지하기 위해 기능 및 역할을 분리하여 인프라를 구축한다.
💡 DDoS와 같은 문제에 대한 처리는 누가 하나요?
DDoS는 서버, 서비스 또는 네트워크에 인터넷 트래픽을 대량으로 보내려고 시도하는 악의적인 공격이다. 따라서, 보통 웹 서버에 먼저 접근하기 때문에 웹서버에서 처리하며 WAS에서도 해당 문제에 대한 보안처리를 하기도 한다.
💡 NestJS와 같은 프레임워크는 WAS로 동작하는 Servlet 컨테이너가 없는데요?
WAS는 로직 처리전 공통기능을 처리하는 역할을 맡는다고 볼 수 있다. 이러한 관점에서 볼때 NestJS에서는 미들웨어가 WAS의 역할을 한다고 볼 수 있다.
💡 CDN도 웹서버인가요?
CDN(Content Delivery Network)는 컨텐츠 캐시 서버로 웹서버는 아니다. 하지만 정적 컨텐츠를 제공하기에 웹서버의 역할도 수행한다고 볼 수 있다. 보통 이용자들은 웹서버로 요청을 보내고 웹서버는 필요한 요청 파일들을 CDN으로부터 가져와 응답으로 보내준다.
이 외에도 대규모 트래픽을 효율적(빠른 응답속도, 보안, 확장성, 안정성 향상)으로 처리하기 위하여 하나의 역할을 집중적으로 담당하는 여러가지 인프라 도구들을 사용한다. 개념정의 자체보다는 어떠한 역할을 함으로써 어떠한 이점을 가질 수 있는지에 집중하자
댓글남기기