[Spring] 웹 서버와 웹 애플리케이션 서버(WAS) + 서블릿 컨테이너
웹 서버
- HTTP 기반으로 동작
- `정적 리소스` 제공 ( 정적 HTML, CSS, JS, 이미지, 영상 등 )
- 기타 부가 기능
- ex `NGINX`, `APACHE`
웹 애플리케이션 서버(WAS)
- HTTP 기반으로 동작
- 정적 리소스 제공
- 동적 리소스 제공 ( 동적 HTML, HTTP API(JSON), 서블릿, JSP, 스프링 MVC 등 )
- 프로그램 코드를 실행해서 `애플리케이션 로직` 수행
- `서블릿 컨테이너` 기능 제공
- 멀티 쓰레드 처리 지원
- ex `Tomcat`, `Jetty`, `Undertow`
서블릿
- `urlPatterns` 의 URL 이 호출되면 서블릿 코드가 실행
- HTTP 요청/응답 정보를 편리하게 사용하는 HttpServletRequest/Response 제공
- HTTP 스펙을 편리하게 사용하도록 도와줌
서블릿 컨테이너
- 서블릿 객체를 생성 / 초기화 / 호출 / 종료하는 생명주기를 관리
- 서블릿 객체를 싱글톤으로 관리
- JSP 도 서블릿으로 변환되어 사용
- `멀티 쓰레드` 처리 지원
서블릿 컨테이너가 처리해주는 일
1. 서버 TCP/IP 연결 대기, 소캣 연결
2. HTTP 요청 메시지 파싱하여 읽기
3. POST 방식, /save URL 인지
4. Content-Type 확인
5. HTTP 메시지 바디 내용 파싱
6. 저장 프로세스 실행
7. 비즈니스 로직 실행, DB 에 저장 요청
8. HTTP 응답 메시지 생성 (시작 라인, Header, 메시지 바디)
9. TCP/IP 응답 전달, 소캣 종료
7번을 제외한 모든 일을 서블릿 컨테이너가 대신 처리 해 준다.
WAS | ||||
웹 브라우저 | localhost:8080/hello → → → → → ← ← ← ← ← hello world |
request : 새로 생성 | 실행 → → → → → request response ← ← ← ← ← 종료 |
서블릿 컨테이너 |
response : 새로 생성 | helloServlet : 싱글톤 | |||
request : 새로 생성 | ||||
response : 새로 생성 | ||||
... |
웹 시스템 구성
클라이언트 | → ← |
Web Server (HTML, CSS, JS) (이미지) |
→ ← |
WAS (애플리케이션 로직) |
→ ← |
DB |
- 정적 리소스는 웹 서버, 동적 리소스는 WAS 가 처리
- 사용 리소스에 따라 서버 증설에 용이하여 효율적인 리소스 관리가 가능
- 정적 리소스만 제공하는 웹 서버가 잘 죽지 않아, WAS / DB 장애 시 오류 화면 제공 가능
서버 사이드 렌더링(SSR)
- 서버에서 최종 HTML 을 생성하여 클라이언트에게 전달
- 정적인 화면에 사용
- 백엔드 개발자
- 관련 기술 `JSP`, `타임리프`
클라이언트 사이드 렌더링(CSR)
- JS 를 사용하여 HTML 결과를 클라이언트에서 동적으로 생성하여 적용
- 동적인 화면에 사용
- 프론트엔드 개발자
- 관련 기술 `React`, `Vue.js`
> 참고 <
`React`, `Vue.js` 를 CSR + SSR 동시에 지원하는 웹 프레임워크도 있다.
출처 | 스프링 MVC 1(김영한) - 인프런