데이터베이스(DB)
정의
- 일정한 규칙, 혹은 규약을 통해 구조화되어 저장되는 데이터의 모음
특징
- 실시간 접근성(Real-Time Accessibility) : 질의(조회)에 대하여 실시간 처리에 의한 응답이 가능해야합니다.
- 지속적인 변화(Continuous Evloution) : 데이터베이스의 상태는 동적이며, 항상 최신의 데이터를 유지해야 합니다.
- 동시 공용(Concurrent Sharing) : 데이터베이스는 다수의 사용자가 동시에 같은 내용의 데이터를 이용할 수 있어야 합니다.
- 내용에 의한 참조(Content Reference) : 데이터를 참조할 때 데이터 레코드의 주소나 위치에 의해서가 아니라 사용자가 요구하는 데이터 내용으로 찾습니다.
DBMS(DatabaseManagement System)
- 데이터베이스를 제어, 관리하는 통합 시스템
- 쿼리언어를 통해 삽입 삭제 수정 조회 수행
데이터베이스 언어
- DDL (정의어 : Data Definition Language) : 데이터베이스 구조를 정의, 수정, 삭제하는 언어 ( alter, create, drop )
- DML (조작어 : Data Manipulation Language) : 데이터베이스내의 자료 검색, 삽입, 갱신, 삭제를 위한 언어 ( select, insert, update, delete )
- DCL (제어어 : Data Control Language) : 데이터에 대해 무결성 유지, 병행 수행 제어, 보호와 관리를 위한 언어 ( commit, rollback, grant, revoke )
무결성 : 데이터의 정확성과 일관성을 유지하고 보증하는 것
엔티티
- 사람, 장소 , 물건, 사건, 개념 등 여러 개의 속성을 지닌 명사
릴레이션
- 데이터베이스에서 정보를 구분하여 저장하는 기본 단위
- RDB - 테이블
- NoSQL - 컬렉션
- Relation의 제약 조건
- table의 cell은 단일값을 갖는다.
- 어떤 2개의 row도 동일하지 않는다.
속성(Attribute)
- 릴레이션에서 관리하는 구체적이며 고유한 이름을 갖는 정보
도메인(domain)
- 릴레이션에 포함되는 각각의 속성들이 가질 수 있는 값의 집합
필드 == Column(열) == 속성
- 타입
- 시간
- DATE
- DATETIME: 날짜 및 시간 부분을 모두 포함하는 값 8바이트
- TIMESTAMP : 날짜 및 시간 부분을 모두 포함하는 값 4바이트
- 문자
- CHAR : 테이블을 생성할 때 선언한 길이로 고정됨
- VARCHAR: 가변길이 문자열
- TEXT : 큰 문자열 저장
- BLOB: 이미지, 동영상 등 큰 데이터 저장
- 문자열 열거
- ENUM : 단일선택만 가능
- SET : 여러개의 데이터를 선택 가능, 비트단위 연산 가능
레코드 == Row(행) == 튜플
트리거(Trigger)
- 특정 테이블에 대한 이벤트에 반응해 INSERT, DELETE, UPDATE 같은 DML 문이 수행되었을 때, 데이터베이스에서 자동으로 동작하도록 작성된 프로그램
DB Connection Pool
- 웹 컨테이너(WAS)가 실행되면서 DB와 미리 연결해놓은 객체들을 Pool에 저장해두었다가 클라이언트 요청이 오면 connection을 빌려주고, 처리가 끝나면 다시 connection을 반납받아 pool에 저장하는 방식
NOSQL vs RDB
RDB
- 관계형 데이터베이스(RDB)는 사전에 엄격하게 정의된 DB schema를 요구하는 table 기반 데이터 구조를 갖습니다.
- RDB는 엄격한 schema로 인해 데이터 중복이 없기 때문에 데이터 update가 많을 때 유리합니다.
NOSQL
- NoSQL(비관계형 데이터베이스)은 table 형식이 아닌 비정형 데이터를 저장할 수 있도록 지원합니다.
- NoSQL의 경우 데이터 중복으로 인해 데이터 update 시 모든 컬렉션에서 수정이 필요하기 때문에 update가 적고 조회가 많을 때 유리합니다
| RDB (SQL) | NoSQL |
---|
데이터 저장 모델 | table | json document / key-value / 그래프 등 |
개발 목적 | 데이터 중복 감소 | 애자일 / 확장가능성 / 유연성 |
예시 | Oracle, MySQL, PostgreSQL 등 | MongoDB, DynamoDB 등 |
Schema | 엄격한 데이터 구조 | 유연한 데이터 구조 |
장점 | - 명확한 데이터구조 보장 | |
- 데이터 중복 없이 한 번만 저장 (무결성)
update 용이 | - 유연하고 자유로운 데이터 구조
- 새로운 필드 추가 자유로움
- 데이터 분산이 용이하여 수평적 확장(scale out) 하기 쉽다. |
| 단점 | - 시스템이 커지면 Join문이 많은 복잡한 query가 필요
- 수평적 확장이 까다로워 비용이 큰 수직적 확장(Scale up)이 주로 사용됨.
- 데이터 구조가 유연하지 못함 | - 데이터 중복 발생 가능, 데이터 변경 시 모든 컬렉션에서 수정이 필요함
|
| 사용 | - 데이터 구조가 변경될 여지가 없이 명확한 경우
- 데이터 update가 잦은 시스템 (중복 데이터가 없으므로 변경에 유리) | - 정확한 데이터 구조가 정해지지 않은 경우
- 조회가 많고,
- 데이터 양이 매우 많은 경우 (scale out 가능) |