스프링 MVC 2편 - 백엔드 웹 개발 활용 기술 강의 | 김영한 - 인프런
김영한 | 웹 애플리케이션 개발에 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. MVC 2편에서는 MVC 1편의 핵심 원리와 구조 위에 실무 웹 개발에 필요한 모든 활용 기술들을 학습
www.inflearn.com
서블릿
웹 애플리케이션에서 HTTP 프로토콜을 이용해 클라이언트의 요청을 처리하고 응답을 반환하는 자바 클래스
HttpServletRequest(요청), HttpServletResponse(응답)을 통해 개발자는 HTTP 스펙을 매우 편리하게 사용할 수 있다.
서블릿 컨테이너
톰캣처럼 서블릿을 지원하는 WAS
서블릿 객체의 생명주기 관리 (생성, 초기화, 호출, 종료)
서블릿 객체의 특징
서블릿 객체는 싱글톤으로 관리된다.
- 요청이 올 때마다 계속 객체를 생성하는 것은 비효율적
- 최초 로딩 시점에 서블릿 객체를 만들어 두고 재활용
- 모든 요청은 동일한 서블릿 객체에 접근
- 공유 변수 사용 시 주의!
- 서블릿 컨테이너 종료 시 함께 종료
JSP도 서블릿으로 변환되어 사용
동시 요청을 위한 멀티스레드 처리 지원
// @ServletComponentScan : 서블릿을 직접 등록해서 사용
@ServletComponentScan
@SpringBootApplication
public class ServletApplication {
public static void main(String[] args) {
SpringApplication.run(ServletApplication.class, args);
}
}
// @WebServlet : 서블릿 애노테이션
@WebServlet(name = "서블릿이름", urlPatterns = "URL매핑")
멀티스레드
프로세스(Process)와 스레드(Thread)
프로세스 : 운영체제로부터 자원을 할당받은 작업의 단위
스레드 : 프로세스가 할당받은 자원을 이용하는 실행 흐름의 단위
자바에서 메인 메서드를 처음 실행하면 main이라는 이름의 스레드가 실행된다. (스레드가 없으면 애플리케이션 실행 불가)
스레드는 한 번에 하나의 코드 라인만 수행한다.
동시 처리가 필요하다면 스레드를 추가로 생성한다.
요청마다 스레드를 생성하게 되면
장점
- 동시 요청을 처리할 수 있다.
- 리소스(CPU, 메모리)가 허용할 때까지 처리할 수 있다.
- 하나의 스레드가 지연되어도 나머지 스레드는 정상 동작한다.
단점
- 스레드는 생성 비용은 매우 비싸다.
- 고객의 요청이 올 때마다 스레드를 생성하면 응답 속도가 늦어진다.
- 스레드는 컨텍스트 스위칭 비용이 발생한다.
- 스레드 생성에 제한이 없어서 요청이 너무 많이 오면 CPU/메모리 임계점을 넘어서 서버가 죽을 수 있다.
이 단점을 보완하기 위한 스레드 풀(Thread Pool)
특징
- 필요한 스레드를 스레드 풀에 보관하고 관리한다.
- 스레드 풀에 생성 가능한 스레드의 최대치를 관리한다. 톰캣은 최대 200개 기본 설정 (변경 가능)
사용
- 스레드가 필요하면, 이미 생성되어 있는 스레드를 스레드 풀에서 꺼내서 사용한다.
- 사용을 종료하면 스레드 풀에 해당 스레드를 반납한다.
- 풀에 있는 스레드를 모두 사용 중이라면 기다리는 요청은 거절하거나 특정 숫자만큼만 대기하도록 설정할 수 있다.
장점
- 스레드가 미리 생성되어 있으므로 스레드를 생성하고 종료하는 비용(CPU)이 절약되고 응답 시간이 빠르다.
- 생성 가능한 스레드의 최대치가 있으므로 너무 많은 요청이 들어와도 기존 요청은 안전하게 처리할 수 있다.
최대 스레드(Max Thread) 수를 조절하는 게 주요 튜닝 포인트이다.
'강의 > 스프링 MVC 2편' 카테고리의 다른 글
| HttpServletRequest, HttpServletResponse (0) | 2025.01.29 |
|---|