---
id: pattern-ipc
title: "IPC Pattern"
category: "Pattern_Desktop"
status: "draft"
verification_status: "applied"
canonical_id: ""
aliases: ["IPC", "프로세스 간 통신", "inter-process communication", "message passing", "bridge"]
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", "desktop", "ipc", "messaging", "platform-independent"]
raw_sources: ["일반 데스크탑 공학 지식", "AstraAI/src/bridge.ts, sidebarProvider.ts (적용 예)"]
applied_in: ["AstraAI"]
github_commit: ""
---

# [[IPC Pattern]]

## 🎯 한 줄 통찰 (One-line insight)
IPC 는 "서로 다른 프로세스(메인↔렌더러, 앱↔외부 도구)가 메시지로 소통" 하는 패턴으로, *직렬화 가능한 메시지 계약 + 신뢰 경계 검증* 이 핵심 — 다른 프로세스의 입력은 신뢰되지 않은 입력이다.

## 🧠 핵심 개념 (Core concepts)
1. **메시지 패싱:** 객체 직접 공유 불가 → 직렬화(JSON)해 전달.
2. **채널/타입:** 메시지에 type 을 두고 핸들러로 라우팅.
3. **요청-응답 vs 단방향:** 명령은 응답, 알림은 단방향.
4. **신뢰 경계:** 상대 프로세스 입력을 검증(특히 외부 도구).
5. **전송 매체:** Electron ipcMain/Renderer, 웹뷰 postMessage, 로컬 HTTP/소켓.

## 📖 세부 내용 (Details · 패턴 명세)
- **언제 쓰나:** UI 프로세스↔백그라운드, 앱↔외부 프로그램 통신.
- **사용 조건:** 직렬화 가능 메시지; 채널 정의; 보안 검증.
- **장점:** 프로세스 격리(크래시 격리·보안), 언어/도구 무관 연동.
- **단점:** 직렬화 비용, 객체 공유 불가, 비동기 복잡, 보안 표면.
- **대안:** 단일 프로세스(스레드/공유 메모리), 파일 교환, 메시지 큐.
- **실패 사례:** 외부 입력 미검증→임의 명령 실행; 함수/순환 객체 직렬화 실패; 채널 타입 오타; 응답 누락으로 행; 포트 충돌.

## 💻 코드 패턴 (Code patterns)
```text
# 웹뷰(렌더러) ↔ 확장(메인): postMessage 프로토콜
webview.postMessage({ type:'streamChunk', value })       # 확장 → UI
onMessage(msg): route(msg.type, validate(msg))           # UI → 확장

# 앱 ↔ 외부 도구: 로컬 HTTP 브리지
http.createServer((req,res) => { body=validate(parse(req)); res.end(handle(body)) })
```
적용 예: AstraAI 의 BridgeServer(로컬 HTTP 포트 4825 로 외부 도구↔확장 연결, 서비스 레이어로 로직 분리) + 웹뷰 postMessage 프로토콜([[VSCode 확장 구조와 생명주기]], [[Agent 오케스트레이터 분해]]) [S2].

## ⚖️ 모순 및 업데이트 (Contradictions & updates)
프로세스 분리는 격리·보안 이득이 있으나 직렬화·복잡도 비용 — 같은 신뢰 영역의 작은 작업이면 단일 프로세스가 단순. 외부 IPC 는 *항상* 입력 검증.

## 🛠️ 적용 사례 (Applied in summary)
AstraAI BridgeServer + 웹뷰 메시지.

## 🔗 지식 그래프 (Knowledge Graph)
- **상위/루트:** [[패턴 카탈로그 인덱스]]
- **관련 개념:** [[Event Bus Pattern]], [[Tool Calling Pattern]], [[API Client Pattern]], [[데스크탑 앱 개발 가이드]]
- **참조 맥락:** 작은 모델이 데스크탑(Electron/확장) 프로세스 통신을 설계할 때 참조.

## 📚 출처 (Sources)
- [S1] 일반 IPC 지식(Electron, message passing)
- [S2] AstraAI/src/bridge.ts, sidebarProvider.ts — 적용 예

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