serendipity
DataBase 디비 본문
DB , Database란 ?
"다수의 사용자가 사용하는 데이터들의 공유와 운영을 위해 저장해 놓는 공간"
여러 사람에 의해 공유되어 사용될 목적으로 통합하여 관리되는 데이터의 집합
몇 개의 자료 파일을 조직적으로 통합하여 자료 항목의 중복을 없애고 자료를 구조화하여 기억시켜 놓은 자료의 집합체
사용하는 이유
프로그램을 개발할 때 프로그램 사용자들에 의해 생성된 데이터, 프로그래머가 필요에 의해 프로그램에 넣어놓은 데이터 등 많은 데이터들이 생성된다. 데이터베이스를 사용하지 않으면 이 데이터들은 프로그램을 종료하는 순간 전부 날아가게 되어서 이를 방지하기 위해 데이터들을 데이터베이스에 넣고 보관하는 방법을 사용한다.
관계형 DB (SQL)
*SQL : StructuredQueryLanguage의 약자로 '구조화된 쿼리 언어'를 의미
데이터베이스 자체를 의미하는게 아니라 DB와 상호작용 하는데에 사용하는 쿼리 언어
- 정해진 데이터 스키마에 따라 테이블에 데이터가 저장
- 관계를 통해 여러 테이블에 분산
장점)
- DB 추가하기 전 유효성 검사를 통해 데이터 품질 향상
- 데이터 무결성(데이터 값이 정확한 상태) 보장
- 각 데이터는 중복 없이 한번만 저장
- view를 이용한 보안 설정으로 허가를 받지 않은 사용자로부터 데이터 조회 변경 삭제 방지
- 같은 오프소스를 공유하므로 다른 개발 환경에서도 쉽게 적용 가능
단점)
- 수평적 확장이 어렵고 수직적 확장이 대체로 가능해 데이터 처리량 성장에 한계
- 가변성이 있는 데이터의 경우 테이블 저장이 어려움
- 복잡한 쿼리가 생성되었을 때 수정이 번거롭거나 불가능한 경우 발생
비관계형 DB (NoSQL)
*NoSQL : Not Only SQL의 약자로. Non- Relational Operation Database SQL을 의미
특정 데이터 모델에 대해 특정 목적에 맞춰 구축되는 DB, 현대적인 어플리케이션 구축을 위한 유연한 스키마를 갖춤
- 데이터를 일반적으로 동일한 컬렉션에 저장
- 다른 구조의 데이터를 같은 컬렉션(=테이블)에 저장 가능
- Join을 통해 여러 컬렉션을 사용할 필요가 없음
장점)
- 스키마가 없어 훨씬 더 유연성을 가짐
- 다양한 가변성 있는 데이터 저장이 용이
- 데이터를 읽어오는 속도가 빠름 (애플리케이션이 필요로 하는 형식으로 저장되기 때문)
- 수직 및 수평적 확장이 모두 가능 (모든 읽기, 쓰기 요청처리가 가능)
단점)
- 유연성으로 인해 구조 결정이 어려움
- 쿼리 언어를 각기 다르게 사용해서 이식성이 낮다
- 수정할 때 모든 컬렉션의 데이터를 수정(컬렉션 다양하게 존재할 경우)