1. 트랜잭션이란

트랜잭션은 "전부 성공하거나, 전부 실패하거나"를 보장하는 작업 단위입니다.

은행 송금을 예로 들겠습니다:

1. A 계좌에서 10만원 차감
2. B 계좌에 10만원 추가

만약 1번은 성공했는데 2번에서 에러가 나면? A의 돈은 빠졌는데 B에 돈이 안 들어갑니다. 10만원이 증발합니다.

트랜잭션을 쓰면:

게시판에서도 마찬가지입니다:

게시글 수정 트랜잭션:
1. 게시글 제목 변경
2. 게시글 내용 변경
3. 수정일시 갱신

→ 3개가 전부 성공해야 DB에 반영
→ 하나라도 실패하면 원래 상태로 되돌림

2. 트랜잭션의 4가지 특성 (ACID)

트랜잭션이 보장해야 하는 4가지 속성입니다.

Atomicity (원자성): 트랜잭션의 작업은 전부 성공하거나 전부 실패합니다. 중간 상태가 없습니다.

Consistency (일관성): 트랜잭션이 끝나면 DB는 항상 일관된 상태를 유지합니다. 예를 들어 "댓글의 post_id가 반드시 존재하는 게시글을 가리켜야 한다"는 규칙이 트랜잭션 후에도 유지됩니다.

Isolation (격리성): 동시에 실행되는 트랜잭션끼리 서로 영향을 주지 않습니다. A 사용자가 게시글을 수정하는 중에 B 사용자가 그 게시글을 조회하면, 수정 전 데이터를 봅니다.

Durability (지속성): 트랜잭션이 성공(커밋)하면 그 결과는 영구적으로 저장됩니다. 서버가 꺼져도 데이터가 남아있습니다.


3. 스프링의 @Transactional

스프링에서 트랜잭션을 쓰는 방법은 간단합니다. 메서드에 @Transactional을 붙이면 됩니다.