트랜잭션: 두 판 사이의 차이
기술노트
(Gemini 벌크 업로더로 자동 업로드) |
(Gemini 벌크 업로더로 자동 업로드) |
||
26번째 줄: | 26번째 줄: | ||
---- | ---- | ||
=== 💡 | === 💡 정보처리기사 핵심 Point === | ||
* 트랜잭션은 '''데이터의 정합성이 매우 중요한''' 금융, 결제, 예약 시스템 등에서 필수적인 개념입니다. | * 트랜잭션은 '''데이터의 정합성이 매우 중요한''' 금융, 결제, 예약 시스템 등에서 필수적인 개념입니다. |
2025년 9월 6일 (토) 05:54 판
🔄 트랜잭션 (Transaction)
트랜잭션은 데이터베이스의 상태를 변화시키기 위해 수행되는 하나의 논리적인 작업 단위입니다. 여러 개의 SQL 명령어를 하나로 묶어서, 마치 하나의 작업처럼 모두 성공하거나 모두 실패하도록 만듭니다.
은행 계좌 이체를 예로 들면, A의 계좌에서 돈을 빼는 작업(UPDATE)과 B의 계좌에 돈을 넣는 작업(UPDATE)은 반드시 하나의 트랜잭션으로 묶여야 합니다. 둘 중 하나라도 실패하면 모든 작업을 원래대로 되돌려야 데이터의 일관성이 유지됩니다.
🔥 트랜잭션의 특징: ACID
트랜잭션은 데이터의 무결성과 신뢰성을 보장하기 위해 ACID라는 네 가지 핵심적인 특징을 만족해야 합니다.
- 원자성 (Atomicity) : 트랜잭션에 포함된 모든 작업이 전부 성공하거나 전부 실패해야 합니다. (All or Nothing)
- 일관성 (Consistency) : 트랜잭션이 성공적으로 완료되면, 데이터베이스는 항상 일관된 상태를 유지해야 합니다. (예: 계좌의 돈은 사라지거나 갑자기 생기지 않음)
- 고립성 (Isolation) : 하나의 트랜잭션이 실행되는 동안에는, 다른 트랜잭션이 중간 결과를 참조할 수 없습니다. 각 트랜잭션은 마치 혼자 실행되는 것처럼 보여야 합니다.
- 지속성 (Durability) : 성공적으로 완료된 트랜잭션의 결과는 시스템에 장애가 발생하더라도 영구적으로 저장되어야 합니다.
⚙️ 트랜잭션 제어 명령어 (TCL)
- COMMIT : 트랜잭션의 모든 작업을 성공적으로 완료하고, 변경된 내용을 데이터베이스에 영구적으로 반영합니다.
- ROLLBACK : 트랜잭션의 모든 작업을 취소하고, 트랜잭션이 시작되기 이전 상태로 되돌립니다.
- SAVEPOINT : 트랜잭션 내에 중간 저장 지점을 만들어, 특정 지점까지만 롤백할 수 있도록 합니다.
💡 정보처리기사 핵심 Point
- 트랜잭션은 데이터의 정합성이 매우 중요한 금융, 결제, 예약 시스템 등에서 필수적인 개념입니다.
- 여러 사용자가 동시에 데이터에 접근하는 환경에서는, 트랜잭션의 고립성 수준(Isolation Level)을 어떻게 설정하느냐에 따라 성능과 데이터 일관성 사이의 트레이드오프가 발생합니다.
- Spring 프레임워크에서는 `@Transactional` 어노테이션을 사용하여, 메서드 전체를 하나의 트랜잭션으로 묶는 선언적 트랜잭션 관리를 매우 쉽게 할 수 있습니다.
- 데이터베이스의 잠금(Lock) 메커니즘은 트랜잭션의 고립성을 보장하기 위한 핵심 기술이며, 교착 상태(Deadlock)의 원인이 되기도 하므로 동작 원리를 이해하는 것이 중요합니다.