데이터베이스(Database)
- 데이터 저장소
- 데이터들을 논리적인 구조로 조직화하거나, 물리적인 공간에 구축
- 논리 데이터저장소: 데이터 및 데이터 간의 연관성, 제약조건 식별 등
- 물리 데이터저장소: 논리 데이터를 실제 저장장치에 저장함
- DBMS(DataBase Management System, 데이터베이스 관리 시스템)
- 필수 기능 3가지
- 정의(Definition)
- 조작(Manipulation)
- 제어(Control)
- 구성 요소: 도메인, 스키마, 테이블, 뷰, 인덱스
- 스키마(Schema)
- 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 것
- 개념 스키마: 데이터베이스의 전체적인 논리적 구조
- 내부 스키마: 물리적 저장장치 관점의 데이터베이스 구조, 실제 저장되는 레코드의 형식 등
- 외부 스키마: 사용자나 응용 프로그래머가 필요로 하는 데이터베이스의 논리적 구조 정의
데이터베이스 설계
- 데이터베이스 설계 고려사항 / 특징
- 설계 순서
- 요구사항 분석 > 개념적 설계 > 논리적 설계 > 물리적 설계 > 구현
- 개념적 설계(정보 모델링, 개념화)
- 현실 인식을 추상적 개념으로 표현하는 과정
- 개념 스키마 모델링, 트랜잭션 모델링, E-R 다이어그램
- 개체-관계(E-R)모델: 실제 데이터와 관계를 사람이 이해할 수 있는 형태로 표현하는 모델
- 개체(Entity), 관계(Relationship), 속성(Attribute)
- 논리적 설계(데이터 모델링)
- 컴퓨터가 이해할 수 있고 물리적으로 저장할 수 있도록 논리적 자료 구조로 변환시키는 과정
- 트랜잭션 인터페이스 설계, 정규화 수행
- 물리적 설계(데이터 구조화)
- 데이터베이스에 저장할 수 있도록 물리적 구조로 변환하는 과정
- 반 정규화, 테이블 정의서, 저장 레코드 양식, 접근 경로 등 설계
- 데이터베이스 구현
- 위에서 도출된 데이터베이스 스키마를 파일로 생성하는 과정
- DDL(데이터 정의어) 기술, 트랜잭션 작성
데이터 모델
- 데이터와 데이터 간 관계, 의미, 제약 조건 등을 기술하기 위한 개념적 도구들로 구성된 개념적 모형
- 구성 요소
- 개체: 개념이나 정보 단위 대상체
- 속성: 데이터베이스를 구성하는 가장 작은 논리적 단위
- 관계
- 종류
- 개념적 데이터 모델
- 논리적 데이터 모델
- 물리적 데이터 모델
- 표현 요소
- 구조(Structure): 개체 타입들 간의 관계로서 데이터 구조, 어떻게 나타낼 것인지 표현
- 연산(Operation): 실제 데이터를 처리하는 작업에 대한 명세
- 제약 조건(Constraint): 릴레이션의 특정 컬럼에 설정하는 제약, 개체 무결성과 참조 무결성 등 논리적인 제약 조건
관계형 데이터베이스(RDBMS)
- 무결성(Integrity)
- 데이터베이스에 저장된 데이터와 실제 값이 일치하는 정확성
- 무결성 제약 조건: 정확성을 보장하기 위해 부정확한 자료를 방지하는 제약 조건
- 무결성 종류
- 개체 무결성: 기본키는 null이나 중복값 가질 수 없음
- 참조 무결성: 외래키는 null이거나 참조의 기본키와 동일해야 함
- 도메인 무결성
- 사용자 정의 무결성
- NULL 무결성
- 고유 무결성
- 키 무결성
- 관계 무결성
- 관계대수
- 원하는 정보를 얻기 위해 기술하는 절차적인 언어
- 일반 집합 연산자: 합집합(∪, 중복제거) 교집합(∩) 차집합(-) 카디션프로덕트(X)
- 순수 관계 연산자: 셀렉트(σ, 조건만족) 프로젝트(π, 속성만족) 조인(▷◁, 공통속성) 디비전(÷, A의 모든 튜플과 관련있는 B 튜플)
- 관계해석
- 관계 데이터의 연산을 표현하는 방법, 비절차적 특성, 계산 수식 사용
- 수학의 Predicate Calculus(술어 해석) 기반
- 이상 현상
- 데이터 종속, 중복성으로 인해 릴레이션을 조작할 때 발생하는 문제 현상
- 종류: 삽입, 삭제, 갱신 이상
- DDL 명령어(CADT)
- DROP TABEL ~ CASCADE(연쇄삭제), RESTRICT(참조중이면 유지), TRUNCATE(모든 데이터 삭제)
- 집합 연산자
- UNION(중복제외), UNION ALL(중복포함), INTERSECT(공통값만), MINUS(첫 쿼리에만 있는 값)
정규화
- 무손실 분해를 바탕으로 데이터 중복성을 제거하여 이상 현상 방지, 일관성과 정확성 유지
- 정규화 단계(원부이결다조)
- 1정규형(1NF): 원자값으로 구성
- 2정규형(2NF): 부분함수 종속 관계 제거(완전 함수적 종속 관계)
- 3정규형(3NF): 이행함수 종속 제거(A->B, B->C, A->C)
- 보이스-코드 정규형(BCNF): 모든 결정자가 후보 키가 되도록 하여 결정자 함수 종속 제거
- 4정규형(4NF): 다치(다중 값) 종속 제거
- 5정규형(5NF): 조인 종속 제거
- 반정규화(비정규화, 역정규화)
- 정규화 데이터 모델을 다시 중복, 통합, 분리하는 모델링 기법
트랜잭션(Transaction)
- 하나의 논리적 기능을 수행하기 위한 작업의 단위
- 트랜잭션의 특성(ACID)
- 원자성(Atomicity): 작업의 최소 단위, 전체 반영되거나 안되거나, 부분적으로 반영되거나 실패하지 않음 보장
- 일관성(Consistency): 항상 일관된 데이터베이스 상태를 보존, 무결성 제약조건, 동시성제어
- 독립성/격리성(Isolation): 트랜잭션 실행 중에 다른 트랜잭션이 접근 불가
- 영속성(Durability): 트랜잭션 결과는 영구적으로 반영
- 병행 제어 기법: 데이터 연산을 모두 마칠 때까지 상호배제
- 로킹(잠금, Locking)
- 낙관적 검증/병행 제어(Validation)
- 타임 스탬프 기법(Time Stamp)
- 타임 스탬프에 부여된 시간에 따라 트랜잭션 수행
- 다중 병행 제어/다중버전 동시성 제어(MVCC)
클러스터링(Clustering)
- 두 대 이상의 서버를 하나의 서버처럼 운영하는 기술
- 공유 스토리지(NAS, Network Attached Storage)
- 데이터 저장장치와 서버를 네트워크로 연결하여 파일 및 데이터를 연결함
- 다수의 사용자와 서버가 데이터 공유 가능
- 고가용성(HA, High Availability)
- 시스템을 오랜 시간동안 정상적으로 운영할 수 있도록 함
- 비즈니스 연속성 계획(BCP, Business Continuity Plan)
- RTO(Recovery Time Objective, 목표 복구 시간)
- RPO(Recovery Point Objective, 목표 복구 시점)
- 중단시점으로부터 데이터를 복구할 때까지 손실 허용 시점, 마지막 백업 지점
- Mirror > Hot > Warm > Cold site
데이터베이스 보안
- 암호화(Encryption)
- 데이터를 보낼 때 보안을 위해 암호문으로 변환하는 것 (<=> 복호화, Decryption)
- 암호화 기법
- 접근통제
- 데이터가 저장된 객체와 사용하는 주체 사이의 정보 흐름을 제한하는 것
- 접근통제 기술
- 임의 접근통제(DAC, Discretionary Access Control)
- 신원(Identity)에 따라 접근 권한 부여, 데이터 소유자가 접근통제 권한을 (임의)지정하고 제어함
- 강제 접근통제(MAC, Mandatory Access Control)
- 허용 보안 등급을 비교하여 접근 권한 부여, 시스템(관리자)이 통제함
- 역할 기반 접근통제(RBAC, Role Based Access Control)
- 사용자의 역할에 따라 접근 권한 부여, 중앙관리자가 통제함
데이터베이스 백업
- 로그 파일
- 데이터의 처리 내용 등 상태 변화를 시간의 흐름에 따라 모두 기록한 파일
- 데이터베이스 복구 알고리즘
- NO-UNDO / REDO : 비동기적 갱신
- UNDO / NO-REDO : 동기적 갱신
- UNDO / REDO : 동기/비동기적 갱신
- NO-UNDO / NO-REDO : 동기적 갱신
스토리지(Storage)
- DAS(Direct Attached Storage)
- 서버와 저장장치를 전용 케이블로 직접 연결하는 방식(ex. 외장하드)
- NAS(Network Attached Storage)
- 서버와 저장장치를 네트워크를 통해 연결하는 방식
- SAN(Storage Area Network)
- 서버와 저장장치를 연결하는 전용 네트워크를 별도로 구성하는 방식
- 파이버 채널(Fibre Channel) 스위치 이용
자료 구조
- 선형 구조(Linear)
- 배열(Array)
- 크기와 타입(Type)이 동일한 자료들을 순서대로 나열한 자료의 집합, 정적 구조
- 선형 리스트(Linear List)
- 배열과 같이 연속되는 기억장소에 저장되는 리스트
- 가장 간편한 자료 구조, 접근 구조 빠름
- 자료 삽입/삭제 시 자료 이동해야 함
- 연결 리스트(Linked List)
- 노드 포인터 부분을 서로 연결시킨 리스트
- 노드 삽입/삭제가 편리함
- 포인터가 추가되어 저장 공간 필요, 접근 속도 느림
- 스택(Stack)
- 한 쪽 끝으로만 삽입, 삭제하는 자료 구조, 후입선출(LIFO)
- 큐(Queue)
- 한 쪽에서는 삽입, 반대쪽에서는 삭제하는 자료 구조, 선입선출(FIFO)
- 데크(Deque)
- 비선형 구조(Non-Linear)
- 트리(Tree)
- 노드와 간선으로 이루어진 나무 형태의 그래프
- 차수(Degree) : 각 노드에서 나오는 자식 노드(가지) 수
- 단말 노드(Terminal Node, Leaf Node) : 차수가 0인, 자식이 없는 노드
- 깊이(Depth) : 트리에서 노드가 가질 수 있는 최대 레벨
- 이진 트리 : 차수가 2 이하인 노드들로 구성된 트리
- 트리 운행법 : 각 노드를 찾아가는 방법
- Preorder: 루트가 앞, ROOT>LEFT>RIGHT
- Inorder: 루트가 가운데, LEFT>ROOT>RIGHT
- Postorder: 루트가 뒤, LEFT>RIGHT>ROOT
- A -> B, C 일 때 Preorder(A>B>C), Inorder(B>A>C), Postorder(B>C>A)
- 방향 그래프(Graph)
- 정점(Vertex)과 간선(Edge)의 두 집합으로 이루어진 자료 구조
- 방향 그래프 최대 간선 수: n(n-1)
- 무방향 그래프: n(n-1)/2
- 파일 검색 접근 기법
- 순차, 인덱스(색인)-키 값, 포인터 구조, 해싱
정렬(Sort)
- 삽입 정렬
- 하나의 레코드를 순서에 맞게 삽입시켜 정렬 방식
- 선택 정렬
- 최소값을 찾아 첫 번째에 놓고, 나머지 중에서 다시 최소값을 찾는 정렬 방식
- 버블 정렬
- 인접한 2개의 값을 비교하여 서로 교환하는 정렬 방식