2019년 8월 ObjectRocket.com/blog에 처음 게시된 글입니다.
CockroachDB®는 Rackspace ObjectRocket 데이터베이스 기술 제품군의 일원입니다. 데이터 복제 및 분산(고가용성 극대화), 자동 데이터베이스 리밸런싱, 데이터 레지던시(data domiciling) 규정 준수를 지원하는 멀티 지역 데이터 센터 등 CockroachDB의 확장 능력은 매우 인상적입니다. 그리고 이 모든 기능이 높은 데이터 무결성과 분산 ACID 트랜잭션과 함께 제공됩니다. CockroachDB에서 데이터 복원력은 선택이 아닌 필수이기 때문입니다.
이번 글에서는 CockroachDB로 확장할 때의 핵심 포인트를 살펴보고, Rackspace ObjectRocket의 DBaaS가 어떤 가치를 제공하는지 알아보겠습니다. 개발자 입장에서 관리형 서비스 플랫폼 위에서 CockroachDB를 사용하면 데이터베이스 운영의 복잡한 세부 사항 대신 애플리케이션 개발에만 집중할 수 있습니다.
요즘 시대, 확장성은 필수입니다
20년 전에는 스토리지 비용이 큰 부담이었고, '빅데이터'라는 용어는 우리가 마주한 거대한 과제를 상징했습니다. 방대한 양의 데이터를 보유하고도 이를 분석하거나 활용할 좋은 방법이 없었죠. 하지만 오늘날 기술은 빅데이터와 함께 전자상거래, 금융 소프트웨어, 연구, 경영, 데이터 마이닝 등 현대 사회에 끊임없이 쏟아지는 쿼리와 트랜잭션을 처리할 수 있게 되었습니다. 또 다른 기술 영역인 '사물인터넷(IoT)'은 데이터를 생성하고 온라인 트랜잭션을 실행하는 디바이스의 수를 더욱 증가시키고 있습니다. 이제 카메라, 조명 스위치, 심지어 냉장고까지 온라인에서 유용한 데이터를 만들어내는 디바이스 목록에 추가되었습니다.
이러한 환경에서는 현재 데이터 스토어의 요구 사항을 충족하는 동시에, 필연적으로 늘어나는 데이터량과 아직 상상하지 못한 새로운 데이터 소스와 트랜잭션의 증가까지 감당할 수 있는 확장 전략을 수립하는 것이 중요합니다.
확장(scaling)이란 간단히 말해 현재 워크로드에 적절히 대응할 수 있도록 필요한 데이터베이스 리소스를 늘리거나 줄이는 것을 의미합니다. 확장 방식은 다음과 같습니다.
- 수직 확장(Vertical Scaling): 클러스터 내 노드에 RAM, 스토리지 공간, CPU를 추가하거나 제거하는 방식
- 수평 확장(Horizontal Scaling): 단일 노드에 리소스를 더하는 대신, 필요할 때마다 노드를 추가하여 워크로드를 처리하는 방식
대부분의 관계형 데이터베이스는 수직 확장을 사용합니다. 반면 대부분의 분산 데이터베이스(주로 비관계형)는 수평 확장을 사용하는데, 이는 대량의 트랜잭션 처리, 잦은 쿼리, 읽기/쓰기 작업, 복원력 요구 사항에 더 유리합니다. 단일 하드웨어의 기술적·연산적 한계 때문에 수직 확장에는 분명한 상한선이 존재합니다.
반면 수평 확장은 연산적으로 제약받지 않으며, 가용 하드웨어의 양과 소프트웨어의 지원 범위에 의해서만 제한됩니다. CockroachDB가 독특한 이유는 분산 온라인 트랜잭션 처리(OLTP) 시스템에 내재된 실시간 읽기/쓰기 요청에 대응하기 위해, 전통적으로 불가능했던 관계형 데이터베이스의 수평 확장에 대한 훌륭한 해결책을 제공한다는 점입니다. 물론 CockroachDB도 수직 확장이 가능하지만, 노드를 추가하는 방식의 확장이 권장됩니다.
CockroachDB 확장의 특별한 점은 무엇일까요?
Rackspace ObjectRocket의 프로덕트 매니저 Derek Johnson에 따르면, CockroachDB 확장에서 가장 흥미로운 점은 바로 그 '지능적인' 방식입니다. 첫 번째 노드를 생성하고 구성한 후에는 이후 노드 추가가 크게 간소화됩니다. 멀티 노드 환경에서는 자동 확장(auto-scale), 데이터 밸런싱, 지역별 규정 준수 요구 사항의 자체 관리 등 강력한 CockroachDB 기능을 활용해 데이터 스토어를 안정적이고 규정을 준수하며 고성능으로 유지할 수 있습니다. 최적화된 구성을 통해 CockroachDB의 진정한 힘을 발휘할 수 있습니다. 예를 들어 --locality 플래그로 노드의 리전(region)과 가용 영역(availability zone)을 지정하면, CockroachDB는 지오 파티셔닝(geo-partitioning)을 구현하고 지정된 리전 안에 데이터를 자동으로 유지합니다.
주요 확장 포인트를 정리하면 다음과 같습니다.
데이터 스토어가 확장되어도 지켜지는 데이터 무결성
- 트랜잭션은 ACID를 준수하며,
BEGIN이나COMMIT같은 일반적인 SQL 명령어로 평소처럼 사용할 수 있습니다. - CockroachDB는 기존 관계형 데이터베이스와 다릅니다. 확장 과정에서 모든 쓰기가 단일 노드로 집중되는 대신, 읽기와 쓰기가 모든 관련 노드에 분산됩니다. 이러한 멀티 액티브(multi-active) 가용성은 CockroachDB만의 고가용성 구현 방식이며, 지역 간 확장을 가능하게 합니다.
- CockroachDB는 최소 3개의 서로 다른 노드에 복제 요청을 보내고, 과반수 노드가 데이터 복제에 성공했다고 보고할 때까지 커밋을 대기하는 합의 기반 복제(consensus replication)를 사용합니다.
- 각 쓰기에 대한 인텐트(intent)와 레코드를 통한 중재 트랜잭션이 트랜잭션 충돌을 방지합니다.
- CockroachDB는 모든 트랜잭션을 중재하기 위해 트랜잭션 레코드(transaction record)와 쓰기 인텐트(write intent)라는 두 객체를 사용합니다. 두 객체는 서로 확인하고, 필요한 경우 트랜잭션을 재시작하여 최신 값이 커밋되도록 보장합니다.
- CockroachDB는 데이터 밸런싱과 복제를 통해 성능과 데이터 무결성 사이의 균형을 효과적으로 유지합니다.
문제 해결사, 지오 파티셔닝!
CockroachDB는 지리적으로 격리된 샤드를 생성해 지연 시간은 개선하지만 교차 지역 쿼리를 막는 기존 방식 대신, 레인지(range) 수준의 구성 설정을 사용해 정의된 리전 내에서 데이터를 복제합니다. CockroachDB의 독특한 지오 파티셔닝 기능은 두 가지 가치를 동시에 제공합니다. 데이터를 저장할 특정 리전을 구성하면 애플리케이션 성능 향상(사용자 애플리케이션과 가까운 곳에 데이터 배치)과 GDPR 데이터 레지던시 규정 준수를 모두 달성할 수 있습니다.
CockroachDB Admin UI에는 '노드 맵(Node Map)'이라는 훌륭한 지리적 시각화 기능이 있습니다. 세계 지도 위에 모든 노드의 아이콘과 각 노드의 세부 정보를 보여줍니다. 이 그래픽 표시는 계획 수립과 데이터 스토어 간 지연 시간 문제 해결에 큰 도움이 됩니다. ObjectRocket Mission Control UI를 통해 CockroachDB에 접근하면 CockroachDB Admin UI로 쉽게 연결되어 노드 맵을 확인할 수 있습니다.
적절한 구성으로 새 노드를 수동 추가하면 스마트하고 신속한 스케일 아웃이 가능합니다
- 새 노드를 선제적으로 구동하려면 CLI나 Admin UI를 통해 명령어를 실행해 노드를 생성하고 필요한 플래그와 기타 구성을 설정할 수 있습니다.
- 많은 데이터베이스는 확장을 위해 중지 후 재시작해야 하지만, CockroachDB는 시스템이 부하 상태에 있을 때도 손쉽게 노드를 추가할 수 있습니다.
오케스트레이션을 활용하면 다운타임 없이 확장이 자동으로 처리됩니다
CockroachDB가 제공하는 확장 장점은 다음과 같습니다.
- 오케스트레이션 플랫폼을 통해 CockroachDB를 확장하면 간편하고 강력한 자동화가 가능합니다. 예를 들어 Kubernetes(ObjectRocket이 사용하는 방식)를 사용하면 명령어 하나로 CockroachDB를 스케일 아웃하고, 필요에 따라 새 리소스를 프로비저닝하고 추가 파드(pod)를 구동할 수 있습니다.
- 노드 간 데이터 리밸런싱은 자동으로 이루어지며, 데이터 센터 간, 서로 다른 클라우드 제공업체 간에도 적용됩니다.
- 분산 트랜잭션 덕분에 워크로드에 영향이 없고, 다운타임 없이, 지연 시간 증가도 없습니다.
- 모든 노드에 걸쳐 서버 활용도를 균등하게 최적화하는 것은 CockroachDB 자동 확장의 자연스러운 결과입니다.
관리형 서비스로 모든 것을 하나로
ObjectRocket은 Kubernetes 컨테이너 기반 아키텍처를 통해 CockroachDB 데이터 스토어를 위한 완전한 관리형 서비스를 제공합니다. 이 서비스에는 설계 및 배포 컨설팅, 전체 기술 지원, 엔터프라이즈 라이선스 버전 CockroachDB의 모든 혜택이 포함됩니다.
관리형 CockroachDB 솔루션의 주요 기능은 다음과 같습니다.
- 3노드 고가용성(HA) 클러스터
- ObjectRocket UI를 통한 CockroachDB Admin UI 접근
- IP 주소 화이트리스팅
- 사용자 인증
- 전송 계층 보안(TLS)
즉, 편안한 SQL 인터페이스와 PostgreSQL 와이어 호환성을 갖춘 관계형 ACID 준수 데이터 스토어를, 자동 HA, 손쉬운 확장성, 지리적 확장 기능과 함께 이용할 수 있다는 의미입니다.
ObjectRocket의 관리형 CockroachDB 서비스를 이용하면 사전 정의된 노드 유형 중 데이터 요구 사항에 가장 적합한 옵션을 선택한 후, 필요한 만큼 해당 노드 유형을 추가하여 수평 확장할 수 있습니다. Kubernetes 기반 플랫폼이 실패하거나 문제가 있는 노드를 자동으로 교체하므로, 클러스터가 항상 가동되고 사용 가능한 상태임을 보장할 수 있습니다.
CockroachDB와 Rackspace ObjectRocket의 관리형 서비스를 경험해 볼 절호의 기회입니다. 관리형 CockroachDB 서비스가 데이터 스토어 요구 사항을 어떻게 해결할 수 있는지 알아보려면 Top 5 Use Cases 블로그를 참고하세요. Cockroach®는 훌륭한 공식 문서를 제공하며, CockroachDB에 대해 논의하고 싶거나 더 자세히 알고 싶으신 경우 Rackspace에 문의해 주시기 바랍니다.
Rackspace Cloud 서비스 약관은 여기를 클릭하여 확인하실 수 있습니다.
피드백 탭을 사용하여 의견을 남기거나 질문해 주세요. Sales Chat을 클릭하면 지금 바로 상담을 시작할 수 있습니다.