meet within meters, meeter ๋ w3w ์ขํ์ฒด๊ณ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก, ๋์ ์น๊ตฌ์ ์ ํํ ์์น๋ฅผ ํ์ธํ๊ณ ์ค์๊ฐ์ผ๋ก ๊ณต์ ํ ์ ์๋ ํ์ดํผ๋ก์ปฌ ๋ชจ๋ฐ์ผ ์ฑ์ ๋๋ค.
๊ตฌ๊ธ ๋ก๊ทธ์ธ + ์ต์ด ์ง๋ ํ๋ฉด | ์น๊ตฌ ์ถ๊ฐ ๋ฐ ์์ฒญ ๊ด๋ฆฌ |
---|---|
์ฌ์ฉ์ 1 | ์ฌ์ฉ์ 2 | ์ฌ์ฉ์ 3 | ์ฌ์ฉ์ 4 |
---|---|---|---|
112 ยท 119 ๊ธด๊ธ์ ๊ณ | ์นด์นด์ค๋งต ์์น๊ณต์ |
---|---|
์ ๋ฏธ๋ฆฌ๋ณด๊ธฐ๊ฐ ํฅ๋ฏธ๋ก์ฐ์ จ๋์?
iPhone์ ์ฌ์ฉํ์ ๋ค๋ฉด, ์ด Apple TestFlight ๋งํฌ๋ฅผ ํตํด meeter๋ฅผ ์ง์ ์ฒดํํด๋ณด์ธ์!
Apple TestFlight๋ก meeter ์ฒดํํ๊ธฐ
- Apple TestFlight๋ iOS ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๋ ์ฑ์ด App Store์ ์ ์ ์ถ์๋๊ธฐ ์ ์, ๊ฐ๋ฐ์๊ฐ ์์ ๋กญ๊ฒ ๋ฒ ํ ํ ์คํธ๋ฅผ ์งํํ ์ ์๋ Apple์ด ์ ๊ณตํ๋ ํ๋ซํผ์ ๋๋ค.
- TestFlight์ ๊ฒ์๋๋ ๋ฒ ํ ๋น๋ ๋ํ Apple์ ๊ผผ๊ผผํ ๊ฒ์๋ฅผ ๋ฐ๊ธฐ์, ์์ฌํ๊ณ ๋ค์ด๋ฐ์ ์ฌ์ฉํ์ ๋ ๋ผ์.
- ์ต๋ช ์ ๋ฒ ํ ํ ์คํฐ๋ก ์ฐธ๊ฐํ์๊ฒ ๋๋ฉฐ, ์ฑ ํธํ์ฑ ๊ฒํ ๋ฅผ ์ํ ๊ฐ๋จํ ๊ธฐ๊ธฐ์ ๋ณด๋ฅผ ์ ์ธํ ๊ทธ ์ด๋ ํ ๊ฐ์ธ์ ๋ณด๋ ์์ง๋์ง ์์์.
- meeter๋ ํ์ฌ ๊ตฌ๊ธ ์์
๋ก๊ทธ์ธ์ ์ง์ํ๊ณ ์์ด์. ๋ง์ฝ ๊ตฌ๊ธ ๋ก๊ทธ์ธ์ด ๋ถํธํ์๋ค๋ฉด, ์ด ๋ก๊ทธ์ธ ์ ๋ณด๋ฅผ ์ฌ์ฉํ์ธ์. Apple ์ฌ์ฌ ํ์์๋ ์ด ๊ณ์ ์ ๋ณด๋ฅผ ํ์ฉํด์ ์ฑ์ ํ
์คํธํ๋ต๋๋ค.
- ID meeter.ios@gmail.com
- PW MeeterIos0101@
- ๋ฒ ํ ํ ์คํธ ๋์ค ๋ฌธ์ ๋ ๋ฒ๊ทธ๊ฐ ๋ฐ๊ฒฌ๋์์ ๋, ๊ฐ๋ฐ์์๊ฒ ์คํฌ๋ฆฐ์ท๊ณผ ํจ๊ป ํผ๋๋ฐฑ์ ์ ์กํ ์ ์์ด์. ๋ณด๋ด์ฃผ์ ํผ๋๋ฐฑ์ ์ธ์ฌํ๊ฒ ๊ฒํ ํด์, ๋ค์ ๋น๋์ ์ต๋ํ ๋ฐ์ํ๋ ๊ฒ์ ๋ชฉํ๋ก ํ๊ณ ์์ด์.
Android ํด๋ํฐ์ ์ฌ์ฉํ์๊ฑฐ๋ ์ง๊ธ ๋น์ฅ์ ์ฒดํ์ด ์ด๋ ต๋ค๋ฉด, ์์ฐ์ด ํฌํจ๋ 5๋ถ ๋ด์ธ์ meeter ๋ฐํ ์์์ ๋ณด์ค ์๋ ์์ด์ ๐
- ๐จ Tech Stack
- ๐ข Challenges
- ์ค์๊ฐ ์์น ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ํจ์จ์ ์ผ๋ก ๋ค๋ฃฐ๊น?
- GPS ์์น์ผ์๋ ๋ฐฐํฐ๋ฆฌ ๋๋ ๐ชซ
- ๊ธฐ๊ธฐ๊ฐ ์์ง์์ ๋๋ง GPS๋ฅผ ์ฌ์ฉํ์
- ๋ค์ดํฐ๋ธ ๊ธฐ๊ธฐ๊ฐ ๊ฐ์๋ ๊ฐ์ ์ ๊ณตํ๊ธด ํ๋๋ฐ.. ๐ค
- ์ผ๋ฐ ๊ฐ์๋ ๊ฐ์ ์ ํ ๊ฐ์๋ ๊ฐ์ผ๋ก ๋ณํํ๊ธฐ
- ๊ธฐ๊ธฐ๊ฐ ํ์คํ ์์ง์์๋๋ง ์๋ํ๋ GPS
- ๊ณผ๋ํ ์์ผ ํต์
- ์ต์ด ์ง๋ ํ๋ฉด, ์ด๋ป๊ฒ ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ๋ก๋ฉํ ๊น?
- ๋ก๋ฉ ์ง์ฐ ์์ธ์ ๋ํ ๊ฐ์ค ์๋ฆฝ ๋ฐ ๊ฒ์ฆ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํธ๋ฆฌํจ์ ์์ ์ฃผ๋๊ถ์ ์๋ค
- WebView์ MapKit JS ์ง์ ์ฐ๊ฒฐ
- ๋ฒ์ธ 1) ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ์งํ๋ค๊ณ ์ ์ ํ์ ๋, ๊ณ ๋ คํ ๋ฐฉ๋ฒ๋ค
- ๋ฒ์ธ 2) ๊ทธ๋ผ
react-native-maps
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ฌ์ ํ ๋ง์ ์ฌ๋๋ค์ด ์ฐ๋๊ฑด๋ฐ..? ๐ค
- ์๊ธฐ์ฐธ์กฐํ ๋ฐ์ดํฐ ๋ชจ๋ธ๋ง์ ์ด์ฉํ ์ฉ๋ ํจ์จ์ ์ธ ์ฟผ๋ฆฌ ๊ตฌํ
- ์ค์๊ฐ ์์น ๋ฐ์ดํฐ๋ฅผ ์ด๋ป๊ฒ ํจ์จ์ ์ผ๋ก ๋ค๋ฃฐ๊น?
- ๐ Lessons Learned
- React Native
- Expo
- Zustand
- Socket.IO
- Apple MapKit JS
- Node.js
- Express
- MongoDB
- Apple TestFlight
- AWS Elastic Beanstalk
React Native๋ Flutter๊ณผ ๋๋ถ์ด ๋๋ฆฌ ์ฐ์ด๋ ํ์ด๋ธ๋ฆฌ๋, ํฌ๋ก์ค ํ๋ซํผ ์ฑ ๊ฐ๋ฐ ํ๋ ์์ํฌ์ ๋๋ค. React์ ์ต์ํ ์ ๊ฐ ๋ชจ๋ฐ์ผ ์ฑ์ ๋ง๋ค๊ณ ์ ํ์ ๋, React Native๋ฅผ ์ ํํ๋ ๊ฒ์ ์ด๋ป๊ฒ ๋ณด๋ฉด ๋น์ฐํ ์์์ด์์ต๋๋ค.
ํ์ง๋ง ์น ํ๊ฒฝ๊ณผ ํ์ ํ ๋ค๋ฅธ ๋ชจ๋ฐ์ผ ํ๊ฒฝ์์, ๊ทธ ๊ณ ์ ์ UI/UX๋ฅผ ๊ณ ๋ คํ๋ฉฐ ๊ฐ๋ฐํ๋ ๊ฒฝํ์ ๋งค์ฐ ์ ์ ํ๊ณ ํฅ๋ฏธ๋ก์ ์ต๋๋ค.
Expo๋ ๋จ์ฐ์ฝ React Native๋ฅผ ๊ฐ๋ฐํ๊ธฐ ์ํ ์ต๊ณ ์ ํ๋ซํผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค. ์ด๊ธฐ ํ๊ฒฝ ์ธํ ๋ถํฐ ๋ผ์ฐํ , ๋น๋ ๋ฐ ๋ฐฐํฌ๊น์ง โ ๊ธฐ๋ฅ ๊ตฌํ ์์ฒด์ ํ์์ ์ด์ง ์์ ๊ฐ์ข ์์๋ค์ด ์ถ์ํ๋์ด ์๋ Expo ๋๋ถ์ ๊ฐ๋ฐ๊ณผ ์ต์ ํ์ ์ง์คํ ์ ์์์ต๋๋ค.
์ ์ผํ ๋จ์ ์ Expo์ ๋ํ ์์กด์ฑ์ด ์๋นํ ๋์์ง๋ค๋ ์ ์ธ๋ฐ (์ค์ ๋ก ์์กด์ฑ ํจํค์ง์ ์ ๋ฐ ์ด์์ด Expo ํจํค์ง์ ๋๋ค), Expo๋ ๋น ๋ฅด๊ฒ ์ ๋ฐ์ดํธ ๋๊ณ ์์ ์ ์ผ๋ก ๋ฐ์ ํ๊ณ ์๋ ์ํ๊ณ์ด๋ฉฐ, React Native ๊ณต์ ๋ฌธ์์์๋ Expo๋ก ์ฑ์ ์์ํ๋ ๊ฒ์ ์๊ฐํ๊ณ ์์ ๋งํผ ์ ๋ขฐํ ์ ์๋ ํ๋ซํผ์ด๋ผ๊ณ ์๊ฐํฉ๋๋ค.
์๋๋ ์ ๊ฐ meeter๋ฅผ ๊ฐ๋ฐํ๋ฉด์ ์ ์ฉํ๊ฒ ์ฌ์ฉํ๋, Expo๊ฐ ์ง์ํ๋ ์ฃผ์๊ธฐ๋ฅ๋ค์ ๋๋ค.
create-expo-app
์ฌ์ฉ์ผ๋ก React Native CLI๋ณด๋ค ํจ์ฌ ๋น ๋ฅด๊ฒ ์ด๊ธฐ ๊ฐ๋ฐํ๊ฒฝ ์ค์ expo-router
์ผ๋ก ๋ชจ๋ฐ์ผ ํ๊ฒฝ์ ๋์ฑ ์ง๊ด์ ์ธ file-based routing ๊ตฌํExpo Go
๋ชจ๋ฐ์ผ ์ฑ์ผ๋ก HMR ๊ธฐ๋ฐ์ ์ ์ํ ์ฑ ํ ์คํ ์ด ๊ฐ๋ฅExpo Prebuild
๋ฅผ ํตํด Expo SDK ์ํ๊ณ์์ ํ์ฅํ์ฌ, ๋ค์ดํฐ๋ธ ์ฝ๋๋ฅผ ๋ฌธ์ ์์ด ๊ฒฐํฉํด ์ฌ์ฉํ ์ ์์. ์ค์ ๋ก OAuth ๊ธฐ๋ฐ์ ์ฌ์ฉ์ ์ธ์ฆ์ ๊ตฌํํ ๋ Expo Prebuild๊ฐ ๋งค์ฐ ์ ์ฉํ์EAS Build
๋ฅผ ํตํด ์ฑ์ ํธ๋ฆฌํ๊ฒ ๋น๋ํ๊ณ ,EAS Submit
์ ํตํด App Store ๋ฐ Play Store์ ์์ฝ๊ฒ ๋ฐฐํฌํ๋ฉฐ, ๋ฐฐํฌ ํ์๋EAS Update
๋ฅผ ํตํด ๋ง์ด๋ ํจ์น์ ๊ฒฝ์ฐ ์คํ ์ด ์ฌ์ฌ ์์ด๋ ์ฌ์ฉ์์๊ฒ ๋ณ๊ฒฝ์ฌํญ์ ship ํ๋ Over-The-Air ์ ๋ฐ์ดํธ๋ฅผ ์ฌ์ฉํ ์ ์์
ํ๋ก์ ํธ ๊ธฐ๋ฅ๊ณผ ํน์ฑ, ๊ฐ๋ฐ๊ธฐ๊ฐ์ ๊ณ ๋ คํ์ฌ ์๋์ ๊ฐ์ ์ํ๊ด๋ฆฌ ํด ์ ํ๊ธฐ์ค์ ์ธ์ ๊ณ , ๊ฐ์ฅ ์ ํฉํ Zustand๋ฅผ ์ ํํ์ต๋๋ค.
- Redux๋ณด๋ค ์ํ ๊ด๋ฆฌ๋ฅผ ์ํ ์ ๋์ ์ธ ์ฝ๋ ์์ด ์ ์ผ๋ฉฐ, ์ฌ์ฉ์ด ์ง๊ด์ ์ด๊ณ , ํจํค์ง ์ฌ์ด์ฆ๊ฐ ์์์ผ ํจ
- ์ดํ ๋ฐฑ๊ทธ๋ผ์ด๋ ์์น ๊ถํ ๋ฐ ๊ธฐ๋ฅ์ ์ถ๊ฐํ ๋, ์ปดํฌ๋ํธ ์ธ๋ถ์์๋ ์ํ ๋ณ๊ฒฝ์ด ๊ฐ๋ฅํด์ผ ํจ
- ํ์ฌ ์์น์ ๋ณด๋ ํด๋ผ์ด์ธํธ ์ํ๋ก๋ง ๊ด๋ฆฌ๋๊ณ ์๊ณ , ์๋ฒ ์ํ๋ฅผ ํด๋ผ์ด์ธํธ๊ฐ ์ฌ์ฉํ ๊ฒฝ์ฐ๋ ๊ฑฐ์ ์์
- npm trend ๋ฑ์์ ์ฃผ๊ฐ ์ฌ์ฉ์ ์๊ฐ ๋ง์์ผ ํ๋ฉฐ, ์์ ์ ์ผ๋ก ์ ์ง๋ณด์๋๊ณ ์๋ ํจํค์ง์ฌ์ผ ํจ
์์น ๋ฐ์ดํฐ๋งํผ์ด๋ ๊ทธ ์ ํ๋์ ์ค์๊ฐ์ฑ์ด ์ค์ํ ๋ฐ์ดํฐ๊ฐ ์์๊น์? ์์น ๋ฐ์ดํฐ๋ฅผ ์ด์ฉํ๋ ๋ํ์ ์ธ ์๋น์ค์ธ ๋ด๋น๊ฒ์ด์ ๋ง ์๊ฐํด ๋ณด์๋, ์์น ๋ฐ์ดํฐ๋ ์ผ๋ง๋ ์ค์๊ฐ์ ๊ฐ๊น๊ฒ, ์ผ๋ง๋ ์ ์ ์ค์ฐจ๋ก ํ์ฌ ์์น๋ฅผ ๋ํ๋ผ ์ ์๋๊ฐ์ ๋ฐ๋ผ ๊ทธ ๊ฐ์น๊ฐ ์ข์ฐ๋ฉ๋๋ค.
๊ทธ๋ผ ์ค์๊ฐ์ผ๋ก ๋์ ๋ด ์น๊ตฌ์ ์์น๋ฅผ ์ง๋์ ํ์ํด์ค๋ค โ ๋ผ๋ ํต์ฌ ๊ธฐ๋ฅ์ ์ฝ์ํ meeter ์ฑ์์๋ ์ด๋ป๊ฒ ์ค์๊ฐ ์์น ๋ฐ์ดํฐ๋ฅผ ๋ค๋ค์ผ ํ ๊น์? ์ด์์ ์ผ๋ก๋, meeter ์ฑ์ด ์ผ์ ธ ์๋ ๋ด๋ด GPS๋ก ๋ด ํ์ฌ ์์น๋ฅผ ์ง์์ ์ผ๋ก ๋ชจ๋ํฐ๋งํด์, ์๋ก์ด ์์น๊ฐ์ด ํ์ธ๋ ๋๋ง๋ค ์์น ๋ง์ปค๋ฅผ ์๋ก์ด re-rendering ํ๊ณ , ๋์์ ๋ด ๋ชจ๋ ์น๊ตฌ๋ค์๊ฒ ์์ผ์ ํตํด ์๋ก์ด ์์น๊ฐ์ ์๋ ค์ฃผ๋ฉด ๋๊ฒ ์ฃ .
ํ์ง๋ง ํ์ค์ ๋ น๋ก์น ์์์ต๋๋ค.
๋ง์ฝ ์ฑ ์ฌ์ฉ ๋ด๋ด GPS๋ก ๋ด ํ์ฌ ์์น๋ฅผ ๋ชจ๋ํฐ๋งํ๋ค๋ฉด, ์์น๊ฐ ๋ฑํ ๋ณํ์ง ์์๋ GPS๋ ๊ณ์ํด์ ํด๋ํฐ ๋ฐฐํฐ๋ฆฌ๋ฅผ ์๋ชจํ๊ณ ์๊ฒ ๋ฉ๋๋ค.
๋ฟ๋ง ์๋๋ผ, ์ ๋ง ์๊ทธ๋งํ ์์ง์์๋ ์๋ก์ด ์์น๊ฐ์ ์น๊ตฌ๋ค์๊ฒ ์์ผ์ผ๋ก ์ ์กํ๋ค๋ฉด, ์์ผ ๋ถํ๊ฐ ์๋นํ ๊ฒ์ ๋๋ค. ๋ง์ฝ meeter ์ฑ์ 100๋ช , 1000๋ช ์ ์ฌ์ฉ์๊ฐ ๋์์ ์ฌ์ฉํ๊ฒ ๋๋ค๋ฉด, ์ด ๋ถํ๋ ์๋น์ค ์์ ์ฑ์ ์น๋ช ์ ์ผ ์ ์์ต๋๋ค.
๊ทธ๋์ ์ ๋ ์ค์๊ฐ ์์น ๋ฐ์ดํฐ๊ฐ ์ฒ๋ฆฌ๋๋ ๊ณผ์ ์ 2๋จ๊ณ๋ก ๋๋์ด ์ ์ํ๊ณ , ๋จ๊ณ๋ณ๋ก ์ต์ ํ๋ฅผ ์งํํ์ต๋๋ค.
- ๊ธฐ๊ธฐ๊ฐ GPS๋ฅผ ์ฌ์ฉํด ์์น ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ค๋ ๊ณผ์
- ๊ฐฑ์ ๋ ์๋ก์ด ์์น ๋ฐ์ดํฐ๋ฅผ ์์ผ๊ณผ ์๋ฒ๋ก ๋ณด๋ด๋ ๊ณผ์
์ฌ์ค ์ ๋ ๊ฐ๋ฐ ํ ๋ฒ ํ ํ ์คํธ ๋จ๊ณ์์์ผ ์ด ์ ์ ์ฒด๊ฐํ๋๋ฐ์, GPS๋ ์ค๋งํธํฐ ๋ฐฐํฐ๋ฆฌ๋ฅผ ์ถฉ๊ฒฉ์ ์ผ๋ก ๋ง์ด ์๋ชจํฉ๋๋ค.
Nonetheless, even with A-GPS, using your GPS is a noticeable battery hog. This is again due not to powering the GPS itself, but by preventing the phone from going to sleep. Compounding the cost, most mapping software is processor-intense. A well-designed app can make a significant difference here; Google Maps boasts several optimizations to reduce battery consumption from GPS usage.
โ Robert Love, Senior Director of Engineering at Google Cloud Platform, on "Why does GPS use so much more battery than any other antenna or sensor in a smartphone?" asked on Quora
์ ๋ต๋ณ์์๋ ํ์ธํ ์ ์๋ฏ, GPS๋ ๊ทธ ํน์ ์ ๋งค์ฐ ๋๋ฆฐ ํต์ ์๋์, ๊ธฐ๊ธฐ๋ฅผ ์ ๋ค์ง(sleep) ๋ชปํ๊ฒ ํ๋ ํน์ฑ ๋๋ฌธ์ ๋ฐฐํฐ๋ฆฌ๋ฅผ ๋ง์ด ์ฌ์ฉํฉ๋๋ค.
์ด ์ฌ์ค์ ์ฌํผํ๋ฉด์๋, ์ ๋ ๋์์ ๋ต๋ณ์ ๋ง์ง๋ง ๋ฌธ์ฅ์ ์ฃผ๋ชฉํ์ต๋๋ค: ์ ๋์์ธ๋ ์ฑ์ ํ๊ธฐ์ ์ธ ์ฐจ์ด๋ฅผ ๋ง๋ค์ด๋ผ ์ ์์ต๋๋ค. Google Maps๋ GPS ์ฌ์ฉ์ ๋ฐ๋ฅธ ๋ฐฐํฐ๋ฆฌ ์๋ชจ๋ฅผ ์ค์ด๊ธฐ ์ํด ์ฌ๋ฌ ์ต์ ํ ๊ธฐ์ ์ ์๋ํฉ๋๋ค.
๋ฌผ๋ก meeter ์ฑ์ด ๊ตฌ๊ธ ๋งต ์์ค์ ์ต์ ํ๋ฅผ ๋ฌ์ฑํ ์ ์๊ฒ ์ง๋ง, ์ด๋ป๊ฒ ํ๋ฉด ์์น ๋ฐ์ดํฐ์ ๊ฐ์น๋ฅผ ์ ์งํ๋ฉด์๋ GPS ์ฌ์ฉ์ ์ต๋ํ ์ค์ผ ์ ์์์ง ๊ณ ๋ฏผํ์ต๋๋ค.
GPS ์ฌ์ฉ์ ์ต๋ํ ์ค์ธ๋ค๋ ๊ฒ์ ๊ณง, ๊ผญ ํ์ํ ๋๋ง GPS๋ฅผ ์ฌ์ฉํ๋๋ก ํ๋ค๋ ๊ฒ์ ๋๋ค. ๊ทธ๋ผ GPS ์ฌ์ฉ์ด ๊ผญ ํ์ํ ๋๋ ์ธ์ ์ผ๊น์? ์ฌ์ฉ์์ ์์น๊ฐ ๋ฐ๋๋ฉด, ๊ทธ ์๋ก์ด ์์น์ ๋ณด๋ฅผ ๋ฐ์์ค๊ธฐ ์ํด GPS๋ฅผ ์ฌ์ฉํด์ผ ํฉ๋๋ค. ๋ฐ๋ฉด์, ์ฌ์ฉ์์ ๊ธฐ๊ธฐ๋ ๊ฐ๋งํ ์๋๋ฐ GPS๋ง ๊ณ์ํด์ ์์น๋ฅผ ๋ชจ๋ํฐ๋งํ๊ณ ์๋ ์ํฉ์ ํผํด์ผ ํ์ฃ .
ํ์ง๋ง ์ญ์ค์ ์ด๊ฒ๋, ๊ธฐ๊ธฐ๊ฐ ์์ง์๋์ง๋ฅผ ์๋ ค๋ฉด ๊ฒฐ๊ตญ GPS๋ฅผ ์ฌ์ฉํด์ผํ๋ ๋ฏ ํ์ต๋๋ค. GPS๋ก ๋ฐ์ ์จ ์กฐ๊ธ ์ ์ ์์น์ ํ์ฌ ์์น๋ฅผ ๋น๊ตํ์ฌ ๊ธฐ๊ธฐ๊ฐ ์์ง์๋์ง๋ฅผ ํ๋จํ๊ธฐ ๋๋ฌธ์ด์ฃ . ์ฌ์ง์ด React Native Community์์ ์ ๊ณตํ๋ Geolocation API
๋ํ ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ฌ์ฉ์ ๊ธฐ๊ธฐ๊ฐ ์์ง์๋์ง๋ฅผ ํ๋ณํ๊ณ ์์์ต๋๋ค. ๊ฒฐ๊ตญ GPS๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ์ฌ์ฉ์ ๊ธฐ๊ธฐ์ ์์ง์์ ํ์งํ๊ฒ ๋ค๋ ์๋๋ ์ ์ด์ ๋ง์ด ์๋๋ ๋ฏ ๋ณด์์ต๋๋ค.
๊ทธ ์๊ฐ, iPhone์ ๋ ๊ฐ์ง ํฅ๋ฏธ๋ก์ด ๊ธฐ๋ฅ๋ค์ด ์ ๋๋ฆฌ๋ฅผ ์ค์ณค์ต๋๋ค. iPhone์ GPS ์์น์ผ์๊ฐ ๊บผ์ ธ ์์ด๋, ์ฌ์ฉ์๊ฐ ๊ตํต์ฌ๊ณ ๋ฅผ ๋นํ๋์ง, ๋๋ ์ด์ ์ค์ธ์ง๋ฅผ ๊ฐ์งํ ์ ์์ต๋๋ค. ์ด๋ป๊ฒ GPS ์์ด ์ด๋ฌํ ์ฌ์ฉ์์ ์์ง์์ ํ์ ํ ์ ์์๊น์?
So how does this technology work? The new iPhone models, along with the Watch Series 8 and Ultra, have a 3-axis gyroscope and a high G-4 accelerometer, which samples motion at over 3000 times a second. It means that when a car is going really fast and then abruptly stops or slows down, it's able to sense the precise moment of impact, or the change in that motion.
โ The Wall Street Journal, Does Apple's Crash Detection Work? We Totaled Some Cars To Find Out.
๋ชจ๋ ์ค๋งํธํฐ์๋ ๊ฐ์๋์ผ์(accelerometer)๊ฐ ๋ด์ฅ๋์ด ์๋๋ฐ, ์ด๋ GPS ์ผ์์ ๋ค๋ฅด๊ฒ ๋ณ๋์ ํต์ ์ ์ํ์ง๋, ๋ฐ๋ผ์ ๋ฐฐํฐ๋ฆฌ๋ ๊ฑฐ์ ์๋ชจํ์ง ์์ต๋๋ค. iPhone์ ๊ธฐ๊ธฐ์ ์์ง์ ์ฌ๋ถ์ ๊ทธ ์ ๋๋ฅผ ์ธก์ ํ ์ ์๋ ๊ฐ์๋์ผ์์ ์์ฒด ์๊ณ ๋ฆฌ์ฆ์ ํ์ฉํด์, ์ฌ์ฉ์์ ๋น์ ์์ ์ด๊ฑฐ๋ ํน์ดํ ์์ง์ ํจํด์ ํ์งํด๋ ๋๋ค.
์ด ์ ์ ์ฐฉ์ํด์, meeter๋ ๊ฐ์๋์ผ์์ ์๋์ ๊ณง ์ฌ์ฉ์์ ์์ง์์ผ๋ก ๊ฐ์ฃผํ๊ณ , ๋น๋ก์ GPS ์์น์ผ์๋ฅผ ์๋ํฉ๋๋ค. ์ด๋ ๊ฒ ๊ธฐ๊ธฐ๊ฐ ํ์คํ ์์ง์์ ๋๋ง GPS๋ฅผ ์ฌ์ฉํ๋๋ก ์ค๊ณํ์ฌ, ๋ถํ์ํ GPS ์๋์ ๋ง๊ณ ๊ธฐ๊ธฐ ์ฑ๋ฅ๊ณผ ๋ฐฐํฐ๋ฆฌ ํจ์จ์ ๋์์ต๋๋ค.
๊ทธ๋ผ ๋ค์ดํฐ๋ธ ๊ธฐ๊ธฐ์ ๊ฐ์๋์ผ์ ์ธก์ ๊ฐ์ ์ด๋ป๊ฒ ์ฌ์ฉํ ์ ์์๊น์? Apple์ Core Motion
ํ๋ ์์ํฌ๋ฅผ ํตํด ์ผ๋ฐ ๊ฐ์๋ ๊ฐ(raw acceleration)์ ์ ๊ณตํฉ๋๋ค.
์ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด, ๊ฐ์๋์ผ์๋ x
, y
, z
3์ฐจ์ ์ถ์ ๋ฐ๋ผ ์์ฉํ๋ ๊ฐ์๋ ์ธก์ ๊ฐ์ ์ ๊ณตํฉ๋๋ค.
๊ทธ๋ฆฌ๊ณ ์ ๋ ์ด๋ฅผ ์ด์ฉํ๋ Expo์ expo-sensors
๋ฅผ ํตํด ์ผ๋ฐ ๊ฐ์๋ ๊ฐ์ ์ ๊ทผํ ์ ์์์ต๋๋ค. ์๋ ํ๋ฉด์ ์ ๊ฐ ํด๋ํฐ์ ํํํ ์ฑ
์ ์์ ๊ฐ๋งํ ๋๊ณ ์ธก์ ํ ์ผ๋ฐ ๊ฐ์๋ ๊ฐ์
๋๋ค.
๊ทธ๋ฐ๋ฐ ๋ญ๊ฐ ์ด์ํ์ง ์๋์? ๊ธฐ๊ธฐ๋ x
, y
, z
์ถ ์ด๋ค ๋ฐฉํฅ์ผ๋ก๋ ์์ง์ด์ง ์๊ณ ์๋๋ฐ, z
์ถ ๊ฐ์๋ ๊ฐ์ -1
๋ก ์๋ ดํ๋ ๊ฒ์ผ๋ก ๋ณด์
๋๋ค.
์ด๋ ๋ฐ๋ก ๊ฐ์๋ ์ผ์๊ฐ ์ ๊ณตํ๋ ์ผ๋ฐ ๊ฐ์๋ ๊ฐ์ด ์ง๊ตฌ๊ฐ ๊ธฐ๊ธฐ๋ฅผ ๋์ด๋น๊ธฐ๋ ์ค๋ ฅ ๋ํ ๊ธฐ๊ธฐ์ ์ ์ฉ๋๋ '์์ง์'์ด๋ผ๊ณ ๊ฐ์ฃผํด์, ์ค๋ ฅ์ด ์์ฉํ๋ ๋ฐฉํฅ์ผ๋ก 1g = 9.81m/s^2
๋งํผ์ ๊ฐ์ ํญ์ ํฌํจํ๊ณ ์๊ธฐ ๋๋ฌธ์
๋๋ค.
๊ทธ๋์ ํ๋ฉด์ ์๋ก ํ ์ฑ๋ก ํํํ ์ฑ
์ ์์ ๋ ์ ํด๋ํฐ์๋ -z
์ถ ๋ฐฉํฅ์ผ๋ก 1g
๋งํผ ์ค๋ ฅ์ด ์์ฉํ๊ณ ์์๊ณ , ๊ทธ๋์ z
์ถ ์ผ๋ฐ ๊ฐ์๋ ๊ฐ์ -1
๋ก ๋ํ๋ฌ๋ ๊ฒ์
๋๋ค.
ํ์ง๋ง ์ ๋ ์ค๋ ฅ์ด ์์ฉํ๋ ๋ฐฉํฅ๊ณผ ๊ด๊ณ์์ด ์์ ์ฌ์ฉ์์ ์์ง์๋ง์ผ๋ก ๋ฐ์ํ๋ ๊ธฐ๊ธฐ์ ๊ฐ์์ ์ธก์ ํด์ผ ํ๊ธฐ์, ์ผ๋ฐ
๊ฐ์๋ ๊ฐ์์ ์ค๋ ฅ์ ์ํฅ์ ์ ๊ฑฐํ ์ ํ
๊ฐ์๋ ๊ฐ์ ๊ตฌํด์ ์ฌ์ฉํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
์ผ๋ฐ ๊ฐ์๋ ๊ฐ์ ๋ดํด์ ์ 2๋ฒ์น์ธ ๊ฐ์๋์ ๋ฒ์น
์ด ๊ณต์์ ํ์ฉํด์ ๋ค์ดํฐ๋ธ ๊ธฐ๊ธฐ๊ฐ ์ ๊ณตํ๋ ์ผ๋ฐ ๊ฐ์๋ ๊ฐ์ ์ ์ํด ๋ณผ ์ ์์ต๋๋ค.
์ฌ๊ธฐ์
์ผ๋ฐ ๊ฐ์๋ ๊ฐ์ ์ ํ ๊ฐ์๋ ๊ฐ์ผ๋ก ๋ณํํ๊ธฐ ์ํด์๋, ์ค๋ ฅ
๋๋ฐ์ด์ค์ ์์ฉํ๋ ์ค๋ ฅ ๊ฐ์๋ ๊ฐ
low-pass filter๋ฅผ ํ์ฉํ ์ค๋ ฅ ๊ฐ์๋ ์ ๊ฑฐ (์ฝ๋)
export default function App() {
const [{ x, y, z }, setRawAcc] = useState({
x: 0,
y: 0,
z: 0,
});
const [{ linearAccX, linearAccY, linearAccZ }, setLinearAcc] = useState({
linearAccX: 0,
linearAccY: 0,
linearAccZ: 0,
});
const [subscription, setSubscription] = useState(null);
const _slow = () => Accelerometer.setUpdateInterval(1000);
const _fast = () => Accelerometer.setUpdateInterval(100);
const alpha = 0.8;
let gravityX = 0;
let gravityY = 0;
let gravityZ = 0;
const _subscribe = () => {
setSubscription(Accelerometer.addListener(({ x, y, z }) => {
setRawAcc({ x, y, z });
gravityX = alpha * gravityX + (1 - alpha) * x;
gravityY = alpha * gravityY + (1 - alpha) * y;
gravityZ = alpha * gravityZ + (1 - alpha) * z;
const linearAccX = x - gravityX;
const linearAccY = y - gravityY;
const linearAccZ = z - gravityZ;
setLinearAcc({ linearAccX, linearAccY, linearAccZ });
}));
};
}
์ด์ ์์ํ ์ฌ์ฉ์์ ์์ง์๋ง์ ๋ฐ์ํ ์ ํ ๊ฐ์๋ ๊ฐ์ ์ฌ์ฉํ ์ ์๊ฒ ๋์์ต๋๋ค. ์ผ๋ฐ ๊ฐ์๋ ๊ฐ๊ณผ ํ๋ฒ ๋น๊ตํด์ ํ์ธํด ๋ณผ๊น์?
์์ ์ํฉ๊ณผ ๋์ผํ๊ฒ ํด๋ํฐ์ ํํํ ํ
์ด๋ธ ์์ ๊ฐ๋งํ ๋์์ ๋, ์ ํ ๊ฐ์๋์ x
, y
, z
์ถ ๊ฐ ๋ชจ๋ 0์ ๊ฐ๊น์ด ์๋ ดํ๋ ๊ฒ์ ํ์ธํ ์ ์์ต๋๋ค. ์ด์ ์ ํ ๊ฐ์๋์ ํน์ ์ญ์น๊ฐ(threshold)๋ฅผ ์ค์ ํ์ฌ, ์ผ์ ์ธก์ ๊ฐ์ด ๊ทธ ์ญ์น๊ฐ์ ๋์๋๋ง GPS ์ผ์๋ฅผ ์๋์ํฌ ์ ์๊ฒ ๋์์ต๋๋ค.
์ด๋ ๊ฒ ๊ธฐ๊ธฐ์ ๊ฐ์๋์ผ์์ GPS ์ผ์๋ฅผ ๊ฒฐํฉํ์ฌ, ๊ธฐ๊ธฐ์ ๋ฐฐํฐ๋ฆฌ ์ฑ๋ฅ์ ์ต์ ํํ๋ฉด์๋ ์ฌ์ฉ์์ ์ ์๋ฏธํ ์์น๋ณํ์๋ ์ฌ์ ํ ๊ธฐ๋ฏผํ๊ฒ ๋ฐ์ํ ์ ์๊ฒ ๋์์ต๋๋ค.
์ต์ ํ ์ดํ์ ์๊ฒ ๋ ์ฌ์ค์ด์ง๋ง, GPS์ ๊ณผ๋ํ ์๋์ง ์ฌ์ฉ์ ๊ทน๋ณตํ๊ธฐ ์ํด์, GPS๋ฅผ ๊ฐ์๋์ผ์์ ๊ฒฐํฉํ ์๋์ง ํจ์จ์ ์ธ ๋ฐ์ํ GPS ์ํ๋ง(adaptive GPS sampling) ๊ธฐ์ ์ด ํ๊ณ์์ ํ๋ฐํ ๋ ผ์ ๋ฐ ์ฐ๊ตฌ๋๊ณ ์์์ต๋๋ค!
ํ ์ฐ๊ตฌ๋ ๊ธฐ๊ธฐ ์๋์ง, ๋ฐ์ดํฐ ์ฉ๋, ๋ฐ์ดํฐ ๊ด๋์ญ ์๋น๋ฅผ 78%๋ ์ ๊ฐํ๋ฉด์๋ 91.4%๋ผ๋ ๋งค์ฐ ๋์ ์์น ์ ํ๋๋ฅผ ๋ณด์๋ค๊ณ ํฉ๋๋ค.
This paper has proposed a novel approach that applies adaptive sampling to optimize GPS sensing, using Accelerometer's data. Based on the collected dataset, this study's results indicate the capability to reduce energy, data volume, and bandwidth consumption by 78% while preserving a relatively high accuracy: 91.4%. Our work's strength lies in using a second less-energy-consuming sensor (Accelerometer) to produce energy-efficient sensing of a more energy-consuming sensor (GPS).
โ Ezzini, S., & Berrada, I. (2021). Energy efficient adaptive GPS sampling using accelerometer data. Ad Hoc Networks, 191โ200. https://doi.org/10.1007/978-3-030-67369-7_14
meeter ์ฑ์ ์ฌ์ฉ์ ๊ฐ ์์น์ ๋ณด ๊ณต์ ๋ฅผ ์ํด socket.IO ๋ฅผ ์ฌ์ฉํฉ๋๋ค. ์๋ ๋์์ ์ด์์ ์ธ ์ํฉ์์์
(์์ผ ๋์ as-is vs. to-be)
[๊ธฐ์กด] ๋ผ์ด๋ธ๋ฌ๋ฆฌ ์ฌ์ฉ ์ |
[๊ธฐ์ ๊ฒ์ฆ] WebView + MapKit ์ง์ ๊ฒฐํฉ |
[์ต์ ํ ํ] ๊ฒฐํฉ ํ ํ์ธ ํ๋ |
---|---|---|
ํ๊ท 7-10์ด ์์ | ํ๊ท 1์ด ๋ฏธ๋ง | ๋๋ ์ด ๊ฑฐ์ ๋๊ปด์ง์ง ์์ |
meeter ์ฑ์ ์ฒ์ ์์ํ ๋, ์๋จ์ ์ข์ธก ํ๋ฉด๊ณผ ๊ฐ์ด ํ๊ท ์ ์ผ๋ก 10์ด ๊ฐ๊น์ด ๋น ํ๋ฉด์ด ํ์๋์์ต๋๋ค. ํ์ฌ ์์น๋ฅผ ๋น ๋ฅด๊ณ ์ ํํ๊ฒ ๋ณด์ฌ์ค์ผํ๋ ์ง๋ ๊ธฐ๋ฐ ์ฑ์ ํน์ฑ์, ์ด๋ ๋งค์ฐ ์น๋ช ์ ์ธ ์ด์์๊ณ ์ฌ์ฉ์ ๊ฒฝํ๋ ์ฌ๊ฐํ๊ฒ ํด์น๊ณ ์๋ ์ํฉ์ด์์ต๋๋ค.
์ ๋ ์ด ์ด์ ๋ฅผ ๋ ๊ฐ์ง๋ก ์ขํ๋ณด์์ต๋๋ค:
- ๊ธฐ๊ธฐ๊ฐ ์ต์ด ์์น๋ฅผ ํ์ ํ๋ ๋ฐ์ ์๊ฐ์ด ์ค๋ ๊ฑธ๋ ค, ์์น ์ ๋ณด๊ฐ ํ์ธ๋ ๋๊น์ง ์ง๋๊ฐ ๋ณด์ด์ง ์์
- ์ต์ด ์์น๋ ํ์ ๋์์ผ๋, ๋ ๋๋ง ํ ์ง๋ ์ ๋ณด๋ฅผ ๋ฐ์์ค๋ ๋ฐ์ ์๊ฐ์ด ๊ฑธ๋ฆผ
1๋ฒ ๊ฐ์ค์ ๊ฒ์ฆํ๊ณ ๋ฐฐ์ ํ๋ ๋ฐ์๋ ๊ทธ๋ฆฌ ์ค๋ ์๊ฐ์ด ๊ฑธ๋ฆฌ์ง ์์์ต๋๋ค. ๊ธฐ๊ธฐ์ ์์น์ ๋ณด๋ ๊ฑฐ์ ์๊ฐ์ ์ผ๋ก ์กฐํ๊ฐ ๋์๊ณ , ์ด์ ๋ํด ๊ธฐ์กด์ Map ํญ์ ์ง์ ํด์ผ ์์ํ๋ ์์น์ ๋ณด ํ์ธ์์ ์ ์ฑ ๋ถํ ์์ ์ ์์ํ๋๋ก ๋ณ๊ฒฝํ๋๋, ์์น์ ๋ณด๋ฅผ ํ์ ํ๋ ์์ ์ ๋ฐ๋ฅธ ์ง์ฐ์ ๋ ์ด์ ๋ฌธ์ ๊ฐ ๋์ง ์์์ต๋๋ค.
2๋ฒ ๊ฐ์ค์ ๊ฒ์ฆํ๊ธฐ ์ํด์๋ ๊ธฐ์กด์ meeter ์ฑ์ด ์ด๋ป๊ฒ ์ง๋ ์ ๋ณด๋ฅผ ๋ฐ์์ค๊ณ ์๋์ง๋ฅผ ํ์ธํด์ผ ํ์ต๋๋ค. ๋น์ ์ ๋ React Native ์ปค๋ฎค๋ํฐ์์ ์ง๋๋ฅผ ๋ ๋๋งํ๊ธฐ ์ํด ๋๋ฆฌ ํต์ฉ๋๋ react-native-maps
๋ผ์ด๋ธ๋ฌ๋ฆฌ์ <MapView>
๊ธฐ๋ฅ์ ์ฌ์ฉํ๊ณ ์์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋ด๋ถ ์ฝ๋๋ฅผ ํ์ธํด๋ณด๋, iOS ๊ธฐ์ค์ผ๋ก Apple MapKit JS์ ์ง๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ ์ฌ์ฉํ๊ณ ์๋ค๋ ๊ฒ ์ธ์ ๋ณ๋ค๋ฅธ ํน์ด์ ์ ๋ณด์ด์ง ์์์ต๋๋ค.
๊ทธ๋ ๊ฒ Apple MapKit JS์ ๋ํ ์กฐ์ฌ๋ฅผ ์ด์ด๋๊ฐ๋ ์ค, ์ ๋ Apple Tech Talks์ ํ ์์์ ๋ณด๊ณ ๋ ์ง๊ธ๊ป ํธ๋ฆฌํ๊ฒ ์ฌ์ฉํด์๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ํ๊ณ์ ์ ๋ผ์ ๋ฆฌ๊ฒ ๋๋ผ๊ฒ ๋ฉ๋๋ค.
Meet high-performance MapKit JS
๋ผ๋ ์ ๋ชฉ์ 10๋ถ ๋จ์ง๋๋ ์ด ๋ฐํ๋, ์ ๋ชฉ ๊ทธ๋๋ก MapKit JS๋ฅผ ์ฑ์์ ์ฌ์ฉํ ๋ ์ด๋ป๊ฒ ๋ ๋์ ์ฑ๋ฅ์ ๋ผ ์ ์๋์ง์ ๋ํ ์๊ฐ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ ์ง๊ธ ์ ๊ฒ ๊ฐ์ฅ ํ์ํ ๊ธฐ๋ฅ๋ค์ ์ฝ์ํด์ฃผ์์ฃ .
- ์ง๋ ํ์ด์ง๊ฐ ๋ ๋น ๋ฅด๊ฒ ๋ฐ์ํ๊ณ
- ์ง๋ ํ์ด์ง๊ฐ ๋ ๋น ๋ฅด๊ฒ ๋ก๋๋๊ณ
- ๊ฐ๋ฐ์๊ฐ ๋ ์ธ์ฌํ๊ฒ ์ง๋ ํ์ด์ง๋ฅผ ์ ์ดํ๊ณ , ํ์ํ ๊ธฐ๋ฅ๋ง ์ ์ฌ์ ์์ ํฌํจํ๋๋ก ์ค๊ณํ ์ ์๋๋ก ํ๋ค.
์ง๋์ ๋ก๋ฉ์๊ฐ์ ๊ฐ์ ํ๊ณ , ๊ฐ๋ฐ์์๊ฒ ๋ ๋ง์ MapKit ์ ์ด๊ถ์ ์ฃผ๊ธฐ ์ํ ํต์ฌ์ ๊ฒฐ๊ตญ ์ง๋์ ๋ชจ๋ ์ ๋ณด๋ฅผ ํ๊บผ๋ฒ์ ๋ฐ์๊ฐ์ง ์๊ณ , ์ํฉ์ ๋ฐ๋ผ ํ์ํ ์ ๋ณด๋ฅผ ํ์ํ ๋งํผ๋ง, ์ฐ์ ์์๋ฅผ ์ ํด์ ๋ฐ์๊ฐ์ ์ฌ์ฉํ ์ ์๋๋ก ๋ฐ์ดํฐ๋ฅผ ๋ถํ ํ์ฌ ์ ๊ณตํด ์ค๋ค๋ ์ ์ด์์ต๋๋ค.
์๋ฅผ ๋ค์ด meeter์ ๊ฒฝ์ฐ, MapKit์ด ์ ๊ณตํ๋ Basic Map
, Overlays
, Annotations
, User Location Display
, Services
, GeoJSON
๋ฑ ๋ฐฉ๋ํ ๋ฐ์ดํฐ์ API ์ค Basic Map
๋ง ์ฐ์ ์ ์ผ๋ก ๋ฐ์์์ ์ต์ด ์ง๋ ํ๋ฉด์ ๋ ๋๋งํ๊ณ , ์ดํ์ ํ์ํ ๋ฐ์ดํฐ๋ค์ ์ถ๊ฐ์ ์ผ๋ก ๋ก๋ํด์ค๋ฉด ๋์์ฃ .
์ํ๊น๊ฒ๋, react-native-maps
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ๋ฉด์๋ ์ด๋ฌํ ์ปค์คํ
๊ธฐ๋ฅ์ ์ฌ์ฉํ ์ ์์์ต๋๋ค. ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ๋ง์ ์์๋ค์ ์ถ์ํํ์ฌ ๊ฐ๋ฐ์๋ก ํ์ฌ๊ธ ์ฝ๊ณ ๋น ๋ฅด๊ฒ ๊ฐ๋ฐ์ ํ ์ ์๊ฒ ๋์ง๋ง, ํํธ์ผ๋ก๋ ์ด๋ฌํ ๋ฏธ์ธํ ๋ถ๋ถ์ ๋ํ ์ ์ด๋ฅผ ๋ถ๊ฐ๋ฅํ๊ฒ ํ์ฃ .
๊ทธ๋์ ์ ๋ react-native-maps
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๊ณ , WebView์ MapKit JS๋ฅผ ์ง์ ์ฐ๊ฒฐํด์ ์ง๋ ํ๋ฉด์ ๊ตฌํํ๊ธฐ๋ก ๊ฒฐ์ ํ์ต๋๋ค.
<script
src="https://cdn.apple-mapkit.com/mk/5.x.x/mapkit.core.js"
crossorigin async
data-callback="initMapKit"
data-libraries="map"
data-initial-token="..."
></script>
๊ทธ๋ฆฌ๊ณ ๊ทธ ๊ธฐ์ ๊ฒ์ฆ์ ๊ฒฐ๊ณผ๋ฌผ์ด ๋ฐ๋ก ์ด ํ๋ฉด์ ๋๋ค.
๊ธฐ์ ๊ฒ์ฆ ํ์๋, ์ง๋ ์์ฑ์ ์กฐ์ ํ๊ณ ์ฑ์ ์ฌํ ๋ก์ง๊ณผ ์ฐ๊ฒฐํ์ฌ ๋งค๋๋ฌ์ด ์ต์ด ์ง๋ ๋ก๋ฉ ํ๋ฉด์ ๊ตฌํํด๋์ต๋๋ค.
- ์ต์ด ์ฌ์ฉ์ ์์น๋ฅผ ์ค์ฌ์ผ๋ก ํ ์ง๋ ์ค๋
์ท Maps Web Snapshot์ ์ฐ์ ๋ณด์ฌ์ฃผ๊ณ , ์ธํฐ๋ํฐ๋ธ ๋งต์ด ๋ก๋ฉ๋๊ณ ๋๋ฉด ๊ทธ ํ๋ฉด์ผ๋ก ๊ฐ์๋ผ์ฐ๋ ๋ฐฉ๋ฒ
- ์ฌ์ค์ ๊ฐ์ฅ ์ ๋ ฅํ ๋์์ด์๊ณ , ๋ ๋๋ง์ ํ์ํ ์ต์ํ์ ๋ฐ์ดํฐ๋ฅผ ๋จผ์ ๋ก๋ํด์ค๊ณ , ์ดํ ๋ก๋ฉ๋ ์ ์ฒด ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค๋ ์ ์์ ํ์ฌ ํด๊ฒฐ์ฑ (WebView + MapKit ์ง์ ๊ฒฐํฉ)๊ณผ ๊ฐ์ฅ ๋ฐ์์ด ์ ์ฌํ ๋ฐฉ๋ฒ
- ๊ฐ์ฅ ๋ง์ง๋ง์ผ๋ก meeter ์ฑ์ ์ฌ์ฉํ์ ๋์ ์ง๋ ํ๋ฉด์ ๊ธฐ๊ธฐ์
asyncStorage
์ ์บ์ฑํด๋์๋ค๊ฐ ๋ค์ ์ฑ ๋ถํ ์ ์ด๊ธฐ ํ๋ฉด์ผ๋ก ๋ณด์ฌ์ฃผ๋ ๋ฐฉ์- ์ฑ์ด ์ข ๋ฃ๋๋ ์์ ์ ์ง๋ ํ๋ฉด์ ๊ธฐ์ตํด์ผํ๋ ์ด๋ ค์์ด ์๊ณ , ์ฑ ์ข ๋ฃ์ ๋ค์ ๋ถํ ์ฌ์ด ์ฌ์ฉ์๊ฐ ์์น๋ฅผ ๋ง์ด ์ด๋ํ๋ค๋ฉด ์ง๋๊ฐ '๋ ์๊ฐ๋' ์ด์ํ ์์ง์์ด ๋ฐ์ํ๋ค๋ ๋จ์
- ์ฑ์ ๋ถํ
ํ๋ฉด์ธ ์คํ๋์ ์คํฌ๋ฆฐ์ผ๋ก ์๊ฐ์ ๋ฒ๊ฑฐ๋, ๋ก๋ฉ ์ ๋๋ฉ์ด์
์ ๋ณด์ฌ์ฃผ๊ธฐ
- ๊ทผ๋ณธ์ ์ธ ํด๊ฒฐ์ฑ ์ด ์๋ ์์๋ฐฉํธ
๋จธ๋ฆฌ๋ฅผ ์ธ๋งค๊ณ ๊ณ ๋ฏผํ๋ฉด์, ์นด์นด์ค๋งต์ด๋ ๊ตฌ๊ธ ๋งต ๊ฐ์ ์์ค ์ง๋ ์๋น์ค๋ ์ด๋ป๊ฒ ๋น ๋ฅธ ๋ก๋ฉ์๊ฐ์ ์คํํ๋์ง ๊ถ๊ธํด์ Kakao Dev Talk์ ํธ๊ธฐ๋กญ๊ฒ ์ง๋ฌธ๋๋ ธ์ผ๋.. ๋ด๋ถ ๊ธฐ๋ฐ์ด๋ผ ์ค๋ช ์ด ํ๋ค๋ค๋ ๋ต๋ณ์ ๋ฐ์์ต๋๋ค ๐ญ ์ง๊ธ ์๊ฐํ๋ฉด ์ ์๋ ค์ฃผ๋ ๊ฒ์ด ๋น์ฐํ ๋ง๋๋ฐ, ๊ทธ ๋น์์๋ ์งํธ๋ผ๊ธฐ๋ผ๋ ๋ถ์ก๋ ์ฌ์ ์ผ๋ก ์ง๋ฌธ์ ๋๋ ธ๋ ๊ฒ ๊ฐ์ต๋๋ค.
๋ฒ์ธ 2) ๊ทธ๋ผ react-native-maps
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ ์ฌ์ ํ ๋ง์ ์ฌ๋๋ค์ด ์ฐ๋๊ฑด๋ฐ..? ๐ค
Location.getCurrentPositionAsync(options)
Requests for one-time delivery of the user's current location. Depending on given accuracy option it may take some time to resolve, especially when you're inside a building.
Note: Calling it causes the location manager to obtain a location fix which may take several seconds. Consider using Location.getLastKnownPositionAsync if you expect to get a quick response and high accuracy is not required.
์ ๊ณต์๋ฌธ์์ ์ค๋ช
๋์ด ์๋ฏ์ด, ์ง๋ ๋ก๋ฉ ์ง์ฐ์ ์ ๋ฐํ๋ Location.getCurrentPositionAsync()
๋ฉ์๋ ๋์ Location.getLastKnownPositionAsync()
๋ฉ์๋๋ฅผ ์ฌ์ฉํ ์๋ ์์ต๋๋ค. ํ์ง๋ง ๊ธฐ์ ๋์ด ์๋ฏ ์์น ์ ํ๋๊ฐ ๋์ง ์๊ณ , ๋ง์ง๋ง์ผ๋ก ํ์ธ๋ ์์น๋ฅผ ๋ณด์ฌ์ฃผ๊ธฐ์ ์ง๋๊ฐ '๋ ์๊ฐ๋' ์ด์ํ ์์ง์์ด ๋ฐ์ํ ์ ์์ต๋๋ค.
์ ๋ ์์น ๋ฐ์ดํฐ์ ์ ํ์ฑ๊ณผ ์ค์๊ฐ์ฑ์ ์งํค๋ฉด์๋, ์ง๋์ ์ต์ด ๋ก๋ฉ์๊ฐ์ ๋จ์ถํ๊ณ ์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ ๊ฑฐํ๊ณ WebView์ MapKit์ ์ง์ ๊ฒฐํฉํ๋ ๋ฐฉ๋ฒ์ ์ฑํํ์ต๋๋ค.
๊ฐ๋ฐ ํ production ๋น๋๋ฅผ Apple TestFlight ์ฌ์ฌ๋ฅผ ํตํด ์ ๋ก๋ํ๊ณ , ๋ฒ ํ ํ ์คํธ๋ฅผ ์งํํ์ต๋๋ค (2024๋ 1์). ๊ฐ๋ฐ๊ธฐ๊ฐ์๋ ์ฐจ๋ง ์๊ฐํ์ง ๋ชปํ๊ฑฐ๋, ๋์ณค๋ ๋ฒ๊ทธ๋ค์ ๋ํ ์์คํ ์ ์ ํผ๋๋ฐฑ์ ๊ฒฝ์ฒญํ๊ณ , ์ฌ์ฉ์ ๊ฒฝํ์ ๊ฐ์ฅ ํฌ๊ฒ ์ ํดํ๋, ์ฆ ๊ฐ์ ํ์์ ๋ ๊ฐ์ฅ ํฐ ์ํฉํธ๋ฅผ ๋ผ ๋ถ๋ถ๋ถํฐ ์ฐ์ ์์๋ฅผ ๋๊ณ ์ง์์ ์ผ๋ก ๊ฐ์ ํ์ต๋๋ค.
์ฌ๋ฌ๊ฐ์ง ๊ฐ๋ฅ์ฑ์ ๋น๊ตํ๊ตฌํ๊ณ , ํฉ๋ฆฌ์ ์ธ ๊ทผ๊ฑฐ๋ฅผ ๋ค์ด ์ฑํํ๋ ๊ณผ์