🔍 트랜잭션이란?
트랜잭션(Transaction)이란 데이터베이스에서 하나의 논리적 작업 단위를 의미한다.
즉, 여러 작업이 모여 하나의 '작업 덩어리'로 처리되어야 할 때 이를 트랜잭션이라고 한다.
대표적인 예로 계좌 이체가 있다.
A 계좌에서 출금하고 B 계좌로 입금하는 두 가지 작업은 반드시 함께 성공하거나, 함께 실패해야 한다.
이 두 작업 중 하나라도 실패한다면 전체 작업은 의미를 잃게 되므로, 둘을 하나의 트랜잭션으로 처리하는 것이다.
💡 트랜잭션의 필요성
트랜잭션은 데이터베이스의 무결성(integrity)과 안정성(stability)을 보장하기 위해 사용된다.
만약 트랜잭션이 없다면, 시스템 오류나 사용자 실수로 인해 데이터가 중간에 손상되거나 잘못된 상태로 저장될 수 있다.
이러한 문제를 방지하기 위해 트랜잭션은 다음의 4가지 특성을 반드시 만족해야 한다. 이를 ACID라고 부른다.
🧪 ACID: 트랜잭션의 4가지 특성
1️⃣ 원자성 (Atomicity)
하나의 트랜잭션은 전부 실행되거나 전혀 실행되지 않아야 한다.
작업이 부분적으로만 수행되는 것은 허용되지 않는다. 트랜잭션 내 어떤 작업이라도 실패하면, 전체 작업을 되돌리는 롤백(Rollback)이 발생한다.
📌 예시
- 계좌 이체 도중 출금은 되었는데 입금이 실패한다면?
→ 전체 작업을 취소하여 출금도 되돌린다.
📘 실무 참고
- try-catch 구문 안에서 commit()과 rollback()을 사용하는 것이 일반적이다.
2️⃣ 일관성 (Consistency)
트랜잭션 전과 후의 데이터는 항상 일관된 상태를 유지해야 한다.
트랜잭션이 실행되기 전과 후의 데이터가 DB의 제약조건이나 비즈니스 규칙을 만족해야 한다.
📌 예시
- 은행의 전체 예치금이 트랜잭션 전후로 변하지 않아야 한다.
→ A 계좌에서 빠진 금액만큼 B 계좌에 정확히 입금되어야 함.
📘 시험 대비 포인트
- 데이터 무결성 제약조건(Primary Key, Foreign Key, Unique 등)과 함께 자주 출제된다.
3️⃣ 고립성 (Isolation)
트랜잭션은 독립적으로 실행되어야 하며, 동시에 실행되는 다른 트랜잭션에 영향을 받아서는 안 된다.
동시다발적으로 여러 트랜잭션이 처리되더라도, 마치 하나씩 순차적으로 처리된 것처럼 보장돼야 한다.
📌 예시
- 두 명의 사용자가 동시에 같은 재고 1개 남은 상품을 구매하려고 할 때
→ 둘 중 하나만 성공하고, 다른 하나는 실패해야 한다.
📘 실무 참고
- DB에서는 트랜잭션 격리 수준(Isolation Level)을 조정해 제어할 수 있다.
- READ UNCOMMITTED
- READ COMMITTED
- REPEATABLE READ
- SERIALIZABLE
4️⃣ 지속성 (Durability)
트랜잭션이 성공적으로 완료되면 그 결과는 영구적으로 반영되어야 한다.
트랜잭션이 commit()된 이후에는 시스템 오류나 전원 장애가 발생하더라도 결과는 손실되지 않아야 한다.
📌 예시
- 전원이 갑자기 꺼져도, 이미 완료된 입금 내역은 다시 복구돼야 한다.
📘 실무 참고
- DBMS는 로그(Log File)와 백업(Backup)을 통해 이를 보장한다.
✅ 요약 정리
원자성 | 작업은 전부 성공하거나 전부 실패해야 함 |
일관성 | 트랜잭션 전후로 데이터는 항상 일관된 상태여야 함 |
고립성 | 다른 트랜잭션과 간섭 없이 독립적으로 처리되어야 함 |
지속성 | 커밋된 결과는 영구히 반영되어야 하며 손실되지 않음 |
📘 정보처리기사 시험에서 자주 나오는 포인트
- "트랜잭션의 특성 중 하나로, 일부 작업만 성공하고 나머지는 실패하는 상태를 허용하지 않는 것?"
→ 원자성 - "동시성 제어와 관련된 트랜잭션 특성은?"
→ 고립성 - "트랜잭션이 완료된 후에도 그 결과가 보존되는 특성은?"
→ 지속성 - "데이터의 제약조건이 항상 유지되어야 한다는 특성은?"
→ 일관성
Tip: ACID는 알파벳 순서로도 자주 외워두자.
A - C - I - D = Atomicity, Consistency, Isolation, Durability
🧠 실무에서의 활용
트랜잭션 개념은 단순히 시험용 지식이 아니라, 웹 서비스 개발, 결제 시스템, 금융 플랫폼, 쇼핑몰 등 다양한 분야에서 실무적으로 매우 중요하게 다뤄진다.
Spring 프레임워크에서는 @Transactional 어노테이션을 사용해 손쉽게 트랜잭션 처리를 적용할 수 있다.
@Transactional
public void transferMoney(Account from, Account to, int amount) {
withdraw(from, amount);
deposit(to, amount);
}
🏁 마무리
트랜잭션과 ACID는 데이터베이스 설계와 운영에 있어 핵심 개념이다.
정보처리기사 자격증을 준비하거나 백엔드 개발자로 진입하고자 한다면 반드시 이해하고 있어야 하는 내용이다.
트랜잭션을 제대로 이해하고 있으면, 오류 발생 시 적절한 처리를 할 수 있고 시스템의 신뢰성과 안정성을 높일 수 있다.
🏷️ 태그
#트랜잭션 #ACID #정보처리기사 #DB기초 #백엔드개발 #데이터베이스 #개발상식 #트랜잭션특성 #IT기초 #Spring트랜잭션
'IT개발 > Tech Notes' 카테고리의 다른 글
프로세스와 스레드의 차이, 개발자라면 꼭 알아야 할 CS 기초 개념 (0) | 2025.04.23 |
---|---|
🖥️ 개발자 취업을 위한 CS 기초 공부 로드맵 총정리 (0) | 2025.04.18 |
ERD와 정규화(Normalization), 왜 항상 같이 언급될까? (0) | 2025.04.18 |
DFD vs UML 비교 정리 ⚔️ 개념 혼동 끝내기! (0) | 2025.04.16 |
OSI 7계층 완벽 정리! 네트워크 개념 한 방에 끝내기 (0) | 2025.04.15 |
댓글