Spark Connect on Kubernetes #1: 견고한 Spark Connect 만들기
·2026.06.19 16:35
토스증권은 Kubernetes 환경에서 Spark Connect를 안정적인 서비스로 운영하기 위한 기술적 과제와 해결 방안을 공유한다.
토스증권 Data Infra팀은 분석가와 엔지니어가 복잡한 설정 없이 Spark를 사용할 수 있도록 Kubernetes 기반의 Spark Connect 서비스를 운영하고 있습니다. 이 시리즈의 첫 번째 주제는 여러 사용자가 공유하는 환경에서도 안정성을 유지하는 '견고한 Spark Connect' 구축에 관한 것입니다.
기존 Classic Spark는 애플리케이션마다 Driver가 새로 생성되는 구조였으나, Spark Connect는 Driver를 미리 실행된 서버 형태로 분리하여 클라이언트가 gRPC를 통해 연산을 요청하는 모델을 채택했습니다. 이는 마치 데이터베이스에 질의하는 방식과 유사하며, 클라이언트 측의 무거운 라이브러리 설치 부담을 줄여줍니다.
하지만 이러한 Long-running 서버 모델은 기존 Spark의 '1개 앱 = 1개 워크로드' 설계 원칙과 충돌하며 다음과 같은 문제를 야기합니다.
- 단일 장애점(Single Point of Failure): 모든 세션이 하나의 Driver JVM을 공유하므로, 특정 사용자의 쿼리가 Executor 실패 임계값을 넘기면 서버 전체가 종료되어 모든 세션이 중단됩니다.
- 리소스 경합 및 스케줄링 한계: 세션 간 논리적 격리는 가능하지만 CPU, 메모리 등 물리적 리소스는 공유됩니다. 또한 FIFO 방식의 기본 스케줄러는 선점(Preemption) 기능이 없어 무거운 작업이 슬롯을 점유할 경우 다른 사용자의 작업이 대기 상태에 빠집니다.
이 요약은 원문 이해를 돕기 위한 큐레이션입니다. 저작권은 원저작자에게 있으며, 정확한 내용과 맥락은 원문을 확인하세요.
요약 오류, 출처 표기 문제, 삭제 요청은 문의 · 건의로 알려주세요.