Files
2nd/10_Wiki/Topic_Programming/Architecture/프로토타이핑 및 개념 증명(PoC).md
T
Antigravity Agent 9148c358d0 docs(10_Wiki): 위키 전체 재구성 — Topic_* 폴더를 4개 카테고리로 통합 + 대규모 중복 제거
Topic_Agent/Topic_Blog/Topics/Topics_Biz/Topics_Meeting/Topics_Rag의 마크다운 지식 문서를
Topic_General/Topic_Programming/Topic_Graphic/Topic_Business 4개 카테고리로 재분류.

- 중복 제거: frontmatter의 status:duplicate/merged + duplicate_of/redirect_to 필드로
  자기 자신을 중복으로 선언한 리다이렉트 stub 1032개 제거, 완전 동일 내용 파일 472개 제거,
  동일 파일명·다른 내용 충돌 시 더 큰(완전한) 버전만 유지(162개 제거) — 총 1639개 중복 제거.
- 분류: 폴더 단위로 명확한 항목(AI_and_ML/Coding/Architecture 등 → Programming,
  Comfyui/Visual_Effects → Graphic, Topics_Biz/Topics_Meeting/사업 등 → Business,
  Poetic_Blog_Writing/창의성/Game_Design 등 → General)은 폴더 우선순위로,
  나머지 혼재 폴더(Topic_Agent/Topic_Blog/Topics 루트/Thinking & Reasoning/Other/UI_UX_Assets)는
  title/tags 키워드 스코어링으로 파일 단위 분류(불명확한 경우 General로 폴백).
  원본 폴더명은 "From_*" 서브폴더로 보존해 추적 가능성 유지.
- 최종 배치: Programming 2784 / General 1608 / Graphic 285 / Business 249 = 4926개 문서.
- 에이전트 운영 상태(.astra/.agent/.obsidian/sessions/memory/_company/docs/lessons/_shared/src)는
  지식 콘텐츠가 아니므로 재분류 대상에서 제외하고 원위치 유지.
- Topics/Topic_email(상위 보호 폴더 Topic_email과 파일명 100% 중복) 삭제 — 보호 폴더 자체는 미변경.
- 완전히 비게 된 Topic_Agent/Topic_Blog/Topics_Biz/Topics_Rag 폴더 제거.
2026-07-05 00:33:48 +09:00

217 lines
7.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
id: wiki-2026-0508-프로토타이핑-및-개념-증명-poc
title: 프로토타이핑 및 개념 증명(PoC)
category: 10_Wiki/Topics
status: verified
canonical_id: self
aliases: [PoC, Proof of Concept, Prototype, Spike]
duplicate_of: none
source_trust_level: A
confidence_score: 0.9
verification_status: applied
tags: [process, prototyping, poc, architecture, methodology]
raw_sources: []
last_reinforced: 2026-05-10
github_commit: pending
tech_stack:
language: -
framework: -
---
# 프로토타이핑 및 개념 증명(PoC)
## 매 한 줄
> **"매 production 이전에 매 risk-laden hypothesis 를 매 cheapest 형태로 검증하는 throwaway 작업."**. 매 prototype = 매 UX / 형태 검증, 매 PoC = 매 기술적 feasibility 검증. 매 둘 다 매 disposable — 매 production code 로 graduating 매 매 흔한 antipattern. 2026 modern stack 에서 매 LLM (Claude Opus 4.7 코드 생성) + 매 v0 / Bolt / Cursor 가 매 prototype turnaround 를 매 hours → minutes 로 단축.
## 매 핵심
### 매 용어 구분
- **Sketch / Wireframe**: 매 visual idea, 매 non-functional. Figma, paper.
- **Prototype**: 매 interactive UX, 매 hardcoded data. Figma prototype, v0.
- **PoC (Proof of Concept)**: 매 핵심 technical risk 한 점 만 검증. CLI script, jupyter notebook.
- **Spike (Agile)**: 매 timeboxed exploration. 매 13 days.
- **MVP (Minimum Viable Product)**: 매 production-grade. 매 PoC 의 X.
### 매 PoC 의 가치
- **De-risk**: 매 architecture 결정 전 매 unknown 제거.
- **Cost compression**: 매 wrong path 의 매 cheap pivot.
- **Stakeholder alignment**: 매 demo > spec.
- **Estimation**: 매 effort estimate 의 grounding.
### 매 흔한 실패 모드
1. **PoC → production graduation**: 매 hardcoded auth, 매 single-tenant assumption 이 매 그대로 prod.
2. **Scope creep**: 매 PoC 가 매 mini-MVP 로 비대.
3. **No success criteria**: 매 언제 끝났는지 의 unclear.
4. **Confusion of UX vs tech**: 매 prototype + PoC 를 매 동일 산출물에.
### 매 응용
1. New ML model 의 latency / accuracy 검증.
2. Third-party API 의 rate limit / behavior 탐색.
3. Architecture migration (REST → gRPC) 의 risk 측정.
4. UX hypothesis 의 user testing.
## 💻 패턴
### Pattern 1 — PoC scope contract (markdown template)
```markdown
# PoC: <Title>
## Hypothesis
"매 <X> 가 매 <constraint> 안에서 매 가능하다."
## Success criteria (매 binary, 매 measurable)
- [ ] 매 latency p95 < 200ms
- [ ] 매 accuracy >= 0.85
- [ ] 매 cost per request < $0.01
## Out of scope
- 매 auth, 매 multi-tenancy, 매 retry, 매 observability.
## Timebox
- 매 3 days. 매 day 4 의 결정 (proceed / pivot / stop).
## Disposal
- 매 결과 wiki page 로 정리, 매 code 는 매 archive branch 로.
```
### Pattern 2 — Notebook PoC (LLM model eval)
```python
# poc_llm_eval.ipynb
import asyncio, time
from anthropic import AsyncAnthropic
client = AsyncAnthropic()
PROMPTS = open('eval_set.txt').read().splitlines() # 매 50 prompts.
async def run_one(p):
t = time.perf_counter()
msg = await client.messages.create(
model='claude-opus-4-7',
max_tokens=1024,
messages=[{'role': 'user', 'content': p}],
)
return time.perf_counter() - t, msg.content[0].text
results = await asyncio.gather(*(run_one(p) for p in PROMPTS))
latencies = [r[0] for r in results]
print(f'p50={sorted(latencies)[25]:.2f}s, p95={sorted(latencies)[47]:.2f}s')
# 매 single notebook → success criteria 즉시 평가.
```
### Pattern 3 — v0 / Bolt prototype (UX validation)
```typescript
// 매 v0.dev prompt:
// "Build a Linear-style task board with drag-and-drop columns,
// using shadcn/ui, Next.js 15 App Router, TailwindCSS."
//
// 매 30초 → 매 working demo URL.
// 매 stakeholder 에 매 link 공유 → 매 feedback 1 hour 안 수집.
```
### Pattern 4 — Cursor + Opus 4.7 spike
```bash
# 매 1 day spike — gRPC migration feasibility.
$ cursor agent
> Take src/api/rest/*, generate equivalent gRPC service definitions
in proto/, and a thin BFF layer that translates REST → gRPC.
Don't touch tests. Generate a benchmark script comparing p95 latency
on 1000 sequential requests.
```
### Pattern 5 — Disposable infra (PoC sandbox)
```bash
# 매 PoC env — 매 1-day TTL 의 매 ephemeral cluster.
$ neon branches create --name poc-grpc --parent main --ttl 24h
$ vercel deploy --prebuilt --target preview
$ render blueprint apply poc.yaml --env ephemeral
# 매 끝나면 매 자동 destroy — 매 cost / sprawl 방지.
```
### Pattern 6 — Spike commit hygiene
```bash
$ git checkout -b spike/grpc-feasibility
$ # 매 hack 자유 — 매 lint, test 의 X.
$ git commit -am 'spike: hardcoded auth, no error handling'
$ git push origin spike/grpc-feasibility
# 매 PR 의 X — 매 결과만 wiki / RFC 로 추출.
$ git branch -D spike/grpc-feasibility # 매 disposal.
```
### Pattern 7 — Decision record (post-PoC)
```markdown
# ADR-042: gRPC migration
## Status
Accepted, 2026-05-10.
## Context
PoC (spike/grpc-feasibility) — 매 3 days.
## Result
- 매 p95 latency: REST 180ms → gRPC 45ms.
- 매 client SDK regen 의 매 30 min CI.
- 매 browser 의 grpc-web bridge 필요 (Connect-Web 채택).
## Decision
- 매 internal service-to-service 는 매 gRPC.
- 매 browser-facing 은 매 Connect (gRPC-compatible).
- 매 migration order: 매 order-svc → 매 inventory-svc → 매 user-svc.
## Consequences
- 매 +1 dev week / service migration.
- 매 OTel gRPC instrumentation 추가 필요.
```
### Pattern 8 — Anti-graduation guard
```yaml
# .github/workflows/no-spike-to-main.yml
name: Block spike merges
on: pull_request
jobs:
guard:
runs-on: ubuntu-latest
steps:
- run: |
if [[ "${{ github.head_ref }}" == spike/* || "${{ github.head_ref }}" == poc/* ]]; then
echo "::error::spike/poc branches must not be merged. Extract findings to ADR/wiki."
exit 1
fi
```
## 매 결정 기준
| 상황 | Tool |
|---|---|
| 매 UX hypothesis | Figma + v0 prototype |
| 매 API / model behavior | Notebook PoC |
| 매 architecture decision | Spike + ADR |
| 매 stakeholder demo | v0 / Bolt |
| 매 production migration | MVP, 매 not PoC |
**기본값**: 매 PoC 는 매 timeboxed (13 days), 매 success criteria binary, 매 disposable, 매 finding → ADR. 매 graduation 금지.
## 🔗 Graph
- 변형: [[MVP]] · [[Wireframe / Prototype]]
- 응용: [[ADR (Architecture Decision Record)]]
- Adjacent: [[Lean Startup]]
## 🤖 LLM 활용
**언제**: 매 hypothesis 정의, 매 PoC 코드 작성 (Cursor / Claude Code), 매 결과 ADR 정리.
**언제 X**: 매 PoC 코드를 매 production 으로 의 graduation. 매 success criteria 의 LLM-fabricated metric (실제 측정 X).
## ❌ 안티패턴
- **Graduation**: 매 PoC code 가 매 main 에 — 매 hardcoded debt.
- **Open-ended PoC**: 매 timebox X — 매 weeks drift.
- **No criteria**: 매 "잘 되면 좋겠다" — 매 stop condition 없음.
- **Demo-driven**: 매 PoC 가 매 polished demo 로 — 매 effort 낭비.
- **재활용 환상**: 매 "그래도 일부 reusable" — 매 거의 항상 매 false economy.
## 🧪 검증 / 중복
- Verified (Lean Startup, Pragmatic Programmer, Google SRE workbook chapter "Spike").
- 신뢰도 A.
## 🕓 Changelog
| 날짜 | 변경 |
|---|---|
| 2026-05-08 | Phase 1 |
| 2026-05-10 | Manual cleanup — PoC vs Prototype + 8 process patterns |