서비스가 대용량 트래픽을 처리해야 할 때, 관계형 데이터베이스 시스템은 수평적으로 확장하기가 어려울 수 있습니다. 이는 높은 읽기 및 쓰기 부하를 처리해야 하는 서비스에서 성능 저하를 초래할 수 있습니다. 이러한 문제를 해결하기 위해, NoSQL 데이터베이스가 생겨났습니다.
NoSQL 데이터베이스는 관계형 데이터베이스와 달리 구조화되지 않은 데이터를 저장하는 데 특화되어 있습니다. 이러한 데이터베이스는 수평적으로 확장하기가 쉬우며, 높은 처리량과 응답 시간을 보장할 수 있습니다. 이러한 이유로, 대용량 트래픽을 처리해야 하는 서비스에서 NoSQL을 사용할 수 있습니다.
그러나 NoSQL을 사용할 때에도 몇 가지 고려해야 할 사항이 있습니다. 이를 위해 CAP 이론을 살펴보면, 일관성(Consistency), 가용성(Availability), 네트워크 분할 내성(Partition Tolerance) 세 가지 요소 중 두 가지만 선택할 수 있다는 것을 알 수 있습니다.(더 자세한 내용은 본 블로그 ‘CAP 이론’ 포스팅을 참고해 주세요)
NoSQL 데이터베이스는 일관성과 가용성 중 하나를 포기할 수 있습니다. 일관성을 포기(AP를 만족하는 데이터베이스)하는 NoSQL 데이터베이스는 데이터가 일관성 없이 저장되며, 가용성은 높아지게 됩니다. 반대로 가용성을 포기(CP를 만족하는 데이터베이스)하는 NoSQL 데이터베이스는 일관성이 보장되며, 데이터를 잃어버리지 않게 됩니다.
대용량 트래픽을 처리해야 하는 서비스에서는 가용성이 매우 중요합니다. 따라서 일관성을 포기하는 NoSQL 데이터베이스를 사용할 수 있습니다. 이러한 데이터베이스는 응답 시간이 빠르며, 대용량 트래픽을 처리할 수 있습니다.
예를 들어, 대용량 트래픽을 처리하는 온라인 게임 서비스에서는 게임 데이터를 NoSQL 데이터베이스에 저장할 수 있습니다. 이렇게 하면 게임 서버에서 대규모 트래픽을 처리할 수 있으며, 사용자가 게임을 즉시 시작할 수 있습니다.
따라서, 서비스가 대용량 트래픽을 처리해야 할 때, NoSQL 데이터베이스를 사용하면 일관성을 포기하고 그 대신 가용성과 파티션 허용 오차를 높인 데이터베이스를 사용할 수 있습니다. 이를 통해 대규모 트래픽 에도 고가용성을 유지하며 트래픽 처리가 가능해집니다. 그러나 NoSQL 데이터베이스를 사용하게 되면, 데이터 일관성에 대한 우려가 있습니다. 이를 해결하기 위해서는 데이터 모델링과 적절한 데이터베이스 선택이 중요합니다.
데이터 모델링은 데이터베이스에 저장될 데이터의 구조를 설계하는 과정입니다. 이 과정에서 데이터의 일관성을 유지할 수 있는 방법을 고려해야 합니다. 예를 들어, NoSQL 데이터베이스에서는 중복 데이터를 사용하는 것이 일반적입니다. 이를 통해 일관성을 유지하면서 데이터의 가용성을 높일 수 있습니다.
데이터베이스 선택은 NoSQL 데이터베이스 중에서도 적절한 데이터베이스를 선택하는 것이 중요합니다. 각 NoSQL 데이터베이스는 자체적인 특징과 장단점을 가지고 있습니다. 예를 들어, MongoDB는 유연한 스키마와 높은 가용성을 제공하며, Cassandra는 대규모 데이터 처리와 높은 확장성을 제공합니다. 따라서, 서비스의 요구사항에 맞는 데이터베이스를 선택해야 합니다.
결론적으로, 대용량 트래픽을 처리해야 하는 서비스에서 NoSQL 데이터베이스를 사용하면 가용성이 높아지며, 대용량 트래픽을 더 효과적으로 처리할 수 있습니다. 그러나 데이터 일관성에 대한 우려가 있으므로, 데이터 모델링과 적절한 데이터베이스 선택, 샤딩 전략 등을 고려해야 합니다. 이를 통해 NoSQL 데이터베이스를 효과적으로 사용할 수 있습니다.
그렇다면 현재 진행중인 GoodsForYou 프로젝트에서 사용 중이거나 사용하게 될 여러 데이터 중 어떤 데이터가 가장 NoSQL을 사용하기에 적합하다 볼 수 있을까요? 결론부터 말씀드리자면 상품 데이터라고 생각합니다. 상품 데이터는 자주 읽히지만 상품이 수정되는 빈도는 낮기 때문에, NoSQL에 적합하다고 생각합니다. 이 말은 동시에 여러 사용자의 수정이 일어나 데이터 정합성 문제가 일어날 확률이 적기 때문에 데이터의 일관성을 희생하지만 고 가용성과, 파티션 오차를 높일 수 있는 NoSQL을 사용하기에 적합하다고 생각했습니다. 또한 NoSQL 데이터베이스는 RDBMS처럼 복잡한 트랜잭션 관리나 ACID를 준수할 필요가 없으므로 RDBMS보다 읽기 속도가 빠르다는 장점이 있어, 방대한 양의 상품 데이터를 읽기에 적합하다는 장점도 있어 NoSQL을 사용하기에 적합한 데이터는 상품 데이터라는 결론을 내리게 되었습니다
'프로그래밍 > 프로젝트' 카테고리의 다른 글
도커 컴포즈 사용 시 DB 초기화 문제 해결 과정 (0) | 2023.03.18 |
---|---|
캐싱은 언제 적용하는게 좋을까? (2) | 2023.03.07 |
GoodsForYou 패키지 구조에 대한 고민(포트와 어댑터) (0) | 2023.02.25 |
인증 방식으로 세션 VS 토큰 어떤걸 선택해야 할까? (0) | 2023.01.17 |
다중 서버 환경에서 사용자 로그인 구현시 세션 관리 방법으로 어떤걸 선택해야할까? (0) | 2023.01.16 |