개요 , WebServer , WAS
2022 . 10 . 30 핵심 기술 강의 시작
- 핵심 기술
- 웹 애플리케이션의 이해
- 서블릿 , JSP , MVC 패턴
- MVC 프레임 워크
- 활용 기술
- 공통 기능
- 확장 포인트
- 활용
- 쿠키,세션
- 필터 , 인터셉터
- 예외처리
- 타임리프
- 메시지 , 국제화
- 검증
모든 것이 HTTP
- HTML , TEXT
- IMAGE , 음성 , 영상 ,파일
- JSON , XML ( API 요청 )
Web Server
- HTTP 기반
- 정적 리소스 제공
- 정적 HTML , CSS , JS
- NGINX , APACHE 등이 있다. ( 아파치자
WAS - Web Application Server
- HTTP 기반
- 웹서버의 모든 기능들을 포함
- 프로그램 코드를 수행해 애플리케이션의 로직을 수행
- 동적 HTML , HTTP API
- 서블릿 , JSP , 스프링 MVC
- Tomcat , Jetty , Undertow
❕ Web 과 WAS의 차이는 굉장히 모호하다.
- 자바의 경우에는 서블릿 컨테이너 기능을 제공하면 WAS
- ( 서블릿 없이 자바 코드를 실행하는 서버 프레임 워크도 있다 )
- WAS는 애플리케이션 코드를 실행하는 것이 특화
WAS , DB만으로도 시스템 구성이 충분히 가능하다.
하지만 가장 비용이 비싼 애플리케이션 로직이 정적리소스들 때문에 수행에 방해될 수 가 있다.
- WAS 장애시에는 오류화면도 노출이 안된다.
- WAS는 생각보다 죽는 경우가 허다하다.

-
이런 식으로 HTML , CSS , JS , 이미지 같은 요청을 우선 처리하고
동적인 처리가 필요할 경우 WAS에 요청을 위함하는 식으로 구성한다.
-
WAS는 애플리케이션 로직 담당.
-
각각의 필요성에 따라 서버를 추가하기 편하다.
-
정적 리소스 배포는 서버가 죽을일이 거의 없다.
-
데이터만 주고받는 API 서버 개발 같은 경우 구지 웹서버가 없어도 된다.
서블릿 Servlet
- 실제 구현해야하는 비지니스 로직을 제외하고 모든 규칙성 업무를 처리해준다.
요청 정보 : HttpServletRequest
응답 정보 : HttpServletResponse
- 웹브라우저 요청
- was 서버에서 요청 정보를 기반으로 Request , Response 객체를 생성
- 비지니스 로직 수행
- 생성했던 Response를 기반으로 HTTP 응답을 생성한다.
- 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 함
- 서블릿 컨테이너는 서블릿 객체를 생성, 초기화, 호출, 종료하는 생명주기 관리
- 서블릿 객체는 싱글톤으로 관리
- 고객의 요청이 올 때 마다 계속 객체를 생성하는 것은 비효율
- 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용
- 모든 고객 요청은 동일한 서블릿 객체 인스턴스에 접근공유
- 변수 사용 주의
- JSP도 서블릿으로 변환 되어서 사용
- 동시 요청을 위한 멀티 쓰레드 처리 지원
동시 요청 - 멀티쓰레드
쓰레드
- 코드를 하나하나 순처적으로 실행하는 것
- 자바에서는 main이라는 이름의 메서드를 쓰레드가 실행
- 쓰레드가 없다면 자바 애플리케이션 실행이 불가능
- 쓰레드하나에 하나의 코드 라인맨 수행
- 동시 처리가 필요하면 쓰레드를 추가로 생성
단일 요청 : 요청이 들어오면 쓰레드를 할당한다. 응답이 마무리 되면 쓰레드가 반환된다
다중 요청 : 이미 처리중인 쓰레드가 있다면 처리가 지연된다.
요청마다 쓰레드 생성
장점
- 동시 요청 처리가능
- 리소스 한도내에서 전부 허용
- 다른 쓰레드의 지연과 상관이 없다
단점
- 쓰레드 생성 비용이 매우 비싸다 :: 응답 속도 저하
- 컨텍스트 스위칭 비용이 발생한다
- 생성에 제한이 없다
- 고객의 요청이 많이 오면 CPU 와 메모리가 임계점을 못버티고 셧다운 되버린다.
쓰레드 풀
쓰레드를 미리 만들어두는 방식.
톰캣은 최대 200개가 기본 설정 ( 변경 가능 )
- 요청 시 만들어져있는 쓰레드풀에서 하나를 가져온다
- 응답 후 다시 쓰레드풀에 반납한다.
- 쓰레드를 생성 , 파괴가 아니라 만들어둔 상황만 다룬다
- 200개를 만들어뒀을 때 201번 요청이 들어올 경우 반환 혹은 대기 시킬 수 있다.
❕ 실무 팁
- WAS의 주요 튜닝 포인트는 최대 쓰레드이다
- 값이 낮을 경우
- 동시 요청이 많으면 서버 리소스는 여유롭지만 사용자가 불편하다.
- 많을 경우
- 동시 요청이 많으면 CPU , 메모리 리소스 임계점 초과로 서버 다운
- 요청마다 쓰레드 생성과 비슷한 수준
장애 발생 시
- 클라우드면 일단 서버 늘리고 나중에 튜닝
- 아니면 열심히 튜닝
적정 수는?
- 로직의 복잡도 , CPU , 메모리 , IO 리소스 상황에 따라 모두 다르다.
- 성능 테스트를 통해 유추
- 최대한 서비스와 유사하게 성능 테스트 시도
- 아파치 AB , 제이미터 ,nGrinder
WAS의 멀티 쓰레드 지원
[핵심]
- 멀티쓰레드에 대한 부분은 WAS가 처리
- 개발자가 멀티쓰레드 코드를 신경쓰지 않아도됨.
- 개발자는 싱글쓰레드 프로그래밍 하듯이 편하게 소스 코드를 개발
- 멀티쓰레드 환경이므로 싱글톤 객체( 서블릿 , 스프링 빈) 은 주의해서 사용하자.