나나나
[네트워크]웹서버와 WAS 본문
웹 서버(Web Server)
- 소프트웨어 혹은 웹 서버 소프트웨어가 동작하는 컴퓨터를 일컫는다.
- 소프트웨어 : 웹 브라우저로부터 HTTP요청을 받아 정적인 컨텐츠를 제공하는 컴퓨터 프로그램
- 웹 서버의 가장 중요한 기능은 클라이언트가 요청하는 HTML 문서와 각종 리소스의 전달하는 것이다.
- 브라우저나 웹 크롤러가 요청하는 리소스는 컴퓨터에 저장된 정적 데이터 혹은 동적인 결과가 될 수 있다.
- 웹 크롤러도 브라우저처럼 웹 서버에 HTTP에 맞도록 리소스를 요청하고 웹 서버는 요청한 리소스를 반환함
- 정적 데이터 : HTML 문서, 이미지, CSS, Javascript 와 같이 컴퓨터에 저장되어 있는 파일
- 동적인 결과 : 웹 서버에 의해서 실행되는 프로그램을 통해 만들어진 결과물
종류
- Apache, Nginx, Microsoft IIS
- Apache 웹 서버는 오픈소스 소프트웨어로 거의 대부분의 운영체제에서 설치 및 사용가능하다.
- Nginx는 차세대 웹서버로 불리며 더 적은 자원으로 더 빠르게 데이터를 서비스하는 것을 목적으로 만들어진 오픈소스 소프트웨어이다.
WAS(Web Application Server)
- 일종의 미들웨어로 웹 클라이언트의 요청 중 웹 애플리케이션이 동작하도록 지원하는 목적을 가진다.
- DB 조회나 다양한 로직 처리를 요구하는 동적인 컨텐츠를 제공한다.
등장 배경
1. DBMS
- 다수의 사용자가 데이터베이스 내의 데이터에 접근할 수 있도록 해주는 소프트웨어
- DBMS는 보통 서버 형태로 서비스를 제공하여 DBMS에 접속하여 동작하는 클라이언트 프로그램이 많이 만들어졌다.
- 그로 인해 클라이언트 측의 로직이 복잡해지고 크기가 커지는 문제가 발생했다. 프로그램 로직 변경 시 클라이언트가 매번 배포 되어야 하고, 대부분의 로직이 클라이언트에 포함되어 보안의 위험성도 있었다.
2. 미들웨어
- DBMS에 직접 클라이언트가 연결되어 동작하는 방식의 문제점을 해결하기 위해 등장
- 클라이언트와 DBMS 사이에 또 다른 서버를 두는 방식
- 클라이언트는 단순히 요청만 중앙에 있는 서버(미들웨어)에 보내고 미들웨어에서 대부분의 로직을 수행한 뒤, 그 결과를 클라이언트에게 전송하는 방식
3. WAS
- 최초의 웹이 등장했을 때의 웹 브라우저는 정적인 데이터만 사용함.
- 웹이 널리 사용되면서 데이터를 입력하고 조회하는 등 동적인 기능이 요구됨.
- 동적인 기능은 프로그래밍을 통해서 가능했고, 웹 서버에서 프로그래밍 기능이 동작하는 것을 CGI라고 부름
- 웹이 점점 복잡해지고, DBMS와 연관된 복잡한 기능이 요구됨 -> 브라우저와 DBMS 사이에서 동작하는 미들웨어인 WAS의 등장
- Tomcat, JBoss, Jeus, Web Sphere
WAS의 기능
- 프로그램 실행 환경과 데이터베이스 접속 기능 제공
- 여러 개의 트랜잭션 관리
- 업무를 처리하는 비즈니스 로직 수행
- 웹 서버의 기능 포함
웹 서버와 WAS
- 웹 서버는 정적인 콘텐츠를 웹 브라우저에게 전송
- WAS는 프로그램의 동적인 결과를 웹 브라우저에게 전송
- 웹 서버가 WAS보다 간단한 구조이며 WAS가 발달하여 WAS의 내장 웹 서버의 기능은 성능 상 큰 차이 없음
- 자원 이용의 효율성 및 장애 극복, 배포 및 유지보수의 편의성을 위해 분리
- 정적인 파일은 웹 서버에서 빠르게 보내고, 동적인 부분만 WAS에서 처리 -> 기능을 분리로 서버의 부담을 줄일 수 있음
- 만약 WAS에서 전부 처리한다면? : 부하가 커지고, 동적 컨텐츠의 처리 지연으로 인해 페이지 노출 시간이 늘어날 수 있음
웹 서버 | 웹 애플리케이션 서버 |
정적 콘텐츠 | 동적 콘텐츠 |
HTTP 프로토콜을 통해서만 전달 | HTTP를 포함한 여러 프로토콜을 사용하여 비즈니스 로직 제공 |
웹 기반 애플리케이션만 제공 | 웹 및 엔터프라이즈 기반 애플리케이션에 제공 |
멀티 스레딩 지원 안 함 | 멀티 스레딩을 사용해 여러 요청을 병렬로 지원 |
참고하기 좋은 블로그
https://gmlwjd9405.github.io/2018/10/27/webserver-vs-was.html
'CS' 카테고리의 다른 글
[네트워크]Authentication과 Authorization (0) | 2021.06.10 |
---|---|
[네트워크]포워드 프록시(forward proxy)와 리버스 프록시(reverse proxy) (0) | 2021.06.01 |
[네트워크]CORS (0) | 2021.05.26 |
[네트워크]HTTPS / 공개키와 대칭키 (0) | 2021.04.11 |
[네트워크]HTTP 메소드와 멱등성 (0) | 2021.04.11 |