[Android] Worker Pool 패턴을 통한 작업의 효율/안정성 올리기

2026. 1. 20. 20:04·작업 일지
반응형
 

[Android] API의 배치 처리와 동시성 처리 : chunked vs semaphore

기존 문자를 전송하는 로직은 chunked(10)를 통해 10개의 배치를 만들고 배치 내부는 비동기로 실행하되, 배치 내부의 작업이 모두 끝나면 다음 배치로 넘어가는 순차 방식으로 구현을 했다. // sendMm

ogyong.tistory.com

지난번에 다량의 API 호출 건에 대해 리스트의 chunked와 코루틴의 semaphore를 비교해 보고 semaphore를 사용하려 했다. 하지만 semaphore를 사용했을 때 구조 상 처리할 데이터의 수량만큼 코루틴을 생성해야 하는 문제가 발목을 잡았는데, Worker Pool 패턴에 대해 알게 되었다.

Worker Pool  / Producer-Consumer / Worker Thread
위 3가지를 섞어서 말하기도 한다.

 

Worker Pool 패턴은 작업을 처리할 일꾼들을 미리 고용하고, 작업을 처리할 일이 생길 때마다 대기 중인 일꾼에게 일을 맡기는 방식이다. 다시 말하자면 정해진 수의 스레드를 생성하고, 작업을 큐(Queue)에 쌓아두면 스레드에서 작업을 하나씩 처리하는 방식이다.


    val channel = Channel<MmsData>(Channel.UNLIMITED) // 처리할 데이터가 100개 내외기 때문에 UNLIMITED 사용
    mmsList.forEach { channel.send(it) }
    channel.close()

    supervisorScope {
        repeat(5) { // or List(5)
            launch {
                for(mmsItem in channel) {
                    sendMms(mmsItem)
                }
            }
        }
    }

 

 

작업을 담을 공간으로 코루틴에서 제공하는 Channel을 사용했다. Channel은 Queue와 매우 유사하게 동작을 하지만, suspend로 동기화가 가능한 코루틴끼리 값을 주고받는 통로이다.

  • channel.send(it)
    처리할 데이터인 mmsList의 Item을 channel에 채워준다
  • repeat(5) or List(5) / launch
    5개의 코루틴을 생성하여 동시성을 확보한다.
  • for(mmsItem in channel)
    5개의 코루틴이 channel에 접근하여 작업을 꺼내 수행한다.(같은 작업을 볼 수 없음)

사실 semaphore()가 동시 실행 수를 제어하는데 있어서 간단하게 쓰기 좋았고, 특히 경량 스레드라고 불리는 코루틴이 100개 내외로 생기는 것은 메모리에 영향을 주지 않을 정도로 미미하다고 한다. 그래도 지금보다 대량의 API 처리가 필요할 때 Worker Pool 패턴을 사용하면 좋을 것 같다.

반응형

'작업 일지' 카테고리의 다른 글

[Android] ConnectivityManager로 데이터 절약 모드 감지하기  (0) 2026.01.06
[Android] API의 배치 처리와 동시성 처리 : chunked vs semaphore  (1) 2025.12.19
[Android] WebView에서 다운로드 동작이 안 되는 이유  (0) 2025.09.17
[Android] 배송 순서 최적화하기 with TSP  (2) 2025.07.01
[Android][Compose] MaterialCalendarView를 Compose에서 사용하기  (0) 2024.05.19
'작업 일지' 카테고리의 다른 글
  • [Android] ConnectivityManager로 데이터 절약 모드 감지하기
  • [Android] API의 배치 처리와 동시성 처리 : chunked vs semaphore
  • [Android] WebView에서 다운로드 동작이 안 되는 이유
  • [Android] 배송 순서 최적화하기 with TSP
O_Gyong
O_Gyong
안드로이드 기술 정리
  • O_Gyong
    O_Gyong's TECH
    O_Gyong
    • 분류 전체보기 (84) N
      • Android (60)
        • ADB (4)
        • Architecture (1)
        • Data (5)
        • Firebase (2)
        • Network & Connecting (4)
        • Security & Privacy (3)
        • UI (24)
        • 기타 (3)
        • 이슈 처리 (14)
      • Android Studio (5)
      • Git (3)
      • 작업 일지 (16) N
  • 최근 글

  • 인기 글

  • 태그

    CalendarView
    Andoird
    loading
    github
    Pagination
    issue
    Paging3
    ADB
    Android Studio
    해상도
    in-app update
    Kotlin
    BLE
    webview
    kizitonwose
    Android
    TabLayout
    GIT
    paging
    Room
    compose
    firebase
    flow
    SharedPreferences
    hilt
    Navigation
    recyclerview
    MQTT
    Bluetooth
    CameraX
  • 링크

    • GitHub
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • hELLO· Designed By정상우.v4.10.4
O_Gyong
[Android] Worker Pool 패턴을 통한 작업의 효율/안정성 올리기
상단으로

티스토리툴바