관계형 데이터베이스인 RDB 는 하나의 공통된 특성 아래 데이터베이스의 특성에 따라 분류되는 반면, NoSQL에 속한 데이터베이스들은 관계형 데이터모델을 사용하지 않는다는 공통점만 같으면 몽고DB, CouchDB, 카산드라, LevelDB 등 저마다 다른 특성이 있습니다.
- 조핸 오스카슨(Johan Oskarsson) 이 2009년 6월 샌프란시스코에서 조직한 모임에서 관계형 데이터 모델을 쓰지않는 연구를 빠른 시간에 다양한 사람들과 논의하고 싶었고, 가장 효과적인 방법은 트위터의 해시태그를 이용하는 방법이였습니다. 짧고, 해시태그로 중복되지 않으면서도, 부정적이여서 사람의 관심을 이끌 수 있는 단어를 생각하다가 # NoSQL 를 찾았고, 이는 현재 비관계형 데이터베이스 기술을 아우르는 말이 되었습니다.
관계형 데이터베이스(RDB) vs. NoSQL(비관계형 데이터베이스)
데이터베이스는 크게 관계형 데이터베이스(RDB)와 비관계형 데이터베이스로 구분됩니다.
40년이 넘도록 데이터베이스 시장에서 주도적 역할을 한 관계형 데이터베이스는 SQL을 기반으로 하고, 비교적 최근부터 사용된 NoSQL은 Not Only SQL의 약자로 비관계형 데이터 모델을 다루고 있습니다.
관계형 데이터베이스와 NoSQL은 만들어진 방식, 저장하는 정보의 종류, 그리고 저장하는 방법 등에 차이가 있습니다.
SQL 앞에 붙은 'No' 에서 알 수 있듯이 데이터가 고정되어 있지 않은 데이터베이스 형태들을 주로 가리킵니다.
관계형 데이터베이스에서는 테이블을 사전에 정의를 한 뒤에 그에 알맞은 형태의 데이터만 넣을 수 있습니다.
관계형 데이터베이스는 행(row)과 열(column)로 구성된 테이블에 데이터를 저장합니다. 각각의 행은 하나의 속성에 대한 정보를 저장하고, 열에는 각각의 데이터 형식에 맞는 데이터가 저장됩니다.
특정한 형식을 지키기 때문에 데이터가 제대로 추가되었다면 꺼낼 때에는 수월합니다.
SQL을 활용해 원하는 정보를 쿼리할 수가 있죠.
즉, 관계형 데이터베이스에서는 스키마가 뚜렷이 보입니다. 테이블 간에 관계들이 어떻게 되는지 알 수가 있죠.
대표적인 관계형 데이터베이스에는 MySQL, Oracle, SQLite, PostgresSQL, MariaDB가 있습니다.
그렇다고 NoSQL이 스키마가 반드시 없는 것은 아닙니다. 관계형 데이터베이스에서는 데이터를 쓸 때 스키마에 맞춘다면, 반면에 NoSQL에서는 데이터를 읽어올 때 스키마에 따라 읽어옵니다. 다른 말로는 'schema on read' 라고도 합니다. 읽어올 때만 데이터 스키마가 사용되기 때문에 쓸 때는 따로 정해진 것이 없다는 의미는 아닙니다. 어떻게 쓰냐가 결국에는 어떻게 읽어와야 하는지에 대한 영향을 미칩니다.
SQL과 NoSQL의 차이점
데이터 저장(Storage)
- 관계형 데이터베이스는 SQL을 이용해서 데이터를 테이블에 저장합니다. 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장해야 합니다.
- NoSQL은 위에서 설명된 것처럼, key-value, document, graph, wide-column 형식등의 방식으로 데이터를 저장할 수 있습니다.
스키마(Schema)
- SQL을 사용하려면 형식이 고정된 스키마가 필요합니다. 처리하려는 데이터 속성별로 열(column)에 대한 정보가 미리 정해져야 한다는 의미입니다.
스키마는 나중에 변경할 수 있지만, 그럴 경우 전체 데이터베이스를 수정하거나 오프라인(down-time)으로 전환할 필요가 있습니다. - NoSQL은 스키마의 형태가 보다 동적입니다.
행을 추가할 때 즉시 열을 함께 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 된다는 장점이 있습니다.
쿼리(Querying)
- 쿼리는 데이터베이스에 대해서 정보를 요청하는 행동을 의미합니다.
관계형 데이터베이스는 테이블의 형식과 테이블간의 관계에 맞춰서 데이터를 요청합니다.
그래서 SQL과 같은 구조화된 쿼리 언어를 정보 요청에 사용합니다. - 비관계형 데이터베이스의 쿼리는 데이터 그룹 자체를 조회하는 것에 초점을 두고 있습니다. 그래서 구조화 되지 않은 쿼리 언어로도 데이터 요청이 가능합니다. UnQL(UnStructured Query Language)이라고 말하기도 합니다.
확장성(Scalability)
- SQL 기반의 관계형 데이터베이스는 보통 수직적으로 확장합니다.
데이터베이스가 구축된 하드웨어의 성능을 많이 이용하기 때문에 고비용이 들게 됩니다.
복수의 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만 매우 복잡하고 시간이 많이 소모되는 것이 보통입니다. - NoSQL로 구성된 데이터베이스는 수평적으로 확장됩니다.
많은 트래픽을 처리할 수 있도록 NoSQL 데이터베이스를 위한 서버를 추가적으로 구축하는 것이 편합니다.
또한 저렴한 범용 하드웨어나 클라우드 기반의 인스턴스에 NoSQL 데이터베이스를 호스팅할 수 있어서, 수직적 확장보다 비용 효율성이 높습니다.
SQL과 NoSQL 중에서 어떤 것을 사용해야 하나요?
데이터베이스를 구축하는 방법을 선택하는 것에 완벽한 솔루션은 없습니다.
그렇기 때문에 많은 개발자들은 서비스에 맞고 유저의 요구를 충족하기 위해 관계형, 비관계형 데이터베이스를 모두 사용하고 있습니다.
NoSQL 기반의 비관계형 데이터베이스가 확장성이나 속도에서 뛰어나다고 해도 고차원으로 구조화된 SQL 기반의 데이터베이스가 더 좋은 성능을 보여주는 서비스도 있습니다.
여러 사용 사례를 살펴보고 적절한 데이터베이스를 선택하는 것이 중요합니다.
아래에서 NoSQL의 예시를 보겠습니다.
NoSQL 기반의 데이터베이스를 사용하는 케이스
1. 데이터의 구조가 거의 또는 전혀 없는 대용량의 데이터를 저장하는 경우
대부분의 NoSQL 데이터베이스는 저장할 수 있는 데이터 유형에 제한을 설정하지 않습니다. 필요에 따라서 데이터의 새 유형을 추가할 수 있습니다. 그렇기 때문에 소프트웨어 개발에 정형화 되지 않은 많은 양의 데이터가 필요한 경우, NoSQL을 적용하는 것이 효율적일 수 있습니다.
2. 클라우드 컴퓨팅 및 저장공간을 최대한 활용하는 경우
클라우드 기반으로 데이터베이스 저장소를 구축하면 저렴한 비용의 솔루션을 제공 받을 수 있습니다.
소프트웨어에 데이터베이스의 확장성이 중요하다면 여러 데이터 센터에 걸쳐서 많은 번거로움 없이 확장할 수 있는 NoSQL 데이터베이스를 사용하는 것이 좋습니다.
3. 빠르게 서비스를 구축하고 데이터 구조를 자주 업데이트 하는 경우
NoSQL 데이터베이스의 경우 스키마를 미리 준비할 필요가 없기 때문에 빠르게 개발하는 과정에 매우 유용합니다.
시장에 빠르게 프로토타입을 출시해야 하는 경우가 해당할 수 있습니다.
또한 소프트웨어 버전별로 많은 다운타임(데이터베이스 서버 오프라인) 없이 데이터 구조를 자주 업데이트 해야하는 경우, 일일이 스키마를 수정해주어야 하는 관계형 데이터베이스 보다는 NoSQL 기반의 비관계형 데이터베이스를 사용하면 좋습니다.
다음 포스팅에서는 MongoDB에 대해서 알아보도록 하겠습니다.
감사합니다.
mongo db란?
Mongo DB란? Mongo DB는 강력하고 확장 가능하며 무료 오픈소시 NoSQL 데이터 베이스입니다. Mongo DB는 2009년 2월달에 처음 출시되었으며 이후 최고의 NoSQL 데이터베이스의 위치를 차지했습니다. MongoDB는
balang.tistory.com
'Data Engineer' 카테고리의 다른 글
Apache Spark란? (0) | 2023.09.08 |
---|---|
카프카(Kafka)란? (0) | 2023.09.07 |
Docker CLI 명령어 (0) | 2023.08.17 |
WSL vs VM(virtual machine) 어떤 것이 더 좋을까? (0) | 2023.08.16 |
What is VPC(Virtual Private Cloud)? (0) | 2023.08.15 |