CS

[CS] 9. 트랜잭션, 쿼리문 정리

suwonieee 2023. 3. 30. 13:23

트랜잭션

: DB 상태를 변화시키기 위해 수행하는 작업 단위. 여기서 상태를 변화시킨다는 것은 SQL 질의어(SELECT, INSERT, DELETE, UPDATE)를 통해 DB에 접근하는 것

 

만일 송금을 하려고 한다면, 출금 UPDATE와 입금 UPDATE가 되어야 한다. 출금 UPDATE와 입금 UPDATE를 통틀어 하나의 트랜잭션이라고 하며, 두 쿼리문이 모두 성공적으로 이루어져야 하나의 작업(트랜잭션)이 완료되는 것이다. 만일 하나라도 실패를 하게 된다면 모든 쿼리문을 취소하고 원래의 상태로 돌아가야만 한다.

 

트랜잭션 특징(ACID 성질)

-원자성(Atomicity)

: 트랜잭션이 모두 DB에 반영되거나, 모두 반영되지 않거나 둘 중 하나의 상태를 취해야 한다.(부분적 반영이 되면 안 된다)

-일관성(Consistency)

:트랜잭션의 작업 처리 결과는 항상 일관성 있어야 한다.

-독립성(Isolation)

:둘 이상의 트랜잭션이 동시에 병행 실행될 때, 어떠한 트랜잭션도 다른 트랜잭션 연산에 영향을 줄 수 없다.

-지속성(Durability)

:트랜잭션이 성공적으로 수행되었다면, 결과는 영구 반영되어야 한다.

 

Commit

하나의 트랜잭션이 성공적으로 수행되었고, DB가 일관성있는 상태일 때 이를 알려주기 위해 사용하는 연산

Rollback

하나의 트랜잭션 처리가 비정상적으로 종료되어 원자성이 깨진 경우. 모든 쿼리문을 취소하고 원래 상태(마지막으로 일관성 있던 상태)로 돌아가야 한다.

 

트랜잭션 관리를 위한 DBMS 전략

1. DBMS 구조

DBMS는 크게 Query Processor(질의 처리기), Storage System(저장 시스템)으로 구성되어 있고, DBMS의 입출력 단위는 고정 길이의 page 단위로 디스크(비휘발성)와 메인 메모리(일부분)에 읽고 쓴다.

Page Buffer Manager: DBMS의 Storage System에 속하는 모듈 중 하나로, 메인 메모리에 유지하는 페이지를 관리하는 모듈이다. Buffer 관리 정책에 따라, UNDO 복구와 REDO 복구가 요구되거나 그렇지 않게 되므로 트랜잭션 관리에 매우 중요한 결정을 가져온다.

2.UNDO

수정된 페이지들은 버퍼 교체 알고리즘에 따라서 디스크에 출력될 수 있다. 버퍼 교체는 트랜잭션과 무관히 버퍼의 상태에 따라 결정된다. 즉, 정상적으로 종료되지 않은(완전히 수행되지 않은) 트랜잭션이 변경한 페이지들은 원상 복구 되어야 하는데, 이 복구를 UNDO라고 한다.

1) steal 정책

- 언제든 수정된 페이지를 쓸 수 있는 정책으로, 대부분의 DBMS가 채택하는 버퍼 관리 정책이다. UNDO logging과 복구를 필요로 한다.

2)  ¬steal 정책

수정된 페이지들을 EOT (End Of Transaction)까지는 버퍼에 유지하는 정책으로, UNDO 작업이 필요하지 않지만, 매우 큰 메모리 버퍼가 필요하다.

3. REDO

이미 커밋한 트랜잭션의 수정을 재반영하는 복구 작업으로, 버퍼 관리 정책에 영향을 받는다. 트랜잭션이 종료되는 시점 트랜잭션이 수정한 페이지를 디스크에 쓸 것인가 아닌가로 기준을 나눈다.

1) FORCE

수정했던 모든 페이지를 트랜잭션 커밋 시점에 디스크에 반영한다. 수정된 페이지들이 커밋 시점 반영되므로 REDO가 필요 없음.

2) ¬FORCE

수정했던 페이지를 commit 시점에 반영하지 않는 정책으로, transaction이 disk 상의 db에 반영되지 않을 수 있기에 redo 복구가 필요. (대부분의 DBMS 정책) (수정했던 페이지를 디스크에 반영하지 않는 것이지 커밋 시점 아무것도 적지 않는 것이 아니다. 어떠한 일을 했는지 로그는 기록한다.)

➕로그

더보기

DB의 모든 갱신작업을 기록하는 로그 레코드의 연속을 로드라고 한다. 로그는 이론적으로 안정적 저장 매체에 기록된다. 대부분 DBMS는 성능 상의 이유로 하나의 로그를 유지한다.

DBMS는 버퍼 관리 정책으로 STEAL과 ¬FORCE 정책을 채택하고 있어, 이로 인해서 UNDO 복구와 REDO 복구가 모두 필요하다.

 

쿼리문 정리

쿼리문은 DB에서 데이터를 검색하거나 조작하는데 사용되는 명령어로, 쿼리문을 사용하여 DB에서 원하는 데이터를 검색하고, 수정, 삭제, 추가하는 등의 작업을 수행할 수 있다.

일반적으로 쿼리문은 SQL을 사용하여 작성된다. SQL은 데이터베이스에서 가장 널리 사용되는 언어 중 하나이며, 다양한 데이터베이스 관리 시스템(DBMS)에서 사용된다.

 

DB 연동 프로그램 구현시 사용되는 SQL 쿼리문

  1. SELECT: 데이터를 검색하는 데 사용되는 명령어
  2. FROM: 데이터를 검색할 데이터베이스 테이블을 지정하는 명령어
  3. WHERE: 검색 조건을 지정하는 명령어
  4. UPDATE: 데이터를 수정하는 데 사용되는 명령어
  5. DELETE: 데이터를 삭제하는 데 사용되는 명령어
  6. INSERT: 데이터를 추가하는 데 사용되는 명령어

Join

둘 이상의 테이블을 연결해 데이터를 검색하는 방법으로, 둘 이상의 테이블을 연결하기 위해서는 테이블이 적어도 하나 이상의 컬럼을 공유해야 한다. 공유하는 이 컬럼을 PK나 FK로 사용한다.

자칫 RDBMS에서는 SELECT를 사용하여 데이터를 가져오면 될 것이라고 생각하지만, RDBMS에서는 데이터의 중복을 피하기 위해 테이블을 나눠 저장하고, 쪼개진 데이터들을 하나로 가져오기 위해서 필요한 데이터가 들어있는 테이블을 조합하여 원하는 데이터를 불러 올 수 있다.

INNER JOIN : 교집합으로, 공통 부분만 SELECT. 즉, 두 테이블에 모두 지정한 열의 데이터가 있어야 한다.

LEFT/RIGHT JOIN: 부분집합으로, JOIN 기준 LEFT/RIGHT에 있는 데이터들이 전부 SELECT된다.

OUTER JOIN: 합집합으로, 1개의 테이블에만 데이터가 있어도 결과가 나온다.

 

 


Reference

 

https://gyoogle.dev/blog/computer-science/data-base/Transaction.html

 

DB 트랜잭션(Transaction) | 👨🏻‍💻 Tech Interview

DB 트랜잭션(Transaction) 트렌잭션이란? 데이터베이스의 상태를 변화시키기 위해 수행하는 작업 단위 상태를 변화시킨다는 것 → SQL 질의어를 통해 DB에 접근하는 것 작업 단위 → 많은 SQL 명령문들

gyoogle.dev

https://d2.naver.com/helloworld/407507

https://pearlluck.tistory.com/46

 

DB JOIN 정리(INNER/LEFT/RIGHT/OUTER)

join(조인) 둘 이상의 테이블을 연결해서 데이터를 검색하는 방법 연결하려면 테이블들이 적어도 하나의 컬럼을 공유하고 있어야함 이 공유하고 있는 컬럼을 PK 또는 FK값으로 사용 ​ 종류 1. INNER

pearlluck.tistory.com