티스토리 뷰
"웹 서버와 웹 어플리케이션 서버의 차이를 아시나요?"
이번 면접의 질문이었다. 서버공부를 한지 오래되지 않은 나로서 매우 기본적인 백엔드 개발자 면접 질문임에도 답할 수 없었다. 면접이 끝나고, 검색해보며 내 자신이 너무 부끄러웠다. 다시 공부해보자 라는 마음에서 이렇게 작성한다.
이 둘의 개념과 차이를 알아보기 이전에 Static pages, Dynamic pages에 대해 알아볼 필요가 있다.
Static pages
- image, html, css, javascript 파일과 같이 컴퓨터에 저장되어 있는 파일들을 의미한다.
- 웹 서버에서 요청에 알맞은 파일을 반환하며, 항상 동일한 페이지를 반환한다. (말 그대로 정적인 컨텐츠)
- 웹 서버에서 제공한다.
Dynamic pages
- 들어온 요청에 맞게 동적으로 만들어진 컨텐츠를 의미한다.
- 데이터베이스, 서버 내 로직 등을 활용해 만들어진 컨텐츠를 반환한다.
- 웹 어플리케이션 서버에서 제공한다.
Web Server 웹 서버
HTTP 요청을 받아 Static contents를 제공하는 서버, 프로그램
- HTTP 프로토콜을 기반으로 하여 클라이언트의 요청을 서비스하는 기능을 담당
(Ex. Apache Server, Nignx, ...)
기능 1: 정적인 컨텐츠 제공
- WAS를 거치지 않고, 바로 요청한 컨텐츠를 제공할 수 있다.
기능 2: 동적인 컨텐츠 제공을 위한 요청 전달
- 요청을 WAS에 보내고, WAS가 처리한 결과를 클라이언트에게 전달한다.
WAS (Web Application Server) 웹 어플리케이션 서버
다양한 서버 내 알고리즘, 비즈니스 로직, DB 조회 등 클라이언트 요청에 따라 동적인 컨텐츠를 제공하는 서버, 프로그램
- HTTP 프로토콜을 기반으로 하여 클라이언트의 요청에 따라 구현된 비즈니스 로직을 통해 동적으로 만들어진 컨텐츠를 반환
(Ex. Tomcat, JBoss, Jeus, ...)
- 데이터베이스 접속 기능, 여러 개의 트랜잭션 관리 등 수행
사실 의미가 조금 다양하다. WAS = Web server + Web container라는 곳도 있고, WAS = Web server와 APP 간의 미들웨어라고 하는 곳도 있고, WAS = WAS + APP 라고 해서 한번에 모든 기능을 한다고 말하는 곳도 있다. 대부분의 경우, Web server + Web container 설명하고 있으니 그렇게 이해하자.
그럼 컨테이너(Container) 는 무엇인가?
- 웹 서버가 보낸 JSP, PHP, ASP.net 등의 파일들을 실행하고 수행결과를 다시 웹 서버로 보내주는 역할을 한다.
결국, 웹 어플리케이션 서버는 웹 서버에서 요청을 받고, 이를 웹 컨테이너로 보내 로직(알고리즘, DB 연결 등)을 수행하고 그 결과를 다시 웹 서버로 보내 최종적으로 클라이언트에게 보내주는 것이다.
WAS가 Web Server의 모든 기능을 수행하면 되는 것 아닌가? Web Server는 왜 사용하는가?
기능을 분리하여 서버 부하를 방지한다.
- WAS는 DB 조회, 다양한 로직을 수행하기라 바쁘기 때문에 단순한 정적 컨텐츠는 Web Server에서 빠르게 클라이언트한테 제공하는 것이 좋다.
- 정적 컨텐츠 요청까지 WAS에서 수행하게 되면 부하가 커지게 되고, 동적 컨텐츠 처리가 지연됨에 따라 수행속도가 느려진다.
물리적으로 분리하여 보안을 강화시킨다.
- SSL 대한 암복호화 처리에 Web Server를 사용
여러 대의 WAS를 연결해 로드 밸런싱 용도로 사용할 수 있다.
- Fail over, Fail back 처리에 유리하다.
- 대용량 웹 어플리케이션의 경우, Web Server와 WAS를 분리하여 오류가 발생한 WAS를 사용하지 않고, 다른 WAS를 사용하게 만듦으로써 무중단 운영을 가능하게 한다.
여러 언어의 웹 어플리케이션 서비스가 가능하다.
- 하나의 서버에서 PHP Application, Java Application를 함께 사용하는 등과 같이 여러 웹 어플리케이션의 활용이 가능해진다.
- 톰캣은 Java언어만 해석이 가능하다. JSP 같은 경우, 처리가 가능하지만 PHP는 실행이 불가능하다. 고로, Web server로 아파치를 사용해 PHP를 사용할 수 있게 만들 수 있다.
결론적으로, 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 Web Server, WAS를 각기 사용한다.
관련 자료를 찾다보면, Java 기반의 서버 자료들이 많이 나오게 된다.
또한, Web container와 관련되어 Servlet, JSP 등의 내용이 나오는데, 추후 정리할 예정이다. 고로, 그 전까지는 아래 주소를 참조하자.
참조 사이트
'Development > Server' 카테고리의 다른 글
Linux File Permission (0) | 2022.04.05 |
---|---|
Cookie, Session 그리고 Spring (0) | 2021.08.15 |
Port foward 하기 (0) | 2021.07.04 |
Telemetry (Logging stack) (0) | 2021.05.07 |
[Django] Html video streaming 에서 소리만 나오는 문제 (2) | 2019.09.28 |
- Total
- Today
- Yesterday
- 클린 아키텍처
- docker
- Spring boot
- Spring
- MySQL
- 백준
- Algorithm
- gradle
- Istio
- boj
- k8s
- 쿠버네티스
- WebFlux
- 알고리즘
- Clean Architecture
- 비동기
- Log
- HTTP
- c++
- Kubernetes
- java
- 일상
- jasync
- hexagonal architecture
- tag
- 로그
- container
- Intellij
- 하루
- python
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |