Search

데이터베이스

네트워크를 개념적으로 나눈 OSI 7계층
실제 인터넷 통신에 사용되는 TCP/IP 4계층

3.1 데이터베이스의 종류

3.1.1 데이터베이스란

사용자나 프로그램에서 사용하기 위해 저장 및 관리하는 데이터 집합
목적에 맞춰 대용량 데이터를 저장하고 관리
실시간 접근
언제든지 접근
동시 공유
여러 사용자가 데이터베이스에 접근
지속적 변화
갱신,삽입,삭제 등을 통해 계속 변화
내용 기반 참고
데이터의 값을 이용해 데이터에 접근
데이터베이스 요소
개체(엔티티)
데이터로 표현하려는 대상. 하나 이상의 속상으로 구성
속성
개체의 특성과 상태. 데이터베이스를 구성하는 가장 작은 논리적 단위
관계
개체 간에 어떤 관련이 있는지를 나타냄
데이터베이스의 전체적인 구조와 제약 조건을 명시하기 위해 스키마를 사용
스키마
데이터의 구조와 표현 방식, 제약 조건을 정의하는 역할
내부 스키마 : 사용자 측면에서 데이터베이스의 전체 구조
외부 스키마 : 물리적 저장장치 측면에서 데이터베이스의 구조
개념 스키마 : 데이터베이스의 전체 구조

3.1.2 관계형 데이터베이스

데이터가 2차원 테이블에 저장되며 데이터의 구조와 데이터 간 종속성 등을 알 수 있다.
스키마를 바탕으로 데이터베이스의 구조를 정의
스키마는 개체-관계 다이어그램 또는 문자열로 표현
관계형 데이터베이스에서 데이터의 개념적 모델을 릴레이션
릴레이션을 실제로 구현한 개체를 테이블
관계형 데이터베이스는 테이블을 이용해 데이터의 종속성과 관계를 나타낸다.
테이블은 키와 값으로 이루어진 2차원 형태, 행과 열
행은 데이터 묶음
튜플 또는 레코드
열은 이름과 타입을 가진 데이터의 속성으로 필드

3.1.3 NoSQL 데이터베이스

비관계형 데이터베이스로 보다 유연한 형태의 데이터베이스
대용량 데이터를 조회할 때 속도 면에서 유리
수평적 확장성이 좋아 서버를 추가해 데이터베이스를 확장하기도 쉽다
데이터 확장과 대용량 데이터 조회가 빈번히 일어나는 경우에 사용

3.2 관계형 데이터베이스

3.2.1 키

데이터베이스에서 튜플을 구분하기 위한 속성 또는 속성의 집합
유일성
하나의 키 값으로 튜플을 식별
최소성
튜플을 식별하는데 필요한 속성
슈퍼 키
튜플을 식별해서 유일성 만족, 후보 키와 달리 최소성을 만족하지 않음
후보 키
튜플을 식별해서 유일성과 필요한 속성만으로 구성되는 최소성을 만족
기본 키
후보 키 중에서 메인이 되는 키
NULL값을 가지면 안된다
대체 키
후보 키 중에서 기본 키를 제외한 키
외래 키
다른 테이블의 기본 키를 참조

3.2.2 무결성

데이터베이스에 저장된 데이터와 실제 데이터가 일치하는 정확성, 데이터가 일정하게 유지되는 일관성
개체 무결성
모든 테이블이 기본 키
기본 키의 값은 NULL이 될 수 없으며 중복되지 않고 고유한 값
도메인 무결성
테이블의 속성 값은 도메인에 속해야함
도메인은 속성이 가질 수 있는 값의 집합
참조 무결성
외래 키의 값은 참조하는 테이블의 기본 키 값과 동일하거나 NULL

3.2.3 인덱스

데이터베이스에서 튜플의 검색 성능을 높이기 위해 속성 값과 튜플이 저장된 주소를 저장하는 것
키-값 형태
속성 값-튜플 주소 를 인덱스 테이블에 저장
속성 값을 기준으로 정렬 상태를 유지
장점
데이터가 정렬되어 있어서 검색 속도가 빠름
단점
인덱스 테이블을 저장하기 위한 추가 공간이 필요
정렬된 상태를 유지하기 위해 데이터를 추가, 수정, 삭제하는 경우에는 속도가 느림
해시 테이블 인덱스
속성 값으로 해시 값을 계산해 인덱싱
빼빼로의 빼로 시작하는 속성값의 인덱스를 찾는것은 불가능. 빼빼로의 인덱스를 검색하는것만 가능
빠르지만 자주사용하지 않음
B+-트리
B+ 트리 인덱스 또는 B-트리 인덱스 방식
B+ 트리는 단말 노드에만 데이터를 저장하고 단말 노드 간에는 연결 리스트로 연결되는 방식
B- 트리는 모든 노드에 데이터가 저장되는 방식
데이터의 삽입, 갱신, 삭제 등에 드는 작업 비용을 줄일 수 있다
속성 범위로 검색할 수 있어서 빼로 시작하는 속성 값의 인덱스를 찾는 것이 가능

3.2.4 ORM

객체와 관계형 데이터베이스를 매핑하는 도구
데이터베이스를 프로그래밍 언너의 객체 관점으로 바라 볼 수 있음
SQL 문을 사용하지 않고 객체 지향적 코드를 작성할 수 있음

3.3 트랜잭션

3.3.1 트랜잭션

데이터베이스의 상태를 바꾸기 위해 수행하는 작업의 단위 또는 일련의 연산
트랜잭션 ACID
원자성
완전히 반영되거나 아예 실행되지 않아야 한다
일관성
수행이 완료된 데이터베이스는 일관성
독립성
수행 중인 트랜잭션에 다른 트랜잭션이 끼어들 수 없다
영속성
완료한 트랜잭션의 결과가 데이터베이스에 영구적으로 반영
트랜잭션을 제어하기 위해 TCL
COMMIT
트랜잭션이 정상적으로 종료되어 데이터베이스에 변경 사항을 반영
ROLLBACK
트랜젹션이 비정상적으로 종료되어 트랜잭션이 수행항 변경 사항을 취소하고 이전 상태로 돌림
SAVEPOINT
트랜잭션에서 특정 지점.
ROLLBACK과 함께 사용하면 해당 지점까지 되돌릴 수 있다.
트랜잭션 격리 수준
여러 트랜잭션이 서로 영향을 미치지 않고 실행할 수 있는 단계
Read Uncommited
다른 트랜잭션이 데이터를 조회할 수 있다. 동시성이 높고 데이터의 일광성을 유지하기 어렵다
Read Commited
COMMIT된 데이터만 다른 트랜잭션이 조회
Repeated Read
읽은 데이터를 다른 트랜잭션이 갱신하거나 삭제할 수 없다
Serializable
읽은 데이터를 다른 트랜잭션이 갱신, 삭제, 삽입 할 수 없다.

3.3.2 락

트랜잭션이 처리되는 순서를 보장하기 위한 방법
공유 락 : 읽기 락
데이터를 읽는 연산. 데이터에 여러 공유 락이 동시에 접근 할 수 있다
베타 락 : 쓰기 락
데이터에 하나의 베타 락이 접근 중일 때 다른 베타 락이 접글할 수 없다.
프로세스 처럼 교착 상태에 빠질 수 있다.
한 트랜잭션이 자신이 처리 중인 데이터에 대해 락을 가진 상태에서 다른 트랜잭션이 처리 중인 데이터에 대해 락을 요청해 무한 대기 상태에 빠진 현상
예방 기법
트랜잭션 처리가 시작 되기 전에 필요한 데이터에 대해 미리 락을 얻는 방식
회피 기법
트랜잭션이 들어온 순서에 따라 교착 상태를 회피하는 방식
wait-die
wound-wait

3.3.3 이상

트랜잭션을 처리하는 중에 속성 간 종속이나 데이터 중복으로 발생하는 문제
삽입 이상
갱신 이상
삭제 이상

3.3.4 정규화

데이터베이스의 이상 현상을 해결하기 위해 테이블을 분해하는 것
분해하느라 연산 시간이 증가한다는 단점
상황에 따라 적절하게 정규화를 진행
정규화한 결과를 정규형
제1정규형
테이블의 모든 속성 값이 더 이상 분해될 수 없는 값, 즉 원자 값으로 구성
제2정규형
제1정규형에 속하는 테이블에서 부분적 함수 종속을 제거해 완전 함수 종속을 만족
함수 종속성은 테이블에서 속성 간 종속 관계
완전 함수 종속은 A속성이 B속성을 결정, A속성의 진부분집합이 B속성을 결정하지 않는 경우
부분적 함수 종속은 기본 키의 부분집합이 결정자가 될 수 있음
제3정규형
제2정규형에 속하는 테이블에서 이행적 종속이 없어야 한다
A 속성이 B 속성을 결정하고 B속성이 C속성을 결정할 때 A속성이 C속성을 결정
A속성이 C속성을 결정하는 이행적 종속을 제거
A속성이 B속성을 결정하는 테이블과 B속성이 C속성을 결정하는 테이블로 분해
보이스-코드 정규형
제3정규형에 속하는 테이블의 모든 결정자가 후보 키가 되도록 테이블을 분해
제4정규형
제3정규형에 속하면서 다치 종속을 제거
다치 종속은 테이블에서 한 속성이 여러 속성의 값을 결정
제5정규형
제4정규형에 속하면서 조인 종속이 없어야 한다

3.4 조인

3.4.1 조인이란

여러 테이블을 합쳐 원하는 데이터를 얻는 작업

3.4.2 내부 조인

2개 이상의 테이블에서 공통 속성을 가진 데이터를 검색하기 위한 연산

3.4.3 외부 조인

조인 조건에 해당하는 속성 값이 없는 데이터까지 모두 조회하는 연산
존재하지 않는 데이터에 대해서 NULL로 표기
왼쪽 외부 조인
왼쪽 테이블의 모든 데이터를 결과 테이블에 조회
조건을 만족하는 튜플이 왼쪽 테이블에만 존재. 오른쪽 테이블에는 존재하지 않아도 결과 테이블에 조회
오른쪽 외부 조인
오른쪽 테이블의 모든 데이터를 결과 테이블에 조회
조건을 만족하는 튜플이 오른쪽 테이블에만 있고, 왼쪽 테이블에는 존재하지 않아도 결과 테이블에 조회
완전 외부 조인
양쪽 테이블에서 조건을 만족하지 않는 데이터가 있더라도 모두 포함
교차 조인
교차 조인은 각 테이블의 행과 다른 테이블의 모든 행을 결합해 결과 테이블을 생성. 모든 행이 결합
셀프 조인
한 테이블이 자기 자신과 조인 연산을 수행

참고