[DE] NoSQL

박경국·2022년 2월 2일
0

Data Engineering

목록 보기
10/16
post-thumbnail

오늘은 nosql에 대해 정리하겠습니다. nosql은 웹 환경이 변화하면서 등장한 데이터베이스입니다. 이름 그대로 sql에 대한 안티테제로 등장했습니다.

1. web 환경의 변화와 sql의 한계

  • 지금은 유저의 모든 활동이 데이터가 되는 시대입니다. 그 말인즉슨, 과거에 비해 데이터의 양이 폭발적으로 증가하기 시작했다는 뜻입니다.
  • 70년 대에 등장한 sql은 이러한 변화에 따라가는데 한계가 노출됐는데요. sql은 스키마가 고정되어 있습니다. 그 때문에 새로운 데이터를 저장하는데 번거러움이 생겼습니다. 수 많은 필드를 가진 데이터를 관계형 데이터베이스로 저장하기 위해서는 스키마를 디자인하고 제1,2,3 등의 정규화를 거쳐야 합니다.
  • 데이터의 양이 늘면서 데이터를 저장하는 서버도 문제가 됐습니다. RDB는 하나의 서버에 여러개의 테이블을 저장하여 관계를 형성하는 걸 전제로 만든 DB이기 때문에 여러개의 서버를 연결시켜 확장시키는데 적합하지 않습니다. 여러개의 서버를 연결하여 확장시키는 것보다 하나의 서버를 크게 만드는 것이 더 큰 비용이 들기 때문에 DB 구축에 시간이 많이 들고, 서버 유지 비용도 많이 드는 RDB는 아쉬운 점이 많았습니다.

2. NoSQL의 특징, 일단 그냥 넣어

1) schema free

  • 관계형 데이터베이스가 사전에 정의된 테이블에 그에 알맞은 형태의 데이터만 넣을 수 있다면, NoSQL은 일단 그냥 넣습니다.
  • 세부화한다면 key-value, document, graph, wide-column 등의 형식이 있지만, SQL처럼 미리 정의된 스키마에 의존하지 않습니다.
  • 행을 추가할 때 열도 함께 추가할 수 있고, 개별 속성을 입력할 때 모든 열의 데이터를 반드시 입력하지 않아도 괜찮습니다.

2) UnQL

  • NoSQL을 스키마 프리 데이터베이스라고 앞서 설명했지만, 이것이 NoSQL에 스키마가 없다는 뜻은 아닙니다. 관계형 데이터베이스는 데이터를 INSERT할 때 스키마에 맞춘다면, NoSQL은 데이터를 읽을 때 스키마에 따라 읽어옵니다.
  • 스키마에 따라 읽어온다는 것의 의미는 뒤에서 Mongo DB를 설명할 때 더 자세히 정리할 수 있을 것 같습니다. NoSQL은 데이터를 입력하는 것에 초점을 맞춘 데이터이기 때문에 SQL처럼 구조화된 쿼리 언어를 사용하지 않습니다. 대신 개별 속성을 표현하는 데이터 그룹 자체스키마에 따라 조회하는 것에 초점을 둡니다. 이러한 언어를 UnStructuered Query Language라고 합니다.

3) 확장성

  • SQL은 더 큰 메모리와 CPU를 사용하는 방식으로 확장합니다. 이것을 수직적 확장이라고 합니다. 데이터가 많아질 수록 하드웨어의 성능에 많이 의존하기 때문에 RDB는 안정적이나 비용이 많이 듭니다.
  • 반면 NoSQL은 서버를 병렬로 구성하여 수평적으로 확장됩니다. 값싼 서버를 여러개 두어 하나의 DB로 관리할 수 있기 때문에 하드웨어를 수직적으로 확장해야하는 SQL에 비해 확장 비용이 저렴합니다.

3. 언제 어떤 데이터베이스를 써야 할까?

두 데이터베이스의 특성이 다르기 때문에 상황에 따라 어떤 데이터베이스를 사용할지 판단할 수 있어야 합니다. 보통 하나만 골라 쓰기 보다는 상황과 요구에 따라 두 데이터베이스를 모두 사용합니다. 그럼 어떤 상황과 요구가 있는지 살펴보겠습니다.

1) SQL 기반의 RDB를 사용하는 경우

  • 데이터베이스 안정성, 완전성, 무결함을 추구해야 하는 경우 : 데이터베이스에서 일어나는 상태 변화(트랜잭션)의 안전성을 추구해야 할 때 SQL 기반의 RDB를 사용합니다. SQL은 데이터의 완전성을 지키기 위해 ACID라는 원칙을 지키려고 노력합니다. 또한 테이블 간의 관계가 하나의 레코드를 표현하기 때문에, 입력된 데이터 자체가 레코드(NoSQL에서는 도큐먼트라고 합니다)인 NoSQL과 달리 데이터 중복를 피할 수 있습니다. NoSQL과 같이 여러 컬렉션에 같은 도큐먼트를 저장하는 경우에 데이터의 업데이트, 삭제 등에 만전을 기해야합니다. 그래서 전자 상거래, 금융 서비스에서 ACID 원칙을 지키는 RDB를 사용합니다.
  • 데이터가 구조적이고 일관적인 경우 : 프로젝트의 규모가 크지 않아서 많은 서버가 필요하지 않고, 일관된 데이터를 사용하는 경우 RDB를 사용합니다. 이 경우에 굳이 유연한 데이터 유형과 높은 트래픽을 소화할 수 있도록 설계된 NoSQL을 사용할 이유가 없습니다.

2) NoSQL 기반의 DB를 사용하는 경우

  • 유동적인 데이터 구조의 대용량 데이터를 저장하는 경우 : NoSQL은 필요에 따라 데이터의 새 유형을 추가할 수 있습니다. 예측할 수 없는 혹은 정형화 되지 않은 많은 양의 데이터가 필요한 경우에 NoSQl을 사용하는 것이 효율적입니다.
  • 서버의 수평적 확장이 유리한 경우 : NoSQL은 더 많은 서버를 추가해서 데이터베이스를 수평적으로 분산, 확장할 수 있습니다. 클라우드 기반으로 저장소를 구축하는 경우 저렴한 비용으로 이용할 수 있기 때문에 편의와 금전적인 부분을 생각한다면 NoSQL 기반의 DB가 유리합니다.
  • 빠르게 서비스를 구축하고 데이터 구조를 업데이트 해야하는 경우 : NoSQL은 스키마를 디자인하지 않아도 되기 때문에 빠르게 개발해야 하는 상황에서 유리합니다. SQL의 경우 데이터 구조를 변경할 때 데이터베이스 서버를 다운시켜야 하는 반면, NoSQl은 서버 오프라인 없이 데이터 구조를 수정할 수 있기 때문에(그냥 넣으면 된다) 데이터 구조를 자주 업데이트해야 하는 경우에 NoSQL이 유용합니다.

이번 포스팅에서는 NoSQL의 특징에 대해 정리해봤습니다.
SQL에 대한 안티테제로 등장한 데이터베이스이기 때문에 설명하는 과정에서 SQL과의 비교를 하지 않을 수 없네요. 다음 포스팅에서는 NoSQl의 대표적인 DB인 MongoDB에 대해 정리하겠습니다.

0개의 댓글