Post

TIL(20241230) [SQL vs NoSQL]

TIL(20241230) [SQL vs NoSQL]

SQL과 NoSQL에 대해 정리를 해보려고 한다. 이전에 개인프로젝트로 작업했던 Creator_hub에서 MongoDB를 사용했는데, MongoDB를 선택했던 기술적 의사결정에 또한 차근차근 정리해보려고 한다.

📌 SQL

  • 관계형 데이터베이스로 데이터를 테이블 형태로 저장
  • 행과 열로 구성됨
  • 각 테이블에는 고정된 스키마를 가짐
  • ACID를 지원하며 높은 데이터 무결성을 보장함
  • 관계형 데이터나 복잡한 쿼리에 적합
  • 금융,회계 등 데이터 일관성과 안정성이 중요한 시스템에 적합
  • Scale-up(수직적 확장), 더 강력한 하드웨어(CPU나 메모리)로 데이터베이스 성능을 향상 시킴

ex)

MySQL, PostgreSQL, Oracle, MariaDB 등

📌 NoSQL

  • 비관계형 데이터베이스로 데이터를 유연한 구조로 저장함
  • 즉, 스키마가 고정되어 있지 않으며 유연함
  • 데이터 가용성과 확장성이 장점
  • 일부는 ACID를 지원하기도 하지만 제한적
  • 대규모의 비정형 데이터, 빈번한 데이터 변경, 분산시스템에 적합
  • 소셜미디어, 추천시스템 등 데이터가 빠르게 증가하거나 구조가 유동적일 경우 적합
  • Scale-out(수평적 확장), 서버를 추가하여 데이터 분산처리

ex)
1) 문서형 - MongoDB 등 2) Key-Value - Redis 등 3) 그래프 - Neo4j 등

간단하게 SQL과 NoSQL에 대해서 정리릏 해보았다.

💡 Creator_hub에서 MongoDB를 사용한 이유?

먼저 해당 프로젝트는 Youtube Data API를 사용하였으며 주요 서비스는 인기 키워드 분석과 추천 시스템이다.

사실 이 프로젝트에 첫 아이디어는 유투버를 시작하려고 하는 사람들을 위해서 트렌드 분석에 집중하여 개발하려고 했지만 해당 API가 지원해주는 데이터가 한정적이라 이후에 방향을 바꾼 케이스다.

어쨌든.. 내가 RDB를 사용하지 않고 MongoDB를 선택한 이유에 대해서 결론적으로 말하자면

1) 스키마가 유연해야 했다.

  • 데이터가 유동적으로 변한다. (데이터 속성이 있을 수도 없을수도 있다, 특정 필드는 Array로 저장되는 속성도 있다.)

  • 사용자가 원하는 데이터가 있을 수도 있고 없을 수도 있다.(추천시스템 로직이 수행될 때 사용자가 원하는 추천동영상이 없을 수도 있다** 사실 이 부분이 이 서비스에 최대 장점이자 단점이다..)

2) 데이터 규모(?)

  • 대용량 데이터라고 하긴 좀 .. 아쉬움이 있지만 실시간 데이터 처리를 위해 3시간 마다 API를 호출해 데이터를 가져온다. 이 때 DB에 insert되는 데이터량이 1000건정도 되었다.
  • 가장 결정적이유: Insert와 Read가 주를 이루는 서비스다.

이러한 이유로 인해서 MongoDB를 선택하였고 Json 형식으로 데이터가 저장되어 직관적으로 확인하기 편리했다.

⭐ MongoDB를 사용할 때 주의해야 할 것!

1) 기본 트랜잭션이 단일 문서에 국한되어 있고, 다중 문서 작업에서는 ACID 보장이 되기 어렵기 때문에 데이터가 정확히 처리 되었는지에 대한 비지니스로직을 작성해주어야 한다. 2) NoSQL경우 중복을 허용하기 때문에 이러한 중복된 데이터를 어플리케이션에서 관리해야함(이러한 이유 때문에 read속도가 빠른 이유가 될 수 있다)

또한, 해당 프로젝트를 통해 Spring Data MongoDB를 사용해볼 수 있어서 그리고 프로젝트 class에서 RDB와는 다른 필드정의 등 좋은 경험이 되었던 것 같다.

This post is licensed under CC BY 4.0 by the author.