[Spring] 웹 서버와 웹 애플리케이션 서버(WAS) + 서블릿 컨테이너

728x90

 

웹 서버

- 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(김영한) - 인프런

728x90