자동차·자율주행에서 SLO/SLI 정의와 계약 ClickHouse·Vector로 구현하는 방법 – 수업 중단 없는 배포 운영법

새벽 3시, 갑자기 울리는 장애 알림에 가슴 철렁했던 경험, 개발자라면 한 번쯤 있으시죠? 특히나 아주 작은 오차도 용납되지 않는 자동차나 자율주행 분야라면 그 압박감은 상상 이상일 거예요. ‘우리 서비스는 괜찮을까?’, ‘사용자들이 불편을 겪고 있지는 않을까?’ 하는 불안감은 늘 우리를 따라다니죠. 이런 막연한 불안감을 없애고, 우리 시스템의 건강 상태를 명확한 숫자로 이야기할 수 있다면 얼마나 좋을까요? 오늘은 바로 그 이야기, 자동차·자율주행 분야에서 서비스 수준 목표(SLO)와 지표(SLI)를 정의하고, ClickHouse와 Vector라는 강력한 도구로 이를 구현해서, 결국에는 ‘수업 중단 없는 배포’라는 꿈을 현실로 만드는 방법을 나눠보려고 해요.

자동차·자율주행 시스템의 안정성은 생명과 직결되기에, 명확한 SLO/SLI 정의는 필수입니다. 이 글은 ClickHouse와 Vector를 활용해 대용량 데이터를 처리하고, 이를 기반으로 무중단 배포를 실현하는 구체적인 방법과 운영 철학을 다룹니다.

이 글은 검색·AI 답변·GenAI 인용에 최적화된 구조로 작성되었습니다.

자율주행, 왜 SLO/SLI가 특히 중요할까요?

자율주행 시스템의 안정성은 단순한 편의가 아닌, 탑승자의 생명과 직결된 문제이기 때문에 명확한 서비스 수준 지표(SLI)와 목표(SLO) 설정이 무엇보다 중요합니다. 일반적인 웹 서비스의 장애와는 그 무게감이 완전히 다르지 않을까요?

웹사이트가 0.5초 느려지는 것은 약간의 불편함으로 끝날 수 있지만, 자율주행 차량의 인지 시스템이 0.5초 지연된다면 정말 끔찍한 사고로 이어질 수 있습니다. 이처럼 자율주행 분야에서는 ‘안정적이다’라는 말을 추상적으로 사용해서는 안 됩니다. 모든 것을 숫자로 측정하고, 합의된 목표를 향해 나아가야만 했습니다. 바로 여기서 SLI(Service Level Indicator)와 SLO(Service Level Objective)의 개념이 등장합니다.

SLI는 시스템의 특정 상태를 측정하는 ‘지표’입니다. 예를 들어, ‘전방 카메라 객체 인식 처리 시간’이나 ‘CAN 데이터 수집 성공률’ 같은 것들이죠. SLO는 이 SLI를 바탕으로 우리가 달성하고자 하는 ‘목표’를 설정하는 것입니다. “객체 인식 처리 시간의 99.9%는 50ms 이내여야 한다” 와 같이 구체적인 수치로 약속하는 거죠. 이런 명확한 목표가 없다면, 우리는 그저 ‘최선을 다해 안정적으로 운영하겠습니다’ 라는 공허한 외침만 반복하게 될지도 모릅니다.

요약하자면, 자율주행 분야에서의 SLO/SLI는 단순한 운영 지표를 넘어, 안전을 담보하는 최소한의 약속이자 기술적 신뢰의 근간이 됩니다.

다음 단락에서는 이 개념을 어떻게 현실에 적용할 수 있는지 구체적으로 살펴볼게요.


뜬구름 잡는 이야기는 그만, 현실적인 SLI/SLO 정의법

좋은 SLI는 사용자 경험과 직결된 핵심 지표를 측정 가능하게 정의하는 것이고, SLO는 이 지표를 바탕으로 현실적이면서도 도전적인 목표를 설정하는 과정입니다. 그렇다면 무엇을, 어떻게 측정해야 할까요?

가장 흔한 실수는 내부 시스템의 상태, 예를 들어 ‘CPU 사용률’ 같은 것을 SLI로 잡는 것입니다. CPU 사용률이 80%인 것과 실제 사용자가 느끼는 서비스 품질은 직접적인 관련이 없을 수도 있습니다. 대신 우리는 철저히 사용자 관점에서 생각해야 합니다. 자동차 시스템에게 사용자는 누구일까요? 바로 운전자와 자동차의 핵심 제어 로직입니다. 이들이 중요하게 생각하는 것이 무엇일지 고민하는 것에서부터 시작해야 했습니다.

예를 들어, 다음과 같은 SLI를 정의할 수 있습니다.

  • 가용성 SLI: V2X (Vehicle-to-Everything) 통신 모듈의 메시지 수신 성공률.
  • 지연 시간 SLI: 긴급 제동 신호 인지 후 브레이크 시스템에 제어 명령이 도달하기까지의 시간.
  • 정확성 SLI: GPS 위치 정보와 실제 위치 간의 오차 범위 발생 빈도.

이런 SLI가 정해지면, SLO를 설정하는 것은 조금 더 수월해집니다. “긴급 제동 신호 처리 지연 시간의 99.99%는 20ms를 넘지 않는다” 처럼요. 여기서 중요한 것은 100%를 목표로 삼지 않는다는 점입니다. 100%는 혁신을 가로막는 족쇄가 될 수 있기 때문입니다. 99.99%라는 목표는, 나머지 0.01%의 ‘실패할 수 있는 여유’, 즉 에러 버짓(Error Budget)을 우리에게 허락해 줍니다.

요약하자면, 사용자 경험에 기반한 구체적인 SLI를 정의하고, 100%가 아닌 현실적인 SLO를 설정하여 혁신을 위한 에러 버짓을 확보하는 것이 핵심입니다.

이제 이렇게 정의한 지표를 처리할 강력한 기술 스택에 대해 이야기해 볼게요.

대용량 로그 처리, ClickHouse와 Vector가 정답인 이유

자율주행 차량에서 쏟아지는 방대한 텔레메트리 데이터를 실시간으로 처리하고 분석하려면, 고성능 시계열 데이터베이스인 ClickHouse와 경량 데이터 수집기인 Vector의 조합이 아주 효과적입니다. 왜 이 두 가지 도구가 특별한 조합을 이룰까요?

자율주행 테스트 차량 한 대는 하루에도 테라바이트(TB) 단위의 데이터를 쏟아냅니다. 센서 데이터, 로그, 통신 기록 등 종류도 다양하죠. 이 모든 데이터를 중앙 서버로 모아 실시간으로 SLI를 계산하는 것은 정말 어려운 일입니다. 기존의 RDB나 범용 NoSQL로는 감당하기 힘든 부하가 발생하게 되죠. 저희는 이 문제를 해결하기 위해 ClickHouse와 Vector를 선택했습니다.

Vector는 Rust로 만들어진 아주 가볍고 빠른 데이터 수집기입니다. 차량 내 컴퓨팅 유닛 같은 저사양 환경에서도 안정적으로 동작하며, 원하는 형식으로 데이터를 변환하고 필터링해서 지정된 목적지로 보내주는 역할을 아주 잘 해냈습니다. 차량의 각종 로그를 Vector가 수집해서 S3 같은 스토리지나 Kafka로 보내주는 거죠. 그 다음, 이 데이터를 최종적으로 처리하는 것이 바로 ClickHouse입니다.

ClickHouse의 압도적인 성능

  • 컬럼 기반 저장소: 분석 쿼리에 필요한 컬럼만 읽기 때문에 I/O가 극적으로 줄어듭니다. 수십억 건의 데이터에서도 수 초 내에 결과를 보여주었죠.
  • 실시간 집계: 데이터가 들어오는 즉시 집계(Aggregation)가 가능해서, 거의 실시간으로 SLI 대시보드를 만드는 데 최적화되어 있었습니다.
  • 데이터 압축률: 뛰어난 압축 알고리즘으로 스토리지 비용을 크게 절감할 수 있다는 점도 큰 장점이었습니다.

요약하자면, 경량 수집기 Vector로 차량의 데이터를 효율적으로 모으고, 이를 분석에 특화된 ClickHouse에 저장함으로써, 우리는 대용량 텔레메트리 데이터의 홍수 속에서도 길을 잃지 않을 수 있었습니다.

그렇다면 이 기술들을 활용해서 어떻게 무중단 배포를 실현할 수 있을까요?

실전! 무중단 배포를 위한 SLO 계약과 운영법

무중단 배포의 성공은 단순히 기술적 구현을 넘어, SLO를 기반으로 팀 간의 명확한 ‘계약’을 맺고, 에러 버짓을 소모하며 점진적으로 배포하는 문화에서 비롯됩니다. 기술만큼이나 중요한 것이 바로 프로세스와 문화 아닐까요?

SLO는 이제 개발팀과 운영팀 사이의 중요한 ‘계약서’가 됩니다. 개발팀은 에러 버짓이 남아있는 한, 자유롭게 새로운 기능을 배포하고 실험할 수 있는 권한을 얻습니다. 반대로 운영팀은 SLO가 위협받고 에러 버짓이 급격히 소진될 때, 배포를 중단시키거나 롤백할 수 있는 명확한 근거를 갖게 되는 거죠. 더 이상 감정적인 논쟁 없이, 데이터에 기반한 합리적인 의사결정이 가능해졌습니다.

이 계약을 바탕으로 저희는 카나리 배포(Canary Release) 전략을 사용했습니다. 예를 들어, 새로운 버전의 경로 탐색 알고리즘을 배포한다고 상상해 보세요.

  1. 먼저 전체 차량 중 1%에만 새로운 버전을 배포합니다.
  2. ClickHouse 대시보드를 통해 새로운 버전이 적용된 차량 그룹의 SLI(경로 계산 응답 시간, 계산 실패율 등)를 실시간으로 모니터링합니다.
  3. 기존 버전과 비교했을 때 SLI가 안정적으로 유지되고, 에러 버짓 소모율이 예측 범위 내에 있다면, 배포를 5%, 20%, 50%로 점차 확대합니다.
  4. 만약 특정 단계에서 에러 버짓이 위험 수준으로 빠르게 소모된다면? 시스템은 자동으로 배포를 중단하고 이전 버전으로 롤백합니다.

이 과정을 통해 대부분의 사용자는 서비스 중단을 전혀 경험하지 못하게 됩니다. 문제가 발생하더라도 아주 일부의 사용자에게만 영향을 미치고, 빠르게 복구되는 거죠. 이것이 바로 ‘수업 중단 없는 배포’ 운영의 핵심이었습니다.

요약하자면, SLO라는 공통의 약속을 바탕으로 에러 버짓을 현명하게 사용하며 점진적으로 배포하는 것이 안전하고 빠른 혁신을 가능하게 하는 열쇠입니다.

핵심 한줄 요약: SLO/SLI는 단순 모니터링 도구가 아니라, 데이터 기반의 소통과 문화를 통해 빠르고 안전한 서비스 개발을 가능하게 하는 핵심 철학입니다.

결국 우리가 추구하는 것은 기술의 완벽함이 아니라, 실패를 예측하고 관리하며 끊임없이 나아가는 과정 그 자체였습니다. 자동차와 자율주행이라는 분야에서 SLO와 에러 버짓의 개념을 도입하는 것은, 마치 칠흑 같은 어둠 속에서 한 줄기 빛을 발견하는 것과 같았습니다. 막연한 불안감 대신 ‘우리는 0.01%의 에러 버짓 안에서 자유롭게 실험할 수 있어!’라는 자신감을 얻게 되었습니다.

ClickHouse와 Vector 같은 훌륭한 도구들이 있었기에 이 모든 것이 가능했습니다. 하지만 가장 중요한 것은, 이 도구를 사용해 무엇을 측정하고 어떤 약속을 할 것인지 함께 고민하는 문화였습니다. 이 글을 읽는 여러분도 각자의 서비스에서 가장 중요한 사용자 경험이 무엇인지 고민하고, 그것을 숫자로 표현하는 첫걸음을 떼어보시는 건 어떨까요? 그 작은 시작이 여러분의 서비스를 더욱 단단하고 신뢰할 수 있게 만들어 줄 거라고 믿습니다.

자주 묻는 질문 (FAQ)

SLO를 100%로 잡으면 안 되나요?

100% SLO는 현실적으로 불가능하며, 오히려 새로운 기능 개발과 개선을 막는 장애물이 될 수 있습니다. 모든 시스템은 네트워크 문제, 하드웨어 결함 등 예측 불가능한 이유로 실패할 가능성이 있고, 100%를 목표로 하면 아주 작은 변화조차 시도하기 어렵게 됩니다. ‘에러 버짓’은 바로 이 실패 가능성을 인정하고, 그 안에서 자유롭게 혁신할 수 있는 소중한 여유 공간을 제공해 줍니다.

ClickHouse가 아닌 다른 DB를 사용해도 되나요?

물론 가능합니다. Prometheus, InfluxDB, TimescaleDB 등 훌륭한 시계열 데이터베이스는 많이 있습니다. 하지만 자동차 텔레메트리처럼 초당 수백만 건의 이벤트가 발생하고, 이를 장기간 보관하며 복잡한 분석 쿼리를 실행해야 하는 극한의 환경에서는 ClickHouse 같은 컬럼 기반 데이터베이스가 비용과 성능 면에서 압도적인 이점을 보여주는 경우가 많았습니다. 각자의 환경과 데이터 규모에 맞는 최적의 도구를 선택하는 것이 중요합니다.

SLO/SLI는 개발팀만 알면 되나요?

아니요, SLO는 기획, 개발, 운영, 심지어 비즈니스팀까지 제품과 관련된 모두가 함께 공유하고 합의해야 하는 ‘사회적 계약’과 같습니다. 예를 들어, 새로운 기능 출시를 위해 일시적으로 SLO 목표를 낮추는 것에 대한 합의가 있다면, 개발팀은 더욱 공격적으로 제품을 개선할 수 있습니다. 이처럼 SLO는 부서 간의 사일로(Silo)를 허물고, 제품의 안정성과 발전 속도 사이에서 균형 잡힌 의사결정을 내리는 기준점이 되어 줍니다.

이 FAQ는 Google FAQPage 구조화 마크업 기준에 맞게 작성되었습니다.

위로 스크롤