프롬프트 엔지니어링 — AI에게 원하는 걸 정확히 얻어내는 법
좋은 프롬프트를 쓰는 실전 기술 — 구체성·맥락·범위, 그리고 원하는 결과를 얻어내는 다섯 가지 프롬프트 기법을 정리합니다.
4편에서 아이디어를 프롬프트로 바꿔 첫 화면을 만들어봤습니다. 바이브코딩을 이어가다 보면 금방 깨닫는 사실이 하나 있습니다. 결과물의 품질은 결국 “어떻게 요청하느냐”가 가른다는 것입니다. 같은 도구, 같은 AI라도 프롬프트를 어떻게 쓰느냐에 따라 결과가 크게 달라집니다.
이 편에서는 좋은 프롬프트를 쓰는 실전 기술, 이른바 프롬프트 엔지니어링을 다룹니다. 이름은 거창하지만 핵심은 단순합니다. 유능한 동료에게 일을 잘 맡기는 법과 다르지 않습니다. 계속해서 북마크 앱을 예제로 사용합니다.
좋은 프롬프트의 세 가지 조건
좋은 프롬프트와 나쁜 프롬프트를 가르는 것은 세 가지입니다. 구체성 · 맥락 · 범위.
- 구체성 — 무엇을, 어떤 형태로 원하는지 분명히 적는다.
- 맥락 — 지금 프로젝트가 어떤 상태인지 함께 알려준다.
- 범위 — 한 번에 어디까지 할지 정한다.
| 구분 | 프롬프트 예시 | 결과 |
|---|---|---|
| 나쁜 프롬프트 | ”북마크 앱에 기능 좀 추가해줘” | 무슨 기능인지, 어떻게 생겼으면 하는지 AI가 알 수 없음 |
| 좋은 프롬프트 | 아래 기법 참고 | 무엇을·어떤 맥락에서·어디까지 할지 명확 |
이제 이 세 조건을 실제 프롬프트로 옮기는 다섯 가지 기법을 살펴봅니다.
기법 1. 한 번에 하나씩
가장 먼저 지켜야 할 원칙은 한 번에 하나씩입니다. 경험이 없으면 “태그 기능이랑 검색이랑 정렬 다 추가해줘”처럼 한꺼번에 요청하고 싶어집니다. 하지만 이 방식은 문제를 만들기 좋습니다.
| 방식 | 겉보기 | 실제 |
|---|---|---|
| 한 번에 여러 기능 | 빠를 것 같음 | 코드가 얽혀 나중에 수정하기 어렵고, 에러가 나도 원인 파악이 힘듦 |
| 하나씩 단계별 | 느릴 것 같음 | 각 단계에서 결과를 확인할 수 있고, 문제가 생기면 원인이 명확함 |
오히려 하나씩 요청하는 편이 전체 속도는 더 빠릅니다. 버그가 어디서 생겼는지 바로 알 수 있어 고치는 시간이 훨씬 줄어들기 때문입니다.
기법 2. 맥락을 구조화해서 준다
AI는 지금 프로젝트가 어떤 상태인지 자동으로 다 알지 못합니다. 그래서 요청할 때 맥락을 함께 줘야 합니다. 다음 네 부분으로 나눠 쓰면 좋습니다.
[현재 상태]
지금 북마크 앱에는 URL과 제목을 저장하고 목록으로 보여주는 기능이 있어.
데이터는 localStorage에 저장돼 있고, 각 북마크는 { id, url, title } 구조야.
[추가할 기능]
태그 기능을 추가하고 싶어. 북마크를 저장할 때 태그를 여러 개 달 수 있고,
목록에서 태그를 클릭하면 해당 태그의 북마크만 필터링되게 해줘.
[데이터 구조 변경]
기존 북마크 데이터에 tags: [] 배열을 추가해줘.
기존 데이터는 tags가 없으면 빈 배열로 처리하면 돼.
[범위 제한]
이것만 먼저 해줘. 태그 편집이나 삭제는 나중에 추가할 거야.
이렇게 현재 상태 → 원하는 것 → 데이터 변경 → 범위 제한 순서로 쓰면, AI가 기존 코드와 충돌 없이 원하는 대로 만들어줄 확률이 크게 올라갑니다. 프로젝트 구조를 CLAUDE.md에 정리해뒀다면(3편), ‘현재 상태’는 “CLAUDE.md 참고해서”라는 한 줄로 대신할 수도 있습니다.
기법 3. 원하는 형태를 예시로 보여준다
말로 설명하기 어려운 것은 예시 하나가 백 마디 말보다 낫습니다. 원하는 출력 형식이나 스타일이 분명하다면, 설명 대신 예시로 보여주세요.
삭제 버튼을 이런 형태로 바꿔줘.
- 위치: 카드 오른쪽 위 모서리
- 모양: 회색 × 아이콘, 마우스를 올리면 빨갛게
- 결과 형식을 지정할 때: “결과를 이런 표 형식으로 정리해줘”라고 하고 예시 한 줄을 붙인다.
- 기존 것과 맞추고 싶을 때: “BookmarkCard 컴포넌트와 같은 스타일로 만들어줘”처럼 참고 대상을 가리킨다.
AI는 추상적인 지시보다 구체적인 본보기를 훨씬 잘 따라옵니다.
기법 4. 모르면 되묻게 만든다
모든 걸 완벽하게 정해서 던질 필요는 없습니다. 오히려 애매한 부분은 AI가 되묻게 만드는 편이 낫습니다. 실제 사람과 협업하듯, 결정을 함께 내려가는 방식입니다.
로그인 기능을 붙이고 싶은데, 방식(이메일/소셜)이나 저장 위치는 아직 못 정했어.
선택지와 장단점을 먼저 정리해주고, 결정이 필요한 부분은 나한테 물어봐줘.
“확실하지 않은 부분이 있으면 먼저 물어봐줘.” 이 한 줄을 붙이면, AI가 임의로 결정하고 밀어붙이는 대신 확인 질문을 던집니다. 잘못된 전제 위에 코드가 쌓이는 것을 막아줍니다.
기법 5. 안 되면 끊고 방향을 다시 잡는다
AI가 엉뚱한 방향으로 가기 시작하면, 끝까지 지켜보지 말고 바로 중단시키는 게 낫습니다. 잘못된 코드가 쌓일수록 되돌리기 어렵습니다.
- 중단시키고, 무엇이 어긋났는지 짚어 교정 프롬프트를 줍니다.
방금 방향이 내 의도와 달라. 나는 X를 원했는데 너는 Y로 갔어.
X를 기준으로 다시 해줘.
- 대화가 너무 길어져 맥락이 흐트러졌다면,
/clear로 대화를 초기화하고 CLAUDE.md를 바탕으로 새로 시작하는 것도 방법입니다.
정리: 좋은 프롬프트는 좋은 위임이다
프롬프트 엔지니어링이라고 하면 뭔가 특별한 기술 같지만, 결국 일을 잘 맡기는 법입니다. 유능한 동료에게 일을 부탁한다고 생각하면 됩니다. 무엇을 원하는지 구체적으로, 지금 상황이 어떤지 맥락과 함께, 한 번에 감당할 만큼만, 애매하면 되물어가며.
이 감각이 손에 붙으면 같은 AI로도 훨씬 나은 결과를 얻게 됩니다. 프롬프트는 바이브코딩에서 가장 오래 쓰는 도구이자, 가장 크게 실력 차이가 나는 부분입니다.
다음 편에서는 로컬에서만 동작하던 앱을 인터넷에 공개하는 방법, 즉 배포를 다룹니다.