Hyunebee
스프링 MVC - 웹 어플리케이션 이해 본문
웹서버
HTTP 기반으로 동작
정적 리소스 제공
ex)NGINX, APACHE
웹 애플리케이션 서버(WAS)
웹 서버 기능을 포함 + (정적 리소스)
프로그램 코드를 실행해서 애플리케이션 로직 수행
동적 HTML, HTTP API
servlet jsp spring MVC
ex)tomcat, jetty
웹서버 vs 웹 애플리케이션 서버
1. 둘의 경계가 모호함 둘다 서로의 기능을 조금식 제공함
2. 자바는 서블릿 컨테이너 기능을 제공하면 WAS
웹 시스템의 구성 -> 간단하게 WAS , DB로 구현할 수 있다.
하지만 WAS가 너무 많은 역할을 담당 서버 과부하 우려가 있다.
WAS 장애시 오류 화면도 노출 불가능
웹 시스템의 구성 -> WEB WAS DB
정적 리소스는 웹서버가 처리
웹 서버는 애플리케이션 로직같은 동적인 활동에는 WAS에게 위임
효율적인 리소스 관리가 가능해진다. -> 정적 리소스가 많으면 WEB 서버를 애플리케이션 리소스가 많으면 WAS 증설
동시 요청 - 멀티 쓰레드(중요!!)
이 멀티 쓰레드에 대한 부분은 WAS가 처리해준다. but 싱글톤 객체는 주의해서 사용해야 한다.
쓰레드: 애플리케이션 코드를 하나하나 순차적으로 실행하는 것은 쓰레드
쓰레드는 한번에 하나의 코드 라인만 수행
동시 처리가 필요하면 쓰레드를 추가로 생성
단점
쓰레드 생성 비용은 매우 비싸다
쓰레드는 컨텍스트 스위칭 비용이 발생한다.
쓰레드 생성에는 제한이 없다.(요청이 얼마나 올지 알수없음)
쓰레드 풀
특징
필요한 쓰레드를 쓰레드 풀에 보관하고 관리
쓰레드 풀에 생성 가능한 쓰레드의 최대치를 관리한다. 톰캣은 최대 200개
장점
쓰레드가 미리 생성되어 있으므로, 쓰레드를 생성하고 종료하는 비용이 절약되고 응답 시간이 빠르다.
생성 가능한 쓰레드의 최대치가 있으므로 너무 많은 요청이 들어와도 기존 요청은 안전하게 처리할 수 있다.
실무 팁
WAS의 주요 튜닝 포인트는 최대 쓰레드 수 이다.
이 값을 너무 낮게 설정하면 - 동시 요청이 많으면 서버 리소스는 여유롭지만 클라이언트는 응답지연
이 값을 너무 높게 설정하면 - 리소스가 임계점 초과로 서버 다운
장애 발생시?
클라우드면 일단 서버부터 늘리고, 이후 튜닝
클라우드가 아니면 열심히 튜닝
HTTP 백엔드 처리
정적 리소스, 동적 HTML 파일, HTTP API(주로 json)
SSR - 서버 사이트 렌더링
주로 정적인 화면에 사용
CSR - 클라이언트 사이드 렌더링
주로 동적인 화면에 사용, 웹 환경을 마치 앱 처럼 필요한 부분부분 변경할 수 있음
'Spring > MVC' 카테고리의 다른 글
스프링MVC - frontController(4) (0) | 2022.01.14 |
---|---|
스프링MVC - frontController(3) (0) | 2022.01.14 |
스프링MVC - frontController(2) (0) | 2022.01.14 |
스프링MVC - frontController(1) (0) | 2022.01.14 |
스프링MVC - Servlet (0) | 2022.01.11 |