[Spring MVC] 웹 서버, WAS, 서블릿
- [ Backend ]/Spring Web
- 2022. 2. 8.
웹 서버(Web Server)
ㆍHTTP를 기반으로 동작
ㆍ정적 리소스(HTML, CSS, JS, 이미지, 영상) 제공
웹 애플리케이션 서버(WAS, Web Application Server)
ㆍHTTP를 기반으로 동작
ㆍ웹 서버의 기능에 프로그램 코드를 실행하여 로직을 수행
ㆍ정적 리소스 + 동적 리소스
정적 리소스는 웹 서버가 처리하고, 남은 동적 리소스는 WAS에 처리를 위임하여 애플리케이션 로직을 전담한다. 그러면 WAS는 동적 리소스만 전담하여 처리할 수 있고, WAS에 오류 발생시 오류화면을 웹 서버에서 처리해줄 수 있는 장점이 있다.
서블릿(Servlet)
웹 서버에서 동작하는 웹 어플리케이션 컴포넌트(서비스 페이지)로, 웹브라우저의 요청에 따라서 서버가 실행하는 자바 프로그램을 말하는데, 서블릿은 웹을 만들때 사용되는 다양한 요청과 응답을 간단한 메서드 호출만으로 체계적으로 다룰 수 있게 해준다. 서블릿과 WAS의 존재로 인해 정적인 페이지를 주고받던 과거 통신에서 벗어나서 사용자의 요청에 맞추어 동적 페이지를 사용할 수 있게 되었고, 개발자는 단지 비지니스 로직만 신경쓰고 개발하면 된다.
서블릿의 동작 과정
1. Servelt Request, Servlet Response 객체 생성
2. 서블릿 객체가 없다면 생성(1회)
3. Servlet Container에 스레드 생성후 설정 파일에 맞게 적절한 Servlet 실행
4. 응답이 처리되었다면 Servlet Request, Servlet Response객체 소멸(1회)
서블릿 객체는 싱글톤으로 생성/소멸은 서블릿 컨테이너당 1회만 실행된다.
서블릿 컨테이너
이러한 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다. 서블릿 컨테이너는 먼저 서블릿 객체를 싱글톤으로 관리한다. WAS request와 response는 요청에 따라서 다르게 생성되기 때문에 싱글톤일 필요가 없지만, 그것을 전달하기 위해서 존재하는 서블릿 객체는 싱글톤이여야 효율적으로 관리할 수 있다. 따라서 서블릿 컨테이너는 최초 로딩 시점에 서블릿 객체를 미리 만들어놓고 재활용하고, 서블릿 컨테이너 종료시 서블릿 객체도 같이 소멸시킨다.
또한 서블릿 컨테이너는 멀티쓰레드를 지원한다. 일반적인 싱글톤 방식은 멀티쓰레드 사용시 Thread-safe하지 않은 문제가 될 수 있는데, 서블릿 컨테이너는 자체적으로 Thread safe한 멀티쓰레드 처리를 지원한다. (개발자가 멀티쓰레드 관련 코드를 신경쓰지 않아도 된다. 필드 공유만 조심하자.
다만 쓰레드의 개수가 많아지면 컨텍스트 스위칭 비용이나 생성 비용 자체가 너무 많이 들어 서버가 죽을 수 있기 때문에 쓰레드 풀을 미리 만들어서 요청을 받아 사용하기도 한다.
백엔드 서비스 제공시 고민 : 정적 리소스, 동적 HTML 페이지, HTTP API(데이터)
SSR(서버 사이드 랜더링) : 서버에서 최종 HTML을 생성해서 클라이언트에 전달
> 관련기술 : jsp, thymeleaf
CSR(클라이언트 사이드 랜더링) : HTML 결과를 자바스크립트를 사용해서 웹 브라우저에서 동적으로 생성하여 적용
> 구글지도와 같이 동적인 화면에서 웹 환경을 마치 앱처럼 필요한 부분을 변경할 수 있다.
> 관련기술 : react, vue.js
'[ Backend ] > Spring Web' 카테고리의 다른 글
[Spring MVC] 메세지, 국제화 (0) | 2022.07.08 |
---|---|
[Spring MVC] URL 매핑, 데이터 전송/조회 (0) | 2022.02.19 |
[Spring MVC] 서블릿과 스프링, 프론트 컨트롤러 (0) | 2022.02.09 |
[Spring MVC] @~Mapping 사용시 참고 (0) | 2022.02.04 |
[Spring MVC] 역할의 분리와 디자인 패턴 - Spring MVC 동작 (0) | 2022.02.01 |