SQL 쿼리 생성
사람 말로 필요 설명하면, AI가 SQL 써줄 거
SQL 쓸 때 문제들
JOIN을 틀려 적고, 서브쿼리는 중첩되고
3개 테이블 JOIN했는데 나온 데이터 행이 예상의 10배 — JOIN 중 어느 게 틀렸나? 30분 디버그해야 다대다 관계 처리를 잘못 했다는 걸 알지.
서브쿼리 3층 중첩하니 자기가 써 놓고도 못 알아봐. 동료가 "이 SQL이 뭐 하는 거?"라고 하니 2분 생각했다 "어… 잠깐".
더 끔찍한 건 성능: 쿼리가 30초를 달려. EXPLAIN 봐도 뭐가 문제인지 못 찾겠어. 인덱스 추가했더니 더 느려졌어? 뭐가 문제야?
OpenClaw: 비즈니스 로직을 이해하고, 믿을 만한 SQL을 쓸게
쉬운 말로 "각 사용자의 최근 30일 소비 총액 출력, 액수 높은 순으로 정렬"이라고 하면, OpenClaw가 정규 SQL을 바로 생성해.
단순 번역이 아니야: 테이블 관계, 데이터 규모, 인덱스 상황을 고려해서, 정확하면서도 빠른 SQL을 생성해.
느린 쿼리 만났어? SQL이랑 EXPLAIN 결과를 함께 던져. 병목이 어디인지, 어떤 인덱스를 추가하면 좋을지, 어떻게 다시 쓰면 빨라질지 알려줄 거야.마치 옆에 DBA가 앉아 있어서 언제든지 물어볼 수 있는 느낌.
SQL Prompt 3개, 일상 90% 커버
일상 데이터 뽑기부터 성능 최적화까지, 필요에 따라 써.
일상 데이터 뽑기: 최근 30일 신규 사용자 채널별 분류
황금 명령어
데이터베이스에 이런 테이블들이 있어:
- users(id, name, email, channel, created_at, status)
- user_profiles(user_id, age, gender, city)
SQL 한 줄 써줄래:
1. 최근 30일 매일 신규 사용자 수 출력
2. 가입 채널(channel)별로 분류
3. 각 채널의 다음날 유지율도 통계
4. 결과는 날짜 최신순으로 정렬
데이터베이스는 MySQL 8.0이고, users 테이블이 약 500만 줄이야. 추천할 인덱스도 알려줄래.
일상 데이터 뽑기가 가장 흔한 패턴이야. AI더러 데이터베이스 종류 (MySQL, PostgreSQL, SQLite)와 데이터 규모를 꼭 말해줄래. DB마다 문법이 달라 (예: 날짜 함수), 데이터 규모가 쿼리 전략을 바꿔.
느린 쿼리 최적화: 30초짜리 SQL 살리기
고급 팁
이 SQL이 30초를 달려. 최적화해줄래:
[여기 느린 SQL 붙여넣기]
EXPLAIN 결과:
[EXPLAIN 출력 붙여넣기]
분석해줄 거:
1. 병목이 어디 (전체 스캔? 임시 테이블? 파일 정렬?)
2. 어떤 인덱스를 추가하면 좋을지 (CREATE INDEX 문법 포함)
3. SQL을 다시 써서 더 빠르게 (동등하면서도 더 효율적인 법이 있는지)
4. 최적화 후 예상 실행 시간
데이터베이스: PostgreSQL 15, 테이블 데이터 약 2천만 줄.
느린 쿼리 최적화할 땐 반드시 EXPLAIN 결과를 붙여. 쿼리만 봐선 진짜 병목을 판단 못 해. 그리고 데이터 규모를 말해줄래 — 100줄이랑 2천만 줄은 최적화 전략이 완전 달라.
복잡한 비즈니스 쿼리: 사용자 소비 분석
황금 명령어
데이터베이스에 3개 테이블이 있어:
- users(id, name, registered_at)
- orders(id, user_id, product_id, amount, created_at, status)
- products(id, name, category, brand)
쿼리 한 줄 작성해줄래:
1. 각 사용자의 소비 총액 (완료된 주문만)
2. 각 사용자 구매 빈도 최고 품목 분류 (동점이면 첫 번째 취함)
3. 각 사용자의 첫 구매, 마지막 구매 시간
4. 최근 1년 중에 소비한 사용자만
5. 소비 총액 높은 순으로 정렬, 상위 100명
데이터베이스: MySQL 8.0. CTE를 써서 SQL이 읽기 쉽게 부탁해.
여러 테이블 + 집계 + 순위 — 손으로 쓰기 쉬운 부분이야 실수할 부분이 많아. AI더러 CTE로 쓰게 하면 가독성이 훨씬 좋아. 이후 필요 조정도 쉬워.
데이터베이스 연결 설정
OpenClaw가 DB에 직접 연결해서 데이터 조회하는 설정 (선택, 없어도 SQL 생성은 가능).
데이터베이스 연결 설정 (.openclaw.yml)
# 데이터베이스 연결 (선택, 설정하면 AI가 직접 데이터 조회 및 검증)
database:
type: mysql # mysql / postgresql / sqlite
host: localhost
port: 3306
database: my_app
user: readonly_user # 강력 추천: 읽기 전용 계정!
password_env: DB_PASSWORD # 환경 변수에서 암호 읽기, 노출 금지
# 안전 제한
read_only: true # SELECT만 허용, 데이터 수정 금지
max_rows: 10000 # 단일 쿼리 최대 반환 행
timeout: 30 # 쿼리 타임아웃 (초)
# DB 설정 없어도 상관없어. AI가 네 테이블 구조 설명을 듣고 SQL을 생성할 수 있어.
# 다만 SQL 직접 실행해서 결과 검증은 못 해줄 뿐.
프로덕션 DB와 연결할 땐 반드시 읽기 전용 계정을 써. OpenClaw가 안전 제한이 있더라도 보험을 하나 더 거는 게 좋아. 읽기 전용 복제본에 연결할 것도 추천해.
SQL 작성: OpenClaw vs ChatGPT
둘 다 SQL 생성은 하지만, 세부는 다르지.
OpenClaw
- 네 데이터베이스 스키마를 읽어, 생성 SQL이 실제 테이블 구조와 정확히 맞음
- DB에 직접 연결해서 쿼리 결과 검증 가능 (읽기 전용 계정 설정 후)
- 문맥 이해: 이전 쿼리, 테이블 관계 기억, 다시 설명할 필요 없음
- 로컬 실행, 테이블 구조와 비즈니스 로직이 노출 안 됨
VS
ChatGPT
- 네 테이블 구조 설명을 듣고 SQL 생성, 추측이 많은 편
- 직접 쿼리 실행 못함, 문법 맞는지 직접 시험해야 함
- 문맥 윈도우 제한돼, 복잡한 비즈니스 로직 얘기하다 보면 기억 못 해
- 생성된 SQL이 문법은 맞지만 로직이 틀린 경우 많음, 찾기 어려워
실제 상황
데이터 분석가: 상사가 갑자기 추가 업무
오후 3시, 상사가 톡: "최근 3개월 각 채널 ROI, 주별 통계, 5시까지." 이 몇 테이블이 어떻게 연결되는지 정확히 모르고, SQL 손으로 쓰기 미안해.
OpenClaw 방식
테이블 구조를 OpenClaw에 알려주고, 쉬운 말로 필요 사항 설명, 2분 뒤 SQL 받음. DB에 직접 연결해서 한번 실행, 결과 확인 문제없고, AI더러 SQL 각 부분을 설명해달라고 하면 배우면서 한 것도 있음. 4시에 이미 건넸어. 미리 끝.
손으로 직접
먼저 문서 봐서 테이블 구조 확인, SQL 작성, JOIN이 틀렸나 데이터가 예상이랑 다르네, 1시간 디버그했어. 날짜 함수를 잘못 썼어. 결국 수정하는데 시간 걸렸어. 5시에 못 건넸어. 상사: "30분 더." 줘야 할 것 같아.
SQL 생성 팁
SQL 생성할 때 AI더러 꼭 말해줄 거: 데이터베이스 종류 (MySQL / PostgreSQL / SQLite), 테이블 데이터 대략 몇 줄, 이미 있는 인덱스. 이 3개가 생성 SQL 품질을 결정해.
복잡한 쿼리는 AI더러 CTE (WITH 절)로 쓰게 해. 중첩 서브쿼리는 안 쓰는 게 낫지. CTE는 훨씬 읽기 쉽고, 나중에 필요 조정할 때 안쪽부터 바깥쪽까지 안 해도 돼.
좋은 습관: AI가 SQL 생성한 뒤 "LIMIT 100으로 먼저 실행" 한 뒤 결과 확인. 전체를 바로 돌리지 말기, 특히 JOIN 여러 개면 데이터가 웹은 곱해져서 DB가 터질 수도.