Skip to content

Coroutine ‐ Exception Handling

woojin.jang edited this page May 24, 2026 · 6 revisions

예외 전파

  • 코루틴 실행 도중 예외가 밣생하면 예외가 발생한 코루틴이 취소되고 예외가 부모 코루틴으로 전파된다.
  • 이 때, 만약 예외를 전파받은 부모 코루틴도 예외를 적절히 처리하지 않는다면 취소되고, 그 상위의 코루틴으로 예외가 전파된다.
  • 코루틴이 예외를 전파받아 상위 코루틴으로 전파 후 취소되면 취소가 해당 코루틴의 하위에 있는 자식 코루틴들에게 전파된다.

예외 전파 제한

  • 코루틴의 구조화를 깨면 예외 전파를 제한할 수 있다.
  • 다음과 같이 Job객체를 새로 만들어 구조화를 깨고 싶은 코루틴에 연결하면 구조화가 깨진다.
  • 하지만 실제로는 위와 같이 사용을 하진 않는다.
  • 코루틴의 구조화가 깨지면 예외 전파 뿐만 아니라 취소 전파도 제한된다. 이는 비동기 작업의 안정성이 깨진다.
  • SupervisorJob 객체는 자식 코루틴으로부터 예외를 전파 받지 않는 특수한 Job 객체이다. 이 객체는 예외 전파를 받지 않아 자식 코루틴에게서 예외가 발생하더라도 취소되지 않는다.
  • SupervisorJob 객체는 자식 코루틴에게서 발생한 예외가 다른 자식 코루틴에게 영향을 미치지 못하게 만드는데 사용된다. SupervisorJob 객체는 CoroutineScope 생성함수와 자주 사용된다.
public fun SupervisorJob(parent: Job? = null) : CompletableJob = SupervisorJobImpl(parent)
  • 단일 코루틴 빌더 함수의 context 인자로 SupervisorJob 객체를 넘기고 그 하위에 자식 코루틴들을 생성할 경우 SupervisorJob 객체는 아무런 역할도 하지 못한다.
  • supervisorScope() 함수는 SupervisorJob 객체를 가진 CoroutineScope 객체를 생성한다.
  • supervisorScope() 함수를 통해 생성된 SupervisorJob 객체는 supervisorScope() 함수를 호출한 코루틴을 부모로 가진다.
  • supervisorScope() 함수를 통해 생성된 SupervisorJob 객체는 코드가 모두 실행되고 나서 자식 코루틴의 실행도 완료되면 자동으로 완료된다. 복잡한 설정 없이 구조화를 꺠지 않고 예외 전파를 제한할 수 있다.

예외 처리 1 - CoroutineExceptionHandler 사용해 예외 처리 하기

예외 처리 2 - try ~ catch문을 사용한 예외 처리

예외 처리 3 - async 예외 처리

전파되지 않는 예외

📖 Java

📖 Kotlin

📖 Coroutine

📖 Spring

📖 Spring Security

📖 Spring Batch

📖 Reactive Programming

📖 Database

📖 MySQL

📖 Redis

📖 JPA

📖 QueryDsl

📖 MSA

📖 Kafka

📖 Apache Flink

  • [Apache Flink - Apache Flink Architecture]
  • [Apache Flink - Stream Processing]
  • [Apache Flink - Data Stream API & Window]
  • [Apache Flink - State Management]

📖 HTTP

📖 AWS

📖 Docker

📖 Kubernetes

📖 CI/CD

📖 Nginx

📖 Monitoring🥈

  • [Monitoring - Log Concept]
  • [Monitoring - Log Level & Filter]
  • [Monitoring - Logback]
  • [Monitoring - Log Collection with ELK Stack]
  • [Monitoring - Log Monitoring with Kibana]
  • [Monitoring - Building a Monitoring System with Spring Boot Actuator]
  • [Monitoring - Server Monitoring with Prometheus and Grafana with Discord Alerts]

📖 Test

📖 Effective Java 3/E

📖 Kotlin Academy - Effective Kotlin

📖 Kotlin Academy - 핵심편

📖 스프링으로 시작하는 리액티브 프로그래밍

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 1

📖 가상 면접 사례로 배우는 대규모 시스템 설계 기초 2

📖 Clean Code

📖 리팩토링 2판

📖 주니어 백엔드 개발자가 반드시 알아야 할 실무 지식

📖 GraphQL

Clone this wiki locally