💡 비전공자도 10초 만에 끝내는 SQL 쿼리 작성 & 데이터 분석 파이프라인




📌 생각의 출발점 (문제 의식)

DB 조회가 필요할 때마다 개발 팀에 쿼리를 매번 부탁하기 눈치 보이고, 직접 쓰자니 JOIN이나 GROUP BY 같은 복잡한 조건에서 자꾸 오류가 나서 시도조차 못 했던 불편함에서 시작했습니다.


1. 무엇에 쓰는지


원하는 데이터 추출 조건만 자연어로 설명하면, 오류 없는 정확한 SQL 쿼리문과 함께 데이터베이스 성능을 고려한 인덱스 가이드까지 즉시 작성할 때 활용합니다.



2. 사용한 AI


Claude 5.5 Sonnet (무료 플랜 사용)



3. 프롬프트 또는 설정 (복사해서 사용)



너는 데이터 엔지니어 겸 데이터 분석가야. 내가 요청하는 조건에 맞는 SQL 쿼리를 작성하고, 결과를 분석하는 가이드를 제공해 줘.


[DB 테이블 구조]

- users (user_id, join_date, user_status)

- orders (order_id, user_id, order_date, total_amount, payment_status)


[추출하고자 하는 조건]

1. 최근 3개월 동안 가입한 유저 중

2. 총 구매 금액이 50만 원 이상이고, 주문 횟수가 3회 이상인 'VIP 유저' 목록

3. 유저별 총 구매 금액 및 마지막 주문일 출력 (구매 금액 내림차순 정렬)


[요청 사항]

1. PostgreSQL 기준 표준 SQL 쿼리 작성 (주석 포함)

2. 데이터베이스 성능 저하를 막기 위한 인덱스 활용 팁


4. 실제 결과


AI가 아래와 같이 주석이 완벽하게 달린 쿼리문과 인덱스 최적화 팁을 즉시 생성해 주었습니다.



SELECT

  u.user_id,

  SUM(o.total_amount) AS total_spent,

  COUNT(o.order_id) AS order_count,

  MAX(o.order_date) AS last_order_date

FROM users u

JOIN orders o ON u.user_id = o.user_id

WHERE u.join_date >= CURRENT_DATE - INTERVAL '3 months'

  AND o.payment_status = 'COMPLETED'

GROUP BY u.user_id

HAVING SUM(o.total_amount) >= 500000 AND COUNT(o.order_id) >= 3

ORDER BY total_spent DESC;


[성능 팁] orders 테이블의 (user_id, order_date) 복합 인덱스를 추가하면 대용량 조인 시 조회 속도가 약 5배 향상됩니다.


5. 잘 안 되는 조건


DB의 ERD(테이블 간 연관관계)가 지나치게 복잡하거나 식별자 컬럼명이 불명확할 경우, 존재하지 않는 컬럼으로 JOIN을 시도하는 환각(Hallucination) 현상이 생길 수 있습니다. 따라서 테이블 구조(스키마)를 사전에 정확히 전달해야 합니다.