1. 데이터베이스 시스템 개념
데이터베이스의 목적 : 파일시스템의 고질적인 문제인 중복을 해결하고, 공유를 목적으로 사용하는 시스템
-> 많은 트랜잭션을 동시에 수행해도 일관성과 고립성의 문제가 생기지 않도록 해야 함
-데이터 처리 기능 : CRUD
Create, Read, Update, Delete
-트랜잭션 속성 : ACID
Atomicity, Consistency, Isolation, Durability
(1) 데이터베이스 유형별 구축 난이도
-> 검색과 변경 빈도에 따른 데이터베이스 유형 구분
데이터베이스는 데이터의 검색과 변경 작업을 주로 수행하는데,
이러한 검색과 변경의 빈도에 따라 시스템 구축의 난이도가 결정
검색 빈도 | 변경 빈도 | 구축 난이도 | 특징 |
적다 | 적다 | 1단계 | 검색이 많지 않아 DB 구축 필요성 저하 보존가치 있는 경우에만 구축 필요 |
많다 | 적다 | 2단계 | 사용자 수가 보통일 경우 검색은 많지만 데이터의 변경이 적음 |
적다 | 많다 | 3단계 | 예약 변경/취소 등 데이터 변경은 많지만 검색이 적다 실시간 검색 및 변경이 중요한 데이터베이스 |
많다 | 많다 | 4단계 | 사용자 수가 많은 경우 검색도 많고 거래로 인한 변경도 많음 |
(2) 데이터베이스의 특징
- 실시간 접근성 (real time accessibility)
- 계속적인 변화 (continuous change)
- 동시 공유 (concurrent sharing)
- 병행을 위한 [동시성 제어] 방법 - 트랜잭션과 락 그리고 접근제어
- 내용에 따른 참조 (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 |