2021. 10. 9. 21:50ㆍ정 보 처 리 기 사 공 부/실 기
● 트랜잭션의 개념
인가받지 않은 사용자로부터 데이터를 보장하기 위해 DBMS가 가져야 하는 특성이자, 데이터베이스 시스템에서 하나의 논리적 기능을 정상적으로 수행하기 위한 작업의 기본 단위이다.
● 트랜잭션의 특성
특성 | 설명 | 주요기법 |
원자성 (Atomicity) |
· 분해가 불가능한 작업의 최소단위 · 연산 전체가 성공 또는 실패 · 하나라도 실패할 경우 전체가 취소되어야하는 특성 |
· Commit/Rollback · 회복성 보장 |
일관성 (Consistency) |
· 트랜잭션이 실행 성공 후 항상 일관된 데이터베이스 상태를 보존해야하는 특성 | · 무결성 제약조건 · 동시성 제어 |
격리성 (Isolation) |
· 트랜잭션 실행 중 생성하는 연산의 중간 결과를 다른 트랜잭션이 접근 불가한 특성 | · Read Uncommitted · Read Committed · Repeatable read · Serializable |
영속성 (Durability) |
· 성공이 완료된 트랜잭션의 결과는 영속적으로 데이터베이스에 저장하는 특성 | · 회복기법 |
● 트랜잭션 제어
트랜잭션 제어언어는 TCL(Transaction Control Language)이라고 하며 트랜잭션의 결과를 허용하거나 취소하는 목적으로 사용되는 언어를 지칭한다.
명령어 | 핵심 | 설명 |
커밋(COMMIT) | 트랜잭션 확정 | 트랜잭션을 메모리에 영구적으로 저장하는 명령어 |
롤백(ROLLBACK) | 트랜잭션 취소 | 트랜잭션 내역을 저장 무효화시키는 명령어 |
체크포인트(CHECKPOINT) | 저장 시기 설정 | ROLLBACK을 위한 시점을 지정하는 명령어 |
● 병행 제어(일관성 주요 기법)의 개념
병행 제어는 다수 사용자 환경에서 여러 트랜잭션을 수행할 때, 데이터베이스 일관성 유지를 위해 상호작용을 제어하는 기법이다.
● 병행 제어의 목적
· 데이터베이스의 공유를 최대화한다.
· 시스템의 활용도를 최대화한다.
· 데이터베이스의 일관성을 유지한다.
· 사용자에 대한 응답시간을 최소화한다.
● 병행 제어 미보장 시 문제점
문제점 | 설명 |
갱신 손실 (Lost Update) |
먼저 실행된 트랜잭션의 결과를 나중에 실행된 트랜잭션이 덮어쓸 때 발생하는 오류 |
현황 파악오류 (Dirty Read) |
트랜잭션의 중간 수행 결과를 다른 트랜잭션이 참조하여 발생하는 오류 |
모순성 (Inconsistency) |
두 트랜잭션이 동시에 실행되어 데이터베이스의 일관성이 결여되는 오류 |
연쇄복귀 (Cascading Rollback) |
복수의 트랜잭션이 데이터 공유 시 특정 트랜잭션이 처리를 취소할 경우 트랜잭션이 처리한 곳의 부분을 취소하지 못하는 오류 |
● 병행 제어 기법의 종류
기법 | 설명 |
로킹 (Locking) |
· 같은 자원을 액세스하는 다중 트랜잭션 환경에서 DB의 일관성과 무결성을 유지하기 위해 트랜잭션의 순차적 진행을 보장하는 직렬화 기법 · 데이터베이스, 파일, 레코드 등은 로킹 단위가 될 수 있음 · 로킹 단위가 작아지면 데이터베이스 공유도가 증가 · 로킹 단위가 작아지면 로킹 오버헤드가 증가 · 한꺼번에 로킹할 수 있는 객체의 크기를 로킹 단위라고 함 |
낙관적 검증 | · 트랜잭션이 어떠한 검증도 수행하지 않고 일단 트랜잭션을 수행하고 트랜잭션 종료 시 검증을 수행하여 데이터베이스에 반영하는 기법 |
타임 스탬프 순서 (Time Stamp Ordering) |
· 트랜잭션과 트랜잭션이 읽거나 갱신한 데이터에 대해 트랜잭션이 실행을 시작하기 전에 타임 스탬프를 부여하여 부여된 시간에 따라 트랜잭션 작업을 수행하는 기법 |
다중버전 동시성 제어 (MVCC; Multi Version Concurrency Control) |
· 트랜잭션의 타임스탬프와 접근하려는 데이터의 타임스탬프를 비교하여 직렬가능성이 보장되는 적절한 버전을 선택하여 접근하도록 하는 기법 |
● 데이터베이스 고립화 수준(격리성 주요 기법) 개념
고립화 수준은 다른 트랜잭션이 현재의 데이터에 대한 무결성을 해치지 않기 위해 잠금을 설정하는 정도이다.
● 고립화 수준 종류
수준 | 설명 |
Read Uncommitted | · 한 트랜잭션에서 연산(갱신) 중인(아직 커밋되지 않은) 데이터를 다른 트랜잭션이 읽는 것을 허용하는 수준 · 연산(갱신) 중이 데이터에 대한 연산은 불허 |
Read Committed | · 한 트랜잭션에서 연산(갱신)을 수행할 때, 연산이 완료될 때까지 연산 대상 데이터에 대한 읽기를 제한하는 수준 · 연산이 완료되어 커밋된 데이터는 다른 트랜잭션이 읽는 것을 허용 |
Repeatable Read | · 선행 트랜잭션이 특정 데이터를 읽을 때, 트랜잭션 종료 시까지 해당 데이터에 대한 갱신·삭제를 제한하는 수준 |
Serializable Read | · 선행 트랜잭션이 특정 데이터 영역을 순차적으로 읽을 때, 해당 데이터 영역 전체에 대한 접근 제한하는 수준 |
● 회복 기법(영속성 주요 기법) 개념
회복 기법은 트랜잭션을 수행하는 도중 장애로 인해 손상된 데이터베이스를 손상되기 이전의 정상적인 상태로 복구시키는 작업이다.
● 회복 기법 종류
기법 | 설명 |
로그 기반 회복 기법 | · 지연 갱신 회복 기법과 즉각 갱신 회복 기법이 있음 · 지연 갱신 회복 기법 : 트랜잭션이 완료되기 전까지 데이터베이스에 기록하지 않는 기법 · 즉각 갱신 회복 기법 : 트랜잭션 수행 중 갱신 결과를 바로 DB에 반영하는 기법 |
체크 포인트 회복 기법 (Checkpoint Recovery) |
· 장애 발생 시 검사점 이후에 처리된 트랜잭션에 대해서만 장애 발생 이전의 상태로 복원시키는 회복기법 |
그림자 페이징 회복 기법 (Shadow Paging Recovery) |
· 데이터베이스 트랜잭션 수행 시 복제본을 생성하여 데이터베이스 장애 시 이를 이용해 복구하는 기법 |
● 데이터 정의어(DDL; Data Definition Language) 개념
데이터 정의어는 데이터를 정의하는 언어로서 '데이터를 담는 그릇을 정의하는 언어'이다. 테이블과 같은 데이터 구조를 정의하는 데 사용되는 명령어들로 특정 구조를 생성, 변경, 삭제, 이름을 바꾸는 데이터 구조와 관련된 명령어들을 데이터 정의어라고 부른다.
● DDL의 대상
DDL 대상 | 설명 | |
도메인 (Domain) |
· 하나의 속성이 가질 수 있는 원자값들의 집합 · 속성의 데이터 타입과 크기, 제약조건 등의 정보 |
|
스키마 (Schema) |
· 데이터베이스의 구조, 제약조건 등의 정보를 담고 있는 기본적인 구조 · 스키마는 외부/개념/내부 3계층으로 구성되어 있음 |
|
외부 스키마 (External Schema) |
· 사용자나 개발자의 관점에서 필요로 하는 데이터베이스의 논리적 구조 · 사용자 뷰를 나타냄 · 서브 스키마로 불림 |
|
개념 스키마 (Conceptual Schema) |
· 데이터베이스의 전체적인 논리적 구조 · 전체적인 뷰를 나타냄 · 개체 간의 관계, 제약조건, 접근 권한, 무결성, 보안에 대해 정의 |
|
내부 스키마 (Internal Schema) |
· 물리적 저장장치의 관점에서 보는 데이터베이스 구조 · 실제로 데이터베이스에 저장될 레코드의 형식을 정의하고 저장 데이터 항목의 표현 방법, 내부 레코드의 물리적 순서 등을 표현 |
|
테이블 (Table) |
· 데이터 저장 공간 | |
뷰 (View) |
· 하나 이상의 물리 테이블에서 유도되는 가상의 테이블 | |
인덱스 (Index) |
· 검색을 빠르게 하기 위한 데이터 구조 |
● 테이블(Table)의 개념
테이블은 데이터를 저장하는 항목인 필드(Field)들로 구성된 데이터의 집합체이다. 하나의 DB 내에 여러개의 테이블로 구성될 수 있고 릴레이션(Relation) 혹은 엔티티(Entity)라고도 불린다.
● 테이블 관련 용어
용어 | 설명 |
튜플(Tuple) / 행(Row) | · 테이블 내의 행을 의미하며 레코드(Record)라고도 함 · 튜플은 릴레이션(Relation)에서 같은 값을 가질 수 없음 |
애트리뷰트(Attribute) / 열(Column) | · 테이블 내의 열을 의미 · 열의 개수를 디그리(Degree)라고 함 |
식별자(Identifier) | · 여러 개의 집합체를 담고 있는 관계형 데이터베이스에서 각각의 구분 할 수 있는 논리적인 개념 |
카디널리티(Cardinality) | · 튜플(Tuple)의 개수 |
차수(Degree) | · 애트리뷰트(Attribute)의 개수 |
도메인(Domain) | · 하나의 애트리뷰트가 취할 수 있는 같은 타입의 원자값들의 집합 |
● 뷰(View)의 개념
뷰는 논리 테이블로서 사용자에게(생성 관점 아닌 사용 관점에서) 테이블과 동일하다. 뷰는 하나의 물리 테이블로부터 생성 가능하며, 다수의 테이블 또는 다른 뷰를 이용해 만들 수 있다. 뷰와 같은 결과를 만들기 위해 조인 기능을 활용할 수 있으나 뷰가 만들어져 있다면 사용자는 조인 없이 하나의 테이블을 대상으로 하는 단순한 질의어를 사용할 수 있다.
● 뷰의 특징
특징 | 설명 |
논리적 데이터 독립성 제공 | 데이터베이스에 영향을 주지 않고 애플리케이션이 원하는 형태로 데이터에 접근 가능 |
데이터 조작 연산 간소화 | 애플리케이션이 원하는 형태의 논리적 구조를 형성하여 데이터 조작 연산을 간소화 |
보안기능(접근제어) 제공 | 특정 필드만을 선택해 뷰를 생성할 경우 애플리케이션은 선택되지 않은 필드의 조회 및 접근 불가 |
뷰 변경 불가 | 뷰 정의는 ALTER 문을 이용하여 변경할 수 없음 |
● 뷰의 목적
뷰를 사용하는 주된 이유는 단순 질의어를 사용할 수 있기 때문이다. FROM 절에 있는 하나의 뷰를 통해 뷰를 구성하는 복수의 테이블을 대체하는 단순성에 그 의의가 있다. 테이블의 중요 데이터 일부만을 제공할 수 있는 장단점이 있다.
● 뷰의 장점과 단점
구분 | 장/단점 | 설명 |
장점 | 논리적 독립성 제공 | · 뷰는 논리 테이블(테이블의 구조가 변경되어도 뷰를 사용하는 응용 프로그램은 변경하지 않아도 됨) |
사용자 데이터 관리 용이 | · 복수 테이블에 존재하는 여러 종류의 데이터에 대해 단순한 질의어 사용이 가능 | |
데이터 보안의 용이 | · 중요 보안 데이터를 저장 중인 테이블에는 접근 불허 · 해당 테이블의 일부 정보만을 볼 수 있는 뷰에는 접근을 허용 · 보안 데이터에 대한 접근 제어 가능 |
|
단점 | 뷰 자체 인덱스 불가 | · 인덱스는 물리적으로 저장된 데이터를 대상으로 하기에 논리적 구성인 뷰 자체는 인덱스를 가지지 못함 |
뷰 정의 변경 불가 | · 뷰의 정의를 변경하려면 뷰를 삭제하고 재생성 | |
데이터 변경 제약 존재 | · 뷰의 내용에 대한 삽입, 삭제, 변경 제약이 있음 |
● 인덱스(Index)의 개념
인덱스는 데이터를 빠르게 찾을 수 있는 수단으로서 테이블에 대한 조회 속도를 높여 주는 자료 구조이다. 테이블의 특정 레코드 위치를 알려 주는 용도로 사용한다.
● 인덱스의 특징
· 기본 키(PK; Primary Key) 컬럼은 자동으로 인덱스가 생성된다.
· 연월일이나 이름을 기준으로 하는 인덱스는 자동으로 생성되지 않는다.
· 테이블의 컬럼에 인덱스가 없는 경우, 테이블의 전체 내용을 검색한다(테이블 전체 스캔; Table Full Scan).
· 인덱스가 생성되어 있을 때 데이터를 빠르게 찾을 수 있다(인덱스 범위 스캔; Index Range Scan).
· 조건절에 '='로 비교되는 컬럼을 대상으로 인덱스를 생성하면 검색 속도를 높일 수 있다.
● 인덱스 종류
유형 | 설명 |
순서 인덱스 (Ordered Index) |
· 데이터가 정렬된 순서로 생성되는 인덱스 · B-Tree 알고리즘 활용(오름차순/내림차순 지정 가능) |
해시 인덱스 (Hash Index) |
· 해시 함수에 의해 직접 데이터에 키 값으로 접근하는 인덱스 · 데이터 접근 비용이 균일, 튜플(Row) 양에 무관 |
비트맵 인덱스 (Bitmap Index) |
· 각 컬럼에 적은 개수 값이 저장된 경우 선택하는 인덱스 · 수정 변경이 적을 경우 유용(생년월일, 상품번호 등) |
함수기반 인덱스 (Functional Index) |
· 수식이나 함수를 적용하여 만든 인덱스 |
단일 인덱스 (Singled Index) |
· 하나의 컬럼으로만 구성한 인덱스 · 주 사용 컬럼이 하나일 경우 사용 |
결합 인덱스 (Concatenated Index) |
· 두 개 이상의 컬럼으로 구성한 인덱스 · WHERE 조건으로 사용하는 빈도가 높은 경우 사용 |
클러스터드 인덱스 (Clustered Index) |
· 기본 키(PK) 기준으로 레코드를 묶어서 저장하는 인덱스 · 저장 데이터의 물리적 순서에 따라 인덱스가 생성 · 특정 범위 검색 시 유리함 |
● 인덱스 스캔 방식
구분 | 설명 |
인덱스 범위 스캔 (Index Range Scan) |
인덱스 루트 블록에서 리프 블록까지 수직적으로 탐색한 후에 리프 블록을 필요한 범위만 스캔하는 방식 |
인덱스 전체 스캔 (Index Full Scan) |
수직적 탐색 없이 인덱스 리프 블록을 처음부터 끝까지 수평적으로 탐색하는 방식 |
인덱스 단일 스캔 (Index Unique Scan) |
수직적 탐색만으로 데이터를 찾는 스캔 방식 |
인덱스 생략 스캔 (Index Skip Scan) |
선두 컬럼이 조건 절에 빠졌어도 인덱스를 활용하는 스캔방식 |
● DDL 명령어
구분 | DDL 명령어 | 설명 |
생성 | CREATE | 데이터베이스 오브젝트를 생성하는 명령어 |
수정 | ALTER | 데이터베이스 오브젝트를 변경하는 명령어 |
삭제 | DROP | 데이터베이스 오브젝트를 삭제하는 명령어 |
TRUNCATE | 데이터베이스 오브젝트의 내용을 삭제하는 명령어 |
● 데이터 조작어(DML; Data Manipulation Language) 개념
데이터 조작어는 데이터베이스에 저장된 자료들을 입력, 수정, 삭제, 조회하는 언어이다.
● DML 유형
유형 | 동작 | 설명 |
SELECT | 조회 | 테이블 내 칼럼에 저장된 데이터를 조회 |
INSERT | 삽입 | 테이블 내 칼럼에 데이터를 추가 |
UPDATE | 갱신 | 테이블 내 칼럼에 저장된 데이터를 수정 |
DELETE | 삭제 | 테이블 내 칼럼에 저장된 데이터를 삭제 |
● 데이터 제어어(DCL; Data Control Language) 개념
데이터 제어어는 데이터베이스 관리자가 데이터 보안, 무결성 유지, 병행 제어, 회복을 위해 관리자(DBA)가 사용하는 제어용 언어이다.
● DCL 유형
유형 | 동작 | 설명 |
GRANT | 사용 권한 부여 | 관리자(DBA)가 사용자에게 데이터베이스에 대한 권한을 부여하는 명령어 |
REVOKE | 사용 권한 취소 | 관리자(DBA)가 사용자에게 부여했던 권한을 회수하기 위한 명령어 |
'정 보 처 리 기 사 공 부 > 실 기' 카테고리의 다른 글
정보 처리 기사 실기 7. SQL 응용 - 절차형 SQL 활용하기 (0) | 2021.10.10 |
---|---|
정보 처리 기사 실기 7. SQL 응용 - 응용 SQL 작성하기 (0) | 2021.10.10 |
정보 처리 기사 실기 5. 인터페이스 구현 - 인터페이스 구현 검증 (0) | 2021.10.04 |
정보 처리 기사 실기 5. 인터페이스 구현 - 인터페이스 기능 구현 (0) | 2021.10.04 |
정보 처리 기사 실기 5. 인터페이스 구현 - 인터페이스 설계 확인 (0) | 2021.10.04 |