본문 바로가기

Data Science/SQLP

[기술면접 대비] DB 내용 정리 (회복전까지)

반응형

1. 데이터베이스 시스템 개념

데이터베이스의 목적 : 파일시스템의 고질적인 문제인 중복을 해결하고, 공유를 목적으로 사용하는 시스템

-> 많은 트랜잭션을 동시에 수행해도 일관성과 고립성의 문제가 생기지 않도록 해야 함

 

-데이터 처리 기능 : CRUD

Create, Read, Update, Delete

-트랜잭션 속성 : ACID

Atomicity, Consistency, Isolation, Durability

 

(1) 데이터베이스 유형별 구축 난이도

-> 검색과 변경 빈도에 따른 데이터베이스 유형 구분

 

데이터베이스는 데이터의 검색과 변경 작업을 주로 수행하는데,

이러한 검색과 변경의 빈도에 따라 시스템 구축의 난이도가 결정

 

 

검색 빈도 변경 빈도 구축 난이도 특징
적다 적다 1단계 검색이 많지 않아 DB 구축 필요성 저하
보존가치 있는 경우에만 구축 필요
많다 적다 2단계 사용자 수가 보통일 경우
검색은 많지만 데이터의 변경이 적음
적다 많다 3단계 예약 변경/취소 등 데이터 변경은 많지만 검색이 적다
실시간 검색 및 변경이 중요한 데이터베이스
많다 많다 4단계 사용자 수가 많은 경우
검색도 많고 거래로 인한 변경도 많음

 

(2) 데이터베이스의 특징

  1. 실시간 접근성 (real time accessibility)
  2. 계속적인 변화 (continuous change)
  3. 동시 공유 (concurrent sharing)
    • 병행을 위한 [동시성 제어] 방법 - 트랜잭션과 락 그리고 접근제어
  4. 내용에 따른 참조 (reference by content)

(3) 데이터베이스 시스템 구성

 

데이터베이스 사용자와 데이터베이스 시스템으로 구분

 

데이터베이스의 관점 데이터베이스 프로그래머 응용 프로그래머의 역할
데이터베이스 설계자 DBA의 역할
데이터베이스 관리자
데이터베이스 사용자 일반 사용자 데이터를 다루는 업무를 하는 사람
응용 프로그래머 데이터베이스로 문제를 해결하는 프로그램을 작성하는 사람
프로그래밍 언어와 SQL로 일반 사용자를 위한 사용자 인터페이스와  데이터를 관리하는 응용 로직 개발
SQL 사용자 SQL 질의를 작성하거나 SQL로 프로그램을 작성하는 사람
데이터 검색, 데이터 구조 변경, 데이터 통계처리 등 데이터를 모니터링하는 업무
관리자 DBA를 뜻하며, 조직의 데이터베이스 운영을 총괄하는 사람
데이터 설계, 구현, 유지보수의 전 과정 담당
데이터베이스 시스템 DBMS 사용자와 데이터베이스를 연결시켜주는 소프트웨어
데이터베이스 데이터를 모아둔 토대
데이터 모델 데이터가 저장되는 기법에 관한 내용

 

(4)트랜잭션, 동시성 제어, 회복

트랜잭션

-데이터를 다루는 작업의 단위

-거래가 일어나는 동안 데이터가 모두 변경되거나, 없던 일이 되어야 한다. [원자성 - All or Nothing]

-> DB의 무결성을 유지하기 위한 속성

 

1. 원자성

-트랜잭션이 더는 쪼개지지 않는 하나의 프로그램 단위로 동작하기 위함

-기본적으로 COMMIT과  ROLLBACK을 이용하고, 길이가 길 경우 임의의 저장점인 SAVAPOINT를 이용할 수도 있다.

 

 

2. 일관성

-테이블 생성시 CREATE문과 ALTER문의 무결성 제약조건을 통해 명시된 조건에 따라 일관성을 유지한다.

 

 

3. 동시성 제어

-고립성을 유지하기 위한 방법 [동시 발생 방지]

:  여러 트랜잭션이 동시에 수행시, 상호 간섭이나 데이터 충돌이 일어나지 않는 현상

-일관성이 훼손되지 않도록, 동시에 수행되는 트랜잭션이 같은 데이터를 가지고 충돌하지 않도록 제어

-> 트랜잭션 고립 수준에 따라 트랜잭션의 상호 간섭 완화

 

4. 지속성

-트랜잭션 상태에 따라 반영 여부를 결정해, 저장된 데이터베이스가 외부 영향을 받지 않도록 함

[참고자료] 데이터베이스 개론과 실습 <한빛아카데미>

부분완료는 트랜잭션의 수행이 완료된 상태

실패는 트랜잭션의 수행이 중단된 상태

 

트랜잭션의 성질 DBMS의 기능
원자성 회복 (LOG DB)
일관성 무결성 제약조건 (SQL 문)
동시성 제어 (LOCKING)
고립성 동시성 제어 (LOCKING)
지속성 회복 (LOG DB)

(5) 동시성 제어

-여러개의 트랜잭션이 동시에 수행될 경우 일관성과 고립성을 유지하기 위한 방법

-두 트랜잭션이 모두 같은 데이터의 쓰기를 하는 경우 락을 이용해 갱신손실을 방지

 

1. 락 [갱신 손실 발생 방지]

-트랜잭션이 데이터를 읽거나 수정시 데이터에 표시하는 잠금 장치

-사용하고 있는 데이터를 다른 트랜잭션이 접근하지 못하고, 대기 상태로 만듦

-> 트랜잭션을 대기 상태로 만든 경우 사용자의 응답시간에 영향을 준다.

 

2. 락의 유형

공유락 : 데이터 읽기를 할 때 사용하는 락 -> 읽기 요청은 허용, 쓰기 요청은 허용하지 않는다.

배타락 : 읽고 쓰기를 할 때 사용하는 락 -> 모두 허용하지 않는다.

 

3. 2단계 락킹

- 락을 걸고 해제하는 시점에 따라 여러 개의 트랜잭션이 동시에 실행 시,

트랜잭션이 종료되지 않은 중간 단계의 데이터가 노출되어 데이터의 일관성이 깨질 가능성이 존재하므로 사용하는 기법

 

-> 락을 걸고 해제하는 시점의 제한을 두는 방법

1. 확장단계 : 트랜잭션이 필요한 락을 획득하는 단계

2. 수축단계 : 트랜잭션이 락을 해제하는 단계

-> T1이 A에 락을 걸고 작업을 하다가 중간에 락을 해제해, T2가 A에 접근을 가능하게 할 경우 -> 일관성 깨짐

-> T1이 B에 락을 걸 예정일 경우, A에 걸었던 락을 미리 해제하지 않는다.

 

4. 데드락

-2단계 락킹에 의해 무한대기상태에 빠지는 경우

-각각 자신의 데이터에 대해 락을 획득하고, 상대방 데이터에 대해 락을 요청시 -> 데드락 발생 [서로 대기만 하므로]

-> 우선순위 결정해 특정 트랜잭션을 먼저 강제 중지시킨다.

 

-> T1을 중지시킬 경우 T1이 변경한 데이터를 원래 상태로 바꿔둬 일관성을 유지하도록 함.

 

(6) 트랜잭션 고립 수준

-락만을 이용할 경우, 두 트랜잭션의 동시 진행 정도를 과도하게 막아 동시성을 높이기 위한 방법

-> 두 트랜잭션이 각각 읽기와 쓰기를 하는 경우

 

동일 데이터 읽기 오류의 종류 특징
오손 읽기 / 미완료 종속
[dirty read, uncommitted dependency]
읽기 작업을 하는 트랙잰션이 쓰기 작업을 하는 트랜잭션이 작업한 중간 데이터를 읽는 경우

-> 커밋하지 않은 데이터를 다른 트랙잭션이 읽지 못하도록 되어있을 경우 발생하지 않는다.
반복불가능 읽기 / 불일치 분석
[non-repeatable read, insonsistent analysis]
트랜잭션이 읽은 데이터를 다른 트랙잭션이 쓰기를 한 이후, 다시 읽을 경우 발생

-> 읽기 작업을 반복할 경우, 이전의 결과가 반복되지 않는 현상 발생 [같은 트랜잭션임에도 불과하고, 다른 결과 발생]
유령데이터 읽기
[phantom read]
트랜잭션이 읽은 데이터를 다른 트랙잭션이 쓰기를 한 이후, 다시 읽었는데, 이전에 없던 데이터가 존재하는 경우 발생

-> 반복 읽기 기능을 제공하지 않는 경우 발생하지 않는다.

 

1. 트랜잭션 고립 수준 명령어

-> 트랜잭션의 제어를 선택해 고립 수준 결정

SET TRANSACTION ISOLATION LEVEL <~>

 

  오손 읽기 반복불가능 읽기 유령데이터 읽기
READ UNCOMMITTED (LEVEL=0) 가능
갱신손실 방지를 위한 배타락을 제외한, 공유락은 설정하지 않는다.
READ COMMITTED (LEVEL=1) 불가능 가능
갱신손실 방지를 위한 배타락과 오손읽기를 방지하기 위해 임시 공유락 설정
REPEATABLE READ (LEVEL=2) 불가능 가능
갱신손실 방지를 위한 배타락과 반복불가능 읽기를 방지하기 위해 트랜잭션이 종료할 때 까지 공유락 설정
-> 동시성이 매우 떨어짐 [다른 트랜잭션이 설정한 공유락은 읽지만, 배타락은 읽지 못한다.]
SERIALIZABLE (LEVEL=3) 불가능
실행 중인 트랜잭션이 다른 트랜잭션으로부터 완벽 분리해, 인덱스에 공유락을 설정해 다른 트랜잭션이 INSERT문 금지

-> 오라클의 경우 동시성 제어를 시스템단에서 제공하기 때문에, COMMITTED와 SERIALIZABLE 모드만 제공

 

 

 

 

반응형

'Data Science > SQLP' 카테고리의 다른 글

SQLP 과목 변경  (1) 2023.10.07
[SQL] 프로그래머스 SQL  (0) 2022.10.14
[ORACLE] 트리거 만들기  (0) 2022.05.02
[ORACLE] sqlplus 접속 문제 해결  (0) 2022.04.12
[프로그래머스] 6.String, Date  (0) 2022.03.07