📌 5주차 : 트랜잭션, 회복
- Commit, Rollback
- ACID
- 트랜잭션 격리수준
- DB 세션에 대해서 설명해주세요.
- Commit에 대해서 설명해주세요.
- Rollback에 대해서 설명해주세요.
- Auto Commit 설정에 대해서 설명해주세요.
- 트랜잭션에 대해 설명해주세요.
- 트랜잭션의 성질 ACID에 대해서 설명해주세요.
- 트랜잭션 격리 수준이 뭘까요?
- 트랜잭션 격리 수준 READ UNCOMMITTED에 대해서 설명해주세요.
- 트랜잭션 격리 수준 READ COMMITTED에 대해서 설명해주세요.
- 트랜잭션 격리 수준 REPEATABLE READ에 대해서 설명해주세요.
- 트랜잭션 격리 수준 SERIALIZABLE에 대해서 설명해주세요.
- DB 동시성 제어에 대해서 설명해주세요.
- 갱신 손실 문제에 대해 설명해주세요.
- DB 락에 대해서 설명해주세요.
- DB 데드락에 대해서 설명해주세요.
- DB 회복에 대해서 설명해주세요.
- REDO, UNDO에 대해서 설명해주세요.
- 체크포인트 회복 기법에 대해서 설명해주세요.
- MySQL InnoDB의 기본 트랜잭션 고립 수준은 뭘까요?
📌DB 세션에 대해서 설명해주세요.
데이터베이스 접속을 시작으로 여러 데이터베이스에서 관련 작업을 수행한 후
접속을 종료하기까지 전체기간을 의미합니다.
세션이 여러개라는 말은 현재 데이터베이스에 접속하여 사용 중인 연결이 여러개 있다는 뜻입니다.
cf) DB세션과 웹 애플리케이션에서의 사용자 세션은 개념적으로 유사하지만,
다른 컨텍스트에서 사용되는 개념입니다.
1. 데이터베이스 세션 :
사용자 또는 애플리케이션이 데이터베이스 서버에 로그인하여 연결을 시작할 때 생성됩니다.
이 세션은 데이터베이스와의 연결이 유지되는 동안 존재하며, 사용자의 쿼리 실행, 트랜잭션 관리 등 데이터베이스 관련 작업을 포함합니다.
데이터베이스 세션은 해당 연결이 종료되면 끝나며, SQL 명령을 통해 데이터베이스와 상호 작용합니다.
2. 웹 어플리케이션의 사용자 세션 :
웹 애플리케이션에서의 사용자 세션은 웹사이트 방문자가 브라우저를 통해 로그인할 때 생성됩니다.
이 세션은 사용자의 로그인 상태, 사용자별 설정, 장바구니 정보 등 사용자가 웹사이트에서 수행하는 활동을 추적합니다.
사용자 세션은 HTTP 쿠키나 세션 스토리지를 통해 관리되며, 웹 서버에서 세션 데이터를 저장합니다.
데이터베이스 세션은 데이터베이스와의 직접적인 연결과 상호작용을 나타내며,
웹 애플리케이션의 사용자 세션은 사용자의 웹사이트 사용 상태를 관리합니다.
두 세션은 각각의 도메인에 특화되어 있으며,
상호 운용될 수는 있지만, 본질적으로는 서로 다른 목적과 기능을 가지고 있습니다.
📌Commit에 대해서 설명해주세요.
관계형 데이터베이스 관리 시스템(RDBMS)에서 트랜잭션을 종료하고 다른 사용자에게 변경된 모든 사항을 보이도록 만드는 문입니다.
일반적으로 트랜잭션 종료 시 해당 업데이트를 확정한다는 의미에서 '커밋'이라고 사용합니다.
📌Rollback에 대해서 설명해주세요.
데이터베이스에서 업데이트에 오류가 발생할 때, 이전 상태로 되돌리는 것을 말합니다.
커밋과 반대로 업데이트 취소 처리를 Rollback이라고 하며, 이러한 제어를 약속 제어라고 부릅니다.
SQL에서는 Rollback문이 그 처리를 합니다.
데이터베이스는 업데이트 이전 저널 파일을 사용하여 원래의 정상적인 상태로 되돌립니다.
이것은 오류 동작 이후에도 깨끗한 사본으로 복원시킬 수 있기 때문에, 무결성을 위해 중요합니다.
데이터베이스 서버의 충돌로부터 복원하는데도 중요합니다. 충돌이 일어날 때, 특정 트랜잭션을 롤백시킴으로써 데이터베이스는 일관적인 상태로 되돌려집니다.
📌Auto Commit 설정에 대해서 설명해주세요.
모든 단건의 쿼리마다 자동으로 commit이 실행되어 데이터베이스에 영구적으로 반영되도록하는 명령을 말합니다.
하나의 트랜잭션은 commit이나 rollback을 만나면 끝이납니다.
SET AUTOCOMMIT = 1이 설정되어 있는 상황을 가정합니다.
비즈니스 로직의 요구사항 중 id가 1번인 유저의 이름을 민정으로,
id가 2번인 유저의 이름을 조앤으로 바꿔야햐며
이 두가지는 무조건 함께 실행되어야하고 하나만 성공해서는 안된다는 요구사항이 있습니다.
SET AUTOCOMMIT = 1;
update students set name = "민정" where id = 1; -- 이하 첫번째 쿼리
update students set name = "조앤" where id = 2; -- 이하 두번째 쿼리
위와 같이 쿼리를 수행하는 중 만약 두번째 쿼리가 실패하게 된다면?
SET AUTOCOMMIT = 1로 설정되어 있기 때문에
이미 첫번째 쿼리는 정상적으로 COMMIT이 되어 데이터베이스에 반영되었고,
실패한 두번째 쿼리만 데이터베이스에 반영되지 않았습니다.
둘 다 성공하거나 실패해야하는데 AUTOCOMMIT 속성으로 인하여 쿼리 단건이 자동으로 커밋되어버려 두 쿼리를 트랜잭션으로 묶지 못했습니다.
SET AUTOCOMMIT = 0;
update students set name = "민정" where id = 1; -- 이하 첫번째 쿼리
update students set name = "조앤" where id = 2; -- 이하 두번째 쿼리
COMMIT;
만약 SET AUTOCOMMIT = 0;으로 설정되어 있다면?
두 쿼리가 끝나는 시점에 COMMIT을 수행하기 때문에 두번째 쿼리가 실패했다면 모두 ROLLBACK됩니다.
📌트랜잭션에 대해 설명해주세요.
쪼갤 수 없는 업무 처리의 최소 단위를 말합니다. 거래내역이라고도 합니다.
일련의 작업 단위를 하나로 묶어서 처리할 수 있도록 해주는 것을 의미합니다.
데이터 조작 명령어가 모인 하나의 작업단위입니다.
트랜잭션은 은행 ATM이나 데이터베이스 등의 시스템에서 사용되는 더 이상 쪼갤 수 없는 업무 처리의 최소 단위입니다.
예를들어, A라는 사람이 B라는 사람에게 1,000원을 지급하고 B가 그 돈을 받은 경우, 이 거래 기록은 더 이상 작게 쪼갤 수가 없는 하나의 트랜잭션을 구성합니다.
만약 A는 돈을 지불했으나 B는 돈을 받지 못했다면 그 거래는 성립되지 않는다.
이처럼 A가 돈을 지불하는 행위와 B가 돈을 받는 행위는 별개로 분리될 수 없으며 하나의 거래내역으로 처리되어야 하는 단일거래입니다. 이런 거래의 최소 단위를 트랜잭션이라고 합니다.
트랜잭션 처리가 정상적으로 완료된 경우 커밋(COMMIT)을 하고,
오류가 발생할 경우 원래 상태대로 롤백(ROLLBACK)을 합니다.
[트랜잭션 목적]
트랜잭션은 데이터베이스 서버에 여러 개의 클라이언트가 동시에 액세스하거나 응용프로그램이 갱신을 처리하는 과정에서 중단될 수 있는 경우 등 데이터 부정합을 방지하고자 할 때 사용합니다.
데이터베이스 기능 중, 트랜잭션을 조작하는 기능은 데이터베이스 완전성(integrity) 유지를 확신하게 합니다.
단일 트랜잭션은 데이터베이스 내에 읽거나 쓰는 여러 개 쿼리를 요구합니다.
이때 중요한 것은 데이터베이스가 수행된 일부 쿼리가 남지 않는 것입니다.
예를 들어, 송금을 할 때 한 계좌에서 인출되면 다른 계좌에서 입금이 확인되는 것이 중요합니다.
또한 트랜잭션은 서로 간섭하지 않아야 합니다. 만약 쿼리 하나가 실패하면, 데이터베이스 시스템은 전체 트랜잭션 또는 실패한 쿼리를 롤백합니다.
이것은 DBMS가 어떻게 사용되고 셋업 되었느냐에 따라 다릅니다.
트랜잭션은 커밋 전에 언제든지 수동으로 롤백될 수 있습니다.
📌트랜잭션의 성질 ACID에 대해서 설명해주세요.
트랜잭션은 데이터베이스 시스템에서 병행 제어 및 회복 작업 시 처리되는 작업의 논리적인 단위로
사용자가 시스템에 대한 서비스 요구 시 시스템이 응답하기 위한 상태 변환 과정의 작업 단위입니다.
하나의 트랜잭션은 커밋되거나 롤백이 됩니다.
데이터베이스의 트랜잭션이 안전하게 수행되기 위해서는 ACID 조건을 충족해야합니다.
ACID란 Atomicity(원자성), Consistency(일관성), Isolation(고립성), Durability(지속성)의 약자로서,
데이터베이스의 트랜잭션이 안전하게 수행되기 위한 4가지 필수적인 성질입니다.
- Atomicity 원자성 :
하나의 트랜잭션이 더 이상 작게 쪼갤 수 없는 최소한의 업무단위입니다.
트랜잭션이 데이터베이스에 모두 반영되던지, 아니면 전혀 반영되지 않아야하며 작업이 부분적으로 실행되거나 중단되지 않는 것을 보장하는 것으로 즉 All or Nothing의 개념으로 작업 단위를 일부분만 실행하지 않는다는 것을 의미합니다.
트랜잭션 실행 도중 문제가 발생했을 경우 중단된 상태가 아닌 모두 실패하거나, 모두 완성되거나 둘 중 하나의 상태가 되어야합니다. 즉, 100개 명령어로 구성된 트랜잭션 중 99개 완료 1개 실패가 된다면, 이는 무조건 실패로 간주하여 트랜잭션 시작 전 상태로 돌려야합니다.
- Consistency 일관성 :
트랜잭션이 완료된 결과값이 일관적인 DB 상태를 유지하는 것을 말합니다.
시스템이 가지고 있는 고정요소는 수행 전과 후의 상태가 같아야하며 트랜잭션의 작업 처리 결과가 항상 일관성이 있어야한다는 것으로 트랜잭션이 진행되는 동안 데이터베이스가 변경되더라도 업데이트된 데이터베이스로 트랜잭션이 진행되는 것이 아니라, 처음 트랜잭션을 진행하기 위해 참조한 데이터베이스로 진행됩니다.
이렇게 함으로써 각 사용자는 일관성 있는 데이터를 볼 수 있는 것입니다.
트랜잭션 수행이 보존해야 할 일관성은 기본키, 외래키 제약과 같은 명시적인 무결성 제약 조건들뿐만 아니라, A에서 B로 돈을 이체할 때 A와 B계좌의 돈의 총합이 같아야 한다는 사항과 같은 비명시적인 일관성 조건들도 있습니다.
- Isolation 고립성 :
하나의 트랜잭션 수행 시 다른 트랜잭션의 작업이 끼어들지 못하도록 보장하는 것입니다.
즉 트랜잭션 끼리는 서로를 간섭할 수 없습니다.
트랜잭션이 실행되는 도중에 변경한 데이터는 이 트랜잭션이 완료될 때까지 다른 트랜잭션이 참조하지 못하게 하는 특성입니다.
데이터베이스는 클라이언트들이 같은 데이터를 공유하는 것이 목적이므로 여러 트랜잭션이 동시에 수행되어야합니다. 이때 트랜잭션은 상호 간의 존재를 모르고 독립적으로 수행되어야합니다.
여러 트랜잭션이 동시에 수행되더라도 각각의 트랜잭션은 다른 트랜잭션의 수행에 영향을 받지 않고 독립적으로 수행되어야합니다.
한 트랜잭션의 중간 결과가 다른 트랜잭션에게는 숨겨져야한다는 의미인데, 이러한 성질이 보장되지 않으면 트랜잭션이 원래 상태로 되돌아갈 수 없게 됩니다.
예를들어 트랜잭션이 A라는 계좌에서 작업을 하고 있을 경우,
다른 트랜잭션이 A계좌에 대해 참조하거나 관여할 수 없고 작업이 끝날 때까지 대기해야하는 것을 말합니다.
cf) 트랜잭션의 성질 중 하나인 고립성의 특성을 지키지 않을 경우, 동시성 이슈가 발생합니다.
트랜잭션 한 건 한 건 당으로 잘 해결하려면 Lock을 걸어줘야합니다.
마치 화장실(테이블)에 사람(트랜잭션)이 들어가서
문을 잠그고 볼일을 보고(데이터 수정), 화장실에서 나와야(lock을 해제)
다른 트랜잭션(사람)이 화장실(테이블)에 들어갈 수 있다는 것입니다.
- durability 지속성 :
트랜잭션이 정상적으로 종료된 다음에는 영구적으로 데이터베이스에 작업의 결과가 저장되어야 합니다.
지속성은 트랜잭션의 성공 결과 값은 장애 발생 후에도 변함없이 보관되어야 한다는 것으로 트랜잭션이 정상적으로 완료된 경우에는 버퍼의 내용을 하드디스크(데이터베이스)에 확실히 기록해야하며,
부분 완료된 경우에는 작업을 취소하여야합니다.
즉, 정상적으로 완료 혹은 부분 완료된 데이터는 DBMS가 책임지고 데이터베이스에 기록하는 성질이 지속성이며 영속성이라고 표현하기도 합니다.
📌트랜잭션 격리 수준이 뭘까요?
트랜잭션 간에 독립성을 완벽히 보장하려면
동시에 처리되는 트랜잭션을 거의 차례대로 실행을 해야합니다.
하지만 이렇게 처리를 하면 동시 처리 능력도 떨어져 성능이 매우 저하됩니다.
따라서 DBMS는 트랜잭션 격리 수준을 4단계(Read Uncommitted, Read Commited, Repeatable Read, Serializable)로 나누어 제공하여 상황에 맞게 선택할 수 있도록 하고 있습니다.
레벨이 높아질수록 격리성(고립성)은 높아지고 동시 처리 능력은 떨어지게 됩니다.
📌트랜잭션 격리 수준 READ UNCOMMITTED에 대해서 설명해주세요.
다른 트랜잭션의 커밋이 되지 않은 데이터에 접근할 수 있는 격리 수준입니다.
이 격리 수준은 심각한 문제가 있기 때문에 일반적인 데이터베이스에서는 거의 사용되지 않습니다.
예시
A의 계좌에는 13만원이 있었습니다.
A의 통신비 5만원이 자동이체 되는 날입니다.
1. 통신사의 출금 시스템에서 A의 통신비를 출금하는 트랜잭션이 시작되었습니다.
2. UPDATE account SET balance=80000 WHERE user_name = "A";
3. 그리고 A가 온라인 뱅킹 앱으로 통장잔고를 확인합니다.
READ UNCOMMITTED에서는 커밋되지 않은 데이터를 확인할 수 있기 때문에 A는 계좌에 8만원이 있는 것을 확인합니다.
4. 그 후 자동이체 트랜잭션이 어떠한 이유로 롤백되었습니다.
5. 조금 뒤 A는 다시 잔고를 확인했는데 계좌 잔고는 13만원입니다.
시각 | 통신비 출금 트랜잭션 | 온라인 뱅킹 잔액 조회 트랜잭션 |
15:25:00 | 트랜잭션 BEGIN | |
15:25:01 | A의 잔고를 8만원으로 UPDATE | |
15:25:02 | 트랜잭션 BEGIN | |
15:25:03 | A의 잔고 조회 ▷ 8만원 | |
15:25:04 | 트랜잭션 COMMIT | |
15:25:05 | 트랜잭션 ROLLBACK |
DB에서는 A의 잔고가 8만원이 된 적도 없는데 19시 25분 03초에 온라인 뱅킹 잔액 조회 트랜잭션은 커밋되지 않은 데이터인 8만원을 읽어갔습니다. 실제 잔액은 13만원인데 말입니다.
이것이 바로 dirty read 입니다.
일기만 하면 그나마 다행인데
만약 이렇게 읽은 8만원을 가지고 UPDATE를 했다면 아주 큰 문제가 발생할 것입니다.
시각 | 통신비 출금 트랜잭션 | 온라인 뱅킹 잔액 조회 트랜잭션 |
15:25:00 | 트랜잭션 BEGIN | |
15:25:01 | A의 잔고 조회 ▷13만원 | |
15:25:02 | A의 잔고를 13-5=8만원으로 UPDATE | 트랜잭션 BEGIN |
15:25:03 | A의 잔고 조회 ▷8만원 | |
15:25:04 | 트랜잭션 ROLLBACK | |
15:25:05 | 8+2=10만원으로 A잔고 UPDATE | |
15:25:06 | 트랜잭션 COMMIT |
A의 잔고는 15만원이 되어야하는데, 10만원이 되는 문제가 발생했습니다.
이처럼 READ UNCOMMITTED 격리 수준은 큰 문제를 가지고 있어 거의 사용되지 않습니다.
📌트랜잭션 격리 수준 READ COMMITTED에 대해서 설명해주세요.
READ COMMITTED는 커밋되지 않은 데이터도 읽어왔던 READ UNCOMMITTED와 달리, 커밋된 데이터만 읽어옵니다.
이 격리 수준은 Oracle, PostgreSQL 등 많은 RDBMS의 default 격리 수준입니다.
READ UNCOMMITTED 격리 수준에서 발생했던 문제인 dirty read 문제가 발생하지 않습니다.
트랜잭션이 시작되기 전에 COMMIT된 데이터만 조회할 수 있습니다.
하지만 READ COMMITTED도 문제가 있습니다. non-repeatable read 문제가 발생합니다.
non-repeatable read 문제란 무엇일까요?
시각 | 통신비 출금 트랜잭션 | 온라인 뱅킹 잔액 조회 트랜잭션 |
15:25:00 | 트랜잭션 BEGIN | |
15:25:01 | A의 잔고 조회 ▷13만원 | |
15:25:02 | A의 잔고를 13-5=8만원으로 UPDATE | 트랜잭션 BEGIN |
15:25:03 | A의 잔고 조회 ▷13만원 | |
15:25:04 | 트랜잭션 COMMIT | |
15:25:05 | A의 잔고 조회 ▷ 8만원 | |
15:25:06 | 트랜잭션 COMMIT |
잔액 조회 트랜잭션에서
SELECT balance FROM account WHERE user_name = "A"; 라는 똑같은 쿼리를 두번 실행했을 때
첫번째는 13만원을 두번째는 8만원을 받게됩니다.
이렇게 같은 트랜잭션 내에서 같은 쿼리를 여러 번 실행했을 때
같은 row의 값이 서로 다른 것을 non-repeatable read 라고 합니다.
📌트랜잭션 격리 수준 REPEATABLE READ에 대해서 설명해주세요.
REPEATABLE READ는 한 트랜잭션 내에서 한 번 읽은 데이터는 바뀌지 않는다는 것을 보장하는 격리 수준입니다.
따라서 READ COMMITTED에서 발생했던 non-repeatable read 문제가 발생하지 않습니다.
REPEATABLE READ는 MySQL(MariaDB)의 default 격리 수준입니다.
REPEAT READ 격리 수준에서는 여러 번 읽어도 같은 결과가 나오는 것을 보장하는 것은 아니지만
읽은 row들은 변하지 않는 것을 보장합니다.
새로운 row가 추가될 때 같은 결과임을 보장하지 못합니다.
읽었던 row들은 변하지 않지만 새로운 row가 추가되면 처음 읽었을 때는 없었던 row도 읽어옵니다.
따라서 처음 읽었을 때는 row 수가 10개였는데 다시 읽었을 때는 row 수가 11이 되는 현상이 발생할 수 있습니다.
이렇게 유령처럼 없던 row가 생기는 것을 phantom read라고 합니다.
기존에 있던 row가 사라지는 경는 발생하지는 않는다.
없던 row는 새로 생길 수 있지만
있던 row는 사라지지도, 값이 변경되지도 않습니다.
대부분의 RDBMS는 REPEATABLE READ 수준에서 phantom read 현상이 발생하지만
MySQL(MariaDB)의 InnoDB 엔진에서는 SNAPSHOT을 이용하기 때문에 phantom read 현상이 발생하지 않는다고 합니다.
📌트랜잭션 격리 수준 SERIALIZABLE에 대해서 설명해주세요.
SERIALIZABLE 격리 수준은 모든 트랜잭션 작업이 순차적으로 진행되는 격리수준입니다.
따라서 REPEATABLE READ 수준에서 발생했던 phantom read 문제가 발생하지 않습니다.
📌DB 동시성 제어에 대해서 설명해주세요.
동시성 제어란 다중 사용자 환경에서 둘 이상의 트랜잭션이 동시에 수행될 때,
일관성을 해치지 않도록 트랜잭션의 데이터 접근을 제어하는 것입니다.
📌갱신 손실 문제에 대해 설명해주세요.
하나의 트랜잭션이 갱신한 내용을 다른 트랜잭션이 덮어씀으로써 갱신이 무효화가 되는 것을 의미합니다.
두개의 트랜잭션이 한 개의 데이터를 동시에 갱신(Update)할 때 발생합니다.
📌DB 락에 대해서 설명해주세요.
트랜잭션들이 동시에 수행될 때, 데이터의 일관성을 해치지 않도록 데이터 접근을 제어하는 DBMS의 기능입니다.
동시성 제어를 위해서 필요한 기능입니다.
📌DB 데드락에 대해서 설명해주세요.
두 개 이상의 트랜잭션이 각각 자신의 데이터에 대해 락을 획득하고
상대방 데이터에 대해 락을 요청하면 무한 대기 상태에 빠질 수 있는 현상입니다.
교착상태라고도 합니다.
📌DB 회복에 대해서 설명해주세요.
DB를 장애가 발생했던 이전의 상태로 복구 시켜 일관된 DB 상태를 만드는 것입니다.
크게 덤프를 이용하는 방법과 로그를 이용하는 방법이 있습니다.
덤프
일정 주기로 원본의 데이터베이스의 모든 내용을 다른 저장장치에 복사하는 것입니다.
로그
변경 이전의 데이터베이스를 기준으로 변경 연산이 발생할 때마다 로그 파일을 작성하여 기록하고,
회복할 때 로그에 적힌 내용을 사용하여 복원하는 방법입니다.
📌REDO, UNDO에 대해서 설명해주세요.
둘 다 체크포인트 이후에 로그 기록을 보면서 완료되지 않은 트랜잭션에 대해 수행하는 것입니다.
REDO (다시하다)
장애 발생 전 이미 완료된 트랜잭션을 재 수행합니다.
사용자가 했던 작업을 그대로 다시 합니다.
트랜잭션의 영속성을 보장하기 위함입니다.
결과를 영구적으로 저장하고 보존해야합니다.
UNDO (원상태로 돌리다)
장애 발생 후 진행중이던 트랜잭션을 취소하고 이전 상태로 복구합니다.
사용자가 했던 작업을 반대로 진행하여 사용자의 작업을 원상태로 돌립니다.
원자성을 만족하기 위함입니다.
트랜잭션은 전부 실행되거나 아예 실행되지 않아야합니다.
📌체크포인트 회복 기법에 대해서 설명해주세요.
로그를 이용한 회복기법의 경우 원칙적으로 로그 전체를 조사해야 되는데, 이 경우 시간이 너무 많이 걸립니다.
이러한 문제점을 해결하기 위한 기법이 검사시점(checkpoint) 방법입니다.
즉. 로그는 그대로 기록을 유지하면서, 회복 관리자가 정하는 일정한 시간 간격으로 검사 시점을 생성하여 장애 발생시 검사점 이전에 처리된 트랜잭션은 회복 작업에서 제외하고 이후에 처리된 내용에 대해서만 회복 작업을 수행하는 회복 기법입니다.
📌 MySQL InnoDB의 기본 트랜잭션 고립 수준은 뭘까요?
REPEATABLE READ입니다.
다중 버전 동시성 제어(MVVC)를 사용합니다. 그래서 PHANTOM READ 부정합이 발생하지 않습니다.
InnoDB은 MVCC, 행 수준 잠금, 갭락과 레코드 락이 합쳐진 넥스트 키락을 사용하여 문제를 해결합니다.
[참고자료]
autocommit이 도대체 뭔데
MySQL을 사용하면 SET AUTOCOMMIT = 1; 혹은 SET AUTOCOMMIT = 0;의 쿼리를 본 적이 있을 것이다. 이 AUTOCOMMIT 이 도대체 뭘까?RDS를 사용하면 트랜잭션을 사용하게 된다. 트랜잭션을 간단히 설명하면 일련의 작
velog.io
트랜잭션 - 해시넷
트랜잭션(transaction)이란 "쪼갤 수 없는 업무 처리의 최소 단위"를 말한다. 거래내역이라고도 한다. '트렌젝션'이 아니라 '트랜잭션'이 올바른 표기법이다. 영어로 간략히 Tx라고 표기하기도 한다.
wiki.hash.kr
[DB] 트랜잭션 격리 수준에 대해 알아보자
안녕하세요 트랜잭션 격리 수준이 무엇인지 알고 계신가요? 트랜잭션 격리는 트랜잭션의 특징 ACID 중 I(Isolation)에 해당합니다. 모든 트랜잭션끼리는 격리되어야 한다는 것입니다. 모든 데이터베
breakcoding.tistory.com
'CS 면접 준비' 카테고리의 다른 글
데이터베이스 스터디 회고 (0) | 2023.12.11 |
---|---|
데이터베이스 4주차 스터디 정리 (1) | 2023.11.29 |
데이터베이스 3주차 스터디 정리 (1) | 2023.11.22 |
데이터베이스 2주차 스터디 정리 (1) | 2023.11.15 |
데이터베이스 1주차 스터디 정리 (0) | 2023.11.08 |