MongoDB - NoSQL
안녕하세요. 오늘은 MongoDB를 공부하기 전 NoSQL이 무엇인지 알고 싶어서 이렇게 간단하게 공부한 것을 포스팅하려 합니다.
Node.Js 공부를 하면서 많은 영상과 서적들에서 RDB인 MySQL과 NoSQL인 MongoDB를 동시에 소개한곤 합니다. 또한 학교에 강연 오시는 분들도 NoSQL을 한번 공부해보는 것이 좋을 것이라고 자주 언급을 하셔서 NoSQL의 한 종류인 MongoDB를 공부하기 전 NoSQL이 무엇인지 그리고 NoSQL과 RDB와 어떤 차이점이 있는지에 대해 간략하게 공부를 하면서 기록한 것들을 공유하고자 합니다.
저도 아직은 용어가 많이 낯설고 익숙치 않은 개념이라 최대한 제가 이해한 부분에 대해서만 언급하려고 하지만 틀린 부분이 있을 수 있으므로 많은 피드백 부탁드리겠습니다.
관계형 데이터베이스(RDB)
우리가 현재 가장 많이 사용하고 있고 많은 학부에서도 데이터베이스 강의를 진행할 때 관계형 데이터베이스(RDB)를 가르치곤 합니다. 저 또한 학부 강의에서는 오라클 데이터베이스를 통해 관계형 데이터베이스와 SQL을 배웠고 여러 프로젝트에서는 MySQL을 사용하였습니다.
우리가 알고 있는 관계형 데이터베이스는 대략 다음과 같은 장단점을 갖습니다.
장점
- 범용적이고 안정적이며 데이터의 일관성을 보장
- 복잡한 형태의 쿼리가 가능하여 원하는 데이터를 추출 가능 (
Join
등의 연산 지원)
즉 RDB는 데이터의 신뢰성과 안정성이 보장되며 테이블 내의 여러 데이터 제약을 통해 데이터의 중복을 방지합니다.
단점
- 테이블 간의 관계를 맺는 과정이 굉장히 복잡하다.
- 대량의 데이터 입력, 조회 시 성능이 저하된다.
- 테이블 구조의 변경 시 많은 패널티가 따른다.
하지만 관계형 데이터베이스가 생겨난 시대와는 다르게 현재는 인터넷의 보급과 SNS의 발달로 단순하면서 대규모의 비정형 데이터들이 늘어나게 되어 기존의 RDB만으로는 처리하기 힘든 상황이 발생하게 되었습니다.
비정형 데이터는 형태도 없고, 연산 가능하지도 않은 것. 우리가 흔히 말하는 SNS가 이에 속하며 텍스트, 영상, 음성 등의 형태로 나타납니다.
이러한 대량의 비정형 데이터가 늘어남에 따라 정형화된 데이터를 처리하는데 특화된 RDB로는 감당하기가 힘든 것입니다. 이를 대응하기 위해 생겨난 시스템이 바로 NoSQL입니다.
NoSQL
NoSQL은 Not Only SQL의 약자로 단순히 SQL뿐만 아니라 부가적인 기능을 지원한다는 의미입니다. NoSQL의 장점과 단점을 서술하기 전에 단점이면서 장점인 부분을 먼저 언급하도록 하겠습니다.
기본적으로 NoSQL은 최초 테이블 생성 시 테이블 간의 관계를 정의하지 않습니다. 이로 인한 장점과 단점이 모두 존재합니다. 기본적으로 여러 테이블 간의 관계를 정의하지 않기 때문에 보다 빠른 속도의 설계가 가능해집니다. 하지만 역시 관계를 정의하지 않았기 때문에 RDB처럼 Join
과 같은 테이블 간의 복잡한 쿼리가 불가능하므로 특정 데이터를 추출하는데 어려움이 있을 수 있습니다.
이제 NoSQL의 장담점을 간략하게 설명하자면 다음과 같습니다.
장점
- 데이터 분산에 용이
- 복제 및 장애대응에 용이
- 데이터를 고속으로 처리(입력, 조회)에 특화된 성능
적은 수의 고성능 머신에 저장하는 RDB와는 다르게 NoSQL은 기본적으로 여러 일반 서버 머신에 분산 저장이 가능합니다. 또한 이렇게 분산된 데이터는 서로 상호복제 하여 저장하기 때문에 하나의 서버에 문제가 생겨도 데이터의 유실이나 서비스를 제공하는데 크게 무리가 없습니다. 또한 Key-Value 저장 기법을 사용하여 데이터의 입력과 조회의 처리 속도가 매우 뛰어납니다.
단점
- 다양하고 복잡한 데이터 쿼리는 불가능
- 기존의 데이터를 업데이트하는데 오랜 시간이 걸림
- 데이터의 일관성이 보장되지 않는다.
위에서 언급하였듯이 테이블간의 관계를 정의하지 않았기 때문에 다양하고 복잡한 쿼리를 통한 데이터의 추출은 불가능하며 기존에 저장한 분산된 데이터의 업데이트를 할 경우 저장 된 서버 머신들을 (수십대에 분산되어 저장될 수 있음) 모두 갱신해야하기 때문에 시간이 오래걸립니다. 이러한 서버 간의 갱신 시간 차이로 데이터의 일관성이 보장되지 않을 수 있습니다.
즉 NoSQL은 기존의 관계형 데이터베이스보다 유연하며 대용량의 데이터 처리를 필요로하는 특화된 분야에서 비정형 데이터들을 분산 저장하여 관리할 수 있는 시스템입니다. (빅데이터 등)
용어 차이
이렇게 NoSQL과 RDB는 서로 다른 시스템이기 때문에 우리가 RDB에서 익숙하게 사용했던 용어 역시 NoSQL에서는 큰 차이를 보입니다. 용어를 확실히 익혀두시길 바랍니다.
RDBMS | NoSQL |
---|---|
Database | Database |
Table | Collection |
Tuple/Row | Document |
Column | Key/Field |
Primary Key | Primary Key (_id) |
마무리
오늘은 이렇게 간략하게 NoSQL과 RDB의 비교를 통해 NoSQL이 무엇인지 살펴보았습니다. 이를 공부하면서 느낀 것은 NoSQL과 RDB는 각각의 시스템의 사용 용도에 따라 무엇을 선택하느냐의 차이지 단순히 어느것이 더 좋은가에 차이는 아니라는 것을 느꼈습니다. 읽어보시고 틀린 부분이 존재한다면 많은 지적 부탁드립니다. 감사합니다.
참고자료