Firebase의 Firestore은 collection들과 document들, 그리고 하위 collection들로 구성된 NoSQL 방식으로 데이터들을 저장하고 있다.
이때 Firebase에서 제안하고 있는 데이터 구조화 방식은 세 가지가 있는데 이를 정리해보았다. (Firebase 공식 문서와 Get to know Cloud Firestore #5 영상을 참고했다. 문서보다는 영상의 아저씨가 적절한 예시를 들면서 쉽게 설명해 주기 때문에 더 알아 듣기가 쉬웠다.)
Firebase 공식 문서들이 직역이 많아서 무지성으로 읽었을 때 이해하기가 어렵기 때문에 Firebase 내의 collection과 document가 DB의 구조의 일부분을 의미한다는 것 정도는 알고 가야 확실하게 이해할 수 있다.
1. document 내에 데이터들을 중첩하는 방식
이 방식은 한 뭉치를 통으로 저장하기 때문에 불러올 때도 한번에 불러와야 되므로 읽기 횟수가 줄어든다는 장점이 있으며, 만약 JSON 형식의 데이터 구조에 익숙하다면 직관적으로 받아 들일 수 있다.
하지만, 마찬가지로 한번에 document들을 모두 불러와야 하는 데에서 생기는 단점으로 내부의 한 개의 값만이 필요할 때 (가령 rating이 4점 이상인 Restaurant들의 name만 불러와주세요.) 쓸 데 없는 데이터까지 불러야 한다는 것이 있다. 또한 위의 Restaurant 예시가 아닌 document들이 시간에 따라 증가하는 방식으로 저장할 경우에는 확장성이 부족해서 (Firestore는 기본적으로 Collection-Document 기반으로 지원하기 때문에) 검색할 때 많은 시간이 소모되기도 한다. 심지어는 Firestore의 장점 중 하나인 query를 아예 사용하지 못하기도 한다. (마찬가지로 Collection-Document 기반 query만 지원하기 때문에)
결국 만약 , 단순하게 보관만 하다가 한번에 뭉탱이로 데이터를 가져와야 하는 경우에는 이 방법이 적합할 수 있다.
2. collection들을 여러 개 나눠서 구성하는 방식
이 방식은 아예 다른 유형/종류의 data를 저장하는 데 용이하다.
아예 다른 collection으로 나눠져 있기 때문에 서로에게 직접적으로 접근하지 못한다는 특징이 있다. 이것을 특징이라고 한 이유는 이로 인해 생기는 장/단점이 모두 있기 때문이다.
우선 Restaurant 내에 각각의 User에 대한 정보가 일일이 들어 있는 것보다는 Read할 때 쓸 데 없는 data들을 줄일 수 있다. 또한 각각의 collection 내에서 쉬운 query를 할 수도 있다. 하지만, User에 있는 data로 Restaruant에 접근할 때 과정이 좀 복잡해진다는 단점이 있다.
3. sub-collection으로 나눠서 구성하는 방식
이 방식은 sub-collection 내에서(Reviews) query를 할 수 있고, sub-collection의 개수가 많아져도 상위 document들의 개수는 변하지 않는다는 장점이 있다.
하지만, Read 횟수 기반으로 돈이 청구되는 Firestore 특성 상 많은 돈이 청구될 수 있다. (Restaurant 페이지에 들어올 때 마다 상위 10개의 Review를 호출하는 경우 접속할 때마다 열한 개의 Read 소모)
이때 개별 Restaurant 내에 상위 10개의 Review만을 가지고 있는 Review snippet을 생성하는 방식으로 이 단점을 극복할 수 있다. 세세한 Review 페이지 자체를 클릭하지 않고 Restaurant 페이지만 클릭하는 경우에는 한 번의 Read만 있으면 되기 때문이다.
- 결론
Firestore의 DB 구조화 방식에는 데이터 중첩, 별개의 collection 구축, sub-collection으로 나누기 크게 세 가지의 방식이 있다. 각각의 장단점이 있고 각각의 단점을 다른 방식이 보완해줄 수 있기 때문에 본인이 설계한 페이지의 구성 방식에 따라서 하나의 데이터 베이스를 구성하는 데에도 세 가지의 방식을 모두 사용하는 것이 좋다. 또한 마지막에 소개한 snippet 방식 같이 Read 횟수를 최소화하면서 필요한 data를 가져올 수 있는 방식을 사용한다면 훨씬 효율적인 DB 구축이 가능할 것이다.
데이터 구조 선택 | Firestore | Firebase (google.com)
데이터 구조 선택 | Firestore | Firebase
의견 보내기 데이터 구조 선택 Cloud Firestore에서 데이터를 구조화할 때는 아래와 같은 몇 가지 옵션을 사용할 수 있습니다. 문서 여러 컬렉션 문서 내의 하위 컬렉션 사용 사례에 따라 각 옵션에
firebase.google.com
'firebase' 카테고리의 다른 글
firebase database의 pagination이 가지는 한계 - page navigation 불가 (0) | 2022.08.15 |
---|