Ktor, Exposed: newSuspendedTransaction vs withContext

코딩 천재가 되고 싶어·2023년 9월 19일
0

Ktor와 Exposed를 함께 사용하여 비동기 데이터베이스 작업을 처리할 때, 다음과 같은 두 가지 접근 방식을 고려할 수 있다.

1. newSuspendedTransaction

private suspend fun <T> query(block: () -> T): T =
    newSuspendedTransaction(Dispatchers.IO) { block() }

이 방식은 Exposed 라이브러리에서 제공하는 newSuspendedTransaction 함수를 사용한다. 이 함수는 코루틴을 지원하는 트랜잭션을 시작하며, 내부적으로 withContext(Dispatchers.IO)를 사용하여 I/O 디스패처에서 코드를 실행한다.

장점:

Exposed의 내장 함수를 사용하므로 코드가 간결하고 명확하다.
I/O 디스패처에서 자동으로 실행되므로 별도의 디스패처 설정이 필요 없다.

2. withContext와 transaction의 조합

private suspend fun <T> query(block: () -> T): T =
    withContext(Dispatchers.IO) { transaction { block() } }

이 방식은 Kotlin 코루틴의 withContext 함수와 Exposed의 transaction 함수를 조합하여 사용한다.

장점:

withContext를 사용하면 다른 디스패처로 쉽게 전환할 수 있다.
Exposed의 일반 transaction 함수를 사용하므로, 코루틴 지원이 필요하지 않은 다른 코드와의 호환성이 높다.

profile
아 또 하나 배웠다

0개의 댓글