반응형

coroutine 8

[Kotlin 공식 문서 정리] 22. 코루틴과 Flow 테스트하기

지금까지 코루틴과 Flow의 개념, 그리고 실무에서 어떻게 사용하는지를 살펴봤습니다.이제 남은 마지막 질문은 이것입니다. “이 코드를 어떻게 테스트해야 할까?” Kotlin 공식 문서에서는 코루틴 테스트를 위해 별도의 테스트 도구를 제공합니다. 이 글에서는 공식 문서 기준 테스트 방법을 실무에서 바로 쓸 수 있는 형태로 정리합니다.1. 왜 코루틴 테스트는 특별할까?코루틴 코드는 시간(delay), 스케줄러, Dispatcher에 강하게 의존합니다.그대로 테스트하면:테스트가 느려지고타이밍에 따라 flaky해지고실제 시간에 의존하게 됩니다이를 해결하기 위해 Kotlin은 가상 시간(virtual time) 기반의 테스트 도구를 제공합니다.2. runBlocking 대신 runTest과거에는 테스트에서 run..

Backend Core/Kotlin 2026.01.13

[Kotlin 공식 문서 정리] 20. Channels와 메시지 기반 동시성

이전 글에서는 여러 코루틴이 하나의 상태를 함께 수정할 때 발생하는 문제와, 이를 해결하기 위한 방법들을 살펴봤습니다.Kotlin 공식 문서에서는 공유 상태를 잠그는 방식(Mutex) 외에 또 하나의 중요한 접근법을 소개합니다. 상태를 공유하지 말고, 메시지를 전달하자 이 글에서는 Kotlin 공식 문서의 Channels 섹션을 기준으로, Channel이 무엇인지와 실제로 어떻게 동작하는지를 출력 결과와 함께 정리합니다.1. Channel이란 무엇인가?Channel은 코루틴 간에 값을 전달하기 위한 비동기 메시지 큐입니다.하나의 코루틴이 값을 보내고(send), 다른 코루틴이 값을 받습니다(receive).val channel = Channel()launch { channel.send(1)}laun..

Backend Core/Kotlin 2026.01.12

[Kotlin 공식 문서 정리] 19. 공유 상태와 동시성 제어

이전 글에서는 StateFlow와 SharedFlow를 활용한 실전 사용 패턴을 살펴봤습니다.그런데 Flow나 코루틴을 사용한다고 해서 동시성 문제가 자동으로 해결되는 것은 아닙니다.Kotlin 공식 문서에서는 여러 코루틴이 하나의 상태를 함께 수정할 때 발생하는 문제를 Shared mutable state and concurrency라는 섹션으로 따로 다룹니다.이 글에서는 그 내용을 기반으로, 왜 문제가 생기는지와 Kotlin이 이를 어떻게 해결하도록 안내하는지를 정리합니다.1. 공유 상태 문제는 왜 발생할까?다음과 같은 코드를 생각해봅시다.var counter = 0suspend fun increment() { counter++}이 함수가 여러 코루틴에서 동시에 호출되면 counter 값은 예상..

Backend Core/Kotlin 2026.01.12

[Kotlin 공식 문서 정리] 15. Flow 기본 개념

지금까지 코루틴을 통해 비동기 작업을 하나의 결과로 다루는 방법을 살펴봤습니다.하지만 실제 서비스에서는 하나의 값이 아니라 여러 값이 시간에 따라 도착하는 경우가 많습니다. 이때 사용하는 개념이 바로 Flow입니다.이 글에서는 Kotlin 공식 문서의 Asynchronous Flow를 기준으로, Flow가 무엇인지와 기본 사용법을 정리합니다.1. Flow란 무엇인가?Flow는 비동기적으로 여러 값을 순차적으로 방출하는 스트림입니다.suspend 함수가 “값 하나를 비동기로 반환”한다면, Flow는 “값 여러 개를 비동기로 흘려보낸다”라고 이해하면 됩니다.2. Sequence vs Flow8번 글에서 다뤘던 Sequence와 Flow는 개념적으로 닮아 있지만, 실행 환경이 다릅니다.구분SequenceFlo..

Backend Core/Kotlin 2026.01.06

[Kotlin 공식 문서 정리] 14. 코루틴 취소와 타임아웃

코루틴을 실제 서비스 코드에서 사용하다 보면 “이 작업을 언제 중단해야 하는가?” “너무 오래 걸리면 어떻게 할 것인가?” 같은 질문을 반드시 마주하게 됩니다.Kotlin 코루틴은 이런 문제를 해결하기 위해 취소(Cancellation)와 타임아웃(Timeout)을 언어 차원에서 지원합니다.이 글에서는 Kotlin 공식 문서의 Cancellation and Timeouts 흐름을 기준으로, 코루틴 취소가 어떻게 동작하는지와 실무에서 반드시 알아야 할 패턴을 정리합니다.1. 코루틴 취소의 기본 개념코루틴의 취소는 스레드를 강제로 종료하는 방식이 아니라, 협력적(cooperative)으로 동작합니다.즉, 코루틴은 실행 중에 “취소 요청이 들어왔는지”를 스스로 확인하고, 취소 가능 지점에서 중단됩니다.val ..

Backend Core/Kotlin 2026.01.06

[Kotlin 공식 문서 정리] 13. 코루틴 비동기 작업 조합 패턴

[Kotlin 공식 문서 정리] 13. 코루틴 비동기 작업 조합 패턴코루틴을 어느 정도 쓰다 보면 단일 비동기 작업보다는 여러 비동기 작업을 어떻게 조합할 것인가가 더 중요한 문제가 됩니다.Kotlin 공식 문서에서는 이 주제를 Composing suspending functions라는 이름으로 다룹니다. 이 글에서는 그 내용을 바탕으로, 실무에서 가장 많이 사용하는 조합 패턴을 정리합니다.1. 순차 실행 기본 패턴가장 단순한 형태는 suspend 함수를 순서대로 호출하는 방식입니다.suspend fun loadUser(): User { delay(500) return User("John")}suspend fun loadOrders(user: User): List { delay(500) ..

Backend Core/Kotlin 2025.12.30

[Kotlin 공식 문서 정리] 11. 코루틴 예외 처리와 에러 전파

[Kotlin 공식 문서 정리] 11. 코루틴 예외 처리와 에러 전파코루틴을 실제 서비스 코드에 적용하기 시작하면 가장 먼저 헷갈리는 부분이 바로 예외 처리입니다.try-catch를 쓰면 될 것 같지만, launch와 async에서의 동작이 다르고, 부모-자식 코루틴 사이에서 예외가 어떻게 전파되는지도 이해해야 합니다.이 글에서는 Kotlin 공식 문서를 기준으로 코루틴의 예외 처리 방식과, 실무에서 반드시 알아야 할 에러 전파 규칙을 정리합니다.1. 코루틴 예외 처리의 기본 원칙예외는 코루틴을 취소시킨다처리되지 않은 예외는 부모로 전파된다부모가 취소되면 자식 코루틴도 함께 취소된다2. launch에서의 예외 처리launch에서 발생한 예외는 즉시 부모 코루틴으로 전파됩니다.val scope = Coro..

Backend Core/Kotlin 2025.12.29

[Kotlin 공식 문서 정리] 09. Coroutine 기본 개념

[Kotlin 공식 문서 정리] 09. Coroutine 기본 개념Kotlin을 사용하다 보면 비동기 처리나 병렬 작업을 어떻게 표현해야 할지 한 번쯤 고민하게 됩니다.Kotlin에서는 이런 문제를 해결하기 위해 코루틴(Coroutine)이라는 개념을 제공합니다. 코루틴은 비동기 코드를 동기 코드처럼 읽히게 만드는 것을 목표로 합니다.이 글에서는 Kotlin 공식 문서를 기준으로 코루틴의 기본 개념과, 처음 접할 때 반드시 이해해야 할 핵심 요소들을 정리합니다.1. 코루틴은 무엇을 해결하려고 등장했을까?전통적인 비동기 코드는 콜백이 중첩되면서 흐름을 따라가기 어려워지는 문제가 있었습니다.// 콜백 기반 비동기 코드 (개념 예시)fetchUser { user -> fetchOrder(user) { o..

Backend Core/Kotlin 2025.12.29
반응형