블로그 본문

[NoSQL의 탄생] 대규모 트래픽 분산과 스키마리스(Schema-less) 유연성이 필요한 이유

📌 목차 바로가기

    지난 글에서는 관계형 데이터베이스(RDBMS) 설계의 꽃이라 불리는 참조 무결성(기본키/외래키) 관계 설계의 본질을 배웠습니다. 존재하지 않는 회원 ID로 주문서가 발급되는 유령 데이터를 차단하고 데이터 고아 현상을 데이터베이스 엔진 차원에서 원천 봉쇄하는 엄격한 규칙들을 공부했지요. RDBMS는 오랜 세월 동안 데이터의 1원 한 장 틀리지 않는 정밀함과 ACID 트랜잭션의 신뢰성을 무기로 엔터프라이즈 시장을 제패해 왔습니다.

    그런데 말입니다. 이처럼 완벽해 보이는 RDBMS 진영조차도 2000년대 후반 스마트폰의 보급과 소셜 미디어(SNS), 대규모 글로벌 웹 서비스의 대부흥이라는 '대홍수급 트래픽 시대'를 맞이하면서 치명적인 한계와 비명소리를 지르기 시작했습니다.

    단순히 몇 만 명의 회원이 이용하는 쇼핑몰을 넘어, 초당 수십 만 건의 데이터가 쏟아지고 전 세계 사용자가 동시에 무차별적으로 조회를 요청하는 현대의 클라우드 컴퓨팅 환경에서는 RDBMS의 '철통 같은 엄격함'이 오히려 '독(Poison)'으로 작용하게 된 것이죠.

    오늘은 이 엄격한 RDBMS의 사슬을 끊고 탄생하여 현대 대용량 서비스 아키텍처의 핵심 축으로 자리 잡은 NoSQL(비관계형 데이터베이스)의 탄생 배경과 두 가지 핵심 축인 수평적 확장성(Scale-Out) 및 스키마리스(Schema-less) 유연성에 대해 아주 깊이 있고 시원하게 풀어 드리겠습니다!

    1. 한계에 도달한 거인: RDBMS가 현대 대규모 웹 환경에서 마주한 벽

    RDBMS는 본질적으로 '정렬된 중앙 집중형 금고'입니다. 하지만 인터넷 스케일의 대규모 서비스에서는 이 금고가 다음과 같은 세 가지 치명적인 물리적 장벽에 부딪히게 됩니다.

    ① 수평적 확장(Scale-Out)의 어려움

    RDBMS는 여러 테이블 간의 관계(JOIN)를 맺고, 강력한 트랜잭션(ACID) 일관성을 유지해야 합니다. 이 일관성을 보장하기 위해 RDBMS는 데이터를 여러 서버에 분산하기보다, 한 대의 초고성능 서버 내부에서 처리하는 것(수직적 확장, Scale-Up)을 전제로 설계되었습니다. 하지만 트래픽이 10배, 100배로 폭주할 때 고성능 서버 장비의 스펙을 업그레이드하는 비용은 기하급수적으로 증가하며, 결국 CPU와 메모리의 물리적 한계선에 도달해 서버가 터져버리는 비극을 맞이하게 됩니다. 데이터를 여러 서버에 분산 저장(Sharding)하려 해도, 분산된 노드 간에 쿼리 JOIN 연산을 수행하고 데이터 일관성을 맞추는 비용이 너무 커 성능이 처참하게 저하됩니다.

    ② 엄격하고 고정된 스키마(Schema)의 유연성 부족

    RDBMS에 데이터를 넣으려면 테이블 구조를 미리 정의해 두어야 합니다. 만약 우리 의류 쇼핑몰 프로젝트에서 트렌드 변화에 맞춰 상품 상세 스키마에 새로운 속성(예: '친환경 소재 여부', '체형별 핏 가이드' 등)을 추가해야 한다고 해봅시다.

    • 테이블 락(Table Lock)의 재앙: 수천만 건의 데이터가 쌓여 있는 상용 RDBMS 테이블의 스키마를 변경(ALTER TABLE)하는 순간, 테이블 전체에 락(Lock)이 걸려 사용자들이 로그인을 못 하거나 상품을 조회하지 못하는 서비스 중단 사태가 벌어집니다.
    • 비즈니스가 끊임없이 애자일(Agile)하게 변하고 피드백 루프를 수시로 반영해야 하는 현대 스타트업 소프트웨어 주기에서 RDBMS의 딱딱한 규칙은 개발 속도를 극도로 늦추는 걸림돌이 됩니다.

    ③ 복잡한 JOIN 연산으로 인한 기하급수적 성능 저하

    정규화(Normalization) 이론에 따라 회원, 상품, 주문, 주문내역, 상품평 등 테이블을 여러 개로 잘게 쪼개두었기 때문에, 화면 하나를 그리기 위해 수많은 테이블을 JOIN으로 묶어서 가져와야 합니다. 대용량 트래픽이 몰려와 수만 명의 사용자가 동시에 다중 JOIN 쿼리를 날리면 데이터베이스 서버의 CPU 사용률은 100%를 치솟고 데이터베이스는 마비되어 버립니다.

    2. 해결사의 등장: NoSQL의 핵심 특성 4대 천왕

    이러한 RDBMS의 태생적 질병을 보완하기 위해 NoSQL(Not Only SQL, 비관계형 데이터베이스) 진영이 역사적인 깃발을 치켜들었습니다. NoSQL은 기존의 철저한 관계성과 규격을 과감히 던져버리고, 오직 '대규모 데이터의 초고속 처리'와 '유연성'에 집중했습니다. NoSQL을 지탱하는 4가지 본질적인 힘을 알아보겠습니다.

    ① 스키마리스(Schema-less)의 자유와 유연성

    NoSQL은 사전에 테이블 구조를 미리 못 박아두지 않는 '동적 스키마(Dynamic Schema)'를 사용합니다. 필요하다면 데이터 입력 시점에 새로운 필드를 자바스크립트 객체 형식으로 즉시 생성해 집어넣을 수 있습니다. 행마다 가지고 있는 컬럼(필드)의 개수가 달라도 아무 상관이 없으며, 데이터 내부에 중첩 객체(Nested Object)나 배열(Array)을 한 몸으로 포함할 수 있는 강력한 문서 지향 모델을 지원합니다. 개발 생산성이 무지막지하게 향상되는 축복인 셈입니다.

    ② 수평적 확장성 (Scale-Out)의 최적화

    NoSQL은 탄생할 때부터 '여러 대의 값싼 서버에 데이터를 골고루 분산해 저장하는 아키텍처'를 가정하고 설계되었습니다. 용량과 트래픽이 늘어나면 비싼 슈퍼컴퓨터를 사는 것이 아니라, 저렴한 일반 웹 서버를 옆에 나란히 추가하기만 하면(Scale-Out) 용량과 처리량이 거의 선형적으로 확장됩니다. 전 세계 글로벌 스케일의 빅테크 기업들이 NoSQL을 핵심 백본 데이터베이스로 기용하는 이유가 바로 여기에 있습니다.

    ③ 무중단 분산 아키텍처와 고가용성 (High Availability)

    NoSQL은 데이터를 여러 마스터-슬레이브(Primary-Secondary) 노드에 실시간으로 분산 복제해 둡니다. 만약 특정 데이터 센터나 서버 노드가 물리적으로 고장 나거나 폭발하더라도, 분산된 다른 복제 노드가 즉시 임무를 승격하여 중단 없는 서비스를 365일 24시간 완벽하게 지탱해 줍니다.

    ④ 대용량 비정형/반정형 데이터의 초고속 흡수

    소셜 미디어의 해시태그, 센서 로그 파일, API 응답 메시지 등 가공되지 않은 어마어마한 양의 빅데이터를 RDBMS처럼 포맷을 맞추는 중간 가공 단계 없이, 있는 그대로의 원석 상태로 실시간 초고속 저장하고 빠르게 쿼리할 수 있는 탁월한 IO 처리량을 발휘합니다.

    3. 스케일-업(Scale-Up) vs 스케일-아웃(Scale-Out) 시각적 완벽 대비

    대용량 서버 부하 분산 처리 기법의 핵심인 RDBMS의 수직적 확장(Scale-Up)과 NoSQL의 수평적 확장(Scale-Out)의 구조적 아키텍처 차이를 한눈에 보여주는 흐름도입니다.

    RDBMS의 수직적 확장(Scale-Up)과 NoSQL의 수평적 확장(Scale-Out) 아키텍처 및 동적 스키마(Schema-less) 유연성의 구조적 완벽 대비도

    위 인포그래픽을 보면 한눈에 대조가 갈 것입니다. RDBMS의 스케일-업은 단 한 대의 고가 전용 서버 사양을 계속 불리며 가격과 기술적 장벽에 부딪히지만, NoSQL의 스케일-아웃은 부하가 발생할 때마다 동일하고 가벼운 표준 인프라 서버 노드들을 옆으로 쪼르록 붙여 트래픽을 정밀 분산함으로써 무한대에 가까운 선형 확장을 실현해 냅니다.

    4. 트레이드-오프(Trade-Off)의 이해: NoSQL의 대가와 CAP 이론

    하지만 세상에 공짜 치즈는 없습니다. NoSQL이 압도적인 확장성과 속도, 유연성을 획득한 대가로 포기한 뼈아픈 영역이 있습니다. 이를 설명해 주는 정리가 컴퓨터 과학의 위대한 공식 중 하나인 CAP 이론(Brewer's Theorem)입니다.

    분산 데이터베이스 시스템은 다음의 세 가지 속성을 동시에 세 개 모두 완벽하게 보장하는 것은 불가능하며, 비즈니스 목표에 따라 반드시 하나를 희생해야 하는 트레이드-오프(Trade-Off) 관계를 지닙니다:

    • Consistency (일관성): 전 세계 어느 노드에 접속하더라도 사용자는 언제나 똑같이 완전히 업데이트된 최신 데이터를 읽을 수 있어야 합니다. (RDBMS의 심장)
    • Availability (가용성): 일부 노드에 장애가 나더라도 접속하는 모든 클라이언트는 언제나 에러 없이 정상 응답을 받아야 합니다.
    • Partition Tolerance (분산 내성): 노드 간에 네트워크 단절이나 메시지 유실 장애가 발생하더라도 전체 분산 시스템은 정상 작동해야 합니다.

    현대의 대규모 클라우드 분산 환경에서는 네트워크 분할 장애가 반드시 일어날 수밖에 없기 때문에, 분산 내성(P)은 기본 전제로 깔고 가야 합니다. 따라서 실무 아키텍트는 다음과 같은 두 가지 노선 중 하나를 선택해야 합니다.

    1. CP 계열 (일관성 + 분산 내성): 정합성이 극도로 중요한 금융 결제나 수수료 계산 등에는 일시적으로 성능이 밀리거나 가용성이 낮아지더라도 전 노드의 데이터가 완벽히 동기화될 때까지 읽기/쓰기를 통제합니다.
    2. AP 계열 (가용성 + 분산 내성): SNS 피드 조회, 상품 추천 카탈로그 등에는 전 노드의 데이터가 순간적으로 100% 일치하지 않더라도 (예: 내 친구가 올린 피드가 나에게 1초 뒤에 뜨더라도) 일단 서비스를 중단 없이 빠르게 제공하는 쪽을 선택합니다. 시간이 지나면 결국 전 노드의 데이터 정합성이 맞춰지는 최종 일관성(Eventual Consistency) 모델을 채용하는 것이 NoSQL 진영의 지혜로운 절충안입니다.

    마치며: 은탄환은 없다, 목적에 맞는 무기를 고르십시오

    오늘 우리는 RDBMS라는 든든한 거인이 왜 대용량 클라우드 트래픽 환경에서 한계를 겪게 되었는지, 그리고 이를 타파하기 위해 등장한 NoSQL의 탄생 원리와 동적 스키마(Schema-less)의 유연성, 수평적 확장성(Scale-Out)의 광활함을 마스터했습니다.

    "소프트웨어 아키텍처 세계에 모든 문제를 단번에 해결해 주는 '은탄환(Silver Bullet)'이란 존재하지 않습니다. RDBMS가 단단한 대리석으로 쌓아 올린 절대 보안의 고대 요새라면, NoSQL은 시시각각 변하는 전장에 맞춰 몇 분 만에 텐트를 치고 접을 수 있는 초고속 가상 기동 부대와 같습니다."

    결국 지난 포스팅에서 언급했던 폴리글랏 퍼시스턴스(Polyglot Persistence)의 이치대로, 데이터의 정확성이 생명인 금융/주문 정보는 RDS(관계형)에 맡기고, 대규모 로그 수집이나 유연한 상품 추천 카탈로그는 DynamoDB나 DocumentDB(NoSQL)에 나누어 담아 조화롭게 결합해 내는 아키텍트가 진짜 일류 개발자입니다.

    NoSQL의 사상을 확실하게 뇌리에 새겼으니, 실제 현업에서 NoSQL을 어떻게 분류하고 사용하는지 다양한 군단을 만나볼 시간입니다.

    다음 포스팅에서는 관계형부터 캐싱, 문서, 그래프, 원장, 시계열까지 현업에서 쓰는 대표적인 8가지 클라우드 데이터베이스의 성격과 비즈니스 활용 맵을 한 장으로 정리해 주는 '[클라우드 DB 유형] 관계형부터 시계열, 그래프까지! 현업에서 쓰는 8가지 클라우드 DB 특징 완벽 정리' 편으로 돌아오겠습니다. 오늘 배운 스케일-아웃 전략이나 CAP 이론에 대해 궁금한 점이 있다면 언제든 운영자 메일로 편하게 질문해주세요. 오늘도 안전하고 똑똑한 클라우딩 라이프 하세요. 감사합니다! 😉

    출처

    • 이현호. 실무 프로젝트로 완성하는 클라우드 환경에서 DB 구축과 웹 개발. 길벗캠퍼스. 2026.04. (2.2장 '관계형 vs 비관계형 데이터베이스' 및 10장 'NoSQL 데이터베이스', 042-043, 281-283페이지 참조)
    • 이현호. "02장. 데이터와 데이터베이스" 및 "10장. NoSQL 데이터베이스" 설명 오디오 가이드 스크립트 기반 RDBMS 확장성 극복 기전 및 CAP 분산 데이터베이스 정합성 아키텍처 대화록 반영.
    • Amazon Web Services - Understating NoSQL Databases (https://aws.amazon.com/nosql/) 및 CAP Theorem in Cloud Systems 안내 지침.

    자주 묻는 질문 (FAQ)

    Q. RDBMS가 대규모 트래픽 환경에서 수평적 확장(Scale-Out)을 하기 어려운 이유는 무엇인가요?

    A. RDBMS는 테이블 간 JOIN 연산과 엄격한 ACID 트랜잭션 일관성을 유지해야 하므로, 데이터를 여러 서버로 분산(Sharding)할 때 노드 간 동기화 비용과 성능 저하가 극심해 단일 고성능 서버(Scale-Up)에 의존하기 때문입니다.

    Q. NoSQL의 스키마리스(Schema-less) 구조가 제공하는 가장 큰 이점은 무엇인가요?

    A. 사전 테이블 정의가 필요 없는 동적 스키마를 지원하므로, 대용량 서비스 운영 중에도 서비스 중단을 유발하는 테이블 락(Table Lock) 없이 새로운 필드를 자유롭게 추가하고 비정형/반정형 데이터를 즉시 저장할 수 있습니다.

    Q. NoSQL은 분산 환경의 CAP 이론 트레이드오프에서 어떤 정합성 방식을 주로 채택하나요?

    A. 네트워크 분할 내성(P)과 높은 가용성(A)을 중시하는 AP 계열을 주로 채택하며, 데이터의 즉각적인 일치 대신 시간이 지나며 점진적으로 정합성을 동기화하는 '최종 일관성(Eventual Consistency)' 모델을 사용합니다.