728x90
반응형
트랜잭션이란?
데이터베이스의 작업 수행 단위이다.
조금 더 상세하게 말하면, 데이터베이스의 상태를 변경시킬 수 있는 모든 연산들을 의미한다.
트랜잭션은 4개의 성질을 가지고 있다.
- 독립성 (Isolation) : 동시에 실행되어도 서로 영향을 미치지 말아야 한다.
- 일관성 (Consistency) : 늘 일관성 있는 상태를 유지해야 한다.
- 영속성 (Durability) : 트랜잭션이 성공적으로 수행되면 그 상태가 영구적으로 반영되어야 한다.
- 원자성 (Atomicity) : 한 트랜잭션 내의 작업은 하나의 단위로 처리한다. 즉, 일부만 반영되지 않는다.
*독일영원으로 암기
트랜잭션은 위의 4가지 성질을 지키며, DB의 상태를 잘 유지해주어야 한다.
그렇다면 Spring Boot에서는 이 트랜잭션을 어떻게 사용할까?
쉽다. 이미 전부 Bean으로 만들어져 있으니까.
@Transactional
스프링 부트에서는 별도의 설정 필요 없이, org.springframework.transaction.annotation.Transactional 에 들어있다.
@Transactional은 그냥 사용해도 되고, 상황에 따라 다양한 파라미터를 적용할 수도 있다.
propagation | 트랜잭션 동작 중 다른 트랜잭션 호출 시에 대한 대처 |
isolation | 일관성 없는 데이터 허용 수준 |
rollbackFor=Exception.class | 특정 예외 발생시 rollback |
noRollbackFor=Exception.class | 특정 예외 발생시 rollback 하지 않음 |
timeout | 지정한 시간 내에 수행되지 않으면 롤백 (-1 입력시 무제한) |
readOnly | 읽기전용 (그 외 연산 수행시 예외) |
*이 중 propagation과 isolation에는 다양한 옵션 적용이 가능하다.
Propagation
REQUIRED | 디폴트값. 진행중인 트랜잭션 존재시 따르고, 아니라면 새로 생성 |
REQUIRED_NEW | 항상 새로운 트랜잭션 생성 |
SUPPORT | 진행중인 트랜잭션 존재시 따르고, 없다면 설정하지 않는다. |
NOT_SUPPORT | 진행중인 트랜잭션 존재시 보류, 트랜잭션 없이 수행 |
MANDATORY | 이미 진행중인 트랜잭션이 있어야만 작업 수행. 없으면 Exception |
NEVER | 트랜잭션이 진행 중이지 않으면 작업 수행. 있다면 Exception |
NETSTED | 트랜잭션 진행 중이면 중첩해서 실행, 없으면 새로 생성 |
Isolation
DEFAULT | 사용하는 DB의 디폴트 설정 사용. (대부분은 READ_COMMITED) |
READ_COMMITED | 검색에 공유 로크를 걸지 않아 오손 데이터를 읽을 수 있다. |
READ_UNCOMMITED | 검색에 공유 로크를 걸고 읽자마자 해제하여 이전과 다른 데이터를 읽을 수 있다. |
REPEATABLE_READ | 검색에 공유 로크를 걸고 트랜잭션이 끝날 때까지 보유한다. |
SERIALIZABLE | 튜플 뿐 아니라 인덱스에 대해서도 공유 로크를 걸고 끝날 때까지 보유한다. |
*자세한 내용은 별도의 포스팅 참조 : https://123okk2.tistory.com/248
728x90
반응형
'IT 지식 > 데이터베이스' 카테고리의 다른 글
[DB] 두 개 컬럼을 인덱스로 묶고 그 중 하나로만 쿼리를 하면? (0) | 2024.01.16 |
---|---|
ON DELETE(UPDATE) 옵션 (0) | 2024.01.10 |
[PostgreSQL] 컬럼의 Length를 지정해야 하는 이유 (0) | 2023.07.05 |
[DB] 격리수준 (0) | 2021.05.30 |
[데이터베이스] JSON과 XML (0) | 2021.04.06 |