f8b21af4be
10_Wiki/Topics 대규모 정리: - 오류 캡처/미완성 stub 문서 227개 제거 - 교차폴더 중복 43클러스터 병합 (63파일 → redirect) - 링크명 정규화: 깨진 링크 수정·redirect 직결·개념 매핑 ~2,400건 - 카테고리 MOC 6개 신규 생성 - Graph 섹션 미해결 related-keyword 링크 10,058건 제거 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
217 lines
7.3 KiB
Markdown
217 lines
7.3 KiB
Markdown
---
|
||
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. 매 1–3 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 (1–3 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 |
|