HTML, TEXT, JSON, XML 등 거의 모든 형태의 데이터를 전송
정적인 리소스를 제공하는 웹서버에 추가로 동적인 요청을 처리하는 기능을 가짐
프로그램 코드를 실행하여 동적인 요청(데이터베이스 조회, 비즈니스 로직 수행 등)을 처리
HTTP 기반으로 동작
웹 서버는 정적 리소스, WAS는 애플리케이션 로직을 담당
WAS가 정적리소스도 제공할 수 있지만 너무 많은 역활을 담당하면 핵심인 애플리케이션 로직 수행에 문제가 생길 수 있기에 분리
JAVA로 작성된 웹 애플리케이션 서버의 컴포넌트로 HTTP 요청,응답을 처리하는 표준기술
HTTP요청을 받아서 요청을 파싱, 응답 작성 등을 담당하고 개발자는 비즈니스 로직만 작성할 수 있도록 한다
WAS위에서 동작하며 WAS는 서블릿컨테이너를 통해 서블릿 객체를 싱글톤으로 관리
동작
브라우저에서 클라이언트가 URL을 통해 요청
web.xml 또는 애노테이션 기반으로 URL과 서블릿 클래스 매핑
서블릿 실행 후 응답을 생성
브라우저 출력
WAS의 애플리케이션 코드를 하나씩 순차적으로 실행하는 것은 쓰레드
쓰레드는 한번에 하나의 코드 라인만 수행, 동시처리가 필요하면 쓰레드가 추가로 필요
요청마다 쓰레드 생성
동시 요청을 처리할 수 있고 하나의 쓰레드가 지연되어도 나머지 쓰레드는 정상 동작
하지만 쓰레드 생성 비용이 비싸고 스위칭 비용이 들며 고객 요청이 너무 많아 과잉 생성되면 하드웨어 자원의 임계점을 넘어 서버가 죽을 수 있음
쓰레드풀
필요한 쓰레드를 풀에 보관하고 필요할때마다 꺼내서 사용한다
쓰레드가 미리 생성되어있으므로 생성하고 종료하는 비용이 절약되며 너무 많은 요청이 들어와도 최대치가 있으므로 안전하게 처리할 수 있다
최대 쓰레드 수
너무 낮게 설정하면 서버 리소스는 여유롭지만 클라이언트는 응답을 받는데 지연이 될 수 있다
너무 높게 설정하면 동시 요청이 많이 들어오는 경우 서버 리소스 초과로 서버가 죽을 수 있다
적정 숫자는 애플리케이션 로직, 하드웨어 성능, 상황에 따라 다르다
최대한 실제 서비스와 유사하게 성능 테스트를 하는 것이 중요
-> 실무에서는 클라우드의 경우 일단 서버를 늘리고 이후 튜닝한다
고정된 HTML, CSS, JS 등을 제공, 주로 웹브라우저
동적으로 필요한 HTML파일을 생성해서 전달
완성된 HTML을 전달한다
HTML이 아니라 데이터를 전달 (주로 JSON)
HTML페이지와 달리 데이터만 전달하므로 필요한 경우 프론트의 별도 개발이 필요
HTML 최종 결과를 서버에서 만들어서 웹 브라우저에 전달
주로 정적인 화면에 사용
JSP, 타임리프
HTML결과를 자바스크립트를 사용해 웹 브라우저에서 동적으로 생성해 적용
주로 동적인 화면에 사용, 웹 환경을 앱처럼 필요한 부분을 변경할 수 있음
React, Vue.js
GET - 쿼리 파라미터
/url?username=hello&age=20
? 이후 부분이 쿼리 파라미터로 메시지 바디없이 URL의 쿼리파라미터에 데이터를 포함해서 전달
POST - HTML Form
content-type : application/x-www-form-urlencoded
메시지 바디에 쿼리 파라미터 형식으로 전달 username=hello&age=20
HTTP message body에 데이터를 직접 담아서 요청
HTTP API에서 주로 사용
데이터 형식은 주로 JSON을 사용