처음에는 “블로그 글 써줘”라고만 했는데
제 첫 프롬프트를 공개할게요. 부끄럽지만요.

"WordPress에 글을 자동으로 발행하는 코드 만들어줘"
결과는 처참했어요. AI가 준 코드는 requests 라이브러리로 WordPress REST API를 호출하는 기본 코드였는데, 인증 처리가 없어서 401 에러, 에러 핸들링이 없어서 뭐가 잘못됐는지도 모르고, 그냥 안 됐어요. “AI가 코딩을 해준다며? 왜 안 돼?” 하면서 한 시간을 버렸습니다.
그 뒤로 3개월 동안, 수십 번의 시행착오를 거치면서 깨달은 게 있어요. AI 코딩의 품질은 코딩 실력이 아니라 프롬프트 품질이 결정한다는 거예요. 같은 Claude Code를 써도 어떤 사람은 30분 만에 웹앱을 완성하고, 어떤 사람은 하루 종일 삽질하는 이유가 여기에 있었어요.
프롬프트를 망치는 5가지 패턴 (제가 다 해봤습니다)
제가 실제로 범한 실수들이에요. 하나씩 고쳐가면서 결과가 눈에 띄게 좋아졌어요.
기술 스택을 안 쓰는 것
나쁜 예: "로그인 페이지 만들어줘"
좋은 예: "React + TypeScript + Tailwind CSS로 로그인 페이지를 만들어줘"
기술 스택을 안 쓰면 AI가 알아서 선택해요. 근데 그 선택이 내 프로젝트랑 안 맞는 경우가 태반이에요. 저는 처음에 이것 때문에 세 번이나 처음부터 다시 만들었어요. React 프로젝트에 Vue 코드를 받아서 섞이고 난리가 났거든요.
기능을 뭉뚱그려 말하는 것
나쁜 예: "사용자 관리 기능 만들어줘"
좋은 예:
"사용자 관리 기능을 만들어줘.
- 회원가입: 이메일 + 비밀번호 (최소 8자, 영문+숫자)
- 로그인: JWT 토큰 발급
- 프로필 수정: 닉네임, 프로필 사진 변경
- 회원 탈퇴: 소프트 삭제 (DB에서 바로 삭제 안 함)"
“사용자 관리”라고만 하면 AI는 가장 단순한 CRUD만 만들어줘요. 내가 원하는 세부 기능은 내가 말해줘야 해요.
제약 조건을 빼먹는 것
도구별 런타임·버전·허용 라이브러리 같은 제약을 프롬프트에 적는 것은 중요합니다. 다만 초판처럼 “n8n은 최신 JavaScript 문법을 지원하지 않는다”고 일반화하지 말고, 현재 인스턴스에서 확인한 제약만 적으세요.
"현재 n8n 버전과 Code 노드 실행 모드는 다음과 같아: [버전/모드].\n이 환경에서 실행되는 코드만 작성하고, 사용한 API와 문법의 전제조건을 설명해줘."
좋은 제약은 확인 가능한 환경 정보와 실패 조건을 포함합니다. 금지 목록을 추측해서 늘리는 대신 오류 로그와 최소 재현 예제를 함께 제공하세요.
예시를 안 주는 것
API 응답을 파싱하는 코드를 요청할 때, 실제 응답 예시를 같이 주면 결과가 완전히 달라져요.
"아래 JSON 응답을 파싱해서 제목과 날짜만 추출해줘.
예시 응답:
{
"data": [
{"title": "AI 뉴스 요약", "date": "2026-03-28", "status": "publish"},
{"title": "n8n 가이드", "date": "2026-03-27", "status": "draft"}
]
}
원하는 출력: [{title: "AI 뉴스 요약", date: "2026-03-28"}]"
입력과 출력 예시를 모두 주면 AI가 정확히 뭘 해야 하는지 이해해요.
한 번에 전부 요청하는 것
“쇼핑몰 전체를 만들어줘”보다는 이렇게 나눠서 요청하는 게 훨씬 나아요:
1단계: "상품 목록 페이지를 만들어줘"
2단계: "상품 상세 페이지를 추가해줘"
3단계: "장바구니 기능을 추가해줘"
4단계: "결제 페이지를 만들어줘"
각 단계가 완료될 때마다 확인하고, 문제가 있으면 바로 수정한 다음 넘어가는 거예요. 한 번에 전부 만들면, 뭐가 잘못됐는지 찾는 데만 더 오래 걸려요.
실전 템플릿: 복사해서 바로 쓰세요
새 프로젝트 시작할 때
[프로젝트명]을 만들어줘.
## 기술 스택
- 프론트엔드: [React/Vue/Svelte] + [Tailwind/CSS Modules]
- 언어: [TypeScript/JavaScript]
- 상태 관리: [없음/Zustand/Redux]
## 핵심 기능
1. [기능 1 상세 설명]
2. [기능 2 상세 설명]
3. [기능 3 상세 설명]
## 제약 조건
- [사용하면 안 되는 라이브러리]
- [성능 요구사항]
- [반응형 필수 여부]
## 디자인
- [다크/라이트 테마]
- [주요 컬러]
- [참고 사이트 URL]
버그 잡을 때
아래 에러를 수정해줘.
## 에러 메시지
[에러 메시지 전체를 복붙]
## 관련 코드
[에러가 발생하는 파일/함수]
## 기대 동작
[원래 이렇게 되어야 하는데]
## 실제 동작
[실제로는 이렇게 됨]
에러 메시지를 “대충 이런 에러가 났어”라고 요약하지 마세요. 전체를 복붙하는 게 훨씬 정확한 수정을 받아요.
제 실패담: WordPress 자동 발행 프롬프트의 진화
이 블로그(therearenorules.co.kr)의 자동 발행 코드를 만들 때 겪은 일이에요.
1차 시도: “WordPress에 글을 자동으로 발행하는 코드 만들어줘”
결과: requests 라이브러리 기반 기본 코드. 인증 없음, 에러 처리 없음. 당연히 안 됨.
2차 시도: “WordPress REST API로 글 발행하는 Python 코드. 인증 포함해줘.”
결과: 인증은 있지만 한글 제목이 깨지고 카테고리 설정이 빠짐.
3차 시도 (드디어 성공):
"WordPress REST API로 글을 발행하는 Python 코드를 만들어줘.
- urllib만 사용 (requests 없이)
- Application Password 인증 (Base64)
- 제목, 본문(HTML), 카테고리 ID, 발행 상태 설정
- 한글 인코딩 처리 (UTF-8)
- HTTP 에러 시 상세 에러 메시지 출력
- Rank Math SEO 메타 데이터도 함께 전송"
1차에서 3차까지의 차이가 보이시나요? 같은 목표인데 프롬프트의 구체성이 완전히 다릅니다. 이 경험이 제게 “프롬프트에 30초 더 투자하면 디버깅 3시간을 아낀다”는 교훈을 줬어요.
AI 도구마다 프롬프트 스타일이 다르다
이건 제가 Claude Code, Cursor, Gemini를 다 써보면서 느낀 건데, 도구마다 잘 먹히는 프롬프트 스타일이 좀 달라요.
Claude Code (터미널): CLAUDE.md 파일에 프로젝트 컨텍스트를 미리 적어두면 매번 반복 설명할 필요가 없어요. 제 블로그 프로젝트에는 “n8n Code 노드 제약사항”, “WordPress REST API 인증 방식”, “브랜드 톤” 같은 걸 다 적어뒀어요. 그래서 매번 “n8n에서는 arrow function 쓰면 안 돼”라고 안 해도 알아서 지켜줘요.
Cursor: 코드 에디터 안에서 동작하니까 “이 파일을 수정해줘” 같은 파일 기반 요청이 효과적이에요. 전체 프로젝트 구조를 잘 이해하고 있어서, “이 컴포넌트랑 같은 스타일로 새 컴포넌트 만들어줘”가 잘 먹혀요.
Gemini: 무료 티어에서도 코딩을 꽤 잘 해요. 다만 긴 코드 생성에서는 중간에 끊기거나 반복하는 경우가 있어서, “200줄 이내로 작성해줘” 같은 길이 제약을 주면 안정적이에요. 저는 Gemini를 n8n 자동화 글 생성에 쓰고 있는데, temperature 0.7이 가장 결과가 좋았어요.
고급 전략: 멀티 턴으로 품질 올리기
한 번의 프롬프트로 원하는 결과를 받는 건 사실 힘들어요. 특히 복잡한 기능일수록요. 그래서 저는 이런 전략을 씁니다.
점진적 확장: 기본 기능부터 만들고, “여기에 X 기능을 추가해줘”를 반복해요. 처음부터 10개 기능을 다 넣으려고 하면 AI도 사람도 혼란스러워요.
역할 부여: “당신은 10년차 시니어 React 개발자입니다”라고 시작하면 코드 품질이 올라가요. 특히 아키텍처나 설계 관련 질문에서 차이가 커요.
생각의 체인: “바로 코드를 작성하지 말고, 먼저 이 기능을 구현하기 위한 단계를 정리해줘. 그 다음에 각 단계별로 코드를 작성해줘.” 이 한 마디를 추가하면 AI가 계획을 세운 다음 코드를 짜서, 빠뜨리는 게 줄어들어요.
마치며
프롬프트 엔지니어링은 거창한 게 아니에요. “AI에게 내가 뭘 원하는지 정확하게 전달하는 연습”이에요. 전통 코딩에서 Python 문법을 배우듯이, AI 코딩에서는 프롬프트 작성법을 연습하는 거예요.
오늘 소개한 걸 한 줄로 요약하면: 기술 스택 + 기능 목록 + 제약 조건 + 예시 + 단계별 요청. 이 다섯 가지를 프롬프트에 넣으면, AI가 주는 결과의 품질이 확 달라져요.
실패할 때마다 “내 프롬프트에서 뭐가 빠졌지?”를 생각해보세요. 저도 아직 매일 프롬프트를 다듬고 있어요. AI 코딩 입문 가이드를 아직 안 읽었다면 그것부터 시작하는 것도 좋겠습니다.