들어가기 전 기본 정보
Database - 컴퓨터 시스템에 전자 방식으로 저장되고 구조화된 정보 또는 데이터의 체계적인 집합을 의미
DBMS (DataBase Management System) - 사용자와 데이터베이스 사이에서 사용자의 요구에 따라 정보를 생성해주고 데이터 베이스를 관리해주는 소프트웨어
SQL (Structured Query Language) - 관계형 데이터베이스 관리 시스템의 데이터를 관리하기 위해 설계된 특수 목적의 프로그래밍 언어. 관계형 데이터베이스 관리 시스템에서 자료의 검색과 관리, 데이터베이스 스키마 생성과 수정, 데이터베이스 객체 접근 조정 관리를 위해 고안
RDBMS
- Relational DataBase Managment System의 약자로 관계형 데이터베이스 관리 시스템을 의미
- RDB를 관리하는 시스템으로써 RDB는 관계형 데이터 모델을 기초로 두고 모든 데이터를 2차원 테이블 형태로 표현하는 데이터 베이스
- RDBMS의 저장 방식은 SQL에 의해 저장되고 정해진 스키마에 따라 데이터를 저장
NoSQL
- Not Only SQL 의 약자로 말 그대로 관계형 데이터베이스가 아닌 다른 형태의 데이터 저장 기술
- RDB와는 달리 테이블 간 관계를 정의하지 않음
- 데이터 테이블은 그냥 하나의 테이블이며 테이블 간의 관계를 정의하지 않아 일반적으로 테이블 간 Join 불가능
- 데이터를 분산하여 저장하는 Scale-Out을 목표하고 수평적 확장 (Scale-out)을 쉽게 할 수 있는 장점
- 다양한 형태의 저장 기술을 지원
1. Key-Value Database
- 데이터가 key-value의 쌍으로 저장, key는 value에 접근하기 위한 용도로 사용되고 값은 어떠한 형태의 데이터도 담을 수 있음 (오디오, 이미지 전부 가능)
- 간단한 API를 제공하는 만큼 속도가 빠른 편
- Redis, Ria, Amazon Dynamo DB등이 있음
2. Document Database
- key와 document 형태로 저장 (계층적 형태로 저장)
- 객체지향에서 객체와 유사하고, 하나의 단위로 취급되어 저장. 즉, 하나의 객체를 여러 개의 테이블에 나눠 저장할 필요가 없어진다는 의미
- 객체-관계 매핑이 필요하지 않음. 객체를 Document 형태로 바로 저장이 가능하기 때문
- 쿼리가 SQL과 다름. Json이나 xml형태로 출력되어 RDBMS에서의 결과를 사용하는 방법과 다름
- MongoDB, CouthDB 등이 있음
3. Wide Column Database
- Column-family Model 기반의 DB
- 해당 모델은 key에서 필드를 결정. 키는 Row (키 값)와 Column-family, Column-name을 가짐
- 연관된 데이터들은 같은 Column-family 안에 속해 있으며 각자의 Column-name을 가짐
- 하나의 커다란 테이블로 표현이 가능하고, 질의는 Row, Column-family, Column-name을 통해 수행
- HBase, Hypertable 등이 있음
4. Graph Database
- Node와 Edge, Property와 함께 그래프 구조를 사용하여 데이터를 표현하고 저장하는 DB
- 개체와 관계를 그래프 형태로 표현한 것이므로 관계형 모델이라고 할 수 있고, 데이터 간의 관계가 탐색의 키일 경우에 적합
- SNS에 적함하고, 연관된 데이터를 추천해주는 추천 엔진이나 패턴 인식 등의 DB로 적합
- Neo4J가 있음
장단점
RDBMS
장점
- 정해진 스키마에 따라 데이터를 저장하여야 하므로 명확한 데이터 구조를 보장
- 각 데이터는 중복없이 한 번만 저장
단점
- 테이블 간에 관계를 맺고 있어 시스템이 커질 경우 Join 문이 많은 복잡한 쿼리가 만들어질 수 있음
- 성능 향상을 위해 서버의 성능을 향상 시켜야하는 Scale-up만을 지원. 따라서 비용이 기하급수적으로 늘어날 수 있음
- 스키마로 인해 데이터가 유연하지 못하고, 스키마 변경이 될 경우 번거롭고 어려움
NoSQL
장점
- 스키마가 없어 자유로운 데이터 구조를 가질 수 있고, 언제든 저장된 데이터를 조정하고 새로운 필드를 추가할 수 있음
- 데이터 분산이 용이하며 성능 향상을 위한 Scale-up 뿐만이 아닌 Scale-out 또한 가능
단점
- 데이터 중복이 발생할 수 있고, 중복된 데이터가 변경될 경우 수정을 모든 컬렉션에서 수행해야함
- 스키마가 존재하지 않아 명확한 데이터 구조를 보장하지 않고, 데이터 구조 결정이 어려울 수 있음
'ssung_항해일지 > CS 지식 및 기술면접' 카테고리의 다른 글
Stack & Queue (0) | 2023.07.12 |
---|---|
Exception(예외) 처리 (1) | 2023.05.19 |
오버로딩과 오버라이딩 (0) | 2023.05.18 |
절차지향, 객체지향, 함수형 프로그래밍 (0) | 2023.05.17 |
Stack & Queue / Array & LinkedList (0) | 2023.05.16 |