Table of contents
Open Table of contents
백엔드에서 코루틴 만들기
많은 백엔드 프레임워크에서 중단 함수를 기본적으로 지원하고 있습니다.
스프링 부트는 컨트롤러 함수가 suspend
로 선언되는 걸 허용합니다. Ktor
에서 모든 핸들러는 기본적으로 중단 함수입니다.
따로 스코프를 만들 필요는 거의 없습니다. 그럴 필요가 있다면 (오래된 버전의 스프링을 사용해 작업을 해야할 경우) 다음과 같은 것들이 필요합니다.
- 스레드 풀(또는
Dispatcher.Default
)을 가진 커스텀 디스패처 - 각각의 코루틴을 독립적으로 만들어 주는
SupervisorJob
- 적절한 에러 코드에 응답하고, 데드 레터를 보내거나, 발생한 문제에 대해 로그를 남기는
CoroutineExceptionHandler
@Configuration
public class CoroutineConfiguration {
@Bean
fun coroutineDispatcher(): CoroutineDispatcher = Dispatchers.IO.limitedParallelism(5)
@Bean
fun coroutineExceptionHandler() =
CoroutineExceptionHandler { _, throwable ->
FirebaseCrashlytics.getInstance().recordException(throwable)
}
@Bean
fun coroutineScope(
coroutineDispatcher: CoroutineDispatcher,
coroutineExceptionHandler: CoroutineExceptionHandler
) = CoroutineScope(
SupervisorJob() + coroutineDispatcher + coroutineExceptionHandler
)
}
생성자를 통해 커스텀하게 만들어진 스코프를 클래스로 주입되는 방법이 가장 많이 사용됩니다.
스코프는 한 번만 정의되면 수많은 클래스에서 활용될 수 있으며, 테스트를 위해 다른 스코프로 쉽게 대체할 수도 있습니다.