여태 설명했던 내용의 레포지터리
프롬프트를 “명세서”처럼 쓰되, MCP · Rules · 문서화를 곁들이면 품질·속도·재현성이 동시에 올라갑니다.
프롬프트는 결국 요구사항 정의서(Requirements) 입니다. 모델은 우리가 암묵적으로 공유하는 전제를 모릅니다. 그래서 다음 문제가 쉽게 터집니다.
즉, 정확하고 충분한 프롬프트 = 좋은 명세서입니다. 결과물의 정확도, 예측 가능성, 재현성까지 같이 올라갑니다.
아래 7가지만 담아도 대부분의 삽질이 사라집니다.
팁: “비목적(Non-Goals)”을 짧게 적어 범위를 고정하세요.
체크리스트
나쁜 예 → 좋은 예
id:int,name:string,age:int {"id":1,"name":"A","age":20} (줄 단위) cmd/csv2json/main.go 단일 파일, 주석·간단 벤치 포함 [Role]
당신은 {언어/런타임/분야}의 시니어 엔지니어다.
[Task]
{무엇을, 왜, 어디에 쓰기 위해} {어떻게} 구현하라.
[Environment]
- 언어/런타임/프레임워크: {예: Node.js 22 / TS ES2024}
- 대상 OS/플랫폼: {예: Linux x86_64, Alpine}
- 빌드/런 명령: {예: pnpm build && pnpm start}
[I/O Contract]
- 입력: {형식/스키마/예시}
- 출력: {형식/스키마/예시}
[Constraints]
- 성능: {예: p95 < 50ms, 메모리 < 200MB}
- 보안/금지: {예: 외부 네트워크 호출 금지}
- 코딩 규칙: {예: ESLint + Prettier, 에러 핸들러 패턴}
[Tests]
- 필수 테스트 케이스 나열 + 예제/반례
[Deliverable Format]
- 파일 구조/이름, 주석, README 포함 여부
- 오직 최종 코드만 Markdown 코드블록으로 출력
[Non-Goals]
- 이번 범위에 포함되지 않는 것들
요약: MCP는 모델이 외부 도구/데이터에 안전하고 표준화된 방식으로 접근하게 하는 프로토콜입니다.
팁: 읽기 전용부터 붙이고, 쓰기 권한은 점진적으로. 각 도구에 쿼터/레이트리밋을 걸어 비용 폭주를 막으세요.
Rules는 “모델이 항상 따라야 할 프로젝트 규칙”을 자동 컨텍스트로 주입합니다.
설계 원칙
문서 최소 세트
/README.md: 시스템 개요·빠른 시작·폴더 맵 /docs/architecture.md: 컨텍스트/데이터 흐름/경계 /docs/decisions/ADR-YYYYMMDD-*.md: 의사결정과 대안 /docs/rules/**/*.md: 코딩/리뷰/배포/보안 규칙(= Cursor Rules 원문) /docs/runbooks/*.md: 장애 대응·온콜 가이드 /CONTRIBUTING.md: 브랜치·커밋·PR·CI 규칙운영 팁: 문서가 바뀌면 Rules도 같이 업데이트(또는 링크). CI에서 “문서-룰 드리프트” 감시 훅을 걸어두면 좋아요.
/docs/feature/<id>/spec.md 초안 → 팀 합의 → ADR 등록 /docs/rules/ 갱신, 경로별 첨부 범위 조정 [Role] 당신은 Node.js 22 + TS ES2024 환경의 시니어 백엔드 엔지니어다.
프로젝트 규칙은 /docs/rules/backend.md, 에러 규약은 /docs/rules/errors.md 를 따른다.
[Task] Redis 캐시 미스 시 MySQL(읽기 전용) 조회 후 setex(600s)로 저장하는
'getUserProfile(userId: string): Promise<UserProfile>' 구현.
[Environment]
- 런타임: Node.js 22 (pnpm)
- MCP: mysql-readonly(스키마: users), redis(default)
- 외부 네트워크 호출 금지, 비동기 함수만 사용
[I/O Contract]
- 입력: userId(string, UUID v4)
- 출력: { id, name, joinedAt, … } (JSON 직렬화 가능 타입만)
- 에러: 미존재 → NotFoundError(status 404, 규약 준수)
[Constraints]
- p95 < 30ms(캐시 히트), 미스 시 p95 < 120ms
- Redis 키: user:profile:{id}, TTL 600s
- 로깅: info(캐시미스), warn(DB 에러), PII 마스킹
[Tests]
- 존재/미존재/TTL 만료/Redis 장애(폴백) 케이스
- 1만 요청 시 캐시 히트율 95% 시나리오
[Deliverable Format]
- 단일 파일 src/services/user-profile.service.ts
- JSDoc + 간단 벤치 주석
- 코드만 Markdown 코드블록으로 출력
완벽한 프롬프트를 손으로 쓰려면, 사실상 요구정의·설계·테스트 기획까지 하게 됩니다. 아래 루틴으로 사양 확정과 프롬프트 작성을 AI에게 위임해 보세요.
1) 목표/제약/성공 기준을 자연어로 던진다.
2) AI의 확인 질문에 답하며 빈칸을 채운다.
3) I/O·에러 규약, 성능·보안 한도를 수치화한다.
[역할] 너는 시니어 {스택/버전} 엔지니어이자 프롬프트 설계자야.
[목표] 아래 요구를 바탕으로 개발 작업용 “최종 프롬프트”를 작성해.
[포함 규칙]
- Role/Task/Environment/I-O/Constraints/Tests/Deliverables/Non-Goals 모두 포함
- 수치화된 성공 기준과 금지사항 포함
- 파일 경로·런 명령·린트/포맷·로그/에러 규약 명시
- 예제 입출력 3개 이상, 반례 1개 이상
[출력 포맷] 오직 “최종 프롬프트”만 평문으로.
[요구사항 원문] >>> 여기에 요구사항 붙여넣기 <<<
완성된 최종 프롬프트를 새 대화에 그대로 붙여 넣어 지시합니다. 이전 대화의 잡음이 섞이지 않아 재현성이 올라갑니다.
Plan 모드는 코드를 쓰기 전, 구현 계획을 생성하고 코드베이스를 조사하며 필요한 질문을 먼저 던집니다. 생성된 계획은 UI에서 편집/재정렬 가능하고, 단계별로 실행 → Diff 리뷰 → 수정을 반복할 수 있습니다.
언제 쓰나
권장 루틴(5단계)
1) 목표·성공 기준·금지사항을 붙여 Plan 모드로 요청
2) Plan이 묻는 확인 질문에 답해 빈칸 제거
3) 생성된 계획을 편집: 범위 축소, 파일 범위 지정, 리스크/롤백 스텁 추가
4) 테스트·검증 단계를 계획에 명시(p95, 메모리 상한, e2e 스텝)
5) 단계별 실행 → Diff 리뷰 → 수정을 반복(필요 시 계획 갱신)
베스트 프랙티스
이 네 가지를 같이 쓰면 정확성·속도·재현성이 동시에 올라갑니다.