# CLAUDE.md (핡심 μš”μ•½) ## πŸ“Œ 이 파일의 μ—­ν•  **전체 ꡬ쑰 & μ§„ν–‰ μƒν™©λ§Œ 기둝** μƒμ„Έν•œ 지침은 별도 ν•˜λ„€μŠ€ λ¬Έμ„œ μ°Έμ‘°: - 배포 μ •μ±… β†’ `DEPLOYMENT_HARNESS.md` - Nginx μ„€μ • β†’ `NGINX_HARNESS.md` - λΉŒλ“œ 검증 β†’ `BUILD_VALIDATION_HARNESS.md` - ν”„λ‘œμ νŠΈ 정보 β†’ `docs/INDEX.md` --- ## 🎯 ν”„λ‘œμ νŠΈ μƒνƒœ (2026-07-08) ### βœ… μ™„λ£Œ ν•­λͺ© **Phase 1-9, Phase 13: API-First λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ μ™„λ£Œ** - βœ… WebAssembly λ Œλ” λͺ¨λ“œ 적용 - βœ… 16개 Blazor νŽ˜μ΄μ§€ λ§ˆμ΄κ·Έλ ˆμ΄μ…˜ - βœ… FastEndpoints 톡일 (PhaseII 13) - βœ… JWT 토큰 κ°œμ„  (Access/Refresh 뢄리) - βœ… E2E ν…ŒμŠ€νŠΈ 20/20 톡과 **Phase 8: λ¬΄μƒνƒœ μ•„ν‚€ν…μ²˜** - βœ… Admin UI WebAssembly CSR 적용 - βœ… μ„œλ²„ Circuit λ©”λͺ¨λ¦¬ 0 - βœ… λ™μ‹œ 접속 λ¬΄μ œν•œ ν™•μž₯μ„± --- ## πŸš€ ν˜„μž¬ 배포 μ •μ±… ### Green-Blue 배포 (무쀑단) **ν”„λ‘œμ„ΈμŠ€:** ``` λΉŒλ“œ & ν…ŒμŠ€νŠΈ ↓ publish (Web + Proxy) ↓ deploy_gb.sh μ‹€ν–‰ ↓ 사전 검증 (엄격) β”œβ”€ ν—¬μŠ€ 체크 (6단계) β”œβ”€ API μ—”λ“œν¬μΈνŠΈ └─ 둜그 였λ₯˜ 확인 ↓ 포트 μ „ν™˜ (무쀑단) ↓ E2E ν…ŒμŠ€νŠΈ ↓ 배포 μ™„λ£Œ ``` **검증 κΈ°μ€€:** - 배포 버전 문제 β†’ μžλ™ 쀑단 + λ‘€λ°± - λͺ¨λ“  검증 톡과 β†’ 배포 μ§„ν–‰ - 배포 μ‹€νŒ¨ β†’ 이전 버전 μžλ™ 볡ꡬ --- ## πŸ“ Nginx μ„€μ • (μƒλŒ€κ²½λ‘œ) ### 포트 λ§€ν•‘ ``` 곡개: https://www.taxbaik.com/ ↓ (Nginx) ν”„λ‘μ‹œ: http://127.0.0.1:5001/ ↓ (ν”„λ‘μ‹œκ°€ 읽음) ν™œμ„± 포트: /home/kjh2064/taxbaik_port ↓ μ‹€μ œ μ•±: http://127.0.0.1:{5003|5004} ``` ### ν•„μˆ˜ κ·œμΉ™ ``` βœ… proxy_pass http://127.0.0.1:5001/; (μŠ¬λž˜μ‹œ ν•„μˆ˜) βœ… Nginx 섀정은 μ ˆλŒ€ λ³€κ²½ μ•ˆ 함 (λ°°ν¬λ§ˆλ‹€) βœ… 포트 5001은 ν”„λ‘μ‹œ μ „μš© (μ•± 직접 X) ``` --- ## πŸ”§ 개발 핡심 μ§€μΉ¨ ### μž…λ ₯ 검증 (ν΄λΌμ΄μ–ΈνŠΈ + μ„œλ²„) **ν΄λΌμ΄μ–ΈνŠΈ:** - μ‹€μ‹œκ°„ λ§ˆμŠ€ν‚Ή + ν”Όλ“œλ°± - μœ νš¨μ„± 검사 ν›„ 제좜 차단 **μ„œλ²„:** - DTO DataAnnotations - μ„œλΉ„μŠ€ 둜직 검증 - λͺ…ν™•ν•œ μ—λŸ¬ λ©”μ‹œμ§€ ### λ©”μ‹œμ§€ 길이 ν‘œμ€€ ``` μ΅œμ†Œ: 10자 (λ„ˆλ¬΄ 짧은 λ‚΄μš© λ°©μ§€) μ΅œλŒ€: 5000자 (DB + μ„±λŠ₯) ``` ### ν•œκ΅­ μ „ν™”λ²ˆν˜Έ ``` μ •κ·œμ‹: ^(0(2|3[1-3]|4[1-4]|...|70|50[5-9])\d{7,8}|0\d{9,10})$ κ³ μ •μ „ν™”: 02-123-4567 (4-3-4) νœ΄λŒ€ν°: 010-1234-5678 (3-4-4) ``` --- ## πŸ”„ 배포 절차 ### CI/CD μžλ™ 배포 ```bash 1. git push master ↓ 2. Gitea Actions trigger (.gitea/workflows/deploy.yml) ↓ 3. Build β†’ Test β†’ Publish ↓ 4. SSH: deploy_gb.sh μ‹€ν–‰ ↓ 5. 사전 검증 (DEPLOYMENT_HARNESS.md μ°Έκ³ ) ↓ 6. 성곡 β†’ Telegram μ•Œλ¦Ό μ‹€νŒ¨ β†’ μžλ™ λ‘€λ°± + μ•Œλ¦Ό ``` ### 배포 토큰 - **Gitea Token**: `GITEA_TOKEN_TAXBAIK` ν™˜κ²½λ³€μˆ˜ - **Push λͺ…λ Ή**: `git push http://gitea.taxbaik.com/kjh2064/taxbaik.git master` --- ## βš™οΈ ν™˜κ²½ λ³€μˆ˜ (배포) **ν•„μˆ˜ μ„€μ • (deploy_gb.sh):** ```bash ASPNETCORE_ENVIRONMENT=Production ASPNETCORE_URLS=http://127.0.0.1:${TARGET_PORT} ConnectionStrings__Default=Host=localhost;Database=taxbaikdb;... ApiClient__BaseUrl=http://127.0.0.1:${TARGET_PORT}/api/ ``` **λˆ„λ½ μ‹œ 배포 μ‹€νŒ¨:** "Missing connection string" β†’ μžλ™ λ‘€λ°± --- ## πŸ“Š 기술 μŠ€νƒ | 계측 | 기술 | |------|------| | **μ„œλ²„** | ASP.NET Core 10 | | **DB** | PostgreSQL 18 + Dapper | | **ν΄λΌμ΄μ–ΈνŠΈ** | Blazor WebAssembly | | **UI** | MudBlazor | | **배포** | Green-Blue (무쀑단) | | **Nginx** | ν”„λ‘μ‹œ (정적 μ„€μ •) | | **CI/CD** | Gitea Actions | --- ## πŸ“ μ€‘μš” 파일 | 파일 | λͺ©μ  | |------|------| | `deploy_gb.sh` | Green-Blue 배포 | | `scripts/validate-deploy.sh` | 사전 검증 | | `/etc/nginx/sites-available/taxbaik-domains.conf` | Nginx μ„€μ • | | `.gitea/workflows/deploy.yml` | CI/CD νŒŒμ΄ν”„λΌμΈ | | `docs/DEPLOYMENT_HARNESS.md` | 배포 μ •μ±… 상세 | | `docs/NGINX_HARNESS.md` | Nginx μ„€μ • 상세 | --- ## πŸ†˜ κΈ΄κΈ‰ 상황 ### 배포 μ‹€νŒ¨ (μžλ™ λ‘€λ°±) ```bash # ν˜„μž¬ 포트 확인 cat /home/kjh2064/taxbaik_port # 둜그 확인 tail -100 /home/kjh2064/deployments/taxbaik_*/web_*.log ``` ### μˆ˜λ™ λ‘€λ°± ```bash # 이전 포트둜 볡ꡬ echo "5003" > /home/kjh2064/taxbaik_port sudo systemctl reload nginx ``` --- ## πŸ“ž μ°Έκ³  λ¬Έμ„œ - **배포**: `docs/DEPLOYMENT_HARNESS.md` - **Nginx**: `docs/NGINX_HARNESS.md` - **λΉŒλ“œ**: `docs/BUILD_VALIDATION_HARNESS.md` - **ν”„λ‘œμ νŠΈ**: `docs/INDEX.md` - **μ—”μ§€λ‹ˆμ–΄λ§**: `docs/ENGINEERING_HARNESS.md` --- **μ΅œμ’… μ—…λ°μ΄νŠΈ: 2026-07-08**