"API 문서를 정확히 보여주고, 함수 시그니처를 명확히 지정하고, 예외 처리까지 전부 설명해야 AI가 좋은 코드를 짠다"
이것이 지난 1-2년간 AI 코딩의 일반적인 접근 방식이었습니다.
그런데 Tesla AI 디렉터 Andrej Karpathy가 2024년 제시한 개념이 화제가 되고 있습니다:
"명세를 완벽하게 쓰지 말고, AI와의 협력을 '느낌'으로 진행하자"
이것이 Vibe Coding입니다.
이 글에서는 Vibe Coding이 정확히 무엇인지, 왜 효과가 있는지, 그리고 어떻게 실전에서 써먹을 수 있는지를 설명하겠습니다.
개발자: "이 함수는 사용자 리스트를 받아서,
각 사용자의 이름과 이메일만 추출하고,
이메일순으로 정렬해야 해.
만약 리스트가 비어있으면 empty array를 반환하고..."
AI: "네, 정확히 이해했습니다."
→ 개발자가 모든 것을 명시적으로 지정해야 함
개발자: "사용자 데이터를 깔끔하게 정렬한 리스트로 만들어줄 수 있을까?"
AI: [코드 제시]
개발자: "아 좋은데, 좀 더 Pythonic하게 리팩토링 해줄래?"
AI: [개선된 코드]
개발자: "완벽해!"
→ 개발자와 AI가 협력하면서 점진적으로 개선
❌ 과자세한 명세:
"사용자 객체 배열을 받아,
각 객체의 age 필드가 18 이상이면 활성 사용자,
아니면 미성년자로 분류하되,
active 필드도 확인해서..."
✅ Vibe (방향성):
"성인 사용자를 필터링해줄 수 있어?"
→ AI는 문맥과 관례를 이해합니다.
한 번에 완벽한 코드를 받으려 하지 않습니다.
1차: 기본 동작하는 코드 받기
↓
2차: "타입 힌팅 추가해"
↓
3차: "에러 처리 좀 더 robust하게"
↓
4차: "로깅 추가해"
↓
완성!
→ 한 번의 요청보다 3-4번의 작은 반복이 더 효과적
개발자: "이건 좀 복잡한데... 간단하게 줄 수 있을까?"
AI: [간단한 버전 제시]
개발자: "좋은데, 성능도 신경써줄래?"
AI: [최적화된 버전]
개발자: "오케이, 이대로 가자!"
→ 개발자와 AI가 같은 "톤"과 "목표"를 공유
명세를 완벽하게 쓰려면:
Vibe Coding:
현대 LLM의 가장 강한 능력:
→ Vibe Coding은 AI의 강점을 최대화합니다.
전통적 AI 코딩:
명세 작성: 20분
→ AI에게 정확히 설명: 10분
→ 결과물 리뷰: 5분
→ 수정 요청: 5분
= 40분
Vibe Coding:
대략적 설명: 2분
→ AI가 코드 제시: 1분
→ "더 간단하게": 1분
→ "이 부분 개선": 1분
= 5분
일반적으로 5-10배 빠름.
❌ 너무 상세하게:
"Python 함수를 작성해.
매개변수: strings (list of str)
반환값: dict with keys 'unique', 'duplicates'
unique: 중복 없는 문자열만
duplicates: 중복되는 문자열만
각 키의 값은 sorted list여야 함
..."
✅ Vibe로:
"중복 문자열을 걸러내주는 함수 만들어줄래?"
AI의 첫 응답:
def filter_strings(strings):
unique = list(set(strings))
duplicates = [s for s in strings if strings.count(s) > 1]
return {'unique': unique, 'duplicates': list(set(duplicates))}
이제 대화:
개발자: "좋은데, 중복이 3번 나타나는 것도 중복으로 칠 거야?"
AI: "네, 1번 이상 나타나면 중복으로 판단합니다."
개발자: "오케이. 그럼 결과는 sorted로 줄 수 있어?"
AI: [정렬된 버전 제시]
개발자: "이건 O(n log n) 아닐까?"
AI: "네, 정렬 때문입니다. O(n) 방식으로 할까요?"
AI: [최적화된 버전]
개발자: "완벽해! 이대로 가자."
→ 자연스러운 협력 과정
AI에게 자신의 코드베이스 스타일 알려주기:
개발자: "혹시 우리 팀의 코딩 스타일을 봤어?
[최근 코드 샘플 붙여넣기]
이 스타일로 다시 작성해줄래?"
AI: [팀 스타일에 맞춘 코드]
| 측면 | 전통적 프롬프팅 | Vibe Coding |
|---|---|---|
| 명세 길이 | 길고 상세 (500+ 단어) | 짧고 간결 (20-50 단어) |
| 첫 응답 | 거의 완벽해야 함 | 80% 정도면 OK |
| 수정 과정 | 명세 수정 → AI에 다시 설명 | 간단한 피드백 → 즉시 개선 |
| 개발 속도 | 느림 (40+ 분) | 빠름 (5-10분) |
| AI와의 관계 | "서비스 제공자" | "동료 프로그래머" |
| 코드 품질 | 명세에 정확함 | 실용적이고 자연스러움 |
| 창의성 | 낮음 (명세대로만) | 높음 (AI의 제안 활용) |
# AI가 제안한 코드가 종종 더 Pythonic하고 clean함
# 개발자가 생각하지 못한 elegant한 솔루션 제시
AI: "이렇게 하는 게 좀 더 Pythonic합니다"
개발자: "아, 그렇구나!"
→ 새로운 패턴 학습
✅ Vibe Coding 최고:
❌ Vibe Coding 위험:
→ 중요한 부분은 명세 필수
def divide_numbers(a, b):
return a / b
# 0으로 나누기 예외 처리 안 됨
# 부동소수점 정밀도 문제 등
→ 중요한 코드는 철저한 테스트 필수
한 단계의 작은 실수가 다음 단계에 영향:
1차: 약간 비효율적인 알고리즘
2차: 그걸 기반으로 개선 시도
3차: 여전히 비효율적
...
vs. 처음부터 최적 알고리즘 설명
"AI가 해주니까 나는 깊게 생각할 필요 없지?"
→ 다음에 유지보수할 때 문제 됨
❌ "정렬 함수 작성해"
✅ "사용자 데이터를 나이순으로 정렬하되,
같은 나이면 이름순으로 정렬해줄 수 있어?"
❌ "이건 별로야"
✅ "더 readable하게 리팩토링 해줄래?"
❌ "이건 느려"
✅ "시간복잡도를 O(n)으로 줄일 수 있을까?"
단순한 부분:
"리스트를 오름차순으로 정렬해줄래?" → Vibe OK
복잡한 부분:
"고객 결제 프로세스 작성" → 명세 필요
개발자 방식:
"내가 원하는 대로만 해주면 돼"
Vibe Coding 방식:
"나는 이렇게 생각했는데, 너는 어떻게 할 건데?"
AI: [다양한 접근 제시]
개발자: "오, 이 방식도 좋네!"
→ 더 나은 코드 발견
FastAPI 애플리케이션에서 사용자 API 엔드포인트를 만들어야 함
1차 (아주 느슨하게)
개발자: "FastAPI로 사용자 조회 엔드포인트 만들어줄 수 있어?"
AI: [기본적인 CRUD 엔드포인트 제시]
2차 (구체화)
개발자: "좋은데, 에러 핸들링을 좀 더 robust하게 해줄래?"
AI: [예외 처리 추가]
3차 (최적화)
개발자: "데이터베이스 쿼리가 N+1 문제 생길까?"
AI: "그렇네요. eager loading으로 수정할까요?"
AI: [최적화된 버전]
4차 (완성)
개발자: "로깅은 어떻게 할까?"
AI: [로깅 추가된 최종 버전]
개발자: "완벽해!"
→ 전체 과정 10-15분
AI가 점점 더 개발자의 의도를 정확히 파악
"더 간단하게"의 의미를 완벽히 이해
VS Code, PyCharm 내에서 실시간으로
AI와 Vibe Coding 진행
여러 개발자가 같은 AI와 협력할 때
팀의 코딩 스타일 자동 학습
TypeScript, Rust 등에서 Vibe Coding 사용 시
타입 체크로 자동 검증
"AI가 짜니까 내가 이해 안 해도 돼" → 명확히 이해하고 테스트해야 함
"완벽한 테스트 없어도 돼" → 프로덕션 코드는 반드시 테스트 필수
"코드가 자명하니까 문서는 필요 없어" → 팀원을 위해 문서는 필수
Vibe Coding은 단순히 "AI에게 덜 자세히 설명하는 것"이 아닙니다.
이것은:
2026년 AI 시대의 효과적인 개발 방식입니다.
당신이 지금 할 일:
그러면 당신의 개발 속도는 5-10배 향상될 것입니다.
더 배우기: