🎯 학습 목표
- 좋은 프롬프트와 나쁜 프롬프트의 차이를 구체적으로 구분한다.
- AI가 만든 코드를 검증하는 체계적 방법을 익힌다.
- ‘코드 소유권’ 개념과 책임 있는 사용 자세를 이해한다.
- 장기적으로 유지보수 가능한 결과물을 만드는 습관을 세운다.
📖 개념 설명
Vibe Coding이 익숙해지면 빠른 속도에 취해 검증을 소홀히 하기 쉽습니다. 그러나 AI가 만든 코드라도 최종 책임은 개발자에게 있습니다. 이것이 ‘코드 소유권’의 핵심입니다. 내가 이해하지 못하는 코드를 그대로 배포하는 것은 위험합니다.
좋은 프롬프트는 맥락, 제약, 완성 기준을 담고 있고, 나쁜 프롬프트는 모호하고 한 번에 너무 많은 것을 요구합니다. 또한 좋은 프롬프트는 “왜”를 설명하게 하고, 나쁜 프롬프트는 결과만 받고 끝냅니다. AI를 잘 쓰는 사람은 결국 질문을 잘하는 사람입니다.
검증은 세 층위로 이뤄집니다. 첫째, 코드를 직접 읽고 이해합니다. 둘째, 실제로 실행해 기대대로 동작하는지 확인합니다. 셋째, 가능하면 테스트를 작성해 자동으로 검증합니다. “동작하는 것처럼 보인다”와 “검증되었다”는 다릅니다.
AI가 만든 코드에서 특히 경계해야 할 함정이 몇 가지 있습니다. 첫째는 ‘그럴듯하지만 틀린’ 코드입니다. AI는 자신감 있게 코드를 제시하지만, 드물게 존재하지 않는 함수를 호출하거나 미묘하게 잘못된 로직을 만들 수 있습니다. 이를 잡아내는 유일한 방법은 사람이 읽고 실행해 확인하는 것입니다. 둘째는 ‘과한 일반화’입니다. 단순한 요구에도 불필요하게 복잡한 추상화를 더하는 경우가 있는데, 이럴 때는 “더 단순하게 만들어줘”라고 분명히 요구해야 합니다.
코드 소유권이라는 개념을 조금 더 풀어 봅시다. 내 이름으로 배포되는 코드, 내 서비스에서 도는 코드의 책임은 전적으로 나에게 있습니다. AI는 도구일 뿐, 책임의 주체가 아닙니다. 따라서 “AI가 그렇게 만들어서요”는 변명이 될 수 없습니다. 이 책임감을 가지면 자연스럽게 코드를 읽고 이해하려는 태도가 생기고, 그 과정에서 실력도 함께 자랍니다. 역설적으로, AI를 잘 쓰는 사람일수록 코드를 더 깊이 이해하려고 노력합니다.
좋은 프롬프트의 또 다른 특징은 ‘검증 기준을 함께 제시한다’는 점입니다. “로그인 기능 만들어줘”가 아니라 “잘못된 비밀번호면 401을 반환해야 한다”처럼 기대 동작을 명시하면, AI가 스스로 그 기준을 충족하는지 점검할 수 있고 사람도 검증이 쉬워집니다. 결국 Vibe Coding의 품질은 ‘얼마나 구체적으로 요구하고, 얼마나 성실히 검증하는가’에 달려 있습니다.
💻 실습
나쁜 프롬프트를 좋은 프롬프트로 바꾸는 연습을 합니다.
# 나쁜 예
> 로그인 기능 만들어줘
# 좋은 예
> 이메일/비밀번호 기반 로그인 기능을 만들어줘.
> - 백엔드는 기존 Express 서버(server/index.js)에 추가
> - 비밀번호는 bcrypt로 해시 저장
> - 성공 시 JWT 토큰 반환, 실패 시 401
> - 구현 후 어떻게 테스트하는지도 알려줘
AI가 만든 코드를 검증하도록 요청합니다.
> 방금 만든 로그인 코드를 내가 이해할 수 있게 한 줄씩 설명해줘.
> 그리고 보안상 위험한 부분이 있으면 지적해줘.
가능하면 테스트 작성까지 요청해 자동 검증 기반을 만듭니다.
// 예: Claude에게 요청해 받은 간단한 테스트
test('잘못된 비밀번호는 401을 반환한다', async () => {
const res = await request(app)
.post('/api/login')
.send({ email: 'a@b.com', password: 'wrong' });
expect(res.status).toBe(401);
});
⚠️ Windows 환경 주의사항
- 테스트 실행 시 경로 관련 차이가 있을 수 있습니다. 경로는
path.join으로 조합하도록 요청하면 OS 차이를 흡수합니다. - 환경 변수(JWT 시크릿 등)는
.env파일로 관리하고, PowerShell에서 임시로는$env:JWT_SECRET="값"으로 설정할 수 있습니다. .env파일은 반드시.gitignore에 추가해 비밀이 커밋되지 않게 하세요.
💡 팁
- “내가 이해할 수 있게 설명해줘”는 코드 소유권을 지키는 가장 쉬운 습관입니다.
- 중요한 로직은 항상 테스트를 함께 요청하세요. 미래의 안전망이 됩니다.
- 보안·결제·인증 코드는 특히 사람이 두 번 검토하세요.
- 이해 안 되는 코드는 배포 전에 반드시 질문으로 풀고 넘어가세요.
- 한 번에 너무 많은 것을 요구하지 말고, 작은 단위로 요청해 검증 가능성을 유지하세요.
- “더 단순하게 만들 수 있을까?”는 과도한 복잡성을 걷어내는 강력한 질문입니다.
- AI의 설명을 들은 뒤 자기 말로 다시 요약해 보면, 진짜 이해했는지 스스로 점검할 수 있습니다.
- 핵심 로직에는 테스트를 함께 만들어 두면, 이후 AI가 코드를 바꿔도 회귀를 자동으로 잡아낼 수 있습니다.