---
id: pattern-async-concurrency
title: "Async Concurrency Pattern"
category: "Pattern_CrossCutting"
status: "draft"
verification_status: "applied"
canonical_id: ""
aliases: ["async pattern", "비동기 패턴", "concurrency", "cancellation", "debounce", "throttle"]
duplicate_of: ""
source_trust_level: "A"
confidence_score: 0.89
created_at: 2026-06-13
updated_at: 2026-06-13
review_reason: ""
merge_history: []
tags: ["pattern", "cross-cutting", "async", "concurrency", "platform-independent"]
raw_sources: ["일반 소프트웨어 공학 지식", "AstraAI/src/core/* (적용 예)"]
applied_in: ["AstraAI"]
github_commit: ""
---

# [[Async Concurrency Pattern]]

## 🎯 한 줄 통찰 (One-line insight)
비동기 처리는 모든 플랫폼이 공유하는 핵심이며, 안전의 3축은 "**취소 가능(cancellation) · 자원 폭주 방지(제한) · 경쟁 상태 제어(직렬화)**" 다 — UI 멈춤·메모리 폭주·갱신 손실이 여기서 갈린다.

## 🧠 핵심 개념 (Core concepts)
1. **취소:** AbortSignal/토큰으로 진행 중 작업 중단(타임아웃+사용자 취소 결합).
2. **동시성 제한:** 큐/세마포어로 동시 실행 수 상한.
3. **직렬화:** 공유 자원은 락/뮤텍스로 한 번에 하나.
4. **debounce/throttle:** 빈번 이벤트(입력/스크롤)를 솎아냄.
5. **병렬 vs 순차:** 독립이면 병렬(all), 의존이면 순차, 부분실패 허용이면 allSettled.

## 📖 세부 내용 (Details · 패턴 명세)
- **Problem (언제 쓰나):** I/O·네트워크·장시간 작업이 UI/자원에 영향 줄 때.
- **사용 조건:** 취소 신호 전파 가능; 작업 단위 분리 가능.
- **장점:** 반응성 유지, 자원 안정, 데이터 일관.
- **단점:** 복잡도↑, 콜백/Promise 추론 어려움, 취소 누락 시 좀비 작업.
- **대안:** 동기(작은 작업), 워커/스레드(CPU 바운드), 큐 시스템(분산).
- **실패 사례:** 취소 미전파로 좀비 fetch; Promise.all 부분 실패로 전체 손실; 무한 병렬 OOM; 락 미해제 데드락; forEach+async 로 미대기.

## 💻 코드 패턴 (Code patterns)
```text
signal = combine(userAbort, timeout(ms))   # 취소 = 사용자 OR 타임아웃
await fetch(url, { signal })
await queue.enqueue(task)                   # 동시성 상한
release = await lock.acquire(id); try{...} finally{ release() }  # 직렬화
onInput = debounce(handler, 200)            # 이벤트 솎기
results = await Promise.allSettled(tasks)   # 부분 실패 허용
```
적용 예: [[비동기 프로그래밍 Promise async await]], [[동시성 제어 Lock Queue Transaction]], [[AITRAIN 동시성 제어]].

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
"병렬이 빠르다" 는 자원 한도 내에서만 참 — 한도를 넘으면 스왑/OOM 으로 더 느려진다([[ADR-0004 순차 디스패치 채택]]).

## 🛠️ 적용 사례 (Applied in summary)
AstraAI services(AbortSignal), lock/queue.

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[패턴 카탈로그 인덱스]]
- **관련 개념:** [[Background Worker Pattern]], [[Background Task Pattern]], [[Error Handling Pattern]]
- **참조 맥락:** 작은 모델이 어떤 플랫폼이든 비동기 코드를 쓸 때 1차 원리.

## 📚 출처 (Sources)
- [S1] 일반 비동기/동시성 지식
- [S2] AstraAI/src/core/services.ts, lock.ts, queue.ts — 적용 예

## 📝 변경 이력 (Change history)
- 2026-06-13: 프로젝트 독립 패턴 카드 작성.
