✅ 트랜잭션이란?
트랜잭션은 데이터베이스에서 하나의 논리적인 작업 단위입니다.
예를 들어, 은행 계좌 이체처럼 "A 계좌에서 출금하고 B 계좌에 입금"하는 과정은 한 번에 일어나야 하며, 이 전체 과정을 하나의 트랜잭션으로 봅니다.
트랜잭션은 다음의 ACID 특성을 만족해야 합니다:
특성 설명
Atomicity (원자성) 트랜잭션의 작업은 모두 성공하거나, 전부 실패해야 합니다.
Consistency (일관성) 트랜잭션 전후의 데이터는 항상 DB 규칙을 지키는 일관된 상태여야 합니다.
Isolation (격리성) 동시에 여러 트랜잭션이 실행될 때 서로 간섭 없이 독립적으로 수행돼야 합니다.
Durability (지속성) 트랜잭션이 성공하면 그 결과는 영구적으로 반영되어야 합니다.
---
✅ 데이터 일관성을 보존하는 방법
트랜잭션이 잘못되면 데이터가 꼬이거나, 돈이 빠져나갔는데 입금은 안 되는 문제가 생깁니다. 일관성을 지키기 위해 다음 기법을 사용합니다:
1. 트랜잭션 블록 사용
@Transactional // Spring 예시
public void transferMoney(Account from, Account to, int amount) {
from.withdraw(amount);
to.deposit(amount);
accountRepository.save(from);
accountRepository.save(to);
}
모든 작업이 성공해야만 commit되고, 중간에 오류가 나면 rollback 되어 이전 상태로 되돌아갑니다.
2. 정합성 제약조건 설정
외래키, NOT NULL, UNIQUE 등 제약 조건을 설정하여 잘못된 데이터가 들어오는 걸 막습니다.
3. 격리 수준 설정 (Isolation Level)
READ COMMITTED, REPEATABLE READ, SERIALIZABLE 등 트랜잭션 간 간섭을 줄이기 위한 수준을 설정합니다.
너무 높으면 성능이 나빠질 수 있고, 너무 낮으면 Dirty Read 등 문제가 생깁니다.
4. 낙관적 / 비관적 락 활용
동시에 여러 사용자가 같은 데이터를 바꾸지 않도록 락을 걸어 충돌을 방지합니다.
---
🧠 정리
트랜잭션은 데이터베이스 작업을 안전하게 처리하기 위한 핵심 개념입니다.
ACID 원칙을 지켜야 하고, 트랜잭션 관리, 격리 수준 설정, 락 등을 통해 데이터 일관성을 유지합니다.
'4차산업혁명의 일꾼 > 개발문답' 카테고리의 다른 글
CSS 의사 요소(Pseudo-elements)란 무엇인가요? (4) | 2025.06.26 |
---|---|
동시성 문제 중 경쟁 상태를 해결하려면 무엇이 보장되어야 하나요? (3) | 2025.06.26 |
왜 useState를 조건문 안에서 사용하면 안 되나요? (0) | 2025.06.25 |
DNS란 무엇인가요? (2) | 2025.06.25 |
연속 메모리 할당 기법에 대해서 설명해주세요 (0) | 2025.06.24 |