공개 글

트랜잭션(Transaction)

영발개발 2025. 4. 28. 14:17

 대학생 시절에 정보처리기사 공부하다가 트랜잭션의 특성을 외웠던 게 기억난다. 사실 그때 개발을 아예 안해봐서 뭔 뜻인지도 모르고 그냥 달달 외웠던 게 기억난다. 현재 프로젝트에서 개발 가이드 문서를 보다가 트랜잭션 처리하는 쪽이 나와서 보다가 오랜만에 찾아보게 되었고 그런 김에 간단하게 트랜잭션에 대해서 글을 써본다.


트랜잭션(Transaction)이란?

 트랜잭션은 데이터베이스 작업을 하나의 묶음으로 처리하는 단위다. 트랜잭션은 반드시 모두 성공하거나, 모두 실패해야 한다. 중간에 오류가 발생하면 이전까지의 작업도 모두 취소되어 데이터가 꼬이지 않게 해야한다.

 

트랜잭션이 필요한 이유

 예를 들어, 콘서트 좌석 예약 시스템에서는 좌석을 동시에 여러 명이 선택할 수 있다. 만약 트랜잭션이 없다면 같은 좌석이 중복 예약될 수 있다. 트랜잭션을 적용하면 한 명만 좌석 예약에 성공하고, 다른 시도는 실패하게 할 수 있다.

 

트랜잭션의 4가지 특성(ACID)
  • 원자성(Atomicity) : 작업이 전부 완료되거나 전부 실패해야 한다.
  • 일관성(Consistency) : 트랜잭션 전후로 데이터 무결성이 유지되어야 한다.
  • 격리성(Isolation) : 동시에 여러 트랜잭션이 실행돼도 서로 간섭하지 않아야 한다.
  • 지속성(Durability) : 트랜잭션이 성공하면 그 결과는 영구적으로 보존된다.

 

Spring Boot에서 트랜잭션 다루기

 Spring Boot에서는 @Transactional 어노테이션을 사용해 메서드 단위로 트랜잭션을 관리할 수 있다. 메서드 안에서 여러 DB 작업을 수행하다가 예외가 발생하면, 자동으로 모든 변경사항이 롤백된다.

 

 어떤 물품을 구매했을 때 상황을 예시로 들어보자.

@Transactional
public void createOrder() {
    orderRepository.save(order);       // 주문 저장
    stockRepository.decreaseStock();   // 재고 감소
    paymentService.pay();              // 결제 처리 (여기서 예외 발생!)
    notificationService.sendEmail();   // 이건 실행 안 됨
}

 주문이 저장되고 재고 감소처리까지 된 상황에서 결제 처리에서 예외가 발생하면 맨 마지막에 결제완료 메일을 보내는 작업은 실행이 되지 않고, 앞서 진행되었던 주문 저장과 재고 감소도 전부 롤백 처리된다. 이런 식으로 트랜잭션 처리를 하면 중간에 오류가 발생해도 데이터가 꼬이지 않게 된다.

'공개 글' 카테고리의 다른 글

Reflection과 Class 객체  (5) 2025.07.31
static  (2) 2025.05.02
JavaScript 기본  (1) 2025.03.24
Web Server와 WAS  (1) 2025.03.17
CSS 기본 - 2  (0) 2025.03.13