DOCS/journey/troubleshooting/260309_51123_구IP하드코딩_런타임SSOT불일치_이슈.md

5.3 KiB

tags
tags
infra
51123
ip
ssot
runtime
troubleshooting

51123 구 IP 하드코딩과 런타임 SSOT 불일치 이슈

상위 원칙

관련 문서

문제 정의

  • 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.env
    • HOST_51123=192.168.0.100
    • ROBEING_DEFAULT_HOST=192.168.0.100
    • MONITOR_URL=http://192.168.0.100:9024
  • /home/admin/infra-config/secrets.env
    • ROBEING_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.py
    • DATABASE_URL 기본값이 192.168.219.45:5432
  • robeing/skill-email/docker-compose.yml
    • AUTH_SERVER_URL fallback이 http://192.168.219.45:9000
  • robeing/skill-calendar/docker-compose.yml
    • DATABASE_URL fallback이 192.168.219.45:5432
  • robeing/skill-calendar/services/google_calendar_service.py
    • DATABASE_URL 기본값이 192.168.219.45:5432
  • fluent-bit/data-prepper/pipelines.yaml
    • OpenSearch 호스트가 http://192.168.219.45:9200
  • robeing/admin-dashboard/backend/services/system_service.py
    • 서버 간 fallback 주소가 192.168.219.45
  • 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.envHOST_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 값만 주입되도록 구조를 정리한다.

우선 정리 대상

  1. 런타임 env 없이도 실행될 수 있는 코드 기본값
  2. docker-compose.yml의 fallback 주소
  3. 서버 간 호출 URL, DB URL, Neo4j/OpenSearch 같은 인프라 의존값
  4. 구 경로(ivada_project)처럼 현재 운영과 분리되지 않은 잔존 실행본

완료 판단 기준

  • 실행 경로 파일에서 192.168.219.45 검색 결과가 0건이다.
  • 23 서버 기동 서비스가 모두 192.168.0.100 또는 명시 env만 참조한다.
  • 24 서버에서 23 서버 DB/인증/모니터 호출을 실제로 재검증해 과거 IP 경로가 다시 나오지 않는다.

상위 원칙/근거 문서 연결