ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 기술 면접 - 데이터 베이스 (2)
    기술 면접 2021. 4. 20. 02:04

    정규화

    • 이상 현상이 발생하는 테이블을 수정하여 정상으로 만드는 과정
    • 정규화를 하기 위해서는 테이블을 분석하여 기본키와 함수 종속성을 파악해야 함

    함수 종속성

    • 어떤 속성 A의 값을 알면 다른 속성 B의 값이 유일하게 정해지는 의존 관계를 '속성 B는 속성 A에 종속한다' 라고 함
    • A -> B라고 표기, A는 B의 결정자

    정규화 과정

    • 이상현상이 있는 릴레이션은 이상현상을 일으키는 함수 종속성의 유형에 따라 등급을 구분할 수 있음
    • 릴레이션은 정규형이라는 개념으로 구분

    제 1 정규형

    • 릴레이션의 속성 값이 원자값이어야 한다

    제 2 정규형

    • 릴레이션 R이 제 1 정규형이고 기본키가 아닌 속성이 기본키에 완전 함수 종속일 때
    • 이상현상을 일으키는 속성을 분리한다

    제 3 정규형

    • 속성들이 이행적으로 종속되어 있는지 여부
    • 이행적으로 종속되어 있는 속성을 분리한다

    BCNF

    • 릴레이션에 존재하는 함수 종속성에서 모든 결정자가 후보키이면 BCNF

    4, 5정규화도 존재하지만, 보통 쓰지 않는다

    트랜잭션

    트랜잭션 개념

    • 트랜잭션은 DBMS에서 데이터를 다루는 논리적인 작업의 단위
      • 트랜잭션은 장애 발생 시 데이터를 복구하는 작업의 단위가 된다
      • 트랜잭션은 여러 작업이 동시에 같은 데이터를 다룰 때 이 작업을 서로 분리하는 단위가 된다
    • 트랜잭션은 전체가 수행되거나 또는 전혀 수행되지 않아야 한다

    트랜잭션 수행 과정

    1. 시작(begin)
    2. 수행
    3. 부분완료
    4. 버퍼내용 기록
    5. 완료(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

    댓글

Designed by Tistory.