본문 바로가기
Kotlin Spring

코루틴에 대해서 ( about " Coroutine ")

by Bill Lab 2024. 12. 3.
728x90

코틀린 스프링에 적용하는 코루틴에 대해서 얼마만큼 알고 있는가?

기본적인 내용을 간략 하게 정리해 보겠다.

 

코루틴!

범 코틀린 라이브러리 중 하나이며, async, await, future, promise, actor 등을 이용하여 동시성 지원이 가능하다.

추가로, 아래와 같은 동서성문제를 해결하는 기능들을 제공한다.

 

1. thread 의 가벼운 대안

2. 유연한 thread dispatch

3. 일시중단이 가능한 sequence와 iterator

4. Channel 을 사용한 메모리 공유

5. actor 를 통한 message 전송방식 지원

 

Java web mvc 기반을 고려하면(web flux 아님), 대부분의 동시성 연산이 블로킹(blocking) 처리된다.

thread 를 블로킹 후 다시 실행을 이어가려면, context switch 동작으로 인해 OS level의 계산비용이 증가하게 된다.

이는 시스템 CPU 및 메모리 부하로 이어지는 결과를 초래한다.

 

이러한 메카니즘을 근본적으로 해결한 방식이 비동기 방식이다.

기존 thread가 블로킹 상태로 작업이 완료될때까지 기다리는 대신, 바로 처리가 가능한 다른 연산을 이어서 처리한다.

 

물론 코드 복잡도는 상승하나, 이를 코루틴에서 지원함으로써, 컴파일러가 코드를 비동기로 동작되도록 변환시켜 준다.

이는 실행을 잠시 중단 후 중단한 시점으로 부터 실행을 이어갈 수 있도록 일시 중단 가능한 함수를 지원한다.

 

사용방법은 매우 간단하다. 

기존 메쏘드 앞에 suspend를 붙이면 끝!

suspend fun test(){
    println("test start")
    
    delay(500)
    
    println("test end")
}

 

 

 

728x90