데이터를 다루는 서비스라면 필수적으로 사용해야하는게 데이터베이스인데요,
데이터베이스에 대한 개념과 관계형 데이터 베이스와 비관계형 데이터베이스인 RDBMS 와 NoSQL 의 차이점 및 각 데이터베이스를 어떤 상황에서 사용해야하는지에 대해 잘 설명된 글이 있어 공유드립니다.
간략하게 내용을 요약하면 다음과 같습니다.
📌 데이터베이스(Database, DB) 란?
데이터베이스는 쉽게 말해서 데이터의 집합입니다.
DB에는 다양한 유형이 존재하는데요. 계층형(Hierarchical), 망형(Network), 관계형(Relational), 객체지향형(Object-Oriented), 객체관계형(Object-Relational) 등이 있습니다.
📌 RDBMS(관계형 데이터베이스) 이란?
관계형 데이터베이스는 고정된 행(row)과 열(column)로 구성된 테이블에 데이터를 저장합니다. 각 열에는 하나의 속성에 대한 정보가 저장되고, 행에는 각 열의 데이터 형식에 맞는 데이터가 저장됩니다.
관계형 데이터베이스에는 핵심적인 특징이 두 가지 있습니다.
1. 데이터가 정해진 데이터 스키마에 따라 테이블에 저장된다는 점
2. 데이터가 관계를 통해 여러 테이블에 분산된다는 점
📌 NoSQL(비관계형 데이터베이스) 이란?
비관계형 데이터베이스 SQL, 즉, 관계형 데이터베이스를 제외한 나머지 유형을 말합니다. 비관계형 데이터베이스를 칭할 때 NoSQL(또는 NoSQL 데이터베이스)라고 부릅니다.
NoSQL 데이터베이스는 테이블 형식이 아니며, 관계형 테이블과는 다른 방식으로 데이터를 저장합니다. 데이터 유형에 따라 다양한 유형을 갖추고 있으며, 주요 유형으로는 문서, 키 값, 와이드 컬럼, 그래프 등이 있습니다. NoSQL이라고 해서 꼭 스키마가 없는 것은 아닙니다. 유연한 스키마를 제공하며, 대량의 데이터와 높은 사용자 부하에서도 손쉽게 확장할 수 있다는 점이 큰 장점입니다. 또한 데이터를 읽어올 때 스키마에 따라 데이터를 읽어 옵니다.
📌 RDBMS VS NoSQL, 차이점은 무엇인가?
✔️ 데이터 저장(Storage)
- RDBMS: 데이터를 SQL 언어를 통해 테이블에 저장합니다. 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장해야만 합니다.
- NoSQL: key-value, document, wide-column, graph 등의 방식으로 데이터를 저장합니다.
✔️ 스키마(Schema)
- RDBMS: 고정된 스키마가 필요. 처리하려는 데이터 속성별로 열(column)에 대한 정보를 미리 정해야만 데이터 처리가 가능. 스키마에 대한 변경은 가능하지만, 데이터베이스 전체를 수정하거나 오프라인으로 전환해야 할 수도 있기 때문에 최대한 신중하게 스키마를 정의해야할 필요가 있다.
- NoSQL: 유연하게 스키마의 형태를 관리. 행을 추가할 때 즉시 새로운 열을 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 된다.
✔️ 쿼리(Query)
- RDBMS: 테이블의 형식과 테이블 간의 관계에 맞춰 데이터를 요청. 요청하는 방식이 정해져 있기 때문에 SQL 언어와 같이 구조화된 쿼리 언어를 사용.
- NoSQL: 데이터 그룹 자체를 조회하는 것에 초점을 두고 있기 때문에 구조화되지 않은 쿼리 언어로도 데이터 요청이 가능. 이를 UnQL이라고도 부른다.
✔️ 확장성(Scalability)
- RDBMS: 수직적으로 확장(Scale Up)하며 높은 메모리와 CPU를 사용. 데이터베이스가 구축된 하드웨어의 성능을 많이 이용하므로 비용이 비싼 편이며, 여러 개의 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만 매우 복잡하고 시간이 오래 걸리는 것이 단점.
- NoSQL: 수평적으로 확장(Scale Out)이 가능. NoSQL 데이터베이스를 위한 서버를 추가로 구축하게 되면 많은 트래픽을 편리하게 처리할 수 있고 SQL보다 저렴한 범용 하드웨어나 클라우드 기반의 인스턴스에 NoSQL 데이터베이스를 호스팅 할 수 있어 상대적으로 비용이 저렴한 것이 장점.
📌 관계형 데이터베이스(RDBMS)를 사용해야 할 때
- 데이터베이스의 ACID 성질을 준수해야 하는 소프트웨어를 개발하는 경우
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우
- 변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우
📌 NoSQL 데이터베이스를 사용해야 할 때
- 정확한 데이터의 구조를 알 수 없거나 변경, 확장될 가능성이 있는 경우
- 읽기는 자주 해도 데이터 변경은 자주 없는 경우
- 막대한 양의 데이터를 다뤄야 해서 데이터베이스를 수평으로 확장해야 하는 경우
📚 원문
- https://www.whatap.io/ko/blog/173/index.html?utm_source=facebook&utm_medium=sns_ad&utm_campaign=whatap_blog&utm_content=RDBMS_NoSQL&fbclid=PAAaZeq1mANqwrEgzgFo04B5gL6OZMhV2Jr71jAHyfiKRHq-TO8swPQr8C6KM_aem_AWUe5ZHYvT-75Unh_RPU0mt1GfoAeO7ZNE199clumiI8S60cG6xOHYGtSxTOXRgniniBAUO8b5jJb4lWZmyf1nAK
📚 함께 보면 좋은 글
- 💡 NoSQL 데이터베이스 종류: https://careerly.co.kr/comments/66826?utm_campaign=self-share