๊ฐ์
์ด ๋ฌธ์์์๋ ์ฌ์ฉ์ ์์น, ์๊ฐ ๋ฐ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ์ ํ๋๋ก ์ค๊ณ๋ ๋ชจ๋ฐ์ผ ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฐ๋ฐ์ ๋ํด ๊ฐ๋ตํ๊ฒ ์ค๋ช
ํฉ๋๋ค. ์ด ์ ํ๋ฆฌ์ผ์ด์
์๋ ์ถ์ ์ ์์ ๋ฐ ์ค์งํ๊ณ , API๋ฅผ ํตํด ์ถ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ฃผ๊ธฐ์ ์ผ๋ก ์ ์ฅํ๊ณ , ์ถ์ ์ด ํ์ฑํ๋ ๋ ์ ๊ธฐ์ ์ผ๋ก ๋ฐ์ดํฐ๊ฐ ์์ง๋๋๋ก ํ๋ ๊ธฐ๋ฅ์ด ํฌํจ๋์ด ์์ต๋๋ค.
ํจํค์ง
์ต์ข
ํจํค์ง ๋ชฉ๋ก:
@react-native-async-storage/async-storage
@react-native-community/์์น์ ๋ณด
@react-native-masked-view/masked-view
@react-navigation/ํ๋จ ํญ
@react-navigation/native
@react-navigation/๋ค์ดํฐ๋ธ-์คํ
@๋ฐ์ ํ์/์คํ
ํ๋ฒ์
jwt-๋์ฝ๋
๋ฐ์ ๋ค์ดํฐ๋ธ ๋ฐฐ๊ฒฝ ์์
๋ฐ์ ๋ค์ดํฐ๋ธ ๋ฐฐ๊ฒฝ ํ์ด๋จธ
๋ฐ์ ๋ค์ดํฐ๋ธ-base64
๋ฐ์ ๋ค์ดํฐ๋ธ ์ฐจํธ ํคํธ
๋ฐ์ ๋ค์ดํฐ๋ธ ์ํ ์งํ ํ์๊ธฐ
๋ฐ์ ๋ค์ดํฐ๋ธ ์ง์ค์ฝ๋ฉ
๋ฐ์ ๋ค์ดํฐ๋ธ ์์น ์ ๋ณด ์๋น์ค
๋ฐ์ ๋ค์ดํฐ๋ธ ์ ์ค์ฒ ํธ๋ค๋ฌ
๋ฐ์ ๋ค์ดํฐ๋ธ ์์ฌ ์ฐจํธ
๋ฐ์ ๋ค์ดํฐ๋ธ ์ด๋ฏธ์ง ์ ํ๊ธฐ
๋ฐ์ ๋ค์ดํฐ๋ธ ๋งต
๋ฐ์ ๊ธฐ๋ณธ ๊ถํ
๋ฐ์ ๋ค์ดํฐ๋ธ ์ฌํ์ฑํ
๋ฐ์ ๋ค์ดํฐ๋ธ ํ๋ฉด
๋ฐ์ ๋ค์ดํฐ๋ธ ์ผ์
๋ฐ์ ๋ค์ดํฐ๋ธ ํ๋ค๊ธฐ
๋ฐ์ ๋ค์ดํฐ๋ธ-svg-๋ณํ๊ธฐ
๋ฐ์ ๋ค์ดํฐ๋ธ ๋ฒกํฐ ์์ด์ฝ
๋ฐ์ ๋ค์ดํฐ๋ธ ๋น์ ์นด๋ฉ๋ผ
์์ง
Node.js
๋ฒ์ : >=18
์ค๋ช
: ์ ํ๋ฆฌ์ผ์ด์
์๋ Node.js ๋ฒ์ 18 ์ด์์ด ํ์ํฉ๋๋ค.
ํ๋ฉด๊ณผ ๊ธฐ๋ฅ
ํ ํ๋ฉด
์ ํ๋ฆฌ์ผ์ด์
์ ํ ํ๋ฉด์ ์์น ์ถ์ ์ธ์
์ ์์ํ๊ณ ๊ด๋ฆฌํ๊ธฐ ์ํ ๊ธฐ๋ณธ ์ธํฐํ์ด์ค ์ญํ ์ ํฉ๋๋ค. ์ถ์ ์์ ๋ฐ ์ค์ง, ์ฌ์ฉ์์ ํ์ฌ ์์น๋ฅผ ์ง๋์ ํ์, ์ธ์
์ค ๊ฒฝ๊ณผ ์๊ฐ ๋ฐ ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ์ถ์ ํ๋ ๊ธฐ๋ฅ์ ์ ๊ณตํฉ๋๋ค.
๊ธฐ๋ฅ
์ฝ๊ธฐ๋ฐ์ดํฐ
์ค๋ช
: ์ธ์ฆ์ ์ํด AsyncStorage์์ ์ฌ์ฉ์ ํ ํฐ์ ์ฝ์ต๋๋ค.
ํธ๋ค ์์ ์ถ์ ๊ธฐ
์ค๋ช
: ์ฌ์ฉ์ ์์น ์ถ์ ์ ์์ํ๊ธฐ ์ํด ๋ฐฑ์๋ API์ POST ์์ฒญ์ ์ ์กํ์ฌ ์ถ์ ์ธ์
์ ์์ํฉ๋๋ค.
HandlePauseTracker
์ค๋ช
: ์ฌ์ฉ์ ์์น ์ถ์ ์ ์ผ์์ ์ผ๋ก ์ค์งํ๊ธฐ ์ํด ๋ฐฑ์๋ API์ POST ์์ฒญ์ ๋ณด๋ด ์ถ์ ์ธ์
์ ์ผ์ ์ค์งํฉ๋๋ค.
ํธ๋ค ์
๋ฐ์ดํธ ์์น
์ค๋ช
: ์
๋ฐ์ดํธ๋ ์๋, ๊ฒฝ๋ ๋ฐ ์์น ID๋ฅผ ์ฌ์ฉํ์ฌ ๋ฐฑ์๋ API์ POST ์์ฒญ์ ๋ณด๋ด ์ฌ์ฉ์์ ํ์ฌ ์์น๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
๊ณ์ฐ๊ฑฐ๋ฆฌ
์ค๋ช
: Haversine ๊ณต์์ ์ฌ์ฉํ์ฌ ๋ ์ง๋ฆฌ์ ์ขํ ์ฌ์ด์ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
startForegroundLocationUpdates
์ค๋ช
: ์ฅ์น์ ์ง๋ฆฌ์ ์์น ์๋น์ค๋ฅผ ์ฌ์ฉํ์ฌ ์ ๊ธฐ์ ์ผ๋ก ์ ๊ฒฝ์์ ์ฌ์ฉ์ ์์น ์
๋ฐ์ดํธ๋ฅผ ์์ํฉ๋๋ค.
stopForegroundLocation์
๋ฐ์ดํธ
์ค๋ช
: ์ ๊ฒฝ์์ ์ฌ์ฉ์ ์์น ์
๋ฐ์ดํธ๋ฅผ ์ค์งํ๊ณ ์์น ์
๋ฐ์ดํธ์ ๋ํด ์ค์ ๋ ๊ฐ๊ฒฉ์ ์ง์๋๋ค.
์์์์น์ถ์
์ค๋ช
: ์ ๊ฒฝ ์์น ์
๋ฐ์ดํธ๋ฅผ ์์ํ๊ณ ๊ฒฝ๊ณผ ์๊ฐ์ ์ถ์ ํ๋ ํ์ด๋จธ๋ฅผ ์ค์ ํ์ฌ ์์น ์ถ์ ์ ์์ํฉ๋๋ค.
์ค์ง์์น ์ถ์
์ค๋ช
: ์ ๊ฒฝ ์์น ์
๋ฐ์ดํธ๋ฅผ ์ค์งํ๊ณ , ์ด๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํ๊ณ , ์ต์ข
์ถ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐฑ์๋ API๋ก ์ ์กํ์ฌ ์์น ์ถ์ ์ ์ค์งํฉ๋๋ค.
ํ์๋ผ์ธ ํ๋ฉด
๊ธฐ๋ฅ
์ฝ๊ธฐ ๋ฐ์ดํฐ
์ค๋ช
: ์ธ์ฆ์ ์ํด AsyncStorage์์ ์ฌ์ฉ์ ํ ํฐ์ ์ฝ์ต๋๋ค.
๊ณ์ฐ์ด๊ฑฐ๋ฆฌ
์ค๋ช
: ์ถ์ ์ธ์
๋ฐ์ดํฐ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ์ด๋ํ ์ด ๊ฑฐ๋ฆฌ๋ฅผ ๊ณ์ฐํฉ๋๋ค.
์ฌ์ฉํจ๊ณผ
์ค๋ช
: ์ถ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ์ํด ๊ตฌ์ฑ ์์ ๋ง์ดํธ์์ readData ํจ์๋ฅผ ํธ์ถํฉ๋๋ค.
ํ๋ ํ๋ฉด
๊ธฐ๋ฅ
ํ ๊ธ์ผ1
์ค๋ช
: ์ฐ๋ ์ ํ์ ์ํ ๋๋กญ๋ค์ด ๋ฉ๋ด์ ํ์ ์ฌ๋ถ๋ฅผ ์ ํํฉ๋๋ค.
ํ ๊ธ์ผ2
์ค๋ช
: ์ ์ ํ์ ์ํ ๋๋กญ๋ค์ด ๋ฉ๋ด์ ํ์ ์ฌ๋ถ๋ฅผ ์ ํํฉ๋๋ค.
ํ ๊ธ์ผ3
์ค๋ช
: ๋ ์ง ์ ํ์ ์ํ ๋๋กญ๋ค์ด ๋ฉ๋ด์ ํ์ ์ฌ๋ถ๋ฅผ ์ ํํฉ๋๋ค.
์ธํธ๋ฐ์ด
์ค๋ช
: ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ธฐ ์ํด ์ ํํ ๋ ์ง๋ฅผ ์ค์ ํฉ๋๋ค.
setMonth
์ค๋ช
: ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ธฐ ์ํด ์ ํํ ๋ฌ์ ์ค์ ํฉ๋๋ค.
์ธํธ์ฐ๋
์ค๋ช
: ํ๋ ๋ฐ์ดํฐ๋ฅผ ๋ณด๊ธฐ ์ํด ์ ํํ ์ฐ๋๋ฅผ ์ค์ ํฉ๋๋ค.
ํ๋กํ ํ๋ฉด
๊ธฐ๋ฅ
getToken
์ค๋ช
: AsyncStorage์์ ์ฌ์ฉ์์ ์ธ์ฆ ํ ํฐ์ ๊ฐ์ ธ์ต๋๋ค.
ํ ๊ธIs๋ก๊ทธ์ธ
์ค๋ช
: ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ํํฉ๋๋ค.
ํ ๊ธ์ฌ์ฉ์๋ก๊ทธ์ธ์ํ
์ค๋ช
: ์ฌ์ฉ์์ ๋ก๊ทธ์ธ ์ํ๋ฅผ ์ ํํ๊ณ ์ด์ ๋ฐ๋ผ AsyncStorage๋ฅผ ์
๋ฐ์ดํธํฉ๋๋ค.
์
๋ฐ์ดํธ ๋ ์ง
2026. 3. 4.