티스토리 뷰

카테고리 없음

Kotlin Corutines

dev ms 2024. 1. 15. 23:23
반응형

Corutine을 배워야 하는 이유

RxJava나 Reactor같은 JVM 라이브러리가 많이 있지만 Corutine을 배워야 하는 이유는 무엇인가?

 

corutine은 1963년 처음 제시되었다. 실제로 corutine이란 개념이 실제 협업에서 사용될 수 있도록 구현하기 까지 수십 년이 거렸다고 한다.

 

Kotlin corutine 은 모든 플랫폼(JVM,js,iOS) 넘나들며 사용할 수 있다.

무엇보다 코틀린 코루틴을 도입할 때 기존 코드 구조를 광범위하게 뜯어 고칠 필요가 없다.

 

기존에 이런 비동기 Thread를 다루기 위하여, Thread를 직접 생성하거나, RxJava를 공부해서 적용하거나, 콜백 함수를 쓰는등 여러 방법을 이용해서 구현해 왔다.

 

각각 언어마다 사용하기 위해 배워야 하는 점, 장/단점등이 명확했던 것 같다.

 

코틀린 코루틴(Kotlin corutine) 사용 

 

Kotlin corutine이 도입한 핵심 기능은 코루틴을 특정 지점에서 멈추고 이후에 재개할 수 있다는 점이다.

corutine을 사용하면 아래와 같은 장점이 있다.

  • 메인쓰레드에서 실행하고 API에서 데이터를 얻어올 때 잠깐 중단시킬 수 있다.
  • 코루틴을 중단시켰을 때 스레드는 블로킹되지 않으며 뷰를 바꾸거나 다른 코루틴을 실행하는 등의 또 다른 작업이 가능하다.

이러한 점을 중단했다가 다시 실행할 수 있는 컴포넌트(component, 프로그래밍에서 재사용 가능한 각각의 독립된 모듈)라고 할 수 있다.

 

백엔드에서의 코루틴 사용

기존코드에서 코루틴으로 바꾸는 대부분의 환경에서는 단지 suspend 제어자(modifier)를 추가하는 것으로 충분합니다.

  • 코루틴을 도입하면 동시성을 쉽게 구현할 수 있다
  • 동시성을 테스트할 수 있다
  • 코루틴을 취소할 수 있다

코루틴을 사용하는 가장 중요한 이유는 스레드를 사용하는 비용이 크기 때문이다.

스레드는 명시적으로 생성해야 하고 유지되어야 하며, 스레드를 위한 메모리 또한 할당되어야 한다.

(대부분 쓰레드 스택의 기본 크기는 1MB이다. 자바 최적화 덕분에 스레드의 메모리 사용량이 반드시 1MB에 비례하지는 않지만, 스레드를 만들 때마다 여분의 메모리를 더 많이 사용해야 한다.)

 

이러한 이유로 많은 스레드가 발생되면 처리되는 시간이 오래 걸리거나, OutOfMemoryError 예외로 프로그램이 종료되는 것이 발생될 수 있습니다.

 

코루틴은 동시성 프로그래밍을 최대한 쉽게 구현할 수 있도록 도와줍니다.

반응형