---
id: pattern-plugin-architecture
title: "Plugin Architecture Pattern"
category: "Pattern_Desktop"
status: "draft"
verification_status: "applied"
canonical_id: ""
aliases: ["plugin architecture", "플러그인 아키텍처", "extension point", "self-registration", "skill loader"]
duplicate_of: ""
source_trust_level: "A"
confidence_score: 0.85
created_at: 2026-06-13
updated_at: 2026-06-13
review_reason: ""
merge_history: []
tags: ["pattern", "desktop", "plugin", "extensibility", "platform-independent"]
raw_sources: ["일반 소프트웨어 공학 지식", "AstraAI/src/skills/externalSkillLoader.ts, src/features/*/handlers.ts (적용 예)"]
applied_in: ["AstraAI"]
github_commit: ""
---

# [[Plugin Architecture Pattern]]

## 🎯 한 줄 통찰 (One-line insight)
플러그인 아키텍처는 "코어를 안정적으로 두고 기능을 *확장 지점(extension point)* 으로 끼워 넣게" 해 코어 수정 없이 능력을 늘리는 패턴 — 핵심은 *안정된 계약(인터페이스)* 과 *자기 등록* 이다.

## 🧠 핵심 개념 (Core concepts)
1. **확장 지점:** 코어가 정의한 인터페이스/훅.
2. **자기 등록:** 플러그인 로드 시 레지스트리에 자기를 등록(side-effect import).
3. **발견(discovery):** 디렉터리/매니페스트 스캔으로 동적 로드.
4. **격리/검증:** 플러그인 실패가 코어를 죽이지 않게.
5. **버전 계약:** 코어 API 버전 호환.

## 📖 세부 내용 (Details · 패턴 명세)
- **언제 쓰나:** 서드파티/도메인 기능을 코어 변경 없이 추가, 기능 on/off, 생태계 구축.
- **사용 조건:** 안정된 확장 인터페이스; 로딩/등록 메커니즘; 격리.
- **장점:** 확장성, 코어 안정, 병렬 개발, 선택적 기능.
- **단점:** 인터페이스 설계 어려움, 버전 호환 부담, 플러그인 품질/보안 위험.
- **대안:** 모놀리식(소규모), 설정 플래그, 마이크로서비스.
- **실패 사례:** 플러그인 예외가 코어 크래시(격리 부재); 안정 안 된 API 로 잦은 호환 깨짐; 등록 순서 의존; 신뢰 안 된 플러그인 권한 과다.

## 💻 코드 패턴 (Code patterns)
```text
# 자기 등록 (side-effect import)
import './features/system/handlers'   # 로드되며 registry.register(...) 실행
registry.register('cmd:foo', handler)

# 동적 발견
for file in scan(pluginsDir): plugin = load(file); if validate(plugin): register(plugin)
try { plugin.run() } catch { /* 격리 — 코어 보호 */ logError() }
```
적용 예: AstraAI 의 핸들러 자기등록(`import './features/.../handlers'` 가 slashRouter 에 등록)과 externalSkillLoader(외부 스킬 동적 로드) [S2]. → [[모듈 시스템과 프로젝트 구성]].

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
플러그인은 유연하나 *안정된 계약* 없이는 버전 지옥. 확장 지점을 최소·신중히 설계하고, 신뢰 안 된 플러그인은 샌드박스/권한 제한.

## 🛠️ 적용 사례 (Applied in summary)
AstraAI 핸들러 자기등록 + 스킬 로더.

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[패턴 카탈로그 인덱스]]
- **관련 개념:** [[Command Pattern]], [[Event Bus Pattern]], [[Architecture Separation Pattern]], [[데스크탑 앱 개발 가이드]]
- **참조 맥락:** 작은 모델이 확장 가능한 앱(에디터/IDE/툴)을 설계할 때 참조.

## 📚 출처 (Sources)
- [S1] 일반 플러그인/확장 아키텍처 지식
- [S2] AstraAI/src/skills/externalSkillLoader.ts, features/*/handlers.ts — 적용 예

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