데이터 베이스
데이터베이스(Database, DB)란 무엇일까요? 데이터베이스는 쉽게 말해서 데이터의 집합입니다. DB에는 다양한 유형이 존재하는데요. 계층형(Hierarchical), 망형(Network), 관계형(Relational), 객체지향형(Object-Oriented), 객체관계형(Object-Relational) 등이 있다.
계층형 DB
계층형 DB(Hierarchical DB)는 처음 등장한 DB의 개념입니다. 트리(tree) 형태로 구성되어 있기 때문에 처음 구성해 놓으면 이를 변경하기가 까다롭고, 또 다른 데이터를 찾아가는 것이 비효율적이기 때문에 지금은 사용하지 않고 있습니다.
망형 DB
망형 DB(Network DB)는 계층형 DB의 문제점을 개선하기 위해 등장했습니다. 계층형과 다르게 데이터끼리도 연결된 유연한 구조이지만 프로그래머가 모든 구조를 이해해야만 프로그램 작성이 가능하다는 단점 때문에 계층형과 마찬가지로 지금은 거의 사용하지 않고 있습니다.
관계형 DB
관계형 DB(Relational DB)는 줄여서 RDB라고도 부르며 현재 대부분의 DB가 관계형 데이터베이스의 형태로 사용되고 있습니다. 일반적인 관계형 데이터베이스(RDB)는 테이블, 행, 열의 정보를 구조화하는 방식입니다. RDB는 테이블(table)이라는 최소 단위로 구성되며, 이 테이블은 하나 이상의 열(column)과 행(row)으로 이루어져 있습니다. 모든 데이터는 처리 및 데이터 쿼리를 효율적으로 수행하기 위해 일련의 테이블에서 행과 열로 저장됩니다.
관계형 데이터베이스에는 테이블을 조인하여 정보 간 관계 또는 링크를 설정할 수 있는 기능이 있어, 여러 데이터 포인트 간의 관계를 쉽게 이해하고 정보를 얻을 수 있습니다.
DBMS란?
- DB와 함께 많이 언급되는 DBMS는 Database Management System의 약자로 데이터베이스를 관리하고 운영하는 소프트웨어입니다. 다양한 데이터가 저장된 데이터베이스는 여러 사용자 혹은 응용 프로그램에 데이터를 공유해야 하고 동시에 접근할 수 있어야 합니다.
- 이렇게 동시에 접근할 수 있도록 해 주는 것이 DBMS의 역할 대표적인 관계형 DBMS로는 MySQL, 오라클(Oracle), MariaDB, PostgreSQL 등이 있다.
RDBMS(관계형 데이터베이스)이란?
- 관계형 데이터베이스는 고정된 행(row)과 열(column)로 구성된 테이블에 데이터를 저장
- 각 열에는 하나의 속성에 대한 정보가 저장되고, 행에는 각 열의 데이터 형식에 맞는 데이터가 저장.
- 관계형 데이터베이스에는 핵심적인 특징 두 가지
- 데이터가 정해진 데이터 스키마에 따라 테이블에 저장된다는 점과 데이터가 관계를 통해 여러 테이블에 분산된다는 점
- 조금 더 쉽게 말하자면 테이블의 구조와 데이터 타입 등을 사전에 정의해야 더 효율적으로 사용
- 테이블에 정의된 내용에 알맞은 형태의 데이터만 삽입할 수 있다.
- 따라서 데이터를 정확하게 입력했다면 매우 수월 할 수 있다.
- 데이터가 정해진 데이터 스키마에 따라 테이블에 저장된다는 점과 데이터가 관계를 통해 여러 테이블에 분산된다는 점
RDBMS(관계형 데이터베이스) 특징
- 비정형 또는 반정형 데이터: 유연한 스키마를 사용하여 비정형 또는 반정형 데이터를 저장합니다.
- 분산 데이터베이스: 대부분의 NoSQL 데이터베이스는 분산 환경에서 동작할 수 있습니다.
- BASE 특성: 일관성 대신 유연성, 가용성, 분할 내성을 강조하는 BASE (Basically Available, Soft state, Eventually consistent) 특성을 가집니다.
NoSQL(비관계형 데이터베이스) 란?
- NoSQL은 비관계형 데이터베이스로 SQL, 즉, 관계형 데이터베이스를 제외한 나머지 유형을 말한다.
- 비관계형 데이터베이스를 칭할 때 NoSQL(또는 NoSQL 데이터베이스)라고 부른다.
- 최근 웹 애플리케이션이 보다 보편화되고 복잡해지면서 NoSQL 데이터베이스의 인기가 높아졌다.
- NoSQL 데이터베이스는 테이블 형식이 아니며, 관계형 테이블과는 다른 방식으로 데이터를 저장.
- 데이터 유형에 따라 다양한 유형을 갖추고 있으며, 주요 유형으로는 문서, 키 값, 와이드 컬럼, 그래프 등이 있다.
- NoSQL이라고 해서 꼭 스키마가 없는 것은 아닙니다. 유연한 스키마를 제공하며, 대량의 데이터와 높은 사용자 부하에서도 손쉽게 확장할 수 있다는 점이 큰 장점
- 데이터를 읽어올 때 스키마에 따라 데이터를 읽어 옵니다.
NoSQL(비관계형 데이터베이스) 특징
- 대용량 및 확장성이 요구되는 경우: 대규모의 데이터를 다루고 확장성이 필요한 경우.
- 빠른 개발 및 유연성이 필요한 경우: 스키마가 자주 변경되거나 개발 속도가 중요한 경우.
- 비정형 또는 반정형 데이터: 텍스트, 로그, 소셜 미디어와 같이 데이터의 구조가 자주 바뀌는 경우.
RDBMS VS NoSQL, 차이점은 무엇인가?
RDBMS | NoSQL | |
데이터 저장(Storage) | - SQL 언어를 통해 테이블에 저장 - 미리 작성된 스키마를 기반으로 정해진 형식에 맞게 데이터를 저장 |
- key-value, document, wide-column, graph 등의 방식으로 데이터를 저장 |
스키마(Schema) | - 고정된 스키마가 필요 - 처리하려는 데이터 속성별로 열(column)에 대한 정보를 미리 정해야만 데이터 처리가 가능한 것 - 스키마는 나중에 변경할 수 있지만, 데이터베이스 전체를 수정하거나 오프라인으로 전환해야 할 수도 있기 때문에 처음에 신중하게 스키마를 정의 |
- 관계형 데이터베이스에 비해 유연하게 스키마의 형태를 관리 - 행을 추가할 때 즉시 새로운 열을 추가할 수 있고, 개별 속성에 대해서 모든 열에 대한 데이터를 반드시 입력하지 않아도 된다. |
쿼리(Query) | - SQL 기반의 관계형 데이터베이스는 테이블의 형식과 테이블 간의 관계에 맞춰 데이터를 요청 - 요청하는 방식이 정해져 있기 때문에 SQL 언어와 같이 구조화된 쿼리 언어를 사용 |
- 데이터 그룹 자체를 조회하는 것에 초점을 두고 있기 때문에 구조화되지 않은 쿼리 언어로도 데이터를 요청할 수 있다. ➡️ UnQL |
확장성(Scalability) | - SQL 기반의 관계형 데이터베이스는 수직적으로 확장하며 높은 메모리와 CPU를 사용 - 데이터베이스가 구축된 하드웨어의 성능을 많이 이용하므로 비용이 비싼 편 - 여러 개의 서버에 걸쳐서 데이터베이스의 관계를 정의할 수 있지만 매우 복잡하고 시간이 오래 걸리는 것이 단점 |
- NoSQL로 구성된 데이터베이스는 반대로 수평적으로 확장 - NoSQL 데이터베이스를 위한 서버를 추가로 구축하게 되면 많은 트래픽을 편리하게 처리할 수 있다는 장점 - SQL보다 저렴한 범용 하드웨어나 클라우드 기반의 인스턴스에 NoSQL 데이터베이스를 호스팅 할 수 있어 상대적으로 비용이 저렴한 것이 장점 |
RDBMS VS NoSQL, 어떤 때 어떤 데이터베이스를 사용해야 할까?
관계형 데이터베이스(RDBMS)를 사용해야 할 때
- 데이터베이스의 ACID 성질을 준수해야 하는 소프트웨어를 개발하는 경우
- ACID란 Atomicity(원자성), Consistency(일관성), Isolation(격리성), Durability(지속성)의 약어로, 데이터베이스에서 실행되는 하나의 트랜잭션(Transaction)에 의한 상태의 변화를 수행하는 과정에서, 안전성을 보장하기 위해 필요한 성질을 뜻합니다.
- 관계를 맺고 있는 데이터가 자주 변경되는 애플리케이션의 경우
- 변경될 여지가 없고 명확한 스키마가 사용자와 데이터에게 중요한 경우
NoSQL 데이터베이스를 사용해야 할 때
- 정확한 데이터의 구조를 알 수 없거나 변경, 확장될 가능성이 있는 경우
- 읽기는 자주 해도 데이터 변경은 자주 없는 경우
- 막대한 양의 데이터를 다뤄야 해서 데이터베이스를 수평으로 확장해야 하는 경우
서비스의 특징에 맞는 데이터베이스를 선택을 해야 한다.
- 데이터의 형태와 복잡성: 정형화된 데이터와 복잡한 관계를 가진 경우에는 RDB를 고려한다. 반면에 비정형 또는 반정형 데이터, 대용량 데이터의 경우에는 NoSQL이 적합할 수 있다.
- 트랜잭션 요구사항: ACID 특성이 반드시 필요한 경우에는 RDB를 선택, NoSQL은 일관성보다 유연성과 확장성에 중점을 둔다.
- 개발 속도와 유연성: 프로젝트의 변동성이 높고 빠른 개발이 필요한 경우에는 NoSQL이 유용할 수 있다.
- 시스템의 확장성: 대용량 및 분산 시스템에서는 NoSQL이 더 적합할 수 있다.