---
id: pattern-background-task
title: "Background Task Pattern"
category: "Pattern_Mobile"
status: "draft"
verification_status: "applied"
canonical_id: ""
aliases: ["background task", "백그라운드 작업", "scheduled job", "watcher", "cron", "WorkManager"]
duplicate_of: ""
source_trust_level: "A"
confidence_score: 0.86
created_at: 2026-06-13
updated_at: 2026-06-13
review_reason: ""
merge_history: []
tags: ["pattern", "mobile", "background", "scheduling", "platform-independent"]
raw_sources: ["일반 모바일/클라이언트 공학 지식", "AstraAI/src/features/*/watcher, src/extension.ts (적용 예)"]
applied_in: ["AstraAI"]
github_commit: ""
---

# [[Background Task Pattern]]

## 🎯 한 줄 통찰 (One-line insight)
백그라운드 작업은 "사용자 상호작용 밖에서 주기적/지연 작업을 실행" 하는 패턴으로, OS 제약(배터리/킬)과 *재진입·중복 실행 방지*를 고려하지 않으면 자원을 낭비하거나 데이터를 손상시킨다.

## 🧠 핵심 개념 (Core concepts)
1. **스케줄링:** interval/cron/조건(충전 중·Wi-Fi) 트리거.
2. **수명관리:** 등록한 작업은 dispose 가능해야(누수 방지).
3. **재진입 방지:** 이전 실행이 안 끝났으면 skip/큐.
4. **멱등성:** 중복 실행에도 안전.
5. **OS 제약:** 모바일은 OS 가 백그라운드를 제한(WorkManager/BGTask).

## 📖 세부 내용 (Details · 패턴 명세)
- **Problem (언제 쓰나):** 동기화/정리/알림/사전계산을 사용자 흐름 밖에서.
- **사용 조건:** 스케줄러; 작업을 작게 분할; 취소/정리 가능.
- **장점:** 응답성(무거운 일을 뒤로), 자동화, 유휴 활용.
- **단점:** 디버깅 난해, OS 킬/제약, 중복/경쟁 위험.
- **대안:** 포그라운드 처리, 서버측 작업(클라 부담↓), 푸시 트리거.
- **실패 사례:** dispose 누락으로 타이머 누수; 재진입으로 중복 실행; 무거운 작업을 메인 스레드; OS 제약 무시로 실행 안 됨; 실패 무한 재시도.

## 💻 코드 패턴 (Code patterns)
```text
const handle = scheduleInterval(ms, async () => {
  if (running) return; running = true            # 재진입 방지
  try { await doWork() /*멱등, 작게*/ } finally { running = false }
})
register(handle)  # dispose 가능하게 등록 → 종료 시 정리
```
적용 예: AstraAI 의 stocksWatcher/dailyBriefing/growthCycle/sleepDigest 워처가 interval 로 돌고 disposable 을 `context.subscriptions` 에 등록해 종료 시 정리([[VSCode 확장 구조와 생명주기]]).

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
모바일에선 OS 가 백그라운드를 강하게 제한 — "정확한 시각 보장" 을 가정하면 깨진다. 중요 작업은 서버 푸시로 트리거하는 것이 안전.

## 🛠️ 적용 사례 (Applied in summary)
AstraAI 워처들(KST 스케줄, dispose 등록).

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[패턴 카탈로그 인덱스]]
- **관련 개념:** [[Background Worker Pattern]], [[Async Concurrency Pattern]], [[Push Notification Pattern]], [[모바일 개발 가이드]]
- **참조 맥락:** 작은 모델이 주기/지연 작업을 설계할 때 참조.

## 📚 출처 (Sources)
- [S1] 일반 백그라운드 작업 지식(WorkManager/BGTaskScheduler)
- [S2] AstraAI/src/features/*/watcher, extension.ts — 적용 예

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