728x90
WAS와 WS의 차이점은 "웹 풀스택" 카테고리에 가면 설명이 있으니 참고
프로젝트를 하다가
"스프링부트는 웹 서버 내장하고 있는데 nginx 같은 웹 서버를 따로 사용해야할까요?"
라는 질문을 받았다.
결론부터 말하자면
api통신 시: WS필요 없음
서버에서 페이지 반환 해야하는 상황이라면: 필요할 수도 있음 (대량의 트래픽이 오고간다면)
이 질문에 나도 대답을 하지 못해서 인프런의 갓영한님의 "스프링 MVC 1편"에 해당 내용에 대해 언급한게 있어서 해당 강의를 보고 내용을 정리해보고자 했다.
WAS만 사용할 경우
WAS가 하는 일은 다음과 같다
- 동적 파일 제공
- 정적 리소스 제공
- 애플리케이션 로직 실행
여기서 알 수 있듯이 WAS가 정적 리소스도 제공한다는 사실이다.
html, css, js, 이미지 같은 정적 리소스는 파일만 서빙하면 되는 것이라서 값이 싸지만, 애플리케이션 로직은 값이 비싸다.
여기서 발생하는 문제
- 정적 리소스 대문에 애플리케이션 로직에 수행이 문제가 있을 수도 있다.
- 웹 브라우저가 WAS에 접근해야하는데 WAS가 죽어버리면 접근조차 안된다. 즉 WAS 장애시 정적 리소스 서빙이 불가하면서 고객에게 오류 화면도 보여줄 수 없게 된다.
WS, WAS를 같이 사용
WAS만 사용했을 경우 발생하는 문제를 해결하기 위해 WAS 앞단에 WS를 배치하면 된다.
WAS와 WS를 분리해서 배치하면 좋은점
- WAS가 중요한 애플리케이션 로직 처리를 전담할 수 있다.
- 효율적인 리소스 관리
- 정적 리소스가 많이 사용되면 WS증설
- 애플리케이션 리소스가 많이 사용되면 WAS 증설
- 정적 리소스만 제공한느 웹 서버는 잘 죽지않는다.
- 정적 리소스만 서빙해서 연산을 많이 수행하지 않는다. 따라서 오류 화면 같은 정적 리소스만 저장해두고 WAS에 문제가 생기면 정적 리소스(오류 페이지)를 고객에게 보여주면된다.
- 요즘에는 CDN에 정적 리소스를 캐싱하기도 한다.
- 사실 서버에서 API만 제공한다고 하면 웹 서버가 필요 없긴하다. 데이터만 주고 받으면 WAS만 구축해도 충분
이 질문이 나온 프로젝트에서 서버가 api만 전달해주므로 사실 웹 서버는 필요 없는게 맞았다.
나에게는 서버 사이드 렌더링할 때 웹 서버의 필요성을 알게 되었다는 것이 중요했다...
728x90
'Spring > Spring MVC' 카테고리의 다른 글
[웹 애플리케이션 이해] 동시 요청 - 멀티 쓰레드 (2) | 2024.10.07 |
---|---|
[웹 애플리케이셔 이해] 서블릿, 서블릿 컨테이너 (0) | 2024.10.07 |
HTTP 응답 - HTTP API, 메시지 바디에 직접 입력 (1) | 2023.10.05 |
HTTP 응답 - 정적 리소스, 뷰 템플릿 (0) | 2023.10.05 |
요청 매핑 (API), HTTP 헤더 조회, 요청 (0) | 2023.10.05 |