DevLog

엔지니어링 블로그를 한 곳에서 탐색하고, 최근 발행 흐름을 빠르게 파악할 수 있는 서비스 입니다.

Quick Links

  • Latest Feed
  • Engineering Directory

Support

  • 소개
  • 개인정보처리방침

Contribute

  • 원하는 블로그 추가 (준비 중)
  • Feedback

© 2026 DevLog Inc. All rights reserved.

본 사이트는 공개 RSS 피드를 통해 콘텐츠를 수집하며, 모든 콘텐츠의 저작권은 원저작자에게 있습니다.

Back to Feed
Read Original

Contents

Continue Reading

  • More from 토스
  • Related reads#ApacheSpark
#Backend

Spark Connect on Kubernetes #1: 견고한 Spark Connect 만들기

Spark Connect on Kubernetes #1: 견고한 Spark Connect 만들기
01

Summary

토스증권이 Spark Connect를 '절대 죽지 않는' 서비스로 만든 비결

단일 장애점부터 리소스 경합까지, Kubernetes 환경에서 Spark Connect를 운영하며 마주한 난관과 해결책

본 아티클은 토스증권 데이터 인프라 팀이 Spark Connect를 실제 운영 환경에 도입하면서 겪은 기술적 도전과 이를 극복하기 위한 아키텍처 개선 과정을 다룹니다. 특히 여러 사용자가 공유하는 멀티테넌트 환경에서 안정성을 확보하기 위해 Spark의 기본 설정을 어떻게 최적화하고 다중화했는지에 대한 실무적인 통찰을 제공합니다.

  • 01Spark Connect의 핵심 아키텍처와 기존 클래식 배포 모드와의 차이점 분석
  • 02서버 전체를 다운시키는 글로벌 실행기 실패 카운터 로직의 취약점 및 해결 방법
  • 03Driver의 OOM을 방지하기 위한 결과값 크기 제어 및 조기 차단 전략
  • 04복수 레플리카 구성을 통한 SparkContext 격리 및 시스템 가용성 확보
  • 05Spark Connect에서 누락된 Fair Scheduler 풀 전파 기능의 수동 구현 사례

+RECOMMENDATION

대규모 데이터 플랫폼을 Kubernetes 위에서 운영하려는 데이터 엔지니어나, 안정적인 멀티테넌트 분석 환경을 구축하고자 하는 인프라 엔지니어에게 실무적인 가이드라인을 제공합니다.

The Problem

Spark Connect는 드라이버를 상시 실행 서버로 운영하여 편리하지만, 하나의 SparkContext를 여러 사용자가 공유하기 때문에 특정 쿼리의 실패가 서버 전체를 종료시키는 단일 장애점(SPOF) 문제를 안고 있다. 또한 기본 FIFO 스케줄링 구조로 인해 특정 사용자가 리소스를 독점할 경우 다른 사용자의 작업이 지연되는 경합 문제가 발생한다.

The Solution

글로벌 실행기(Executor) 실패 카운터를 비활성화하고 작업 단위의 결함 허용 설정을 강화하여 서버 생존력을 높였으며, 서버를 여러 레플리카로 다중화하여 장애 범위를 최소화했다. 또한 Spark Connect에서 누락된 Fair Scheduler 풀 전파 기능을 직접 구현하여 사용자별 작업 우선순위를 관리할 수 있도록 개선했다.

The Result

특정 사용자의 쿼리 실패가 전체 서비스 중단으로 이어지지 않게 되었으며, 사용자는 서버 종료 대신 원인 파악이 가능한 구체적인 에러 메시지를 받게 되어 운영 안정성이 크게 향상되었다. 레플리카 구성을 통해 부하 분산과 가용성 확보가 가능해졌으며 워크로드에 따른 유연한 리소스 배분이 가능해졌다.

Trade-off

문제 쿼리를 조기에 차단하기 위해 실패 임계치를 낮춘 설정은 일시적인 네트워크 이슈 등으로 인한 정상적인 쿼리까지 중단시킬 위험이 있다. 또한 결과값 크기 제한은 쿼리 단위로 적용되므로, 다수의 사용자가 동시에 큰 데이터를 요청할 경우 드라이버의 메모리 부족 위험을 완전히 배제하기는 어렵다.

03

Key Concepts

Concept · 01

Spark Connect

클라이언트와 드라이버를 분리하여 gRPC 기반의 가벼운 연결을 가능하게 하는 Spark 3.4 이상의 새로운 인터페이스입니다.

  • 드라이버를 상시 실행 서버로 분리하여 즉각적인 세션 생성을 지원
  • 무거운 라이브러리 없이도 gRPC를 통해 다양한 언어와 플랫폼에서 접속 가능
Concept · 02

SPOF (Single Point of Failure)

시스템의 한 부분이 고장 나면 시스템 전체가 작동을 멈추게 되는 취약 지점을 의미합니다.

  • 멀티세션 Spark Connect에서 하나의 SparkContext를 공유할 때 발생하는 드라이버 종료 문제
  • 실행기 실패 카운터 임계치 초과 시 sys.exit(11)이 호출되어 모든 세션이 끊기는 현상
Concept · 03

Fair Scheduler

여러 사용자의 작업이 리소스를 공평하게 나누어 가질 수 있도록 작업 슬롯 할당 순서를 조정하는 Spark의 스케줄링 방식입니다.

  • 무거운 작업이 실행 슬롯을 모두 점유하여 가벼운 작업이 대기하는 현상을 방지
  • Spark Connect 서버 스레드에 사용자별 풀 정보를 직접 주입하여 연동 오류를 해결
Continue reading · same source

토스More from 토스

View all posts from 토스
  • 1%가 겪은 버그 고쳐야할까요?

    HotfixProgressive DeliveryQA Platform
    1일 전
  • 토스증권 추천과 검색은 어떻게 진화하고 있을까?

    Vector DatabaseRAGEmbedding Model
    4일 전
  • LLM 서빙, 띄우는 것과 잘 띄우는 것 사이

    LLM ServingvLLMObservability
    1주 전
  • 전체 데이터를 브라우저에 두는 광고 대시보드 만들기

    State ManagementPerformance OptimizationAPI Design
    1주 전
  • 토스는 어떻게 광고 속에 게임을 넣었을까

    MRAIDWebViewJS Bridge
    1주 전

Related reads#ApacheSpark

Explore #ApacheSpark
Netflix·Cassandra

넷플릭스의 카산드라 데이터 이동 아키텍처 진화 과정

#ApacheSpark2개월 전
당근·ELT

당근 200+개 DB 를 옮기는 ELT 플랫폼, DT Platform 을 만든 이야기

#ApacheSpark2개월 전

Source

토스
토스
Engineering Blog

Published · June 19, 2026

Topics

Apache SparkKubernetesSpark ConnectDistributed SystemsFault Tolerance