티스토리 뷰

반응형

✅ 트랜잭션(Transaction)의 개념과 ACID 특성을 설명하라

**트랜잭션(Transaction)**은 데이터베이스에서 하나의 논리적 작업 단위를 의미하며,
이 작업은 완전히 실행되거나 전혀 실행되지 않아야 합니다.
즉, 신뢰성과 일관성 있는 데이터 처리를 보장하는 핵심 메커니즘입니다.

이번 글에서는 트랜잭션의 정의와, 이를 안정적으로 수행하기 위한 ACID 특성을 중심으로 정리합니다.


📌 1. 트랜잭션이란?

트랜잭션은 데이터베이스의 일련의 작업들을 하나의 단위로 묶은 것으로,
모든 작업이 성공해야만 실제로 반영되며, 하나라도 실패하면 전체가 롤백되어야 합니다.

예시: 은행 계좌 이체

  1. A 계좌에서 10만 원 출금
  2. B 계좌에 10만 원 입금

→ 이 두 작업은 반드시 함께 성공하거나 함께 실패해야 합니다.


📌 2. ACID란?

트랜잭션의 안정성과 일관성을 보장하기 위한 4가지 핵심 속성입니다.

특성 설명

A: Atomicity (원자성) 모든 작업이 전부 수행되거나 전혀 수행되지 않아야 함
C: Consistency (일관성) 트랜잭션 전후 데이터베이스의 상태가 일관되게 유지
I: Isolation (격리성) 동시에 실행되는 트랜잭션은 서로 간섭하지 않아야 함
D: Durability (지속성) 트랜잭션이 완료되면 그 결과는 영구적으로 저장

📌 3. PostgreSQL에서의 트랜잭션 예시

BEGIN;

UPDATE accounts SET balance = balance - 100000 WHERE id = 1;
UPDATE accounts SET balance = balance + 100000 WHERE id = 2;

COMMIT;

혹은 문제가 발생하면:

ROLLBACK;

→ 원래 상태로 복구


📌 4. Node.js / Prisma에서의 트랜잭션 처리

반응형
await prisma.$transaction(async (tx) => {
  await tx.account.update({
    where: { id: 1 },
    data: { balance: { decrement: 100000 } },
  });

  await tx.account.update({
    where: { id: 2 },
    data: { balance: { increment: 100000 } },
  });
});

→ 모든 작업이 실패 없이 완료되어야 COMMIT,
중간에 에러가 발생하면 자동 ROLLBACK


📌 5. 격리 수준 (Isolation Level)

수준 설명

Read Uncommitted 커밋되지 않은 데이터 읽기 허용 (가장 낮은 안전성)
Read Committed 커밋된 데이터만 읽기 가능 (PostgreSQL 기본값)
Repeatable Read 동일 쿼리 결과 보장, 팬텀 리드 발생 가능
Serializable 트랜잭션을 직렬화처럼 실행 (가장 높은 안전성, 성능 낮음)

→ PostgreSQL에서는 기본적으로 Read Committed 격리 수준을 제공


📌 6. 실무 경험

🧪 문제

  • 결제 처리 도중, 재고 감소 후 결제 실패 시 데이터 불일치 발생

✅ 해결

  • 결제 로직 전체를 트랜잭션으로 묶어 처리
  • BEGIN → 재고 차감 + 포인트 사용 → 결제 진행 → COMMIT
  • 도중에 하나라도 실패 시 → ROLLBACK

→ 데이터 무결성 확보 + CS 이슈 감소


📌 7. 면접에서 이렇게 설명하세요

트랜잭션은 데이터베이스 작업을 하나의 논리 단위로 처리하여 데이터 일관성과 신뢰성을 보장합니다.
특히 ACID 속성은 대규모 시스템에서도 안정적인 데이터 처리를 가능하게 하며,
실무에서는 결제, 포인트 처리, 계좌 이체 등에서 트랜잭션을 적극 활용해 무결성을 확보했습니다.



트랜잭션,ACID,PostgreSQL트랜잭션,Prisma트랜잭션,데이터무결성,IsolationLevel,백엔드개발,DB처리,결제로직,면접질문


 

※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/07   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함
반응형