K8s 기반 분산 ANN 서비스 면접 질문 대비: Headless Service, PV, PVC 완벽 정리 Kubernetes(K8s) 환경에서 분산 ANN(Approximate Nearest Neighbor, 근사 최근접 이웃) 서비스를 구축할 때 자주 언급되는 Headless Service, Persistent Volume(PV), Persistent Volume Claim(PVC) 는 분산 시스템의 핵심적인 구성 요소입니다. 면접에서 이 개념들을 명확하게 설명하고, 왜 분산 ANN 서비스에 필요한지 연결하여 답변하는 것이 중요합니다.

  1. Headless Service: “주소록은 있지만, 대표 번호는 없는” 서비스 Headless Service란 일반적인 서비스와 달리, 클러스터 IP(Cluster IP)를 가지지 않는 서비스를 의미합니다. 일반적인 서비스는 고유한 Cluster IP를 할당받아, 해당 IP로 요청을 보내면 서비스에 연결된 여러 Pod(파드) 중 하나로 알아서 요청을 분배(로드 밸런싱)해주는 ‘대표 번호’ 역할을 합니다. 하지만 Headless Service는 이 ‘대표 번호’가 없습니다. 대신, DNS 서버에 서비스의 이름으로 질의했을 때, 서비스에 연결된 모든 Pod들의 개별 IP 주소 목록을 직접 반환합니다. 마치 회사의 대표 번호가 아니라, 전체 직원들의 직통 번호 목록을 알려주는 것과 같습니다. 분산 ANN 서비스에서 Headless Service가 필요한 이유: 분산 ANN 서비스는 대용량의 벡터 데이터를 여러 노드(Pod)에 분산하여 저장하고 검색합니다. 이때 클라이언트는 특정 Pod와 직접 통신하거나, Pod들 간에 서로의 상태를 파악하고 데이터를 동기화해야 하는 경우가 많습니다.
  • Stateful한 Pod들의 직접적인 식별 및 통신: 분산 ANN 서비스의 각 Pod는 고유한 데이터 샤드(Shard)를 담당하는 상태를 가진(Stateful) 애플리케이션인 경우가 많습니다. 클라이언트나 다른 Pod가 특정 데이터에 접근하기 위해서는 해당 데이터를 가지고 있는 Pod의 IP 주소를 정확히 알아야 합니다. Headless Service는 각 Pod의 IP를 직접 노출시켜 이러한 직접적인 통신을 가능하게 합니다.
  • 자체적인 클러스터링 및 디스커버리: 분산 데이터베이스나 분산 검색 엔진처럼, ANN 서비스의 Pod들은 자체적으로 클러스터를 구성하고 서로를 발견(Service Discovery)해야 합니다. Headless Service가 제공하는 Pod IP 목록을 통해, 각 Pod는 시작 시점에 다른 동료 Pod들이 누구인지 파악하고 클러스터를 형성할 수 있습니다. 예를 들어, 새로운 Pod가 추가되면 다른 Pod들이 이를 인지하고 데이터 리밸런싱을 시작할 수 있습니다.

면접 답변 예시:

“Headless Service는 별도의 Cluster IP를 가지지 않고, 서비스에 속한 모든 Pod들의 IP 주소 목록을 직접 반환하는 서비스입니다. 분산 ANN 서비스에서는 각 Pod가 데이터의 일부를 독립적으로 소유하는 경우가 많기 때문에, 클라이언트나 다른 Pod들이 특정 Pod와 직접 통신해야 할 필요가 있습니다. 이때 Headless Service를 사용하면 각 Pod의 주소를 쉽게 발견하여 직접 통신할 수 있고, Pod들 간의 자체적인 클러스터 구성 및 상태 동기화를 효율적으로 구현할 수 있습니다.”

  1. PV (Persistent Volume) & PVC (Persistent Volume Claim): “데이터를 보관하는 창고와 창고 열쇠” Pod는 기본적으로 임시적(Ephemeral)인 존재입니다. Pod가 재시작되거나 삭제되면 Pod 내부에 저장된 데이터는 모두 사라집니다. 하지만 분산 ANN 서비스의 벡터 인덱스와 같은 중요한 데이터는 영속적으로 보존되어야 합니다. 이때 사용되는 것이 PV와 PVC입니다.
  • PV (Persistent Volume, 영속 볼륨): 관리자가 미리 준비해 둔 ‘데이터 저장 공간(스토리지)’ 그 자체를 의미합니다. 이는 NFS, iSCSI, 클라우드 공급자(GCP, AWS 등)의 스토리지 등 실제 물리적 혹은 네트워크 스토리지와 연결되어 있습니다. PV는 Pod의 생명주기와 독립적으로 존재하며, ‘창고’에 비유할 수 있습니다.
  • PVC (Persistent Volume Claim, 영속 볼륨 요청): 사용자가 **‘필요한 스토리지의 사양(용량, 접근 모드 등)을 정의하여 요청’**하는 것입니다. 마치 “100GB 용량의 읽기/쓰기가 가능한 창고가 필요하니, 열쇠를 주세요”라고 요청하는 것과 같습니다. Kubernetes는 이 PVC 요청에 맞는 적절한 PV를 찾아 연결(Binding)해줍니다. 분산 ANN 서비스에서 PV와 PVC가 필수적인 이유:
  • 데이터의 영속성 보장: 분산 ANN 서비스의 핵심 자산인 벡터 인덱스 데이터는 매우 중요하며, 생성하는 데 많은 시간과 비용이 소요될 수 있습니다. Pod가 예기치 않게 종료되거나 재배포되더라도 데이터가 유실되지 않도록 PV와 PVC를 사용하여 데이터를 Pod 외부의 영속적인 스토리지에 저장해야 합니다.
  • StatefulSet과의 연동: 분산 ANN 서비스는 보통 StatefulSet으로 배포됩니다. StatefulSet은 각 Pod에 고유하고 안정적인 이름(e.g., ann-pod-0, ann-pod-1)과 함께, 각 Pod에 할당된 고유한 PVC를 보장합니다. 예를 들어, ann-pod-0이 재시작되더라도 항상 이전에 사용하던 동일한 PVC에 다시 연결되어 자신의 상태(데이터)를 그대로 이어받을 수 있습니다. 이는 각 Pod가 담당하는 데이터 샤드의 일관성을 유지하는 데 결정적입니다. 면접 답변 예시:

“PV는 클러스터 관리자가 프로비저닝한 실제 스토리지 자원을 의미하고, PVC는 사용자가 필요한 스토리지의 사양을 정의하여 요청하는 것입니다. Pod는 기본적으로 상태를 저장하지 않기 때문에, 분산 ANN 서비스에서 수십, 수백만 개의 벡터 인덱스 데이터가 유실되는 것을 방지하기 위해 PV와 PVC는 필수적입니다. 특히 StatefulSet으로 ANN 서비스 Pod들을 관리할 때, 각 Pod는 PVC를 통해 자신만의 고유한 영속 스토리지를 할당받게 됩니다. 이를 통해 Pod가 재시작되더라도 데이터가 보존되어 서비스의 안정성과 데이터 일관성을 확보할 수 있습니다.”

핵심 요약

개념한 줄 정의분산 ANN 서비스에서의 역할비유
Headless ServiceCluster IP 없이 Pod들의 실제 IP 목록을 반환하는 서비스Pod 간의 직접 통신, 자체 클러스터링 및 서비스 디스커버리 지원대표 번호 없는 직원 직통 번호 목록
PV (Persistent Volume)관리자가 준비한 클러스터의 영속적인 스토리지 자원ANN 인덱스 데이터가 저장될 실제 ‘공간’창고
PVC (Persistent Volume Claim)사용자가 필요한 스토리지 사양을 정의하고 요청하는 것Pod가 영속적인 데이터를 사용하기 위해 PV를 할당받는 ‘요청서’창고 열쇠 요청