2026년 6월 4일 목요일
글 목록
Lv.1 입문PostgreSQL / MongoDB
13분 읽기Lv.1 입문
시리즈트랜잭션? PostgreSQL과 MongoDB의 차이점은?! · 파트 1시리즈 허브 보기

트랜잭션이란 무엇인가? PostgreSQL과 MongoDB의 ACID 비교 — Part 1

트랜잭션이란 무엇인가? PostgreSQL과 MongoDB의 ACID 비교 — Part 1

트랜잭션은 단순한 쿼리 묶음이 아니다. PostgreSQL은 모든 단일 쿼리조차 암묵적 트랜잭션으로 처리하며, MongoDB는 4.0부터 멀티 도큐먼트 ACID 트랜잭션을 명시적으로 지원한다. ACID 원칙(원자성·일관성·격리성·지속성)의 기본 개념부터 두 데이터베이스가 실제로 어떻게 다르게 동작하는지 BEGIN/COMMIT 예제와 세션 기반 트랜잭션 코드로 비교한다.

시리즈 구성 — 트랜잭션? PostgreSQL과 MongoDB의 차이점은?!

  • Part 1 — 트랜잭션의 기본 개념과 ACID 원칙 (현재 편)
  • Part 2 — PostgreSQL의 트랜잭션 심화 (격리 수준, MVCC)
  • Part 3 — MongoDB의 트랜잭션 진화와 멀티 도큐먼트 트랜잭션
  • Part 4 — 실전 비교 — 성능, 확장성, 어떤 DB를 선택해야 할까?

목차

  1. 들어가며 — 왜 트랜잭션인가?
  2. 트랜잭션이란 무엇인가?
  3. ACID: 트랜잭션의 4대 원칙
    • 3-1. Atomicity (원자성)
    • 3-2. Consistency (일관성)
    • 3-3. Isolation (격리성)
    • 3-4. Durability (지속성)
  4. PostgreSQL vs MongoDB — ACID 지원 방식의 차이
  5. 2026년 현재, 두 DB의 위상
  6. Part 1 정리
  7. 실무 적용 노트

1. 들어가며 — 왜 트랜잭션인가?

"데이터베이스 하면 MySQL 아닌가요?"라고 묻는 시대는 지났다. 2026년 현재, 개발자들이 가장 많이 쓰는 데이터베이스 두 개를 꼽으라면 단연 PostgreSQL과 MongoDB다.

Stack Overflow Developer Survey 2025 기준으로 PostgreSQL은 전체 개발자의 약 **55.6%**가 사용 중이며, MongoDB는 약 **24%**로 그 뒤를 잇는다. 두 DB 모두 수년간 엄청난 진화를 거듭했고, 이제는 단순히 "관계형 vs 비관계형"으로 구분하기 어려운 수준까지 왔다.

그 중심에 있는 이야기가 바로 트랜잭션이다.

MongoDB가 처음 등장했을 때, 많은 개발자들은 "MongoDB는 트랜잭션이 없다"고 배웠다. 지금은? 상황이 완전히 달라졌다. 두 데이터베이스의 트랜잭션 철학과 구현 방식을 제대로 이해해야 올바른 아키텍처 결정을 내릴 수 있다.


2. 트랜잭션이란 무엇인가?

트랜잭션(Transaction)은 데이터베이스에서 하나의 논리적인 작업 단위를 의미한다. 여러 개의 쿼리가 묶여 하나처럼 처리된다.

가장 고전적인 예시는 은행 이체다.

1. A 계좌에서 10만 원 차감
2. B 계좌에 10만 원 추가

1번 작업은 성공했는데 2번 작업이 실패한다면? 돈은 공중으로 사라진다. 트랜잭션은 이런 상황을 막기 위해 "모두 성공하거나, 모두 실패하거나(All or Nothing)" 라는 보장을 제공한다.

-- PostgreSQL 트랜잭션 예시
BEGIN;

UPDATE accounts SET balance = balance - 100000 WHERE id = 'A';
UPDATE accounts SET balance = balance + 100000 WHERE id = 'B';

COMMIT;   -- 모두 성공 시 반영
-- ROLLBACK;  -- 하나라도 실패하면 전체 취소

아래 흐름은 트랜잭션이 어떻게 분기하는지 나타낸다.


3. ACID: 트랜잭션의 4대 원칙

트랜잭션이 올바르게 동작하기 위해서는 ACID 네 가지 속성을 만족해야 한다. ACID는 단순한 약어가 아니라, 데이터베이스 신뢰성의 근간을 이루는 원칙이다.

3-1. Atomicity (원자성)

"트랜잭션 내의 모든 작업은 전부 실행되거나 전혀 실행되지 않아야 한다."

원자성은 트랜잭션을 쪼갤 수 없는 최소 단위로 취급한다. 중간 상태는 존재할 수 없다.

  • 모든 작업 성공 → COMMIT (변경 사항 영구 반영)
  • 하나라도 실패 → ROLLBACK (변경 사항 전체 취소)

3-2. Consistency (일관성)

"트랜잭션 완료 후, 데이터베이스는 항상 일관된 상태를 유지해야 한다."

예를 들어 계좌 잔액이 음수가 되면 안 된다는 제약이 있다면, 트랜잭션 전후로 이 규칙은 항상 지켜져야 한다. 개발자가 정의한 비즈니스 규칙과 무결성 제약이 유지됨을 보장한다.

3-3. Isolation (격리성)

"동시에 실행되는 여러 트랜잭션은 서로 영향을 주어선 안 된다."

실제 운영 환경에서는 수천 개의 트랜잭션이 동시에 실행된다. 격리성은 각 트랜잭션이 마치 혼자 실행되는 것처럼 동작하도록 보장한다.

격리 수준(Isolation Level)은 성능과 일관성 사이의 트레이드오프를 조절하는 핵심 개념이다.

격리 수준Dirty ReadNon-Repeatable ReadPhantom Read
Read Uncommitted발생발생발생
Read Committed방지발생발생
Repeatable Read방지방지발생
Serializable방지방지방지

격리 수준별 동작 방식과 PostgreSQL의 MVCC(다중 버전 동시성 제어)는 Part 2에서 상세히 다룬다.

3-4. Durability (지속성)

"커밋된 트랜잭션의 결과는 시스템 장애가 발생하더라도 영구적으로 유지되어야 한다."

서버가 갑자기 꺼지더라도, 이미 COMMIT된 데이터는 사라지지 않는다. PostgreSQL은 WAL(Write-Ahead Log), MongoDB는 저널링(Journaling) 방식으로 이를 구현한다.


4. PostgreSQL vs MongoDB — ACID 지원 방식의 차이

두 데이터베이스 모두 ACID를 지원하지만, 그 철학과 범위가 다르다.

PostgreSQL의 ACID

PostgreSQL은 태생부터 ACID를 전제로 설계된 RDBMS다. 모든 단일 쿼리조차 트랜잭션으로 처리된다. BEGIN 없이도 UPDATE 한 줄은 자동으로 암묵적 트랜잭션(Auto-commit)으로 감싸진다.

-- 명시적 트랜잭션
BEGIN;
  INSERT INTO orders (user_id, amount) VALUES (1, 50000);
  UPDATE inventory SET stock = stock - 1 WHERE product_id = 42;
COMMIT;

-- 암묵적 트랜잭션 — 한 줄 자체도 원자적
DELETE FROM sessions WHERE expired_at < NOW();

PostgreSQL은 기본적으로 완전한 ACID를 보장하며, 이를 별도로 설정할 필요가 없다.

MongoDB의 ACID — 진화의 역사

MongoDB는 처음에 단일 도큐먼트(Single Document) 수준의 원자성만 보장했다. 하나의 도큐먼트 내 필드를 수정하는 작업은 원자적이었지만, 여러 도큐먼트나 컬렉션에 걸친 작업은 그렇지 않았다.

초기 MongoDB (4.0 이전):
- 단일 도큐먼트 수준 원자성만 지원
- 여러 컬렉션 간 트랜잭션 불가

WiredTiger 스토리지 엔진을 도입하고, **MongoDB 4.0(2018)**부터 멀티 도큐먼트 ACID 트랜잭션을 지원하기 시작했다. MongoDB 4.2에서는 샤딩된 클러스터에서도 분산 트랜잭션을 지원하게 되었다.

// MongoDB 멀티 도큐먼트 트랜잭션 예시
const session = client.startSession();
session.startTransaction();

try {
  await accounts.updateOne(
    { _id: 'A' },
    { $inc: { balance: -100000 } },
    { session }
  );
  await accounts.updateOne(
    { _id: 'B' },
    { $inc: { balance: 100000 } },
    { session }
  );
  await session.commitTransaction();
} catch (error) {
  await session.abortTransaction();
} finally {
  session.endSession();
}

핵심 차이점: PostgreSQL은 ACID가 기본값이고 모든 작업에 자동 적용된다. MongoDB는 단일 도큐먼트 작업에는 기본 원자성이 보장되지만, 멀티 도큐먼트 트랜잭션은 명시적으로 세션을 열고 관리해야 한다.


5. 2026년 현재, 두 DB의 위상

2026년 DB-Engines 랭킹 기준으로 PostgreSQL은 4위, MongoDB는 5위를 기록하고 있다. 두 데이터베이스는 서로를 향해 수렴하는 흥미로운 양상을 보인다.

항목PostgreSQLMongoDB
데이터 모델관계형 (테이블)도큐먼트 (JSON-like BSON)
기본 스키마고정 스키마유연한 스키마 (Schema-less)
쿼리 언어SQLMQL (MongoDB Query Language)
ACID 지원기본 완전 지원단일 도큐먼트 기본 / 멀티는 명시적
JSON 지원JSONB (고급 인덱싱 포함)네이티브 BSON 도큐먼트
수평 확장기본적으로 어려움 (확장 필요)네이티브 샤딩 지원
라이선스PostgreSQL License (BSD 유사)SSPL (MongoDB Inc.)
  • PostgreSQL: JSONB 지원 강화, 벡터 검색 확장(pgvector), 파티셔닝 개선 등으로 NoSQL 영역을 적극 흡수 중
  • MongoDB: 멀티 도큐먼트 ACID 트랜잭션, Atlas Vector Search 2.1, Queryable Encryption 2.0 등으로 엔터프라이즈 신뢰성을 확보 중

두 데이터베이스의 경계는 점점 흐려지고 있지만, 핵심 철학과 트랜잭션 처리 방식의 차이는 여전히 아키텍처 선택에 중요한 기준이 된다.


6. Part 1 정리

이번 파트에서는 트랜잭션의 기본 개념과 ACID 원칙, 그리고 PostgreSQL과 MongoDB가 이를 어떻게 다르게 접근하는지 살펴봤다.

핵심 요약:

  • 트랜잭션 = 논리적 작업의 최소 단위, All or Nothing
  • ACID = 원자성 / 일관성 / 격리성 / 지속성
  • PostgreSQL = 태생부터 완전한 ACID, 모든 작업이 자동으로 트랜잭션
  • MongoDB = 단일 도큐먼트는 기본 원자성, 멀티 도큐먼트는 4.0부터 명시적 트랜잭션 지원

Part 2에서는 PostgreSQL의 트랜잭션을 깊이 파헤친다. MVCC(다중 버전 동시성 제어), 격리 수준별 동작 방식, 교착 상태(Deadlock) 문제까지 다룬다.


7. 실무 적용 노트

참고 자료

  • Bytebase: Postgres vs. MongoDB (2025)
  • tech-insider.org: MongoDB vs PostgreSQL 2026
  • DEV Community: PostgreSQL vs MongoDB in 2025
  • leanware.co: MongoDB vs PostgreSQL
  • hoing.io: MongoDB 트랜잭션 격리 수준

이 글 공유하기

시리즈 내비게이션

트랜잭션? PostgreSQL과 MongoDB의 차이점은?!

현재 글 1 · 4 편 공개

같은 주제 더 보기·대표 시리즈로 시작

English

최신 글을 RSS로 받아보세요

RSS로 새 글과 시리즈 업데이트를 바로 받아볼 수 있습니다.

RSS 구독 안내 보기