홈 › 개발 › 코드 리뷰 받기 (버그·보안 먼저)

코드 리뷰 받기 (버그·보안 먼저)

이럴 때 쓰세요: PR 올리기 전에 한 번 더 보고 싶은데 봐줄 사람이 없을 때
무료
확인한 AIClaude
마지막 검증2026-10-14
  1. 1빈칸 채우기
  2. 2복사하기
  3. 3AI에 붙여넣고 결과 받기
다른 예시로 채워보기

💡 더 잘 쓰는 팁

  • 코드가 길면 바뀐 부분과 그 함수 전체만 넣으세요. 파일 통째로 넣으면 중요한 지적이 묻힙니다.
  • "확인 필요"라고 나온 함수는 이어서 보여주면 그 부분까지 같이 봐줍니다.
완성된 프롬프트● 입력하는 대로 바뀜
0자빈칸 0 채움붙여넣고 엔터만 누르면 돼요
ChatGPT·Claude 버튼은 완성된 프롬프트를 그 서비스 주소에 담아 새 창으로 열어요.
CClaude의 실제 답변기본값으로 받은 답변 · 사실 검수함
1. 꼭 고쳐야 할 것 ① SQL 인젝션 (4번째 줄, 보안) f-string으로 값을 SQL에 직접 붙이고 있습니다. status에 x' OR '1'='1 같은 값이 들어오면 조건이 무력화돼 다른 회원의 주문까지 조회됩니다. ② 주문이 0건이면 에러 (9번째 줄, 버그) rows가 비어 있으면 total / len(rows)가 0으로 나누기가 되어 ZeroDivisionError가 납니다. 주문 없는 회원이 조회하면 바로 터집니다. 2. 고치면 좋은 것 - 연결을 닫지 않습니다. 호출이 많아지면 연결이 쌓일 수 있습니다. (get_conn이 연결 풀을 쓰는지 확인 필요) - SELECT * 대신 필요한 칼럼만 고르면 응답이 가벼워집니다. - r["amount"]는 커서가 행을 딕셔너리로 돌려줄 때만 동작합니다. (get_conn 설정 확인 필요) 3. 고친 코드 def get_orders(user_id, status): conn = get_conn() try: cur = conn.cursor() # 값은 SQL에 붙이지 않고 매개변수로 넘김 (인젝션 방지) cur.execute( "SELECT * FROM orders WHERE user_id = %s AND status = %s", (user_id, status), ) rows = cur.fetchall() finally: conn.close() # 에러가 나도 연결을 닫음 total = sum(r["amount"] for r in rows) avg = total / len(rows) if rows else 0 # 주문 0건이면 0 return {"orders": rows, "avg": avg} ※ 매개변수 표시가 %s인지 ?인지는 DB 드라이버에 따라 다릅니다. (확인 필요) 4. 추가할 테스트 - 주문이 0건인 회원 → avg가 0이고 에러가 나지 않는지 - status에 ' OR '1'='1 를 넣었을 때 다른 회원 주문이 나오지 않는지 - 주문 3건(1,000 / 2,000 / 3,000원) → avg가 2,000인지