๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
  • Dev Blog
๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ/React Native

[React Native] - "์น˜์—ดํ•œ ํ•˜๋ฃจ" ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ #2

by ์œ ์ง„์˜ 2021. 12. 16.

 

๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง

๋ฐฑ์—”๋“œ๋ฅผ ๋งก์•˜๋‹ค ๋ณด๋‹ˆ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์„ ๋‹ด๋‹นํ•ด์•ผ ํ–ˆ๋‹ค. ์ง€๊ธˆ๊นŒ์ง€ ํด๋ก  ์ฝ”๋”ฉ์šฉ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์€ ํ•ด๋ดค์ง€๋งŒ ์‹ค์ œ ์„œ๋น„์Šค์˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์€ ์ฒ˜์Œ์ด์–ด์„œ ์„ค๋ ˆ๊ณ  ์žฌ๋ฏธ์žˆ์—ˆ๋‹ค. ๋ณต์žกํ•œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ์ด ํ•„์š”ํ•˜์ง€ ์•Š์•˜๊ณ  ๋น„๊ต์  ๋‹ค๋ฃจ๊ธฐ ์‰ฌ์šด ์„œ๋ฒ„๋ฆฌ์Šค์™€ NoSQL์˜ ํŠน์ง•์„ ๋ชจ๋‘ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” Firestore์„ ์‚ฌ์šฉํ–ˆ๊ธฐ์— ์‹ค์ œ ์„œ๋น„์Šค์˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง์„ ์ฒ˜์Œ ๊ฒฝํ—˜ํ•˜๊ธฐ์— ์ด๋ฒˆ ํ”„๋กœ์ ํŠธ๋Š” ์ตœ์ ์ด์—ˆ๋‹ค.

 

 

 Firestore์˜ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ

 

๊ณต์‹๋ฌธ์„œ์— ๋”ฐ๋ฅด๋ฉด SQL์ฒ˜๋Ÿผ ํ…Œ์ด๋ธ”์ด๋‚˜ ํ–‰์ด ์—†์œผ๋ฉฐ, ์ปฌ๋ ‰์…˜(Collection)์œผ๋กœ ์ •๋ฆฌ๋˜๋Š” ๋ฌธ์„œ(Document)์— Key-Value ์Œ์œผ๋กœ ์ด๋ฃจ์–ด์ง„ ๋ฐ์ดํ„ฐ๋“ค์„ ์ €์žฅํ•˜๋Š” ๋ฐฉ์‹์ด๋ผ๊ณ  ํ•œ๋‹ค. ์‰ฝ๊ฒŒ ๋งํ•ด, ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ํ•œ ์ปฌ๋ ‰์…˜์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋ฌธ์„œ๊ฐ€ ์ €์žฅ๋  ์ˆ˜ ์žˆ๊ณ  ๊ฐ ๋ฌธ์„œ ์•ˆ์— ๋ฐ์ดํ„ฐ ํ•„๋“œ์™€ ๊ฐ’๋“ค์ด ์กด์žฌํ•˜๋Š” ๋ฐฉ์‹์ด๋‹ค.

์ถœ์ฒ˜: https://firebase.google.com/docs/firestore#how_does_it_work

 

 

"์น˜์—ดํ•œ ํ•˜๋ฃจ" ๋ฐ์ดํ„ฐ ๋ชจ๋ธ๋ง

 

"์น˜์—ดํ•œ ํ•˜๋ฃจ" ๋ฐ์ดํ„ฐ ๋ชจ๋ธ

 

 

์ปฌ๋ ‰์…˜์€ ์ด ์•ฑ์„ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ์šฉ์ž๋ฅผ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ’์ด ๋‹ด๋‹นํ•ด์•ผ ํ–ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์ด ์•ฑ์€ ํšŒ์›๊ฐ€์ž…์ด ์—†๊ธฐ ๋•Œ๋ฌธ์— ID/PWD๊ฐ€ ์•„๋‹Œ ์‹๋ณ„์ž๊ฐ€ ํ•„์š”ํ–ˆ๋‹ค. ๋”ฐ๋ผ์„œ, ์‚ฌ์šฉ์ž์˜ ๊ธฐ๊ธฐ๋กœ ์‹๋ณ„ํ•  ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ํ•ด์„œ ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ iOS์—์„œ๋Š” UDID(Unique Device Identifier)๋ผ๋Š” ๊ธฐ๊ธฐ ๊ณ ์œ  ์‹๋ณ„์ž๊ฐ€ ์กด์žฌํ•œ๋‹ค๋Š” ์‚ฌ์‹ค์„ ์•Œ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ, ์• ํ”Œ์˜ ๊ฐœ์ธ์ •๋ณด๋ณดํ˜ธ ์ •์ฑ… ๋•Œ๋ฌธ์— UDID ๊ฐ’์€ ์“ธ ์ˆ˜ ์—†์—ˆ๋‹ค. UDID๋ฅผ ๋Œ€์ฒดํ•  ๊ฐ’์„ ์ฐพ์•„๋ณด๋‹ˆ IDFA์™€ IDFV๊ฐ€ ์žˆ๋‹ค๊ณ  ํ•œ๋‹ค. IDFA๋Š” Apple์ด ์šด์˜ํ•˜๋Š” ๊ด‘๊ณ  ์‹๋ณ„์ž์ด๊ณ , IDFV๋Š” ๋ฒค๋” ์‹๋ณ„์ž๋ผ๊ณ  ํ•œ๋‹ค. ๊ตฌ๊ธ€๋ง์„ ํ•ด๋ณด๋‹ˆ react-native-device-info๋ผ๋Š” ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ IDFV ๊ฐ’์„ ์ œ๊ณตํ•ด์ค€๋‹ค๋Š” ๊ฒƒ์„ ์ฐพ์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ปฌ๋ ‰์…˜์€ IDFV ๊ฐ’์œผ๋กœ ์ •ํ–ˆ๋‹ค.

* IDFA๋Š” iOS14 ์ดํ›„๋ถ€ํ„ฐ๋Š” ์‚ฌ์šฉ์ž์—๊ฒŒ ๊ถŒํ•œ์„ ๋ฐ›์•„์•ผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์œผ๋กœ ์ •์ฑ…์ด ๋ฐ”๋€Œ์—ˆ๋‹ค๊ณ  ํ•œ๋‹ค.

 

๋ฌธ์„œ๋Š” ์‚ฌ์šฉ์ž์˜ ์ผ์ •์„ ๋‹ด๋‹นํ•˜๋Š” ์—ญํ• ๋กœ ์ •ํ–ˆ๋‹ค. ์ฆ‰, ํ•˜๋‚˜์˜ ๋ฌธ์„œ๊ฐ€ ํ•˜๋‚˜์˜ ์ผ์ •์„ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ์ •๋ผ๋ฆฌ์˜ ๊ตฌ๋ณ„์„ ์œ„ํ•œ ๋ฌธ์„œ ID๊ฐ’์ด ํ•„์š”ํ–ˆ๋‹ค. ์ฒ˜์Œ์—๋Š” ๋ฌธ์„œ ID๊ฐ’์„ Date.now() ๋ฉ”์†Œ๋“œ์˜ ๋ฐ˜ํ™˜ ๊ฐ’์„ ์‚ฌ์šฉํ–ˆ๋‹ค. Date.now() ๋ฉ”์†Œ๋“œ๋Š” UTC ๊ธฐ์ค€์œผ๋กœ 1970๋…„ 1์›” 1์ผ 0์‹œ 0๋ถ„ 0์ดˆ๋ถ€ํ„ฐ ํ˜„์žฌ๊นŒ์ง€ ๊ฒฝ๊ณผ๋œ ๋ฐ€๋ฆฌ ์ดˆ(ex. 1635748753100)๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š”๋ฐ JavaScript์—์„œ ๋žœ๋ค ๊ฐ’์œผ๋กœ Unique ID๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ์ž์ฃผ ์“ด๋‹ค๊ณ  ํ•œ๋‹ค. ํ•˜์ง€๋งŒ, ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฝ์ง€ ์•Š์•˜๋‹ค. ํ•œ๋ˆˆ์— ์–ด๋–ค ์ผ์ •์˜ ๋ฌธ์„œ์ธ์ง€ ์•Œ๊ณ  ์‹ถ๊ธฐ์— ๋ฌธ์„œ ID๋ฅผ ๋ฐ”๊ฟ€ ํ•„์š”๊ฐ€ ์žˆ์—ˆ๋‹ค.

 

๋ฌธ์„œ ID๋ฅผ ์ƒˆ๋กœ ์ •ํ•  ๋•Œ ๋‘ ๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ–ˆ๋‹ค. ์ฒซ ๋ฒˆ์งธ๋กœ๋Š”, ์ผ์ •๊ณผ ๊ด€๋ จ๋œ ์ •๋ณด๋ฅผ ๋‹ด๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค. ๊ทธ๋ž˜์•ผ ๋ช…์‹œ์ ์œผ๋กœ ๋ณด์ผ ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋‘ ๋ฒˆ์งธ๋กœ๋Š”, Firestore๋Š” ๋ฌธ์„œ ID๋ฅผ ์˜ค๋ฆ„์ฐจ์ˆœ์ด๋‚˜ ๋‚ด๋ฆผ์ฐจ์ˆœ์œผ๋กœ ์ •๋ ฌ๋˜๊ฒŒ ์„ค์ •ํ•ด์ค„ ์ˆ˜ ์žˆ๋Š” ๋ฐ ์ด๋Ÿฌํ•œ ์ •๋ ฌ์ด ์˜๋ฏธ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค. ์ด ๋‘ ๊ฐ€์ง€ ์‚ฌํ•ญ์— ๋ชจ๋‘ ๋ถ€ํ•ฉํ•˜๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ผ์ •์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์ด๋‹ค. ๊ฐ ์ผ์ •๋“ค์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์— ๋”ฐ๋ผ ์˜ค๋ฆ„์ฐจ์ˆœ ์ •๋ ฌ์„ ์‹œํ‚ค๋ฉด ์‹œ๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ๋ฐ์ดํ„ฐ๊ฐ€ ๊ด€๋ฆฌ๋˜์–ด์„œ ๊ด€๋ฆฌํ•˜๊ธฐ ํ•œ์ธต ํŽธํ•ด์ง„๋‹ค.  ๋˜ํ•œ, ํ•ด๋‹น ๋ฐ์ดํ„ฐ๋“ค์„ ๊ฐ€์ ธ์™€ ์‚ฌ์šฉํ•  ๋•Œ ์ˆ˜๋™์œผ๋กœ ์‹œ๊ฐ„ ์ˆœ์„œ๋Œ€๋กœ ์ •๋ ฌ์„ ํ•˜์ง€ ์•Š์•„๋„ ๋ผ์„œ ํŽธ๋ฆฌํ•ด์ง„๋‹ค. ์ตœ์ข…์ ์œผ๋กœ "YYYYMMDDHH:MM"ํ˜•์‹์˜ ์‹œ์ž‘ ์‹œ๊ฐ„์„ ๋ฌธ์„œ ID๋กœ ์ •ํ–ˆ๋‹ค. ๊ฒฐ๊ณผ์ ์œผ๋กœ ๋” ๋งŽ์€ ์‹œ๊ฐ„ ์ •๋ณด๋ฅผ ๋‚ดํฌํ•˜๊ณ  ์žˆ์–ด์„œ ๋”์šฑ๋” ๊ด€๋ฆฌํ•˜๊ธฐ ์‰ฌ์›Œ์กŒ๋‹ค.

 

๋ฐ์ดํ„ฐ๋Š” ์ผ์ •์˜ ์ œ๋ชฉ, ๋‚ ์งœ, ์‹œ์ž‘๊ณผ ๋ ์‹œ๊ฐ„ / ์ผ์ • ์žฅ์†Œ์˜ ์žฅ์†Œ๋ช…, ์ฃผ์†Œ, ์œ„๋„ , ๊ฒฝ๋„ / ์ผ์ •์˜ ์ฒดํฌ ๋ฆฌ์ŠคํŠธ / ๋ฌธ์„œ ID / isDone / isSkip์œผ๋กœ ๊ตฌ์„ฑ๋˜์–ด์žˆ๋‹ค. isDone์€ ์‚ฌ์šฉ์ž๊ฐ€ ์ผ์ • ์žฅ์†Œ์— ๋„์ฐฉํ•ด์„œ ์ผ์ •์„ ์™„๋ฃŒํ•œ ์ผ์ •์ธ์ง€ ์•„๋‹Œ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” Boolean ๋ฐ์ดํ„ฐ๋‹ค. isSkip ๋˜ํ•œ ํ•ด๋‹น ์ผ์ •์ด ์Šคํ‚ตํ•œ ์ผ์ •์ธ์ง€ ์•„๋‹Œ ์ผ์ •์ธ์ง€ ๋‚˜ํƒ€๋‚ด๋Š” Boolean ๋ฐ์ดํ„ฐ๋‹ค.

 

 

์‹ค์ œ ๋ฐ์ดํ„ฐ ๋ชจ๋ธ ์˜ˆ์‹œ

๋Œ“๊ธ€