Repository navigation
fix(infra): compose·.env.example 이 settings.py 기본값을 덮어쓰지 않게 - #248
Merged
Merged
Conversation
PR #246 에서 LLM_PRO_TIMEOUT_SEC 를 30→60 으로 올렸는데 운영에 도달하지 못했다. docker-compose.yml 의 `${LLM_PRO_TIMEOUT_SEC:-30.0}` 과 운영 .env 의 30.0 이 코드 기본값을 덮고 있었다. 그래서 웹 이력서 재분석이 92초(=30초×3) 만에 또 타임아웃으로 죽었다 — 60초를 실제로 적용하니 37.4초에 성공했다. 30초로는 구조적으로 불가능한 작업이었고, 그걸 고친 PR 이 조용히 무효가 되어 있었다. 기본값이 세 군데(settings.py / compose / .env)에 흩어져 있고 코드가 제일 약한 구조가 원인이다. ai 서비스 32개 키 중 24개가 compose 에 기본값을 중복으로 갖고 있었다. - docker-compose.yml: ai 환경변수를 리스트 형태로 바꾸고, 튜닝 값은 이름만 적어 **전달만** 한다(`- LLM_PRO_TIMEOUT_SEC`). .env 에 있으면 그 값이 가고 없으면 아무것도 안 가서 코드 기본값이 산다. 미설정이 진짜 미설정으로 전달되는 것은 서버에서 `docker compose run` 으로 실측 확인했다(빈 문자열이 아님). 값을 유지한 것은 컨테이너 토폴로지·이름 변환·로컬 기동용 기본값뿐이다. - .env.example: 코드 기본값과 같은 17개 키를 주석 처리. deploy-app.yml 이 `KEY=값` 줄을 운영 .env 에 영구 복사하므로, 여기 적는 순간 코드 기본값이 영원히 가려진다. - .env.example 에 EMBEDDING_PROVIDER=gemini 추가. 코드 기본값이 mock 이라 신규 배포가 **가짜 임베딩으로 조용히 뜨는** 지뢰였다(현재 운영은 누군가 .env 에 수동으로 넣어둔 덕에 정상). - ai/tests/test_compose_defaults.py: 중복 기본값·빈 문자열 fallback·오타 키를 CI 에서 차단. 세 가지 회귀를 실제로 잡는지 확인했다. - docs/environment.md §0 에 우선순위와 예외 규칙 명시.
This was referenced Sep 27, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
요약
PR #246 의 핵심 변경이 운영에 도달하지 못하고 있었습니다. 그 원인을 구조적으로 막습니다.
발견 경위
#246 이 머지·배포된 뒤, 9/21부터 FAILED 로 남아 있던 웹 이력서를 새 재분석 API 로 복구하려 했습니다. 또 실패했습니다.
92초 = 30초 × 3. #246 에서 60초로 올렸는데 30초가 그대로 살아 있었습니다.
운영
.env를 60.0 으로 고치고 다시 돌리니:analyze.document실제로 37.4초가 필요했습니다. 30초로는 구조적으로 불가능했고, 그걸 고친 PR 이 조용히 무효가 되어 있었습니다. 사람 눈으로는 잡을 수 없는 종류의 사고입니다.
ai/CLAUDE.md §9는 "settings.py가 single source of truth" 라고 적혀 있지만, ai 서비스 32개 키 중 24개가 compose 에 기본값을 중복으로 갖고 있었습니다.변경 내용
1.
docker-compose.yml— ai 환경변수를 리스트 형태로 바꾸고 튜닝 값은 이름만 적어 전달만 합니다.미설정이 빈 문자열이 아니라 진짜 미설정으로 전달되는지 서버에서
docker compose run으로 실측 확인했습니다 (${VAR:-}였다면 빈 문자열이 코드 기본값을 덮습니다).값을 유지한 것은
settings.py가 알 수 없는 것들뿐입니다 — 컨테이너 호스트명(http://backend:38010),MINIO_ROOT_USER→S3_ACCESS_KEY이름 변환, 비면 로컬 기동이 막히는 개발용 기본값.2.
.env.example— 코드 기본값과 같은 17개 키를 주석 처리했습니다.deploy-app.yml이KEY=값줄을 운영.env에 영구 복사하므로, 여기 적는 순간 코드 기본값이 영원히 가려집니다.3.
EMBEDDING_PROVIDER=gemini추가 — 조사 중 발견한 별개 지뢰입니다. 루트.env.example에 이 키가 아예 없어서, 신규 배포는 코드 기본값mock으로 뜹니다. 즉 가짜(해시 기반) 임베딩으로 조용히 기동하고 RAG 검색이 무의미해집니다. 현재 운영이 정상인 건 누군가.env에 수동으로 넣어둔 덕입니다.4.
ai/tests/test_compose_defaults.py— CI 가드. 세 가지를 막습니다:settings.py기본값을 중복 선언${VAR:-}빈 문자열 fallbacksettings.py에 없는 키를 전달 (오타·죽은 설정)가드가 실제로 잡는지 일부러 되돌려 확인했습니다 — 3건 모두 검출.
5.
docs/environment.md §0— 우선순위와 예외 규칙 명시.테스트
uv run pytest416 passed,black/flake8cleandocker compose config --env-file .env로 새 compose 해석 결과 대조 — 의도한 차이만 발생운영
.env는 deploy 가 추가만 하고 삭제하지 않으므로 낡은 값이 그대로 남습니다. 배포 후 아래를 손으로 지워야 코드 기본값이 실제로 삽니다:DEEPGRAM_TIMEOUT_SECEMBEDDING_PROVIDER=gemini와 시크릿 4개는 유지해야 합니다..env를 지우면 구 compose 의:-30.0이 되살아나 오히려 후퇴합니다. 반드시 머지→배포→정리 순서로 진행해야 합니다.리뷰어 체크포인트
COMPOSE_OWNED화이트리스트(8개)가 적절한지 — 여기 있는 키만 compose 가 기본값을 가집니다..env.example주석 처리로 신규 배포의 기본값이 바뀝니다(코드 기본값으로). 기존 운영은 영향 없습니다.🤖 Generated with Claude Code