개발/지식

데이터베이스에 대한 기본적인 이해 (NoSQL)

람무 2023. 5. 16. 11:31

SQL 기반의 데이터베이스는 데이터간의 관계를 정의하고 테이블, 컬럼 등을 사용하여 데이터를 저장했다면 NoSQL은 주로 key-value 형태로 데이터를 저장하는 방식 입니다.

SQL에서는 데이터를 테이블과 각 칼럼에 따라 조회했다면 NoSQL은 key값을 찾고 해당 key값에 대응하는 값들을 찾아내는 방식이라고 볼 수 있겠습니다.

다양한 NoSQL의 종류

NoSQL은 key-value 방식이 가장 기본적인 데이터 모델이지만 해당모델 뿐만 아니라 다르게 활용될 수 있는 여러 방식이 있습니다. 각 특징을 살펴보겠습니다.

가장 기본적인 방식 입니다. 간단하고 빠른 데이터 접근을 할 수 있고 주로 메모리기반의 데이터베이스에서 사용됩니다. 데이터간의 관계를 표현하지 않기 때문에 단순한 조회 및 삽입 작업에 적합하다고 볼 수 있습니다.
해당 구조의 가장 대표적인 모델은 Redis 입니다.

  • 세션관리 : 웹 애플리케이션에서 클라이언트의 세션 정보를 관리할 때 사용합니다.
  • 캐싱 : 데이터를 미리 저장해두고 재사용하여 속도를 향상시킵니다.
  • 메시키 큐 : 분산 시스템에서 메시지 큐로 사용할 수 있습니다.

데이터를 Document 라는 스토어에 JSON 또는 XML 형태의 문서로 저장합니다. 문서간 관계표현이 가능하여 쿼리 또는 데이터 조작이 가능합니다. 제가 지금 작성하고 있는 블로그나 콘텐츠 관리용도, 실시간 분석 및 로깅, 전자상거래 등 다방면으로 활용 가능합니다. 형태가 지켜질 수 있다면 여러 종류나 모양으로 데이터 저장이 가능해서 유연성이 높다고 볼 수 있습니다. 대표적으로 MongoDB, CouchDB가 있습니다.

데이터를 노드와 간선으로 표현한 그래프 형태 입니다. 복잡한 관계를 가진 데이터를 효율적으로 표현할 수 있습니다. 보통 column 이나 document가 필요하지는 않지만 노드사이의 관계를 알아야 하는 경우에 사용될 수 있습니다. 네트워크 분석이나 소셜 그래프 (ex. 인스타그램 팔로우) 같은 곳에서 활용될 수 있습니다.

컬럼기반의 데이터 모델로 행과 열의 조합으로 데이터를 저장합니다. 아무래도 모양때문에 SQL과 비슷하게 여길 수 있는 부분이 있습니다만 차이점이 존재합니다.

구분 SQL wide-column
확장성 수직적 확장 수평적 확장
스키마 정해진 스키마 동적 스키마
쿼리언어 SQL언어를 사용하여 CRUD 특화 쿼리언어 제공 각 NoSQL 데이터베이스마다 고유한 쿼리언어
데이터 모델 테이블 간 관계를 통한 데이터 조직화 및 관리 key-value 쌍으로 데이터를 저장
데이터 모델링 정규화를 통한 데이터 구조화 비정규화된 형태로 데이터 저장

Cassandra 데이터베이스가 가장 대표적인 예시로 볼 수 있습니다. 데이터가 각 열에 저장되며 무수한 데이터가 저장될 수 있도록 계속 확장되는 형태라 볼 수 있습니다.

NoSQL 모델의 장단점

  • 장점
    • 데이터를 순차적으로 저장하지 않고 한꺼번에 저장이 가능하여 속도가 빠릅니다. 또한 조회도 빠르게 처리할 수 있습니다.
    • 스키마가 유연하여 데이터 모델을 신속하게 변경하고 확장할 수 있습니다.
    • 수평적 확장이 용이하고 대용량 데이터 처리 및 고성능 요구사항을 충족할 수 있습니다.
    • 다양한 데이터 모델(key-value, document 등등)을 제공합니다.
  • 단점
    • 쿼리 기능이 제한됩니다.
    • 일부 데이터에서 일관성이 제한되어 일관성 유지가 어렵습니다.
    • 다양한 모델을 제공하다보니 적절한 모델을 선정하는 과정에서 개발자의 전문성을 필요로 합니다.
    • 데이터가 중복될 수 있어서 중복 된 데이터 수정을 위한 자원이 발생합니다.
    • 스키마가 없어서 데이터 구조 보장이 안되다보니 데이터 구조를 결정하기 어렵습니다.

 

결론적으로 NoSQL은 정확한 데이터 구조를 모르는 상태에서 데이터가 확장되거나 변경 될 일이 많을 것으로 예상될 때 사용합니다.