AI 도서관 · Claude · 단축 명령어 · 코딩

/codereview

심각도 순으로 정리된 코드 리뷰

내용

[/codereview] 코드 리뷰

아래 코드를 리뷰해줘.

형식
🔴 치명적 — 버그·보안 문제 (재현 조건까지)
🟡 개선 — 동작은 하지만 고치면 좋을 것
🟢 취향 — 무시해도 되는 것

각 항목에
• 해당 코드 인용
• 왜 문제인지
• 수정 코드

조건
• 개수를 채우려고 억지로 지적하지 말 것
• 🔴 이 없으면 없다고 명확히 말할 것
• 이 코드의 맥락(용도·규모)을 모르면 먼저 물어볼 것

코드:
{{INPUT}}

💡 "심각한 것만" 이라고 하지 마세요
최신 모델은 그 말을 곧이곧대로 따라서 실제로 덜 보고합니다.
전부 보고하게 하고, 무엇을 먼저 고칠지는 따로 거르는 쪽이 낫습니다.
위 형식이 🔴🟡🟢 으로 나눠 **전부** 받는 이유가 이것입니다.

"보수적으로 봐줘" "확실한 것만" 같은 표현도 같은 효과를 냅니다.

{{INPUT}} 자리에 내 내용을 넣어 쓰는 프롬프트입니다. 아래 버튼으로 열면 넣는 칸이 나옵니다.

언제 쓰나 · 코드를 합치거나 배포하기 전에 다른 눈으로 한 번 보고 싶을 때

샘플 입력

// 가상의 예시입니다 — 쿠폰 적용 API
app.post('/coupon/apply', async (req, res) => {
  const { userId, code } = req.body;

  const rows = await db.query(
    `SELECT * FROM coupons WHERE code = '${code}' AND used = 0`
  );
  if (!rows.length) return res.json({ ok: false });

  const coupon = rows[0];
  await db.query(`UPDATE coupons SET used = 1 WHERE id = ${coupon.id}`);
  await db.query(
    `INSERT INTO user_coupons (user_id, coupon_id) VALUES (${userId}, ${coupon.id})`
  );

  res.json({ ok: true, discount: coupon.discount });
});

이런 모양이면 잘 나온 것

우리가 쓴 예시입니다. 실제 실행 결과가 아니고, 답변은 매번 조금씩 다릅니다.

먼저 확인할 것 — 이 API 가 로그인된 사용자만 호출할 수 있는 경로인가요?
아래 🔴 첫 항목이 그 답에 따라 달라집니다.

🔴 치명적
1. userId 를 요청 본문에서 그대로 받습니다
   `const { userId, code } = req.body;`
   호출하는 쪽이 userId 를 아무 값으로 보내면 남의 계정에 쿠폰이 적용됩니다.
   재현 — 다른 사람의 userId 를 넣어 요청하면 그대로 처리됩니다.
   수정 — 인증된 세션에서 사용자 id 를 가져올 것

2. 값을 문자열로 이어 붙여 질의를 만듭니다
   `WHERE code = '${code}'`
   code 에 따옴표가 섞이면 질의가 바뀝니다.
   수정 — 파라미터 바인딩 사용

3. 조회와 UPDATE 사이에 틈이 있습니다
   두 요청이 동시에 들어오면 같은 쿠폰이 두 번 사용됩니다.
   재현 — 같은 코드로 동시에 두 번 호출
   수정 — 조건부 UPDATE 후 영향 행 수를 확인하거나 트랜잭션·잠금 사용

🟡 개선
4. UPDATE 와 INSERT 가 한 트랜잭션이 아닙니다
   INSERT 가 실패하면 쿠폰만 사용 처리된 채 남습니다.

🟢 취향
5. 실패 응답이 `{ ok: false }` 뿐이라 이유를 알 수 없습니다.

⚠️ 「🔴 이 없다」고 말할 상황이면 없다고 분명히 말해야 합니다.
   개수를 채우려고 억지로 지적했다면 잘못 나온 것입니다.
⚠️ 「심각한 것만 알려줘」라고 요청하지 마세요. 실제로 덜 보고합니다.

받은 답 확인하기

잘못 나왔을 때 이어서 보낼 말

개수를 채우려고 억지로 지적하지 마. 🔴 이 없으면 없다고 말해줘.
각 항목에 해당 코드를 인용하고, 왜 문제인지와 수정안을 붙여줘.
🔴 에는 어떻게 재현되는지도 적어줘.
도서관에서 열기 — 내 내용 넣고 복사하기