코딩 프롬프트 패턴, 작업 분해 전략, 반복 개선 워크플로우, 코드 리뷰/디버깅/리팩터링 프롬프팅, 도구별 최적 사용법을 다룹니다.
효과적인 코딩 프롬프트는 일관된 구조를 따릅니다. "무엇을", "어떻게", "왜"를 명확히 전달하는 것이 핵심입니다.
1. 컨텍스트 (Context): 현재 상황과 배경
2. 의도 (Intent): 달성하려는 목표
3. 제약 (Constraints): 따라야 할 규칙과 제한
4. 형식 (Format): 원하는 결과물의 형태실제 예시로 비교해 보겠습니다.
"로그인 기능 만들어줘""Next.js App Router 기반 프로젝트에서
이메일/비밀번호 로그인 API 라우트를 구현해줘.
- bcrypt로 비밀번호 검증
- JWT 토큰 발급 (jose 라이브러리 사용)
- 실패 시 구체적인 에러 메시지 반환
- 기존 src/lib/auth.ts의 패턴을 따를 것
- 응답 형식은 src/types/api.ts의 ApiResponse 타입 사용"두 번째 프롬프트가 더 나은 이유는 명확합니다. 기술 스택, 사용할 라이브러리, 따라야 할 패턴, 응답 형식까지 구체적으로 지정했습니다.
프롬프트가 길어지는 것을 두려워하지 마세요. AI에게 충분한 정보를 제공하는 것이 짧지만 모호한 프롬프트보다 항상 더 나은 결과를 낳습니다. 다만 불필요한 정보는 제외하세요.
기존 코드의 패턴을 참조하여 새 코드를 생성하게 하는 패턴입니다.
"src/services/user-service.ts의 구조와 에러 핸들링 패턴을 참고해서
product-service.ts를 구현해줘.
CRUD 메서드와 검색 기능이 필요해."이 패턴은 프로젝트의 일관성을 유지하는 데 매우 효과적입니다. AI가 기존 코드의 네이밍 규칙, 에러 처리 방식, 타입 구조를 자동으로 따릅니다.
원하지 않는 결과를 방지하기 위해 제약 조건을 명시합니다.
"이 함수를 리팩터링해줘.
제약:
- 외부 API 인터페이스는 변경하지 말 것
- 기존 테스트가 모두 통과해야 함
- 새로운 의존성 추가 금지
- 성능이 현재보다 떨어지면 안 됨"복잡한 작업에서는 AI가 단계적으로 사고하도록 유도합니다.
"이 코드의 성능 문제를 분석해줘.
1단계: 시간 복잡도 분석
2단계: 병목 지점 식별
3단계: 개선 방안 제시
4단계: 개선된 코드 구현"특정 관점에서 코드를 평가하게 합니다.
"보안 전문가의 관점에서 이 인증 코드를 리뷰해줘.
특히 다음 항목을 중점적으로 확인해:
- OWASP Top 10 관련 취약점
- 입력 검증 누락
- 세션 관리 문제
- 암호화 구현의 적절성"복잡한 작업을 한 번에 요청하면 품질이 떨어집니다. 효과적인 작업 분해 전략을 살펴보겠습니다.
각 단계를 별도의 요청으로 분리하면 다음과 같은 이점이 있습니다.
"주문 시스템을 구현해야 해. 다음 순서로 진행하자.
1. 먼저 주문 관련 타입 정의 (Order, OrderItem, OrderStatus)
2. 다음으로 주문 생성 로직 (재고 확인, 가격 계산)
3. 그 다음 결제 연동 (Stripe)
4. 마지막으로 주문 상태 변경 워크플로우"작업 분해의 적정 수준은 경험을 통해 찾아야 합니다. 너무 잘게 나누면 오버헤드가 증가하고, 너무 크게 나누면 품질이 떨어집니다. 일반적으로 "한 번의 요청으로 리뷰 가능한 단위"가 적절합니다. 대략 100~300줄 정도의 변경이 하나의 요청에 적합합니다.
첫 번째 결과가 완벽하지 않을 때, 반복적으로 개선하는 전략입니다.
"이건 좀 아닌 것 같아. 다시 해줘.""에러 핸들링 부분을 수정해줘. 구체적으로:
1. catch 블록에서 에러 타입을 구분해줘 (ValidationError vs DatabaseError)
2. 사용자에게 반환하는 메시지와 로깅 메시지를 분리해줘
3. 500 에러 시 스택 트레이스를 프로덕션에서 노출하지 않도록 해줘"첫 결과를 기반으로 점진적으로 품질을 높이는 접근입니다.
1차 요청: "기본 CRUD API를 구현해줘"
→ 결과 리뷰 → 기본 구조 확인
2차 요청: "에러 핸들링을 강화해줘. try-catch로 감싸고 적절한 HTTP 상태 코드를 반환해줘"
→ 결과 리뷰 → 에러 처리 확인
3차 요청: "입력 검증을 추가해줘. zod 스키마를 사용하고, 유효하지 않은 입력에 대한 구체적 에러 메시지를 반환해줘"
→ 결과 리뷰 → 검증 로직 확인
4차 요청: "이제 이 API에 대한 통합 테스트를 작성해줘""이 PR의 변경 사항을 리뷰해줘. 다음 관점에서 확인해:
1. 타입 안전성: any 사용이나 타입 단언 남용이 없는지
2. 에러 처리: 예외 상황이 적절히 처리되는지
3. 성능: N+1 쿼리, 불필요한 재렌더링 등
4. 보안: 입력 검증, 인증/인가 확인
5. 테스트: 핵심 로직에 대한 테스트가 충분한지
각 이슈를 심각도(critical/warning/suggestion)로 분류해줘.""이 함수에서 간헐적으로 undefined가 반환되는 문제가 있어.
증상: 10회 중 약 2회 정도 undefined 반환
환경: Node.js 22, TypeScript 5.7
관련 코드: [함수 코드]
가능한 원인을 분석하고, 각 원인의 가능성과 해결 방법을 제시해줘."디버깅에서 핵심은 재현 조건을 최대한 구체적으로 제공하는 것입니다. "안 돼요"보다 "특정 조건에서 특정 증상이 발생한다"가 훨씬 효과적입니다.
"이 컴포넌트를 리팩터링해줘.
현재 문제:
- 500줄이 넘는 단일 컴포넌트
- 비즈니스 로직과 UI가 혼재
- 재사용 가능한 부분이 하드코딩
목표:
- 커스텀 훅으로 비즈니스 로직 분리
- 재사용 가능한 하위 컴포넌트로 분할
- 외부 인터페이스(props)는 유지
제약:
- 기존 테스트가 모두 통과해야 함
- 단계적으로 진행하되, 각 단계가 독립적으로 동작해야 함"리팩터링 프롬프트에서는 "현재 문제 - 목표 - 제약"의 구조가 효과적입니다. AI가 왜 리팩터링이 필요한지, 어떤 방향으로 나아가야 하는지, 어떤 것은 건드리면 안 되는지를 명확히 이해할 수 있습니다.
/explain, /fix, /tests 슬래시 명령을 적극 활용합니다.@ 멘션으로 명시합니다."이 프로젝트를 개선해줘"범위가 너무 넓어 AI가 무엇을 해야 할지 판단하기 어렵습니다.
"정확히 15줄로 구현하고, 변수명은 a, b, c를 사용하고..."불필요한 제약이 오히려 코드 품질을 떨어뜨립니다.
"3번째 줄을 수정해줘"무엇을, 왜 수정해야 하는지 맥락이 없습니다.
같은 프롬프트로 반복 요청하면 비슷한 결과가 나옵니다. 피드백을 구체적으로 제공하여 방향을 조정하세요.
이번 장에서는 AI 코딩 어시스턴트와 효과적으로 소통하는 방법을 다루었습니다.
다음 장에서는 AI가 생성한 코드의 품질을 어떻게 평가하고 벤치마킹하는지 살펴보겠습니다. HumanEval, SWE-bench, CursorBench 등 주요 벤치마크와 품질 게이트 설계를 다루겠습니다.
이 글이 도움이 되셨나요?
관련 주제 더 보기
HumanEval, SWE-bench, CursorBench 등 주요 벤치마크, pass@k 메트릭, AI 코드 품질 문제, 품질 게이트 설계, 자동화된 검증 파이프라인을 다룹니다.
컨텍스트 엔지니어링의 부상, 파일 선택 전략, 프로젝트 규칙 파일, RAG 기반 코드 검색, 1M 토큰 시대의 전략을 다룹니다.
AI 코딩 도구의 생산성 측정의 함정, DORA 메트릭, AI 코드 비율 최적 범위, 조직 도입 전략, 온보딩, 가이드라인 설계, ROI 측정을 다룹니다.