서블릿과 멀티스레드

2025. 1. 29. 13:33·강의/스프링 MVC 2편

 

 

스프링 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
'강의/스프링 MVC 2편' 카테고리의 다른 글
  • HttpServletRequest, HttpServletResponse
밍구킴
밍구킴
공부한 것들 끄적끄적 하는 공간
  • 밍구킴
    Dev Log
    밍구킴
    • 분류 전체보기 (23)
      • 네트워크 (2)
      • 자료구조 (0)
      • 알고리즘 (0)
      • 모니터링 (1)
      • Java (1)
      • 트러블 슈팅 (0)
      • 강의 (15)
        • CS 지식의 정석 (0)
        • 스프링 핵심 원리 - 기본편 (6)
        • 모든 개발자를 위한 HTTP 웹 기본 지식 (0)
        • 스프링 MVC 1편 (0)
        • 스프링 MVC 2편 (2)
        • 스프링 DB 1편 (4)
        • 스프링 DB 2편 (3)
        • 백엔드 이력서 차별화 전략 (0)
      • Project (4)
        • 중고타운 (4)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
밍구킴
서블릿과 멀티스레드
상단으로

티스토리툴바