Question
- 웹서버 vs WAS ?
- 서블릿 vs 서블릿 컨테이너 vs WAS ?
- 실무에서 스레드 풀의 숫자를 어떻게 설정해야 하는가?
Web Server VS Web Application Server(WAS)
- 웹서버는 일반적으로 HTML, CSS, JS 와 같은 정적인 파일을 제공해주는 서버
- WAS는 일반적으로 웹서버의 기능에 더해 프로그램 코드를 실행해서 애플리케이션 로직 수행이 추가되는 서버를 의미
- WAS의 의미는 약간 모호한 경우가 있지만 웹서버에 비해 애플리케이션 코드 실행에 더 특화되었다고 보면 됨
- 톰캣도 WAS의 일종이 될 수 있음
서블릿

- 위 그림은 서버에서 처리해야 하는 업무 목록
- 의미 있는 비지니스 로직은 사실상 초록색 영역밖에 없음
- 따라서, 나머지 영역을 모두 서블릿이 처리해주며, 개발자는 HTTP 스펙을 매우 편리하게 사용 가능
- TCP 연결은 서블릿 컨테이너의 영역인 것 같음
WAS

- WAS는 웹의 HTTP 요청을 기반으로 서블릿 컨테이너가 적절한 서블릿에 전달
- 서블릿의 작업이 완료되면 Response로 HTTP 응답 생성해서 반환
- 톰캣은 여러 구성 요소로 되어 있으며 그 중 가장 중요한 것이 서블릿 컨테이너라 톰캣을 서블릿 컨테이너라 부르기도 함
- 톰캣에서 서블릿 컨테이너 역할을 하는 컴포넌트가 Catalina
- HTTP 요청/응답 처리를 하는게 Coyote
- JSP를 서블릿으로 변환하는게 Jasper
- WAR파일 실행하는게 WebApps
서블릿 컨테이너
- 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라 함
- 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
- 서블릿 객체는 싱글톤으로 관리
- JSP도 서블릿으로 변환되어서 사용됨
- 동시 요청을 위한 멀티 쓰레드 처리 지원
실무에서 스레드 풀 관리 팁
- WAS의 주요 튜닝 포인트는 최대 스레드 수
- 최대 스레드 수가 너무 낮으면 서버 리소스는 남아돌고 응답은 지연됨
- 최대 스레드 수가 너무 높으면 동시 요청이 많을 시 CPU, 메모리 임계 초과로 서버 다운
- 성능 테스트를 통해 적정 값 찾아야 함
- WAS가 멀티 스레드 처리를 지원해 개발자가 크게 신경쓰지 않아도 된다는 장점이 있음
SSR - 서버 사이드 렌더링
- HTML 최종 결과를 서버에서 만들어 웹 브라우저에게 전달
- 정적인 화면에 사용
- JSP, 타임리프 -> 백엔드 개발자의 영역
CSR - 클라이언트 사이드 렌더링
- HTML 결과를 자바스크립트를 사용해 웹 브라우저에게 동적으로 생성해서 적용
- 주로 동적인 화면에 사용되고, 웹 환경을 마치 앱처럼 보여줄 수 있음.
- 예를 들어, 구글 지도와 같이 동적인 화면 제공
- React, Vue.js -> 프론트엔드 개발자 여역