1. 데이터베이스(Database)
1-1. 데이터베이스(Database)의 개념
- 여러 사람이 공유하고 사욜할 목적으로 통합 관리되는 정보의 집합이다.
- 논리적으로 연관된 하나 이상의 자료를 모아 그 내용을 구조화하여 검색 및 갱신의 효율성을 높임.
- 정보를 통합하여 중복 제거 및 구조화를 통한 자료의 집합체
1-2. 데이터베이스(Database)의 특징
- 실시간 접근성(Real-Time Accessibility)
- 지속적인 변화(Continuous Evolution)
- 동시 공유(Concurrent Sharing)
- 내용에 대한 참조(Content Reference)
- 데이터 독립성(Data Independence) : 물리적 / 논리적
2. 인덱스(Index)
2-1. 인덱스(Index)란?
- 사용자가 임의적으로 생성하고, 변경하고, 삭제할 수 있는 정보의 검색 속도를 향상시키는 물리적인 자료 구조이다.
- 일반적으로 논리적 개념의 키(Key)라고 생각하여 접근하면 안된다.
- 예를 들어 목차 또는 색인과 같은 개념이다.
2-2. 인덱스(Index)의 선정기준
- 최소 개수의 인덱스로 최대 개수의 유형을 처리하는 방향으로 선정해야함.
- 막연한 추측이나 특정한 액세스 경우만을 위한 인덱스를 함부로 생성해서는 안됨.
- 가능학 실측자료(액세스 형태 수집 / 분석, 액세스의 빈도, 처리범위의 크기, 분포도, 테이블의 크기, 액세스 유형 등)를 활용하여 종합적이고 전략적인 결정을 해야 한다.
3. 정규화(Normalization)
3-1. 정규화(Normalization)란?
- 데이터의 중복을 최소화하고 구조화하는 작업
- 무결성을 유지할 수 있으며, 용량을 줄일 수 있음.
3-2. 정규화(Normalization)의 종류
- 제 1 정규화 : 테이블의 각 칼럼이 원자값(Atomic Value)을 갖도록 분해한다.
예를 들어 한 칼럼에 데이터1, 데이터2가 있는것이 아니라 데이터1과 데이터2가 각각 따로 저장되어야 한다.
- 제 2 정규화 : 제 1 정규화를 진행한 테이블에 대해 기본키가 아닌 속성이 기본키에 완전 함수 종속이 되도록 분해한다.
완전 함수 종속 = 기본키의 부분집합이 다른 값을 결정하지 않는 것을 의미한다.
- 제 3 정규화 : 제 2 정규화를 진행한 테이블에 대해 기본키가 아닌 속성이 기본키에 직접 종속(비이행적 종속)이 되도록 분해한다.
이행적 종속 = A > B , B > C 라면 A > B > C
가 성립하고, 이를 A, B / B, C
로 분해하는 것이 제 3 정규형이다.
- BCNF 정규화 : 제 3 정규화를 진행한 테이블에 대해 모든 결정자가 후보키가 되도록 분해한다.
A | B | C라는 칼럼이 있는 1개의 테이블에서 A > C, C > B 관계가 생긴다.
A와 B는 기본키이자 C를 결정하고, C는 B를 결정한다. 여기서 C는 결정자이지만 후보키가 아니다.
이것을 A | C, C | B이라는 2개의 칼럼을 가진 2개의 테이블로 분해하는 것이 BCNF 정규화이다.
4. 트랜잭션(Transaction)
4-1. 트랜잭션(Transaction)이란?
- DBMS에서 데이터를 다루는 논리적인 작업의 단위
- 트랙잭션 내에서 SQL구문이 오류가 발생하면 그것이 1개 이상의 SQL구문이 존재하여도 모두 실행되지 않음.
4-2. 트랜잭션(Transaction)의 특성 - ACID
- 원자성(Atomicity) : 트랜잭션 내에 작업이 오류가 생긴다면 모두 실행이 안되고, 오류가 없다면 모두 실행된다.
- 일관성(Consistency) : 트랜잭션이 일어나기 전후의 상황은 일정해야 한다.
- 고립성(Isolation) : 트랜잭션이 수행 중일때 다른 트랜잭션의 간섭이 발생하면 안된다. 트랜잭션은 서로가 있는지도 모르게 작업이 진행되어야 한다.
- 지속성(Durability) : 트랜잭션이 정상적으로 완료되면, 데이터베이스에 데이터를 영구히 저장한다.
5. 교착상태(Deadlock)
5-1. 교착상태(Deadlock)란?
- 2개 이상의 트랙잭션이 특정 자원(테이블 또는 행)의 잠금(Lock)을 가진채 다른 트랜잭션이 소유한 특정자원의 잠금을 요구하면 아무리 기다려도 변경사항이 없는 상태
MySQL을 이용한 교착상태에 대한 예시
1. 트랜잭션 1이 테이블 A에 대한 잠금을 획득함.
2. 트랜잭션 2는 테이블 B에 대한 잠금을 획득함.
3. 트랜잭션 1, 2는 각각 잠금을 얻은 테이블에 대한 INSERT 명령을 실행하고, Commit를 하지 않음.
4. Commit을 하지도 않은 상태에서 트랜잭션 1은 테이블 B에 대한 잠금을, 트랜잭션 2는 테이블 A에 대한 잠금을 얻으려고 시도함.
5. 교착상태(Deadlock) 발생
5-2. 교착상태(Deadlock)의 빈도를 낮추는 방법
- 트랜잭션을 자주 Commit
- 정해진 순서로 자원(테이블 및 행)에 접근한다.
- 읽기 잠금(SELECT ~ FOR UPDATE)의 소유를 피한다.
6. NoSQL
6-1. NoSQL이란?
- 관계형 데이터 모델을 지양하고 대량의 분산된 데이터를 저장 및 조회 하는데 특화
- 스키마 없이 사용하거나 느슨한 스키마를 제공
- 대용량 웹 서비스를 위해 만들어짐.
NoSQL의 종류마다 쓰기/읽기 성능 특화, 2차 인덱스 지원, 오토 샤딩 지원 같은 고유한 특징을 가진다.
대량의 데이터를 빠르게 처리하기 위해 메모리에 임시 저장하고, 응답하는 등의 방법을 사용한다.
동적인 스케일 아웃을 지원하기도 하며, 가용성을 위하여 데이터 복제 등의 방법으로 관계형 데이터베이스가 제공하지 못하는 성능과 특징을 제공한다.
6-2. 데이터 저장 방식에 따른 분류
- Key-Value Model
- Document Model
- Column Model
- Graph Model
참조한 내용의 사이트 목록