Kotlin Coroutines 공식 문서 한국어 번역본

2023. 2. 12. 18:33·공식 문서 번역/Coroutines 공식 문서
반응형

아래 링크에서 역주가 없는 버전을 확인하실 수 있습니다.

Published on Web: https://seyoungcho2.github.io/CoroutinesKoreanTranslation/ 

Kotlin Coroutines 공식 문서 번역을 시작하며

 Kotlin Coroutines는 Kotlin을 위한 강력한 비동기 솔루션이다. 안드로이드 실무에서는 한동안 높은 점유율을 자랑한 RxJava를 Coroutines가 대체하고 있으며, 새로 시작하는 프로젝트들은 모두 Coroutines를 사용하고 있다. 그 이유는 Coroutines의 성능과 간결성, 가독성에 있다. Coroutines는 기존 스레드 모델들과 다른 경량 스레드(Light Weight Thread)라는 개념을 도입 하여 불필요한 Thread Blocking을 방지할 수 있도록 하였으며, 직관적인 키워드를 통해 가독성을 높였다.

 

 이러한 장점으로 많은 개발자들이 실무에서 Coroutines를 사용하기 시작했지만, 공부를 위한 자료가 많이 부족하며, 많은 배경 지식들을 요구하기 때문에 접근하기 위한 허들이 높다. 나 또한 한글로 된 제대로 된 자료가 존재하지 않는 상황에서 각종 영어로된 문서, 영상, 책 등을 찾아 모르는 부분을 해결하였고, 영어에 익숙한 나조차 코루틴을 이해하기 위해 몇 달 이상의 시간이 걸렸다. 

 

 나는 이것이 문제라고 생각해 많은 한국인 개발자들이 코루틴에 접근하기 쉽도록 하기 위해 책과 강의 공식문서 그리고 Google IO 등을 보면서 정리한 것을 18개의 글로 만들었고, 이에 대한 반응이 매우 좋았다. 하지만 이 글들은 내가 나름대로 주니어 개발자부터 시니어 개발자까지 이해하기 편하게 정리한 것일 뿐 Coroutines에 대한 모든 것을 다루지는 않는다. 

 

 

[Coroutine] 1. Coroutine 은 어떻게 스레드 작업을 최적화 하는가?

Thread 구조와 다중 Thread 작업의 필요성 하나의 프로세스(Process) 에는 여러 스레드(Thread) 가 있고, 각 스레드는 독립적으로 작업을 수행할 수 있다. 예를 들어 JVM 프로세스 상에서는 스레드는 그림1

kotlinworld.com

 

이에 따라 이번에는 Coroutines 에 대한 깊은 부분까지 다루기 위해 공식 문서의 번역이라는 새로운 시도를 하고자 한다. 이번 번역 작업을 통해 번역의 완성도와 가독성을 모두 잡은 공식 문서 가이드가 나올 수 있었으면 바라는 마음으로 블로그를 열어 번역을 시작한다. 

 

 부디 이 번역 작업이 많은 분들께 도움이 되었으면 좋겠다. 아래에서 바로 번역을 시작한다.

 


Coroutines 가이드

 Kotlin은 언어로서 다른 라이브러리들이 coroutines를 활용할 수 있도록 표준 라이브러리 상에서 최소한의 저수준 API들만을 제공한다.  비슷한 기능을 가진 다른 많은 언어들과 달리, async와 await은 Kotlin의 키워드나 표준 라이브러리의 구성요소가 아니다. 또한 Kotlin의 일시 중단 함수는 다른 비동기 개념인 futures나 promises보다 안전하고 오류가 덜 발생할 수 있도록 추상화 되어 있다.

 

 kotlinx.coroutines 패키지는 coroutines에 다양한 기능들을 제공하기 위해 JetBrains사에서 개발된 라이브러리이다. 여기에는 launch, async 등 이 가이드에서 다루는 Coroutines 사용을 위한 고수준 primitives*가 포함된다.

*primitives : 프로그래밍에서 primitives는 가장 기본적인 동작을 뜻한다. 

 

 이 문서는 kotlinx.coroutines의 핵심 기능들에 대한 가이드이며, 다양한 주제들과 일련의 예시들로 구성되었다.

 

 coroutines를 사용하고 이 가이드의 예제를 학습하기 위해서는 project README에 설명된 대로 kotlinx-coroutines-core에 대한 의존성을 추가해야 한다.

 

 


목차

  • Coroutines 기초
    • Coroutines 기초 알아보기 1편 - 첫 Coroutines 작성하기, 함수 추출해 Coroutines 코드 리펙토링하기
    • Coroutines 기초 알아보기 2편 - Coroutines Scope Builder 사용하기, Coroutine Job 명시적으로 사용하기, Coroutines는 light-weight 이다
  • Coroutines 취소
    • Coroutines 취소 1편 - Coroutine 실행 취소하기, Coroutines 취소는 협력적이다, Coroutine의 Computation 코드를 취소 가능하게 만들기
    • Coroutines 취소 2편 - finally를 사용해 리소스 닫기, 실행 취소가 불가능한 블록 실행하기
  • Coroutines 실행 시간 제한하기
    • Coroutines 실행 시간 제한하기 - Timeout, 비동기 Timeout과 리소스Coroutines 실행 시간 제한
  • Coroutines 일시중단 함수 구성하기
    • Coroutines 일시중단 함수 구성하기 1편 - 기본적인 순차 처리, async를 사용한 동시성, async lazy하게 시작하기
    • Coroutines 일시중단 함수 구성하기 2편 - 비동기 스타일 함수, 구조화된 동시성과 async
  • Coroutine Context와 Dispatcher
    • Coroutine Context와 Dispatcher 1편 - Dispatchers와 Threads, Unconfined vs confined dispatcher
    • Coroutine Context와 Dispatcher 2편 - Coroutines와 Threads 디버깅 하기 : IntelliJ 사용, 로깅 사용
    • Coroutine Context와 Dispatcher 3편 - Thread들 간에 점프 하기, Context 내부의 Job, Coroutine의 자식들
    • Coroutine Context와 Dispatcher 4편 - 부모 Coroutine의 책임, Coroutines에 이름 짓기, Context 요소들 결합하기
    • Coroutine Context와 Dispatcher 5편 - Coroutine Scope
  • Coroutine Flow
    • Coroutines Flow 1편 - 복수의 값들 표현하기, Flow는 차갑다
    • Coroutines Flow 2편 - Flow 취소하기, Flow 빌더, Flow 중간 연산자
    • Coroutines Flow 3편 - Flow 터미널 연산자, Flow는 순차적이다
    • Coroutines Flow 4편 - Flow의 수집이 일어나는 Context, Flow Buffering - buffer, conflate, collectLatest
    • Coroutines Flow 5편 - 여러 Flow 하나로 합치기, Flow를 Flatten하기 - flatMapConcat, flatMapMerge, flatMapLatest
    • Coroutines Flow 6편 - Flow 예외 처리, Flow의 예외 투명성
    • Coroutines Flow 7편 - Flow 수집 완료 처리하기, Flow 명령적으로 다루기 vs 선언적으로 다루기
    • Coroutines Flow 8편 - Flow 실행하기, Flow와 Reactive Stream
  • Coroutine Channels
    • Coroutine Channels 1편 - Channel이란 무엇인가, Channel 닫기, Channel 반복적으로 수신하기, Producer로 Channel 만들기
    • Coroutine Channels 2편 - Channel로 파이프라인 만들기, 파이프라인으로 소수 만들기
    • Coroutine Channels 3편 - Fan-out과 Fan-in : Channel이 얼마나 많은 출력, 입력을 만들 수 있는지 알아보기
    • Coroutine Channels 4편 - Buffered channels, Channel은 평등하다, Ticker channels
  • Coroutine 예외 처리
    • Coroutine 예외 처리 1편 - Exception 전파, CoroutineExceptionHandler 사용해 전파된 예외 처리하기
    • Coroutine 예외 처리 2편 - Cancellation과 Exceptions, Exceptions 합치기
    • Coroutine 예외 처리 3편 - Supervision - SupervisorJob, SupervisionScope 사용해 예외 처리하기
  • Coroutine 공유 상태와 동시성
    • Coroutine 공유 상태와 동시성 1편 - Coroutine을 여러개 실행했을 때의 문제점, Volatile은 동시성 문제를 해결하지 못한다.
    • Coroutine 공유 상태와 동시성 2편 - Thread-safe한 데이터 구조, 세밀하게 Thread 제한하기, 굵게 Thread 제어하기 
    • Coroutine 공유 상태와 동시성 3편 - Mutex 사용하기, Actors 사용하기
  • Coroutine와 Channels 튜토리얼
    • Coroutines와 Channels 튜토리얼 - 1. 시작하기 전 준비하기
    • Coroutines와 Channels 튜토리얼 - 2. Blocking Requests
  • Coroutine Debugging
    • IntelliJ IDEA 사용해서 Coroutine 디버깅 하기
    • IntelliJ IDEA 사용해 Kotlin Flow 디버깅 하기

 

추가 참조

  • Guide to UI programming with coroutines
  • Coroutines design document (KEEP)
  • Full kotlinx.coroutines API reference
  • Best practices for coroutines in Android
  • Additional Android resources for Kotlin coroutines and flow

이 글은 Coroutines 공식 문서를 번역한 글입니다.

 

원문 : Coroutines guide 문서

원문 최종 수정 :  2022년 6월 27일

 

이 글은

 

 

 

반응형

'공식 문서 번역 > Coroutines 공식 문서' 카테고리의 다른 글

Coroutines 실행 시간 제한하기 - Timeout, 비동기 Timeout과 리소스  (0) 2023.02.17
Coroutines 취소 2편 - finally를 사용해 리소스 닫기, 실행 취소가 불가능한 블록 실행하기  (0) 2023.02.16
Coroutines 취소 1편 - Coroutine 실행 취소하기, Coroutines 취소는 협력적이다, Coroutine의 Computation 코드를 취소 가능하게 만들기  (0) 2023.02.15
Coroutines 기초 알아보기 2편 - Coroutines Scope Builder 사용하기, Coroutine Job 명시적으로 사용하기, Coroutines는 light-weight 이다  (2) 2023.02.14
Coroutines 기초 알아보기 1편 - 첫 Coroutines 작성하기, 함수 추출해 Coroutines 코드 리펙토링하기, Coroutines Scope Builder 사용하기  (1) 2023.02.13


'공식 문서 번역/Coroutines 공식 문서' 카테고리의 다른 글
  • Coroutines 취소 2편 - finally를 사용해 리소스 닫기, 실행 취소가 불가능한 블록 실행하기
  • Coroutines 취소 1편 - Coroutine 실행 취소하기, Coroutines 취소는 협력적이다, Coroutine의 Computation 코드를 취소 가능하게 만들기
  • Coroutines 기초 알아보기 2편 - Coroutines Scope Builder 사용하기, Coroutine Job 명시적으로 사용하기, Coroutines는 light-weight 이다
  • Coroutines 기초 알아보기 1편 - 첫 Coroutines 작성하기, 함수 추출해 Coroutines 코드 리펙토링하기, Coroutines Scope Builder 사용하기
심플코드
심플코드
프로그래밍을 어렵지 않게 풀어서 설명하는 기술 블로그
    반응형
  • 심플코드
    심플코드
    심플코드
  • 전체
    오늘
    어제
    • 분류 전체보기 (96)
      • 안드로이드를 위한 Coroutines (2)
      • Unit Testing (19)
      • GitHub Actions (0)
      • 공식 문서 번역 (35)
        • Coroutines 공식 문서 (35)
      • 알고리즘 (7)
        • Kotlin 자료구조 (0)
        • 알고리즘 (7)
        • Kotlin으로 구현하는 자료구조 (0)
      • 코딩 테스트 (0)
      • Deep Learning (0)
      • Machine Learning Math (17)
        • Linear Algebra (17)
      • ML (0)
      • Docker (15)
      • Kubernetes (1)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

    • 코틀린 코루틴의 정석 책 출간 소식
  • 인기 글

  • 태그

    coroutine
    unit testing
    junit
    pytorch
    컨테이너
    mockito
    Docker
    unit test
    Coroutines Channel
    Coroutines Flow
    코루틴
    도커
    Kotlin
    TensorFlow
    Coroutines
    Machine Learning
    코루틴 Flow
    Coroutines Context
    numpy
    코루틴 채널
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.3
심플코드
Kotlin Coroutines 공식 문서 한국어 번역본
상단으로

티스토리툴바