본문 바로가기
Knowledge/CS

[CS] 트랜잭션(Transaction) 이란?

by YoonJong 2023. 1. 28.
728x90

트랜잭션의 정의

데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위, 한꺼번에 수행되어야 할 일련의 연산입니다.

 

정의를 이해해보면, DB 의 데이터에 접근해 변경을 시도하는 작업(기능) 이라고 이해할 수 있습니다.

 

먼저 트랜잭션의 예시로 A의 계좌에서 B 의 계좌에 입금하는 작업을 들어보겠습니다.

1. A 의 계좌를 확인합니다.

2. A의 계좌에서 10000원을 B 계좌로 입금합니다. A의 잔액에서 -10000원을 차감하고 저장합니다.

3. B의 계좌를 확인합니다.

4. B의 계좌에 10000원을 더하고 저장합니다.

 

위처럼 하나의 작업을 진행하는데 이것을 트랜잭션이라고 합니다.

예시를 보니 트랜잭션의 필요성을 생각해볼 수 있습니다. 실패했을 때 만약 잔액이 원상복구 되지 않으면 큰일이 나겠죠??

 

하나의 트랜잭션은 commit 또는 rollback 되어야 합니다.쉽게 말하면, 성공하던가 실패하면 다시 처음상태로 복구되어야합니다.

 

트랜잭션의 특징을 알아보겠습니다.

원자성 : 트랜잭션은 모두 성공하거나 실패해야 합니다.

            -> 한 작업에 여러 로직이 있다고 해도 하나의 로직이 실패하면 rollback 됩니다.

일관성 : 트랜잭션의 작업 처리 결과는 항상 일관성이 있어야 합니다.

독립성 : 두개 이상의 트랜잭션이 실행되고 있을 경우, 하나의 트랜잭션 작업에 다른 트랜잭션이 참여할 수 없습니다.\

지속성 : 트랜잭션이 성공했을 경우, 그 결과는 영구적으로 반영되어야 합니다.

 

트랜잭션의 상태입니다.

Commit : 트랜잭션이 성공적으로 끝났을때, 트랜잭션이 수행한 연산이 완료되어 DB 가 일관성이 있는 것입니다.

Rollback : 트랜잭션이 어떠한 이유로 실패했을 때, 트랜잭션이 수행한 연산을 모두 취소한 것입니다.


++ 테스트 코드에서 @Transaction 을 사용할때 주의할점을 참고하면 좋을거 같습니다.

https://tecoble.techcourse.co.kr/post/2020-08-31-jpa-transaction-test/

 

JPA 사용시 테스트 코드에서 @Transactional 주의하기

서비스 레이어()에 대해 테스트를 한다면 보통 DB…

tecoble.techcourse.co.kr

 

간단하게 요약하면,

일반적으로 아는 데로 Test 시 @Transaction 을 사용하면 자동으로 각 메서드 실행 이후 자동으로 Rollback 된다.

하지만 실수로 Test 코드에서만 적용하고 실제 로직에서 빼먹고 Test 를 실행하면 LazyInitailizationException 에러가 발생한다. @Transaction을 실제 로직에도 잘 적용 후 사용해야 한다.

 

결론

1. @Transaction을 테스트 코드에서 사용하려면 실제 로직을 잘 확인해야합니다.

2. @BeforeEach 나 @AfterEach 를 사용하는 방법도 있습니다.

@BeforeEach
void clean() {
// 전부 삭제하는 메서드 사용
	...Repository.deleteAll();
}

참고

https://mommoo.tistory.com/62

https://coding-factory.tistory.com/226

https://wonit.tistory.com/462

728x90

'Knowledge > CS' 카테고리의 다른 글

[CS] RDBMS 와 NoSQL 의 차이  (0) 2023.02.09
[CS] 시스템 콜  (0) 2023.01.23
[CS] 스프링 프레임워크란?  (0) 2023.01.13
[CS] HTTP 1.0 / 1.1 / 2  (0) 2023.01.11
[CS] 네트워크 토폴로지  (0) 2022.12.30

댓글