개요
15년차 CTO 경험에서 AI 시대 코드 리뷰 담론을 정-반-합으로 정리한 에세이. AI가 코드 생산량을 폭증시켰지만 리뷰 역량은 그대로 → 병목이 더 커짐. 결론: 코드 리뷰 → 의도 리뷰(Intent Review)로 전환, 신뢰는 5겹 레이어로 쌓고, AI 네이티브 엔지니어는 이전 시대 PM 역할을 스스로 해야 한다. 핵심 질문: “당신은 당신의 코드에 책임을 질 수 있는가?”
- 출처: flowkater.io
- 저자: 15년차 CTO
- 방법론: 헤겔 변증법 (정-반-합)
문제 진단
이전부터 늘 문제:
✗ 시간 부족
✗ 사람 부족
✗ 프로세스 부족
AI 시대에 더 악화:
AI 코드 생산량 폭증
+ 리뷰 역량은 그대로
= 병목 폭증 ⚠️
→ 관련: 코드베이스 드래그 (Codebase Drag) (생산은 늘었지만 검증은 그대로)
정 (正) — 인간 리뷰 필수론
Simon Willison
“검토하지 않은 코드를 협업자에게 떠넘기지 마라”
→ AI가 만들었어도 PR 올리는 사람이 책임
Kent Beck
“생성 비용이 0에 가까워질수록, 가치는 생성이 아니라 검증으로 이동한다”
과거: 코드 작성이 핵심 가치
미래: 검증·신뢰 부여가 핵심 가치
Addy Osmani
“미해결 문제는 생성이 아니라 검증”
→ AI가 만들 줄 ❌, 누가 믿어도 될지 ✅
핵심 논리
AI가 아무리 잘 만들어도
↓
책임은 사람에게 있음
↓
책임지려면 검증해야 함
↓
검증하려면 리뷰해야 함
→ 인간 리뷰는 영원히 필수
반 (反) — 사람 리뷰 시대 종료론
Bryan Finster — 나이퀴스트-섀넌 정리
신호 처리 정리 적용:
생산 주파수 ↑↑↑
+ 피드백 주파수 그대로
= 체계적으로 놓침 ⚠️
→ 인간 리뷰는 수학적으로 따라잡을 수 없음
SmartBear 데이터
경험적 결함 감지율:
400줄 미만: 정상 감지
400줄 초과: 급락 ↓↓↓
AI 한 번 호출:
600줄+ 생성
→ 인간 리뷰 능력 자체가 한계 초과
StrongDM “소프트웨어 팩토리”
완전히 다른 방식:
✗ 인간이 코드 안 쓰고 안 읽음
✓ 의도(Intent) 정의
✓ 시나리오 큐레이션
→ 코드는 부산물, 의도와 시나리오가 진실
Stanford CodeX
"에이전트가 만들고 테스트하면,
누가 믿을 수 있는가?"
→ 자기 검증의 신뢰성 문제
Salesforce Prizm
diff 중심 리뷰 모델 자체가 AI 시대에 작동 안 함
↓
"무엇이 바뀌었나?"보다
"왜 그렇게 바꿨나?"가 중요
↓
의도 재구성으로 전환
합 (合) — 무엇을 리뷰해야 하는가
latent.space의 패러다임 전환
이전: 코드 리뷰 (Code Review)
미래: 의도 리뷰 (Intent Review) ⭐
스펙 = 진실의 원천 (source of truth)
코드 = 산출물 (artifact)
신뢰의 5겹 레이어 (스위스 치즈 모델)
하나의 검증으로는 부족 → 여러 겹으로 쌓기
Layer 1: 의도 (Intent) — 명확한 스펙 작성
Layer 2: 자동 검증 (Tests) — 시나리오 기반
Layer 3: 정적 분석 (Linter, Type Check)
Layer 4: AI 검증 (Qodo 같은 전문가 에이전트)
Layer 5: 인간 검증 (블로킹은 부족 지식 + 규제 경로만)
→ 한 겹이 뚫려도 다른 겹이 막음
Qodo 패턴
| 원칙 | 내용 |
|---|---|
| 컨텍스트 우선 | 변경 자체가 아니라 컨텍스트로 판단 |
| 심각도 기반 | 모든 이슈 동등 ❌, 우선순위 ✅ |
| 전문가 에이전트 | 보안·성능·접근성 등 도메인별 |
→ 관련: CodeRabbit (AI 코드 리뷰 도구)
Bryan Finster — 인간 블로킹은 두 가지뿐
인간이 반드시 리뷰해야 하는 경우:
1. 부족 지식 (Domain Knowledge Gap)
→ AI가 모르는 도메인 맥락이 필요할 때
2. 규제 경로 (Compliance Path)
→ 법적·규제적 책임이 명시된 영역
그 외 모든 것:
→ AI 자동 검증으로 충분
저자의 결론
”AI 코드를 직접 리뷰하지 않는다”
저자 본인의 전환:
이전: 모든 PR 코드 리뷰
지금: AI가 코드 생성·1차 검증
↓
저자는 QA 역할
↓
"이게 의도대로 작동하는가?"만 확인
→ 코드 리뷰어 → QA 시나리오 검증자
AI 네이티브 엔지니어 = 이전 시대 PM 역할
과거 분업:
PM: 의도·스펙 정의
엔지니어: 코드 작성
AI 시대 통합:
엔지니어 = PM + 큐레이터 + QA
✓ 의도 명확화
✓ 시나리오 설계
✓ AI 결과 검증
✓ 책임 부여
핵심 질문
“당신은 당신의 코드에 책임을 질 수 있는가?”
이 질문에 "Yes"라고 답할 수 있다면:
→ AI를 어떻게 쓰든 상관없음
"No"라고 답해야 한다면:
→ 검증·이해 단계로 돌아가야 함
한 표로 보는 패러다임 변화
| 항목 | 과거 (Code Review) | AI 시대 (Intent Review) |
|---|---|---|
| 진실의 원천 | 코드 | 스펙 / 의도 |
| 리뷰 대상 | diff (변경된 줄) | 의도, 시나리오, 결과 |
| 리뷰어 | 사람 (시니어) | AI 1차 + 사람 2차 (블로커만) |
| 블로킹 | 모든 이슈 | 부족 지식 + 규제만 |
| 단위 | PR 단위 | 스펙 → 결과 변환 단위 |
| 엔지니어 역할 | 코드 작성·검토 | 의도 정의 + QA 검증 |
| 책임 | 작성자 | 여전히 작성자 (책임은 안 변함) |
vault의 기존 메시지와 일치
| 노트 | 메시지 |
|---|---|
| AI 시대 실행 비용 붕괴 | ”작동은 잘 함, 학습은 안 됨” |
| 코드베이스 드래그 (Codebase Drag) | 생산보다 코드 품질이 사람보다 중요 |
| AI 시대에도 프로그래밍을 배워야 하는가 | ”코드 안 쓰면 읽을 수도 없다” (마법사의 제자) |
| Oh My Codex & 에이전트 스웜 | ”AI Slop = 스킬 이슈” + Slop Cleaner |
| 코딩 에이전트 하니스 & Hashline | 모델보다 하니스가 병목 |
| AI 논문 생산 논란 | ”사나흘 논문, 깊은 이해는?” |
→ 공통: “AI가 만든다 ≠ 책임이 사라진다”
실무 적용 체크리스트
팀 차원
□ 스펙 → 코드 변환 단위로 작업 분해
□ 시나리오 기반 자동 테스트 우선
□ AI 코드 리뷰 도구 도입 (CodeRabbit, Qodo 등)
□ 인간 리뷰는 "부족 지식 + 규제"로 한정
□ "diff 리뷰" 문화 → "의도 리뷰" 문화로 전환
개인 차원
□ AI에게 코드 시키기 전 의도 명확화
□ AI 결과를 1차 자동 검증 (테스트, 린트)
□ "왜 이렇게 짰나?" 설명 가능해야
□ "내가 이 코드에 책임질 수 있나?" 자문
□ 책임 못 지는 영역은 AI 위임 ❌
위험: AI 시대 코드 리뷰 안티패턴
❌ "AI가 만들었으니 어차피 좋겠지" (검증 없이 머지)
❌ "PR 너무 크니까 대충 보자" (리뷰 자체가 무의미)
❌ "AI가 리뷰했으니 사람 리뷰 생략" (자기 검증 신뢰성 ❌)
❌ "스펙은 나중에" (코드부터 짜고 의도는 사후 합리화)
❌ "책임은 AI가 진다" (법적·도덕적으로 불가능)
결론
AI 시대 코드 리뷰의 본질:
"코드를 보지 마라, 의도와 결과를 봐라"
"diff에 갇히지 마라, 시스템을 봐라"
"인간 리뷰의 자원을 부족 지식 + 규제에 집중하라"
"책임은 절대 AI에게 위임할 수 없다"