# πŸ”§ ν™˜κ²½ λ³€μˆ˜ μ„€μ • κ°€μ΄λ“œ ## πŸ“ Flask λ°±μ—”λ“œ `.env` 파일 μ„€μ • ### ⚠️ μ€‘μš”μ‚¬ν•­ **`SECRET_KEY`λŠ” Flask λ°±μ—”λ“œμ˜ `.env` νŒŒμΌμ— μ„€μ •ν•©λ‹ˆλ‹€!** ``` Flask λ°±μ—”λ“œ: /home/ckh08045/Tr_Code/.env ← SECRET_KEY 여기에! TWA ν”„λ‘ νŠΈμ—”λ“œ: /home/ckh08045/Tr_Code/twa-frontend/.env ← SECRET_KEY λΆˆν•„μš” ``` --- ## πŸš€ λΉ λ₯Έ μ„€μ • (3단계) ### 1단계: .env 파일 생성 ```bash cd /home/ckh08045/Tr_Code cp env.example .env ``` ### 2단계: SECRET_KEY 생성 ν„°λ―Έλ„μ—μ„œ μ‹€ν–‰: ```bash python -c "import secrets; print(secrets.token_hex(32))" ``` 좜λ ₯ μ˜ˆμ‹œ: ``` a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef12345 ``` ### 3단계: .env 파일 μˆ˜μ • μƒμ„±ν•œ `.env` νŒŒμΌμ„ μ—΄μ–΄μ„œ `SECRET_KEY` 값을 λ³€κ²½: ```bash # λ³€κ²½ μ „ SECRET_KEY=dev-secret-key-change-in-production # λ³€κ²½ ν›„ (μœ„μ—μ„œ μƒμ„±ν•œ ν‚€ μ‚¬μš©) SECRET_KEY=a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef12345 ``` --- ## πŸ“ .env 파일 전체 μ˜ˆμ‹œ **파일 μœ„μΉ˜**: `/home/ckh08045/Tr_Code/.env` ```bash # Supabase μ„€μ • (Docker 기반) SUPABASE_URL=http://localhost:8000 SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoiYW5vbiIsImlzcyI6InN1cGFiYXNlIiwiaWF0IjoxNzU4NTUxNjY2LCJleHAiOjQxMDI0NDQ4MDB9.jMCGL3Q-N2o_l7JQE_HrO7Uoct86CMgLsVxpabisG4I # Flask μ„Έμ…˜ λ³΄μ•ˆ ν‚€ (λ°˜λ“œμ‹œ λ³€κ²½!) SECRET_KEY=a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef12345 # Kong Basic Auth (선택사항 - μ‚¬μš©ν•˜μ§€ μ•ŠμœΌλ©΄ λΉ„μ›Œλ‘κΈ°) SUPABASE_BASIC_USER= SUPABASE_BASIC_PASSWORD= # Flask μ„œλ²„ 포트 PORT=5000 ``` --- ## βœ… μ„€μ • 확인 ### 1. .env 파일 쑴재 확인 ```bash ls -la /home/ckh08045/Tr_Code/.env ``` ### 2. SECRET_KEY μ„€μ • 확인 ```bash grep SECRET_KEY /home/ckh08045/Tr_Code/.env ``` **μ˜¬λ°”λ₯Έ μ„€μ •**: ``` SECRET_KEY=a1b2c3d4e5f6789012345678901234567890abcdef1234567890abcdef12345 ``` **잘λͺ»λœ μ„€μ •** (κΈ°λ³Έκ°’ κ·ΈλŒ€λ‘œ): ``` SECRET_KEY=dev-secret-key-change-in-production ← λ³€κ²½ ν•„μš”! ``` ### 3. Flask μ•± μ‹€ν–‰ ```bash cd /home/ckh08045/Tr_Code python app.py ``` 정상 μ‹€ν–‰ μ‹œ 좜λ ₯: ``` * Running on http://0.0.0.0:5000 ``` --- ## πŸ” λ³΄μ•ˆ 체크리슀트 ### 개발 ν™˜κ²½ - [x] `.env` 파일 생성 - [x] `SECRET_KEY` κ°’ λ³€κ²½ (κΈ°λ³Έκ°’ μ‚¬μš© κΈˆμ§€) - [x] `SUPABASE_URL` 확인 (Docker: `http://localhost:8000`) - [x] `.env` 파일이 `.gitignore`에 ν¬ν•¨λ˜μ–΄ μžˆλŠ”μ§€ 확인 ### ν”„λ‘œλ•μ…˜ ν™˜κ²½ - [ ] `SECRET_KEY`λ₯Ό κ°•λ ₯ν•œ 랜덀 ν‚€λ‘œ λ³€κ²½ - [ ] `SUPABASE_URL`을 ν”„λ‘œλ•μ…˜ URL둜 λ³€κ²½ - [ ] `SUPABASE_ANON_KEY`λ₯Ό ν”„λ‘œλ•μ…˜ ν‚€λ‘œ λ³€κ²½ - [ ] `.env` 파일 κΆŒν•œ μ„€μ • (`chmod 600 .env`) - [ ] ν™˜κ²½ λ³€μˆ˜λ₯Ό μ‹œμŠ€ν…œ ν™˜κ²½ λ³€μˆ˜λ‘œ μ„€μ • (선택사항) --- ## πŸ› οΈ νŠΈλŸ¬λΈ”μŠˆνŒ… ### 문제: "μ„Έμ…˜μ΄ μœ μ§€λ˜μ§€ μ•ŠμŒ" **원인**: `SECRET_KEY`κ°€ μ„€μ •λ˜μ§€ μ•Šμ•˜κ±°λ‚˜ κΈ°λ³Έκ°’ μ‚¬μš© **ν•΄κ²°**: ```bash # 1. SECRET_KEY 확인 grep SECRET_KEY /home/ckh08045/Tr_Code/.env # 2. μƒˆ ν‚€ 생성 python -c "import secrets; print(secrets.token_hex(32))" # 3. .env νŒŒμΌμ— μ„€μ • nano /home/ckh08045/Tr_Code/.env ``` ### 문제: "Supabase μ—°κ²° μ‹€νŒ¨" **원인**: `SUPABASE_URL` λ˜λŠ” `SUPABASE_ANON_KEY` 였λ₯˜ **ν•΄κ²°**: ```bash # 1. Docker Supabase μƒνƒœ 확인 docker ps | grep supabase # 2. Kong Gateway 포트 확인 (κΈ°λ³Έ 8000) curl http://localhost:8000/rest/v1/ # 3. .env νŒŒμΌμ—μ„œ URL 확인 grep SUPABASE_URL /home/ckh08045/Tr_Code/.env ``` ### 문제: ".env νŒŒμΌμ„ 찾을 수 μ—†μŒ" **원인**: 잘λͺ»λœ μœ„μΉ˜μ— .env 파일 생성 **ν•΄κ²°**: ```bash # Flask λ°±μ—”λ“œ λ””λ ‰ν† λ¦¬λ‘œ 이동 cd /home/ckh08045/Tr_Code # .env 파일 생성 cp env.example .env # 파일 μœ„μΉ˜ 확인 (app.py와 같은 디렉토리에 μžˆμ–΄μ•Ό 함) ls -la | grep -E "(app.py|.env)" ``` --- ## πŸ“š μ°Έκ³  ### Flask와 TWA ν”„λ‘ νŠΈμ—”λ“œμ˜ ν™˜κ²½ λ³€μˆ˜ 비ꡐ | ν•­λͺ© | Flask λ°±μ—”λ“œ | TWA ν”„λ‘ νŠΈμ—”λ“œ | |------|-------------|---------------| | 파일 μœ„μΉ˜ | `/home/ckh08045/Tr_Code/.env` | `/home/ckh08045/Tr_Code/twa-frontend/.env` | | SECRET_KEY | βœ… **ν•„μˆ˜** | ❌ λΆˆν•„μš” | | SUPABASE_URL | βœ… ν•„μˆ˜ | βœ… ν•„μš” (λ‹€λ₯Ό 수 있음) | | SUPABASE_ANON_KEY | βœ… ν•„μˆ˜ | βœ… ν•„μš” | | PORT | βœ… 선택 | ❌ λΆˆν•„μš” | ### ν™˜κ²½ λ³€μˆ˜ λ‘œλ“œ 방식 Flask (`app.py`): ```python from dotenv import load_dotenv load_dotenv() # .env νŒŒμΌμ„ μžλ™μœΌλ‘œ λ‘œλ“œ # ν™˜κ²½ λ³€μˆ˜ μ‚¬μš© SECRET_KEY = os.environ.get("SECRET_KEY", "default-key") ``` Vue.js (`twa-frontend`): ```javascript // .env 파일의 VUE_APP_* λ³€μˆ˜λ§Œ μžλ™ λ‘œλ“œ const apiUrl = process.env.VUE_APP_API_URL ``` --- ## πŸ“ž 문의 ν™˜κ²½ λ³€μˆ˜ μ„€μ • κ΄€λ ¨ λ¬Έμ˜λŠ” μ‹œμŠ€ν…œ κ΄€λ¦¬μžμ—κ²Œ μ—°λ½ν•˜μ„Έμš”. **뢀산ꡐ톡곡사 μ°¨λŸ‰μ²˜**