# 개발 환경 및 테스트 가이드 이 문서는 새 개발 환경과 CI에서 SolarPower 프로젝트를 같은 방법으로 설치하고 검증하기 위한 기준이다. 실제 Supabase 자격 증명이나 운영 서버 연결 없이도 기본 회귀 테스트를 실행할 수 있다. ## 지원 환경 - Crawler: Python 3.10 또는 3.11 - API: Python 3.11 - App: Node.js 20, npm - DB migration test: PostgreSQL 15 (`psql` 또는 Docker 사용) 프로젝트의 `.env` 파일은 설치 및 단위 테스트에 필요하지 않다. 운영 작업을 수행할 때만 별도로 주입한다. ## Crawler `crawler/requirements.in`에는 crawler, 과거 데이터 복구, 일일 통계 작업의 직접 의존성과 Python 3.10 호환 제약이 기록되어 있다. `crawler/requirements.txt`는 새 환경에서 해석하고 검증한 전체 고정 버전 목록이며 설치와 CI는 이 파일을 사용한다. ```powershell cd crawler python -m venv .venv .\.venv\Scripts\python -m pip install -r requirements.txt .\.venv\Scripts\python -m unittest discover -s tests -p "test_*.py" -v ``` Linux/macOS에서는 마지막 두 명령의 Python 경로를 `.venv/bin/python`으로 바꾼다. 외부 사이트 응답 파서 테스트는 `crawler/tests/fixtures/`의 고정 응답을 사용하므로 네트워크나 실제 계정에 의존하지 않는다. ## API server `api_server/requirements.in`은 직접 의존성의 기준이고, `api_server/requirements.txt`는 배포 및 CI가 사용하는 고정 버전 목록이다. ```powershell cd api_server python -m venv .venv .\.venv\Scripts\python -m pip install -r requirements.txt $env:SUPABASE_URL = "http://localhost:54321" $env:SUPABASE_KEY = "test-key" $env:DEBUG = "false" .\.venv\Scripts\python -m unittest discover -s tests -p "test_*.py" -v ``` 위 값은 설정 로딩을 위한 테스트용 값이며 실제 DB 연결에는 사용되지 않는다. ## App `package-lock.json`을 저장소에 포함하고 CI와 새 환경에서는 `npm ci`를 사용한다. API 주소와 현재 조회 업체는 Expo 공개 환경변수로 선택한다. 기본값은 운영 환경을 유지하며, 다른 환경에서는 `app/.env.example`을 `app/.env.local`로 복사해 값을 바꾼다. 이 값은 앱 번들에 포함되는 공개 설정이므로 인증 토큰이나 비밀번호를 넣지 않는다. | 환경변수 | 용도 | 기본값 | |---|---|---| | `EXPO_PUBLIC_API_BASE_URL` | FastAPI/Nginx 기본 URL | `https://solorpower.dadot.net` | | `EXPO_PUBLIC_COMPANY_ID` | 대시보드와 비교 화면의 업체 ID | `1` | ```powershell cd app npm ci npm run test:ci ``` 현재 `test:ci`는 Expo 웹 export를 수행하여 의존성, 번들링, 정적 산출물 생성을 함께 검사한다. 출력 디렉터리는 `app/dist/`이며 Git에서 제외된다. 앱의 네트워크 호출은 `services/solarApi.js`, 환경 선택은 `config/appConfig.js`를 통해 수행한다. 화면에 API URL이나 업체 ID를 직접 작성하지 않는다. ## DB migration 통계 쓰기 일관성 migration은 독립 PostgreSQL 15 DB에서 다음 계약 테스트로 확인한다. ```powershell $env:PGPASSWORD = "postgres" cd supabase/tests psql -h localhost -U postgres -d postgres -f stats_write_consistency_test.sql ``` 테스트 SQL이 필요한 최소 스키마를 만들고 migration을 적용한 뒤 RPC, 일별·월별 집계 trigger와 기존 데이터 보존 조건을 검증한다. ## CI 기준 `.github/workflows/ci.yml`은 push와 pull request마다 다음 작업을 독립 실행한다. 1. Crawler: Python 3.10/3.11 전체 단위·fixture 테스트 2. API: Python 3.11 전체 단위 테스트 3. Database: PostgreSQL 15 migration 계약 테스트 4. App: Node 20에서 `npm ci` 후 Expo 웹 build CI에는 운영 비밀값을 등록하지 않는다. 실제 외부 사이트, 운영 Supabase, Telegram 전송은 배포 후 별도의 운영 확인 절차로 검증한다.