It's Ward

[Spring] 트랜잭션(Transaction)이란 무엇일까? 본문

Java/Spring

[Spring] 트랜잭션(Transaction)이란 무엇일까?

I'm ward 2022. 6. 18. 06:14

1. 트랜잭션은?

데이터 베이스의 상태를 변화시키기 위해 수행하는 작업의 단위

- 상황에 따라 여러개가 만들어 질 수 있음

2. 어떤 특징이 있나요?

2개 이상의 쿼리를 하나의 커넥션으로 묶어 DB에 전송할 때(변화시킬 때) 에러가 발생하는 경우 자동으로 모든 과정을 원래대로 되돌려 놓기위해 사용되는데 다음 4가지로 크게 구분할 수 있다.

1. 원자성 : 트랜젝션이 데이터베이스에 모두 반영되거나 아니면 모두 반영되지 않아아 한다는 것.
트랜잭션 단위로만(개별의 칼럼이 아니라) 판단해야지만, 오작동 시 에러를 잡을 수 있을것이다.  

2. 일관성 : 트랜잭션이 진행되는동안 데이터 베이스가 변경되도, 처음 참조한 트랜잭션의 데이터 베이스로 진행되도록 해야한다. -> 유저 입장에서 일관성있게 데이터를 확인할 수 있도록

3. 독립성 : 하나의 트랜잭션이 완료될 때 까지 다른 트랜잭션의 결과를 참조할 수 없음(연산 중 끼어들지 못하게 해야함)

4. 지속성 : 트랜잭션이 성공적으로 완료되었을 때 결과가 영구적으로 반영되어야 함.

3. 그래서 왜 사용하나요?

여러개의 쿼리가 한번에 처리되는 상황에서 문제가 생기면 시스템에 엄청난 문제가 생기니까
오류를없이기 위해서!

위와 같이 상품을 구매하는데, 갑작스럽게 Exeption이 발생한다던지 구매를 하지않는다던지 여러명이 동시에 하나의 계정으로 구매한다던지.. 다양한 문제가 생길 수 있는데,

구매 도중 어떤 일로 금액은 나가지 않았는데 결제가 되어버리는 경우(서버 다운, 소비자의 악의적인 버그등..) 손실이 날 수 있는 상황으로, 문제가 생기기때문에 이를 방지하기 위해 사용한다.

 

4. 스프링 부트에서는 어떻게 사용하죠?

일반적으로 스프링에서는 서비스 단에서 @Transactional를 추가하여 처리를 한다.

INSERT / UPDATE / DELETE 메소드에 추가하여, 설정하고, 문제가 생기는 경우 Exeption을 통해 처리를하면 된다.(Exeption은 가장 간단한 예로, 좋지않은 예)

 

여담으로 필자는 스프링의 기본적은 구성에대해서 전체적인 틀을 알고싶어 클론코딩을 진행하고 있는 상태이다.

물론 선행학습으로 이론 부분들도 함께 진행은 하지만 정확하게 이해가지 않는 용어들이 많아 문제가 종종생기기 마련이였다. 해당 주제도 모르는 내용을 조금 더 이해하고자 작성하였고, 조금 더 이해가 되었을 때 추가로 설명을 하도록 하겠다.

Comments