54일차 (02-24-2021)

조상래·2021년 2월 24일
0

코드스테이츠

목록 보기
52/73
SQLNOSQL
정해진 규격정해진 규격 없음
Join 가능Join불가능
*트랜잭션 사용트랜잭션 X
분산처리 어려움분산처리 쉬움

(*트랜잭션: 결과가 실패일 경우 과정을 무시)

오늘은 백엔드 개발의 꽃이라는 데이터베이스에 대해서 배웠다. 데이터베이스는 그냥 전화번호부 정도로 생각해왔던 나는 적잖이 충격을 받았다. 생각보다 폭넓고 복잡했다. 먼저 데이터베이스의 종류에 대해서 알아보겠다.

데이터베이스는 크게 두종류로 나눠 볼 수 있다. 관계형 데이터베이스 또는 NoSQL. 먼저 NoSQL에 대해 알아보자면,

1. NOSQL(Not Only SQL)

NoSQL이란 말 그대로 SQL(Structured Query Language/관계형 데이터베이스) 이 아닌 즉, 접근방식이 SQL과는 상반되는 데이터베이스 형식을 얘기하거나 또는 관계형데이터베이스 뿐만아니라 다른 특성 까지도 갖는 (Not only SQL) 으로 정의할 수 있다. 그래서 NoSQL은 SQL에 비해 아주 광범위하여 어떤것이라고 정확히 특정할 수 없다.

NOSQL의 특징에 대해 세가지 종류로 나누어서 설명 하자면,

1) Document

Document종류엔 대표적으로 MongoDB, CouchDB가 있다. 특징은 데이터를 Document라는 스토어에 json 형태로 저장한다. 형태만 지켜진다면 어떤 종류, 어떤 모양의 데이터든 저장이 가능하여 굉장히 유연하다고 볼 수 있다.

2) Key-valueDB

Key valueDB의 대표적인 예로는 CassandraDB(column wide database 유형), Redis, Riak가 있는데 key, value 형태의 데이터인 만큼 읽고 쓰기가 굉장히 빠르다. 그러나 문제는 어떤 데이터를 얻을것인가에 대한것에 조금 제한적이다.

3) GraphDB

GraphDB는 column이나 document가 필요없을 때, 그러나 각 노드사이의 관계를 알아야할 때 사용하는 데이터베이스이다. 예를 들자면, 인스타그램의 팔로우에 사용 되면 효율적일 것이다.

간략하게 봤듯이 NoSQL은 각각의 특화된 장점들이 존재한다. 그러나 한쪽에 특화 된 만큼 포기한 기능들도 많을 것이다. 그래서 상황에 맞게 골라서 쓰면 아주 높은 효율을 볼 수 있고 또 반대로 어떠한 데이터베이스 구조가 유용한지 모르고 첫 시작을 섣불리 NoSQL방식중 하나로 시작하는 것은 매우 위험하다.

NOSQL 특징 추가)

  • RDBMS 처럼 고정된 스키마 및 JOIN이 존재하지 않는다.
  • 스키마 변경(ALTER)가 필요없다.
  • 빅데이터 특화

2. 관계형 데이터베이스

관계형 데이터베이스(RDBMS)는 행과 열로 표현되는 테이블 간의 관계를 나타낼 때 사용된다. 이를 관리하기 위해 설계된 프로그래밍 언어가 SQL이다.

스키마/테이블 이라는 규격이 있기 때문에 안정적이나 한정적이다.

경험적 수치로는 read 95%, write 5% 경우 성능이 나쁘지 않지만 write 50%를 초과하는 경우엔 성능 저하가 발생한다. 결국 빅데이터를 처리할 땐 NOSQL을 이용하는 이유도 위의 경우 때문이다.

데이터베이스 설계를 시작할 때 비교적 안정적인 SQL로 시작을 하고 내 데이터베이스에는 어떤 방식이 어울릴지를 알게 된다면 그 때 NOSQL방식으로 넘어가도 된다. 두 개를 같이 쓰는 경우도 있다.

(참고: https://www.inflearn.com/course/nosql-%ED%8C%8C%EC%9D%B4%EC%8D%AC-%EB%AA%BD%EA%B3%A0db-%EC%9E%94%EC%9E%AC%EB%AF%B8%EC%BD%94%EB%94%A9/dashboard)

profile
Codestates Full IM26기 수료

0개의 댓글