본문 바로가기

Database

[데이터베이스] 관계형 데이터베이스와 비관계형 데이터베이스

1. 데이터베이스 

▶ 정의 : 데이터를 저장 및 보존하는 시스템

 

▶ 종류

1) 관계형 데이터 베이스(RDBMS, Relation Database Management System)

ex) MySQL, PostgreSQL

 

2) 비관계형 데이터 베이스(NoSQL, Non-relational)

ex) MongoDB, Redis, Cassandra

 

2. 관계형 데이터베이스

▶ 모든 데이터들은 2차원 테이블로 표현, 칼럼과 로우로 구성, 각 로우는 저만의 고유키(primary key)가 있다.

한 테이블에서 다른 테이블의 특정 칼럼의 값으로 외부 키(foreign key) 통해 연결시킬 수 있다.

ex) users 테이블은 id(primary key), nickname, profile_image_url, platform_id, social_id, created_at, updated_at 의 칼럼이 있다. users 테이블의 platform_id 과 platforms 테이블의 id를 foreign key를 통해 연결시켰다.

▶ 장점

1) 데이터를 더 효율적이고 체계적으로 저장하고 관리

2) 데이터들의 구조(테이블 스키마)를 정의함으로써 데이터의 완전성이 보장

3) 트랜잭션 기능 제공

 

▶ 단점 

1) 테이블 구조가 미리 정의되어야 하므로 테이블 구조 변화 등에 덜 유연

2) 단순히 서버 늘리기(스케일 아웃)가 아닌 서버의 성능 자체(스케일 업)를 높여야 하므로 확장이 어려움

 

▶ 실사용예시

전자상거래 정보, 은행 계좌 정보, 거래 정보 등 정형화되고 완전성이 중요한 데이터를 저장하는데 유리

 

▶ 테이블의 관련성

1) one to one(1:1)

: 일대일 매칭되는 관계 

ex) 한 국가당 수도는 하나이므로, 국가와 수도는 일대일 관계

 

2) one to many(1:N)

: 하나의 row가 여러 row로 연결되는 관계

ex) 하나의 사용자가 여러개의 sns을 가질 수 있다면 사용자와 sns은 일대다 관계

 

3) many to many(N:N)

: 여러 row가 여러 row와 연결되는 관계

ex) 한명의 사용자가 여러 사용자를 팔로우 할 수 있고 해당 사용자 또한 여러 사용자가 팔로우 할 수 있으므로,

사용자 사이에 팔로우 관계는 다대다 관계

 

▶ 트랜잭션

1) 정의

일련의 작업들이 마치 하나의 작업처럼 취급되어서 모두 다 성공하거나 아니면 모두 다 실패하는 것

만약, 예시와 같은 과정이 수행되다가 중간에 오류가 난다면 이체금액이 빠져나갔는데 받는계좌에는 금액이 전달되지 못하는 오류가 발생하므로, 모든 과정이 실행 되어야만 실제 데이터베이스에 영구적으로 반영되고 중간과정에서 오류가 난다면 그 전 상태로 돌아가는 기능

 

2) 예시

ex) 해당 계좌에 잔금 확인 → 이체 금액을 잔고에서 차감 → 이체 금액을 받는 계좌에 전송 → 받는 계좌 잔고에 이체금액 더하기

 

3) 관계형 데이터베이스 시스템은 트랜잭션의 기능을 보장하기 위해 ACID 라는 성질을 가지고 있다.

ACID(Atomicity, 원자성 / Consistency, 일관성 / Isolation, 고립성 / Durability, 지속성)

 

3. 비관계형 데이터베이스

테이블들의 관계를 미리 구현해야 하는 필요가 없이 데이터가들어오는 그대로 그냥 저장

 

▶ 장점

1) 데이터 구조를 미리 정의하지 않아도 되므로 데이터 구조 변화에 유연

2) 스케일 아웃(서버수를 늘려서 확장)으로 시스템 확장이 가능하므로 확장이 비교적 쉬움

3) 확장이 쉽고, 데이터 구조도 유연하니 방대한 양의 데이터를 저장하는 데 유리

 

▶ 단점 

1) 데이터의 완전성이 덜 보장

2) 트랜잭션이 안 되거나 되더라도 비교절 불안정

 

▶ 실사용예시

로그 데이터와 같이 비정형화 데이터나 완전성이 상대적으로 덜 유리한 데이터

 

※로그 데이터란?

IT 인프라에서 발생하는 모든 상황의 데이터로 발생되는 모든 행위와 이벤트 정보를 시간에 따라 남기는 데이터