웹 애플리케이션이란? HTTP, Web Server, Web Application Server
🚀 HTTP 란?
Hypertexy Transfer Protocol 의 약자로, 네트워크 5계층 중 애플리케이션 계층 프로토콜이다. 네트워크 아키텍처 중 클라이언트 서버 모델을 사용한다. 웹 페이지는 객체들로 구성되며, 각각의 객체는 서로 다른 웹 서버에 저장될 수 있다. 여기서 객체란, 단일 URL로 지정할 수 있는 하나의 파일이다. HTML파일, JEPG 이미지, JS, CSS 등을 의미하며, 우리는 URL을 통해 웹 서버에 객체, 즉 HTML 파일을 요청한다. 웹 서버는 요청한 파일을 제공하고, 브라우저는 화면에 맞게 랜더링하여 우리에게 보여준다!
네트워크 5계층에 대한 자세한 내용은 여기를 참조!
HTTP의 특징
- HTTP uses TCP: HTTP는 TCP 연결을 이용하며, 보통 80번 포트를 사용한다. (클라이언트는 port 80을 사용하여 소켓을 생성하고, 웹 서버에 TCP 연결)
- HTTP is “stateless” : 서버는 진행 중인 요청에 대한 내부 상태를 유지하지 않는다. 객체에 대한 단일 요청과 단일 응답만을 가지는데, 트랜잭션 실패 시 문제를 복구할 필요가 없어 간단하기 때문이다. (만약에 HTTP가 상태를 가지고, 이를 복구하기 위한 로직이 추가된다면 한 번의 요청이 많은 자원을 소모할 것이다. 차라리 다시 요청하는게 빠르다)
지속/비지속 연결, HTTP 1.1, 2, 3 등의 깊은 내용은 여기를 참조
모든 것이 HTTP
클라이언트와 웹 서버가 통신을 할 때, HTTP 메시지에 HTML, TEXT, IMAGE, 음성, 영상, 파일 등의 데이터를 전송하고, 서버 간에 데이터를 주고받을 때에도 대부분 HTTP를 사용한다. 그렇다면, 웹 서버와 웹 애플리케이션 서버는 무엇일까?
🖥️ 웹 서버(Web Server)와 웹 애플리케이션 서버(WAS)
Web Server
웹 서버는 HTTP를 기반으로 동작하며, 정적인 리소스를 제공한다. 여기서 정적인 리소스란, 정적인 파일 - HTML, CSS, JS, 이미지, 영상들을 의미한다. 사용자의 동작에 따라 변하지 않는 정적인 파일을 제공한다.
- HTTP 기반으로 동작
- 정적 리소스(HTML, CSS, JS, 이미지, 영상 등)제공, 기타 부가 기능
- 예: NGINX, APACHE
Web Application Server, WAS
웹 애플리케이션 서버는 웹 서버와 마찬가지로 HTTP 기반으로 동작하며, 웹 서버의 기능에 프로그램 코드를 실행하여 애플리케이션 로직을 수행한다. 즉, 정적 리소스 제공 기능에 더해 요청에 따라 동적으로 데이터를 제공한다.
🎯 웹 서버와 WAS의 차이
웹 서버는 정적 리소스(파일)을 제공하고, WAS는 애플리케이션 로직을 수행한다. 사실, 둘의 용어 경계는 모호하다고 볼 수 있다. 웹 서버가 프로그램을 실행하는 기능을 포함하기도 하고, WAS도 웹 서버의 기능을 제공하기 때문이다. 웹 시스템을 구성할 때, 어느 한 서버에 부하가 몰리는 것을 방지하기 위해 정적인 리소스를 처리하는 웹 서버와 애플리케이션 로직을 처리하는 WAS를 나누게 되었다. 현업에서는 보통 화면 UI와 랜더링 기능을 제공하는 프론트엔드 서버를 웹 서버, DB와 통신하여 애플리케이션 로직을 수행하는 백엔드 서버를 WAS 서버라고 부른다.
🛠️ 웹 시스템 구성
WAS와 DB 만으로 구성할 경우
WAS는 웹 서버의 기능도 제공하기 때문에 WAS와 DB 만으로도 시스템을 구성할 수 있다. 이 구조에서 WAS는 정적 리소스와 애플리케이션 로직을 모두 제공한다. 그러나, 이 구조에서는 WAS가 너무 많은 역할을 담당하며, 서버 과부하가 우려된다. 가장 비싼 애플리케이션 로직이 정적 리소스 때문에 수행이 어려울 수 있으며, WAS에 장애가 발생했을 때 오류 화면도 노출할 수 없다!
Web Server, WAS, DB 구성
이 구조에서는 정적 리소스는 웹 서버가 처리하고, 애플리케이션 로직은 WAS 서버가 처리한다. 웹 서버는 애플리케이션 로직 같은 동적인 처리가 필요할 때 WAS에 요청을하고(클라이언트의 요청을 위임), WAS는 애플리케이션 로직을 처리하여 웹 서버에 응답한다. 웹 서버는 WAS의 응답을 다시 클라이언트에게 전달한다.
이 구조에서는 효율적으로 자원을 관리할 수 있다. 정적인 리소스가 많이 사용되면 웹 서버를 증설하고, WAS가 많이 사용되면 WAS를 증설한다.
또한, 장애 대응도 수월하다. 정적인 리소스만 제공하는 웹 서버는 잘 죽지 않는데, 애플리케이션 로직이 동작하는 WAS 서버는 잘 죽는다. 따라서 WAS에 장애가 발생하면 웹 서버가 오류 화면을 제공할 수 있다.
✅ 정리
- HTTP: Hypertext Transfer Protocol의 약자로, TCP 연결을 가지며 stateless - 요청에 대해 상태를 저장하지 않음
- Web Server: HTTP 기반, 정적인 리소스를 제공하는 서버로, 프론트엔드 서버
- Web Application Server: HTTP 기반, 애플리케이션 로직을 처리하는 서버로, 백엔드 서버
- 현업에서는 웹 시스템을 웹 서버, WAS, DB로 구성한다.