세팅할 때마다 "이 값이 어디 가는 거지" 를 코드에서 되짚고 있었다. AGENTS.md 에 설정 파일 지도를 넣고, 흩어져 있던 cp 명령을 거기 한 곳으로 모았다. 두는 곳 — 템플릿이 전부 짝을 갖는다(7개 확인). 루트 .env ← 백엔드가 읽는 유일한 .env solution/backend/config/ config.local.toml DB·JWT·포트·CORS solution/backend/config/ config.test.toml 없으면 pytest 가 import 단계에서 죽는다 solution/frontend/ .env VITE_* (API :9800) admin/frontend/ .env VITE_* (API :9801) nginx/ site.conf 없으면 Docker 가 디렉토리를 만든다 두지 않는 곳과 그 이유도 같이 적었다 — solution/backend(dotenv 가 루트를 본다), admin/backend(PYTHONPATH 로 solution 것을 쓴다), solution/site, solution/shared. solution/site/.env.example 을 지웠다. "여기엔 아무것도 없다" 는 걸 알리려고 둔 파일인데, .env.example 은 이 레포에서 "복사해서 채워라" 라는 뜻이라 정반대 신호를 준다. 그 설명은 지도의 '두지 않는 곳' 으로 옮겼다. 그 밖에 - config.test.toml.example 의 server_name 이 O2oSiteServerTest 로 남아 있었다. - config.local.toml.example 에 생략 가능한 [ExternalApiConfig] 필드 셋을 주석으로 적었다. - .gitignore 의 *.toml 이 레포 전체를 덮는다는 것과, 그래서 pyproject.toml 같은 걸 추가하면 조용히 무시된다는 것을 규칙 옆에 적었다.
61 lines
2.6 KiB
Plaintext
61 lines
2.6 KiB
Plaintext
# 환경변수: 실제 값(.env)은 커밋하지 않는다. 템플릿(.env.example)만 커밋한다.
|
|
.env
|
|
.env.*
|
|
!.env.example
|
|
|
|
# 설정: 시크릿 포함이라 커밋하지 않는다. *.example 만 커밋한다.
|
|
# ★ 레포 전체의 *.toml 이 대상이다. toml 은 DB 비밀번호·JWT 키가 들어가는 파일이라
|
|
# 안전한 쪽으로 넓게 잡았다 — 대신 pyproject.toml 같은 걸 새로 추가하면 조용히
|
|
# 무시되므로, 그때는 여기에 예외(!)를 명시적으로 적는다.
|
|
*.toml
|
|
!*.toml.example
|
|
|
|
# Python 바이트코드/캐시 — 절대 커밋하지 않는다.
|
|
__pycache__/
|
|
*.py[cod]
|
|
*$py.class
|
|
.pytest_cache/
|
|
|
|
# 가상환경
|
|
.venv/
|
|
venv/
|
|
|
|
# 생성물(FastAPI OpenAPI 스펙). 필요 시 재생성한다.
|
|
solution/backend/openapi.json
|
|
|
|
# 발행 payload 는 solution/site/payloads/.gitignore 가 단일 출처다 — 여기에 겹쳐 쓰지 않는다.
|
|
|
|
# 정적 산출물 — 운영에서는 Docker named volume(site-out)에 있고, 로컬에서 직접 구우면
|
|
# 여기 생긴다. 어느 쪽이든 payload 로 다시 굽는 재생성물이라 git 이 관리할 대상이 아니다.
|
|
solution/site/out/
|
|
solution/site/dist/
|
|
admin/dist/
|
|
|
|
# nginx 설정: 서버마다 다르므로 실제 파일은 커밋하지 않는다. 템플릿만 커밋한다.
|
|
# ★ compose(docker-compose.yml:224)가 ./nginx/site.conf 를 bind mount 한다 —
|
|
# 파일이 없으면 Docker 가 그 자리에 **디렉토리를 만들어** nginx 가 설정 없이 뜬다.
|
|
# 클론 직후 반드시: cp nginx/site.conf.example nginx/site.conf
|
|
nginx/site.conf
|
|
!nginx/site.conf.example
|
|
|
|
# ── npm 워크스페이스(루트가 solution/{shared,front,site} + admin 을 묶는다) ──
|
|
node_modules/
|
|
dist/
|
|
.ssr-dist/
|
|
*.tsbuildinfo
|
|
|
|
# OS
|
|
.DS_Store
|
|
|
|
# ── 에이전트 지침은 커밋한다 ──────────────────────────────────────────────
|
|
# AGENTS.md / CLAUDE.md 는 팀과 모든 에이전트가 공유하는 규약이라 반드시 커밋한다.
|
|
# 커밋 안 하면 클론한 사람이 "배포 후 republish_all.py 필수" 같은 함정을 전달받지 못한다.
|
|
#
|
|
# ★ `!CLAUDE.md` 를 지우지 말 것. 이 머신의 ~/.gitignore_global 이 CLAUDE.md 를 전역으로
|
|
# 무시하고 있어서, 레포 쪽에서 명시적으로 되살리지 않으면 심볼릭 링크가 커밋되지 않는다.
|
|
# (전역 설정은 사람마다 다르므로 레포가 스스로를 지킨다.)
|
|
!CLAUDE.md
|
|
|
|
# 개인용 오버라이드는 레포가 아니라 ~/.claude/CLAUDE.md 나 .claude/settings.local.json 에 둔다.
|
|
.claude/settings.local.json
|