Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
Tags
- GitHub
- AWSOME DAY
- INCENSE
- 트랜잭션
- nestjs
- Branch
- 위코드
- EC2
- math함수
- inner
- then
- docker
- 콜백함수
- aws
- typescript
- 조인
- JavaScript
- 회고록
- 1차 프로젝트
- Merge
- MySQL
- Git
- graphql
- PlaceHolder
- 6ixsense
- full
- 온라인 컨퍼런스
- increment
- 보안 그룹 규칙
- Join
Archives
- Today
- Total
코딩 쏙쏙
[DB]트랜잭션(Transaction) 본문
트랜잭션은 데이터베이스의 상태를 변환시키는 하나의 논리적 기능을 수행하기 위한 작업의 단위
즉, 한 번에 모두 수행되어야 할 일련의 연산들을 의미
- A가 인터넷뱅킹으로 B에게 돈을 송금하였다.
- 하지만 A의 계좌에서는 돈이 차감되었지만, B에게는 입금되지 않았다.
만약 인출에는 성공했는데, 입금이 실패하였다면 오류가 발생한 것이다.
두 과정에서는 동시에 성공 혹은 실패해야 한다.
이 과정을 동시에 묶는 방법이 트랜잭션이다.
오류가 발생하였을 때 결과를 재반영하는 것이 아닌 모든 작업을 이전의 상태로 복구하고, 처리 과정이 모두 성공하였을 때 만 그 결과를 반영하는 것이다. 데이터 거래에서 안전성을 확보하려는 방법이 트랜잭션이다.
트랜잭션의 성질
1. 원자성(Atomicity)
- 트랜잭션의 연산은 DB에 모두 반영 또는 모두 반영X 한다.
- 트랜잭션 내의 모든 명령은 완벽히 수행되야 하며, 오류 발생시 모두 취소되어야 한다.
2. 일관성(Consistency)
- 트랜잭션은 일관성 있는 DB 상태를 유지해야 한다.
- 고정요소는 트랜잭션 수행 전과 수행 후의 상태가 같아야 한다.
3. 독립성(Isolation)
- 둘 이상의 트랜잭션이 동시에 실행되는 경우 다른 트랜잭션의 연산이 끼어들 수 없다.
- 각각의 트랜잭션은 서로 간섭 없이 독립적으로 수행되어야 한다.
4. 영속성,지속성(Durablility)
- 성공적으로 완료된 트랜잭션의 결과는 시스템 문제가 발생하여도 영구적으로 반영되어야 한다.
트랜잭션의 상태
- 활동(Active) : 트랜잭션이 정상적으로 실행중인 상태
작업 실패시
- 실패(Failed) : 트랜잭션 실행에 오류가 발생하여 중단된 상태
- 철회(Aborted) : 트랜잭션이 비정상적으로 종료되어 Rollback 연산을 수행한 상태
작업 성공시
- 부분 완료(Partially Committed) : 트랜잭션의 마지막 연산까지 실행했지만, Commit 연산이 실행되기 직전의 상태
- 완료(Commited) : 트랜잭션이 성공적으로 종료되어 Commit 연산을 실행한 후의 상태
Roll - back
Roll - back은 작업 중 문제가 발생되어 트랜잭션의 처리 과정에서 발생한 변경사항을 취소 하는 명령어이다.
해당 명령을 트랜잭션에 전달하면, 트랜잭션은 시작되기 이전의 상태로 되돌아간다.
즉, Rollback은 Commit하여 저장한 에전 상태를 복구하는 것이다.
트랜잭션 문법
START TRANSACTION; // 트랜잭션 시작
select * from users; // 초기 상태 보여줌
insert into users values(1, '신', '짱구', '떡잎마을' '서울', '대한민국'); // 데이터 수정
select * from users; // 수정 상태 보여줌
COMMIT // 트랜잭션을 DB에 적용
select * from users; // 적용된 결과 조회
롤백 과정
START TRANSACTION; // 트랜잭션 시작
insert into users values(5, '손', '흥민', '토트넘', '런던', '영국'); // 데이터 수정
select * from users; // 수정 상태 보여줌
ROLLBACK // 트랜잭션을 취소하고 START TRANSACTION 실행 전 상태로 롤백함
select * from users; // 조회
트랜잭션 예외
DDL문(CREATE, DROP, ALTER, RENAME, TRUNCATE)은 transaction의 rollback 대상이 아니다.
'[Dev_Study]' 카테고리의 다른 글
Session & Cookie 특징, 차이점 (0) | 2023.04.02 |
---|---|
인증(Authentication) & 인가, Session & Cookie (0) | 2023.04.02 |
개발 공부(2)_암호화의 종류 (0) | 2023.04.02 |
2. router (0) | 2023.03.27 |
1. Layered (0) | 2023.03.27 |