-
웹 지도 클러스터링 기법을 활용할 때 NoSQL 계열의 데이터베이스가 유리한 이유는 무엇인가?Today I Learned 2022. 10. 17. 22:48
현재 구상하고 있는 그룹 스포츠 경기 참여 및 장소 대여 웹 애플리케이션에서는 모집글을 보면서 팀을 찾거나 장소를 대여하기 위해 장소를 찾는 과정에서 웹 지도를 사용하려 하고 있다. 웹 지도에서는 마커를 이용해 모집글이 올라온 위치를 지도에 표시하는 방식을 사용하려 하고 있다.
지난 주말, 트레이너님께서 애플리케이션에 웹 지도 개념이 들어갈 경우 클러스터링이라는 개념이 사용될 수 있다는 점과, 웹 지도에 사용되는 데이터를 관리하는 데이터베이스는 관계형 데이터베이스보다는 NoSQL 형태의 데이터베이스가 더 적합하다는 언질을 주셨었다.
이번 주 동안 진행하는 과정에는 애플리케이션의 기능을 정의한 뒤, 기능에 사용될 기술 스택을 선정해야 한다. 이때 선택한 기술 스택이 다른 기술 스택 대비 우위에 있는 점을 들면서 기술 스택의 합당성을 증명해야 한다. 이를 위해 클러스터링과 NoSQL에 대해 간략히 알아보았다.
위의 예시는 애플리케이션의 지도에서 마커는 이렇게 표시된다 정도로 작성하긴 했지만, 만약 데이터가 많아진다면 다음과 같이 화면을 수많은 마커들이 뒤덮어 브라우저의 데이터가 낭비되는 상황이 발생할 수 있다.
따라서 클러스터링 기법을 사용해 특정 스케일에서는 유사한 위치에 위치한 마커들을 묶어 하나의 마커로 표현하는 기법을 사용할 수 있다.
사진에서 확인할 수 있듯, 클러스터링이란 데이터 안에서 특성을 가진 군집을 찾는 분석 방법으로, 데이터 특성의 유사도를 측정해서 유사도가 높은 집단끼리 묶어주는 방법을 의미한다고 한다. 이때 유사한 집합들의 대표값을 이용한다는 특징이 있는데, 사진에서는 클러스터링된 많은 좌표들의 평균값의 위치에 해당 클러스터 좌표를 나타내는 것을 예시로 생각해볼 수 있겠다.
한편 NoSQL의 간략한 개념과 관계형 데이터베이스와의 차이점을 비교해본 내용은 다음과 같다.
NoSQL이란?
- 기존의 관계형 데이터베이스 시스템의 주요 특성을 보장하는 ACID(Atomic, Consistency, Integrity, Duarabity) 특성을 제공하지 않지만, 뛰어난 확장성 등의 특성을 갖는 비관계형, 분산 데이터 베이스
- JSON data와 같은 구조를 사용하여 관계형 데이터 또는 정형 데이터가 아닌 데이터, 즉 비정형, 비구조적 데이터를 비관계형 데이터 저장소에 저장하고 처리하는 구조
- 초고용량 데이터 처리 등 성능에 특화하기 위한 목적
NoSQL과 관계형 데이터베이스의 차이점
- 관계형 모델을 사용하지 않으며 테이블간의 조인 기능 없음
- 비 SQL 인터페이스를 통한 데이터 액세스
- 대부분 여러 대의 데이터베이스 서버를 묶어서(클러스터링) 하나의 데이터베이스를 구성
- 관계형 데이터베이스에서는 지원하는 Data 처리 완결성 (Transaction ACID 지원) 미보장
- 데이터의 스키마와 속성들을 동적 정의 (Schema-less)
- 데이터베이스의 중단 없는 서비스와 자동 복구 기능지원
- 다수가 Open Source로 제공
- 확장성
- NoSQL은 클러스터 하나에서 서버 여러 개를 이용하도록 설계되었기 때문에 확장 시 사용 가능한 새 서버를 추가하는 방식으로 가능하다. (수평 스케일링)
- 유연성
- NoSQL 데이터베이스는 고정된 테이블 구조가 필요하지 않다. 즉, 데이터베이스 설계를 변경하지 않고도 필요한 새로운 속성을 동적으로 추가할 수 있다.
NoSQL이 SQL에 비해 유리한 경우
- 정해지지 않은 형식의 데이터가 추가되는 경우가 잦은 경우
- Read나 Write가 이루어지는 경우가 Update가 이루어지는 경우보다 많은 경우
- 데이터의 Join이 잘 이루어지지 않는 경우
- 데이터의 양의 증감에 따라 수평 스케일링이 필요한 경우가 잦은 경우
웹 지도 서비스의 경우 방대한 양의 데이터가 추가되거나 삭제되는 등의 동작이 이루어질 수 있다. 이 경우 데이터베이스 서버를 확장하는 등의 수평적 스케일링(Scale up) 과정이 필요해질 수 있는데, 관계형 데이터베이스에서는 이러한 스케일링에 취약하기 때문에 스케일링을 유연하게 수행할 수 있는 NoSQL이 성능 상 유리하다고 볼 수 있을 것이다.
References
- 클러스터링
- 지도에서의 클러스터링 기법 활용
- NoSQL
'Today I Learned' 카테고리의 다른 글
React는 다른 프론트엔드 프레임워크에 비해 어떤 이점이 있을까? (0) 2022.10.19 Spring을 쓰긴 쓸 건데, 도대체 왜 써야 할까? (0) 2022.10.18 테스트도 결국 좋은 애플리케이션을 만들기 위한 과정인 것 (레벨 테스트 10일차 작업 회고) (0) 2022.10.14 여전히 통제가 안 되는 영역이 있다는 불안감 (레벨 테스트 9일차 작업 회고) (0) 2022.10.13 jest.fn()을 부여한 변수에는 호출 기록이 쌓인다 (0) 2022.10.12