# v1: GemEgg 예실관리 스프레드시트 자동화 - 프로젝트 소개 ## 프로젝트를 시작하며 이번 프로젝트는 **Google Sheets API**를 활용하여 GemEgg의 예산/실적 관리 스프레드시트를 자동화하는 시스템을 만들어보는 여정입니다. ## 의뢰 내용 클라이언트로부터 다음과 같은 요청을 받았습니다: > GemEgg용으로 만들어야 하는 스프레드시트는 다음 3가지입니다: > 1. **예산입력시트** - 예산을 직접 입력 > 2. **실적입력시트** - CSV를 그대로 붙여넣기 > 3. **예실출력시트** - ①②의 데이터를 기반으로 예실관리 시트 출력 ## 입력 데이터 분석 ### CSV 데이터 (Money Forward 손익계산서) ``` 月次推移:損益計算書_株式会社Gemegg(期間:2025年04月〜2026年03月、表示単位:円) 주요 항목: ├─ 売上高 (매출) │ └─ 売上高: 12,852,347円 (기간 누계) ├─ 売上原価 (매출원가): 0円 ├─ 売上総損益金額 (매출총이익): 12,852,347円 ├─ 販売管理費 (판매관리비) │ ├─ 役員報酬: 2,640,245円 │ ├─ 給料手当: 3,914,688円 │ ├─ 法定福利費: 1,830,146円 │ ├─ 広告宣伝費: 781,135円 │ ├─ 地代家賃: 1,082,400円 │ └─ ... (기타 항목) ├─ 営業損益金額 (영업이익): 247,703円 └─ 当期純損益金額 (당기순이익): 247,703円 ``` ### 월별 데이터 분포 | 월 | 매출 | 영업이익 | |----|------|----------| | 2025-04 | ¥1,267,940 | -¥191,830 | | 2025-05 | ¥1,123,488 | -¥60,468 | | 2025-06 | ¥2,098,684 | -¥69,391 | | 2025-07 | ¥2,055,387 | ¥86,521 | | 2025-08 | ¥1,479,307 | -¥269,117 | | 2025-09 | ¥1,456,027 | -¥35,394 | | 2025-10 | ¥1,828,281 | ¥471,997 | | 2025-11 | ¥1,534,158 | ¥306,310 | | 2025-12 | ¥9,075 | ¥9,075 | ## 프로젝트 목표 ### 생성할 시트 구조 ``` ┌─────────────────────────────────────────────────────────────────┐ │ GemEgg 予実管理シート │ ├─────────────────────────────────────────────────────────────────┤ │ │ │ [① 予算入力シート] │ │ ├─ 항목별 월간 예산 직접 입력 │ │ └─ CSV와 동일한 손익계산서 구조 │ │ │ │ [② 実績入力シート] │ │ ├─ Money Forward CSV 붙여넣기 영역 │ │ └─ 자동 파싱 및 데이터 정규화 │ │ │ │ [③ 予実出力シート] │ │ ├─ 예산 vs 실적 비교 │ │ ├─ 차이 (差異) 계산 │ │ └─ 달성률 (達成率) 표시 │ │ │ └─────────────────────────────────────────────────────────────────┘ ``` ## 기술 스택 이 프로젝트는 **3가지 구현**을 제공합니다: ### 1. Node.js 구현 | 항목 | 내용 | |------|------| | **언어** | JavaScript (ES Modules) | | **패키지 매니저** | pnpm | | **주요 라이브러리** | googleapis, csv-parse, dotenv | ### 2. Python 구현 | 항목 | 내용 | |------|------| | **언어** | Python 3.10+ | | **환경 관리** | venv | | **주요 라이브러리** | google-api-python-client, pandas | ### 3. Google Apps Script 구현 | 항목 | 내용 | |------|------| | **언어** | Google Apps Script | | **특징** | 스프레드시트 내장, 별도 서버 불필요 | | **장점** | 트리거를 통한 자동 실행 가능 | ## 프로젝트 구조 ``` 20251205-worksheet-17AUAHQQB0nZVje9QXtdISEPtMoa8RXKkuCk4R5iHbd4/ ├── gemegg_monthly_pl_2025-04_2026-03.csv # 실적 CSV 데이터 ├── project/ │ ├── .env # 환경 변수 │ ├── service-account-key.json # Google 서비스 계정 키 │ ├── nodejs/ # Node.js 구현 │ │ ├── package.json │ │ ├── pnpm-lock.yaml │ │ └── src/ │ │ ├── analyze-sheet.js # 시트 분석 스크립트 │ │ ├── setup-sheets.js # 시트 설정 스크립트 │ │ └── import-csv.js # CSV 가져오기 스크립트 │ ├── python/ # Python 구현 │ │ ├── requirements.txt │ │ └── src/ │ └── apps-script/ # Google Apps Script 구현 │ └── Code.gs └── 20251205-worksheet-gemegg-v1.md ~ v10.md # 블로그 시리즈 ``` ## 참조 스프레드시트 ### PlanitAI 원본 구조 (참고용) - **予算 시트**: 사업별 상세 예산 계획 - **予実管理 시트**: 예산 vs 실적 비교 (차이, 달성률) - **サマリ 시트**: FY/분기별 요약 ### GemEgg 대상 시트 - **Document ID**: `17AUAHQQB0nZVje9QXtdISEPtMoa8RXKkuCk4R5iHbd4` - **서비스 계정**: `gemegg@spatial-cargo-456805-u2.iam.gserviceaccount.com` ## 블로그 시리즈 로드맵 | 버전 | 주제 | 핵심 내용 | |------|------|----------| | v1 | 프로젝트 소개 | 요구사항, 데이터 분석 | | v2 | 환경 설정 | Node.js/Python/Apps Script 초기화 | | v3 | CSV 파싱 | 데이터 구조 정규화 | | v4 | 시트 구조 설계 | 예산/실적/예실 시트 레이아웃 | | v5 | 예산입력시트 구현 | 입력 폼 및 검증 | | v6 | 실적입력시트 구현 | CSV 파싱 및 매핑 | | v7 | 예실출력시트 구현 | 수식 및 계산 로직 | | v8 | 서식 적용 | 조건부 서식, 색상 | | v9 | 자동화 | 트리거, 스케줄링 | | v10 | 완성 및 배포 | 테스트, 문서화 | ## 다음 단계 v2에서는: - Node.js 프로젝트 초기화 (pnpm) - Python 프로젝트 초기화 (venv) - Google Apps Script 프로젝트 초기화 - Google Sheets API 연동 테스트 --- **작성일**: 2025-12-05 **상태**: 완료 **다음**: v2 - 개발 환경 설정