HTTP
- HTML 문서와 같은 리소스들을 가져올 수 있게 해주는 응용 계층 프로토콜
- JSON, XML(API), 이미지, 음성, 영상 파일 등 거의 모든 형태의 데이터 전송 가능
- 서버같에 데이터를 주고 받을 떄도 HTTP를 사용
웹 서버 및 웹 애플리케이션 서버(WAS)
웹 서버
- HTTP기반으로 동작
- 정적 리소스 제공, 기타 부가 기능
- 정적 HTML, CSS, JS, 이미지, 영상 등
- EX) NGINX, APACHE
웹 애플리케이션 서버(WAS)
- HTTP기반으로 동작
- 웹 서버 기능 포함 + (정적 리소스 제공)
- 프로그램 코드를 실행해서 애플리케이션 로직 수행
→ 동적인 HTML, HTTP API(JSON) - 서블릿, JSP, 스프링 MVC
- EX) 톰캣, Jetty, Undertow 등
웹서버와 웹 애플리케이션(WAS)의 차이
- 웹 서버 : 정적 리소스파일을 관리하는데 특화
- WAS : 애플리케이션 코드를 실행하는데 특화
웹 시스템의 구성
WAS / DB로만 시스템을 구성하는 경우
- WAS가 너무 많은 역할을 담당 → 서버 과부하 우려
- 애플리케이션 로직의 수행의 비용이 크므로 정적 리소스때문에 수행이 어려워 진다.
- WAS 장애시에 오류화면 노출 불가능
WEB / WAS / DB 로 시스템을 구성하는 경우
- 정적 리소스는 웹 서버가 처리 → WAS의 부담이 적어짐
- 동적 리소스는 웹 서버가 WAS에 요청을 위임
- 필요되는 리소스 자원에 따라서 서버 증설이 쉽다.
→ 정적 리소스 증가시에 Web서버 증설, 동적 리소스 증가시 WAS 증설 - WAS, DB장애시에 WEB 서버가 오류화면을 노출 가능하다
서블릿(Servlet)
- 클라이언트의 요청을 처리하고 결과를 반환하는
Servlet클래스
의 규칙을 지킨 자바 웹 프로그래밍 기술 - 자바를 사용하여 웹을 만들기 위해 가장 기본적인 기술이다.
@WebServlet(name = "helloServlet", urlPatterns = "/hello")
public class HelloServlet extends HttpServlet { //HttpServlet을 상속 받아서 사용
@Override
protected void service(HttpServletRequest request, HttpServletResponse response){
//애플리케이션 로직
}
}
- HTTP요청, 응답 정보를 편리하게 사용할 수 있는
HttpServletRequest
,HttpServletResponse
가 제공된다. - 이로인해 HTTP 스펙을 매우 편리하게 사용 가능하다.
특징
- 클라이언트 요청에 대해 동적으로 작동하는 웹 애플리케이션 컴포넌트
- html을 사용해서 요청에 응답.
- 쓰레드를 이용하여 동작
- MVC패턴에서 Controller로 이용한다.
동작 방법
- Client가 HTTP요청
- WAS가
HttpServletRequest
/HttpServletResponse
객체를생성
해준다. - WAS는 요청 URL에 해당되는 서블릿 객체를 호출 →
HttpServletRequest
를 이용해서 요청한 URL 정보를 편리하게 사용 - 비즈니스 로직을 수행
HttpServletResponse
객체 정보로 HTTP 응답을 생성HTTP Response Message
생성 후 Client에 전달
서블릿 컨테이너(Servlet Container)
- 톰캣처럼 서블릿을 지원하는 WAS를 서블릿 컨테이너라고 한다.
- 서블릿을 관리하기 위한 작업을 수행(생성, 호출, 종료) → 생명주기 관리
- 서블릿 객체는 싱클톤으로 관리
- 고객의 요청이 올 때마다 객체 생성하는 것은 비효율적
- 최초 로딩 시점에 서블릿 객체를 미리 만들어두고 재활용
- 모든 고객요청은 동일한 서블릿 객체 인스턴스에 접근 → 공유 변수 사용에 주의
- 서블릿 컨테이너 종료시 함께 종료된다.
- 동시 요청을 위한 멀티 쓰레드 처리를 지원
멀티 쓰레드 / 쓰레드 풀
멀티 쓰레드란?
- 여러개의 요청이 올때, 여러개의 쓰레드를 사용해서 다중 요청을 효율적으로 처리 하는 방법
장점
- 동시 요청을 처리할 수 있다.
- 리소스(CPU, 메모리)가 허용할 때 까지 처리가능
- 하나의 쓰레드가 지연 되어도, 나머지 쓰레드는 정상 동작한다
단점
- 쓰레드의 생성 비용은 매우 비싸다 → 고객의 요청이 올 때마다 쓰레드 생성시, 응답속도가 늦어진다.
- 쓰레드 생성에 제한이 없다. → 고객요청이 너무 많이 오면, 리소스 임계점을 넘어서 서버가 죽을 수 있다.
단점을 해결하기 위한 방법? : 쓰레드 풀
쓰레드 풀
- 필요한 쓰레드의 개수를 정해놓고 미리 생성해둔 뒤 사용하고 반납하여 비용을 줄이는 방식
- 톰캣은 최대 200개 기본 설정
- 최대 쓰레드가 모두 사용중 이면? → 요청을 거절 혹은 특정 숫자만큼 대기하도록 설정
장점
- 쓰레드를 미리 생성 → 응답 시간이 빠르다. 쓰레드 생성, 종료하는 비용이 절약
- 생성 가능한 쓰레드의 최대치가 존재 → 너무많은 요청에도 서버가 죽지 않는다.
쓰레드 풀에 대한 실무 팁
- WAS의 주요 튜닝 포인트는 최대 쓰레드 수
- 너무 낮게 설정하는 경우 : 서버 리소스(CPU, 메모리)는 여유롭지만, 클라이언트는 응답 지연
- 너무 높게 설정하는 경우 : 서버 리소스 임계점 초과로 서버 다운(동시 요청이 많을 경우)
- 장애 발생시
- 클라우드 환경 → 서버 증설 이후 튜닝
- 클라우드 환경이 아닌 경우 → 열심히 튜닝
SSR / CSR
SSR - 서버 사이드 렌더링
- HTML 최종 결과를 서버에서 만들어서 웹 브라우저에 전달
- 정적인 화면에 사용
- 관련 기술 : JSP, 타임리프 → 백엔드 개발자
CSR - 클라이언트 사이드 렌더링
- HTML결과를 자바스크립트를 사용해 웹 브라우저에서 동적으로 생성해서 적용
- 주로 동적인 화면에 사용 → 구글 지도, Gmail, 구글 캘린더
- 관련 기술 : React, Vue.js → 프론트엔드 개발자
반응형