๐ŸŽ‰ berenickt ๋ธ”๋กœ๊ทธ์— ์˜จ ๊ฑธ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค. ๐ŸŽ‰
Mobile
React Native
07-AsyncStorage

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๋กœ ์ œ๊ณต๋จ

1
const result = AsyncStorage.getItem('KEY') // result is Promise
2
const 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 ๋“ฑ)

  1. Path parameter : URL Path๋‚ด๋ถ€์— ๊ฐ’์„ ํ•จ๊ป˜ ๋„˜๊ธฐ๋Š”๊ฒƒ
    • e.g. /person/{:userId}/
1
/person?birthday={:date}&sort={:regeditDate}
  1. Query parameter : URL ๋’ท๋ถ€๋ถ„์— ?๋ฅผ ๋ถ™์ด๊ณ  ๊ทธ ๋’ค์— key๊ฐ’๊ณผ value๊ฐ’์„ ๋„˜๊ฒจ์ฃผ๋Š” ๊ฒƒ
  2. Request Body
    • URL์— ๋ฐ์ดํ„ฐ๊ฐ€ ๋ณด์ด์ง€ ์•Š๊ณ , Body์— ์ž‘์„ฑํ•ด์„œ ๋„˜๊ธฐ๊ฒŒ ๋จ
    • ๋ฐ์ดํ„ฐ๊ฐ€ ๊ธด ๊ฒฝ์šฐ Request Body ์‚ฌ์šฉ์ด ์ ํ•ฉ (URL ๊ธธ์ด์ œํ•œ)

2.3.1 Request ๋ฐ์ดํ„ฐ ์ „๋‹ฌ (ํ•ญ๋ชฉ๋ณ„ ์‚ฌ์šฉ์ฒ˜)

  1. Path Parameter : ํŠน์ • ์œ ์ € ID๋ฅผ ํ†ตํ•ด ์ •๋ณด๋ฅผ ๊ฐ€์ ธ์˜ฌ ๋•Œ
  2. Query Parameter : ์ด๋ฆ„, ์„ฑ๋ณ„๋กœ ๊ฒ€์ƒ‰ํ•ด์„œ ๊ฐ€์ ธ์˜ฌ๋•Œ
  3. Request Body : ํšŒ์›๊ฐ€์ž…, ๊ฒŒ์‹œ๊ธ€ ๋“ฑ๋ก ํ• ๋•Œ

2.4 Response status code

  • ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ์— ๋Œ€ํ•ด์„œ ์ˆซ์ž ํ˜•ํƒœ๋กœ ์„œ๋ฒ„๋กœ๋ถ€ํ„ฐ ์ „๋‹ฌ๋ฐ›์Œ
  • ์ž์ฃผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ
    • 200 : ์ •์ƒ์ ์œผ๋กœ ์ฒ˜๋ฆฌ ๋จ
    • 500 : ์„œ๋ฒ„์—์„œ ์ฒ˜๋ฆฌ ์ค‘ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•จ
    • 400 : Client์—์„œ ๊ฐ’์„ ์ž˜๋ชป ์ „๋‹ฌํ•จ
    • 403 : ์œ ์ €์ •๋ณด๋Š” ์‹๋ณ„๋˜๋‚˜, ํ•ด๋‹น URL๋กœ์˜ ์ ‘๊ทผ์ด ๊ฑฐ๋ถ€๋จ
    • 404 : URL์ด ์กด์žฌ ํ•˜์ง€ ์•Š์Œ

2.5 Fetch API ์‚ฌ์šฉ๋ฐฉ๋ฒ•

1
fetch(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๊ฐ’