PWAλž€

kirin.logΒ·2021λ…„ 5μ›” 16일
1
post-custom-banner

🎈 ν”„λ‘œκ·Έλ ˆμ‹œλΈŒ μ›Ήμ•±(Progressive Web Apps)

  • PWAλŠ” λͺ¨λ°”일 μ•±κ³Ό μ›Ή 기술의 μž₯점을 κ²°ν•©ν•œ 것

λΈŒλΌμš°μ €λ₯Ό 톡해 처음 λ°©λ¬Έν•œ μ‚¬μš©μžμ—κ²Œ μœ μš©ν•˜λ©°, μ„€μΉ˜κ°€ ν•„μš”ν•˜μ§€ μ•Šλ‹€.
느린 λ„€νŠΈμ›Œν¬μ—μ„œλ„ λΉ λ₯΄κ²Œ λ‘œλ“œλ˜κ³ , κ΄€λ ¨λœ ν‘Έμ‹œ μ•Œλ¦Όμ„ μ „μ†‘ν•œλ‹€.
λͺ¨λ°”일 μ•±μ²˜λŸΌ 전체 ν™”λ©΄μœΌλ‘œ λ‘œλ“œλ˜κ³ , ν™ˆ 화면에 μ•„μ΄μ½˜μ΄ μžˆλ‹€.

🏈 2014년을 기점으둜 λͺ¨λ°”일 μ‚¬μš©μž μˆ˜κ°€ λ°μŠ€ν¬νƒ‘ μ‚¬μš©μž 수λ₯Ό λ„˜μ—ˆμœΌλ©°, λͺ¨λ°”일 μ‚¬μš©μžμ˜ 89%λŠ” μ›Ή(Web)보닀 λ„€μ΄ν‹°λΈŒμ•±(Mobile)μ—μ„œ 더 λ§Žμ€ μ‹œκ°„μ„ λ³΄λ‚Έλ‹€λŠ” 톡계가 μžˆλ‹€.

즉, ν™ˆ 슀크린(Home Screen)에 μ•„μ΄μ½˜μ΄ μžˆμ–΄μ„œ μ°ΎκΈ° μ‰½λ‹€λŠ” 점과 κ΄€λ ¨λœ ν‘Έμ‹œμ•ŒλžŒμ„ λ³΄λ‚΄μ€€λ‹€λŠ” μ μ—μ„œ 접근성에 높은 수치λ₯Ό λ³΄μ΄μ§€λ§Œ, λͺ¨λ°”일 μ‚¬μš©μžλŠ” μƒˆλ‘œμš΄ 앱을 λ‹€μš΄λ‘œλ“œν•˜λŠ” κ²ƒμ—λŠ” λƒ‰μ†Œμ μ΄λ©°, μ‚¬μš©ν•˜λ˜ 앱을 κ³„μ†ν•΄μ„œ μ‚¬μš©ν•˜λŠ” κ²½ν–₯이 μžˆλ‹€.
(μ›Ή(Web)은 url만 있으면 접근이 κ°€λŠ₯ν•˜μ§€λ§Œ 앱은 λ‹€μš΄λ‘œλ“œ λ°›μ•„μ•Ό ν•˜λŠ” λ²ˆκ±°λ‘œμ›€μ΄ 있기 λ•Œλ¬Έ)

"높은 μ‚¬μš©μž κ²½ν—˜μ„ μ œκ³΅ν•˜κΈ° μœ„ν•œ μ›Ή μ•±μ˜ 진화"

λ”°λΌμ„œ ν”„λ‘œκ·Έλ ˆμ‹œλΈŒ μ›Ήμ•±(PWA)은 μ›Ήκ³Ό μ•±μ˜ μž₯점을 κ²°ν•©ν•˜μ˜€λ‹€

  • μ›Ή λΈŒλΌμš°μ €λ₯Ό 톡해 μ„€μΉ˜ 없이 νŽ˜μ΄μ§€ 접속 ν›„ 바탕화면에 μ•± μ•„μ΄μ½˜μ„ μΆ”κ°€ν•  수 μžˆλ‹€.
  • μ–Έμ œλ“ μ§€ ν‘Έμ‹œμ•Œλ¦Όμ„ 톡해 μž¬μ°Έμ—¬κ°€ κ°€λŠ₯ν•˜λ‹€.
  • μ˜€ν”„λΌμΈμ—μ„œλ„ μ›Ή 앱에 μ ‘κ·Ό κ°€λŠ₯.ν•˜λ‹€.

instagram, uber, twitter λ“±μ—μ„œ μ μš©ν•˜κ³  μžˆλ‹€.


πŸͺ νŠΉμ§•

  • λ°˜μ‘ν˜•(Responsive) μ›Ή λ””μžμΈ
  • App-like & Discoverable
    • μ„€μΉ˜ λ°°λ„ˆκ°€ μƒμ„±λœλ‹€.
    • μ•± μ•„μ΄μ½˜μ΄ μƒμ„±λœλ‹€.
  • Engageable
    • push μ•ŒλžŒ.
    • PC와 단말기 컀버가 κ°€λŠ₯ν•˜λ‹€.
  • Connectivity
    • Online = Offline κ²½ν—˜μ„ μ œκ³΅ν•œλ‹€.
  • Safe
    • μ œμ•½μ‚¬ν•­ κΈ°λ³Έ 기술 - https ν”„λ‘œν† μ½œμ΄ μžˆμ–΄μ•Ό κ°€λŠ₯ν•˜λ‹€.

πŸͺ μ œμž‘μ— ν•„μš”ν•œ 기술

1) manifest.json
2) Service Workers: client-side Javascript Proxy
3) index.html 파일 λ‚΄ 링크 μ‚½μž…ν•˜κΈ°
<link rel="manifest" href="%PUBLIC_URL%/manifest.json" />

🎊 manifest.json

  • JSON ν˜•μ‹μœΌλ‘œ ꡬ성 ➑ μ›Ή μ‚¬μ΄νŠΈμ— λŒ€ν•œ λͺ¨λ“  정보λ₯Ό λ‚˜μ—΄
  • React public 폴더에 μœ„μΉ˜
  • ν™ˆ ν™”λ©΄μ—μ„œ μ›Ή 앱을 적절히 ν‘œν˜„ν•˜κΈ° μœ„ν•΄ ν•„μš”ν•œ 정보
    • μ•±μ˜ title
    • λͺ¨λ°”일 OSμ—μ„œ 앱을 λ‚˜νƒ€λ‚΄λŠ”λ° μ‚¬μš©(ex. ν™ˆ ν™”λ©΄ μ•„μ΄μ½˜)λ˜λŠ” λ‹€λ₯Έ 크기의 μ•„μ΄μ½˜λ“€μ˜ 경둜
    • λ‘œλ”© λ˜λŠ” μŠ€ν”Œλž˜μ‹œ ν™”λ©΄μ—μ„œ μ‚¬μš©ν•  λ°°κ²½ 색상과 같은 μœ μš©ν•œ 정보듀을 포함
//  manifest.json 파일 ꡬ성
{
  "short_name": "React App",          // ν™ˆ 화면에 ν‘œμ‹œν•  약식 이름
  "name": "Create React App Sample",  // μ›Ή μ•±μ˜ 이름
  "icons": [                          // μ•„μ΄μ½˜λ“€μ˜ 정보(URL, 크기, νƒ€μž…). 
    {                                 // μ‚¬μš©μžμ˜ 기기에 μ ν•©ν•œ 것을 선택할 수 μžˆλ„λ‘ μ—¬λŸ¬ 개λ₯Ό μΆ”κ°€ν•˜λŠ” 것이 μ’‹λ‹€.
      "src": "favicon.ico",
      "sizes": "64x64 32x32 24x24 16x16",
      "type": "image/x-icon"
    },
    {
      "src": "logo192.png",
      "type": "image/png",
      "sizes": "192x192"
    },
    {
      "src": "logo512.png",
      "type": "image/png",
      "sizes": "512x512"
    }
  ],
  "start_url": ".",                // 앱이 μ‹œμž‘ν•  λ•Œ μ‹€ν–‰ν•  초기 λ¬Έμ„œ
  "display": "standalone",         // 앱을 ν‘œμ‹œν•˜λŠ” λ°©μ‹μž…λ‹ˆλ‹€(전체 ν™”λ©΄, λ…λ¦½ν˜•(standalone), μ΅œμ†Œ UI, λ˜λŠ” λΈŒλΌμš°μ €).
  "theme_color": "#000000",        // 운영 μ²΄μ œμ— μ˜ν•΄ μ‚¬μš©λ  UIλ₯Ό μœ„ν•œ μ£Όμš” 색상
  "background_color": "#ffffff"    // μŠ€ν”Œλž˜μ‹œ ν™”λ©΄κ³Ό μ„€μΉ˜ν•˜λŠ” λ™μ•ˆ μ‚¬μš©λ  λ°°κ²½ 색상
}

// μ›Ή manifestλ₯Ό μœ„ν•œ μ΅œμ†Œ μš”κ΅¬ 사항은 nameκ³Ό 적어도 ν•˜λ‚˜(src, size, type을 포함)의 μ•„μ΄μ½˜μ΄λ‹€. 
// description, short_name, start_url은 ꢌμž₯μ‚¬ν•­μž…λ‹ˆλ‹€.
profile
boma91@gmail.com
post-custom-banner

0개의 λŒ“κΈ€