1. AsyncStroage
- Key๊ฐ์ผ๋ก String์ ์ ์ฅ
- ์ ์ ์ ๋ํ ์ ๋ณด(accessToken, refreshToken)
- ๊ธฐ๋ฅ์ ๋ณด์ฌ์ค์ง ๋ง์ง, ๋ง์ง๋ง ์ ์ ์๊ฐ ๋ฑ ์์์ ๋ณด ์ ์ฅ ๋ฑ
- Cookie์ ๋น์ทํ ์ฌ์ฉ ์ฉ๋
- Android : SQLite ์ ์ ์ฅ
- iOS : ๋ค์ดํฐ๋ธ ์ฝ๋๋ก ์ ์ฅ๋ก์ง์ด ์์ฑ๋์ด ์์
1.1 AsyncStorage.setItem
- key๊ฐ๊ณผ value๊ฐ์ ๋๊ฒจ ๊ฐ์ ์ ์ฅ ํ๋๊ฒ
- ์ ์ฅํ๋ value๋ string์ผ๋ก๋ง ์ ์ฅ
1.2 AsyncStorage.getItem
- ๊ฐ์ ๊ฐ์ ธ ์ค๋๊ฒ, string ๋๋ null์ ๋ฆฌํด
1.3 AsyncStorage.removeItem
- key๊ฐ์ ํด๋นํ๋ value๋ฅผ ์ญ์ ํ๋ ๊ฒ
1.4 AsyncStorage.clear
- AsyncStorage์ ๋ชจ๋ ๊ฐ์ ์ญ์
1.5 AsyncStorage.mergeItem
- Object์์์ ๊ฐ์ Key๊ฐ์ด ์๋ ๊ฒฝ์ฐ ํ๊ฐ์ง๋ก ํฉ์ณ์ฃผ๋๊ฒ
- ์์ฃผ ์ฌ์ฉํ์ง๋ ์์
1.6 ๊ทธ์ธ (etc)
- multiGet, multiSet, multiMerge, multiRemove
- ๊ฐ๊ฐ key๊ฐ์ ์ฌ๋ฌ๊ฐ ๋๊ฒจ ํ๋ฒ์ ๋ฐ์์ค๋๊ฒ
1.7 ์ฌ์ฉ์ ์ฃผ์์
(1) Key๊ฐ ์ค๋ณต์ผ๋ก ์ธํ value ๋ฎ์ด์จ์ง ํน์ ์ญ์ ๋ ์ฌ๋ก
- Uniqueํ ๋ฌธ์์ด์ ๋ง๋ค๊ธฐ ์ํด์ ์ฌ๋ฌ ๋ ธ๋ ฅ๋ค์ ํด๋ด
- UUID ๋ฌธ์์ด ๋ง๋ค์ด ์ฌ์ฉ (e.g. 43833a60-cad ๋ฑ)
- ํ๋ฉด ๋๋ ๋์์ String์ผ๋ก ์กฐํฉํจ @/ํ๋ฉด๋ช /์ก์ ๋ช
(2) AsyncStorage์ ๋ชจ๋ ํจ์๋ Promise๋ก ์ ๊ณต๋จ
1const result = AsyncStorage.getItem('KEY') // result is Promise2const result = await AsyncStorage.getItem('KEY') // result is value
(3)
- Android์์ ์ต๋ ์ ์ฅ ์ฌ์ด์ฆ๋ 6MB
- Android์์ ํ๋ฒ์ ๊ฐ์ ธ ์ฌ ์ ์๋ ์ฌ์ด์ฆ๋ 2MB
2. fetch API
- RemoteURL์ ์๋ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์ฌ๋ ์ฌ์ฉ
- React-Native์์ ์๋ก ์ ์ ํ๊ฒ์ด ์๋, MDN์ ์ด๋ฏธ ๋ง๋ค์ด์ง๊ฒ
2.1 HTTP
- Hyper Text Transfer Protocol์ ์ฝ์
- Server์ ๋ฐ์ดํฐ ์ ์ฅ, ์ ๋ฐ์ดํธ ๋ฑ์ ์์ฒญํ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋๋ฐ๋๊ฒ
2.2 Request Method
- ์ด๋ค ๋์์ ์ํ ์์ฒญ์ธ์ง๋ฅผ ๋ฏธ๋ฆฌ ๋ํ๋ด๋๊ฒ
- ์ข
๋ฅ : GET, POST, PUT, PATCH, DELETE
GET: ํน์ ๋ฆฌ์์ค๋ฅผ ๊ฐ์ ธ์์ผ ํ ๋ ์ฌ์ฉ- e.g. ํน์ ํ์์ ๋ฐ์ดํฐ ์กฐํ, ํน์ ์ฑ๋ณ์ ๊ฐ์ง ํ์๋ค์ ์กฐํ ๋ฑ
POST: ์ด๋ ํ ๋ฐ์ดํฐ์ ์ ์ฅํด์ผ ํ ๋ ์ฌ์ฉ- e.g. ํ์๊ฐ์ , ๋ก๊ทธ์ธ ๋ฑ
PUT: ํน์ ๋ฆฌ์์ค๋ฅผ ์ ๋ฐ์ดํธ ํ ๋ ์ฌ์ฉ- e.g. ํ์์ ์ฃผ์ ๋ฐ์ดํฐ, ๊ฒฐ์ ๋ฐ์ดํฐ ๋ฑ
PATCH: ํน์ ๋ฆฌ์์ค ์ค ํน์ ์ ๋ณด๋ง ๋ณ๊ฒฝํ ๋ ์ฌ์ฉ- e.g. ํ์์ ๋์ด, ์ ํ๋ฒํธ ๋ฑ
DELETE: ๋ฆฌ์์ค๋ฅผ ์์ ์ญ์ - e.g. ํ์ ํํด ๋ฑ
2.3 Request ๋ฐ์ดํฐ ์ ๋ฌ
๋ฐ์ดํฐ๋ฅผ ์๋ฒ๋ก ์ ๋ฌํ๋ ๋ฐฉ๋ฒ (e.g. Path parameter, Query parameter, Request Body ๋ฑ)
Path parameter: URL Path๋ด๋ถ์ ๊ฐ์ ํจ๊ป ๋๊ธฐ๋๊ฒ- e.g.
/person/{:userId}/
- e.g.
1/person?birthday={:date}&sort={:regeditDate}
Query parameter: URL ๋ท๋ถ๋ถ์ ?๋ฅผ ๋ถ์ด๊ณ ๊ทธ ๋ค์ key๊ฐ๊ณผ value๊ฐ์ ๋๊ฒจ์ฃผ๋ ๊ฒRequest Body- URL์ ๋ฐ์ดํฐ๊ฐ ๋ณด์ด์ง ์๊ณ , Body์ ์์ฑํด์ ๋๊ธฐ๊ฒ ๋จ
- ๋ฐ์ดํฐ๊ฐ ๊ธด ๊ฒฝ์ฐ Request Body ์ฌ์ฉ์ด ์ ํฉ (URL ๊ธธ์ด์ ํ)
2.3.1 Request ๋ฐ์ดํฐ ์ ๋ฌ (ํญ๋ชฉ๋ณ ์ฌ์ฉ์ฒ)
Path Parameter: ํน์ ์ ์ ID๋ฅผ ํตํด ์ ๋ณด๋ฅผ ๊ฐ์ ธ์ฌ ๋Query Parameter: ์ด๋ฆ, ์ฑ๋ณ๋ก ๊ฒ์ํด์ ๊ฐ์ ธ์ฌ๋Request Body: ํ์๊ฐ์ , ๊ฒ์๊ธ ๋ฑ๋ก ํ ๋
2.4 Response status code
- ๊ฒฐ๊ณผ ์ฒ๋ฆฌ์ ๋ํด์ ์ซ์ ํํ๋ก ์๋ฒ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์
- ์์ฃผ ์ฌ์ฉํ๋ ์ฝ๋
200: ์ ์์ ์ผ๋ก ์ฒ๋ฆฌ ๋จ500: ์๋ฒ์์ ์ฒ๋ฆฌ ์ค ์๋ฌ๊ฐ ๋ฐ์ํจ400: Client์์ ๊ฐ์ ์๋ชป ์ ๋ฌํจ403: ์ ์ ์ ๋ณด๋ ์๋ณ๋๋, ํด๋น URL๋ก์ ์ ๊ทผ์ด ๊ฑฐ๋ถ๋จ404: URL์ด ์กด์ฌ ํ์ง ์์
2.5 Fetch API ์ฌ์ฉ๋ฐฉ๋ฒ
1fetch(REQUEST_URL, { method: 'POST', body: {} }).then(result => result.json())
3. redux-persist ์ ์ฉ
- ์ ์ฅ์์ ๋ง์ง๋ง Redux ์ํ๋ฅผ ์ ์ฅํ์๋ค ์ด์ด์ ์ฌ์ฉ ํ ์ ์๋๋ก ํ๋ ๊ฒ
- React-Native์์๋ AsyncStorage์ ์ ์ฅ
3.1 PersistGate
- Componentํํ๋ก ์์ฑ๋์ด์์.
- Storage๋ก๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ก๋ํด Redux๋ฅผ ์ ๋ฐ์ดํธ
- ๋ก๋ฉํ๋ ๋์์ Loading ์ปดํฌ๋ํธ ์ถ๊ฐ ๊ฐ๋ฅ
3.2 BlackList, WhiteList
BlackList: ์ ์ง ํ์ง ์์๋ ๋๋ Redux Key๊ฐ๋คWhiteList: ์ ์ง๋ฅผ ํด์ผํ๋ key๊ฐ