본문 바로가기
클라우드/prometheus

쿠버네티스(Kubernetes) 데이터베이스, 내부에? 외부에? 속 시원히 알려드립니다! 🤔

by gasbugs 2025. 9. 10.

안녕하세요! 👋 쿠버네티스(Kubernetes)를 사용하다 보면 한 번쯤은 품게 되는 궁금증이 있습니다. 바로 "데이터베이스(DB)는 어디에 두어야 하는가?" 하는 문제죠.

 

분명 "애플리케이션의 핵심 데이터베이스는 쿠버네티스 클러스터 외부에 구성하는 것이 일반적이다"라고 배웠는데, 막상 프로메테우스(Prometheus) 같은 모니터링 시스템을 구축하면 그 안에 자체 데이터베이스를 두고 사용합니다. 🧐

 

이 두 가지 상반된 상황, 어떻게 이해해야 할까요? 마치 "라면은 건강에 안 좋지만, 세상에서 제일 맛있다" 같은 딜레마처럼 느껴지시나요? 오늘 그 궁금증을 속 시원히 해결해 드리겠습니다!

 


🧐 왜 "DB는 쿠버네티스 밖에" 라는 말이 나왔을까?

일반적으로 우리가 서비스에서 사용하는 DB(예: MySQL, PostgreSQL)는 비즈니스의 핵심이자 심장과도 같습니다. 고객 정보, 주문 내역, 게시글 등 하나라도 유실되면 큰일 나는 매우 중요한 데이터(Stateful)를 다루죠.

이런 DB를 쿠버네티스 내부에 두는 것을 꺼리는 이유는 다음과 같습니다.

  • 데이터 영속성의 어려움 😥: 쿠버네티스의 기본 단위인 파드(Pod)는 언제든지 죽고 다시 생성될 수 있는 휘발성(Stateless)을 특징으로 합니다. 물론 StatefulSet이나 PersistentVolume(PV) 같은 기술로 데이터의 영속성을 보장할 수 있지만, 설정이 복잡하고 섬세한 관리가 필요합니다. 자칫 잘못하면 소중한 데이터가 날아갈 위험이 존재하죠.
  • 복잡한 운영 및 관리 🤯: DB는 단순히 저장만 하는 것이 아니라 백업, 복구, 마이그레이션, 성능 튜닝 등 전문적인 관리가 필요합니다. 쿠버네티스 환경의 동적인 특성은 이러한 DB 운영의 복잡성을 한층 더 높입니다. 숙련된 전문가가 아니라면 안정적으로 운영하기가 매우 까다롭습니다.
  • 성능 및 안정성 이슈 🚀: DB는 안정적인 고성능 I/O가 매우 중요합니다. 하지만 쿠버네티스 클러스터 내부의 네트워크나 스토리지 시스템은 다른 여러 애플리케이션과 자원을 공유하기 때문에, DB만을 위한 최적의 성능을 보장하기 어려울 수 있습니다.

이러한 이유로, 많은 기업에서는 안정성이 검증된 클라우드 제공업체의 관리형 DB 서비스(Managed Database, 예: AWS RDS, Google Cloud SQL)를 사용하거나, 별도로 구축된 DB 서버를 쿠버네티스 클러스터 외부에서 연결해 사용하는 방식을 선호합니다. 핵심 데이터를 가장 안전하고 확실하게 지키는 방법이기 때문이죠.


🤔 그렇다면 모니터링 DB는 왜 쿠버네티스 안에 둘까?

자, 이제 진짜 궁금했던 부분입니다. 프로메테우스나 그라파나(Grafana) 같은 모니터링 시스템을 구축할 때를 떠올려봅시다. 이들은 자신들이 수집한 데이터를 저장하기 위한 DB를 쿠버네티스 클러스터 내부에 설치하여 사용합니다. 왜일까요?

이는 모니터링 데이터베이스가 다루는 데이터의 성격이 다르기 때문입니다.

  • 데이터의 성격: 시계열 데이터(Time-Series Data) 📊: 모니터링 시스템은 '언제, 어떤 일이 있었는가'를 기록하는 시계열 데이터를 주로 다룹니다. 예를 들어 '오후 2시 15분, A 파드의 CPU 사용량은 35%'와 같은 정보들이죠. 이 데이터는 엄청난 양으로 빠르게 쌓이지만, 최악의 경우 일부가 유실되더라도 비즈니스에 치명적인 영향을 주지는 않습니다. (물론 장애 분석에는 중요하지만, 고객 데이터가 날아가는 것과는 차원이 다른 문제죠.)
  • 측정 대상과의 근접성 🎯: 모니터링 시스템의 주된 임무는 쿠버네티스 클러스터 내부의 수많은 파드, 노드, 서비스의 상태를 실시간으로 수집하는 것입니다. DB가 클러스터 내부에 있으면 데이터를 수집하고 조회하는 과정에서의 네트워크 지연 시간(Latency)을 최소화하고, 내부 서비스 디스커버리(Service Discovery) 기능을 활용해 모니터링 대상을 효율적으로 찾아낼 수 있습니다.
  • 관리의 편의성 및 이식성 📦: 모니터링 시스템은 그 자체가 하나의 완성된 애플리케이션 스택입니다. 필요한 DB를 내부에 포함하고 있으면 설치와 배포가 훨씬 간편해집니다. Helm 차트 등으로 한 번에 설치하고, 다른 쿠버네티스 환경에도 쉽게 이식할 수 있다는 장점이 있습니다. 즉, 모니터링 시스템과 그 데이터는 운명 공동체인 셈이죠.

✨ 결론: 데이터의 '가치'와 '성격'에 따라 다르다!

결론적으로, "DB를 쿠버네티스 내부에 둘 것인가, 외부에 둘 것인가?"라는 질문에 대한 정답은 "데이터의 특성과 중요도에 따라 다르다" 입니다.

구분 애플리케이션 DB (외부 권장) 모니터링 DB (내부 구성)
데이터 종류 관계형/트랜잭션 데이터 (고객 정보, 주문) 시계열 데이터 (메트릭, 로그)
데이터 중요도 최상급 (유실 시 비즈니스에 치명적) 높음 (장애 분석에 필수적)
유실 시 영향 서비스 장애, 데이터 복구 불가 일시적 모니터링 공백, 분석 데이터 일부 누락
관리 포인트 데이터 무결성, 백업/복구, 고가용성 빠른 수집 및 조회, 데이터 보관 주기
적합한 위치 관리형 DB 서비스, 외부 서버 쿠버네티스 클러스터 내부
 

이제 두 가지 상황이 명확하게 이해되시나요? 🤓

  • 잃어버리면 절대 안 되는 우리 회사의 핵심 자산과 같은 DB는 가장 안전한 외부 금고(관리형 DB)에 보관하고,
  • 실시간 현황 파악을 위한 CCTV 녹화 영상과 같은 모니터링 데이터는 현장(쿠버네티스)에 녹화 장비(모니터링 DB)를 두고 빠르게 돌려보는 것에 비유할 수 있습니다.

쿠버네티스는 정말 강력하고 유연한 도구입니다. 그 특성을 잘 이해하고 상황에 맞는 최적의 아키텍처를 구성하는 것이 무엇보다 중요합니다. 앞으로는 DB 위치에 대한 고민 없이, 데이터의 성격을 먼저 살펴보는 현명한 엔지니어가 되시길 바랍니다!

 

태그: 쿠버네티스, Kubernetes, 데이터베이스, Database, 모니터링, 프로메테우스, Prometheus, MSA, 아키텍처, DevOps