[미들웨어] WAS와 웹서버의 차이는 무엇일까?
다음 프로젝트에서 미들웨어 담당자가 될 예정이다.
프로젝트 투입 전 공부를 하고자 이런저런 자료를 찾아보는 중이다.
** 오늘부터 올리는 게시글들은 미들웨어 WAS 와 관련된 내용이며, 공부하고 개인적으로 이해한 내용을 작성하는것이니
누군가 읽다가 틀린 지식이나 정보를 보셨다면 댓글 달아주시면 감사하겠습니다!!!
먼저 요청부터 응답까지 전체적인 프로세스를 그림으로 쉽게 이해해보자
1. 웹브라우저에서 HTTP 요청을 보낸다.
2. 웹서버(Web Server)는 정적인 파일(html, css, js 등)을 처리하는 서버이다.
정적인 요청의 경우 웹서버가 바로 응답한다.
3. 웹애플리케이션서버 (Web Application Server)는 동적인 정보 가공시 처리하는 서버이다.
동적인 요청의 경우 웹서버가 WAS로 요청을 위임한다.
여기서 동적으로 변하는 요청이란
회원 이름 <홍길동>의 정보 조회
회원 이름 <강지은>의 정보 조회 등
DB로부터 읽어오는 값이 달라지는 경우를 의미한다.
4. 위임받은 WAS는 해당 요청을 SQL 질의하고, DBMS서버에서 데이터를 가져와 웹서버에게 돌려준다.
4. 웹서버는 응답을 웹브라우저로 보낸다.
예를 들어 보자.
회사 홈페이지에서 회사의 정보만을 띄우는 경우
-> 동적으로 변하는 요청이 없다.
✅ 웹서버와 웹애플리케이션서버 어디에서 오는응답인지 직접 눈으로 확인해보자!
개발자도구를 키고 화면을 새로고침했을때
동적요청인지 정적요청인지 확인해볼 수 있다.
✔️ 리소스의 경로 확인
- /my-url/filename.ico → 정적 파일 → 웹 서버가 반환
- /my-url/data/0000030 → 동적 데이터 → WAS가 반환
⏺ 응답 크기, 처리 시간
- 정적 파일은 용량이 작고, 처리 시간이 짧음
- 동적 요청은 서버에서 데이터를 생성 / DB와 통신 -> 처리 시간이 더 길 수 있음
✅ 왜 웹서버와 WAS를 분리하는걸까?
어차피 WAS에서 동적웹페이지도 반환 가능한거라면
웹서버는 필요없는것아닐까?
아니다!
처리시간을 따졌을때 정적파일은 웹서버로 받는것이 더 빠르다
/WAS내부에서 웹서버까지 모두 처리되는 경우/ WAS외부에 웹서버가 존재하는 경우/
2가지로 비교해보자.
1. 웹서버가 WAS 외부에 있는 경우
클라이언트 → 웹서버 (Apache/Nginx) → WAS (내부 웹 서버 포함) → DB
- 별도의 웹서버를 외부에 둔다.
- 웹서버는 정적요청만 처리하고, 동적요청을 받았을 때 WAS에게 위임한다.
- 외부의 웹서버를 리버스 프록시로 설정하면 WAS가 직접인터넷과 연결되지 않도록 보호받을 수 있다.
- 트래픽 분산이 가능하다.
- 대규모, 고트래픽 환경에서 사용하기 유리하다.
2. 웹서버가 WAS 내부에 있는 경우
클라이언트 → WAS (내부 웹 서버 포함) → DB
- 정적파일이면 내부 웹서버에서 처리, 동적요청은 웹컨테이너로 넘긴다.
- 빠르고 간단하게 배포할 수 있다.
- 외부 웹서버가 필요 없고 트래픽이 많지 않은 경우에 사용한다.
- 정적/동적 요청을 WAS가 모두 처리하기 때문에 트래픽이 많아질 경우 성능이 저하될 수 있다.
- 내장톰캣 사용시 부하분산을 위해 로드밸런서를 구성해야한다.
- 스프링부트의 내장 톰캣서버
다음엔 자주 사용되는 WAS의 예시(종류)와 각 서버의 특징도 함께 알아보겠다.
그림 출처