5. 데이터베이스 설계
1) ER 다이어그램(ERD)
- 엔티티 관계를 표현
- 데이터베이스에 저장되는 엔티티의 구조를 모델링하는 것이 목적
- 데이터베이스로 표현할 대상을 시각적으로 설계하는 것을 의미
- 데이터베이스 확장, 수정 시 어떤 부분이 영향을 받는지 쉽게 파악 가능
- 유지보수나 개발자 간 원활한 소통에 도움을 줌
- 효율적인 데이터 관리에 이어 매우 중요한 과정임
- 표기 방식으로 피터 첸 표기법, IE 표기법 등이 있으며 현재는 IE 표기법을 사용함
2) 정규화
- 잠재적인 문제가 발생하지 않도록 테이블의 필드를 구성하고 필요할 경우 테이블을 나누는 작업
- 잠재적인 문제가 발생하지 않도록 잘 조직된 테이블이 되기 위해 지켜야 하는 규칙
- 제1정규형, 제2정규형, 제3정규형, 보이스/코드 정규형, 제4정규형, 제5 정규형이 있음
(1) 제1정규형
- 모든 속성이 원자 값을 가진다는 조건을 만족해야 함
- 필드 데이터가 더이상 쪼개질 수 없는 값을 가져야 함
(2) 제2정규형
- 제1정규형을 만족함과 동시에 기본 키가 아닌 모든 필드들이 모든 기본 키에 완전히 종속되어야 한다는 조건을 만족해야 함
- 보통 기본 키가 2개 이상의 필드로 구성될 때 고려됨
- 부분 함수 종속성이 없는 상태, 후보 키에 속하지 않는 모든 필드가 기본 키에 완전 함수 종속인 상태여야 함
- 부분 함수 종속성
- 기본 키가 아닌 필드가 기본 키의 일부에 종속되어 있는 경우
- 완전 함수 종속성
(3) 제3정규형
- 제2정규형을 만족함과 동시에 기본 키가 아닌 모든 필드가 기본 키에 이행적 종속성이 없어야 한다는 조건을 만족해야 함
- 기본 키가 아닌 나머지 모든 필드들이 간접적으로라도 종속되어서는 안되며, 기본 키가 아닌 나머지 모든 필드는 서로를 유추하거나 결정할 수 없어야 한다는 조건을 만족해야 함
(4) 보이스/코드 정규형(BCNF)
- 제3정규형을 만족하는 동시에 모든 결정자가 후보 키여야 한다는 조건을 만족해야 함
(5) 역정규화
- 검색의 속도를 높이기 위해 분할되어 있는 테이블을 하나로 합치는 작업
- 어느 정도의 데이터 중복과 삽입/수정/삭제 연산에서의 번거로움을 감수하고 가급적 하나의 테이블로 데이터를 관리
6. NoSQL
- Not Only SQL의 약자
- 레코드를 테이블 형태 이외 다양한 형태로 저장할 수 있음
- SQL 이외의 방법으로 저장된 데이터를 다룰 수 있음
- 높은 부하를 감당하거나 대용량 데이터를 다루는 분산 환경에서 주로 사용
- 확장성, 유연성, 가용성, 성능이 주요 이점
- 키-값 데이터베이스, 도큐먼트 데이터베이스, 그래프 데이터베이스, 칼럼 패밀리 데이터베이스가 있음
1) 키-값 데이터베이스
- 데이터베이스에 레코드를 키(필드)와 값의 쌍으로 저장하는 데이터베이스
- 가장 간단한 형태의 NoSQL 데이터베이스 유형
- 값으로 문자열, 리스트, 해시 테이블, 집합 등 다양한 자료구조를 사용할 수 있음
- Redis, Memcached 등이 대표적
- 레코드 구조가 단순해 메모리에 저장해 빠른 데이터베이스 접근 속도를 제공하는 경우 인메모리 데이터베이스라고 함
- 캐시나 세션 등 비교적 가벼운 정보를 저장하는 경우가 많고 보조 데이터베이스로써 사용되는 경우도 많음
2) 도큐먼트 데이터베이스
- 정형화되어 있지 않은 NoSQL 레코드의 단위를 통칭하는 도큐먼트 단위로 레코드를 저장하고 관리하는 데이터베이스
- JSON, XML과 같은 형식을 도큐먼트로 활용
- MongoDB가 대표적
- 도큐먼트의 키가 필드, 도큐먼트 데이터 하나하나가 행임
- 도큐먼트가 모여 컬렉션을 이루고 컬렉션이 모여 데이터베이스를 이룸
- 고정된 스키마가 없기 때문에 유연한 스키마를 가짐
3) 그래프 데이터베이스
- 그래프의 노드 형태로 데이터를 저장하는 데이터베이스
- neo4j가 대표적
- 방향 그래프를 표현하기 위해 활용
- 노드 간 연결 관계, 방향을 표현할 수 있어 SNS 친구 관계, 교통망과 같은 데이터 간의 관계성이 중요한 레코드를 저장하기 위해 사용
4) 칼럼 패밀리 데이터베이스
- RDBMS처럼 행과 열이 있고, 로우 키를 통해 특정 행을 식별하나 정규화나 조인을 사용하지 않고 스키마가 고정되어 있지 않은 데이터베이스
- 동적으로 변할 수 있는 열이 있으며, 거기에 행 데이터들이 대응되어 있는 형태
- Cassandra, HBase 등이 대표적
- 관련 있는 열들이 모여 칼럼 패밀리 단위를 형성하고, 칼럼 패밀리는 키스페이스라는 여러 칼럼 패밀리들을 포괄하는 최상위 단위를 형성함