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 |