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
728x90
반응형
'Spring > Spring DB 스터디' 카테고리의 다른 글
[Spring DB] 트랜잭션 적용 방식 (0) | 2022.09.11 |
---|---|
[Spring DB] 커넥션 풀과 데이터 소스 (0) | 2022.07.27 |
댓글