coroutine 3

RateLimiter 제대로 알고 쓰기

일반적으로 요청받는 서버에서 단시간에 지나치게 높은 호출 빈도를 제어하기 위한 목적으로(throttling) RateLimiter 를 사용하고 있다. RateLimiter 는 Guava 라이브러리에서 제공하는 유틸리티로, 외부 서버로의 API 호출을 제한하기 위해 자주 사용된다. RateLimiter 를 이용해 호출 빈도 제한 방법 의존성 추가 우선, RateLimiter 는 Guava 라이브러리 내에 존재하는 유틸리티기 떄문에 이를 사용하기 위해 Guava 라이브러리 의존성을 추가해야 한다. implementation("com.google.guava:guava:31.0.1-jre") RateLimiter 인스턴스의 생성 // 1초당 2회로 제한하는 케이스이다. // 넘겨 주는 인자는 permitsPer..

Spring 2023.04.12

RunTest에 대해서...

코루틴을 프로젝트에서 사용하다보면, 일시 중단 함수를 테스트하거나 테스트 코드 내부적으로 호출해야할 일이 빈번하게 발생한다. 하지만, 테스트를 진행하는 JUnit 환경에선 테스트 함수가 일시 중단 함수가 아니기 때문에 의무적으로 최상위 코루틴 스코프를 생성해 해당 스코프 내에서 일시 중단 함수를 호출해야 했다. @Test fun test() { runBlocking { // 일시 중단 함수 호출 // 일시 중단 함수 호출 } } 문제 - 테스트 코드 내에서 delay() 함수를 사용 이런 처리를 일일이 해야하는 것에 번거로움을 느낄때쯤, 기대한 처리가 완료될 때까지 대기하는 delay(1000) 함수를 테스트 코드 내에서 사용해야할 일이 발생했다. 사내에서 제공하고 있는 구매 서비스는 기본적으로 구매 요..

Spring 2023.03.26

I/O 작업 비동기로 처리하기(w. 코루틴)

이번에 php 코드로 동작하고 있던 만료 예정 크레딧 발송 코드를 kotlin 으로 리팩토링하는 작업을 진행했다. 리팩토링이 필요한 코드는 총 1일, 7일, 30일 후에 만료되는 크레딧을 보유하고 있는 사용자에게 크레딧 만료 예정 알림톡을 보내주는 코드로 11000 ~ 14000건 정도를 매일 11시에 발송하는 코드이다. 1일 후 만료(5000 ~ 6000건) 7일 후 만료(5000 ~ 6000건) 30일 후 만료(1000 ~ 2000건) 코드를 확인해보니 만료 예정 크레딧을 받아오는 코드가 페이징 처리되어 있었고, 조회해온 Page 사이즈만큼의 크레딧에 대해 만료 예정 알림톡을 순차적으로 보내준 뒤, 반복적으로 다음 Page 리스트에 대해서도 동일 처리를 진행하는 코드로 파악이 되었다. 하지만, 100..

Spring 2023.03.12