-
기술 면접 - 데이터 베이스 (2)기술 면접 2021. 4. 20. 02:04
정규화
- 이상 현상이 발생하는 테이블을 수정하여 정상으로 만드는 과정
- 정규화를 하기 위해서는 테이블을 분석하여 기본키와 함수 종속성을 파악해야 함
함수 종속성
- 어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존 관계를 '속성 B는 속성 A에 종속한다' 라고 함
- A -> B라고 표기, A는 B의 결정자
정규화 과정
- 이상현상이 있는 릴레이션은 이상현상을 일으키는 함수 종속성의 유형에 따라 등급을 구분할 수 있음
- 릴레이션은 정규형이라는 개념으로 구분
제 1 정규형
- 릴레이션의 속성 값이 원자값이어야 한다
제 2 정규형
- 릴레이션 R이 제 1 정규형이고 기본키가 아닌 속성이 기본키에 완전 함수 종속일 때
- 이상현상을 일으키는 속성을 분리한다
제 3 정규형
- 속성들이 이행적으로 종속되어 있는지 여부
- 이행적으로 종속되어 있는 속성을 분리한다
BCNF
- 릴레이션에 존재하는 함수 종속성에서 모든 결정자가 후보키이면 BCNF
4, 5정규화도 존재하지만, 보통 쓰지 않는다
트랜잭션
트랜잭션 개념
- 트랜잭션은 DBMS에서 데이터를 다루는 논리적인 작업의 단위
- 트랜잭션은 장애 발생 시 데이터를 복구하는 작업의 단위가 된다
- 트랜잭션은 여러 작업이 동시에 같은 데이터를 다룰 때 이 작업을 서로 분리하는 단위가 된다
- 트랜잭션은 전체가 수행되거나 또는 전혀 수행되지 않아야 한다
트랜잭션 수행 과정
- 시작(begin)
- 수행
- 부분완료
- 버퍼내용 기록
- 완료(commit)
트랜잭션의 성질
원자성
전부 수행되거나 전혀 수행되지 않아야 한다
- START TRANSACTION
- COMMIT
- ROLLBACK
- SAVE
일관성
트랜잭션을 수행한 전후 데이터베이스는 항상 일관된 상태여야 한다
- 무결성 제약 조건을 지켜야 한다
고립성
수행중인 트랜잭션에 다른 트랜잭션이 끼어들어 변경 중인 데이터 값을 훼손하는 일이 없어야 한다
- 동시성 제어
- 트랜잭션 고립 수준을 통한 상호 간섭 완화
지속성
수행을 성공적으로 완료한 트랜잭션은 변경한 데이터를 영구히 저장해야 한다
- 트랜잭션이 정상적으로 완료 혹은 부분완료한 데이터는 반드시 데이터베이스에 기록되어야 함
- 시스템이 멈추어도 트랜잭션 수행으로 변경된 내용은 디스크에 기록된다
동시성 제어
- 트랜잭션이 동시에 수행될 때, 일관성을 해치지 않도록 트랜잭션의 데이터 접근을 제어하는 DBMS의 기능
갱신 손실 문제
- 두 개의 트랜잭션이 한 개의 데이터를 동시에 갱신할 때 발생
해결책
락
- 갱신 손실 문제를 해결하려면 상대방 트랜잭션이 데이터를 사용하는지 여부를 알 수 있는 규칙이 필요
- 락을 이용하여 자신이 사용할 데이터를 잠그면 다른 트랜잭션은 잠금이 풀릴 때까지 기다려야 한다
락의 유형
- 공유락
- 트랜잭션이 읽기를 할 때 사용되는 락
- 배타락
- 읽기 / 쓰기를 할 때 사용되는 락
- 다른 트랜잭션이 데이터에 공유락을 걸어두면, 공유락의 요청은 허용하고 배타락은 허용하지 않음
- 다른 트랜잭션이 데이터에 배타락을 걸어두면, 공유락과 배타락 모두 허용하지 않음
데드락
- 두 개 이상의 트랜잭션이 각각 자신의 데이터에 대하여 락을 획득하고 상대방 데이터에 대하여 락을 요청하면 무한 대기 상태에 빠질 수 있음
- 이러한 현상을 데드락 혹은 교착상태라고 함
- 데드락이 발생한 트랜잭션 중 하나를 강제 중지시킨다. -> 중지한 트랜잭션은 회복시킴
트랜잭션 고립 수준
트랜잭션 동시 실행 문제
- 오손 읽기 문제, 반복불가능 읽기 문제, 유령 데이터 읽기 문제 등이 발생
- 읽기만 하는 트랜잭션이 쓰기 트랜잭션에서 작업한 중간 데이터를 읽기 때문에 발생
오손 읽기
- 읽기 작업을 하는 트랜잭션 1이 쓰기 작업을 하는 트랜잭션 2가 작업한 중간 데이터를 읽기 때문에 생기는 문제
반복불가능 읽기
- 트랜잭션 1이 데이터를 읽고 트랜잭션 2가 데이터를 쓰고, 트랜잭션 1이 다시 한번 데이터를 읽을 때 생기는 문제
- 트랜잭션이 읽기 작업을 반복할 경우 이전의 결과가 반복되지 않는 현상
유령 데이터 읽기
- 트랜잭션 1이 데이터를 읽고 트랜잭션 2가 데이터를 쓰고, 트랜잭션 1이 다시 한번 데이터를 읽을 때 생기는 문제
- 트랜잭션 1이 읽기 작업을 반복할 경우 이전에 없던 데이터가 나타나는 현상을 유령 데이터 읽기라고 함
트랜잭션 고립 수준 명령어
- DBMS는 트랜잭션을 동시에 실행시키면서 락보다 좀 더 완화된 방법으로 문제를 해결하는 명령어를 제공 함
오손 읽기 반복불가능 읽기 유령데이터 읽기 READ UNCOMMITTED 가능 가능 가능 READ COMMITTED 불가능 가능 가능 REPEATABLE READ 불가능 불가능 가능 SERIALIZABLE 불가능 불가능 불가능 READ UNCOMMITTED
- 고립 수준이 가장 낮은 명령어
- 자신의 데이터에 아무런 공유락을 걸지 않는다
READ COMMITTED
- 오손 페이지의 참조를 피하기 위해 자신
REAPEATABLE READ
- 자신의 데이터에 설정된 공유락과 배타락을 트랜잭션이 종료할 때까지 유지하여 다른 트랜잭션이 자신의 데이터를 갱신할 수 없도록 함
-
- 다른 고립화 수준에 비해 데이터의 동시성이 낮아 특별한 상황이 아니라면 사용하지 않는게 좋음
SERIALIZABLE
- 고립 수준이 가장 높은 명령어
- 데이터 집합에 범위를 지어 잠금을 설정할 수 있기 때문에 다른 사용자가 데이터를 변경하려고 할 때 트랜잭션을 완벽하게 분리할 수 있음
'기술 면접' 카테고리의 다른 글
기술 면접 - 디자인 패턴 (0) 2021.04.21 기술 면접 - 객체 지향 (0) 2021.04.20 기술 면접 - 데이터 베이스 (1) (0) 2021.04.20 기술 면접 - 운영체제 (4) (0) 2021.04.19 기술 면접 - 운영체제 (3) (0) 2021.04.19