728x90
반응형
예전에 이직을 위해서 면접을 봤었는데 명확한 답을 내놓지 못해서 이번에 정리를 하려고 한다. 당시에 나는 key-value의 빠른 접근과 비정형 데이터의 취급이 용이한 Nosql의 장점과 RDB의 트랜잭션(ACID 보장)등을 얘기했던 거 같다. 하지만 되돌아온 답변은 '그런데 mysql 에도 json 타입을 제공하는 칼럼도 있어서 비정형을 지원하는데 어떻게 생각하냐?'라는 질문이 있었는데 이 질문에 대해 답변을 잘 못한 것 같았다.
일단, DB를 선택하는 기준은 프로젝트의 요구사항, 데이터 구조, 확장성 필요성, 사용 사례 등에 따라 결정된다고 하면 된다. 사실상 다들 아는 말이지만 말을 잘할 수 있는지 알아듣게 할 수 있는지가 중요하다.
일단 간단히 표부터 보면서 비교해보자.
기준 | NoSQL | MySQL |
데이터 구조 | 유연함 (스키마 없음) | 고정적 (스키마 필요) |
확장성 | 수평적 확장성 (스케일 아웃) | 수직적 확장성 (스케일 업) |
트랜잭션 | 제한적 | 강력한 지원 |
복잡한 쿼리 | 덜 최적화됨 | 잘 지원됨 |
성능 | 대량 데이터 처리 유리 | 소규모 트랜잭션에 적합 |
사용 사례 | IoT, 실시간 분석, 소셜 네트워크 | 금융, ERP, CRM |
- NoSQL을 선택:
- 유연한 데이터 모델과 높은 확장성이 필요할 때.
- 비정형 데이터 또는 자주 변경되는 데이터를 다룰 때.
- 실시간 데이터 처리 및 대규모 트래픽이 요구될 때.
- MySQL을 선택:
- 데이터 무결성과 관계 관리가 중요한 경우.
- 트랜잭션이 중요한 비즈니스 로직이 있는 경우.
- 표준 SQL을 통해 데이터를 다뤄야 할 때.
자 그러면 아까 이야기했던 mysql의 JSON과 NoSQL의 차이점을 표로 확인해 보자.
기준 | mysql - JSON | NoSQL |
데이터 저장 | JSON 데이터 타입 제공 | JSON 형태 본질적으로 지원 |
확장성 | 수직적 확장성 (스케일 업) | 수평적 확장성 (스케일 아웃) |
성능 | 적은 트래픽에서 적합 | 대규모 데이터 처리에 최적화 |
트랜잭션 지원 | ACID 강력 지원 | 일부 NoSQL에서 제한적 |
유연성 | 관계형 DB 제약 존재 | 스키마리스 데이터 모델 |
mysql 이 JSON을 제공하지만 한계점이 있다.
- 복잡한 쿼리 성능
- JSON 데이터를 다룰 때, 복잡한 쿼리나 대량의 데이터 처리에서는 NoSQL보다 성능이 떨어질 수 있습니다.
- JSON 데이터를 처리하는 함수는 비용이 높은 경우가 많습니다.
- 유연성 제한
- JSON 데이터는 저장 시 유연하지만, 업데이트 및 구조 변경이 빈번하다면 관리가 어려워질 수 있습니다.
- NoSQL의 스키마리스 모델에 비해 유연성이 제한적.
- 수평적 확장성 부족
- MySQL은 수직적 확장(스케일 업)에 초점이 맞춰져 있어, NoSQL의 분산 처리 시스템만큼 수평적 확장이 용이하지 않습니다.
- JSON 데이터 통합 문제
- JSON 데이터는 일반적으로 관계형 데이터베이스의 스키마와 혼합 사용할 때, 데이터 정규화 및 복잡성이 증가할 수 있습니다.
- 데이터 모델이 커질수록 관리 및 유지보수가 어려워질 수 있습니다.
즉, MySQL의 JSON 데이터 타입은 비정형 데이터를 처리하는 데 유용하며, 관계형 데이터베이스의 장점과 JSON의 유연성을 결합할 수 있지만! JSON 데이터가 시스템의 핵심 구조가 되고, 확장성 및 성능이 중요한 요소라면 NoSQL 솔루션(MongoDB, Cassandra 등)을 선택하는 것을 추천한다. 다음에는 Nosql 중에서 왜 Redis를 써야 하는지도 한 번 알아보는 글을 써야겠다.
728x90
반응형
'개발자의삶 > mysql' 카테고리의 다른 글
Mysql 과 MongoDB를 선택할 때 고려할 점 및 비교 (0) | 2022.04.06 |
---|
댓글