티스토리 뷰
반응형
트랜잭션
- 트랜잭션은 한 번 질의가 실행되면 질의가 모두 수행되가 모두 수행되지 않는 작업수행의 논리적인 단위이다.
- 즉, query를 하나 실행했을 때, 중간에 실행이 중단되었을 경우에는 처음부터 다시 실행할 수 있도록 Rollback 이 수행되고, 오류 없이 모든 실행이 완료되면 commit 을 실행하는 단위이다.
- 트랜잭션은 DBMS의 성능 측정에 직접적인 영향을 가지고 있다.
- DBMS의 성능은 초당 트랜잭션의 실행 수(Transaction per second)로 측정되기 때문이다.
트랜잭션을 왜 사용하는가?
- 가장 큰 이유는, 병렬 처리로 인해 DB 서버에 여러 개의 클라이언트가 동시에 액세스하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 데이터의 부정합성을 방지 하고자 할 때 사용한다.
트랜잭션의 4가지 특성 : ACID
원자성(Atomicity)
- All or Noting의 개념으로서, 트랜잭션의 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것을 말한다.
- 즉, 트랜잭션은 분해가 불가능한 최소의 단위인 원자처럼 동작하는 의미를 가져와 원자성이라고 말하는 것이다.
- 트랜잭션은 성공 아니면 실패 단 2가지 경우 밖에 없는 것이다.
- Ex. 게시판에 글을 올릴 때, 해당 글이 정상적으로 올라가거나 올라가지 않는 경우만 있는 것이다. 절반만 올라가는 경우는 없다.
일관성(Consistency)
- 트랜잭션의 작업이 실행되기 전이나 후의 데이터베이스 상태는 일관되어야 한다는 것이다.
- 즉, 데이터는 정의된 규칙에서만 수정이 가능하여, 트랜잭션 작업 후에 숫자형 컬럼에 문자형 값이 저장되면 안되는 것이다.
- Ex. 게시판에 글을 올릴 때, 제목 길이는 255로 제한되어 있는데 트랜잭션 작업 이후 길이가 변경되면 안되는 것이다.
고립성(Isolation)
- 트랜잭션 작업 중에는 다른 트랜잭션에 영향을 주어서도 안되고, 다른 트랜잭션들에 의해 간섭을 받아서도 안된다는 것을 말한다.
- 트랜잭션 작업 중에 다른 트랜잭션의 영향을 받게 되면 자신의 동작이 달라 질 수가 있어, 트랜잭션 자신은 항상 고립된 상태에서 수행되어야 한다.
- 다수의 트랜잭션이 동시에 수행 중인 상황에서 현재 실행 중인 트랜잭션이 완료될 때까지는 다른 트랜잭션에서 보거나 참조할 수 없다.
- Ex. 철수와 영희가 게시판에 글을 동시에 올린다고 가정할 때, 두 트랜잭션이 충돌이 일어나 철수 글의 제목과 영희 글의 내용이 올라가는 것이 아니라, 철수 글이 올라갈 때까지 기다린 후 영희 글이 올라가게끔 진행하는 것이다.
지속성(Durablility)
- 성공적으로 수행되는 트랜잭션은 영원히 반영되는 것을 말하는 것으로, commit을 하면 현재 상태는 영원히 보장된다.
- 다시 말해, 트랜잭션이 성공적으로 완료된 후에는 다른 트랜잭션에 의해 변경되기 전까지는 변하면 안 되는 것이다.
- 소프트웨어 혹은 하드웨어적인 장애가 발생하는 일이 있더라도! 변하면 안된다.
- MySQL을 포함해 많은 데이터에비스의 구현에서는 트랜잭션 조작을 하드 디스크에 로그로 기록하고 시스템 이상이 발생하면 해당 로그를 사용하여 이상 발생 전까지 복원하는 것으로 지속성을 실현하고 있다.
반응형
'DataBase' 카테고리의 다른 글
[MySQL] 비밀번호 초기화 (0) | 2020.04.02 |
---|---|
[MySQL] Adaptive Hash Index (0) | 2020.04.01 |
[MySQL] MyISAM vs InnoDB (0) | 2020.02.17 |
[MySQL] InnoDB (0) | 2020.02.17 |
[MySQL] MyISAM (0) | 2020.02.17 |
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- springboot
- effectivejava
- java8
- try catch finally
- 이펙티브 자바
- 정적팩터리메서드
- 빌더 패턴
- 점층적 생성 패턴
- 팩토리 메소드 패턴
- 생성자
- package-private
- @Lazy
- 빈 순환 참조
- junit
- 김영한
- 자바8
- 연관관계
- JPA
- mustache
- 스프링부트
- 인프런
- flatMap
- java
- jdk버전
- 복사 팩토리
- Effective Java
- ifPresent
- try with resources
- Spring
- 이펙티브자바
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
글 보관함