Spring - 트랜잭션 관리 (Transaction Management)

2023. 8. 8. 22:00·MSA
반응형

스프링에서 트랜잭션이란 무엇일까? 자세히 알아보자

 

1. 트랜잭션 관리란?

  • Transaction Management(트랜잭션 관리)은 데이터베이스의 일련의 작업을 하나의 논리적인 단위로 묶고, 해당 작업들을 안전하게 수행하거나 롤백하는 기능을 제공하는 것을 의미한다. Spring에서는 다양한 방법으로 트랜잭션 관리를 지원한다.

 


 

2. 트랜잭션 관리의 중요성

  1. 데이터 일관성 유지:
    • 트랜잭션 관리를 통해 여러 개의 데이터베이스 작업이 하나의 논리적인 단위로 처리된다. 트랜잭션 내의 모든 작업이 성공하면 커밋되고, 하나의 작업이라도 실패하면 롤백되어 이전 상태로 되돌린다. 이렇게 함으로써 데이터 일관성을 유지할 수 있다.

  2. 데이터의 안정성 보장:
    • 트랜잭션은 데이터의 안정성을 보장한다.
    • 트랜잭션 내에서 작업이 수행되는 동안 다른 사용자 또는 프로세스에 의해 접근되지 않는다. 작업이 완료되고 커밋되면 다른 사용자가 해당 작업을 확인할 수 있다.
    • 트랜잭션의 롤백 기능은 작업이 실패할 경우 이전 상태로 되돌리므로 데이터 손실을 방지한다.

  3. 동시성 제어:
    • 트랜잭션 관리를 통해 여러 개의 동시 작업이 동시에 수행되는 경우 데이터 충돌이 발생하는 것을 방지할 수 있다.
    • 트랜잭션은 데이터베이스에서 동시에 수행되는 작업들 간에 일관성과 독립성을 유지하도록 보장한다.

  4. 오류 처리와 롤백:
    • 트랜잭션 관리는 오류 처리와 롤백을 통해 안정성을 제공한다.
    • 예외가 발생하면 트랜잭션은 롤백되어 이전 상태로 되돌아간다. 이를 통해 데이터베이스에서 발생한 오류를 처리하고 예외 상황을 복구할 수 있다.

  5. 비즈니스 로직 분리:
    • 트랜잭션 관리를 사용하면 비즈니스 로직과 데이터베이스 작업을 분리할 수 있다.
    • 이렇게 함으로써 비즈니스 로직은 트랜잭션을 고려하지 않고 개발될 수 있다. 데이터베이스 작업과 트랜잭션 처리는 트랜잭션 관리자에 의해 처리되므로 개발자는 비즈니스 로직에만 집중할 수 있다.

트랜잭션 관리는 데이터베이스 작업의 안전성, 일관성, 동시성, 오류 처리 등을 보장하여 신뢰성 있는 애플리케이션을 구축하는 데 중요한 역할을 한다. 데이터의 정확성과 안전성을 유지하기 위해 트랜잭션 관리는 필수적인 요소이다.

 


 

3. 트랜잭션의 선언방식

1. 선언적 트랜잭션 관리(Declarative Transaction Management)

  • 선언적 트랜잭션 관리는 XML 또는 어노테이션을 사용하여 트랜잭션을 선언하고 관리하는 방식이다. Spring의 @Transactional 어노테이션을 사용하여 트랜잭션을 적용할 수 있다.
@Transactional
public void performTransaction() {
    // 트랜잭션 내에서 수행될 작업들
}
  • 위의 예시에서 @Transactional 어노테이션은 performTransaction() 메서드를 트랜잭션으로 감싸주는 역할을 한다.
  • 이를 통해 메서드 내의 작업들이 모두 하나의 트랜잭션으로 실행되고, 트랜잭션의 커밋 또는 롤백이 자동으로 처리된다.

2. 프로그래밍적 트랜잭션 관리(Programmatic Transaction Management)

  • 프로그래밍적 트랜잭션 관리는 개발자가 명시적으로 트랜잭션을 시작하고 커밋 또는 롤백을 수행하는 방식이다.
  • Spring의 PlatformTransactionManager 인터페이스를 사용하여 트랜잭션을 프로그래밍적으로 관리할 수 있다.
@Autowired
private PlatformTransactionManager transactionManager;

public void performTransaction() {
    TransactionDefinition txDefinition = new DefaultTransactionDefinition();
    TransactionStatus txStatus = transactionManager.getTransaction(txDefinition);

    try {
        // 트랜잭션 내에서 수행될 작업들

        transactionManager.commit(txStatus);
    } catch (Exception e) {
        transactionManager.rollback(txStatus);
        throw e;
    }
}
  • 위의 예시에서 PlatformTransactionManager를 사용하여 트랜잭션을 시작하고, 예외 발생 시 롤백하거나 성공 시 커밋한다.
반응형

'MSA' 카테고리의 다른 글

[Spring] Util 클래스 - static vs Bean  (4) 2023.11.18
[Spring MSA] Zipkin으로 분산추적 로깅 구현하기  (0) 2023.11.18
[Spring MSA] 스프링 이벤트와 SNS/SQS로 DB 정합성 보장 2탄 - ZeroPayload로 FeignClient 요청  (0) 2023.11.17
[Spring MSA] Spring Event, SNS, SQS를 사용하여 DB 정합성 보장하기 1탄  (2) 2023.11.15
[Spring] SpringFramework 4.2 이후 스프링 이벤트의 변화  (2) 2023.11.13
'MSA' 카테고리의 다른 글
  • [Spring MSA] Zipkin으로 분산추적 로깅 구현하기
  • [Spring MSA] 스프링 이벤트와 SNS/SQS로 DB 정합성 보장 2탄 - ZeroPayload로 FeignClient 요청
  • [Spring MSA] Spring Event, SNS, SQS를 사용하여 DB 정합성 보장하기 1탄
  • [Spring] SpringFramework 4.2 이후 스프링 이벤트의 변화
Stark97
Stark97
문의사항 또는 커피챗 요청은 링크드인 메신저를 보내주세요! : https://www.linkedin.com/in/writedev/
  • Stark97
    오늘도 개발중입니다
    Stark97
  • 전체
    오늘
    어제
    • 분류 전체보기 (244)
      • 개발지식 (20)
        • 스레드(Thread) (8)
        • WEB, DB, GIT (3)
        • 디자인패턴 (8)
      • JAVA (21)
      • Spring (88)
        • Spring 기초 지식 (35)
        • Spring 설정 (6)
        • JPA (7)
        • Spring Security (17)
        • Spring에서 Java 활용하기 (8)
        • 테스트 코드 (15)
      • 아키텍처 (6)
      • MSA (14)
      • DDD (10)
      • gRPC (9)
      • Apache Kafka (18)
      • DevOps (23)
        • nGrinder (4)
        • Docker (1)
        • k8s (1)
        • 테라폼(Terraform) (12)
      • AWS (32)
        • ECS, ECR (14)
        • EC2 (2)
        • CodePipeline, CICD (8)
        • SNS, SQS (5)
        • RDS (2)
      • notion&obsidian (3)
      • 동아리 (0)
  • 링크

    • notion기록
    • 깃허브
    • 링크드인
  • hELLO· Designed By정상우.v4.10.0
Stark97
Spring - 트랜잭션 관리 (Transaction Management)
상단으로

티스토리툴바