PROJECT/Past-Forward

NoSQL vs SQL, 뭐가 더 좋을까?

yangheeb 2024. 2. 13. 17:33

 

 

안녕하세요.  yangheeb입니다 :)

오늘은 NoSQL과 SQL 각각의 장단점에 대해 알아보고자 합니다.

 

더불어 현재 진행하는 프로젝트에서

왜 MySQL(RDB) 데이터베이스 사용이 더 적합한지에 대해 생각해 보겠습니다.

 

 

 

 

** 데이터베이스 개념 

  

01. MySQL (관계형 DBMS)


 

ㅇ MySQL은 Oracle Corporation의 관계형 데이터베이스 관리 시스템(RDBMS)

ㅇ 테이블에 데이터를 저장하고 데이터베이스 액세스를 위해 SQL(구조적 쿼리 언어)을 사용

ㅇ MySQL 개발자가 애플리케이션의 데이터에 액세스해야 하는 경우 조인이라는 프로세스를 통해 여러 테이블의 데이터를 병합

ㅇ MySQL에서는 데이터베이스 스키마를 미리 정의하고 테이블의 필드 간 관계를 제어하는 규칙을 설정

 

 

다시 말해, 모든 열과 그와 관련된 데이터 유형이 사전에 파악 되어야 

애플리케이션이 데이터를 데이터베이스에 작성할 수 있다.

 

 

 

 

02. NoSQL (비관계형 DB)


 

비관계형 데이터베이스 유형을 가리킴

ㅇ 관계형 테이블과는 다른 형식으로 데이터를 저장

ㅇ 언어마다 관습화된 API, 선언적 구조의 쿼리 언어, 쿼리별 언어를 사용하여 질의할 수 있음

 

 

NoSQL 데이터베이스에서 데이터 사전에 스키마를 정의하지 않아도 저장될 수 있습니다. 

작업을 진행하는 동시에 데이터를 정의하는 방식으로

빠르게 데이터를 작성하고 반복할 수 있는 능력을 얻게된다는 얘기입니다.

또한 그래프 기반, 열 지향, 문서 지향 또는 키-값 저장소 등 특정 비즈니스 요구 사항 수행에 적합합니다.

 

 

 

# MongoDB

MongoDB는 데이터를 JSON과 유사한 문서로 저장하는 NoSQL 데이터베이스 

문서는 관련 정보를 함께 저장하고 MongoDB 쿼리 언어(MQL)를 사용

필드는 문서마다 다를 수 있으며, 문서는 자체 설명적이므로 시스템에 문서 구조를 선언할 필요가 없음

필요에 따라 스키마 유효성 검사를 사용하여 각 컬렉션에 대한 데이터 거버넌스 제어를 적용할 수 있음

 

 

 

개발자가 NoSQL 데이터베이스를 선호하는 이유

NoSQL 데이터베이스는 변화하는 요구사항에 빠르게 적응하기에 애자일 개발 방법론에 자연스럽게 부합합니다.

www.oracle.com

 

MongoDB Vs MySQL

We compare MongoDB & MySQL's performance, speed, and scalability

www.mongodb.com

 

 

 

두 가지의 DB를 정리해보자면 다음과 같습니다.

 

  RDB NoSQL
데이터 모델 - 테이블과 행으로 이루어진 고정된 스키마
- 정확한 구조에 따라 데이터 저장
- 각 테이블은 관계를 통해 연결
- 동적인 스키마를 가지고 있거나 스키마가 전혀 없을 수 있음
- 주로 문서, 키-값 쌍, 열 지향등으로 표현됨
확장성 - 수직 확장 (vertical scaling)이 주로 사용됨
- 성능 향상을 위해 더 강력한 하드웨어로 업그레이드하는 방식
- 수평 확장 (horizontal scaling)이 주로 사용됨
- 데이터베이스 서버를 추가하거나 분산 데이터베이스를 사용하여 시스템의 성능을 향상
트랜잭션 및
일관성
- ACID(원자성,일관성,고립성,지속성) 트랜잭션을 지원
- 데이터 일관성이 중요한 경우에 적합
- 일관성 모델이 다양함
- 일부 NoSQL DB는 일관성을 희생하는 대신 가용성이나 분할 허용성을 강조할 수 있음
데이터 쿼리 언어 - SQL을 사용하여 데이터를 조회 및 조작 - 고유한 쿼리 언어를 제공
- SQL을 사용하지 않는 경우가 많음
용도 및 사용 사례 - 복잡한 관계를 가지는 데이터 또는 정형화된 데이터에 적합
- 트랜잭션 처리와 데이터 일관성이 중요한 시스템에 사용됨
- 대규모 데이터나 다양한 형식의 데이터를 다루는데 유용함
- 읽기 및 쓰기 처리가 많은 대규모 웹 응용프로그램, 로그 및 이벤트 기록, 소셜 미디어 등에 적합

 

https://chat.openai.com/share/2f9f2030-eb5e-4673-b058-5217cba565fc

 

 

 

 

 

 

** 어떤 DB가 past-forward 프로젝트에 적합할까 ? 

 

우리가 구현하게 될 KPT 회고보드는 데이터의 형태에 따라서 데이터베이스를 선택하는 것이 중요합니다.

이 프로젝트는 NoSQL DB도 사용 가능하지만.

필자는 NoSQL을 사용하지 않고 MySQL DB로도 진행 가능하다 생각합니다.

 

 

NoSQL 데이터베이스 사용 사례


NoSQL 데이터베이스

뚜렷하지 않거나 관련이 없거나 빠르게 변화하는 데이터를 처리하는 데 가장 적합합니다.

데이터베이스 스키마를 지시하는 애플리케이션에서 직관적으로 사용할 수 있으며, 다음과 같은 애플리케이션에 사용할 수 있습니다.

  • 더 빠르고 반복적인 개발을 가능하게 하는 유연한 스키마가 필요합니다.
  • 강력한 데이터 일관성과 데이터 테이블 간의 관계 유지(참조 무결성)보다 성능을 우선시합니다.
  • 서버 간 샤딩을 통한 수평 확장이 필요합니다.
  • 반구조화된 데이터와 구조화되지 않은 데이터를 지원합니다.

KPT 회고방식을 사용할 'past - forward 프로젝트'에서는

특히 빠르게 변화하는 데이터를 처리하는 것에 중점을 두는 것이 아니기에

이러한 NoSQL DB를 무조건적으로 필요할 것 같지는 않다 생각합니다.

 

 

 

 

MySQL 사용 사례 


 

 

  1. 전통적인 비즈니스 애플리케이션:
    • 회계 시스템, CRM 시스템 등과 같이 데이터 간의 관계가 중요한 전통적인 비즈니스 애플리케이션에서 MySQL을 사용할 수 있습니다.
  2. 온라인 쇼핑몰:
    • 제품, 주문, 고객 정보 등을 효과적으로 다룰 수 있으며, 트랜잭션 처리와 정확한 데이터 일관성이 필요한 경우 MySQL을 사용할 수 있습니다.
  3. 데이터 분석 및 보고 시스템:
    • 정형 데이터를 기반으로 한 데이터 분석 및 보고 시스템에서 MySQL을 사용하여 복잡한 쿼리 및 조인을 수행할 수 있습니다.
  4. CMS (콘텐츠 관리 시스템):
    • 블로그, 뉴스, 웹페이지 등을 관리하는데 MySQL은 효과적입니다. 데이터의 일관성과 구조가 중요한 경우에 적합합니다.

 

 

 

 

MySQL 또는 다른 관계형 데이터베이스를 사용하는 경우,

구조화된 데이터 및 강한 일관성이 필요한 상황에서 적합할 수 있습니다.

 

 

아래는 KPT 회고보드에 사용될 수 있는 적절한 데이터의 예시입니다.

 

  1. 사용자 정보:
    • 사용자의 이름, 이메일 주소, 가입 일자 등과 같은 사용자 정보는 일반적으로 정형화되고 구조화된 데이터입니다. MySQL은 이러한 사용자 데이터를 효과적으로 저장하고 관리할 수 있습니다.
  2. 회고 항목:
    • 회고보드에서 각 항목은 주제, 작성자, 생성 일자와 같은 속성을 가질 수 있습니다. MySQL은 이러한 정형화된 데이터를 테이블에 저장하고 복잡한 쿼리를 통해 효과적으로 관리할 수 있습니다.
  3. 댓글 및 답글:
    • 사용자들이 회고 항목에 댓글을 달거나 답글을 작성하는 경우, 이러한 데이터는 각각의 댓글과 답글에 대한 관계를 가질 수 있습니다. MySQL은 이러한 관계형 데이터를 효과적으로 다룰 수 있습니다.
  4. 팀 및 프로젝트 정보:
    • 회고보드가 여러 팀 또는 프로젝트를 다루는 경우, 각 팀이나 프로젝트에 대한 정보를 테이블에 저장할 수 있습니다. MySQL은 팀 및 프로젝트 간의 관계를 관리하는 데 적합합니다.
  5. 통계 및 리포트 데이터:
    • MySQL은 복잡한 집계 및 통계 처리를 지원하므로, 회고보드에서는 특정 주제에 대한 통계 및 리포트 데이터를 효과적으로 저장하고 분석할 수 있습니다.

https://chat.openai.com/share/9bef0044-d1c5-43ef-91c6-85c2415a67c3

 

 

프로젝트의 요구 사항에 따라 두 유형의 데이터베이스를 비교하여 선택하는 것이 좋습니다.

 

MySQL은 관계형 데이터에 강점이 있고,

NoSQL 데이터베이스는 유연한 데이터 모델과 확장성을 강조하는 경우가 많지만

 

KPT 회고방식을 사용할 'past - forward 프로젝트'에서는

특히 빠르게 변화하는 데이터를 처리하는 것에 중점을 두는 것이 아니기에

이러한 NoSQL DB를 무조건적으로 필요할 것 같지는 않다 생각합니다.