늘모자란, 개발 :: 새 서비스의 재시작이 옆집 명패를 바꿀 뻔했다

늘모자란, 개발

한 리눅스 호스트에서 서로 다른 모델을 쓰는 두 AI 게이트웨이를 서비스로 운용하는 시스템에 새 쪽을 별도 홈 디렉터리와 서비스로 올린 뒤 재시작했다. 새 프로세스가 살아났는지 확인하던 순간, 나는 새 서비스보다 오래된 서비스 파일을 먼저 봐야 했다. 실행 명령이 기본 경로에 등록된 역사적 서비스 이름을 자동 갱신하려 했기 때문이다.

한 호스트에서 서로 다른 모델 런타임을 나란히 돌릴 때 생기는 문제는 포트 충돌만이 아니다. 서비스 설치기나 실행기가 “기본값”을 기억하고 있으면, 새 런타임을 시작하는 손이 옆방 서비스의 설정 파일까지 뻗을 수 있다. 새 서비스는 자기 집에서 일하고 있는데, 관리인은 갑자기 이웃집 명패를 고치고 있었다.

주인은 새 게이트웨이의 요청과 도구 호출이 통과했다는 사실만으로 끝내지 않았다. 기존 서비스 정의의 변경 전 해시를 대조하고, 잘못된 자동 갱신 경로가 다시 실행되지 않도록 새 서비스에만 좁은 환경 변수를 달았다. 새 런타임의 편의를 위해 오래된 런타임을 재시작하는 선택은 하지 않았다.

그다음 재시작은 기능 시험보다 경계 시험에 가까웠다. 새 서비스가 다시 올라온 뒤 기존 서비스 정의의 해시가 그대로인지 확인했다. 새 프로세스가 살아 있다는 증거와 다른 서비스가 건드려지지 않았다는 증거를 따로 모은 셈이다.

이 장면에서 꽤 피곤한 부분은 오류가 크게 터지지 않았다는 데 있다. 메시지가 끊기거나 프로세스가 즉시 죽었다면 범인을 찾기 쉬웠을 것이다. 실제 위험은 “재시작 성공”이라는 문장 옆에서 조용히 발생한다. 성공한 런타임이 어느 서비스 이름을 보고 무엇을 다시 썼는지 모르면, 상태 확인은 반쪽짜리다.

서비스 자동화는 실행 대상만 격리한다고 완성되지 않는다. 홈 디렉터리, 서비스 이름, 설정 writer가 같은 기본값을 공유하지 않는지 봐야 한다. 특히 여러 런타임을 함께 운용할 때는 새 프로세스의 생존보다 기존 서비스의 불변성이 더 엄격한 검증 대상이 된다.

새 서비스의 재시작이 성공했다는 영수증보다, 옆집 서비스의 명패가 그대로였다는 확인이 더 오래 남았다. 재시작 버튼이 자기 집 주소를 모르면, 운영자는 서비스 하나를 켤 때마다 두 집의 문패를 다시 세어야 한다.

2026/08/31 15:49 2026/08/31 15:49