웹 서버(Web Server)와 웹 어플리케이션 서버(Web Application Server)는 엄연히 다른 개념이다. 요약하자면 사용자가 HTTP 요청을 서버로 부터 보내면 가장 먼저 요청을 받는 곳이 웹 서버(Web Server)다. 이 후 요청을 정적 데이터와 동적 데이터에 따라서 웹 어플리케이션 서버(WAS)로 보내게 되고 사용자에게 리소스를 반환한다.
동적 데이터 VS 정적 데이터
동적 리소스(Dynamic Pages)
사용자의 요청에 따라 동적으로 생성되는 리소스를 의미한다. DB 혹은 서버 어플리케이션 내부에서 생성된 리소스를 반환한다. 동적 리소스가 제공되는 곳은 웹 어플리케이션 서버(WAS)다.
정적 리소스(Static Pages)
HTML, CSS, Javascript, Image 등 서버 컴퓨터에 저장되어 있는 파일들을 의미한다. 사용자의 요청에 맞는 파일을 반환하게 되고, 요청에 따라 항상 동일한 페이지를 반환하게 된다. 변하는게 없기 때문에 정적인 리소스다. 정적 리소스가 반환되는 곳은 웹 서버(Web Server)다.
웹 서버(Web Server) VS 웹 어플리케이션 서버(Web Application Server)
웹 서버(Web Server)
웹 서버는 HTTP 요청을 받아 정적 데이터를 제공하는 서버 프로그램이다. HTTP 프로토콜 기반으로 클라이언트의 요청을 가장 먼저 처리하는 서버 프로그램이다. 대표적으로 Apache Server, Nginx가 있다. 웹 어플리케이션 서버에 따로 요청을 하지 않고 정적 리소스를 바로 반환할 수 있다.
만약 클라이언트의 요청에 동적 리소스가 필요하다면 웹 서버(Web Server)는 웹 어플리케이션 서버(WAS)에 새로운 요청을 보낸다. WAS로 부터 동적 리소스를 받아 클라이언트에 제공해준다.
웹 어플리케이션 서버(WAS)
데이터베이스, 서버 내 비즈니스 로직에서 생성되는 동적 리소스를 반환하는 서버 프로그램이다. HTTP 프로토콜에 기반하여 클라이언트의 요청에 따라 서버의 비즈니스 로직에서 처리된 동적 리소스를 반환한다. 데이터 베이스에 접속 가능하며, 여러개의 트랜잭션을 수행할 수 있다.
WAS는 웹 서버와 App 사이에서 미들웨어 역할을 수행한다. 또한 WAS와 컨테이너를 합친 개념으로도 사용된다. 컨테이너는 웹 서버에서 받은 JSP, PHP, ASP.net 파일들을 수행한 결과를 웹 서버로 반환해주는 역할을 한다. 어떤 개 념이던 웹 서버에서 받은 요청을 App에 전달하여 처리한 후 웹 서버로 반환하는 프로그램이다.
WAS로는 대표적으로 Tomcat, uWSGI 등이 있다.
웹 서버와 웹 어플리케이션 서버를 구분하는 이유
① 보안 이슈
웹 서버와 웹 어플리케이션 서버가 분리되면서 SSL등 암호화 / 복호화 처리에 웹 서버만 사용한다. 클라이언트의 요청이 민감한 DB까지 접근 가능하다면 보안 이슈에 취약할 수 있다.
② 서버 부하 방지
웹 어플리케이션 서버는 App을 구동하고, DB에 접근해서 데이터를 처리하는 등 많은 프로세스가 처리된다. 이 때 단순히 정적인 데이터를 처리하기 위해서는 웹 서버만으로 충분하다. 정적 리소스 까지 웹 어플리케이션 서버에서 담당한다면 서버에 부담이 커진다.
③ 호환성 이슈
하나의 서버에서 여러개의 언어를 처리할 수 있다. Tomcat은 Java만 처리가 가능하고, JSP는 PHP 처리가 불가능하다. 이럴 경우 웹 서버로 아파치를 사용해서 PHP 사용이 가능하게 만들 수 있다.
'Programming' 카테고리의 다른 글
[Node.js] Express 미들웨어 함수 (0) | 2022.05.26 |
---|---|
[Web Server] Express Routing query VS params (0) | 2022.05.26 |
[Programming] CORS란? (preflight, OPTIONS 메소드?) (0) | 2022.05.25 |
[React] Effect HOOK API useEffect 사용하는 방법 (0) | 2022.05.25 |
[Javascript] setTimeout vs setInterval 차이 (debounce, throttle ?) (0) | 2022.05.22 |
댓글