Web Server
WAS 등장을 위해서 Web Server를 알아야 한다.
Web Server는 Clinet로부터 HTTP요청을 받아 HTML로 변환해주는 프로그램을 말한다.
요청을 받으면 정적인 리소스(이미 완성된 채로 서버에 존재)를 제공한다.
Web Server는 정적인 컨텐츠밖에 제공하지 못한다.
사용자 요청에 따라서 변경되는 동적인 컨텐츠를 위해 WAS가 등장했다.
WAS; Web Application Server
웹 서버 기능을 포함해 Application 로직을 수행해서 동적인 컨텐츠를 제공한다.
비즈니스 로직 수행뿐만 아니라 DB와 상호작용이 가능해졌다.
JSP, Servlet 구동 환경을 제공해 Web Container, Servlet Container라고도 부른다.
- Container
JSP, Servlet을 실행시킬 수 있는 소프트웨어.
실행 환경을 제공한다.
- Servlet
요청을 처리하고 반환하는 자바 기반 웹 프로그래밍 기술
- Web Container
JSP, PHP 파일 등을 수행하고 결과를 웹 서버로 전달할 수 있게 한다.
- Servlet Container
Servlet규칙에 맞게 동작을 관리하는 환경을 제공한다.
❓그럼 지금은 Web Server 대신 WAS만 사용하겠구나
정적인 컨텐츠를 제공하는 Web Server에서 더 나아가 동적인 컨텐츠를 제공하는 WAS가 생겼다고 해서 둘 중 하나만 사용하지 않는다. Web Server와 WAS를 둘 다 사용한다.
✔️ 둘 다 사용하는 이유
제일 큰 이유는 기능을 분리시키기 위해서이다.
그 둘의 기능을 다시 한 번 정리하면 아래와 같다.
- Web Server: 정적인 리소스 제공
- WAS: 비즈니스 로직 처리 및 동적인 리소스 제공
WAS는 DB를 조회하는 등 비즈니스 로직 처리를 위해 동작한다. 만약 Web Server의 역할인 정적인 리소스까지 WAS가 담당하면 부하를 일으켜 구현을 위해 비용이 많이 생길 수 있다.
WAS의 역할이 많아지면 WAS의 목적, 비즈니스 로직이 정상적으로 수행되지 않을 수 있다.
WAS가 다운되더라도 Web Server는 제대로 동작해야 한다. 구조 자체가 Web Server와 WAS는 서로 구분되어 있다.
요청 처리 과정

- 먼저 클라이언의 요청을 Web Server가 받아낸다.
- Web Server에서 정적인 리소스를 제공하고, 애플리케이션 로직 수행을 위해 WAS를 요청한다.
- 로직을 수행하고, 필요에 따라 DB에 접근해 데이터를 가져온다.
- 그리고 WAS는 WebServer로 응답을 전달한다.
- WebServer는 클라이언트에게 처리된 응답을 전달한다.
무조건 위와 같은 구조로 되어 있지는 않다.
요청에 따라서 'WebServer → DB'나 'WAS → DB' 구조를 가지고 있을 수도 있다.
대부분 위 그림과 같은 'WebServer → WAS → DB' 구조로 동작한다.
여기서 순서에 주목할 필요가 있다.
DB는 중요한 정보가 저장되어 있어 제일 뒤에 위치한다. 그리고 로직을 수행하는 WAS가 그 앞에 위치한다. Client와 요청과 응답을 주고 받는 건 WebServer가 담당한다.
정적인 리소스를 제공하는 것이 WebServer의 역할이라는 점을 다시 생각해보자.
- 정적인 리소스를 먼저 제공
요청에 따라서 변경되는 컨텐츠가 있고, 언제나 같은 모습을 유지하는 정적인 컨텐츠가 있다.
정적인 컨텐츠는 요청하면 이미 준비되어 있기 때문에 바로 응답을 전달해줄 수 있다.
하지만 로직이 수행되고, 그 결과에 따라서 변경된 결과를 넘겨줘야 하는 동적인 컨텐츠는 그만큰 시간이 걸린다.
준비되어있는 리소스를 바로 전달하는 것과 로직을 수행하고 변경된 값을 넣어서 전달하는 것 중 어느 것이 더 빠를까?
우리에게는 큰 차이가 나지 않겠지만 컴퓨터에게는 이미 준비된 내용을 보내는 것이 훨씬 빠를 것이다.
유튜브에 들어가면 홈 화면에 여러 동영상이 추천되어 나타난다.
그 동영상이 뜨는 시간과 유튜브에 접속되는 시간을 중점으로 보면, 먼저 유튜브 홈페이지에 접속하고 동영상이 나타나기 까지 시간이 걸린다. 보통 화면이 구성되기 까지 '로딩되는 중이다.' 라고 말한다.
이처럼 이미 구성된 정적인 리소스는 빠른 시간 내에 클라이언트에게 응답할 수 있지만 동적인 리소스는 데이터에 따라 시간이 걸린다. 만약 이 두 개의 위치가 바뀔 경우, 동적인 리소스가 모두 표현이 되고 나서 정적인 리소스까지 표현이 되니 사용자가 기다리는 시간은 더 길어질 것이다.
- 보안 유지에 도움
이 순서 하나가 보안에 조금이라도 도움이 될 수 있다.
애플리케이션 로직을 수행하는 WAS가 Client와 바로 닿아있으면, 공격을 당했을 때 로직을 마음대로 변경할 수 있다.
그리고 DB에 접근해 중요 자원, 데이터를 탈취할 위험이 크다.
공격이 들어오더라도 WebServer가 앞에 있어 WAS까지 가지 못하도록 하는 역할도 함께 한다.
완전히 막을 수 없더라도 공격에 대응할 수 있도록 도움을 주는 것이다.
📝 정리
- Web Server
- Client로부터 HTTP요청을 받아 HTML을 반환한다.
- 정적인 리소스를 제공한다.
- WAS; Web Application Server
- 웹 서버 기능을 포함해 Application로직을 수행하고 DB와 상호작용한다.
- JSP, Servlet 구동 환경을 제공하는 Servlet Container역할을 한다.
- 하나에 모든 기능이 집중되어 부하가 일어나지 않도록 분리하여 같이 사용한다.
'ComputerScience > 네트워크' 카테고리의 다른 글
[Network] IP와 Routing에 대해 간단하게 알아보기 (0) | 2025.02.04 |
---|---|
[Network] TCP(Transmission Control Protocol) 자세히 알아보기 (0) | 2025.02.03 |
[Network] TCP/IP의 4계층 구조 알아보기 (0) | 2025.02.03 |