DB 구조 및 설계 : RDB vs NoSQL

JACKJACK·2022년 11월 14일
1

📝DB(Database)란?

데이터의 집합을 의미하며 오늘날 DB의 종류는 매우 다양하다.

DB의 종류는 크게 6가지로 구분되며 Relational DB를 제외한 DB를 비 관계형 데이터베이스 NoSQL이라 칭한다. 이 중 보통 Relational DB와 Document DB를 많이 사용하며 정확도와 일관성을 요구할때 Relational DB를 사용, 입출력이 매우 잦으면 Document DB를 사용한다.

1. Relational DB(MySQL): 가장 많이쓰는 관계형 DB, SQL을 사용해 CRUD기능 수행, ACID Transaction이 있어서 데이터 입출력의 정확도가 높다.

2. Document DB(MongoDB): Collection안에 Document 파일을 만들어 JSON형태로 데이터를 저장함. 분산처리에 좋으나 RDB에비해 일관성이 떨어짐

3. Key-value DB(Redis) : 자주쓰는 데이터를 캐싱, 채팅을 위한 Pub/Sub, 영상 스트리밍, 로그인 기록(잘 안씀)

4. Graph DB(Neo4j): Graph Query Language(GQL)을 사용해 데이터를 다루며 자료관의 방향 관계를 표현할때 사용 (비행기 노선, SNS 관계, 코로나전염맵, 추천서비스)

5. Column-family DB(cassandra): Table에 row를 여럿만들고 그안에 column 기입하며 CQL(SQL과 비슷)을 사용함 (netflix 시청기록), 분산처리기능이 있으나 역시 일관성이 떨어짐

6. Search Engin(Elastic Search): 검색용 인덱스 보관을 위한 DB로 index를 이용해 자료를 검색해줌.(추천검색어, 검색어 오타교정에 쓰이기도 함)




⛓Relation DB 구조

관계형 데이터 모델에 기초를 둔 데이터베이스이며 현재까지 가장 많이 사용되는 DB이다.

보통 Table 구조로 이루어져있으며 DB로 사용되는 조건을 갖추면 TableRelation이라고 칭한다. 한 Cell에서 단일 값을 가지며 겹치는 Row가 없을 때 Relation이라 할 수 있고 Table로도 불린다. 테이블은 row, column이 존재하며 row는 tuple, record라고 불리고 column은 field, attribute로도 불린다.

DB Table에는 key가 존재하는데 슈퍼 키, 복합 키, 후보 키, 기본 키, 대체 키, 외래키가 있다.

  • 슈퍼 키: row를 유일하게 식별할 수 있게하는 하나 이상 속성의 집합이다.
    ex)(이름, 주민번호, 전화번호), (학번, 군번)
  • 후보 키: 슈퍼 키에서 최소성을 만족하는 최소한의 속성을 지닌 집합이다.
    ex) (주민번호), (학번)
  • 기본 키: 후보 키에서 사용하는 메인 키로 row를 구분하는 역할을 함. null값이 오거나 중복된 값을 가질 수 없다. (테이블당 1개만 지정)
  • 대체 키: 후보 키에서 메인키를 제외한 키.
  • 복합 키: 2개 이상의 속성을 가진 키(두개 이상의 키가 합해서 유일성과 최소성을 지님)
  • 외래 키: 서로 다른 테이블의 관계를 이어주는 키로 다른 테이블의 기본키를 참조한다.


⛓Relational DB의 관계와 JOIN의 개념

Relational DB는 1:1, 1:N, N:M의 관계를 가질수 있는데 보통은 1:N 관계구조를 많이 가진다.

1:N 관계는 기본키와 외래키로 두개의 테이블을 연결할 경우 사용한다. N:M은 여러개의 테이블에서 기본키를 외래키로 가져와 연결해 매핑시킨 테이블을 사용할 때 사용한다.


> #### join은 여러개의 테이블을 하나의 테이블인것처럼 연결하기 위해 사용하는 연산이다. JOIN에는 가장 자주쓰이는 inner join과 left outer join 두가지가 있다.
  • inner join은 보통 두 테이블이 PK, FK를 사용해 1:N 관계로 이어져 있다.
  • left join은 join의 대상이 되는 테이블을 전부 포함해 join을 시키는 개념이다.




✨Relation DB에 대해 알아봤으니 그 반대의 개념인 NoSQL에 대해서도 알아보자!

RDB는 명확하게 정의한 DB구조를 요구하는 반면에 NoSQL은 비정형의 데이터를 저장할 수 있도록 되어있다. NoSQL의 대표적인 DB로는 MongoDB가 있으며 RDB의 Table과는 다르게 JSON, Key-Value등의 다양한 형태로 데이터를 저장한다.

RDBACID와 Transaction을 지원해 데이터의 중복을 없애고 명확하게 데이터를 저장할 수 있어 Update에 유리하다. NoSQL은 상대적으로 유연해 데이터의 중복이 발생할 수 있으며 업데이트 시 원하는 요구사항에 맞는 명확한 데이터 수정이 힘들지만 조회에 유리하다는 장점이 있다. RDB는 ACID와 Transaction을 만족해야하기 때문에 scale-out에는 불리해 scale-up을 하며 NoSQL은 scale-out에 유리하다.




💡결론

- DB는 크게 RDB와 NoSQL로 나뉘며 데이터 사용 용도에 따라 DB를 설계하는 것이 매우 중요하다.

- RDB는 데이터 구조를 명확하게 정의해 데이터 구조의 변경이 필요 없거나 Update를 자주 사용할 때, NoSQL은 데이터 구조가 명확치 않고 조회가 많을 때 사용하면 좋다.

profile
러닝커브를 빠르게 높이자🎢

0개의 댓글