🌙☀️

📝 코드 한 조각이,
바로 검토 가능한 초안이 됩니다

AI가 코드 문서화, 코드 리뷰 코멘트, PR 설명, 레거시 코드 온보딩 요약을 작성합니다. 없는 사실은 지어내지 않고, 민감정보로 보이는 문자열은 자동으로 마스킹합니다.

📝 코드 문서화 · README 초안
붙여넣은 코드 (Before)
function calcDiscount(price, rate, isVip) {
if (isVip) rate += 0.05;
return Math.round(price * (1 - rate));
}
AI 문서 (After)
## calcDiscount(price, rate, isVip)

**한 줄 요약:** 가격에 할인율을 적용해 최종 결제 금액을 계산하며, VIP 회원은 할인율에 5%p를 추가로 더한다.

**파라미터**
- `price` (number): 원가
- `rate` (number): 기본 할인율 (0~1)
- `isVip` (boolean): VIP 회원 여부

**반환값**
- (number): 반올림 처리된 최종 결제 금액

**사용 예시**
```js
calcDiscount(10000, 0.1, true); // 8500
```

**주의사항**
- rate가 0.95를 초과하면 VIP 가산 시 할인율이 100%를 넘어 음수 가격이 될 수 있습니다 (코드에서 확인 필요).
- 입력값 유효성 검증(price 음수, rate 범위) 로직은 없습니다.

- 본 문서는 AI가 작성한 초안입니다. 실제 코드 동작과 비즈니스 로직을 반드시 직접 검토한 후 사용하세요. -
🔍 AI 코드 리뷰 코멘트
붙여넣은 코드 (Before)
app.get('/user/:id', (req, res) => {
const q = "SELECT * FROM users WHERE id = " + req.params.id;
db.query(q, (err, rows) => { res.json(rows); });
});
AI 문서 (After)
🔴 심각
- 해당 부분(쿼리 조합): 문자열 결합으로 SQL을 생성하고 있어 SQL Injection에 취약합니다. `req.params.id`를 파라미터 바인딩(`?`, prepared statement)으로 전달하도록 수정을 권장합니다.
```js
db.query('SELECT * FROM users WHERE id = ?', [req.params.id], (err, rows) => { ... });
```

🟡 권장
- 해당 부분(에러 처리): `err`가 무시되고 있습니다. 쿼리 실패 시 500 응답과 로깅을 추가하는 것이 좋을 수 있습니다(확인 필요).

🟢 참고
- 라우트 네이밍과 REST 컨벤션은 잘 지켜지고 있습니다 👍

- 본 문서는 AI가 작성한 초안입니다. 실제 코드 동작과 비즈니스 로직을 반드시 직접 검토한 후 사용하세요. -
📋 PR 설명 · 커밋 메시지 초안
붙여넣은 코드 (Before)
장바구니에 수량 0 되면 자동으로 아이템 삭제되게 고쳤어요. 이슈 #142
AI 문서 (After)
**커밋 메시지 후보**
1. `fix: remove cart item automatically when quantity reaches 0`
2. `fix(cart): auto-remove zero-quantity items`
3. `fix: prevent zero-quantity items from persisting in cart`

**PR 제목**
fix: 장바구니 수량 0 시 아이템 자동 삭제

**PR 본문**
- 배경: 수량을 0으로 내려도 아이템이 장바구니에 남아있던 문제 수정
- 주요 변경사항:
- 수량 변경 핸들러에 0 체크 로직 추가
- 0이 되면 해당 아이템을 목록에서 제거
- 테스트 방법: 장바구니에서 수량을 1 → 0으로 변경 후 아이템이 사라지는지 확인
- (스크린샷 첨부)

Closes #142

- 본 문서는 AI가 작성한 초안입니다. 실제 코드 동작과 비즈니스 로직을 반드시 직접 검토한 후 사용하세요. -
🗺️ 레거시 코드 온보딩 요약
붙여넣은 코드 (Before)
class OrderMgr {
static I;
q = [];
push(o){ this.q.push(o); if(!this._t) this._t = setInterval(()=>this.flush(), 3000); }
flush(){ /* legacy batch sync */ }
}
AI 문서 (After)
## OrderMgr 모듈 개요
주문(order) 객체를 큐에 모아두었다가 3초 간격으로 일괄 처리(batch)하는 싱글톤 형태의 클래스로 보입니다.

**핵심 함수/클래스**
| 이름 | 역할 |
|---|---|
| `I` (static) | 싱글톤 인스턴스 저장용으로 추정 (실제 할당 코드는 확인 필요) |
| `push(o)` | 큐에 주문 추가, 최초 호출 시 3초 주기 타이머 시작 |
| `flush()` | 큐를 비우는 배치 동기화 로직 (구현 내용은 코드에서 확인 필요) |

**암묵적 규칙/특이 패턴**
- `_t`라는 내부 타이머 필드를 조건부로 생성하는 지연 초기화(lazy init) 패턴 사용
- 싱글톤 패턴으로 보이나 `I`에 실제로 인스턴스를 할당하는 코드가 이 스니펫에는 없음 (팀에 확인 필요)

**수정 시 주의할 점**
- `flush()`가 실패했을 때의 재시도/에러 처리 로직이 보이지 않아, 수정 시 유실 가능성을 팀에 확인해야 합니다.

**첫 주 체크리스트**
- [ ] `I` 인스턴스가 어디서 초기화되는지 확인
- [ ] `flush()`의 실제 배치 동기화 대상(API/DB) 파악
- [ ] 타이머 정리(clearInterval) 로직 존재 여부 확인

- 본 문서는 AI가 작성한 초안입니다. 실제 코드 동작과 비즈니스 로직을 반드시 직접 검토한 후 사용하세요. -
내 코드 바로 문서화해보기 (클릭)

Powered by longlifephoto