개발ChatGPTClaudeGemini

코드 리뷰 프롬프트: 심각도 순 지적과 고친 코드까지

코드와 바꾼 이유를 붙이면 버그·보안·성능·읽기 쉬움 순으로 지적하고, 고친 코드와 확인할 테스트를 줍니다. 붙인 코드 밖의 일은 추측이라고 따로 표시해요.

  1. 프롬프트 복사: 아래 원문을 복사합니다. 로그인은 필요 없습니다.
  2. [ ] 칸 채우기: [예: TypeScript / Express] [무엇을 왜 바꿨는지] [코드나 diff 붙여 넣기] [걱정되는 부분, 없으면 비우기] 등 5곳을 내 상황으로 바꿉니다. 모르는 칸은 비워 둬도 돼요. AI 가 지어내지 않고 물어봅니다.
  3. AI 에 보내기: ChatGPT·Claude·Gemini 대화창에 붙여 넣고 보냅니다.

프롬프트 원문

당신은 꼼꼼한 시니어 개발자입니다. 아래 코드를 리뷰해 주세요. 목적은 이 변경이 바꾼 이유대로 동작하는지, 이대로 내보내도 되는지 판단하는 것입니다.

먼저 할 것
- 바꾼 이유를 읽고, 이 코드가 하려는 일을 두 문장으로 요약하세요. 제 설명과 코드가 다르게 동작하면 그것부터 짚으세요.
- 붙인 코드만 보고 판단하세요. 붙이지 않은 파일·설정·호출하는 쪽에 대한 말에는 「추측」 꼬리표를 붙이고, 무엇을 보면 확인되는지 적으세요.
- 코드에 API 키·토큰·비밀번호 같은 값이 보이면 리뷰보다 먼저 알려 주세요. 그 값은 이미 노출된 것으로 보고 새로 발급받아 바꾸라고 하세요.

지적 순서(심각한 것부터)
1. 버그: 틀린 결과, 빠진 예외 처리, 경계값(빈 값·0·음수·아주 큰 값), 같은 요청이 동시에 두 번 들어올 때
2. 보안: 입력 검증, 권한 확인, SQL 이나 명령어 주입, 코드에 들어간 비밀값
3. 성능: 반복문 안의 DB 호출이나 외부 요청, 데이터가 많아지면 느려지는 곳
4. 읽기 쉬움: 이름, 함수 길이, 중복. 취향 문제는 「취향」이라고 밝히고 맨 뒤에 짧게

지적마다
- 위치(함수 이름이나 줄) / 무엇이 문제인지 / 어떤 입력에서 어떻게 깨지는지 예 하나 / 고친 코드
- 확신 정도: 「확실」 또는 「추측」

마지막에
- 내보내기 전에 꼭 고칠 것과 나중에 해도 되는 것을 나눈 목록
- 지적을 모두 반영한 최종 코드
- 고친 것이 맞는지 확인할 테스트 2~3개(입력과 기대 결과)
- 잘한 점 한 줄

지켜 줄 것
- 문제를 지어내지 마세요. 붙인 범위에서 문제가 없으면 없다고 하세요.
- 고친 코드는 기존 스타일과 언어 버전을 지키고, 지적한 곳만 고치세요.
- 붙인 코드에 없는 함수·테이블·설정을 가정해야 하면 「추측」으로 표시하고 가정한 내용을 적으세요.

정보가 모자라면 지어내지 말고 그 자리를 「확인 필요」로 남긴 채 먼저 써 주세요. 그리고 끝에, 무엇을 더 알려 주면 좋아지는지 한 줄로 물어보세요.

리뷰할 코드
- 언어·프레임워크: [예: TypeScript / Express]
- 바꾼 이유: [무엇을 왜 바꿨는지]
- 코드: [코드나 diff 붙여 넣기] (키·토큰·비밀번호는 지우고)
- 특히 볼 것: [걱정되는 부분, 없으면 비우기]
- 붙이지 못한 맥락: [호출하는 쪽·DB 구조 등]
바꿔 넣을 칸: [예: TypeScript / Express][무엇을 왜 바꿨는지][코드나 diff 붙여 넣기][걱정되는 부분, 없으면 비우기][호출하는 쪽·DB 구조 등]

이렇게 넣으면 이런 답이 와요

예시 입력
- 언어·프레임워크: TypeScript / Express, PostgreSQL(pg-promise)
- 바꾼 이유: 회원이 수업 예약을 직접 취소할 수 있게 취소 API 를 새로 만들었다(예시용 가상 서비스). 수업 3시간 전까지만 취소할 수 있고, 자리가 나면 대기자에게 문자를 보낸다
- 코드:
app.post("/api/reservations/:id/cancel", async (req, res) => {
  const id = req.params.id;
  const reservation = await db.oneOrNone(`SELECT * FROM reservations WHERE id = ${id}`);
  const hoursLeft = (new Date(reservation.starts_at).getTime() - Date.now()) / 3600000;
  if (hoursLeft < 3) {
    return res.status(400).json({ error: "수업 3시간 전부터는 취소할 수 없어요" });
  }
  await db.none(`UPDATE reservations SET status = 'cancelled' WHERE id = ${id}`);
  const waitlist = await db.any(`SELECT phone FROM waitlist WHERE class_id = ${reservation.class_id}`);
  for (const w of waitlist) {
    await sendSms(w.phone, "자리가 났어요! 지금 예약하세요");
  }
  res.json({ ok: true });
});
- 특히 볼 것: 취소 가능 시간 계산이 맞는지, 대기자가 많을 때 느려지지 않는지
- 붙이지 못한 맥락: 로그인하면 req.user 에 회원 정보(id 포함)가 들어간다. reservations 표에는 id, member_id, class_id, starts_at, status 가 있다. sendSms 는 외부 문자 발송 서비스를 부르는 함수다
실제로 돌린 결과

위 예시 입력으로 이 프롬프트를 AI(Claude)에 그대로 넣어 받은 답이에요. 모델과 시점에 따라 표현은 달라질 수 있어요.

더 잘 쓰는 법

  • 키·토큰·비밀번호·고객 정보는 지우고 붙이세요. "여기에 키"처럼 자리만 표시하면 리뷰에는 충분해요.
  • 바꾼 부분(diff)만 붙이면 앞뒤를 몰라 「추측」이 늘어요. 바뀐 함수 전체를 붙이고, 못 붙인 것은 「붙이지 못한 맥락」 칸에 말로 적으세요.
  • 고친 코드를 같은 대화에 다시 붙이고 "다시 리뷰"라고 하면 남은 문제만 볼 수 있어요.
  • AI 가 처음부터 덜 틀리게 하려면 커서 프롬프트로 프로젝트 규칙 파일을 만들어 두세요.

자주 묻는 질문

챗GPT 에 회사 코드를 붙여도 되나요?

먼저 회사의 AI 사용 규칙을 확인하세요. 붙이더라도 키·토큰·비밀번호와 고객 정보는 지우고, 리뷰에 필요한 부분만 붙이는 편이 안전해요.

AI 코드 리뷰, 믿어도 되나요?

AI 는 붙인 코드만 보고 저장소 전체는 몰라서 틀린 지적도 해요. 이 프롬프트는 지적마다 「확실」·「추측」을 달고 깨지는 입력 예와 확인할 테스트를 붙이게 했으니, 테스트를 돌려 보고 판단하세요.

클로드 코드나 코덱스에서도 쓸 수 있나요?

됩니다. 저장소를 직접 읽는 도구라면 「코드」 칸에 코드를 붙이는 대신 "지금 바뀐 내용(git diff)"이라고 적고 이 프롬프트를 넣으세요.

문제가 없다고 나오면 바로 내보내도 되나요?

붙인 범위 안에서 문제가 안 보였다는 뜻이에요. 호출하는 쪽, 설정, 데이터 구조는 보지 못했으니 「붙이지 못한 맥락」을 채우거나 관련 파일을 더 붙여 한 번 더 보세요. 앱을 처음 만드는 중이라면 바이브코딩 프롬프트도 있어요.

#코드 리뷰#코드리뷰#AI 코드 리뷰#클로드 코드 리뷰#claude 코드 리뷰#codex 코드 리뷰#코덱스 코드리뷰#챗GPT 코드 리뷰