SQL 쿼리 리뷰프로그래밍 교육

SQL 쿼리 리뷰: 오류, 조인, 느린 지점

납품 1일부터수정 포함품질 검수
패키지
안전 결제자세히
  • 패키지 범위 내 수정은 무료입니다.
  • 납품 후 3일 이내에 응답하지 않으면 작업이 자동으로 승인됩니다.
주문하기 · ₩50,500

결제 시 금액이 예치되며, 작업을 승인해야만 지급됩니다.

SQL 쿼리 리뷰: 오류, 조인, 느린 지점

결과물 예시

스탠다드 패키지 예시

코드 리뷰: 소규모 온라인 쇼핑몰의 주문 가져오기 파이썬 스크립트

코드가 하는 일

  1. 쇼핑몰에서 내보낸 orders.csv를 읽습니다.
  2. 주문 줄마다 stock.xlsx에서 SKU로 상품을 찾아 수량을 뺍니다.
  3. 바뀐 재고를 다시 저장하고 합계를 import_log.txt에 기록합니다.

구조가 명확하고 함수 이름도 잘 지어져 있습니다. 문제 대부분은 스크립트가 예상하지 못한 형태의 입력이 들어올 때 생깁니다.

버그와 취약점

번호줄심각도내용
148높음같은 CSV를 두 번 가져올 수 있음. 이미 처리한 주문 번호를 확인하지 않음. 재고가 마이너스가 되는 가장 유력한 원인
272높음환불 주문의 빈 값이나 "2.0" 같은 값에서 int(row["qty"])가 오류로 멈춤
395중간SKU 비교가 대소문자를 구분해서 "gt-101"과 "GT-101"을 다른 상품으로 처리
4130중간encoding="utf-8" 없이 파일을 열어 윈도우에서 한글 상품명이 깨짐
5201낮음맨 except:가 실제 오류를 숨겨 로그가 쓸모없어짐

수정 코드(일부)

문제 1: 이미 가져온 주문 건너뛰기

processed = load_processed_ids("processed_orders.txt")
for row in reader:
    if row["order_id"] in processed:
        continue
    # ... 기존 처리 로직 ...
    processed.add(row["order_id"])
save_processed_ids("processed_orders.txt", processed)

이유: 같은 파일로 스크립트를 다시 실행해도 주문은 한 번만 반영됩니다.

문제 2: 수량을 안전하게 읽기

raw = (row.get("qty") or "").strip()
try:
    qty = int(float(raw))
except ValueError:
    log.warning("주문 %s: 잘못된 수량 %r, 건너뜀", row["order_id"], raw)
    continue

이유: 환불이나 부분 취소 줄은 전체 작업을 멈추지 않고, 알아보기 쉬운 기록을 남긴 채 건너뜁니다.

문제 3: SKU 정규화

sku = row["sku"].strip().upper()

재고 딕셔너리를 만들 때도 같은 .strip().upper()를 적용하세요.

스타일과 가독성

  • process()가 90줄입니다. read_orders, apply_to_stock, write_report로 나누세요.
  • row[7]처럼 숫자로 적은 열 번호는 헤더 이름으로 바꾸세요.

꼭 확인하세요: 각 수정 사항은 파일 사본으로 먼저 테스트하세요. 이번 리뷰는 코드를 읽고 진행했으며 실행은 하지 않았습니다.

의뢰인: 차 전문 쇼핑몰 운영자. 쇼핑몰에서 내려받은 주문 CSV를 재고 시트에 반영하는 310줄짜리 파이썬 스크립트를 직접 작성 문의 내용: "가끔 재고가 마이너스가 되고, 어떤 파일에서는 스크립트가 멈춰요."

고객과 모든 정보는 가상입니다.

서비스 소개

쿼리는 그럴듯한 숫자를 내면서도 틀릴 수 있습니다. 행을 불리는 조인, NULL을 빠뜨리는 WHERE, 슬그머니 내부 조인이 되어 버린 LEFT JOIN, 인덱스 열에 함수를 써서 전체 스캔을 일으키는 경우 같은 것들입니다. 사용하시는 데이터베이스 엔진에 맞춰 쿼리를 읽고, 각 부분이 무엇을 반환하는지 단계별로 설명하며, 논리 오류와 느린 지점을 표시해 드립니다. 수정된 쿼리에는 결과에서 무엇이 왜 바뀌었는지 메모가 함께 제공됩니다.

포함 사항

  • 제공 내용주문 페이지에 서면 리뷰를 드립니다. 각 쿼리가 반환하는 내용, 중요도순으로 정리한 오류와 느린 지점, 사용하시는 엔진에 맞춘 수정 SQL이 포함됩니다. 프리미엄에서는 테이블 구조와 붙여 넣어 주신 쿼리 실행 계획을 바탕으로 인덱스 제안도 드립니다.
  • 조인 점검중복되거나 사라진 행
  • NULL 처리값을 건너뛰는 필터와 집계
  • 그룹화 로직GROUP BY, HAVING, 윈도 함수
  • 느린 지점스캔, 하위 쿼리, 열에 쓴 함수
  • 수정된 쿼리사용하시는 엔진의 방언으로

진행 방식

  1. 1
    요청 사항쿼리와 테이블 구조를 붙여 넣어 주세요
  2. 2
    분석절 하나하나를 살펴봅니다
  3. 3
    검토오류, 수정안, 설명을 받으세요

준비해 주실 내용

텍스트나 스크린샷으로 붙여 넣은 쿼리와 CREATE TABLE 문, 데이터베이스 엔진과 버전, 기대하는 결과, 그리고 느린 쿼리라면 EXPLAIN 출력을 보내 주세요.

다음 내용을 여쭤봅니다:

  • 어떤 데이터베이스 엔진과 버전을 사용하시나요?
  • 쿼리는 무엇을 반환해야 하나요?
  • 결과가 틀린 문제인가요, 속도가 느린 문제인가요?
  • 주요 테이블에는 대략 몇 개의 행이 있나요?

패키지 비교

패키지베이직최대 100줄의 SQL₩21,700스탠다드최대 400줄의 SQL₩50,500프리미엄최대 1,000줄과 인덱스 조언₩99,500
작업 기간1일2일3일
수정 횟수123
코드 줄 수최대 100개최대 400개최대 1,000개
수정 코드 조각포함포함포함
인덱스 제안미포함미포함포함
주문하기 베이직주문하기 스탠다드주문하기 프리미엄

안전 결제

주문할 때 결제하지만, 대금은 승인된 작업에 대해서만 지급됩니다.

  • 고정 가격결제 후에는 패키지 가격이 변경되지 않습니다.
  • 금액 예치결제 시 금액은 예치만 됩니다. 작업을 승인하면 서비스에 지급됩니다.
  • 납품 전 검수모든 결과물은 전달되기 전에 품질 검수를 거치며, 승인하기 전에 주문 페이지에서 확인할 수 있습니다.
  • 무료 수정패키지에서 허용하는 횟수만큼 요청 사항 범위 내에서 수정을 요청할 수 있습니다.
  • 3일 후 자동 승인납품 후 3일 이내에 작업을 승인하거나 수정을 요청하지 않으면 자동으로 승인됩니다. 납품 후 주문 채팅에 메시지를 남기면 주문은 대기 상태가 됩니다. 저희가 답변한 뒤 3일을 다시 시작할 수 있으며, 이 경우 채팅으로 알려 드립니다.
  • 재작업 또는 전액 환불결과물이 요청 사항과 맞지 않고 수정으로도 해결되지 않았거나, 작업이 작업 기간의 두 배를 넘겨 지연되면 주문 채팅에 알려 주세요. 작업을 다시 하거나 결제 금액을 전액 환불해 드립니다.
이용 방법 →

질문과 답변

제 데이터로 쿼리를 실행해 주시나요?

아니요. 데이터베이스에 연결하지 않습니다. 보내 주신 SQL과 구조를 읽고 분석하므로, 수정된 쿼리는 운영 환경에 쓰기 전에 사본에서 테스트해 주세요.

실제 데이터를 보내야 하나요?

그럴 필요는 없습니다. 테이블 구조와 지어낸 샘플 행 몇 개면 충분하며, 개인정보는 빼 주세요.

다른 사람이 작성한 쿼리를 설명해 주실 수 있나요?

네. 절마다 무엇을 반환하는지 설명해 드립니다. 숫자가 이상해 보이는 이유를 찾는 가장 빠른 방법인 경우가 많습니다.

패키지
주문하기 · ₩50,500· 2일