1. 데이터베이스
- 관찰 가능한 대상의 수치, 기호, 문자를 데이터라고 한다
- 이러한 데이터들이 모이면 의미가 발생하고 정보로 표현한다
- 정보들을 모아서 보고 싶은 니즈가 발생
- 정보를 구조화 시켜 만든 데이터의 모음을 데이터베이스라고 한다
1-1) 정형데이터 비정형데이터 반정형데이터
- 정형 데이터(Structured Data)
- 데이터베이스의 정해진 규칙에 맞게 의미 파악히 쉬운 데이터들을 뜻함
- 값이 의미를 파악하기 쉽고 규칙적인 값이면 정형 데이터로 인식
- 비정형 데이터(Unstructured Data)
- 정형 데이터와 반대되는 단어
- 정해진 규칙없이 값의 의미를 쉽게 파악하기 힘듬
- 텍스트, 음성, 음악, 영상등의 데이터가 비정형 데이터의 범위에 속함
- 반정형 데이터(Semi-structured Data)
- 반정형 데이터의 반은 Semi를 말함 (약한 정형 데이터)
- HTML, XML과 같은 포맷이 반정형 데이터의 범위에 속함
- 일반적인 데이터 베이스가 아니지만 스키마를 가지고 있음
- 데이터를 Dump하여 JSON이나 XML형태의 포맷으로 변경하면 반정형 데이터가 됨
ex)
- JSON 형태로 되어 있는 글 내용 본문 - 반정형 데이터 + 비정형 데이터
- 데이터 베이스에 저장되어 있는 성별, 나이 - 정형 데이터
- 데이터 베이스에 저장되어 있는 글의 제목 - 비정형 데이터
데이터 베이스 구조화 방식
데이터베이스 구조화 > 원자성으로 구축 > 관계모델 > 관계형 데이터베이스(RDB)
관계형 데이터베이스(RDB) 설계
1. ERD (Entity-Relation Dragram: 개체 관계도)
- 하고자 하는 일의 데이터 간의 관계를 구성
- 추상화 수준이 높고 업무중심적이며 포괄적인 수준의 모델일을 수행
- 도형이 의미하는 바를 알고 화살표를 통해 관계를 표현
관계도 예시)

2. 스키마
- 스키마는 데이터베이스의 구조와 제약 조건에 관한 전반적인 명세를 기술한 메타데이터의 집합
- 데이터베이스를 구성하는 개체, 속성, 관계 및 데이터 조작 시 값들이 갖는 제약 조건 등을 정의
3. 무결성 제약 조건
- 개체(Entity) : 중복 값 및 null일 수 없음
- 참조(Relation) : 외래키는 참조가 가능해야 한다
- 도메인 : 속성은 원자적이어야 하며, 허용되지 않는 값이 존재하면 안된다
4. 정규화
- 무결성 제약 조건이 깨졌을 때 조건을 유지하기 위해 변경하는 행위
5. 인덱스
- 데이터베이스에서 테이블의 탐색 속도향상을 위한 자료구조
- 기본키 설정 > 클러스터 인덱스 (B+Tree)
클러스터 인덱스 예시)
6. 트랜잭션
- 논리적인 작업 단위 (모두 변경하거나, 모두 취소하거나)
- 성공은 Commit, 취소를 Rollback
7. 실시간 트랜잭션 처리 (OLTP)
- 동시적에 실행되는 트랜잭션이 작업을 성공적으로 마칠 수 있도록 실행 순서를 제어하는 기법
- 동시성 제어는 병행제어라고도 함
- 트랜잭션의 직렬화 수행 보장
- 동시성 제어 기법의 종류 : 락(Lock)킹(고립수준), 타임스템프, 적합성 검증
8. 고립수준 종류
-
READ uncommitted (LEVEL 0)
- 트랜잭션의 변경 내용이 Commit이나 Rollback여부에 상관없이
다른 트랜잭션의 값을 읽을 수 있다
- 업데이트 된 값을 다른 트랜잭션에서 읽을 수 있다
- 정합성 문제로 인해 사용하지 않는것이 일반적
-
READ committed (LEVEL 1)
- 트랜잭션 수행이 완료되고 Commit된 데이터만 다른 트랜잭션에서 READ하도록 허용
- 일반적으로 DBMS에서 설정
- Commit이 되기 전 Undo영역에 백업된 레코드에서 값을 가져오고
Commit이 끝난 후에 Select를 하면 바뀐 값을 가져온다
-
REPEATABLE READ (LEVEL 2)
- 특정 트랜잭션에서 읽고 있는 데이터는 다른 트랜잭션에서 수정/삭제가 불가능
- 삽입(INSERT)은 가능함
- 자신의 트랜잭션 번호(ID) 보다 낮은 트랜잭션 번호에서 변경된 것만 읽게 되고
자신의 트랜잭션 번호보다 높은 트랜잭션에서 변경된 것은 Undo 영역에 백업 된 레코드를 읽음
- Undo 영역에 백업된 레코드가 많아지면 성능이 떨어짐
-
SERIALIZABLE (LEVEL 3)
- 가장 단순하고 엄격한 격리
- 모든 동작이 직렬화
- 특정 트랜잭션에서 읽고 있는 데이터는 다른 트랜잭션에서 수정/삽입/삭제가 불가능
- 동시성이 떨어지고 성능이 하락하여 잘 쓰이지 않음
LEVEL이 낮을 수록 동시성은 좋으나 무결성 제약조건이 지켜지지 않음
참조
정형, 비정형, 반정형 데이터 : https://needjarvis.tistory.com/502
ERD : https://inpa.tistory.com/entry/DB-%F0%9F%93%9A-%EB%8D%B0%EC%9D%B4%ED%84%B0-%EB%AA%A8%EB%8D%B8%EB%A7%81-1N-%EA%B4%80%EA%B3%84-%F0%9F%93%88-ERD-%EB%8B%A4%EC%9D%B4%EC%96%B4%EA%B7%B8%EB%9E%A8
스키마 : https://coding-factory.tistory.com/216
클러스터 인덱스 : https://vaert.tistory.com/110
고립수준 : https://code-lab1.tistory.com/52