서비스 레지스트리에서 인스턴스를 제거했는데 요청이 계속 갑니다. 발견과 연결 수명은 어떻게 분리하나요?
잠깐, 답변을 보기 전에
먼저 내 말로 설명해 볼까요?
답변과 점검 포인트 펼치기답변 접기
구두 답변
정의를 외우기보다, 원리와 조건을 연결해 설명해 보세요.
레지스트리 상태 변경과 client 캐시·DNS·연결 풀·로드밸런서 반영 시점은 다릅니다. 목록에서 제거했다고 이미 열린 연결과 진행 요청이 즉시 사라지지 않습니다.
동작 원리와 전제
새 연결의 endpoint 선택과 기존 연결의 재사용을 각각 확인합니다. TTL·watch 지연·업데이트 유실에 대비해 현재 상태 재조회 경로를 둡니다. heartbeat 만료는 장애 의심이며 인스턴스가 실제로 죽었다는 증명은 아닙니다.
선택과 실패 처리
drain 상태를 먼저 표시하고 새 작업 수락을 막은 뒤 기존 작업을 정리합니다. client는 실패 endpoint를 제한적으로 재탐색하되 전체 요청 deadline과 재시도 예산을 유지합니다. 모든 인스턴스가 동시에 재조회하면 레지스트리가 병목일 수 있어 지터·캐시가 필요합니다.
구체적인 사례와 검증
레지스트리의 watch가 끊겼다가 복구되면 누락 이벤트를 모두 재생할 수 있는지와 현재 전체 snapshot을 다시 읽어야 하는지 확인합니다. 삭제 이벤트 하나를 놓치고 이전 endpoint를 계속 쓰면 health 실패와 재시도가 반복될 수 있습니다. discovery 캐시의 수명과 연결 풀의 최대 수명을 따로 관리하고 제거된 endpoint에는 새 연결을 만들지 않도록 합니다. 하지만 이미 처리 중인 변경은 정상 완료·취소·불확정 상태로 마무리해야 합니다. endpoint 목록이 최신이라는 사실과 그 인스턴스의 DB·큐가 준비됐다는 사실도 다르므로 실제 요청 결과와 readiness를 함께 관찰합니다.
제거·네트워크 분할·watch 재연결·오래된 풀·새 인스턴스를 시험합니다. 요청이 어디로 갔는지 실제 주소와 버전을 남깁니다. 발견된 endpoint가 현재 요청을 처리할 준비가 됐다는 보장도 별도 health 계약입니다.
득점 포인트
이해가 드러나는 지점을 확인해 보세요.
- 핵심 구분: 레지스트리 상태 변경과 client 캐시·DNS·연결 풀·로드밸런서 반영 시점은 다릅니다.
- 선택 조건: drain 상태를 먼저 표시하고 새 작업 수락을 막은 뒤 기존 작업을 정리합니다.
- 검증 기준: 제거·네트워크 분할·watch 재연결·오래된 풀·새 인스턴스를 시험합니다.
감점 포인트
놓치기 쉬운 조건과 오해를 짚어 보세요.
- 레지스트리에서 삭제하면 기존 연결과 진행 요청도 즉시 다른 서버로 이동한다고 한다.
더 파고들 거리
하나 더 질문하며 이해의 범위를 넓혀 보세요.
- 이름 조회가 갱신돼도 기존 연결이 남을 때 이전 서버의 종료 시점을 어떻게 판단하나요?
- health 변경 뒤에도 남은 연결과 요청을 어떤 순서와 기한으로 정리하나요?
- 여러 클라이언트의 재시도가 동시에 몰리지 않게 간격·지터·전체 deadline을 어떻게 정하나요?
득점·감점 포인트는 학습용 자기 점검 기준이며, 특정 회사의 실제 채점표가 아닙니다.
원리부터 공부하고 싶다면
답변을 보충하는 개념·예제·슈도코드를 읽어 보세요.