Free Lines Arrow
본문 바로가기
Spring/Spring DB 스터디

[Spring DB] 트랜잭션

by skahn1215 2022. 7. 31.
728x90
반응형

트랜잭션

  • 트랜잭션에 대해서 알아보고 직접 써보자

 

트랜잭션 이란?

  • 트랜잭션은 하나의 논리적 실행 단위다 
  • 영어로는 컴퓨터로 처리하는 작업의 단위 라고 사전에 정의 되어 있다.

 

왜 필요할까?

  • 제일 쉬운 예제가 계좌 이체 이다.
  • 계좌를 이체할때 다음과 같은 로직을 구현했다고 하자
  • 금액을 차감했는데 오류가 발생해 상대방 계좌에 금액이 안들어 갔다면?
  • 이러한 문제 때문에 트랜잭션이 필요하다 
  • 금액차감 이나 금액 증가가 실패하면 모두 실패 되거나 둘다 성공해야 된다.

 

 

트랜잭션의 ACID

  • A (원자성): 트랜잭션 안에서 실행되는 로직은 모두다 실패 하거나 모두다 성공하거나를 보장해야된다. 
  • C (일관성): 모든 트랜잭션은 일관성 있어야 한다 즉 데이터 무경성 제약 조건을 만족해야 된다.
  • I  (격리성): 동시에 실행되는 트랜잭션들이 서로에게 영향을 미치지 않도록 해야 된다. 
    - 트랜잭션 격리수준을 정할수 있음.
  • D(지속성): 트랜잭션이 정상적으로 수행이 되면 그결과가 항상 기록되어야 한다.

 

트랜잭션 격리 수준

  • READ UNCOMMITED: 커밋되지 않았지만 읽기가 가능하다
  • READ COMMITTED:    커밋된 데이터 만 읽기가 가능하다
  • REPEATABLE READ:    반복적으로 읽기가 가능하다
  • SERIALIZABLE:            직렬화가 가능하다

 

트랜잭션과 세션의 관계

  • 어플리케이션과 DB 과 커넥션을 맺게 되면 DB 는 내부에 세션이라는 것을 만든다.

 

세션의 역할

  • 세션을 통해 모든 요청 들이 처리가 된다.
  • SQL 을 전달 하면 커넥션에 연결된 세션이 SQL 을 실행한다.
  • 트랜잭션 시작, 커밋, 롤백 을 통해 트랜잭션 종료
  • 사용자가 커넥션을 닫거나 세션을 강제로 종료하면 세션은 종료된다.

 

Rollback 과 Commit 

Commit

  • 세션1: 데이터 추가
  • 세션2: 커밋이 안되어 새로 추가된 데이터를 읽지 못한다.
  • 세션1: 커밋
  • 세션2: 커밋이 되어 데이터를 읽을수 있다.

 

 

Rollback

  • 세션1: 데이터추가
  • 세션1: 데이터 롤백
  • 커밋이 안되었기 때문에 롤백시 추가한 데이터가 날라간다.

 

 

READ UNCOMMITED 의 주의점

  • Commit 과 Rollback 을 연관지어 생각해보자
  • 세션1: 데이터를 추가한다.
  • 세션2: 커밋이 안되도 읽을수 있기 때문에 데이터를 읽어 작업을 했다.
  • 세션1: 데이터 롤백
  • 세션2: 데이터가 사라지거나 작업한게 날라갔다
  • 이렇게 심각한 문제를 가져올수 있다.

 

 

Auto commit 

  • DB 는 기본적으로 Autocommit 이다.
    - 즉 SQL 문을 수행하는 순간 업데이트 되거나 데이터가 저장이 된다.
  • Auto commit 을 하게 되면 트랜잭션을 사용하기 힘들다.
  • 그렇기 때문에 트랜잭션을 잘 사용하려면 아래처럼 autocommit 을 해제해 주자
set autocommit false;

 

 

 

 

참고:

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-db-1/unit/110081?tab=curriculum 

 

학습 페이지

 

www.inflearn.com

 

728x90
반응형

'Spring > Spring DB 스터디' 카테고리의 다른 글

[Spring DB] 트랜잭션 적용 방식  (0) 2022.09.11
[Spring DB] 커넥션 풀과 데이터 소스  (0) 2022.07.27

댓글