[Spring] 스프링 웹 MVC
본 포스트는 Inflearn
의 김영한님 강의를 바탕으로 작성했습니다.
웹 서버와 웹 애플리케이션 서버
- 웹 서버 (Web server)
- 정적 리소스 제공 (html, css, js, 이미지, 영상)
- 웹 애플리케이션 서버 (WAS - Web Application Server)
- 웹 서버의 기능을 포함하고 프로그램 코드를 실행해서 애플리케이션 로직 수행
- 동적 html, HTTP API(JSON), 서블릿, JSP, 스프링 MVC 등
- 이 둘은 경계가 모호하다.
웹 시스템의 구성 - WEB, WAS, DB
- 정적 리소스는 Web server에서 처리하고 애플리케이션 로직같은 동적인 처리를 할 때, WAS에 위임해서 처리한다.
- WAS, DB가 장애가 나면 WEB 서버에서 오류 화면을 보여준다.
서블릿
- 서블릿을 사용하면 귀찮은 HTTP 파싱, HTTP 메시지 생성 등 비즈니스 로직과 관련 없는 부분들을 자동으로 처리해준다.
- WAS는 HTTP 요청이 오면 Request, Response 객체를 새로 생성하여 서블릿 객체를 호출한다.
- Request를 통해서 HTTP 요청 정보를 편하게 사용할 수 있다.
- Response를 통해서 HTTP 응답 정보를 편하게 넣을 수 있다.
- WAS는 Response 의 내용으로 HTTP 응답 정보를 생성한다.
서블릿 컨테이너
- 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.
- 서블릿 객체는 싱글톤으로 관리된다.
쓰레드 풀
- 미리 쓰레드를 생성해두고 필요할 때마다 쓰레드 풀에서 꺼내서 사용한다.
- 다 사용하면 다시 반납한다.
- 쓰레드가 이미 다 생성되어 있기 때문에 쓰레드 생성, 종료 비용이 절약되고, 응답 시간도 빠르다.
- 생성 가능 쓰레드 최대치가 정해져 있어서 너무 많은 요청이 들어와도 안전하게 처리할 수 있다.
튜닝 포인트
- WAS의 주요 튜닝 포인트는 최대 쓰레드 수이다.
- 너무 낮게 설정하면 트레픽이 많을 때, 서버 리소스는 남는데, 클라이언트의 응답이 계속 지연된다.
- 너무 높게 설정하면 CPU 메모리 리소스 임계 초과로 서버가 다운될 수 있다.
- 일단 클라우드면 서버를 늘리고 이후에 튜닝하자.
- 적정 숫자를 찾는 방법
- 애플리케이션 로직의 복잡도, CPU, IO 리소스 상황에 따라 다르다.
- 오픈하기 전에 어떤 로직이 변하거나 기능을 넣을 때 성능 테스트를 해야 한다.
- 개발자는 설정만 잘 해주면 WAS가 멀티 쓰레드 관련 코드를 관리해준다.
출처
- https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1