본문 바로가기
개발 일지

산책 개발일지 1 : NoSQL 데이터베이스 설계 (Cloud Firestore)

by 그랴 2024. 1. 11.

개발 계획을 세운 후, 팀원과 함께 기획서를 보며 필요한 데이터에 대한 논의를 진행했습니다.

우선 저희 팀에는 백엔드 개발자가 없었기 때문에 (이번에도) Cloud Firestore를 사용하게 되었습니다

 

지금까지 진행했던 대부분의 프로젝트에서 Cloud Firestore를 사용했지만,

제대로 알고 써본 적은 없었던 것 같아서 이번 기회를 통해 NoSQL 데이터베이스 설계에 대해서 알아보고 연습해보는 시간을 가졌습니다.

 


☁️ Cloud Firestore

Google Cloud 인프라를 기반으로 하는 유연하고 확장 가능한 NoSQL 클라우드 데이터베이스를 사용해 클라이언트 측 개발 및 서버 측 개발에 사용되는 데이터를 저장하고 동기화하세요.
  • 구글에서 지원하는 NoSQL 데이터베이스
  • 장기 데이터 저장 및 검색을 위해 설계됨
  • 비동기 처리를 위해 설계된 SQL과 유사한 쿼리 구문을 사용하여 참조를 기반으로 데이터를 검색하기 위한 프로그래밍 방식 인터페이스를 제공

Cloud Firestore의 주요 기능

  • 유연성 : 유연한 계층적 데이터 구조를 지원하며, 컬렉션으로 정리되는 문서에 데이터를 저장하고 하위 컬렉션 외에도 복잡한 중첩된 개체를 문서에 포함할 수 있음
  • 표현형 쿼리 : 쿼리를 사용해 문서를 가져올 수 있으며, 쿼리에 여러 필터를 서로 연결해 적용할 수 있음
  • 실시간 업데이트 : 데이터 동기화를 사용해 연결된 모든 기기의 데이터를 업데이트함
  • 오프라인 지원 : 앱에서 많이 사용되는 데이터를 캐시해 기기가 오프라인 상태더라도 데이터를 쓰고 읽고 수신 대기하고 쿼리할 수 있으며, 온라인 상태로 전환되면 Cloud Firestore에서 모든 로컬 변경사항을 다시 동기화함
  • 확장형 설계 : 자동 멀티 리전 데이터 복제, 강력한 일관성 보장, 원자적 일괄 작업, 실제 트랜잭션 지원 등

기본 원리

SQL 데이터베이스와 달리 테이블이나 행이 없으며, 컬렉션으로 정리되는 문서에 데이터를 저장함

각 문서에는 키-값 쌍이 들어있으며, 작은 문서로 이루어진 대규모 컬렉션을 저장하는 데 최적화되어 있음

 

문서 (document)

  • Cloud Firestore의 저장 단위
  • 값에 매핑되는 필드를 포함하는 간단한 레코드
  • JSON과 매우 유사하기 때문에, 문서를 간단한 JSON 레코드로 취급해도 무방함

컬렉션 (collection)

  • 문서는 컬렉션에 저장됨 (오로지 문서만 포함함)
  • Cloud Firestore는 스키마를 사용하지 않으므로, 각 문서에 어떤 필드를 넣을지와 각 필드에 어떤 유형의 데이터를 저장할지는 완전히 사용자의 재량
  • 문서를 보다 쉽게 쿼리할 수 있도록 여러 문서에서 동일한 필드와 데이터 유형을 사용하는 것이 좋음

🧐 NoSQL과 RDBMS의 데이터 모델링 차이

 

NoSQL 데이터 모델링 절차

  1. 도메인 모델 파악
  2. 쿼리 결과 디자인 (데이터 출력 형태 디자인)
  3. 패턴을 이용한 데이터 모델링
  4. 최적화를 위한 필요한 기능들을 리스팅
  5. 후보 NoSQL을 선정 및 테스트
  6. 데이터 모델을 선정된 NoSQL에 최적화 및 하드웨어 디자인

 


🔥 직접 설계하기

앞서 Cloud Firestore의 특징과 NoSQL 모델링에 대한 내용을 간단하게 알아보았습니다. 

데이터 모델링에 대한 지식이 많지 않기 때문에, 위에서 작성한 NoSQL 데이터 모델링 절차를 간소화하여 진행했습니다.

 

데이터베이스 설계 시 Whimsical을 사용했습니다.

 

Whimsical - Where great ideas take shape

Whimsical combines whiteboards and docs in an all-in-one collaboration hub.

whimsical.com

 

1. 도메인 모델 파악

산책 서비스 내에서 데이터 관리가 필요한 부분은 크게 2가지로 나눌 수 있습니다.

 

1) 산과 관련된 데이터 

  • 산에 대한 정보를 확인할 수 있음
  • 월별로 큐레이션된 산 추천 정보를 확인할 수 있음

2) 유저와 관련된 데이터

  • 가입 시 유저에 대한 기본 정보를 받음
  • 가고 싶은 산을 찜 리스트 내에 저장해두고, 마이 페이지에서 확인할 수 있음
  • 방문했던 산에 대해 리뷰를 작성할 수 있고, 마이 페이지에서 확인할 수 있음

 

2. 쿼리 결과 디자인 

도메인 모델을 기반으로 어플리케이션에 의해서 쿼리되는 결과값을 먼저 정해야 합니다.

데이터를 사용한 페이지가 많지만 이 글에서는 두 페이지에 대해서만 다뤄보겠습니다. 

 

1) Mountain

 

- 화면 상단에는 해당 산의 이미지를 배경으로 두고, 산 이름과 주소를 출력한다.

- 화면 중앙에는 해당 산의 일반 정보를 목록 식으로 출력한다.

- 화면 하단에는 근처 맛집 정보를 출력한다.

 

이 출력 형식을 기반으로, 필요한 쿼리는

 

1) 전체 데이터 출력 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

2) 지하철 역에서 가까운 산 Top 10

- 화면에 지하철 역에서 거리가 가까운 순서대로 정렬하여 목록 식으로 출력한다.

 

이 때 필요한 쿼리는

 

1) 전체 데이터 출력

2) 거리 가까운 순서대로 정렬하여 출력

 

 

 

 

 

 

 

3. 패턴을 이용한 데이터 모델링 

애플리케이션 데이터 출력 내용을 디자인 했다면, 이 내용으로 NoSQL에 정의될 데이터 모델링을 합니다. 

NoSQL은 Sorting, Grouping, Join emddml RDBMS 기능을 제공하지 않기 때문에 이를 배제하고 Put과 Get 으로만 데이터를 가지고 올 수 있는 형태로 테이블을 정의해야 합니다. 

 

이 때 가장 중요한 것은 Denormalization인데, 

데이터를 가급적 중복으로 저장하여 한번에 데이터를 읽어오는 횟수를 줄이도록 해야 합니다. 

 

 

 


🥲 반성

NoSQL 데이터베이스 모델링 방법에 대해 공부하는 과정에서 반성을 많이 했습니다.

 

우선, 데이터베이스를 제대로 설계하지 않고 프로젝트를 시작하면서 그 때 그 때 데이터를 추가하였던 점입니다.

물론 프로젝트 규모가 작기 때문에 그렇게 했을 때 큰 문제는 발생하지 않았지만,

다시 돌아보니 네이밍이 중구난방인 경우도 있었고, 변수 타입에 대한 고민을 덜 한 부분들이 눈에 띄었습니다.

 

다음 프로젝트에는 시간이 조금 걸릴지라도 미리 데이터베이스 설계를 잘 하고 시작한다면, 

조금 더 명확하고 일관된 데이터베이스를 구축할 수 있을 것 같습니다.

 


참고 자료

1. Cloud Firestore

2. [NoSQL] MongoDB와 Firebase 비교 (개념/ 장 단점/ 성능 차이)

3. Cloud Firestore #1 NoSQL 데이터베이스란 무엇인가?

4. Cloud Firestore 데이터 모델

5. NoSQL 데이타 모델링 #1-데이타모델과, 모델링 절차

 

 

 

 

산-책, 등산/트레킹 정보 큐레이션 플랫폼

지구환경 분야 공간데이터 기반 등산/트레킹 정보를 확인하고 공유해보세요!

kground.web.app