|
|
1번째 줄: |
1번째 줄: |
| == 🔄 트랜잭션 (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)의 원인이 되기도 하므로 동작 원리를 이해하는 것이 중요합니다.
| |