[Claude Code] 스프레드시트 10만 행 한계 극복 - 개별 상품까지 분석하는 실적 리포팅 자동화

한줄 요약

스프레드시트로는 불가능했던 10만 행 데이터의 개별 상품 분석을, CSV 파일 + Python으로 해결하여 7개 핵심 지표를 Slack으로 매일 자동 리포팅하는 시스템 구축 (연간 40시간 절감)

이런 분들께 도움돼요

  • 이커머스/리테일 업계에서 대용량 매출 데이터 분석을 고민하는 분

  • 스프레드시트의 10만 행 한계에 막혀 세부 분석을 포기했던 분

  • 비개발자지만 Python 자동화를 Claude Code와 함께 시도해보고 싶은 분


소개: 시도하고자 했던 것과 그 이유

문제 상황 (Before)

이커머스 실적 데이터가 일자별로 10만 행을 넘어가면서, 기존 BigQuery + 스프레드시트 방식으로는 개별 상품 분석이 불가능했습니다.

매일 10분씩 수동으로 데이터를 확인하는데도, 대카테고리/브랜드 단위만 보다 보니:

  • '급상승 상품'은 뭔지

  • '급하락 상품'은 어떤 건지

  • '신규 진입 상품' (매출 100만원 이상)은 뭐가 있는지

이런 핵심 인사이트를 놓칠 수밖에 없었어요.

문제 상품을 조기에 발견하거나, 기회 상품을 빠르게 캐치하는 건 불가능했습니다.

시작하게 된 계기

Claude Code 교육을 들으면서 "스프레드시트만이 전부가 아니다"라는 걸 깨달았습니다.

기존에는 BigQuery → 스프레드시트 → Slack API 흐름으로만 생각했는데, "전일 매출 데이터를 파일로 저장하고, Python으로 분석하면 어떨까?"라는 가능성을 보게 됐어요.


진행 방법: 어떤 도구를 사용했고, 어떻게 활용했나요?

사용한 도구

  • 도구: Claude Code (CLI)

  • 모델: Claude Sonnet 4.5

  • 핵심 기능: /clarify 명령어, Plan Mode

  • 기술 스택: Python, pandas, BigQuery CSV, Slack API

AI와 협업한 과정

1. 요구사항 명확화 (/clarify)

상황: "일자별 실적 리포팅을 자동화하고 싶다"는 모호한 요청만 있는 상태

이렇게 요청했어요:

/clarify "일자별 실적 리포팅 자동화"

Claude의 반응: 6가지 질문을 하나씩 던지더라고요:

  • Q1: 얼마나 자주 하나요? → 매일

  • Q2: 한 번에 얼마나 걸리나요? → 10분

  • Q3: 가장 불편한 점은? → 상품별 분석 불가

  • Q4: 어떤 기능이 필요한가요? → (여기서 여러 질문을 통해 7개 지표 도출)

  • Q5: 기대 효과는? → 빠른 의사결정, 문제 상품 조기 발견

  • Q6: 외부 연동은? → Slack

결과: docs/_clarify/clarify_20260126_일자별실적리포팅.md 파일이 자동 생성되고, 7개 핵심 지표가 구체적으로 정의됨:

  1. 매출 급상승 상품 TOP5

  2. 급하락 상품 TOP5

  3. 신규 진입(매출 100만원 이상) 상품 TOP5

  4. 수익률 급하락 상품 TOP5

  5. 수익률 급상승 TOP5

  6. 브랜드별 매출 상위 TOP5

  7. 브랜드별 매출 하락 TOP5


2. 패러다임 전환의 순간

상황: 스프레드시트의 한계를 어떻게 극복할지 막막한 상태

Claude의 제안:

"BigQuery에서 CSV 파일로 다운로드하고, Python pandas로 분석하면 됩니다. 14일치 데이터를 로컬에 저장하고, 전일 대비/전주 대비 증감률을 계산하는 방식이에요."

"오!" 했던 순간: "스프레드시트만 쓸 수 있는 게 아니라, 파일을 저장해서 분석할 수도 있다"

이 깨달음이 Claude Code 활용의 확장성을 크게 넓힌 전환점이 됐습니다.


3. 구현 계획 수립 (Plan Mode)

이렇게 진행했어요:

  1. Plan Mode 진입

  2. Claude가 질문: 데이터 형식은? → CSV

  3. Claude가 질문: Slack 설정은? → Webhook URL 있음

  4. Claude가 질문: 저장 경로는? → 실행 시 지정 가능

Claude의 작업: 상세한 구현 계획서를 .claude/plans/ 폴더에 자동 생성:

  • 파일 구조 설계

  • 6단계 구현 로드맵

  • 각 지표별 계산 로직 (pandas 코드 포함)

  • Slack 메시지 포맷 디자인

  • 에러 처리 방안


4. Python 스크립트 구현

상황: 비개발자라 pandas 코드를 어떻게 짜야 할지 몰랐음

이렇게 요청했어요:

"전일 대비 매출 증가율을 계산하는 함수를 만들어줘.
증가율 = (전일 매출 - 전전일 매출) / 전전일 매출 × 100 이야."

Claude의 응답:

def calculate_revenue_surge(target_df, previous_df):
    """매출 급상승 상품 TOP5"""
    # 상품별 매출 집계
    target_agg = target_df.groupby(['product_code', 'product_name', 'brand_name'])['gmv1'].sum()
    previous_agg = previous_df.groupby(['product_code', 'product_name', 'brand_name'])['gmv1'].sum()

    # 증가율 계산
    merged = pd.merge(target_agg, previous_agg, on=['product_code', 'product_name', 'brand_name'])
    merged['growth_rate'] = (merged['gmv1_x'] - merged['gmv1_y']) / merged['gmv1_y'] * 100

    # TOP 5 추출
    return merged.nlargest(5, 'growth_rate')

느낀 점: 비개발자인 제가 "이런 지표가 필요해"라고 말하면, Claude가 pandas 코드로 바로 구현해줬어요. 단계별로 설명도 해주고, 제가 수정하고 싶은 부분만 말하면 즉시 반영됐습니다.

최종 결과물:

  • data_loader.py: CSV 로딩 및 전처리

  • metrics_calculator.py: 7개 지표 계산

  • slack_reporter.py: Slack 메시지 포맷팅

  • daily_sales_analyzer.py: 메인 실행 스크립트


인상적이었던 순간

"오!" 했던 순간:

가장 인상적이었던 건 사고의 전환이었어요.

처음엔 '스프레드시트로 어떻게든 해결해야 한다'고 생각했는데, Claude Code가 /clarify 명령어로 제 요구사항을 하나씩 물어보면서:

"전일 매출 데이터를 CSV 파일로 저장하고 Python으로 분석하면 된다"

이 접근을 제안했어요.

그 순간 깨달았습니다:

  • BigQuery → 스프레드시트 (제한적, 10만 행 한계)

  • ❌ 이게 전부가 아니다!

  • BigQuery → CSV 파일 저장 → Python 분석 (무제한)

이게 Claude Code 활용의 확장성을 크게 넓힌 전환점이 됐습니다.


막혔던 순간과 해결

문제: CSV 파일에서 한글 컬럼명이 깨짐

해결: Claude에게 "CSV 파일 로드할 때 한글이 깨져요"라고 말했더니:

df = pd.read_csv(file_path, encoding='utf-8-sig')

encoding='utf-8-sig' 옵션으로 해결 (Excel에서 저장한 CSV 대응)


문제: 10만 행 데이터를 한 번에 로드하니 메모리 부족

해결: Claude의 제안:

  1. 필요한 컬럼만 추출 (42개 → 13개)

  2. 카테고리 타입 사용 (astype('category'))

  3. 날짜별로 청크 처리

이렇게 하니 메모리 사용량이 1/3로 줄어들었어요.


💡 Tip:

  • /clarify 명령어로 요구사항부터 명확히 하세요. 6가지 질문에 답하면 Task 정의서가 자동 생성됩니다.

  • Plan Mode에서 Claude와 계획을 먼저 세우고, 승인 후 구현하면 시행착오가 줄어듭니다.

  • 에러가 나면 그냥 에러 메시지를 Claude에게 복사해서 붙여넣으세요. 대부분 즉시 해결됩니다.


결과와 배운 점

Before vs After

항목

Before

After

분석 범위

대카테고리/브랜드만

개별 상품까지 세부 분석

소요 시간

매일 10분 수동 작업

스크립트 실행 30초

연간 시간

40시간 소비

40시간 절감 ✨

분석 지표

매출 합계 정도

7개 핵심 지표 자동 생성

의사결정

사후 대응

실시간 모니터링 가능

리포팅 방식

스프레드시트 수동 확인

Slack 자동 발송

결과물

매일 아침 Slack에 자동으로 올라오는 리포트:

📊 일자별 실적 리포트 - 2026년 1월 26일

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

🚀 1. 매출 급상승 상품 TOP5

1️⃣ [브랜드 A] A 워시타워
   • 전일 매출: ₩120,294,200 ▲ 75.2% (+₩8,713,330)

2️⃣ [브랜드 B] B 크림
   • 전일 매출: ₩32,697,000 ▲ 487.6% (+₩2,238,000)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

📉 2. 매출 급하락 상품 TOP5

1️⃣ [브랜드 C] 카메라 
   • 전일 매출: ₩32,675,900 ▼ 76.8% (-₩8,861,000)

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

✨ 3. 신규 진입 상품 TOP5 (매출 100만원 이상)

1️⃣ [브랜드 D]  침대프레임 슈퍼싱글
   • 전일 매출: ₩33,780,000 🆕

━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━

(이하 4~7번 지표 생략)

이제 이 리포트를 보면서:

  • 브랜드A 급상승 → 프로모션 효과 확인

  • 브랜드B 급락 → 재고 이슈 점검

  • 브랜드C 신규 진입 → 신규 브랜드 모니터링

즉시 액션을 취할 수 있게 됐습니다.


팀/고객 반응

"이제 아침에 출근하면 어제 뭐가 잘 팔렸는지, 뭐가 문제인지 한눈에 보여서 좋아요!"

"전에는 상품별로 확인하려면 일일이 필터링 해야 했는데, 이제 TOP5가 자동으로 올라오니까 놓칠 일이 없어요."


배운 점과 나만의 꿀팁

효과적이었던 것

  1. /clarify 명령어로 요구사항부터 명확히 하기

    • 모호한 "자동화 하고 싶어요"를 6가지 질문으로 구체화

    • Task 정의서가 자동 생성되어 나중에 참고 가능

  2. Plan Mode에서 설계 먼저, 구현은 나중에

    • 코드부터 짜지 말고, Claude와 계획을 먼저 세우기

    • 파일 구조, 기술 스택, 단계별 로드맵 확정 후 진행

    • 이렇게 하니 "이거 왜 만들었지?" 같은 일이 없었음

  3. "도구의 한계를 도구의 한계로 받아들이지 말기"

    • 스프레드시트가 10만 행을 못 버티면, 다른 방식(CSV + Python)을 찾으면 됨

    • Claude Code는 그 대안을 찾는 과정을 함께 해준 파트너

이렇게 하면 안 돼요 (주의사항)

  1. 처음부터 완벽을 추구하지 말기

    • 저도 처음엔 "7개 지표를 한 번에 다 만들어야지"라고 생각했다가 막혔어요

    • Claude의 제안: 1개 지표부터 완성하고, 나머지는 패턴 복사

    • 실제로 1번 지표(급상승 상품) 만들고 나니, 2~7번은 금방 완성

  2. 에러 메시지를 Claude에게 숨기지 말기

    • 에러 나면 전체 메시지를 복사해서 Claude에게 그대로 붙여넣으세요

    • "이상한 에러가 나요"보다 에러 메시지 전체를 보여주는 게 훨씬 빠름


과정 중 시행착오

시행착오 1: 너무 많은 데이터를 한 번에 처리

  • 처음엔 3개월치 데이터를 다 로드하려다가 메모리 초과

  • Claude 제안: 14일치만 로드 (전일 대비, 전주 대비 계산에 충분)

시행착오 2: 컬럼명이 계속 바뀌는 문제

  • BigQuery에서 다운로드할 때마다 컬럼 순서가 바뀜

  • Claude 제안: 컬럼명 기반으로 매핑 (column_mapping 딕셔너리)

배운 점: 시행착오는 실패가 아니라 더 나은 해결책을 찾는 과정이에요. Claude에게 "이게 안 되는데 다른 방법 없을까?"라고 물어보면, 항상 대안을 제시해줬습니다.


앞으로의 계획

다음 단계

  1. 주간/월간 트렌드 분석 추가

    • 현재는 전일 대비만 보는데, 주간/월간 패턴까지 확장

    • "이번 주는 어떤 카테고리가 잘 나갔는지" 분석

  2. BigQuery API 직접 연동

    • 현재는 수동으로 CSV 다운로드

    • Python에서 BigQuery API 호출로 완전 자동화

  3. 이상 탐지 알림

    • 급격한 변화(+500% 이상 or -80% 이상) 발생 시 별도 알림

    • 문제 상황을 더 빠르게 캐치

다른 업무에 적용한다면?

이 패턴은 대용량 데이터 분석이 필요한 모든 업무에 적용 가능해요:

  • 재고 관리 리포팅

  • 고객 문의 트렌드 분석

  • 마케팅 캠페인 성과 분석

핵심은 '스프레드시트 한계 → CSV 파일 저장 → Python 분석' 이 흐름만 이해하면 됩니다.

도움이 필요한 부분

  • BigQuery API 연동 시 인증 설정이 복잡할 것 같은데, 이 부분을 Claude와 함께 진행할 예정

  • 주간/월간 트렌드 시각화를 matplotlib으로 할지, plotly로 할지 고민 중


재사용 가능한 프롬프트

프롬프트 1: 요구사항 명확화

/clarify "[자동화하고 싶은 반복 업무]"

예시:
/clarify "일자별 실적 리포팅 자동화"
/clarify "주간 보고서 작성"
/clarify "고객 문의 메일 분류"

활용 팁:

  • /clarify 명령어를 실행하면 6가지 질문이 자동으로 나옵니다

  • 한 번에 하나씩 답변하세요

  • 모든 질문이 끝나면 Task 정의서(docs/_clarify/)가 자동 생성됩니다


프롬프트 2: CSV 데이터 로딩 (한글 깨짐 방지)

"CSV 파일을 pandas로 로드하고 싶어.
파일 경로는 [파일 경로]이고,
한글 컬럼명이 깨지지 않게 해줘.
필요한 컬럼만 추출하고 싶은데, 컬럼은 [컬럼1, 컬럼2, 컬럼3]이야."

결과 예시:

import pandas as pd

df = pd.read_csv(
    'data/sales.csv',
    encoding='utf-8-sig',
    usecols=['날짜', '상품명', '매출액']
)

프롬프트 3: 전일 대비 증가율 계산

"전일 대비 매출 증가율을 계산하는 pandas 코드를 만들어줘.

- 데이터: product_code, product_name, brand_name, gmv (매출)
- 계산식: (전일 매출 - 전전일 매출) / 전전일 매출 × 100
- 결과: 증가율 기준 TOP 5 추출"

프롬프트 4: Slack 메시지 전송

"Slack Webhook으로 메시지를 보내고 싶어.
Webhook URL은 환경변수에서 가져오고,
메시지는 Markdown 형식으로 예쁘게 포맷팅 해줘.

메시지 내용:
- 제목: 일자별 실적 리포트
- 내용: [내용 딕셔너리]
- 구분선으로 섹션 나누기"

1개의 답글

뉴스레터 무료 구독

👉 이 게시글도 읽어보세요