ABOUT

성능과 운영 안정성을 함께 끌어올리는 개발자입니다.

92% Positional Error Reduction
79% p95 Latency Improvement
90%+ Long Tasks Reduction

2022.02 · 한국장학재단

우수 멘티

한국장학재단 사회 리더 대학생 멘토링 IT

2022.10 · 동작구청

우수 인재상

동작구청 우수 SW 인재

2025.05 · (주) 그랩

프로그래밍 우수상

(주) 그랩 우수 프로그램 개발

2025.05 · AWSKRUG

AWS한국사용자모임 발표

AI agent 스크립트 튜닝 관련 발표

ComputerScience

Development

Engineering

Trouble Shooting

GUESTBOOK

첫 마음부터
함께 나누는 온기

방명록 작성하러 가기

SUBSCRIBE

최신소식을
편하게 만나보세요.

트랜잭션 (Transaction)

정의
전부 아니면 무(All or Nothing)

내 계좌에서 출금을 해서, 친구의 계좌에 돈을 입금하는 작업이 있다고 하면

1
나의 계좌에서 10,000원을 출금한다.
2

친구의 계좌에 10,000을 입금한다.

위 처럼 2가지의 작업을 생각할 수 있습니다. 

이 때, 만약 1번은 성공했는데 2번 과정에서 오류가 발생한다면, 돈이 출금 되었지만 상대방에게 입금은 안되는 끔찍한 상황이 발생합니다.

이런 상황을 방지하기 위해 1, 2번을 하나의 작업으로 묶어서 처리하며, 하나라도 실패하면 전체를 취소해야 합니다.

 

위처럼 데이터베이스나 시스템 운영에서 여러 개의 작업을 하나로 묶어 '전부 성공'하거나 '전부 실패'하게 만드는 장치입니다.

하나의 논리적 개념으로 더 이상 쪼개면 업무의 의미가 사라지는 상태(작업의 최소 단위)입니다.

 

 

트랜잭션 보장의 필요성

1. 데이터의 일관성 (Consistency)

  • 데이터베이스는 항상 일관된 상태를 유지해야 합니다.
  • 트랜잭션 실행 중 일부 작업만 성공하고 나머지가 실패하면 데이터가 비정상적인 상태에 빠질 수 있습니다.
  • 예를 들어, 은행에서 계좌 이체가 이루어질 때:
    • 송금 계좌에서 돈을 차감했지만, 수신 계좌에 돈이 입금되지 않았다면 데이터베이스는 불일치 상태가 됩니다.
    • 트랜잭션이 보장되면 이 작업이 하나의 단위로 처리되어 모두 성공하거나 모두 실패하게 됩니다.

2. 원자성 (Atomicity)

  • 트랜잭션 내의 모든 작업은 모두 실행되거나, 전혀 실행되지 않은 상태로 남아야 합니다.
  • 트랜잭션 보장을 통해 중간 단계에서 시스템 장애가 발생하더라도 데이터베이스가 잘못된 상태로 남지 않게 됩니다.

3. 다중 사용자 환경의 동시성 제어 (Concurrency Control)

  • 여러 사용자가 동시에 데이터베이스를 접근하고 수정할 때 데이터 충돌이 발생할 수 있습니다.
  • 트랜잭션은 고립성(Isolation)을 보장하여 각 사용자가 독립적으로 작업할 수 있도록 도와줍니다.
    • 예를 들어, 두 사용자가 동시에 같은 상품의 재고를 업데이트하면 재고가 잘못 계산될 수 있습니다. 트랜잭션은 이를 방지합니다.

4. 데이터 무결성 유지 (Integrity)

  • 트랜잭션은 데이터 무결성 제약 조건(예: 외래 키, 유니크 키 등)을 위반하지 않도록 보장합니다.
  • 트랜잭션이 중간에 실패하면 데이터베이스는 이전 상태로 롤백되어 무결성을 유지합니다.

5. 시스템 장애 복구 (Durability)

  • 트랜잭션이 성공적으로 완료되면 그 변경 사항은 데이터베이스에 영구적으로 저장됩니다.
  • 전원이 꺼지거나 시스템이 비정상 종료되더라도 트랜잭션 로그를 통해 데이터를 복구할 수 있습니다.

트랜잭션이 없을 경우의 문제점

예제: 은행 계좌 이체

  1. 송금 계좌에서 금액 차감
    sql
    코드 복사
    UPDATE accounts SET balance = balance - 100 WHERE id = 1;
  2. 수신 계좌에 금액 추가
    sql
    코드 복사
    UPDATE accounts SET balance = balance + 100 WHERE id = 2;

문제:

  • 두 명령 사이에 시스템 장애(서버 다운, 네트워크 오류)가 발생하면:
    • 송금 계좌에서는 돈이 빠져나갔지만, 수신 계좌에는 돈이 입금되지 않을 수 있음.
    • 데이터베이스는 불일치 상태에 빠지게 됨.

해결:

  • 트랜잭션으로 처리하면 작업 단위가 하나로 묶이고, 실패 시 롤백하여 이전 상태를 복원할 수 있습니다.
    sql
    코드 복사
    BEGIN TRANSACTION; UPDATE accounts SET balance = balance - 100 WHERE id = 1; UPDATE accounts SET balance = balance + 100 WHERE id = 2; COMMIT;

ACID 특성

트랜잭션은 ACID라는 특성을 보장합니다:

  1. Atomicity (원자성): 모두 수행되거나 전혀 수행되지 않음.
  2. Consistency (일관성): 트랜잭션 후 데이터의 일관성 유지.
  3. Isolation (고립성): 각 트랜잭션은 서로 독립적으로 수행.
  4. Durability (내구성): 트랜잭션 성공 시 변경 사항 영구 저장.

실무에서의 적용

  • 재고 관리 시스템:
    • 상품 주문 시, 재고 감소와 결제 내역 저장을 하나의 트랜잭션으로 처리.
  • 은행 시스템:
    • 계좌 이체, 대출 승인, 잔액 조회 등의 작업에 트랜잭션 사용.
  • 전자상거래 플랫폼:
    • 주문 처리, 결제 승인, 배송 상태 업데이트 등을 트랜잭션으로 묶음.

결론

트랜잭션을 보장하면 데이터베이스가 항상 신뢰할 수 있는 상태를 유지할 수 있습니다. 특히, 시스템 장애나 동시성 문제로 인해 발생할 수 있는 데이터 불일치를 방지하고, 데이터의 무결성과 일관성을 확보하기 위해 트랜잭션은 필수적입니다.

728x90