[PLAY STEEM x WebApp] DB 설계 by etainclub

View this thread on steempeak.com
· @etainclub ·
$22.64
[PLAY STEEM x WebApp] DB 설계
PLAY STEEM 모바일 앱 개발자 이타인클럽입니다.

Flutter로 웹앱을 개발하고 있습니다.

포스트 데이터를 관리하기 위해 DB 설계가 매우 중요합니다.

Firebase의 Firestore를 이용해서 DB를 설계하고 있습니다.

![image.png](https://cdn.steemitimages.com/DQmYGqMHFf3FYKK2U8qmFqZcEseAH6dkWk99ZyvgGyHoKeL/image.png)

사용자 DB에서 하부 collection으로 categories를 가지는 구조입니다. 그리고 categories의 document는 post의 reference이구요.

reference를 사용하면 뭔가 복잡해 지는 거 같지만, 여러 collections 데이터를 쉽게 접근할 수 있어서 편합니다. 처음 사용법 익히는데 시간이 좀 걸리는 거 뿐이죠.

DB 설계 할 때, 중요한 점은 DB 조회, 쓰기 횟수를 최소로 하는 것입니다. 쓰는 만큼 비용이 나가기 때문이죠.
그래서, 위 그림에서도 document id를 지정할 필요가 있습니다. 미리 document id를 알고 있다면 검색(query)하지 않아도 되기 때문에 db 조횟수를 줄일 수 있습니다.

## StremBuilder, Future Builder
Flutter에서는 stream data나 future data를 입력으로 받아서, 필요한 시점에 ui를 그려주는 기능이 있습니다. 매우 편하고 좋습니다. 

대략 이렇게 사용합니다!

```
content: StreamBuilder(
        stream: categoriesRef?.orderBy('id').snapshots(),
        builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
          print('category snapshot: $snapshot');
          if (snapshot.hasError) {
            return Text('Something went wrong');
          }
          if (snapshot.connectionState == ConnectionState.waiting) {
            return Text("Loading");
          }
          return Column(
            children: snapshot.data!.docs.map((doc) {
              final name = doc.get('name');
```

```
final bookmark = bookmarks[index];
          return FutureBuilder(
            future: bookmark.get(),
            builder: (BuildContext context,
                AsyncSnapshot<DocumentSnapshot> snapshot) {
              return Container(
                height: 40.0,
                width: double.infinity,
                child: _buildBookmarkCard(snapshot.data),
              );
            },
          );
```

---
## 리스팀 / 보팅 / 댓글 / 팔로우 / 응원 부탁드립니다.
cc.
@steemcurator01
@steemitblog

<center>
https://steemitimages.com/640x0/https://cdn.steemitimages.com/DQmdGBZB4dH9yTaT6M45YVmUSmLWJ8x8LgTPABu3bWPYeQb/img_0.07502965088307478.jpg
https://playsteem.app
</center>
👍  , , , , , , , , , , , , , , , , , , , , , , , , , , ,
properties (23)
post_id92,695,637
authoretainclub
permlinkplay-steem-x-webapp-db
categoryhive-101145
json_metadata{"tags":["playsteem","webapp","steemcurator","steemitdev","flutter","firestore","db"],"users":["steemcurator01","steemitblog"],"image":["https:\/\/cdn.steemitimages.com\/DQmYGqMHFf3FYKK2U8qmFqZcEseAH6dkWk99ZyvgGyHoKeL\/image.png","https:\/\/steemitimages.com\/640x0\/https:\/\/cdn.steemitimages.com\/DQmdGBZB4dH9yTaT6M45YVmUSmLWJ8x8LgTPABu3bWPYeQb\/img_0.07502965088307478.jpg"],"links":["https:\/\/playsteem.app"],"app":"steemit\/0.2","format":"markdown"}
created2021-07-18 16:32:36
last_update2021-07-18 16:32:36
depth0
children2
net_rshares35,953,337,884,388
last_payout2021-07-25 16:32:36
cashout_time1969-12-31 23:59:59
total_payout_value11.326 SBD
curator_payout_value11.314 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length1,972
author_reputation790,274,152,641,380
root_title"[PLAY STEEM x WebApp] DB 설계"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
author_curate_reward""
vote details (28)
@yhoh ·
늘 응원합니다. 감사합니다. ^^
properties (22)
post_id92,701,284
authoryhoh
permlinkqwgsaj
categoryhive-101145
json_metadata{"app":"steemit\/0.2"}
created2021-07-18 23:37:30
last_update2021-07-18 23:37:30
depth1
children1
net_rshares0
last_payout2021-07-25 23:37:30
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length18
author_reputation278,255,940,220,712
root_title"[PLAY STEEM x WebApp] DB 설계"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000
@etainclub ·
감사합니다~
properties (22)
post_id92,701,662
authoretainclub
permlinkre-etainclub-2021719t9511973z
categoryhive-101145
json_metadata{"tags":["playsteem","webapp","steemcurator","steemitdev","flutter","firestore","db"],"app":"PLAYSTEEM\/1.1.0","format":"markdown+html"}
created2021-07-19 00:05:12
last_update2021-07-19 00:05:12
depth2
children0
net_rshares0
last_payout2021-07-26 00:05:12
cashout_time1969-12-31 23:59:59
total_payout_value0.000 SBD
curator_payout_value0.000 SBD
pending_payout_value0.000 SBD
promoted0.000 SBD
body_length6
author_reputation790,274,152,641,380
root_title"[PLAY STEEM x WebApp] DB 설계"
beneficiaries[]
max_accepted_payout1,000,000.000 SBD
percent_steem_dollars10,000