개요
추후, Elastic Search를 들어가기에 앞서, NoSQL의 개념부터 다잡고자 해당 포스팅을 하게 되었습니다.
Not Only SQL을 뜻한다는 NoSQL.. 그렇다면 과연 무엇일까요?
❓ NoSQL 이란?
결론부터 말씀드리자면, NoSQL 은 Database 의 개념입니다.
NoSQL 이란,
No! SQL! 이 아니라 Not Only SQL ! 를 뜻합니다.
이는 의미의 차이로써도 반드시 착각하면 안된다는 점으로 강조를 드렸는데요.
SQL을 사용하지 않겠다! 가 아닌, SQL만으로는 부족하니까 이뿐만 아니라 이것도 써야지~ 라는 의미가 내포되며 탄생되었습니다.
NoSQL은, 규칙성을 준수하는 RDBMS 와 다르게, 다양한 형태로 데이터가 저장되는 저장소 입니다.
즉, NoSQL은 "DB(DBMS)" 입니다.
NoSQL 의 종류로는 크게 4가지의 형태가 존재하며, 아래의 형태들로 저장됩니다.
- Key Value
- Column Family
- Graph
- Document
❓ 탄생 배경
그럼 저희는 왜 잘 쓰고있던 RDBMS(관계형 Database) 를 놔두고, 새로운 형태의 DB를 탄생시켜 사용하는 걸까요?
이는 RDBMS에는 분명한 단점이 존재하며, 해당 단점을 보완하고자 탄생되었을 것 입니다.
탄생배경은 다음과 같습니다.
RDBMS 의 가장 큰 특징은 "스키마 속에서 엄격한 데이터 구조"를 준수하며 데이터가 관리된다는 점 입니다.
실제로, RDB 에선 "도부이결다줘.." 와 같이 엄격한 정규형 규칙 뿐만이 아니라, 수많은 제약사항을 보유한 채 데이터가 관리되어집니다.
RDBMS 는 시스템이 커지고 복잡해지면서 단점이 나타나기 시작했습니다.
1. RDB는 관계가 맺어져 있다는 점에서, 서비스가 커지면 수많은 테이블 및 관계가 나올 것 이고, 해당 데이터를 조회하려면 수많은 JOIN 문이 필요된다.
2. RDB는 하나의 스키마에서 활동된다는 전제로 관리가 되어서, 스키마를 잘게잘게 분리하는 형태인 Scale out 보다는 스키마의 성능을 높이는 Scale up 형태가 주로 사용된다.
RDB는 위 2가지의 단점이 부각될 수 밖에 없었습니다.
🥊 NoSQL 특징
1) 유연한 데이터 모델
가장 첫 번째로는, "스키마의 제약에서 벗어났다." 로 볼 수 있습니다.
기존 RDB에서와 새로운 NoSQL 형태인 Document 의 예시로 들어보겠습니다.
가장 먼저 대한민국에서만 있는 주소를 다루는 테이블이라고 가정해보겠습니다.
해당 테이블은 문제가 없겠지만.. 만일 시스템이 커져서 해당 서비스가 해외까지 진출한다면 어떤일이 일어날까요?
해외의 주소의 형태는 대한민국 주소의 형태와 분명 다르기 때문에, 컬럼을 추가한다면 수많은 Null 값이 발생될 것이고..
그렇다고 테이블을 하나 만들자니 관계를 일일히 설정 해 주어야하며.. 여간 복잡하지 않을 수 없습니다.
하지만 NoSQL은 이러한 제약사항과 관계가 없기 때문에 손쉽고 빠르게 데이터를 저장시킬 수 있습니다.
또한 요청사항이 들어왔을 때 각 테이블마다의 형태로 매핑 시킬 필요가 없으며,
리스트(배열) 형태로 들어왔을 때에도 RDB는 제1 정규형 특성상, 하나의 컬럼들로 쪼개서 저장해야 했겠지만,
NoSQL은 리스트 형태를 허용하기 때문에, 간단하게 추가가 가능합니다.
🥊 NoSQL 특징
2) 분산 시스템
두 번째 가장 큰 특징은 분산시스템이 손쉽게 이루어져, 고가용성 및 장애대응을 손쉽게 대처할 수 있다는 점 입니다.
NoSQL은 하나의 스키마 형태가 아니기 때문에, Scale out (수평적 확장)이 굉장히 용이합니다.(개별적 Scale up도 용이합니다.)
따라서 각 Node들 이라고 불리우며 DB를 잘게 쪼개서 저장하고 관리하게 됩니다.
따라서 각 노드들은 모든 데이터를 처리하지 않고 본인이 맡은 바의 데이터만 관리하기 때문에 속도도 빠르며, 장애에 대한 대처도 빠릅니다.
❌ 무분별한 데이터 저장은 위험을 초래한다!
이렇게 설명으로만 들어본다면, "엥? 이렇게 편하면 다 NoSQL쓰지 뭐하러 RDBMS를 써?" 라는 생각이 드실수도 있습니다.
하지만, 제약없는 시스템은 일종의 무법지대와 같기 때문에 굉장한 주의와 철저한 설계를 기반으로 관리가 이루어져야합니다.
또한 DB를 분산시키는 경우에는 반드시 "DB간의 동기화"의 문제는 반드시 해결이 되어야만 합니다.
이처럼 NoSQL및 분산시스템 이라는 개념이 도입 되는것은 결코 쉽지 않기 때문에
많은 실무자들은 NoSQL은 필요에 의해서, 일부 서비스에만 도입하는 식으로 채택 되어지고 있습니다.
분산 시스템으로 넘어가면서 알아야 할 설계규칙인 CAP 와 PACELC 등은 다음에 다뤄보도록 하겠습니다.🙂👍
모두, 필요에 따라서 전체, 혹은 일부에 NoSQL을 채택하여, 좋은 서비스가 제공되길 바라겠습니다!
'[Database]' 카테고리의 다른 글
Database 트랜잭션 개념과 4가지 특징 ACID (0) | 2024.12.14 |
---|---|
[Database] CDC (Change Data Capture) 란 무엇일까? (0) | 2024.12.08 |
[Database] Index란? (0) | 2024.11.23 |