AsyncContext

Hyeok·2025년 4월 4일

AsyncContext는 비동기 요청 처리를 지원하기 위한 서블릿 API의 핵심 기능으로, 긴 연결을 다룰 때 유용합니다.

AsyncContext란?

  • 정의: AsyncContext는 Java Servlet 3.0부터 도입된 비동기 처리 메커니즘으로, 요청을 처리하는 스레드가 클라이언트 응답을 즉시 완료하지 않고 비동기적으로 작업을 처리할 수 있게 해줍니다.

  • 위치: javax.servlet.AsyncContext 인터페이스로 제공되며, 톰캣 같은 서블릿 컨테이너에서 구현됩니다.

  • 주요 목적: CPU-bound 작업(짧고 빠른 요청) 대신 I/O-bound 작업(긴 대기, 스트리밍 등)에 적합하게 스레드 사용을 최적화합니다.

어떻게 동작하나?

1. 비동기 시작

  • 서블릿에서 HttpServletRequest.startAsync()를 호출하면 AsyncContext 객체가 생성됩니다.
  • 이로써 요청 처리가 비동기 모드로 전환되고, 원래 스레드는 클라이언트 응답을 기다리지 않고 풀(thread pool)로 돌아갑니다.

2. 비동기 작업

  • AsyncContext를 통해 별도의 스레드(또는 동일 스레드에서 나중에)에서 작업을 처리합니다.
  • 예: 긴 작업(파일 다운로드, DB 쿼리 등)을 처리.

3. 완료/타임아웃

  • 작업이 끝나면 AsyncContext.complete()를 호출해 응답을 완료합니다.
  • 설정된 타임아웃(기본값 30초, 커스터마이징 가능)이 지나면 자동으로 종료되며, AsyncListener의 onTimeout이 호출됩니다.
profile
공부하면서 정리한 블로그입니다. 혹시 잘못된 내용이 있다면 댓글로 알려주시면 큰 도움이 됩니다. 감사합니다!

0개의 댓글