💾 Backend/DB, SQL

MySQL, PostgreSQL 차이

hjinn0813 2024. 12. 10. 17:47
728x90

개인 프로젝트를 해보려다가 MySQL과 PostgreSQL의 차이가 궁금해져서 이것저것 자료를 찾아보고 공부해보았다. 둘의 공통점과 차이점을 공부하면서 ORDBMS도 알게 되었고, 올해 상반기에 정보처리기사 공부하면서 봤던 ACID도 다시 보게 되었다. 하나씩 정리해보자.✍


MySQL과 PostgreSQL의 공통점과 차이점

일단 공통점은 둘 다 '관계형 데이터베이스 시스템(RDBMS)'이라는 것이다.

둘의 차이점은 데이터를 어떻게 처리하고 관리하느냐에 있다.

MySQL의 특징

  • 스토리지 엔진으로 InnoDB를 사용할 때에만 ACID를 준수한다.
  • 순수 관계형 데이터베이스 시스템이다.
  • MVCC를 제한적으로 사용하여 읽기 전용 명령을 관리하기 편리하지만, 동시성이 필요한 경우는 선호되지 않는다.
    읽기 요청과 쓰기 요청이 충돌하지 않도록 처리한다.
    예를 들어, A와 B가 동시에 같은 데이터에 다른 작업을 하려는 경우, 충돌을 방지하기 위해 데이터에 락을 걸고, 요청이 들어온 순서대로 실행시킨다. 나중에 들어온 요청은 데이터에 락이 풀릴 때까지 기다려야 한다.

PostgreSQL의 특징

  • 항상 ACID를 준수한다.
  • 객체 관계형 데이터베이스 시스템(ORDBMS)이다.
  • MVCC를 항상 사용하여, 동시 트랜잭션이 필요한 경우에 유리하다.
    하나의 테이블에 여러 시점의 데이터가 존재한다.
    만약 A와 B가 동시에 같은 데이터에 다른 작업을 하려는 경우, 같은 테이블이지만 서로 다른 버전을 보면서 동시에 작업할 수 있다.

객체 관계형 데이터베이스 시스템 (ORDBMS)

  • 관계형 데이터베이스의 구조를 기반으로, 객체지향 프로그래밍의 개념을 추가로 지원하는 데이터베이스 시스템.
  • 기본 개념은 테이블+객체.
    테이블의 열(컬럼)에 배열이나 JSON 같은 복잡한 데이터를 추가할 수 있고, 상속과 메서드를 지원한다.
# 배열 타입을 가진 테이블 생성
CREATE TABLE friend (
    name VARCHAR(50),
    age INT,
    favorite_food TEXT[]
);

# 데이터 삽입
INSERT INTO friend (name, age, favorite_food)
VALUES ('Linda', 33, ARRAY['peach', 'apple', 'salad']);

MVCC (Multi-Version Concurrency Control)

다중 버전 동시성 제어.

동시에 여러 유저가 데이터베이스를 사용해도 충돌 없이 효율적으로 처리하는 기술.

MVCC의 작동 방식

  1. 데이터 변경 전의 상태를 보존: 데이터를 수정할 때, 기존 데이터를 즉시 덮어쓰지 않고 새로운 버전을 생성한다. 이렇게 하면 변경 중에도 다른 사용자가 과거 데이터를 안전하게 읽을 수 있다. (반면에 MySQL은 데이터를 수정하면 새로운 데이터가 과거의 데이터에 덮어씌워짐)
  2. 쓰기-읽기 충돌 방지: A가 데이터를 수정하는 동안, B는 수정 전 데이터를 읽을 수 있다. B가 데이터를 수정하려고 하면 A의 작업과 충돌하지 않게 새로운 버전에서 작업한다.
  3. "정리" 작업: 시간이 지나면 사용하지 않는 오래된 데이터 버전은 데이터베이스가 자동으로 삭제(정리)한다.

그러므로 MVCC는 동시성이 높은 환경에서 최적의 데이터 관리 방식이지만, 데이터를 여러 버전으로 관리하기 때문에 저장공간과 관리비용이 늘어날 수 있다.


ACID 원칙

ACID는 데이터베이스 트랜잭션의 안정성과 무결성을 보장하기 위한 4가지 특성을 의미한다.

A: 원자성 (Atomicity) "모두 성공하거나, 모두 실패해야 한다"
트랜잭션 작업이 중간에 실패하면, 그동안 처리된 작업도 전부 취소(롤백)되어야 한다.
예: 송금 시 돈이 빠져나갔는데 상대 계좌에 입금되지 않는 일이 없어야 함.
C: 일관성 (Consistency) "트랜잭션 후 데이터는 항상 유효한 상태여야 한다"
규칙에 맞는 데이터만 저장되도록 보장한다.
예: 은행 계좌의 총 잔액이 송금 전후로 변하지 않음.
I: 고립성 (Isolation) "동시 작업은 서로 간섭하지 않아야 한다"
여러 트랜잭션이 동시에 실행되어도 각각의 작업이 서로 영향을 주지 않아야 한다.
예: A와 B가 동시에 같은 계좌에 작업을 해도 결과가 뒤섞이지 않음.
D: 지속성 (Durability) "트랜잭션 결과는 영구적으로 저장되어야 한다"
트랜잭션이 완료되면, 데이터는 서버가 꺼지거나 문제가 생겨도 보존된다.
예: 송금이 완료되면, 시스템이 꺼져도 기록이 유지됨.
728x90