[DB] 트랜잭션(transaction)의 개념과 사용하기
업데이트:
안녕하세요👋
백엔드 개발자라면 DB관리는 빠질 수 없는 부분일 텐데요 안정적인 db의 데이터를 관리하기 위해 쿼리를 트랜잭션 형태로 개발하는 것을 추천하고 많이 사용하는데요
이번에는 트랜잭션의 개념과 사용 문법들에 대해 익혀보겠습니다
저도 학습을 위해 여기저기 찾아봤는데 개념설명은 많지만 실제 예제나 명확히 설명한 글들이 많이 없어 정리해보겠습니다
🙏요약
이번 글에서는 트랜잭션의 정의와 SQL쿼리에서 사용법 및 개념에 대해 이야기하겠습니다
- 트랜잭션이란?
- DB SQL에서의 사용
- 백엔드에서의 사용
📝트랜잭션이란?
트랜잭션이란 DB의 데이터 상태를 변화시키는 쿼리의 단위입니다
한 줄의 select문이 아닌 여러 쿼리들을 묶은 실행 단위를 이야기 하는데요 프로시저와 헷갈리기도 하는데 예시로 설명하자면 프로시저는 함수, 트랜잭션은 try/catch 구문으로 이해하면 되겠습니다
코드에서 예외처리를 많이 사용하는 만큼 트랜잭션도 많이 사용이 되는데요 바로 트랜잭션의 특징 때문입니다
트랜잭션의 특징
트랜잭션의 중요한 특징은 ACID라는 4가지로 구분됩니다
- 원자성(Atomicity)
- 일관성(Consistency)
- 독립성(Isolation)
- 지속성(Durability)
원자성
-데이터베이스에 트랜잭션의 수행이 모두 반영되거나 아예 반영되지 않아야 함
일관성
-트랜잭션이 실행을 성공적으로 완료하면 일관성있는 데이터베이스 상태로 유지해야 함,데이터베이스의 제약조건에 만족되지 않을시 트랜잭션은 중단된다
독립성
-트랜잭션 수행시 다른 트랜잭션의 연산 작업이 끼어들지 못하도록 함, 이는 트랜잭션 밖에있는 어떠한 연산도 트랜잭션 중간의 데이터를 볼 수 없음
지속성
-성공적으로 수행된 트랜잭션은 영원히 반영되어야 함, 시스템 문제/DB의 제약조건을 체크하더라도 유지되어야 함
ACID를 모두 만족하는 트랜잭션을 구현하는 것은 매우 어려운 일이고 이를 위해 lock을 사용하게 됩니다
우리는 이러한 개념을 알고 문법에 맞춰 사용하면 될 것입니다.
👀실제 사용 모습 트랜잭션 예제
그럼 SQL로 트랜잭션을 사용하는 방법에 대해 알아보겠습니다
START TRANSACTION
[transaction_characteristic [, transaction_characteristic] ...]
transaction_characteristic: {
WITH CONSISTENT SNAPSHOT
| READ WRITE
| READ ONLY
}
BEGIN [WORK]
COMMIT [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
ROLLBACK [WORK] [AND [NO] CHAIN] [[NO] RELEASE]
SET autocommit = {0 | 1}
mysql 공식 레퍼런스에서 제시하고 있는 트랜잭션 코드 입니다
START TRANSACTION 또는 BEGIN 으로 시작하여 COMMIT,ROLLBACK으로 끝나게 됩니다
BEGIN 이 뭔지 제대로 나와있는 곳이 없어 직접 실험해보았습니다
먼저 간단하게 id 속성이있는 테이블을 만든 뒤
begin 문장으로 시작하여 실험해보았습니다
rollback구문에서 뒤로 가는 것을 볼 수 있습니다
이번엔 start transaction 구문을 통해 트랜잭션을 시작해 보았습니다
역시나 잘 적용되어 테이블에 아무런 속성이 없는 것을 확인 할 수 있습니다
이러한 방식으로 rollback과 commit을 통해 구문을 제어할 수 있습니다
댓글남기기