React Native/General

[Firebase / firestore] 파이어스토어 collection, doc 기본 구조, 개념, 코드

Juzero 2022. 1. 11. 15:04

 

안녕하세요. 이번 포스팅에서는 firebase의 firestore에서 컬렉션, 문서를 추가하는 방법을 알아보겠습니다. 

 

firestore는 NoSQL의 데이터베이스로써 key-value 형태의 데이터베이스를 제공하고 있습니다. 

 

그리고 파이어스토어에서 디비 구조를 만들기 위한 핵심개념이 컬렉션(collection)과 문서(doc) 인데요. 

공식 문서는 여기를 참조하시면 됩니다. 

 

 

컬렉션? 

'폴더' 라고 생각하시면 됩니다. 데이터베이스들이 모여있는 뭉텅이, 하나의 스키마와 비슷합니다.

 

문서

폴더 안에 저장된 낱개의 정보입니다.

 

 

컴퓨터의 폴더 구조에 비교하면 이해가 조금 쉬울 것 같습니다. 

 

유저의 정보를 저장하는 User라는 폴더(컬렉션)이 있습니다. 

 

 

그리고 그 폴더 안에는 유저에 대한 실제 데이터가 적혀있는 한컴파일(문서=doc)이 있습니다. 

 

 

한컴 파일을 열어보겠습니다.

만약, 아래처럼 하나의 문서 안에 여러 명의 유저 정보가 담겨있다면 여러가지 문제점이 발생합니다. 

유저당 갖고있는 정보가 5줄이고, 전체 유저숫자가 100만명이라고 가정해보겠습니다. 

그럼 '김서울' 이라는 유저 정보를 조회하기 위해서는 500만줄 짜리가 적혀있는 hwp 파일을 조회할 때마다 열어야합니다. 얼마나 끔찍한 일인지 감이 오시나요? 파일의 크기가 너무 커져서 파일에 접근하는 것부터 오래걸릴 것입니다.

그리고 차분히 기다려서 파일을 열었다면, 또 검색기능을 이용해서 '김서울'을 찾아야합니다. 그럼 500만줄의 한컴파일에서 김서울을 찾느라 또 오래걸릴 것입니다. 

 

 

그래서 폴더안에 각 유저별로 별개의 문서들을 만들어서 저장합니다. (collection안에 여러개의 doc을 만드는 것이 효율적입니다.)

그러면 유저의 정보를 조회할 때는 문서명에 대해서만 인덱싱하기 때문에 훨씬 빠르게 찾아낼 수 있습니다.

실제 컴퓨터에서 폴더 안에 파일이 아무리 많아도 폴더 간의 이동은 빨리 되는 것과 비슷합니다. 

 

이런식으로 Firebase는 key-value 를 기준으로 데이터베이스를 만들 수 있습니다. 

 

나아가서, 문서 안에 또 폴더(collection)을 만들 수 있습니다. 

 

아래의 예시에서, 김한국 문서 안에 일기라는 key에 단일 데이터가 아닌 리스트 형태의 데이터가 있다고 가정해보겠습니다.

하루에 100줄씩, 대학 재학 4년 동안 썼다면 엄청나게 많은 데이터가 쌓였을 겁니다.

그러면 김한국의 학점만 조회하고 싶은데, 일기의 데이터까지 매번 불러와야 합니다. '일기'를 하나의 폴더(컬렉션)로 만들고, 그 안에 1/1, 1/2, 1/3 ... 이라는 날짜별 문서를 만들 수 있습니다. 일기 데이터가 한번에 펼쳐지는 것이 아니라, 1/1, 1/2 같은 문서에 직접 접근해야 볼 수 있는거죠. 노션의 Page in Page 구조와 비슷합니다. 

 

 

 

 


 

 

기본 설치 및 사용법들은 공식문서만 따라해도 충분히 세팅이 가능하니, 따로 적진 않겠습니다!

 

그런데 위에서 언급한 '문서 안의 컬렉션'을 추가하는 방법이 공식문서에는 따로 언급되어있지 않습니다. 그 부분만 적고 포스팅을 마치겠습니다.

 

firestore().collection('Users').doc('김한국').collection('일기').doc('1/1').set({
            content: 날이 좋아서.. 날이 좋지 않아서.. 날이 적당해서..
        })

 

뒤에 계속 이어주면 됩니다!

 

 

하위 컬렉션 추가하는 방법을 적으려다가 포스팅이 길어졌네요.

 

끝!