(1) 웹 서버와 WAS
- 지금은 바야흐로 HTTP의 시대임
- 웹 서버
(1) 정적 리소스 제공
(2) Nginx, Apache
- 웹 어플리케이션 서버(WAS)
(1) 웹 서버 기능을 포함하고, 애플리케이션 로직 실행 가능
(2) Tomcat
(3) 자바는 서블릿 컨테이너를 제공하면 WAS
- 웹 시스템 구성은 WAS, DB만으로 가능
-> 단, WAS가 너무 많은 역할을 담당하면, 서버 과부하 우려
-> 가장 비싼 애플리케이션 로직의 수행이 어려울 수 있음
- 정적 리소스는 웹 서버가 처리, 애플리케이션은 WAS가 처리로 분리
- 웹 서버는 잘 안 죽음. WAS는 잘 죽음.
(2) 서블릿
- 서블릿은 HTTP 통신을 하는데 있어서, 비즈니스 로직을 제외한 모든 것을 지원함
- HTTP 요청 정보를 쉽게 사용할 수 있는 HttpServletRequest
- HTTP 응답 정보를 쉽게 사용할 수 있는 HttpServletResponse
- HTTP 요청이 들어오면 Request 객체, Response 객체를 만듦
-> 요청 정보를 Request 객체에 담아서 받음
-> 서블릿 객체를 실행함
-> 응답 정보를 Response 객체에 담아서 반환함
-> 응답 메시지를 전달함
- WAS 안에 서블릿 컨테이너가 존재함
-> 서블릿 컨테이너는 서블릿 객체의 생명 주기를 관리함
-> 서블릿 객체는 싱글톤임
-> 공유 변수 사용에 주의해야 함
-> 동시 요청을 위한 멀티 쓰레드 처리를 지원함
(3) 멀티 쓰레드
- 백엔드 개발자는 멀티 쓰레드에 대한 개념이 중요함
- 쓰레드가 없으면 자바 어플리케이션의 실행이 불가능함
-> 동시 처리가 필요하면 쓰레드를 추가로 생성해야 함
- 요청마다 쓰레드 생성
(1) 장점
- 동시 요청 처리 가능
- 리소스가 허용할 때 까지 처리 가능
- 하나의 쓰레드가 지연되어도 나머지 쓰레드는 정상 동작
(2) 단점
- 쓰레드 생성 비용이 너무 비쌈
- 쓰레드 컨텍스트 스위칭 비용이 발생
- 쓰레드 생성에 제한이 없음
- 보통 WAS는 내부에 쓰레드 풀을 사용함
- 쓰레드 풀
(1) 특징
- 필요한 쓰레드를 쓰레드 풀에 보관함
- 쓰레드의 최대치 설정 가능함
(2) 장점
- 쓰레드를 생성하는 비용이 없음
- 생성 가능한 쓰레드의 최대치가 있어서, 기존 요청을 안정적으로 처리 가능
- 쓰레드 풀 실무 팁
-> WAS의 주요 포인트는 쓰레드 풀 최대 쓰레드 수
(1) 쓰레드 풀을 너무 낮게 설정하면?
-> CPU 이용률이 너무 낮음
(2) 쓰레드 풀을 너무 높게 설정하면?
-> 동시 요청이 너무 많으면, 서버 다운
- 쓰레드 풀의 적정 숫자는
애플리케이션 로직, CPU, 메모리, I/O 리소스 등에 따라 다 다름
-> 성능 테스트가 필요함
- 멀티 쓰레드에 대한 부분은 WAS가 처리
(4) HTML, HTTP API, SSR, CSR
- 정적 리소스
- HTML
-> 동적 화면을 전달
- HTTP API
-> JSON 형식으로 주고 받음
- SSR
-> 서버 사이드 렌더링
-> 백엔드 개발자는 서버 사이드 렌더링 기술 학습 필수
- CSR
-> 클라이언트 사이드 렌더링
(5) 자바 백엔드 웹 기술의 역사
- 서블릿 - JSP - MVC 패턴 - MVC 프레임웍