。゚(*´□`)゚。

코딩의 즐거움과 도전, 그리고 일상의 소소한 순간들이 어우러진 블로그

카테고리 없음

3.3 트랜젝션

quarrrter 2023. 12. 16. 01:48

3.3.1 트랜젝션

데이터베이스의 상태를 바꾸기 위해 수행하는 작업의 단위 또는 일련의 연산

 

특징(ACID)

  • 원자성(Atomicity): 트랜젝션이 데이터베이스에 완전히 반영되거나 아예 실행되지 않아야 한다.
  • 일관성(Consistencty): 트랜젝션이 수행이 완료된 데이터베이스는 일관성이 있다.
  • 독립성(Isolation): 수행 중인 트랜잭션에 다른 트랜잭션이 끼어들 수 없다.
  • 영속정(Durability): 완료한 트랜잭션의 결과가 데이터베이스에 영구적으로 반영된다.

명령어 TCL(Transaction Control Language)

  • COMMIT: 트랜젝션이 정상적으로 종료되어 데이터베이스에 변경 사항을 반영하는 명령어
  • ROLLBACK: 트랜젝션이 비정상적으로 종료되어 변경 사항을 취소하고 데이터베이스를 이전 상태로 되돌리는 명령어
  • SAVEPOINT: 트랜잭션에서 특정 지점을 지정하는 명령어. ROLLBACK과 함께 사용하면 해당지점까지 되돌리기 가능

 

트랜잭션이 처리되는 순서를 보장하기 위한 방법

  • 공유 락(shared lock): 데이터를 읽는 락으로 읽기 락이라고도 한다. 데이터를 읽는 연산이므로 데이터의 일관성에 영향을 주지 않아 데이터에 여러 공유 락이 동시에 접근할 수 있다.
  • 베타 락(exclusive lock): 데이터를 수정하는 락으로 쓰기락이라도 한다. 데이터의 일관성을 유지하기 위해 데이터에 하나의 베타 락이 접근 중일 때 다른 베타 락이 접근할 수 없다.

트랜젝션도 프로세스처럼 교착 상태에 빠질 수 있고, 해결 방법은 

  1. 예방 기법 : 트랜잭션 처리가 시작되기 전에 필요한 데이터에 대해 미리 락을 얻는 방식
  2. 회피 기법: 트랜잭션이 들어온 순서에 따라 교착 상태를 회피하는 방식
    • wait-die : 데이터의 락을 요청하려는 트랜잭션이 해당 데이터에 대해 이미 락을 갖고 있는 트랜젝션보다 오래되었다면 락을 얻을 때까지 기다린다. 반면, 락을 갖고 있는 트랜잭션보다 최신이라면 락 획득을 포기한다.
    • wound-wait: 데이터의 락을 요청하려는 트랜잭션이 해당 데이터에 대해 이미 락을 갖고 있는 트랜잭션보다 오래되었다면 락을 빼앗는다. 반면 락을 갖고 있는 트랜잭션보다 최신이라면 락 획득을 기다린다. 

 

이상

트랜잭션을 처리하는 중에 속성 간 종속이나 데이터 중복으로 발생하는 문제 

  • 삽입 이상: 데이터 삽입 시 의도치 않은 다른 데이터도 삽입된다. 
  • 갱신 이상: 데이터 갱신 시 일부 튜플만 갱신되어 데이터 모순이 발생한다.
  • 삭제 이상: 데이터 삭제 시 의도하지 않은 데이터도 삭제된다. 

 

 

정규화

데이터베이스의 이상 현상을 해결하기 위해 테이블을 분해하는 것. 

연산 시간이 증가하는 단점이 있어, 상황에 따라 적잘한 정규화를 진행해야 한다.

 

정규형 (=정규화한 결과)

  • 제1정규형 : 테이블의 모든 속성 값이 더 이상 분해될 수 없는 값, 즉 원자 값으로 구성되어야 한다.
    • 속성 값이 두 개인 것을 각각의 튜플로 나눔. 
  • 제2정규형: 제1정규형에 속하는 테이블에서 부분적 함수 종속을 제거해 완전 함수 종속을 만족해야 한다. 함수 종속성은 테이블에서 속성 간 종속 관계를 의미한다.
    • 부분적 함수 종속: 기본 키의 부분집합이 결정자가 될 수 있음을 의미
    • 완전 함수 종속: 결정자가 종속자 속성을 결정하지만, 결정자의 진부분집합이 종속자 속성을 결정하지 않는 경우 
  • 제3정규형: 제2정규형에 속하는 테이블에서 이행적 종속이 없어야한다.
    • 이행적 종속: A 속성이 B 속성을 결정하고 B 속성이 C 속성을 결정할 때 A 속성이 C 속성을 결정하는 것. 
  • 보이스-코드 정규형: 강한 제3규형이라고도 하며, 제3정규형에 속하는 테이블의 모든 결정자가 후보 키가 되도록 테이블 분해해야함
  • 제4정규형: 제3정규형에 속하면서 다치 종속을 제거해야한다.
    • 다치종속: 테이블에서 한 속성이 여러 속성의 값을 결정하는 것.
  • 제5정규형(5NF) : 제4정규형에 속하면서 조인 종속이 없어야 한다. 조인 종속이 없다는 것은 테이블을 분해했다가 조인할 때 테이블이 복원된다는 것을 의미함.
  • 역정규화: 정규화된 테이블을 낮은 단계의 테이블로 되돌리는 것으로 읽기 성능을 향상시킬 때 사용한다. 정규화를 수행하면 테이블이 분해되므로 필요한 결과 데이터를 얻기 위해 조인 연산을 여러 . 번수행해야 한다. 이 때문에 데이터베이스를 빈번히 조회하는 경우 성능저하가 생길 수 있다. 그래서 오히려 중복을 허용하는 역정규화를 수행한다.