같은 요구사항, 천차만별 결과 —
나쁜 프롬프트 5가지 안티패턴
AI가 이상한 SQL을 줬다면, 대부분 모델 탓이 아니라 던진 문장 탓입니다. 나쁜 프롬프트의 5가지 안티패턴과 좋은 프롬프트 5원칙을 나란히 놓고 비교합니다 — 보다 보면 "아, 내가 이렇게 던졌었지" 싶은 장면이 하나쯤 나올 거예요.
이번 섹션의 여정
완료 ✓
지금 여기
복잡한 요구 쪼개기
전 과정 실연
AI 결과 의심하기
5-1에서 AI에게 꼭 줘야 할 3가지(스키마·샘플 데이터·결과 형태)를, 5-2에서 그걸 전달하는 포맷을 배웠죠. 이번 강의는 반대편에서 봅니다 — 사람들이 실제로 자주 던지는 나쁜 프롬프트 5가지를 해부하고, 각각을 좋은 프롬프트로 고쳐봅니다. 다섯 장면 모두 우리 shop DB 기준입니다.
안티패턴 ① — 컨텍스트 없는 한 줄
가장 흔한 유형입니다. 머릿속 요구사항을 한 줄로 압축해서 던지는 것.
”카테고리별 매출 뽑아줘”
어떤 DB인지, 매출이 price × quantity인지 단순 price 합인지, 카테고리가 어느 테이블에 있는지 — 아무것도 없습니다. AI는 세상의 ‘보통 쇼핑몰’ 스키마(sales, ecommerce…)를 가정하고 추측 SQL을 짜기 시작합니다. 결과 신뢰도 0.
테이블 구조 + 요구사항을 한 묶음으로
아래 블록처럼 던지면 AI가 추측할 게 없습니다. 관련 테이블, 관계, 매출의 정의, 출력 형태까지 — 전부 명시돼 있으니까요.
[테이블 구조]
- categories: category_id PK, category_name
- products: product_id PK, price, category_id FK → categories
- order_items: order_id FK, product_id FK, quantity
[요구사항]
카테고리별 총 매출 (price × quantity 의 합).
출력: 카테고리명, 총매출. 매출 많은 순.이 프롬프트가 받아낸 SQL을 DBeaver에서 돌려보면 —
| category_name | total_sales |
|---|---|
| 의류 | 1,107,000 |
| 전자기기 | 857,000 |
| 뷰티 | 510,000 |
| 도서 | 479,000 |
| 식품 | 60,000 |
테이블 + 관계 + 요구사항을 항상 같이. 5-1의 ‘꼭 줘야 하는 3가지’와 5-2의 텍스트 표 포맷이 바로 이걸 위한 준비물이었습니다.
안티패턴 ② — 모호한 단어
이번엔 컨텍스트를 줬다 해도 빠지기 쉬운 함정 — 사람끼리만 통하는 단어입니다.
”인기 상품 보여줘”
‘인기’가 뭘까요? 매출이 많은 것? 주문 횟수가 많은 것? 좋아요? 별점? — 모든 해석이 가능합니다. AI는 그중 하나를 임의로 골라잡고, 여러분이 원한 기준과 다를 확률이 높습니다.
측정 기준을 박아서
“가장 많이 팔린 상품 TOP 5 — 판매 수량(SUM(quantity)) 기준으로.” 해석의 여지가 사라집니다. 숫자나 컬럼으로 잴 수 있는 표현으로 바꾸는 게 전부예요.
자주 쓰는 모호한 단어들, 이렇게 바꾸면 됩니다.
| 모호한 단어 | 구체적 기준 |
|---|---|
| "인기" | 매출 상위 / 주문 횟수 상위 / 별점 높은 |
| "최근" | 지난 30일 / 2025년 이후 / 최근 1주 |
| "활성 회원" | 지난 30일 안에 주문한 / 로그인한 |
| "VIP" | 누적 매출 100만원 이상 / 주문 10건 이상 |
| "잘 팔리는" | 판매 수량 상위 / 매출 상위 |
모호한 단어(“인기”, “최고”, “잘 팔리는”)는 — 구체적 측정 기준으로 바꿔서. 기준을 정하는 건 AI가 아니라 여러분의 몫입니다.
안티패턴 ③ — 결과 형태를 말하지 않음
쿼리 내용은 맞게 시켰는데, 받고 싶은 표의 모양을 말하지 않는 경우입니다.
”회원별 매출 합계”
AI가 (member_id, member_name, sum_sales) 3컬럼으로 짤지,
member_id만 줄지, 정렬은 어떻게 할지, 몇 행을 보여줄지 —
전부 추측합니다. 결과가 원하는 모양과 다르면 다시 시켜야 하죠.
출력 컬럼 · 정렬 · 행 수까지
받고 싶은 표의 모양을 그대로 말해줍니다. 컬럼 + 정렬 + 행 수 — 세 줄이면 충분해요.
회원별 매출 합계.
- 출력 컬럼: 회원이름, 총매출
- 정렬: 매출 많은 순
- 행 수: 최대 10개무엇을 어떤 모양으로 받고 싶은지 명시 — 출력 컬럼 + 정렬 + 행 수(+ 필터). 5-1에서 배운 세 번째 준비물 그대로입니다.
안티패턴 ④ — 한 번에 너무 많이
요구사항이 명확해도, 한 번에 전부 시키면 또 다른 문제가 생깁니다.
종합 보고서 한 방에
“카테고리별 매출이랑, 회원별 매출이랑, 월별 매출이랑, 인기 상품 TOP 10도 같이 뽑아줘” — AI도 헷갈리고, 답도 길어지고, 어디가 틀렸는지 검증이 불가능해집니다.
한 번에 한 가지 — 받고 검증, 다음
첫 요청 “카테고리별 매출 SQL만” → 실행·검증 → 두 번째 “이제 회원별 매출” → 검증 → 세 번째 “월별 매출”… 짧은 사이클의 반복이 결국 제일 빠릅니다.
받고 검증, 그 다음. 쪼개기조차 어려운 진짜 복잡한 요구사항은 — 다음 강의 5-4(CTE 사고법) 에서 단계별로 분해하는 법을 다룹니다.
안티패턴 ⑤ — 받은 SQL을 검증하지 않음 ⭐
다섯 가지 중 가장 위험한 안티패턴이자, 이 강의 전체를 관통하는 핵심입니다.
”오, 됐다 — 그대로 실행”
AI가 SQL을 주면 의미가 맞는지 확인 없이 바로 사용. 3-7에서 본 JOIN 뻥튀기 같은 사고가 그대로 발생합니다. 겉보기엔 멀쩡한 숫자라서 더 위험해요.
받음 → 실행 → 의심 → 검산 → 사용
실습 DB에서 돌려보고, 행 수와 값을 의심하고, 수상하면 AI에게 “이 결과 검산해줘 — JOIN 뻥튀기는 없나?”라고 되물은 뒤에야 사용합니다.
검증 루틴을 3단계로 정리하면 이렇습니다.
AI가 준 SQL을 그대로 믿지 말고 일단 실습 DB에서 돌려봅니다. 에러 없이 도는지가 1차 관문.
회원별 매출인데 행이 64개? — 주문상세 수만큼 뻥튀기된 신호입니다. 제일 큰 값 하나는 손으로 검산해보세요.
의심되는 지점을 그대로 되물어봅니다 — “이 결과 검산해줘 — JOIN 뻥튀기는 없나?” 검증을 통과한 SQL만 채택.
안티패턴 ③의 좋은 프롬프트로 받은 SQL을 실제로 검증해보면 —
SELECT
m.member_name,
SUM(p.price * oi.quantity) AS total_sales
FROM
orders o
JOIN members m
ON m.member_id = o.member_id
JOIN order_items oi
ON oi.order_id = o.order_id
JOIN products p
ON p.product_id = oi.product_id
GROUP BY
m.member_name
ORDER BY
total_sales DESC
LIMIT 10;| member_name | total_sales |
|---|---|
| 조성민 | 600,000 |
| 김철수 | 498,000 |
| 박민수 | 356,000 |
| ⋮ | |
AI 결과는 — 항상 검증 후 사용. 무엇을 어떻게 의심하고 검산하는지는 다음 섹션 6(AI 결과 의심하기) 에서 본격적으로 다룹니다.
좋은 프롬프트 5원칙 — 한 장 정리
다섯 장면을 한 표로 모으면 이렇게 됩니다. 캡처해서 저장해두세요.
| # | 원칙 | 한 줄 |
|---|---|---|
| 1 | 컨텍스트 | 테이블 + 관계 + 요구사항 항상 같이 |
| 2 | 구체성 | 모호한 단어 → 측정 기준으로 |
| 3 | 결과 형태 | 출력 컬럼 + 정렬 + 행 수 |
| 4 | 한 번에 한 가지 | 받고 검증, 그 다음 |
| 5 | 검증 ⭐ | 받은 SQL 결과를 항상 검산 |
이제 자가 진단입니다. 본인의 평소 SQL 요청 프롬프트를 떠올려보세요 — 몇 개나 지키고 있나요?
3개 이상이면 평균 이상 프롬프터, 5개 모두면 AI 시대 SQL 실력자입니다. 부족했던 항목이 보였다면 — 그게 오늘 강의의 수확이에요.
자주 막히는 지점
한 번 잘 만들어둔 컨텍스트 블록은 계속 재사용하는 자산입니다.
5원칙은 정확도를 크게 올려줄 뿐, 100%를 보장하지는 않습니다.
기준이 안 떠오를 때는 기준 자체를 AI와 의논하면 됩니다.
오늘 비교한 다섯 장면 중 분명 찔리는 게 하나는 있었을 거예요. 다음 강의는 안티패턴 ④의 해결책 — 복잡한 요구사항을 단계별로 쪼개는 CTE 사고법입니다. 그 전에 연습 문제로 5원칙을 손에 익혀두세요.