99클럽 14일차 TIL: Transaction
2024. 4. 17. 15:44ㆍ개발 공부
728x90
반응형
#1. 오늘의 학습 키워드
자바 스프링에서의 Transaction 에 대해서
- JPA, myBatis 동시 사용을 위한 multitransaction 을 구현하기 전 Transaction 자체에 대해서 알아보고 넘어가자.
- DB 수업 시간에 아주 중요한 파트를 차지했던 Transaction.
- 이렇게 수업시간에 배웠던 내용들을 실제 코드에서 구현하는 것은 재밌는 일이다.
- 트랜잭션의 구현은 복잡할 줄 알았는데, Spring에서는 굉장히 쉬운 방법을 제공하고 있었다.
- DB 수업 시간에 아주 중요한 파트를 차지했던 Transaction.
#2. 공부한 내용
- Transaction
- 트랜잭션
- 더 이상 쪼갤 수 없는 업무 처리의 최소 단위.
- 예) A → B 에게 송금할 때: A는 돈을 지불하고 B는 돈을 받는 것. 이 작업들은 하나의 트랜잭션으로 쪼갤 수 없다.
- 트랜잭션의 특징: ACID
- Atomicity - 원자성
- 트랜잭션 속 연산들이 DB에 전부 반영되거나, 전부 롤백되거나.
- All-or-nothing
- Consistency - 일관성
- 트랜잭션 전후, DB의 상태는 여전히 유효해야된다.
- 즉 트랜잭션 내 쿼리들은 DB의 제약과 규칙을 만족해야한다.
- 데이터 무결성을 해치면 안 됨
- Isolation - 독립성
- 트랜잭션끼리의 독립성
- 모든 트랜젹션은 다른 트랜잭션으로부터 고립되어야 한다.
- Durability - 지속성
- 트랜잭션이 일단 성공적으로 수행 되었다면, 해당 트랜잭션의 연산은 DB에 영구적으로 남아야한다.
- 트랜잭션에 대한 로그가 남아야 한다는 의미.
- Atomicity - 원자성
- @Transactional
- Spring 에서 트랜잭션의 ACID 성질을 보장해주도록하는 어노테이션
- 동작 과정
- 스프링은 Proxy를 통해 트랜잭션 처리
- 앱 실행 시 트랜잭션 전후 처리를 하는 Proxy를 동적 생성.
- @Transactional 이 달려있는 메서드를 요청 시, 실제론 해당 메서드의 Proxy에게 요청이 됨. 그리고 그 Proxy 가 실제 메서드로 요청. 그 Proxy 내부에 트랜잭션 로직이 포함 되어있음
- 스프링은 Proxy를 통해 트랜잭션 처리
- 사용법
- 메서드 위 어노테이션 추가 - 선언적 트랜잭션
- 대부분 이 방법을 사용하고, 간단하다.
- 아래 와 같은 옵션을 추가할 수 있음
- readOnly
- true 시 읽기 전용 트랜잭션으로 런타임 시 최적화 가능
- timeout
- 트랜잭션의 시간 제한을 timeout 값으로 설정 할 수 있음 ( 초단위)
- isolation
- 트랜잭션의 독립성 수준을 설정할 수 있음
- rollbackFor
- 트랜잭션의 롤백 조건을 설정할 수 있음
- value
- 선언을 한 트랜잭션 매니저를 설정할 수 있음
- readOnly
- PlatformTransactionManager 사용
- PlatformTransactionManager
- 스프링 트랜잭션 구조의 중심이 되는 인터페이스
- 해당 인터페이스의 구현체
- DataSourceTransactionManager
- HibernatetTransactionManager
- JPATransactionManager
- etc..
- 트랜잭션 매니저를 사용하면 트랜잭션의 시작과 끝을 개발자 직접 지정 가능
- PlatformTransactionManager
- 메서드 위 어노테이션 추가 - 선언적 트랜잭션
- 참조:
#3. 오늘의 회고
- 트랜잭션은 회사에서 NoSql → SQL / Node → SpringBoot 로 리팩토링을 하였던 이유 중 하나다.
- 그만큼 중요한 기능이다.
- DB 작업의 일련의 연산을 하나의 단위로 묶어서 실행해서, 데이터의 무결성을 보장해준다.
- 데이터의 가치가 높을 수록 트랜잭션의 중요성도 당연히 높아진다.
- 이런 중요한 기능을 Spring Boot 에서는 한줄의 어노테이션으로, 메서드나 클래스에 트랜잭션을 쉽게 적용할 수 있도록 해준다.
- 이렇게 트랜잭션을 쉽게 관리 할 수 있다는 점은 코드의 간결성과 가독성을 크게 향상시킨다.
728x90
반응형
'개발 공부' 카테고리의 다른 글
99클럽 16일차 TIL: Spring Webflux (0) | 2024.04.19 |
---|---|
99클럽 15일차 TIL: N+1문제 (0) | 2024.04.18 |
99클럽 13일차 TIL: Hikari CP (0) | 2024.04.16 |
99클럽 12일차 TIL: MVC (0) | 2024.04.15 |
99클럽 11일차 TIL: AOP (0) | 2024.04.14 |