SQL vs NoSQL

SQL vs NoSQL

📌sql 꼼꼼쟁이

  • 관계형 모델에서 시작됨
  • 행과 열로 이루어짐 => 데이터가 테이블 간의 관계로 연결된다
  • db: mysql, oracle, postgresql
  • 정해진 규칙, 체계적 구조, ACID원칙 중시
  • 정확성과 일관성 중시
  • 복잡한 관계 처리 강함

ACID 원칙

  • 원자성: all or nothing으로 처리되어야 한다
  • 일관성: 같은 연산을 여러 번 수행해도 같은 결과를 항상 내야 한다
  • 격리성: 여러 트랜잭션이 동시 실행되어도 서로 결과가 영향을 주고 받으면 안된다
  • 지속성: 성공적으로 수행된 트랜잭션은 장애가 발생해도 영구적으로 보존되어야 한다

그럼 어디에 쓰일 수 있을까?

정확성과 무결성이 최우선인 환경에서 필수

  • 금융 서비스 -> ACID 트랜잭션 필수. 이중/삼중 트랜잭션 구조
  • LCC 항공사 예약 시스템 -> SQL 트랜잭션 격리 기능 필수.
  • SAP ERP 시스템 -> 인사/회계/물류 하나로 엮을 경우 정합성 유지를 위해 필수

📌nosql 자유영혼

정형화되지 않은 로그, 사용자 행동 데이터와 같이 문서, 키-값, 그래프와 같은 다양한 구조를 받아들이는 비관계형 DB출시로 등장함

  • db: monogodb, redis
  • BASE원칙
  • 속도와 확장성 중시
  • 유연한 스키마 구조 => 문서 내 중첩이 가능한 비정규화 구조
  • 글로벌 서비스에 적합

BASE 원칙

일시적으로는 불일치할 수 있어도, 결국엔 일관된 상태에 도달한다

  • Basically Available: 기본적으로 가용성이 보장되어야 한다
  • Soft State: 상태가 유연하게 변화한다
  • Eventually Consistent: 결국엔 일관된 상태로 도달해야 한다

그럼 어디에 이걸 쓸까?

속도와 확장성을 우선해야 하는 상황에서 필수

  • 넷플릭스의 추천 시스템 -> 하루 수십TB의 시청 로그 실시간 분석 -> 빠른 저장 처리 필수 => Cassandra 클러스터
  • 쿠팡의 로켓배송 시스템 -> 초당 수만 건의 재고 요청 발생 => Redis 캐시 + DynamoDB조합
  • 포켓몬 GO -> 실시간 위치 동기화 & 글로벌로 필요 => Firestore 같은 분산형 NoSQL 사용

SQL과 NOSQL의 한계점 그리고 보완책

평가 기준

  • 확장성: 어떻게 커질 수 있을까?
  • 일관성: 데이터가 꼬이지 않게 하려면?
  • 스키마 유연성: 구조가 바뀌면 어떻게 하지?
  • 복잡한 관계 처리: JOIN의 힘과 한계

1. 확장성

  • SQL의 경우:
    • (과거) 수직 확장 방식 => (현재) 샤딩, 클러스터링, Google Spanner와 같은 newsql
  • NoSQL의 경우:
    • 애초에 수평 확장을 염두에 두고 설계함 -> 그래서 노드만 더 붙이면 자연스럽게 트래픽 증가에 대응할 수 있음

2. 일관성

  • SQL의 경우:
    • ACID 트랜잭션로 데이터 정합성이 매우 강함. 그래서 일관성 만족이 잘됨
  • NoSQL의 경우:
    • 최종적 일관성 Eventual Consistency을 따름.
    • 대신 CQRS, 보상 트랜잭션, 버전 관리 같은 설계 패턴으로 약점을 보완함

3. 스키마 유연성

  • SQL의 경우:
    • 테이블 구조 변경 시 -> ALTER 쿼리를 날리면 데이터에 락이 걸림
    • 그래서 마이그레이션 도구나 뷰 교체 전략을 사용함
  • NoSQL의 경우:
    • JSON 기반이라 구조 변경이 자유로움.

4. 복잡한 관계 처리

  • SQL의 경우:
    • JOIN 기능 강력함. 여러 테이블 한번에 연결해서 처리 가능
    • 복잡한 통계나 분석 보고서 작성에 유리
  • NoSQL의 경우:
    • JOIN 불가능
    • Application 레벨에서 조인 처리 또는 그래프 DB(Neo4j) 도구 병행 사용 필수

최신 트렌드: DB도 꽤 빠르게 변하고 있다

image

  • DBaaS - mysql, oracle 고민 덜어줌
  • 서버리스 DB - 자동으로 스케일 조절
  • 멀티모델 DB - 문서, 관계형, 그래프로 한번에 처리
  • AI 옵티마이저 - 쿼리 분석 후 인덱스 제안
  • Edge DB (Cloudflare D1)

기술 선택 가이드

앞으로 DB 선택할 때는?

  • “무엇을 쓸 것인가”보다는,
  • “우리가 원하는 서비스 경험에 어떤 구조가 가장 잘 붙는가?”
  1. 정확성이 생명이면? SQL – ACID 트랜잭션으로 철저한 정합성 보장
  2. 트래픽이 폭발하는 글로벌 서비스면? NOSQL – 수평 확장으로 트래픽 폭증 대응
  3. 기능이나 요구사항이 자주 바뀌면? NOSQL – JSON 기반으로 빠른 개발 가능
  4. 복잡한 리포트나 통계를 자주 써야 한다면? SQL – 강력한 JOIN과 쿼리 처리 능력
  5. 실시간 처리와 장기 분석이 모두 필요하다면? 하이브리드 구조 – 운영: NoSQL/ 분석: SQL 웨어하우스/ BigQuery + PostgreSQL 조합

참고한 IT 사이트: https://yozm.wishket.com/magazine/detail/3169/

results matching ""

    No results matching ""