네트워크를 개념적으로 나눈 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로 표기
•
왼쪽 외부 조인
◦
왼쪽 테이블의 모든 데이터를 결과 테이블에 조회
◦
조건을 만족하는 튜플이 왼쪽 테이블에만 존재. 오른쪽 테이블에는 존재하지 않아도 결과 테이블에 조회
•
오른쪽 외부 조인
◦
오른쪽 테이블의 모든 데이터를 결과 테이블에 조회
◦
조건을 만족하는 튜플이 오른쪽 테이블에만 있고, 왼쪽 테이블에는 존재하지 않아도 결과 테이블에 조회
•
완전 외부 조인
◦
양쪽 테이블에서 조건을 만족하지 않는 데이터가 있더라도 모두 포함
◦
교차 조인
▪
교차 조인은 각 테이블의 행과 다른 테이블의 모든 행을 결합해 결과 테이블을 생성. 모든 행이 결합
◦
셀프 조인
▪
한 테이블이 자기 자신과 조인 연산을 수행