제 프로젝트는 사용자가 특정 차트를 고르면, 코스피 코스닥 전 종목의 과거(10년) 차트들을 모두 탐색하여 가장 유사한 차트 10개 정도를 골라 사용자에게 보여주는 것이 목표입니다.
similar chart finder
내 종목의 차트는 상승하는 차트일까요?
3.35.36.208
분산 데이터베이스 시스템 이해
저는 현재 프로젝트에 MySQL을 사용하고 있습니다. SQLD도 그렇고 대학 수업들도 그렇고 아무래도 대부분 전통적인 데이터베이스 시스템을 다루어 분산 데이터베이스 시스템을 접할 기회가 없었습니다. 하지만 분산 데이터베이스 시스템도 요즘 현업에서 많이 사용한다고 들었습니다.
그래서 오늘은 분산 데이터베이스 시스템, 특히 그중에서도 많이 쓰인다는 MongoDB에 관해 공부해 보겠습니다. 혹시 제 프로젝트에도 적용할 여지가 있는지도 확인해 봐야겠네요.
분산 데이터베이스 시스템이란?
분산 데이터베이스 시스템은 데이터베이스 관리 시스템(DBMS)이 네트워크를 통해 연결된 여러 컴퓨터에 데이터를 분산하여 저장하고 관리하는 시스템입니다. 이를 통해 데이터의 확장성, 가용성, 내구성을 향상할 수 있습니다.
분산 데이터베이스 시스템의 주요 특성
1. 확장성
분산 데이터베이스 시스템은 확장성이 뛰어납니다. 데이터 또는 트래픽이 증가함에 따라 서버를 추가하여 시스템을 확장할 수 있으며, 이는 성능 저하 없이 시스템을 계속해서 운영할 수 있게 해 줍니다.
2. 높은 가용성
분산 데이터베이스 시스템은 데이터를 여러 노드에 복제하여 저장하므로, 한 노드가 실패하더라도 다른 노드에서 데이터를 액세스 할 수 있습니다. 이는 시스템의 가용성을 높이며, 장애 시 데이터 손실을 방지해 줍니다.
3. 지리적 분산
분산 데이터베이스 시스템은 데이터를 여러 지리적 위치에 분산하여 저장할 수 있습니다. 이는 사용자가 가장 가까운 서버에서 데이터를 빠르게 액세스 할 수 있게 해 주며, 지역적 재해에 대한 내구성을 제공합니다.
3. 분산 데이터베이스 시스템의 종류
1. NoSQL 데이터베이스
NoSQL(Not Only SQL) 데이터베이스는 기존의 관계형 데이터베이스의 제약을 벗어나 대량의 데이터를 효율적으로 처리하기 위해 개발되었습니다. MongoDB, Cassandra, Redis 등이 대표적인 NoSQL 데이터베이스입니다.
2. NewSQL 데이터베이스
NewSQL 데이터베이스는 관계형 데이터베이스의 ACID(Atomicity, Consistency, Isolation, Durability) 특성을 유지하면서도 분산 처리를 지원합니다. Google Spanner, CockroachDB 등이 NewSQL 데이터베이스의 예입니다.
내가 지금 사용하는 MySQL과 다른 점?
1. 데이터 저장 위치
전통적인 데이터베이스 시스템은 일반적으로 단일 서버에 데이터를 저장합니다. 반면에 분산 데이터베이스 시스템은 이름에서 알 수 있듯이 데이터를 여러 서버에 분산하여 저장합니다. 이로 인해 데이터의 확장성과 가용성이 향상됩니다.
2. 확장성 (Scalability)
일반적으로 전통적인 데이터베이스 시스템은 "스케일 업" 방식으로 확장됩니다. 즉, 더 강력한 하드웨어를 가진 서버로 업그레이드하는 방식입니다. 반면에 분산 데이터베이스 시스템은 "스케일 아웃" 방식을 사용하여 확장됩니다. 즉, 추가적인 서버를 네트워크에 추가함으로써 확장하는 방식입니다.
3. 내구성 (Durability)
분산 데이터베이스 시스템은 데이터를 여러 노드에 복제하여 저장함으로써 고가용성을 제공합니다. 이는 단일 노드에서 문제가 발생하더라도 데이터가 손실되지 않도록 보장합니다. 반면에 단일 서버를 사용하는 전통적인 데이터베이스에서는 해당 서버에 문제가 발생할 경우 데이터 손실의 위험이 있습니다.
4. 복잡성
전통적인 데이터베이스 시스템은 일반적으로 설정이 더 간단하고 관리가 쉽습니다. 반면에 분산 데이터베이스 시스템은 데이터의 일관성 유지, 데이터 복제 및 복구, 네트워크 지연 등 추가적인 복잡성을 관리해야 합니다.
5. 트랜잭션 처리
전통적인 데이터베이스 시스템은 ACID(원자성, 일관성, 고립성, 지속성) 특성을 완벽하게 지원하며, 이는 트랜잭션 처리에 있어 중요한 역할을 합니다. 분산 데이터베이스 시스템에서는 이러한 특성을 완벽하게 지원하는 것이 어렵습니다. 대신, 분산 데이터베이스는 일반적으로 BASE(기본적으로 가용, 부드럽게 일관, 결국 일관) 특성을 따르는 경향이 있습니다.
위와 같이 MySQL과 같은 전통적인 데이터베이스 시스템과 분산 데이터베이스 시스템은 각자의 장단점이 있으며, 이는 사용 사례에 따라 선택해야 합니다.
제 서비스는 간단하게 MySQL을 사용하는 게 더 좋아 보이네요.
MongoDB를 알아보자
MongoDB는 NoSQL 데이터베이스의 한 종류로, 스케일 아웃(scale-out)을 이용한 대용량 데이터 처리와 클라우드 기반 인프라에 최적화된 현대적인 데이터베이스입니다. JSON 형태의 문서 지향적 모델을 사용하여 데이터를 저장하고, 이를 통해 데이터의 확장성과 유연성을 높이는 것이 특징입니다.
MongoDB의 특징
2.1. 문서 지향적 모델
MongoDB는 데이터를 BSON(Binary JSON) 형식의 문서로 저장합니다. 이 형식은 사람이 읽을 수 있는 JSON 형식과 유사하며, 다양한 데이터 타입을 지원합니다. 문서 지향적 모델은 데이터 구조의 유연성을 제공하며, 복잡한 계층 관계를 표현하는 데 적합합니다.
2.2. 분산 데이터 처리
MongoDB는 분산 데이터 처리를 지원합니다. 샤딩(sharding)을 통해 데이터를 여러 서버에 분산 저장하고, 복제 세트(replica set)를 통해 데이터의 고가용성을 보장합니다.
2.3. 지원 기능
MongoDB는 풍부한 쿼리 언어, 인덱싱, 실시간 집계, 텍스트 검색, 그래프 처리 등 다양한 기능을 제공합니다. 이를 통해 개발자는 복잡한 데이터 작업을 효과적으로 수행할 수 있습니다.
MongoDB 도입 고려사항
MongoDB는 많은 장점을 가지고 있지만, 도입 전에 고려해야 할 사항들이 있습니다.
- 데이터 일관성 : MongoDB는 분산 데이터베이스의 특성상 데이터 일관성을 완벽하게 보장하지는 않습니다. 따라서, ACID 특성이 필수적인 애플리케이션에는 사용에 주의가 필요합니다.
- 자원 사용량 : MongoDB는 고성능의 작업을 처리하기 위해 상당한 양의 시스템 자원을 요구할 수 있습니다. 따라서, 하드웨어 및 인프라 측면에서 충분한 자원을 확보하는 것이 중요합니다.
MongoDB의 사용사례
MongoDB는 그 유연성과 확장성 때문에 다양한 상황에서 사용될 수 있습니다. 몇 가지 예시를 들어보겠습니다.
- 실시간 분석: MongoDB는 대용량의 데이터를 실시간으로 처리하는 능력이 있습니다. 이런 특성은 실시간 분석, 모니터링, 리포팅 등의 애플리케이션에 적합합니다. 예를 들어, 사용자의 행동 패턴을 실시간으로 분석하고 이를 통해 사용자 경험을 최적화하는 서비스에 MongoDB가 사용될 수 있습니다.
- 콘텐츠 관리 및 배달: MongoDB는 다양한 형태의 콘텐츠를 저장하고 관리하는 데 유용합니다. 블로그 포스트, 비디오, 음악 파일 등 다양한 형태의 콘텐츠를 저장하고, 이를 사용자에게 효율적으로 전달하는 서비스에 적합합니다.
- 모바일 앱: MongoDB는 위치 기반 데이터를 저장하고 처리하는 데 효과적입니다. 이는 위치 기반 서비스를 제공하는 모바일 앱에 아주 유용합니다. 또한, MongoDB의 확장성은 앱 사용자가 급격히 증가하는 상황에도 대응할 수 있게 해 줍니다.
- IoT: MongoDB는 다양한 디바이스와 센서에서 생성되는 대량의 데이터를 저장하고 처리하는 데 적합합니다. 이를 통해 IoT 디바이스에서 생성된 데이터를 실시간으로 분석하고, 이를 기반으로 의사결정을 할 수 있게 됩니다.
- 카탈로그: 웹사이트의 상품 카탈로그에는 수백만 개의 상품 정보가 포함될 수 있습니다. MongoDB는 이런 대량의 정보를 유연하게 저장하고, 사용자의 검색 쿼리에 따라 빠르게 결과를 반환하는 데 유용합니다.
'웹 아키텍쳐' 카테고리의 다른 글
웹 아키텍처14 - 고가용성을 위한 시스템과 전략 (23.11.14) (0) | 2024.02.17 |
---|---|
웹 아키텍처13 - CDN(Content Delivery Network) (23.11.13) (0) | 2024.02.17 |
웹 아키텍처11 - 오케스트레이션 도구와 Kubernetes (0) | 2024.02.17 |
웹 아키텍처9 - 컨테이너화/가상화 도구와 Docker (0) | 2024.02.17 |
웹 아키텍처10 - 서버리스 아키텍처와 AWS Lambda (0) | 2024.02.17 |