//
바이브 코딩 너머 개발자 생존법 · 애디 오스마니
프롬프트의 품질이 AI 코드 생성의 품질을 결정한다. 저자는 좋은 프롬프트가 갖추어야 할 네 가지 요소를 제시한다.
| 요소 | 설명 | 예시 |
|---|---|---|
| 사용 언어 | 프로그래밍 언어와 프레임워크 명시 | "TypeScript + Next.js App Router" |
| 결과 범위 | 기대하는 출력의 범위와 형태 | "단일 함수", "전체 컴포넌트" |
| 제약조건 | 성능, 호환성, 스타일 등의 제한 | "외부 의존성 없이", "접근성 준수" |
| 출력 형식 | 응답의 구조와 형식 | "코드만", "주석 포함", "단계별 설명" |
모호한 프롬프트는 모호한 결과를 낳는다. "로그인 기능 만들어 줘"와 "Next.js App Router에서 NextAuth.js를 사용한 OAuth 2.0 기반 Google 로그인 구현. 세션은 JWT로 관리하고 미들웨어로 보호된 라우트를 설정해 줘"는 완전히 다른 결과를 만든다.
프롬프트 작성은 일회성이 아니라 반복적인 과정이다. 저자는 이를 대화형 정제(Conversational Refinement) 라고 부른다.
핵심은 AI의 첫 번째 응답을 최종 결과로 받아들이지 않는 것이다. 첫 응답에서 부족한 부분을 식별하고, 구체적인 피드백을 통해 점진적으로 원하는 결과에 도달한다. 이 과정에서 AI의 해석 방식을 관찰하면 이후 프롬프트 작성 능력도 함께 향상된다.
저자는 다양한 프롬프트 기법을 소개하며, 각 기법의 적합한 사용 시나리오를 함께 설명한다.
예시 없이 작업 지시만으로 결과를 요청하는 방식이다. 모델의 사전 학습된 지식에 전적으로 의존한다. 단순하고 보편적인 작업에 적합하며, 복잡하거나 특수한 패턴이 필요한 경우에는 부족할 수 있다.
하나 또는 소수의 예시를 함께 제공하는 방식이다. 특정 코딩 스타일이나 패턴을 따르게 할 때 효과적이다. 팀의 코딩 컨벤션에 맞는 코드를 생성하려면 기존 코드 예시를 함께 제공하는 것이 좋다.
다음 패턴을 따라 새로운 API 라우트를 작성해 줘:
[기존 라우트 예시]
위와 동일한 에러 처리 패턴과 응답 형식으로 /api/users 라우트를 구현해 줘.
AI에게 단계별로 사고 과정을 거치도록 유도하는 기법이다. "단계별로 생각해 봐"라는 간단한 지시만으로도 복잡한 로직의 정확도가 크게 향상된다. 알고리즘 설계, 디버깅, 아키텍처 의사결정 등 추론이 필요한 작업에서 특히 유용하다.
AI에게 특정 역할을 부여하여 해당 관점에서 응답하도록 유도한다. "시니어 보안 엔지니어로서 이 코드를 리뷰해 줘"와 같이 전문가의 관점을 빌려올 수 있다. 역할에 따라 AI가 주목하는 측면이 달라지므로, 코드 리뷰나 설계 검토 시 여러 역할을 순차적으로 적용하면 다각적인 피드백을 얻을 수 있다.
프로젝트의 맥락 정보를 명시적으로 제공하는 방식이다. 기술 스택, 디렉토리 구조, 기존 코드 패턴, 비즈니스 규칙 등을 미리 알려주면 AI가 해당 맥락에 맞는 코드를 생성한다. 시스템 프롬프트나 커스텀 인스트럭션을 활용하면 매번 반복하지 않아도 된다.
AI에게 프롬프트 자체를 개선하도록 요청하는 기법이다. "이 작업을 위한 최적의 프롬프트를 제안해 줘"와 같이 AI의 능력을 프롬프트 설계에 활용한다. 자신의 프롬프트가 부족하다고 느낄 때 특히 유용하다.
동일한 프롬프트로 여러 번 응답을 생성한 뒤, 가장 일관된 결과를 선택하는 방식이다. 다수결 투표와 유사한 원리로, 단일 응답보다 신뢰도가 높은 결과를 얻을 수 있다. 다만 비용이 배수로 증가하므로 중요한 의사결정에 선택적으로 사용해야 한다.
추론과 행동을 번갈아 수행하는 패턴이다. AI가 먼저 현재 상황을 분석(추론)하고, 다음 행동을 결정하고, 그 결과를 관찰한 뒤 다시 추론하는 루프를 반복한다. 에이전트 시스템의 기반이 되는 패턴으로, 복잡한 디버깅이나 다단계 리팩터링에서 효과적이다.
프롬프트 기법은 하나만 사용할 필요가 없다. 실무에서는 역할 프롬프팅으로 시작해 컨텍스트를 제공하고, 체인 오브 소트로 추론을 유도하는 식으로 여러 기법을 조합하는 것이 가장 효과적이다.
프롬프트 작성은 AI 보조 개발의 기초 체력이다. 구체적이고 명확한 지시, 반복적인 정제, 그리고 상황에 맞는 기법의 조합이 결과의 질을 결정한다. 저자는 이를 단순한 테크닉이 아닌, 개발자가 새롭게 익혀야 할 핵심 역량으로 위치시킨다.