[Kotlin Coroutines] Log 를 사용한 Coroutines 디버깅

2022. 9. 27. 21:00· Coroutines/Debugging
목차
  1. 로그를 사용한 디버깅의 필요성
  2. 로그를 사용해 코루틴 디버깅 하기
  3. 정리
반응형

로그를 사용한 디버깅의 필요성

Kotlin Coroutines는 같은 Coroutine Builder(launch, async 등) 의 중괄호 내부의 코드들이 다른 스레드에서 실행될 수 있다. 예를 들어 아래 코드에서 "task1 : start" 는 메인 스레드에서 실행되지만, "task1 : end"는 DefaultExecutor 스레드에서 실행된다.

 

import kotlinx.coroutines.*

fun main() = runBlocking<Unit> {
    val task1 = launch(Dispatchers.Unconfined) {
        log("task1 : start")
        delay(100)
        log("task1 : end")
    }
    val task2 = launch {
        log("task2 : start")
        delay(100)
        log("task2 : end")
    }

    listOf(task1,task2).joinAll()
}

fun log(message: String) = println("[Current Thread : ${Thread.currentThread().name}] $message")

 

출력은 다음과 같다.

[Current Thread : main] task1 : start
[Current Thread : main] task2 : start
[Current Thread : kotlinx.coroutines.DefaultExecutor] task1 : end
[Current Thread : main] task2 : end

 

위의 출력만 가지고 "task1 : start" 와 "task1 : end"가 같은 코루틴에서 실행된다는 것을 알 수 있을까? 당연히 그렇지 않다. 일반적인 프로그래밍에서는 같은 블록 내부의 작업에서 실행 스레드가 바뀌지 않기 때문이다.

 

따라서 Thread.currentThread().name을 사용하여 현재 스레드를 출력하는 것만으로는 위에서 Coroutine에 대한 정보를 모두 나타내지 못한다. JVM에서는 위 로깅을 위한 코드를 전혀 바꾸지 않고 코루틴에 대한 정보를 출력하기 위한 옵션을 제공한다.

 

로그를 사용해 코루틴 디버깅 하기

로깅을 통해 Coroutines 디버깅하기 위해서는 JVM을 위해 특정 옵션이 추가되어야 한다. 이를 추가하기 위해 아래 과정을 따라하자.

 

1. fun main() 왼쪽의 재생 버튼을 누른 후 [Modify Run Configuration...] 을 클릭한다. 

 

2. -Dkotlinx.coroutines.debug 를 VM options에 넣은 후 OK 버튼을 클릭한다.

 

3. 위 코드를 다시 실행해 보자. 이제 실행 스레드의 @ 뒤에 어떤 코루틴에서 작업이 수행되었는지가 출력된다.

[Current Thread : main @coroutine#2] task1 : start
[Current Thread : main @coroutine#3] task2 : start
[Current Thread : kotlinx.coroutines.DefaultExecutor @coroutine#2] task1 : end
[Current Thread : main @coroutine#3] task2 : end

 

정리

위 과정을 통해 로깅을 통해 Coroutines의 디버깅이 가능해진 것을 확인할 수 있다. 많은 로깅 프레임워크들에서는 Thread.currentThread().name 을 사용해 Thread를 로깅한다. 따라서 VM options에 -Dkotlinx.coroutines.debug만 추가해서 실행하면 어떤 코루틴에서 실행되는지를 확인할 수 있게 된다.

 

 

Kotlin Coroutines 공식 기술 문서 번역이 GitHub 오픈소스로 배포되었습니다. Starganizer가 되어 오픈소스를 지지해주세요.

 

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

Kotlin Coroutines 공식 문서 번역을 시작하며 Kotlin Coroutines는 Kotlin을 위한 강력한 비동기 솔루션이다. 안드로이드 실무에서는 한동안 높은 점유율을 자랑한 RxJava를 Coroutines가 대체하고 있으며, 새로

seyoungcho2.github.io

반응형
저작자표시 비영리 변경금지
  1. 로그를 사용한 디버깅의 필요성
  2. 로그를 사용해 코루틴 디버깅 하기
  3. 정리


 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com

'Coroutines/Debugging' 카테고리의 다른 글
  • [Kotlin Coroutines] IntelliJ 사용해 Coroutines 디버깅 하기
Dev.Cho
Dev.Cho
'조세영의 Kotlin World'는 Kotlin를 전문적으로 다루는 개인 기술 블로그입니다. Kotlin 세계에 대한 양질의 자료를 제공하며 Kotlin, Android, Spring, CI, CD 분야에 대해 다룹니다.
Dev.Cho
조세영의 Kotlin World
Dev.Cho
전체
오늘
어제

블로그 메뉴

  • LinkedIn
  • GitHub
  • 분류 전체보기 (491)
    • Kotlin (104)
      • Class and Interface (19)
      • Variable and Function (8)
      • Modifier (5)
      • Collection (14)
      • Time (8)
      • 동시성 제어 (7)
      • Reactive Programming (2)
      • Paradigm (2)
      • Kotlin 자료구조 (15)
      • Design Patterns (11)
      • Algorithm (3)
      • Exception (1)
      • 기타 (9)
      • Update History (0)
    • Coroutines (32)
      • Coroutine Basics (18)
      • Flow (9)
      • CoroutineScope (3)
      • Debugging (2)
    • Testing Codes (28)
      • Test 기본 (3)
      • JUnit5 (9)
      • MockK (6)
      • Testing Coroutines (1)
      • Testing Android (8)
      • Test 기타 (1)
    • Spring (50)
      • Dependency Injection (18)
      • Settings (5)
      • REST API (0)
      • DevTools (1)
      • MVC (18)
      • Error (2)
      • MongoDB (2)
      • Database (4)
    • Android (39)
      • Architecture (2)
      • Component (5)
      • Manifest (1)
      • Lifecycle (2)
      • Dependency Injection (17)
      • Resource (1)
      • Storage (1)
      • Security and Optimization (1)
      • WebView (2)
      • Error (6)
    • Android Jetpack Compose (33)
      • Compose (6)
      • Compose Modifier (13)
      • Compose Resource (4)
      • Compose State (4)
      • Compose Side Effect (6)
    • Android Jetpack Compose UI (48)
      • Compose Layout (14)
      • Compose Text (10)
      • Compose Button (5)
      • Compose Dialog (2)
      • Compose TextField (0)
      • Compose UIs (4)
      • Compose Animation (1)
      • Compose Canvas (12)
    • Android Jetpack (10)
      • Datastore (5)
      • ViewModel (4)
      • LiveData (1)
      • Paging (0)
    • KMP (5)
    • Programming (4)
    • Machine (9)
      • JVM (7)
      • Linux (2)
    • CI, CD (74)
      • Gradle (12)
      • Groovy Gradle (5)
      • Git (25)
      • Git Remote (5)
      • GitHub (5)
      • GitHub Actions (21)
    • Network (33)
      • GraphQL (12)
      • HTTP (11)
      • Basic (9)
    • 오픈소스 (3)
    • Database (3)
      • MongoDB (3)
    • IDE (6)
      • Android Studio (2)
      • Intellij (4)
    • Firebase (1)
    • Javascript (9)

공지사항

  • 코틀린 코루틴 완전 정복 강의 in 인프런 오픈
  • 코틀린 코루틴의 정석 책 출간
  • Kotlin Coroutines 공식 기술 문서 한국어 번⋯
  • GitHub에서 조세영의 Kotlin World를 Foll⋯
  • 문의&제안

인기 글

태그

  • github actions
  • junit
  • flow
  • Jetpack Compose
  • HTTP
  • Dependency Injection
  • Kotlin
  • 코루틴
  • compose
  • 코틀린
  • Android
  • Spring
  • github
  • kotlin spring
  • java
  • junit5
  • Android Compose
  • 의존성 주입
  • 유닛 테스팅
  • dagger2
  • 스프링
  • GIT
  • GraphQL
  • gradle
  • Class
  • junit4
  • Spring boot
  • Unit Testing
  • Coroutine
  • 안드로이드

최근 글

반응형
hELLO · Designed By 정상우.v4.3.0
Dev.Cho
[Kotlin Coroutines] Log 를 사용한 Coroutines 디버깅
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.