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

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

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

์„œ๋ก 

์ง€๊ธˆ๊นŒ์ง€ ํ•ญ์ƒ ํด๋ก  ์ฝ”๋”ฉ์ด๋‚˜ ๊ณผ์ œ๋งŒ ํ•ด๋ดค์ง€ ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ๊ฐœ๋ฐœํ•ด ๋ณธ ์ ์€ ์—†์—ˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค ์šด ์ข‹๊ฒŒ๋„ ์‚ฌ์—…์„ ํ•œ๋‹ค๊ณ  ํ•˜๋Š” ์นœ๊ตฌ๋“ค์˜ ๋ถ€ํƒ์œผ๋กœ ์ธ์ƒ ์ฒซ ์™ธ์ฃผ(?)๋ฅผ ๋งก๊ฒŒ ๋˜์—ˆ๋‹ค. ํ•œ ๋ฒˆ๋„ ๋ชจ๋ฐ”์ผ ์•ฑ ๊ฐœ๋ฐœ์„ ๊ณต๋ถ€ํ•ด ๋ณธ ์ ๋„ ๊ฐœ๋ฐœํ•˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์กฐ์ฐจ ์•ˆ ํ–ˆ๋˜ ๋‚˜์—๊ฒŒ ์ฒซ ๊ฐœ๋ฐœ์ด ์‹ค์ œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•˜๋Š” ๋ชจ๋ฐ”์ผ ์•ฑ์ด๋ผ๋‹ˆ... ๋ถ€๋‹ด๊ฐ๊ณผ ๊ฑฑ์ •์ด ์žˆ์—ˆ์ง€๋งŒ ํ•œ ํŽธ์œผ๋กœ ํ•™์ƒ์ด ์•„๋‹Œ ์ง„์งœ ๊ฐœ๋ฐœ์ž๋กœ์„œ์˜ ์ฒซ ์ž‘์—…๋ฌผ์ด ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์— ํ”์พŒํžˆ ์ˆ˜๋ฝํ–ˆ๋‹ค. ์ฒซ ๊ฐœ๋ฐœ์— 1์ธ ๊ฐœ๋ฐœ์„ ํ•  ์ž์‹ ์ด ์—†์–ด์„œ 42 ์„œ์šธ์—์„œ ์‚ฌ๋žŒ์„ ๊ตฌํ•ด ํ˜‘์—…์„ ํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. ์‚ฌ์—… ์•„์ด๋””์–ด์— ๋Œ€ํ•œ ์‹œ์žฅ ๋ฐ˜์‘์„ ์‚ดํŽด๋ณด๊ธฐ ์œ„ํ•œ ํ”„๋กœํ†  ํƒ€์ž…์šฉ ์•ฑ์ด์—ˆ๊ธฐ์— ๋˜๋„๋ก ๋น ๋ฅด๊ฒŒ ์ถœ์‹œํ•ด์•ผ ํ–ˆ๋‹ค.

 

"์น˜์—ดํ•œ ํ•˜๋ฃจ"๋Š” GPS ๊ธฐ๋ฐ˜ ์ผ์ • ๊ด€๋ฆฌ ์•ฑ์ด๋‹ค. ๊ธฐ์กด ์ผ์ • ๊ด€๋ฆฌ ์•ฑ๊ณผ ๋‹ค๋ฅด๊ฒŒ ์ผ์ • ์žฅ์†Œ์— ์œ„์น˜ ์„œ๋น„์Šค๋ฅผ ์ด์šฉํ•ด ์‚ฌ์šฉ์ž๊ฐ€ ์ผ์ • ์‹œ๊ฐ„ ๋‚ด์— ์ผ์ • ์žฅ์†Œ์— ์žˆ๋Š”์ง€ ์—†๋Š”์ง€ ๊ฒ€์‚ฌํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•œ๋‹ค. ๋˜ํ•œ, ์ด ์œ„์น˜ ์„œ๋น„์Šค๊ฐ€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ, ์ฆ‰ ์•ฑ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์„ ๋•Œ์—๋„ ๋™์ž‘์„ ํ•œ๋‹ค. ๋” ์ž์„ธํ•œ ๋‚ด์šฉ์€ ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„ ์ฑ•ํ„ฐ์—์„œ ์„ค๋ช…ํ•˜๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

๊ธฐ์ˆ  ์Šคํƒ

  • React Native / React Hooks / Redux
  • Baas - Firebase (Firestore)
  • JavaScript
  • GitHub

๋น ๋ฅธ ์‹œ๊ฐ„ ์•ˆ์— Android์™€ iOS, ๋‘ ํ”Œ๋žซํผ์šฉ ์•ฑ์„ ๊ฐœ๋ฐœํ•ด์•ผ ํ•ด์„œ React Native ํ”„๋ ˆ์ž„์›Œํฌ๋ฅผ ์„ ํƒํ–ˆ๋‹ค. ์‚ฌ์‹ค Flutter๋„ ์ƒ๊ฐํ•˜๊ณ  ์žˆ์—ˆ์ง€๋งŒ ์ƒ์†Œํ•œ Dart๋ฅผ ๋ฐฐ์šฐ๋Š”๋ฐ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆด ๊ฒƒ ๊ฐ™์•„์„œ ์นœ์ˆ™ํ•œ JavaScript๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” React Native๋กœ ๊ฒฐ์ •ํ–ˆ๋‹ค. ๋ฐฑ์—”๋“œ๋Š” ์„œ๋ฒ„๋ฆฌ์Šค๋กœ์„œ ๋ณต์žกํ•œ ๋ฐฑ์—”๋“œ ์ฝ”๋“œ ์—†์ด API๋งŒ ํ˜ธ์ถœํ•ด์„œ ๊ฐ„ํŽธํ•˜๊ฒŒ ๋ฐฑ์—”๋“œ๋ฅผ ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋Š” Firebase๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค. DB๋ฅผ Firestore์™€ Realtime Database ์ค‘์— ํ•˜๋‚˜ ๊ณจ๋ผ์•ผ ํ–ˆ๋Š”๋ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ด€๋ฆฌํ•˜๊ธฐ ๋น„๊ต์  ์‰ฌ์šด Firestore์„ ์„ ํƒํ–ˆ๋‹ค.

* react-native-background-geolocation ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๊ฐ€ Android๋Š” ์œ ๋ฃŒ์—ฌ์„œ ๊ฒฐ๊ตญ iOS๋งŒ ๊ฐœ๋ฐœํ•˜๊ธฐ๋กœ ํ–ˆ๋‹ค.

 

๊ฐœ๋ฐœ ํ™˜๊ฒฝ ์„ค์ •

React Native ์•ฑ์€ expo์•ฑ๊ณผ non-expo์•ฑ์œผ๋กœ ๋‚˜๋‰˜๋Š”๋ฐ expo์•ฑ์€ ํ™˜๊ฒฝ ์„ค์ •์ด๋‚˜ ์‚ฌ์šฉ, ๊ฐœ๋ฐœ, ๋ฐฐํฌํ•˜๋Š”๋ฐ ํŽธ๋ฆฌํ•˜๋‹ค. ์ฒซ ๊ฐœ๋ฐœ์ด๋‹ค ๋ณด๋‹ˆ ๋ณต์žกํ•œ ํ™˜๊ฒฝ ์„ค์ •์„ ์•ˆ ํ•ด๋„ ๋˜๋Š” Expo๋ฅผ ์‚ฌ์šฉํ•ด์„œ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•  ์ˆ˜ ์—†๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด์„œ ๊ธ‰ํžˆ Eject๋ฅผ ํ†ตํ•ด non-expo์•ฑ์œผ๋กœ ๋ฐ”๊ฟจ๋‹ค. non-expo์•ฑ์œผ๋กœ ๋ฐ”๊พธ๋ฉด ios, android ๋นŒ๋“œ ํด๋”๊ฐ€ ์ƒ๊ธฐ๋Š”๋ฐ ์ด๋Š” Xcode์™€ Android Studio๋ฅผ ํ†ตํ•ด์„œ ์ง์ ‘ ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์„ ์„ค์ •ํ•ด์•ผ ํ•จ์„ ์˜๋ฏธํ•œ๋‹ค.

 

๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ๋ญ๊ฐ€ ์ œ์ผ ์–ด๋ ต๋ƒ๊ณ  ๋ฌผ์–ด๋ณธ๋‹ค๋ฉด ๋‚˜๋Š” ์ž์‹  ์žˆ๊ฒŒ ํ™˜๊ฒฝ ์„ค์ •ํ•˜๋Š” ๊ฒŒ ์ œ์ผ ์–ด๋ ต๋‹ค๊ณ  ๋งํ•  ๊ฒƒ์ด๋‹ค. ์ฝ”๋“œ ์˜ค๋ฅ˜๋Š” ๋””๋ฒ„๊น…์„ ํ†ตํ•ด ์ฐจ๊ทผ์ฐจ๊ทผ ๊ณ ์ณ๋‚˜๊ฐ€๋ฉด ๋˜์ง€๋งŒ ํ™˜๊ฒฝ ์„ค์ • ์˜ค๋ฅ˜๋Š” ๋‹ต์ด ์—†๋‹ค. (ํŠนํžˆ M1 ๋งฅ๋ถ์€ ์•…์งˆ ์ค‘์˜ ์•…์งˆ...) ํ•˜์ง€๋งŒ ๊ฐœ๋ฐœ์ž์˜ ๋•๋ชฉ์ด ๋ฌด์—‡์ด๋˜๊ฐ€... ๋ฐ”๋กœ ๊ตฌ๊ธ€๋ง์ด๋‹ค!! ์ด ๊ธ€์„ ์ฝ๊ณ  ์žˆ๋Š” ๋‚˜์ฒ˜๋Ÿผ ๊ฐœ๋ฐœ์ž๋ฅผ ๊ฟˆ๊พธ๊ณ  ์žˆ๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ๋งํ•ด์ฃผ๊ณ  ์‹ถ๋‹ค. ๊ณผ์žฅ ์ข€ ๋ณดํƒœ์„œ ๋งํ•˜๋ฉด ๊ฐœ๋ฐœ์€ 1%์˜ ๋กœ์ง๊ณผ 99%์˜ ๊ตฌ๊ธ€๋ง์œผ๋กœ ์ด๋ฃจ์–ด์ง„๋‹ค๊ณ  ์ƒ๊ฐํ•œ๋‹ค. ๋ชจ๋ฅด๋ฉด ๋ฌด์ง€์„ฑ ๊ตฌ๊ธ€๋ง์ด ๋‹ต์ด๋‹ค. ์‚ฝ์งˆํ•˜๋‹ค ๋ณด๋ฉด ์–ธ์  ๊ฐ€ ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์ด ๋‚˜์˜จ๋‹ค.... ํ™”์ดํŒ…!!!

 

์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์ถ”๊ฐ€ํ•  ๋•Œ Xcode ์„ค์ •์ด ํ•„์š”ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์ด ์กด์žฌํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ํ•ด๋‹น ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋“ค์˜ README๋ฅผ ์ฐจ๋ถ„ํžˆ ์ž˜ ์ฝ์–ด๋ณด๊ณ  ์ง„ํ–‰ํ•˜๋ฉด ๋œ๋‹ค. ํŒ์ด ์žˆ๋‹ค๋ฉด ์™ธ๋ถ€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ํ…Œ์ŠคํŠธ์šฉ  Workspace์„ ํ•˜๋‚˜ ๋งŒ๋“ค์–ด์„œ ์„ค์น˜, ์„ค์ •์„ ์‚ฝ์งˆํ•ด๋ณด๊ณ  ํ”„๋กœ์ ํŠธ Workspace์— ์‚ฝ์งˆํ•œ ๋Œ€๋กœ ์ ์šฉํ•˜๋ฉด ํ”„๋กœ์ ํŠธ ์ž‘์—… ๊ณต๊ฐ„์˜ ์„ค์น˜, ์„ค์ • ์˜ค๋ฅ˜๋กœ ์ธํ•œ ๋ณต์žกํ•œ ๋’ค์ฒ˜๋ฆฌ๋ฅผ ์•ˆ ํ•ด๋„ ๋œ๋‹ค. 

๋Œ“๊ธ€