--- 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: ["일반 데스크탑 공학 지식", "ConnectAI/src/bridge.ts, sidebarProvider.ts (적용 예)"] applied_in: ["ConnectAI"] 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)) }) ``` 적용 예: ConnectAI 의 BridgeServer(로컬 HTTP 포트 4825 로 외부 도구↔확장 연결, 서비스 레이어로 로직 분리) + 웹뷰 postMessage 프로토콜([[VSCode 확장 구조와 생명주기]], [[Agent 오케스트레이터 분해]]) [S2]. ## ⚖️ 모순 및 업데이트 (Contradictions & updates) 프로세스 분리는 격리·보안 이득이 있으나 직렬화·복잡도 비용 — 같은 신뢰 영역의 작은 작업이면 단일 프로세스가 단순. 외부 IPC 는 *항상* 입력 검증. ## 🛠️ 적용 사례 (Applied in summary) ConnectAI BridgeServer + 웹뷰 메시지. ## 🔗 지식 그래프 (Knowledge Graph) - **상위/루트:** [[패턴 카탈로그 인덱스]] - **관련 개념:** [[Event Bus Pattern]], [[Tool Calling Pattern]], [[API Client Pattern]], [[데스크탑 앱 개발 가이드]] - **참조 맥락:** 작은 모델이 데스크탑(Electron/확장) 프로세스 통신을 설계할 때 참조. ## 📚 출처 (Sources) - [S1] 일반 IPC 지식(Electron, message passing) - [S2] ConnectAI/src/bridge.ts, sidebarProvider.ts — 적용 예 ## 📝 변경 이력 (Change history) - 2026-06-13: 프로젝트 독립 패턴 카드 작성.