피드로 돌아가기
Timeout Patterns in Java 21: Full Failure vs Partial Results
Dev.toDev.to
Backend

Java 21 Structured Concurrency로 구현하는 정밀한 Timeout 전략

Timeout Patterns in Java 21: Full Failure vs Partial Results

Jagdish Salgotra2026년 4월 6일4intermediate

Context

타임아웃 처리 시 단순 시간 초과 여부보다 응답의 의미 정의가 더 중요함. 모든 데이터가 필수적인 경우와 일부 데이터만으로 충분한 경우의 응답 정책이 서로 다름. 기존 방식으로는 이러한 응답 정책을 코드상에서 명확히 구분하기 어려움.

Technical Solution

  • Java 21의 StructuredTaskScope.ShutdownOnFailure를 활용한 구조적 동시성 설계
  • 모든 작업의 성공이 필수적인 경우 Strict Version 패턴을 적용하여 전체 실패 처리
  • 선택적 데이터 응답이 가능한 경우 Partial-Results Version 패턴으로 가용 데이터만 반환
  • scope.joinUntil(deadline) 메서드를 통해 지정된 시간까지 대기 후 타임아웃 예외 처리
  • 타임아웃 발생 시 Optional.empty()를 활용하여 누락된 데이터를 명시적으로 표현하는 구조
  • 응답 반환 전 scope.shutdown()을 호출하여 잔류 작업을 즉시 취소하고 리소스 누수 방지

Key Takeaway

동시성 프리미티브의 선택보다 비즈니스 요구사항에 맞는 응답 정책(Strict vs Degraded)을 명시적으로 설계하는 것이 더 핵심적인 엔지니어링 결정임.


부분 응답 허용 시 반드시 scope.shutdown()을 호출하여 불필요한 백그라운드 작업의 실행을 차단할 것

원문 읽기