RDBMS와 NoSQL의 차이점 정리 및 로그 저장 구조 개선 방향

송현진·2025년 6월 19일
0

DataBase

목록 보기
2/10

RDBMS (Relational Database Management System)

RDBMS(Relational Database Management System)는 데이터를 관계형 모델(Relational Model)로 저장하고 관리하는 시스템이다. 데이터는 테이블(Table)에 저장되며 각 테이블은 행(Row)열(Column)로 구성된다. 이러한 테이블은 명확한 스키마(schema)를 가지고 있으며 테이블 간 관계(relationship)를 정의하여 복잡한 데이터를 정규화할 수 있다.

RDBMS의 핵심 구조

1. 스키마(Schema)

  • 고정된 구조(정적 스키마)를 기반으로 한다.
  • 테이블마다 컬럼의 이름, 데이터 타입, 제약조건 등이 명확히 정의되어 있다.
  • 운영 환경에서는 스키마 변경 시 마이그레이션이 필요하여 신중하게 관리해야 한다.
  • 제약조건(NOT NULL, UNIQUE, PRIMARY KEY, FOREIGN KEY, CHECK)을 통해 데이터 정합성을 보장한다.

2. 언어(Language)

  • 표준 SQL(Structured Query Language) 사용
    • SELECT, INSERT, UPDATE, DELETE, JOIN, GROUP BY, ORDER BY
  • 복잡한 조인(Join), 서브쿼리, 트랜잭션 등을 지원

3. 트랜잭션(Transaction)

  • ACID(Atomicity, Consistency, Isolation, Durability) 원칙을 기반으로 동작
  • 트랜잭션은 하나의 단위로 처리되며, 일부 실패 시 전체 롤백 가능
  • 금융, 회계, 이커머스 등 정합성과 신뢰성이 핵심인 시스템에 매우 적합

4. 확장성(Scalability)

  • 수직 확장(Scale-Up) 중심
    • CPU, RAM 등 하드웨어를 강화하여 성능 향상
    • 한계 도달 시 비용과 성능의 trade-off 발생
  • 수평 확장(Scale-Out)은 구조상 어려움
    • 샤딩이나 분산 처리 시 애플리케이션 단에서 많은 변경 필요

RDBMS의 특징

  • 정형 데이터 처리에 최적화
  • 스키마 기반의 엄격한 데이터 관리
  • 관계형 데이터 모델링과 JOIN 기반 질의에 강점
  • 데이터 무결성 제약과 트랜잭션 관리 기능이 매우 강력함

장점

장점설명
트랜잭션 보장ACID 원칙으로 은행/회계 등 중요한 시스템에서 안정성 확보
정합성 유지Foreign key 등으로 관계에 대한 무결성 유지 가능
복잡한 질의 가능JOIN, SubQuery 등을 통한 강력한 데이터 질의 처리
풍부한 도구와 생태계MySQL Workbench, pgAdmin, Oracle SQL Developer 등 GUI 도구 많음

단점

단점설명
스키마 유연성 부족데이터 구조 변경이 어렵고 배포 시 부담됨
수평 확장성 부족여러 서버로 분산이 어려워 병목 생기기 쉬움
대용량 비정형 데이터 처리 부적합로그, 센서 데이터, JSON 등 비정형 데이터 처리에 부적절
초기 설계 부담잘못된 스키마 설계는 전체 구조를 흔들 수 있음

대표 RDBMS와 사용 사례

DBMS특징적합한 사용 사례
MySQL경량, 쉬운 사용, 커뮤니티 활발스타트업, 웹 서비스, 이커머스
PostgreSQLJSON, 함수, 확장성데이터 분석, GIS, 복합 구조
Oracle DB고신뢰성, 대규모 트랜잭션ERP, 대형 금융 시스템
MariaDBMySQL 기반 고성능MySQL 대체, 오픈소스 선호 환경

NoSQL (Not Only SQL)

NoSQL은 고정된 테이블 구조 없이 유연한 데이터 모델과 대규모 확장성을 제공하는 비관계형 데이터베이스다. 데이터 구조에 따라 문서(Document), 키-값(Key-Value), 컬럼(Column Family), 그래프(Graph) 등으로 구분된다.

NoSQL의 구조

1. 스키마 없음(Schema-less)

  • JSON 등 유동적인 데이터 구조를 그대로 저장
  • 필드의 유무나 타입이 유연하여 스키마 변경 부담이 적음

2. 쿼리 언어

  • 표준 SQL 대신 각 DB 고유의 DSL 또는 명령어 사용
    • MongoDB → db.collection.find()
    • Redis -> SET, GET, INCR

3. 트랜잭션

  • ACID 대신 BASE 특성을 가짐
    • Basically Available: 시스템은 항상 응답함
    • Soft state: 상태는 시간이 지나도 변할 수 있음
    • Eventually consistent: 언젠가는 일관성 도달
  • 일부 NoSQL은 트랜잭션 제공 (MongoDB는 다큐먼트 단위 트랜잭션 지원)

4. 확장성

  • 수평 확장(Scale-Out)에 최적화됨
    • 샤딩과 복제를 기본적으로 지원
    • 대규모 시스템에서 높은 가용성/성능 유지

NoSQL의 특징

  • 스키마 유연성으로 빠른 서비스 프로토타이핑 가능
  • 대규모 트래픽, 실시간 쓰기 성능에 유리
  • 다양한 데이터 모델을 통해 다양한 요구 대응 가능

장점

장점설명
스키마 유연성빠른 개발과 빈번한 변경에 적합
높은 쓰기 성능대량 데이터 적재/처리에 강점
수평 확장 용이노드 추가로 확장 가능, 클러스터 구성 쉬움
다양한 데이터 구조 지원비정형 데이터, 중첩된 구조 표현 가능 (JSON 등)

단점

단점설명
트랜잭션 미지원복잡한 로직 구현은 애플리케이션 단에서 제어 필요
관계형 질의 어려움JOIN 부재, 복잡한 관계 모델링에 부적합
일관성 저하Eventually Consistent 특성상 실시간 일관성 보장 어려움
데이터 정합성 미보장스키마와 제약조건 없으므로 무결성 확인 어려움

대표 NoSQL DBMS와 사용 사례

DB유형특징사용하면 좋은 경우
MongoDB문서형JSON 기반 문서, 유연한 구조로그 수집, CMS, 빠른 프로토타이핑
Redis키-값형인메모리, 빠른 응답 속도세션 저장소, 캐시, 실시간 순위 시스템
Cassandra컬럼형분산 환경, 빠른 쓰기IoT, 대규모 트래픽 로그 저장
Neo4j그래프형관계 탐색 특화추천 시스템, 소셜 그래프 탐색

MySQL 로그 저장 구조 개선 고민

현재 서비스에서 MySQL에 로그 데이터를 저장하고 있는 상황인데 로그는 일반적으로 쓰기 빈도는 높고 읽기 빈도는 낮은 비정형 데이터다.

문제점

  • MySQL은 정형 데이터와 트랜잭션에 강하지만 대용량 쓰기/읽기에는 병목이 생길 수 있음
  • 로그 데이터는 구조가 자주 바뀌고 필드가 다양할 수 있음 -> 고정 스키마와 충돌
  • 조회할 일이 거의 없지만 쌓이는 데이터가 많아서 DB 디스크를 잡아먹음
  • 파티셔닝, 인덱싱, 아카이빙 등을 하지 않으면 성능 저하 발생

개선 방향 고민

1. 로그 저장을 NoSQL(MongoDB 등)으로 이관

  • 로그는 JSON처럼 유동적인 형식을 가지기 때문에 문서형 DB와 잘 맞음
  • 샤딩, 압축, TTL 자동 삭제 기능으로 저장 효율과 유지 관리 용이

2. MySQL에 저장하되 별도 로그 테이블로 분리

  • 서비스 테이블과 분리하여 인덱스/쿼리 영향을 최소화
  • 주기적으로 아카이빙: 파티션 + 스케줄러(cron)로 주기적 백업/삭제
  • 로그 테이블에 created_at 기준으로 파티션 나누기

3. Kafka 등과 연동하여 로그 수집 + ELK 연동

  • 로그 -> Kafka -> Elasticsearch -> Kibana로 연동하면 분석 및 시각화에 최적
  • MySQL에는 최소한의 메타 데이터만 저장하고, 실로그는 Kafka/Elastic으로 이동

결론

  • 정형 데이터 + 복잡한 비즈니스 로직 = RDBMS(MySQL, PostgreSQL 등)
  • 비정형 + 고속 쓰기 + 유연한 스키마 = NoSQL(MongoDB, Redis 등)
  • 실시간 분석 + 시각화 목적 = Kafka + Elasticsearch (ELK 스택)

로그처럼 쓰기 중심 + 비정형 + 분석 목적이 강한 데이터는 RDBMS보다는 MongoDB 또는 ELK 기반 구조가 훨씬 더 적합하다. 초기에는 MySQL에 저장하고 점차 분리/이관 구조를 갖추는 방식으로 확장 가능하다.


참고

profile
개발자가 되고 싶은 취준생

0개의 댓글