요구, 제약, 성공조건을 프롬프트 첫머리에 고정하고 API 계약, JSON 스키마, 에러 모델, 상태 전이표, 아이들폿 키, 코릴레이션ID, 실패 케이스 우선 TDD, 모듈 분할 생성, 관측성와 릴리스 체크리스트까지 프롬프트를 무료로 배포합니다.
챗 GPT로 코드 잘 짜는 방법
챗 GPT로 코드를 잘 짜는 사람은 코드를 시키기 전에 조건을 엄청 많이 달아 놓습니다. 또, AI가 이해하기 쉽게 프롬프트 첫머리에 요구, 제약, 성공조건을 넣고, 마지막으로 ‘그럴듯한 구현 대신 맞는 구현을 선택한다.’ 문구를 넣어서 챗GPT를 훨씬 더 똑똑하게 만듭니다.
아래는 위에서 설명한 것을 챗 GPT에게 주입하는 프롬프트입니다.
[요구]
사용자: 상점 운영자
목표: 주문 상태를 PENDING→PAID→FULFILLED로 전이시키는 API
금지: 중복 결제, 상태 역행, 임시 필드 도입
[제약]
언어/런타임: Node 18 / TypeScript 5
DB: Postgres 15, 단일 트랜잭션, SERIALIZABLE 격리
배포: GitHub Actions, Docker, 헬스체크 /live /ready
보안: OAuth2, 스코프 order:write 필요
[성공조건(DoD)]
200/409/422/504 에러 모델 통일
p95 응답 ≤ 200ms @ RPS 50
중복 요청에도 아이들폿 보장(키: X-Idempotency-Key)
수용 테스트 6건 통과, 대시보드에 성공/실패 카운터 노출

인터페이스를 우선 짜도록 합니다.
코딩할 때 인터페이스, UI, UX를 맞추다 보면 내부 코드를 바꿔야 할 때 가장 번거롭습니다. 이건 AI도 마찬가지이고, 챗GPT의 성능이 좋다고 하여도 큰 코드를 한번에 인터페이스와 오류 없이 맞춰 달라는 것은 아직 불가한 기술입니다.
프롬프트 스니펫과 JSON Schema를 먼저 코드로 짜주면 나중에 생기는 문제가 훨씬 더 적어집니다.
다음 인터페이스를 먼저 정의하라. 구현은 금지.
1) Request/Response JSON 스키마(예: JSON Schema 2020-12)
2) Error 모델: code(string), message, cause(optional), correlationId
3) 상태 전이표: PENDING→PAID→FULFILLED, 역행 금지
4) 헤더: X-Idempotency-Key, X-Correlation-Id
5) 성공/실패 예시 페이로드 2개씩
{
"$id": "https://acme.dev/schemas/order.transition.json",
"type": "object",
"required": ["orderId","targetStatus"],
"properties": {
"orderId": {"type":"string","pattern":"^ord_[a-z0-9]{16}$"},
"targetStatus": {"enum":["PAID","FULFILLED"]},
"metadata": {"type":"object","additionalProperties": {"type":"string"}}
},
"additionalProperties": false
}
실패 케이스를 우선 테스트합니다.
TDD의 관점으로 실패부터 고정하면, 생성 코드가 경계에서 무너지지 않습니다. 프롬프트에 “먼저 테스트”를 명령하세요.
아래 실패 케이스에 대한 수용 테스트 코드를 먼저 작성하고, 통과하지 못하면 구현을 보완하라.
[실패 5]
1) 상태 역행 요청(PAID→PENDING): 409, error.code="STATE_REWIND"
2) 중복 요청(동일 Idempotency-Key 2회): 200 동일 응답 반환, DB side-effect 1회
3) 유효성 오류(잘못된 orderId 패턴): 422
4) 외부 결제 게이트웨이 3초 지연: 타임아웃 2.5초, 504 + 재시도 백오프 로깅
5) DB 재시도 중 트랜잭션 충돌: 409, 상응 로그 및 메트릭 증가
모듈 단위 생성
챗 GPT에게 코드를 짜라고 할 때 절대 한 번에 “모든 것”을 시키지 않습니다.
공사장 소장님이 작업 반장에게 일을 지시하고, 작업 반장은 오장, 십장에게 말을 전달하듯이 세부적으로 나눠서 챗GPT에게 전달해야 품질이 올라갑니다.
팁: 챗 GPT 탭을 여러 개 켜 놓고, 직원에게 지시를 하듯 각자 다른 지시를 시키면 동시에 일 처리가 가능합니다.
추천 생성 순서
- 도메인 모델: 타입, 불변식, 상태 전이 함수
- 어댑터: DB, 외부 API 포트(인터페이스만)
- 유즈케이스: 트랜잭션 경계, 아이들폿 처리
- 인터페이스 계층: HTTP 핸들러, 밸리데이션
- 관측성: 로그·메트릭, 트레이스, 코릴레이션ID
- 통합 테스트: e2e, 장애, 타임아웃 시나리오
- CI 스크립트: 린트, 테스트, 보안 스캔, 빌드
마무리하며
이 글에서 알려주는 방법은 단순하게 코딩에만 한정된 내용이 아닙니다. 과제를 할 때, 아이디어를 얻을 때 매우 유용한 방법입니다.
FAQ
Q1. 챗GPT로 코드를 잘 짜려면 무엇부터 정해야 하나요?
A1. 요구, 제약, 성공조건을 표로 고정하시고 입력와 출력 스키마, 에러 모델, 상태 전이 같은 계약을 먼저 정의하시는 것이 핵심입니다.
Q2. 인터페이스를 먼저 정의하면 어떤 이점이 있나요?
A2. 스키마 불일치와 존재하지 않는 API 호출이 줄어들고, 이후 모듈 구현을 바꾸더라도 외부 계약이 유지되어 변경 비용이 낮아집니다.
Q3. 실패 케이스를 먼저 테스트로 쓰는 이유가 있나요?
A3. 경계값, 중복 요청, 타임아웃, 트랜잭션 충돌 같은 고위험 지점을 선제적으로 고정해 그럴듯한 구현 대신 맞는 구현을 유도합니다.