# v2: GemEgg 예실관리 - 개발 환경 설정 ## 3가지 구현 환경 이 프로젝트는 Node.js, Python, Google Apps Script 세 가지로 구현합니다. ## 1. Node.js 구현 (pnpm) ### 프로젝트 초기화 ```bash cd project/nodejs pnpm init pnpm add googleapis csv-parse dotenv ``` ### package.json ```json { "name": "gemegg-worksheet", "version": "1.0.0", "description": "GemEgg Budget vs Actual Worksheet Automation", "main": "src/index.js", "type": "module", "scripts": { "analyze": "node src/analyze-sheet.js", "setup": "node src/setup-sheets.js", "import": "node src/import-csv.js" }, "dependencies": { "googleapis": "^144.0.0", "dotenv": "^16.3.1", "csv-parse": "^5.5.2" } } ``` ### 테스트 실행 ```bash $ node src/analyze-sheet.js === Spreadsheet Info === Title: 予算・中期事業計画_v2_for_gemegg === Sheets === --- Sheet: 予算 (gid: 0) --- --- Sheet: 予実管理 (gid: 507743709) --- --- Sheet: 予実分析 (gid: 1958484510) --- --- Sheet: SC業務整理 (gid: 903242189) --- --- Sheet: 修正ログ (gid: 1284476245) --- --- Sheet: サマリ (gid: 356819653) --- ``` ## 2. Python 구현 (venv) ### 가상환경 설정 ```bash cd project/python python3 -m venv venv source venv/bin/activate pip install -r requirements.txt ``` ### requirements.txt ``` google-api-python-client==2.111.0 google-auth-httplib2==0.2.0 google-auth-oauthlib==1.2.0 pandas==2.1.4 python-dotenv==1.0.0 ``` ### analyze_sheet.py ```python from google.oauth2 import service_account from googleapiclient.discovery import build KEY_PATH = "../../service-account-key.json" SPREADSHEET_ID = "17AUAHQQB0nZVje9QXtdISEPtMoa8RXKkuCk4R5iHbd4" def get_sheets_service(): credentials = service_account.Credentials.from_service_account_file( KEY_PATH, scopes=["https://www.googleapis.com/auth/spreadsheets"] ) return build("sheets", "v4", credentials=credentials) ``` ### 테스트 실행 ```bash $ source venv/bin/activate $ python src/analyze_sheet.py === Spreadsheet Info === Title: 予算・中期事業計画_v2_for_gemegg ``` ## 3. Google Apps Script 구현 ### 스크립트 구조 ```javascript // Code.gs const SPREADSHEET_ID = "17AUAHQQB0nZVje9QXtdISEPtMoa8RXKkuCk4R5iHbd4"; function onOpen() { const ui = SpreadsheetApp.getUi(); ui.createMenu('GemEgg予実管理') .addItem('予算シートを初期化', 'initBudgetSheet') .addItem('実績シートを初期化', 'initActualSheet') .addItem('予実シートを更新', 'updateBudgetVsActual') .addSeparator() .addItem('CSVからインポート', 'importFromCSV') .addToUi(); } ``` ### Apps Script 배포 방법 1. Google Sheet 열기 2. 확장 프로그램 > Apps Script 3. `Code.gs` 내용 붙여넣기 4. 저장 후 `onOpen` 함수 실행 ## 프로젝트 구조 ``` project/ ├── .env # 환경 변수 ├── service-account-key.json # Google 서비스 계정 키 │ ├── nodejs/ # Node.js 구현 │ ├── package.json │ ├── pnpm-lock.yaml │ ├── node_modules/ │ └── src/ │ └── analyze-sheet.js │ ├── python/ # Python 구현 │ ├── requirements.txt │ ├── venv/ # 가상환경 │ └── src/ │ └── analyze_sheet.py │ └── apps-script/ # Google Apps Script 구현 └── Code.gs ``` ## 서비스 계정 설정 ### 서비스 계정 정보 | 항목 | 값 | |------|-----| | **이메일** | gemegg@spatial-cargo-456805-u2.iam.gserviceaccount.com | | **프로젝트 ID** | spatial-cargo-456805-u2 | ### 스프레드시트 공유 설정 스프레드시트에서 서비스 계정 이메일에 **편집자** 권한 부여 필요 ## API 연동 테스트 결과 ### Node.js ``` ✅ googleapis 설치 완료 ✅ 스프레드시트 접근 성공 ✅ 시트 목록 조회 성공 ``` ### Python ``` ✅ google-api-python-client 설치 완료 ✅ 스프레드시트 접근 성공 ✅ 시트 목록 조회 성공 ``` ### Apps Script ``` ✅ Code.gs 작성 완료 ⏳ 스프레드시트에 배포 필요 ``` ## 다음 단계 v3에서는: - CSV 데이터 구조 상세 분석 - 데이터 파싱 로직 구현 - 시트 레이아웃 설계 --- **작성일**: 2025-12-05 **상태**: 완료 **다음**: v3 - CSV 파싱 및 시트 구조 설계