본문 바로가기
CS

트랜잭션 처리

by soohykim 2025. 6. 27.
728x90
반응형

 트랜잭션 처리 방식

 

🔸 개념

  • 트랜잭션이란 데이터베이스 내에서 하나의 작업 단위로 수행되는 연산들의 집합입니다.
  • 트랜잭션 처리 방식은 이 작업 단위가 원자성(Atomicity), 일관성(Consistency), 격리성(Isolation), 지속성(Durability) 즉, ACID 특성을 보장하도록 관리하는 방식을 말합니다.
  • 대표적으로 직접 DB 트랜잭션 제어 (예: JDBC 트랜잭션) 방식이 있습니다.

🔸 사용

  • 일반적으로 DB 커넥션 단위에서 트랜잭션 시작(begin), 커밋(commit), 롤백(rollback)을 직접 제어합니다.
  • JDBC, JPA, MyBatis 등에서 트랜잭션 경계를 수동 또는 자동으로 관리함.

🔸 주의할 점

  • 트랜잭션 범위 최소화: 너무 넓은 범위를 트랜잭션으로 처리하면 DB 락 경합 및 성능 저하 유발
  • 적절한 격리 수준 설정: 무분별한 격리 수준(예: SERIALIZABLE)은 성능 저하를, 낮은 격리 수준은 데이터 부정합 위험을 초래
  • 예외 및 장애 처리 철저: 중간 장애 발생 시 반드시 롤백되어야 하며, 중복 호출 방지, 장애 복구 정책 수립 필요
  • 분산 트랜잭션 시 일관성 보장 기법 사용: 2PC(2-Phase Commit), SAGA 패턴, 이벤트 기반 보상 트랜잭션 등

2. 스프링 트랜잭션 처리 방식

🔸 개념

  • 스프링 프레임워크가 제공하는 선언적 트랜잭션 관리프로그래밍적 트랜잭션 관리 방식
  • @Transactional 어노테이션으로 트랜잭션 경계를 선언하거나, 트랜잭션 매니저를 통해 코드 내에서 트랜잭션을 관리
  • 내부적으로 다양한 트랜잭션 매니저(예: DataSourceTransactionManager, JpaTransactionManager)를 통해 DB 트랜잭션을 추상화하고 관리

🔸 특징 

  • 복잡한 트랜잭션 제어를 간단하게 선언으로 처리 가능 → 개발 생산성 증가
  • 예외 발생 시 자동 롤백 처리 → 안정성 및 유지보수성 향상
  • 다양한 데이터 소스와 연동 시 일관된 트랜잭션 관리 제공

🔸 사용

  • 서비스 메서드에 @Transactional 선언
  • 트랜잭션 속성 설정 가능 (전파, 격리 수준, 롤백 조건 등)
  • 스프링이 트랜잭션 시작, 커밋, 롤백을 자동으로 처리
 

🔸 주의할 점

  • @Transactional이 적용된 메서드는 반드시 스프링 빈에서 호출되어야 함 (자기 자신 호출 시 동작 안 함)
  • 전파 옵션 이해 없이 잘못 설정 시 트랜잭션 경계가 흐트러질 수 있음
  • 비동기 처리, 멀티스레드 환경에서 트랜잭션 전파 주의
  • 너무 큰 트랜잭션 범위는 성능 저하 초래
개념 DB 커넥션 단위 트랜잭션 직접 제어 선언적/프로그래밍적 트랜잭션 관리 제공
금융권 사용 이유 데이터 정합성 필수, 직접 제어 통한 세밀한 관리 가능 생산성 향상, 자동 롤백, 다양한 환경 지원
사용 방법 JDBC 직접 begin, commit, rollback 호출 @Transactional 어노테이션 사용, 스프링이 자동 처리
주의사항 커밋 누락 위험, 분산 트랜잭션 복잡성, 성능 문제 가능 프록시 호출 문제, 전파 옵션 주의, 비동기 환경 주의
 
728x90
반응형

'CS' 카테고리의 다른 글

금융 IT 기술 스택 — DB, 웹, 인프라 비교  (2) 2025.06.27
도메인  (1) 2025.06.27
CI/CD, DevOps  (1) 2025.06.27
WAS 튜닝, 쿼리 성능 튜닝  (1) 2025.06.27
트러블슈팅, 장애 대응  (0) 2025.06.27