도구 및 기타/개발상식

트랜잭션 (Transaction)

tero1115 2024. 11. 7. 18:01

트랜잭션이란?

트랜잭션은 데이터베이스에서 이루어지는 일련의 작업들을 하나의 단위로 묶어주는 것을 의미합니다. 여기서 중요한 개념은 트랜잭션이 "모두 성공하거나, 모두 실패해야 한다"는 것입니다.

즉, 트랜잭션의 모든 단계가 성공했을 때만 최종적으로 커밋(commit)되어 데이터베이스에 반영되고, 중간에 문제가 발생하면 트랜잭션 시작 전으로 되돌아가(롤백, rollback) 데이터의 일관성을 유지합니다.

 

친구에게 500원을 송금하는 과정을 예로 들어 설명해 보겠습니다.

  1. 트랜잭션 시작
  2. 내 계좌에서 500원 감소
  3. 친구 계좌에서 500원 추가
  4. 트랜잭션 완료 후 커밋

이 과정에서 트랜잭션은 내 계좌에서 500원을 감소시키고 친구의 계좌에 500원을 더하는 모든 작업이 완벽히 이루어졌을 때만 완료됩니다.

중간에 문제가 생기면?

그런데 만약 이 작업 도중에 정전이 발생했다고 가정해 봅시다.

  1. 트랜잭션 시작
  2. 내 계좌에서 500원 감소
  3. 정전 발생!

이 상태에서 서버가 갑자기 꺼진다면 어떻게 될까요? 친구의 계좌에는 500원이 추가되지 않았지만, 내 계좌에서는 이미 500원이 빠져나간 상황일 수 있습니다. 이 경우 데이터베이스는 트랜잭션의 특성 덕분에 작업을 롤백합니다. 즉, 트랜잭션을 시작하기 전 상태로 되돌려 놓아 데이터 불일치 문제를 방지합니다.

 

트랜잭션의 ACID 특성

트랜잭션은 데이터의 무결성을 보장하기 위해 ACID라는 네 가지 중요한 특성을 만족해야 합니다.

  1. Atomicity(원자성): 트랜잭션 내의 모든 작업이 완전히 실행되거나, 전혀 실행되지 않아야 합니다.
  2. Consistency(일관성): 트랜잭션이 성공적으로 완료되면 데이터베이스는 일관성 있는 상태로 유지되어야 합니다.
  3. Isolation(고립성): 동시에 실행되는 트랜잭션들이 서로 영향을 미치지 않도록 보장해야 합니다.
  4. Durability(지속성): 트랜잭션이 완료된 후에는 시스템 오류가 발생하더라도 그 결과가 데이터베이스에 영구적으로 반영되어야 합니다.

결론

트랜잭션은 우리가 일상적으로 사용하는 금융 서비스나 온라인 쇼핑 등 다양한 시스템에서 데이터의 일관성과 무결성을 보장하는 중요한 역할을 합니다. 정전과 같은 예기치 않은 상황에서도 데이터를 안전하게 보호하기 위해 트랜잭션의 원리와 ACID 특성을 잘 이해하는 것이 중요합니다.

'도구 및 기타 > 개발상식' 카테고리의 다른 글

CSR(Client-Side Rendering)과 SSR(Server-Side Rendering)  (4) 2024.11.11
지연 로딩 ( Lazy Loading )  (3) 2024.11.11
@Controller와 @RestController  (0) 2023.07.21
REST API  (0) 2023.07.20
HTTP 상태 코드(응답)  (0) 2023.07.20