Search
Duplicate
📒

아키텍쳐 & 대규모 시스템 설계] 05-1. 관계형/비관계형 데이터베이스

상태
완료
수업
아키텍쳐 & 대규모 시스템 설계
주제
CS
연관 노트
3 more properties
참고

데이터베이스

NOTE
관계형 DB와 비관계형 DB의 차이점에 대해서 알아보자!
DB유형에 따른 종류와 사용경우

관계형 데이터베이스(SQL)

NOTE
관계형 데이터베이스 요약!
관계형 데이터베이스는 고정된 행(row)와 열(column)로 구성된 테이블에 데이터를 저장한다.
각 열은 하나의 속성에 대한 정보를 저장하고, 행에는 각 열의 데이터 형식에 맞는 데이터가 저장된다.
테이블의 구조와 데이터 타입등을 사전에 정의하며, 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다.
특정한 형식을 지키기 때문에, 데이터를 정확히 입력했다면 사용할 때 수월하다.

대표적인 솔루션

MySQL
SQLite
MariaDB
PostgresSQL

사용하는 경우

데이터베이스의 ACID 성질을 준수해야 하는 경우
ACID는 트랜잭션에 의한 상태안전을 보장하기 위한 성질이다.
SQL을 사용하면 데이터베이스간 상호작용 방식을 명확하게 규정할 수 있기에, 데이터의 무결성을 보호할 수 있따.
금융권에서는 매우 중요한 개념
소프트웨어에 사용되는 데이터가 구조적이고 일관적인 경우
규모가 많은 서버를 필요로 하지 않고 일관된 데이터를 사용하는 경우, 관계형 데이터베이스를 사용하는 경우가 많다.
다양한 데이터 유형과 높은 트래픽을 지원하도록 설계된 NoSQL 데이터베이스를 사용해야만 하는 이유가 없기 때문.

비관계형 데이터베이스

NOTE
관계형 DB를 제외한 나머지를 전부 말한다.
NoSQL 데이터베이스는 표 형식이 아니라, 다른 방식으로 데이터를 저장한다.
주요 유형으로는 문서, 키, 값, 와이드 컬럼, 그래프가 있다.
주로 데이터가 고정되어 있지 않은 데이터베이스를 가리킨다.
유연한 스키마를 제공하며, 대량의 데이터와 높은 사용자 부하에서도 쉽게 확장이 가능하다.
데이터를 입력하는 방식에 따라 읽어올 때 영향을 미친다.
복사된 데이터가 변경되면 여러 콜렉션과 문서를 수정해야한다.

NoSQL DB 유형

Key-Value 데이터베이스
Key(속성), Value(값)을 의미한다.
Redis, Dynamo등이 대표적인 Key-Value 형식의 데이터베이스 이다.
문서형(Document) 데이터베이스
테이블이 아닌 문서처럼 저장하는 데이터베이스 유형
많은 문서형 데이터베이스에서 JSON과 유사한 형식의 데이터를 문서화하고 저장한다.
MongoDB가 대표적인 문서형 데이터베이스다.
Wide-Column Store 데이터베이스
데이터베이스의 열(column)에 대한 데이터를 집중적으로 관리
하나의 행에 많은 열을 포함할 수 있어 유연성이 높다.
Cassandra, HBase가 대표적인 Wide-Column Store 데이터베이스다.
그래프(Graph) 데이터베이스
자료구조의 그래프와 비슷한 관계를 구성하는 데이터베이스다.
각 노드에 속성별로 데이터를 저장하고, 관계는 선으로 표현한다.
Neo4J, InfiniteGraph가 대표적인 그래프 데이터베이스

사용하는 경우

데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터
대부분의 NoSQL은 저장하는 데이터의 유형에 제한이 없고 언제든 새 유형을 추가할 수 있다.
정형화되지 않은 데이터가 필요한 경우 사용한다.
클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
클라우드 기반으로 DB를 구축하면, 저렴한 비용의 솔루션을 제공받을 수 있다.
소프트웨어 에 데이터베이스의 확장성이 중요하다면, 별다른 번거로움 없이 확장할 수 있는 NoSQL를 사용하자
빠르게 서비스를 구축하는 과정에서 데이터 구조를 자주 업데이트하는 경우
스키마를 미리 준비할 필요가 없기 떄문에 빠르게 개발하는 과정에 유리하다.
데이터 구조를 자주 업데이트 해야하는 경우, 스키마를 매번 수정하는 SQL보다 NoSQL이 더 적합하다.

SQL vs NoSQL

NOTE
SQL
NoSQL
데이터 저장
SQL을 이용해서 데이터를 테이블에 저장
key-value, document 등의 방식으로 데이터를 저장한다.
스키마
고정된 형식의 스키마가 필요하다. 스키마를 수정할 수 있지만, DB 전체를 수정해야하고 오프라인으로 전환할 필요가 있다.
동적으로 스키마의 형태를 관리할 수 있다. 행을 추가할 떄 즉시 새로운 열을 추가할 수 있고, 개별 속성에 대해서 반드시 입력하지 않아도 된다.
쿼리
테이블의 형식과 테이블 관계에 맞추어서 요청해야 한다.
데이터 그룹 자체를 조회하는 것에 초엄을 맞추고 있다. 구조화 되지 않은 쿼리 언어로도 데이터 요청이 가능하다.
확장성
수직적으로 확장한다. 여러 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만 시간이 많이 든다.
수평적으로 확장한다. 서버를 추가하기만 하면, 많은 트래픽을 보다 편리하게 처리할 수 있다. 저렴한 범용 하드웨어, 클라우드 기반 인스턴스에 호스팅이 가능해 수직적보다 비용이 저렴하다.
장점
데이터 중복 배제로 데이터 이상 발생 및 용량 증가를 최소화한다.
쿼리 프로세싱이 단순화되어 대용량 데이터 처리 성능이 향상된다.
단점
조인이 복잡한 경우 쿼리 프로세싱도 복잡해셔 성능이 저하된다.
데이터 중복에 의해 데이터 일관성이 저학되고 용량이 증가한다.