리포팅과 대시보드
AI로 비즈니스 리포트와 대시보드 구축 — 일회성 쿼리에서 신뢰할 수 있는 리포팅 시스템까지, 원시 데이터를 의사결정에 쓰는 인사이트로 변환.
프리미엄 강좌 콘텐츠
이 레슨은 프리미엄 강좌의 일부예요. Pro로 업그레이드하면 모든 프리미엄 강좌와 콘텐츠를 이용할 수 있어요.
- 모든 프리미엄 강좌 이용
- 1000개 이상의 AI 스킬 템플릿 포함
- 매주 새로운 콘텐츠 추가
🔄 Quick Recall: 이전 레슨에서 EXPLAIN ANALYZE, 전략적 인덱싱, 쿼리 재작성으로 성능을 최적화했어요. 이번에는 그 빠르고 효율적인 쿼리로 리포트와 대시보드를 만들어요.
쿼리에서 비즈니스 인텔리전스로
쿼리는 질문에 답해요. 리포트는 같은 질문에 일관되고, 신뢰할 수 있게, 이해관계자가 행동할 수 있는 형식으로 답해요. AI가 이 간격을 메워줘요 — 일회성 쿼리를 프로덕션 수준 리포팅 시스템으로 변환.
리포트 쿼리 구축
리포트 쿼리는 방어적이고 자기 설명적이어야 해요:
데이터베이스: PostgreSQL
테이블:
- orders (id, customer_id, total, order_date, status, region)
- customers (id, name, email, segment, created_at)
- products (id, name, category, price)
- order_items (id, order_id, product_id, quantity)
월간 매출 리포트 쿼리를 만들어주세요:
1. 최근 12개월 월별 매출
2. 전월 대비 성장률
3. 지역별 매출
4. 매출 상위 5개 제품 카테고리
5. 신규 vs 재구매 고객 매출 분리
요구사항:
- 동적 날짜 사용 (하드코딩 금지)
- NULL 값과 0 나누기 안전하게 처리
- 의미 있는 칼럼 별칭
- 큰 숫자 가독성 좋게 포맷
- 합계/요약 행 포함
✅ Quick Check: 프롬프트에서 “NULL 값과 0 나누기 안전하게 처리"를 지정하는 이유는? 리포트에 NULL이 표시되거나 “division by zero"로 크래시하면 이해관계자 신뢰가 무너지기 때문이에요. 지역에 지난달 매출이 없으면 성장률 계산이 0으로 나눠져요. NULLIF와 COALESCE가 이걸 처리해요:
ROUND(current_revenue / NULLIF(previous_revenue, 0) * 100 - 100, 1)이 크래시 대신 NULL을 반환하고, COALESCE가 ‘N/A’나 0으로 변환해요.
뷰로 재사용 가능한 리포트 만들기
복잡한 리포트를 뷰로 감싸세요:
이 리포팅 쿼리들을 다음으로 변환해주세요:
[쿼리 붙여넣기]
1. 일반 뷰 (실시간 리포트용, 항상 최신 데이터)
2. 구체화된 뷰 (비싼 리포트용, 매일 갱신)
3. 갱신 스케줄: 어떤 뷰가 매일 vs 매시간 vs 매주 갱신 필요
4. 'reporting' 역할이 읽을 수 있도록 GRANT 문
CREATE OR REPLACE를 사용해서 뷰를 드롭 없이 업데이트 가능하게.
각 타입을 언제 쓸까요:
| 리포트 유형 | 뷰 타입 | 갱신 | 사용 시점 |
|---|---|---|---|
| 실시간 대시보드 | 일반 뷰 | 즉시 | 주문 상태처럼 현재 데이터 필요 |
| 일일 요약 | 구체화된 뷰 | 매일 | 어제 합계, 실시간 불필요 |
| 월간 리포트 | 구체화된 뷰 | 매월 | 이력 분석, 트렌드 리포트 |
| 임시 분석 | 직접 쿼리 | N/A | 일회성 질문 |
시간 인텔리전스 패턴
리포팅 쿼리에서 가장 어려운 부분은 시간을 올바르게 처리하는 거예요. AI에게 데이터베이스용 패턴을 생성하게 하세요:
데이터베이스: PostgreSQL
재사용 가능한 날짜 표현을 생성해주세요:
1. 이번 달 누계
2. 이전 달 (전체)
3. 전년 동기
4. 롤링 7일, 30일, 90일 윈도우
5. 연 누계
6. 분기 누계
7. 주 대비 비교
8. 최근 12개월 월별 시리즈 (데이터 없는 월도 포함)
#8에서 데이터가 없는 월을 채우기 위한 generate_series 사용법도 보여주세요.
generate_series 기법이 특히 중요해요. 이게 없으면 주문이 없는 월이 결과에서 아예 사라져요 — 차트에 오해를 불러일으키는 빈 구간이 생겨요.
대시보드 쿼리 설계
대시보드에는 여러 조율된 쿼리가 필요해요. AI에게 전체 세트를 설계하게 하세요:
이커머스 비즈니스용 경영진 대시보드를 구축해요.
대시보드 위젯용 쿼리를 설계해주세요:
1. KPI 카드: 총 매출(오늘, 월 누계, 연 누계), 주문 수, 평균 주문 금액, 활성 고객
2. 매출 트렌드: 최근 30일 일별 매출 (라인 차트)
3. 매출 분포: 지역별 (파이/바 차트)
4. 상위 제품: 이번 달 매출 상위 10개 (테이블)
5. 고객 지표: 신규 가입, 리텐션율, 이탈 위험
6. 비교: 이번 달 vs 지난 달 (모든 핵심 지표)
각 쿼리 요건:
- 차트에 바로 쓸 수 있는 형식 (날짜는 라벨, 값은 숫자)
- 동적 날짜
- 500만 주문 테이블에서 1초 이내 실행
- 차트 라이브러리가 기대하는 칼럼 형식 (x축, y축 네이밍)
자동 리포트 배포
정기적으로 보내야 하는 리포트에는:
주간 매출 리포트 자동화가 필요해요:
1. 매주 월요일 오전 8시 실행
2. 지난 주 지표를 데이터베이스에서 쿼리
3. 결과를 하이라이트가 포함된 요약으로 포맷
4. 주목할 변화를 식별 (전주 대비 20% 이상 증감)
생성해주세요:
1. SQL 쿼리 (날짜 범위 파라미터화)
2. 쿼리 실행·결과 포맷 스크립트 (Python 또는 bash)
3. 스케줄링 명령 (cron 등)
4. 에러 처리 (DB 다운 시 대응)
✅ Quick Check: 자동 리포트가 원시 숫자만 보여주는 대신 “주목할 변화"를 강조해야 하는 이유는? 이해관계자에게 모든 숫자를 분석할 시간이 없기 때문이에요. “매출: 4,720만원"이라고만 하면 지난주 3,900만원이었다는 걸 기억해서 계산해야 해요. “매출: 4,720만원 (+21% 전주 대비)“라고 하면 즉시 이야기가 전달돼요. 자동 이상 탐지가 데이터 덤프를 실행 가능한 알림으로 바꿔요.
핵심 정리
- 리포트 쿼리에 방어적 코딩 필수: NULL 처리(COALESCE), 0 나누기 방지(NULLIF), 명확한 별칭
- 하드코딩 날짜 대신 동적 날짜 함수 사용 — 리포트가 자동으로 정확하게 유지
- 뷰가 복잡한 리포트 로직을 캡슐화하고, 구체화된 뷰가 비싼 리포트를 미리 계산해 즉시 접근 가능
- generate_series가 날짜 간격을 채워서 데이터 없는 월·일도 차트에 표시
- 대시보드 쿼리는 x축/y축 칼럼 네이밍으로 차트에 바로 쓸 수 있는 형식으로 반환해야 해요
- 주목할 변화를 강조하는(이상 탐지) 자동 리포트가 원시 데이터 덤프보다 훨씬 유용
Up next: 다음 레슨에서 데이터베이스 보안, 백업, 유지보수를 배워요 — 데이터를 보호하고 데이터베이스 건강을 장기적으로 유지하기.
이해도 체크
먼저 위의 퀴즈를 완료하세요
레슨 완료!