From 571c894278780f1802e67df2979c73224229d211 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EC=9C=A4=EC=A0=95=EB=AF=BC?= Date: Thu, 28 May 2026 17:34:44 +0900 Subject: [PATCH] Parallelize multi-year rank fetch (R7) fetchRankFromKbo awaited each year's getOrFetch sequentially even though years use independent cache keys. Map to Promise.all so multi-year lookups run concurrently; order is preserved. --- src/repositories/kboRepository.ts | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/src/repositories/kboRepository.ts b/src/repositories/kboRepository.ts index 534842f..bf39145 100644 --- a/src/repositories/kboRepository.ts +++ b/src/repositories/kboRepository.ts @@ -43,15 +43,16 @@ const TTL_MS = 60 * 60 * 1000; // 1 hour export async function fetchRankFromKbo( years: number[] ): Promise { - const results: TeamRankResult[] = []; - for (const year of years) { - const key = encodeKey(["rank", year]); - const result = await getOrFetch(key, TTL_MS, () => - fetchSingleYearRank(year) - ); - results.push(result); - } - return results; + // 연도별로 독립 캐시 키를 쓰므로 순차 대기할 이유가 없다. 병렬 처리해 다년도 + // 조회 지연을 줄인다. Promise.all은 입력 순서를 보존한다. + return Promise.all( + years.map((year) => { + const key = encodeKey(["rank", year]); + return getOrFetch(key, TTL_MS, () => + fetchSingleYearRank(year) + ); + }) + ); } /**