MySQL, PostgreSQL, NoSQL

1hyung·2025년 5월 12일

개발

목록 보기
3/6
post-thumbnail

MySQL, PostgreSQL, NoSQL: 데이터베이스 비교

MySQL: 빠르고 간단한 관계형 DBMS

장점:

  • 속도와 성능: 읽기 중심의 웹 애플리케이션에 적합

  • 사용 용이성: 설치와 설정이 간단하여 초보자에게 친숙

  • 광범위한 지원: 다양한 호스팅 서비스와 도구에서 지원

단점:

  • 기능 제한: 고급 기능이나 복잡한 쿼리 처리에 한계가 있을 수 있음

  • ACID 준수: InnoDB 스토리지 엔진 사용 시 ACID를 지원하지만, 다른 엔진에서는 제한적일 수 있음

PostgreSQL: 확장성과 표준 준수를 갖춘 고급 RDBMS

장점:

  • 표준 준수: SQL 표준을 엄격히 준수하며, 복잡한 쿼리와 트랜잭션 처리에 강점

  • 확장성: 사용자 정의 함수, 데이터 타입, 인덱스 등을 지원하여 유연한 확장이 가능

  • ACID 완전 지원: 데이터 무결성과 일관성을 보장

단점:

  • 학습 곡선: 다양한 기능으로 인해 초기 학습이 필요할 수 있음

  • 설정 복잡성: 고급 기능을 활용하려면 세부적인 설정이 필요할 수 있음

NoSQL: 유연한 스키마와 수평 확장이 가능한 비관계형 DBMS

장점:

  • 유연한 스키마: 구조화되지 않은 데이터나 빈번한 스키마 변경에 적합

  • 수평 확장: 서버를 추가하여 쉽게 확장 가능, 빅데이터 처리에 유리

  • 다양한 데이터 모델: 문서형, 키-값, 그래프, 컬럼 패밀리 등 다양한 모델 지원

단점:

  • 일관성 모델: 대부분의 NoSQL DB는 eventual consistency를 채택하여 즉각적인 일관성이 보장되지 않을 수 있음.

  • 제한된 표준화: SQL과 같은 표준 쿼리 언어 부재로 인해 학습이 필요할 수 있음.

ACID란 무엇인가?

ACID는 다음 네 가지 속성의 약어:

  • Atomicity (원자성)
    트랜잭션 내의 모든 작업이 전부 성공하거나, 전혀 실행되지 않아야 함을 의미
    즉, 트랜잭션 중 일부 작업만 수행되는 상황은 허용되지 않음
    예를 들어, 은행 계좌 이체 시 송금과 수금이 모두 완료되어야 하며, 하나라도 실패하면 전체 트랜잭션이 취소되어야 함

  • Consistency (일관성)
    트랜잭션이 실행되기 전과 후에 데이터베이스가 일관된 상태를 유지해야 함을 보장
    즉, 데이터베이스의 모든 무결성 제약 조건이 항상 만족되어야 함
    예를 들어, 계좌 잔액이 음수가 되지 않도록 하는 제약 조건이 있다면, 트랜잭션 실행 후에도 이 조건이 유지되어야 함

  • Isolation (격리성)
    동시에 실행되는 트랜잭션들이 서로의 작업에 영향을 미치지 않도록 보장
    즉, 각 트랜잭션은 독립적으로 실행되어야 하며, 다른 트랜잭션의 중간 상태를 볼 수 없어야 함
    이를 통해 동시성 문제를 방지할 수 있음

  • Durability (지속성)
    트랜잭션이 성공적으로 완료되면, 그 결과는 영구적으로 데이터베이스에 저장되어야 하며, 시스템 장애가 발생하더라도 손실되지 않아야 함
    예를 들어, 전원 장애 후에도 이전에 완료된 트랜잭션의 결과는 데이터베이스에 남아 있어야 함

ACID가 중요한 이유

ACID 속성은 데이터베이스의 신뢰성과 일관성을 유지하는 데 필수적
특히 금융, 의료, 전자상거래 등 정확한 데이터 처리가 중요한 분야에서 ACID는 다음과 같은 이유로 중요함:

  1. 데이터 무결성 보장: 트랜잭션이 부분적으로만 실행되는 것을 방지하여 데이터의 일관성을 유지

  2. 동시성 제어: 여러 사용자가 동시에 데이터에 접근하더라도 충돌이나 데이터 손상이 발생하지 않도록 함

  3. 장애 복구: 시스템 장애 발생 시에도 트랜잭션의 결과를 보존하여 데이터 손실을 방지

실생활 예시: 은행 계좌 이체

사용자 A가 사용자 B에게 100,000원을 이체하는 트랜잭션을 고려

  • Atomicity: A의 계좌에서 100,000원을 인출하고 B의 계좌에 입금하는 두 작업이 모두 성공해야 합니다. 하나라도 실패하면 전체 트랜잭션이 취소되어야 합니다.

  • Consistency: 이체 전후에 두 계좌의 총 합계는 변하지 않아야 하며, 계좌 잔액이 음수가 되는 등의 무결성 제약 조건이 유지되어야 합니다.

  • Isolation: 다른 사용자가 동시에 A 또는 B의 계좌에 접근하더라도 이 트랜잭션의 중간 상태를 볼 수 없어야 하며, 트랜잭션 완료 후에만 변경된 데이터를 볼 수 있어야 합니다.

  • Durability: 이체가 완료된 후 시스템에 장애가 발생하더라도 이체 결과는 데이터베이스에 영구적으로 저장되어야 합니다.

비교

특성MySQLPostgreSQLNoSQL
데이터 모델관계형관계형비관계형
스키마고정고정유연
확장성수직 확장수직 확장수평 확장
ACID 지원부분 지원 (엔진에 따라 다름)완전 지원제한적 지원
복잡한 쿼리제한적강력한 지원제한적 또는 미지원
사용 사례웹 애플리케이션, CMS 등금융, 분석, 복잡한 시스템 등빅데이터, 실시간 분석, IoT 등

선택 가이드

  • MySQL을 선택해야 할 때:

    1. 빠른 개발과 배포가 필요한 웹 애플리케이션

    2. 복잡한 쿼리나 고급 기능이 필요하지 않은 경우

  • PostgreSQL을 선택해야 할 때:

    1. 데이터 무결성과 복잡한 트랜잭션이 중요한 시스템

    2. 사용자 정의 기능이나 고급 쿼리 처리가 필요한 경우

  • NoSQL을 선택해야 할 때:

    1. 구조화되지 않은 데이터나 빈번한 스키마 변경이 예상되는 경우

    2. 대규모 데이터 처리와 수평 확장이 필요한 시스템

결론

각 데이터베이스는 고유한 강점과 약점을 가지고 있으며, 프로젝트의 요구사항에 따라 적합한 선택이 달라진다. 예를 들어, 빠른 개발과 배포가 중요한 웹 애플리케이션에는 MySQL이, 복잡한 트랜잭션과 데이터 무결성이 중요한 시스템에는 PostgreSQL이, 대규모 데이터 처리와 유연한 스키마가 필요한 경우에는 NoSQL이 적합할 수 있다.

프로젝트의 특성과 요구사항을 면밀히 분석하여 가장 적합한 데이터베이스를 선택하여야 한다.

profile
이유가 많은 사람보다 (자기)개발자가 되고싶은 1hyung입니다.

0개의 댓글