5.0 KiB
5.0 KiB
tags
| tags | ||||||
|---|---|---|---|---|---|---|
|
51123 구 IP 하드코딩과 런타임 SSOT 불일치 이슈
상위 원칙
- Infra Project Identity
- Core Infrastructure Principles
- Operational Guardrails
- 공통 작성 원칙:
/home/admin/0_VALUE/02_Governance/writing-principles.md
관련 문서
문제 정의
- 2026-03-09 현재 23 서버(51123)의 실제 운영 IP는
192.168.0.100/24이다. - 그러나 일부 운영 설정과 코드 기본값에는 과거 IP
192.168.219.45가 아직 남아 있다. - 이 상태는 "문서가 오래됨" 수준의 문제가 아니라, 환경변수 누락 또는 fallback 경로 진입 시 서비스가 과거 주소로 접속을 시도할 수 있는 런타임 SSOT 불일치다.
확인된 사실
1. 현재 23 서버 실주소
- 호스트명:
robeing-brains - NIC:
enp6s0 - IPv4:
192.168.0.100/24 - 기본 게이트웨이:
192.168.0.1
2. 현재 SSOT에 반영된 운영 기준값
/home/admin/infra-config/runtime.envHOST_51123=192.168.0.100ROBEING_DEFAULT_HOST=192.168.0.100MONITOR_URL=http://192.168.0.100:9024
/home/admin/infra-config/secrets.envROBEING_MONITOR_DATABASE_URL=postgresql://robeings:robeings@192.168.0.100:5432/main_db
3. 과거 IP 192.168.219.45가 남아 있는 실행 경로
auth-server/app/providers/gmail_passport.pyDATABASE_URL기본값이192.168.219.45:5432
robeing/skill-email/docker-compose.ymlAUTH_SERVER_URLfallback이http://192.168.219.45:9000
robeing/skill-calendar/docker-compose.ymlDATABASE_URLfallback이192.168.219.45:5432
robeing/skill-calendar/services/google_calendar_service.pyDATABASE_URL기본값이192.168.219.45:5432
fluent-bit/data-prepper/pipelines.yaml- OpenSearch 호스트가
http://192.168.219.45:9200
- OpenSearch 호스트가
robeing/admin-dashboard/backend/services/system_service.py- 서버 간 fallback 주소가
192.168.219.45
- 서버 간 fallback 주소가
ivada_project/robeing-monitor/*- 구 경로 쪽
DATABASE_URL기본값이 여전히192.168.219.45:5432
- 구 경로 쪽
왜 문제인가
- 현재는 일부 서비스가
runtime.env를 먼저 읽어 우연히 정상 동작할 수 있다. - 그러나 새 컨테이너, 누락된 env, 임시 실행, 개별 스크립트, 테스트 경로에서는 과거 IP fallback이 다시 살아날 수 있다.
- 즉 장애가 "지금은 안 보이는 상태"일 뿐이고, 재배포나 복구 시점에 같은 문제가 재발할 조건이 남아 있다.
직접 원인
- 23 서버 IP 기준이
infra-config/runtime.env로 단일화되기 전에, 서비스별 코드 기본값과 compose fallback에 과거 주소가 개별적으로 박혀 있었다.
근본 원인
- 서버 주소를 코드/컨테이너/문서마다 별도로 들고 있던 구조 때문에, SSOT가 생긴 뒤에도 기존 fallback과 하드코딩이 제거되지 않았다.
근본 해결 기준
- 51123 주소는
/home/admin/infra-config/runtime.env의HOST_51123=192.168.0.100만 기준값으로 사용한다. - 코드 기본값과 compose fallback에 IP literal을 직접 넣지 않는다.
- 서비스는
HOST_51123,DATABASE_URL,AUTH_SERVER_URL,MONITOR_URL처럼 의미 있는 환경변수만 참조한다. - 과거 IP
192.168.219.45는 운영 실행 경로에서 0건이어야 한다.
우회가 아닌 해결 조건
192.168.219.45를 새 값과 병행 허용하지 않는다.- "안 되면 과거 IP로 재시도" 같은 폴백을 추가하지 않는다.
- 남아 있는 하드코딩/기본값을 제거하고, SSOT 값만 주입되도록 구조를 정리한다.
우선 정리 대상
- 런타임 env 없이도 실행될 수 있는 코드 기본값
docker-compose.yml의 fallback 주소- 서버 간 호출 URL, DB URL, Neo4j/OpenSearch 같은 인프라 의존값
- 구 경로(
ivada_project)처럼 현재 운영과 분리되지 않은 잔존 실행본
완료 판단 기준
- 실행 경로 파일에서
192.168.219.45검색 결과가 0건이다. - 23 서버 기동 서비스가 모두
192.168.0.100또는 명시 env만 참조한다. - 24 서버에서 23 서버 DB/인증/모니터 호출을 실제로 재검증해 과거 IP 경로가 다시 나오지 않는다.