PWA ์ด๋ฏธ์ง€

PWA๋ž€?

  • ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์„ ๊ฐœ๋ฐœํ•˜๊ณ  ์œ ์ง€๋ณด์ˆ˜ํ•˜๋Š” ๊ฒƒ์€ ์ƒ๋‹นํžˆ ๊ธธ๊ณ  ๋ณต์žกํ•œ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉฐ, ์ƒ๋‹นํ•œ ๋น„์šฉ์ด ๋ฐœ์ƒํ•œ๋‹ค. ๊ทธ๋ž˜์„œ ์ ‘๊ทผ์„ฑ์ด ๋†’์€ ์›น์—์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ์ˆ ๊ณผ ํ”Œ๋žซํผ API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์˜ ์žฅ์ ์„ ๊ฒฐํ•ฉํ•œ ๊ฒƒ์ด ํ”„๋กœ๊ทธ๋ ˆ์‹œ๋ธŒ ์›น ์•ฑ(Progressive Web App)์ด๋‹ค.
  • PWA๋Š” HTML, CSS, Javascript์™€ ๊ฐ™์€ ์›น ๊ธฐ์ˆ ๋กœ ๋งŒ๋“ค์–ด์ง€๋ฉฐ, ๋Œ€ํ‘œ์ ์ธ ์˜ˆ์‹œ ์ผ€์ด์Šค๋กœ๋Š” ํŠธ์œ„ํ„ฐ, ์Šคํƒ€๋ฒ…์Šค, ์šฐ๋ฒ„ ๋“ฑ์ด ์žˆ๋‹ค.

์›น ์•ฑ์„ PWA๋กœ ์‹๋ณ„๋˜๊ธฐ ์œ„ํ•œ ์ฃผ์š” ๊ตฌ์„ฑ์š”์†Œ

  1. Responsive Web Design(๋ฐ˜์‘ํ˜•) : web page ์†๋„ ๋ฐ ๊ธฐ๋Šฅ, ์‚ฌ์šฉ์ž ํŽธ์˜์„ฑ ์ฆ๋Œ€๋ฅผ ์œ„ํ•ด ๋‹ค์–‘ํ•œ Devices์—์„œ ๋ฐ˜์‘ํ˜• Layout์„ ์ œ๊ณตํ•˜๋„๋ก ๋ฐ˜์‘ํ˜• ๋””์ž์ธ์„ ์ œ๊ณตํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  2. Manifest File(์„ค์น˜ํŒŒ์ผ) : ๊ธฐ๊ธฐ์˜ ํ™ˆํ™”๋ฉด์—์„œ icon์„ ์ƒ์„ฑํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•จ์œผ๋กœ์จ App store๋ฅผ ํ†ตํ•˜์ง€ ์•Š๊ณ ๋„ Web App์„ install ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์•ผํ•œ๋‹ค. ์ œ์ด์Šจ(JSON,ย ์šฉ๋Ÿ‰์ด ์ ์€ ๋ฐ์ดํ„ฐ๋ฅผ ๊ตํ™˜ํ•˜๊ธฐ ์œ„ํ•œ ํ˜•์‹)ย ํŒŒ์ผ์ด๋ฉฐ,ย PWA๊ฐ€ ํ‘œ์‹œ๋˜๊ณ  ๊ธฐ๋Šฅํ•˜๋Š” ๋ฐฉ์‹์— ๋Œ€ํ•œ ์ •๋ณด๋“ค์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

  3. Background Sync : Background Sync๋ฅผ ํ†ตํ•ด ์ธํ„ฐ๋„ท์ด ๋Š๊ธด ์ƒํƒœ์—์„œ ๋ฐœ์ƒํ•˜๋Š” request๋ฅผ ์ €์žฅํ–ˆ๋‹ค๊ฐ€ ์ธํ„ฐ๋„ท์ด ํ™œ์„ฑํ™”๋˜๋ฉด ํ•ด๋‹น ์š”์ฒญ์„ ์ „์†กํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•ด์•ผํ•œ๋‹ค.

  4. Push Notifications : App์ด ๋‹ซํžŒ ์ƒํƒœ์—์„œ๋„ Push Notification์„ ์ˆ˜์‹ ํ•  ์ˆ˜ ์žˆ๊ณ  ์žฌ ์ฐธ์—ฌ ๊ฐ€๋Šฅ(Re-engageable), ์ƒˆ ์ปจํ…์ธ ๊ฐ€ ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•  ๋•Œ๋งˆ๋‹ค ์•Œ๋ฆผ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค

  5. Service Worker : Background Process์—์„œ ์ž‘๋™ํ•˜๋ฏ€๋กœ App์ด ์ข…๋ฃŒ๋œ ์ƒํƒœ์—์„œ๋„ ์ž‘๋™ํ•ด์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿผ์œผ๋กœ ์„œ๋น„์Šค ์ž‘์—…์ž๋Š” ๋„คํŠธ์›Œํฌ์™€ ๊ด€๋ จ๋œ ์š”์ฒญ์˜ ์ฒ˜๋ฆฌ๋ฅผ ๋„์™€์ฃผ๊ธฐ ๋•Œ๋ฌธ์—, ๋ณต์žกํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ

  6. Media API : Device Camera์™€ Device Microphone์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.

  7. Geolocation API : User Location ์ •๋ณด์— ์ ‘๊ทผ ๊ฐ€๋Šฅํ•˜๊ฒŒ ํ•ด์•ผํ•œ๋‹ค.

  8. ๋ฐœ๊ฒฌ ๊ฐ€๋Šฅ, ๋”ฐ๋ผ์„œ ์ปจํ…์ธ ๋ฅผ ๊ฒ€์ƒ‰ ์—”์ง„์„ ํ†ตํ•ด ์ฐพ์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  9. ์—ฐ๊ฒฐ ๊ฐ€๋Šฅ, ๋”ฐ๋ผ์„œ ๊ฐ„๋‹จํ•˜๊ฒŒ URL์„ ์ „์†กํ•ด ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  10. ์ ์ง„์ , ๋”ฐ๋ผ์„œ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €์˜ ๋ชจ๋“  ๊ธฐ๋Šฅ์€ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†์ง€๋งŒ ์ด์ „ ๋ธŒ๋ผ์šฐ์ €์˜ ๊ธฐ๋ณธ ๊ธฐ๋Šฅ์€ ์—ฌ์ „ํžˆ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  11. ๋ณด์•ˆ ์—ฐ๊ฒฐ(HTTPS): PWA๋Š” ์‹ ๋ขฐํ•  ์ˆ˜ ์žˆ๋Š” ์—ฐ๊ฒฐ ์ƒํƒœ์—์„œ๋งŒ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์—,ย ๋ณด์•ˆ ์—ฐ๊ฒฐ์„ ํ†ตํ•ด์„œ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์‚ฌ์šฉ์ž์™€ ์•ฑ ์‚ฌ์ด์˜ ์—ฐ๊ฒฐ์ด ์‚ฌ์šฉ์ž์™€์˜ ๋ฏผ๊ฐํ•œ ๋ฐ์ดํ„ฐ์— ์ ‘๊ทผํ•˜๋ ค๋Š” ๋ชจ๋“  ์ œ3์ž๋กœ๋ถ€ํ„ฐ ์•ˆ์ „ํ•ด์•ผ ํ•œ๋‹ค.


์žฅ/๋‹จ์ 

์žฅ์ 

  • ๋ณ„๋„์˜ SDK๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.
  • ์•ฑ์Šคํ† ์–ด์— ์ถœ์‹œํ•˜๊ธฐ ์œ„ํ•ด ๋ณ„๋„์˜ ํ”„๋กœ์„ธ์Šค๋ฅผ ๊ฑฐ์น˜์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
  • ์›น์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๊ฒƒ์— ๋Œ€ํ•ด ์ ์€ ๋ฆฌ์†Œ์Šค๋ฅผ ํˆฌ์ž…ํ•˜์—ฌ, ์•ฑ์œผ๋กœ ๋„์šฐ๋ฉฐ ๋น„์šฉ์ด ์ €๋ ดํ•˜๊ณ  ์œ ์ง€๊ด€๋ฆฌํ•ด์•ผํ•˜๋Š” ์ฝ”๋“œ๋ฒ ์ด์Šค๊ฐ€ ์ ๋‹ค.
  • ์˜คํ”„๋ผ์ธ์—์„œ๋„ ๋™์ž‘ํ•œ๋‹ค.
  • PWA๋Š” ์‹œ๋ฉ˜ํ‹ฑ ๋งˆํฌ์—…์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด, ๊ฒ€์ƒ‰์—”์ง„ ์ตœ์ ํ™”(SEO)๊ฐ€ ์ข‹์•„ ์‚ฌ์šฉ์ž๋“ค์˜ ๋†’์€ ์ฐธ์—ฌ๋ฅผ ์ด๋Œ์–ด ๋‚ผ ์ˆ˜ ์žˆ์Œ(RN์˜ ๊ฒฝ์šฐ ์•ฑ์Šคํ† ์–ด ์ตœ์ ํ™”(ASO))
  • ๋ฐฐํฌ์‹œ, ๋ฒˆ๊ฑฐ๋กœ์šด ์ ˆ์ฐจ๋“ค์„ ๋น„์ผœ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค.
  • ์•ฑ์Šคํ† ์–ด๊ฐ€ ํ•„์š”ํ•˜์ง€ ์•Š๊ณ , ์„ค์น˜ ๋˜ํ•œ ํ•„์š”ํ•˜์ง€ ์•Š๋‹ค.

๋‹จ์ 

  • ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ๊ณผ ๋น„์Šทํ•˜๋‹ค๊ณ  ํ•˜์ง€๋งŒ ๋„ค์ดํ‹ฐ๋ธŒ์˜ ์„ฑ๋Šฅ์„ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์—†๋‹ค.
  • ๋„ค์ดํ‹ฐ๋ธŒ์˜ ๊ธฐ๋Šฅ์„ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๊ณ , OS์—์„œ ์ง€์›ํ•˜์ง€ ์•Š๋Š” ๊ธฐ๋Šฅ์ด๋ผ๋ฉด PWA์—์„œ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋‹ค.
  • ์„œ๋น„์Šค ์ž‘์—…์ž์˜ API(์‘์šฉํ”„๋กœ๊ทธ๋žจ ์ธํ„ฐํŽ˜์ด์Šค)๋ฅผ ์ง€์›ํ•˜๋Š” ํ™˜๊ฒฝ์ด ํ”Œ๋žซํผ๋งˆ๋‹ค ์ƒ์ดํ•˜์—ฌ, ํ‘ธ์‹œ ์•Œ๋ฆผ์„ ์‚ฌ์šฉํ•˜๋Š” ๋ถ€๋ถ„์—์„œ ๋ถˆํŽธํ•˜๋‹ค.

๊ฒฐ๋ก 

๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ์ด๋‚˜ PWA๋Š” ๋ชจ๋‘ ๋งค๋„๋Ÿฌ์šด ์‚ฌ์šฉ์ž ๊ฒฝํ—˜(UX)๋ฅผ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฐ์ž ๋‚˜๋ฆ„์˜ ์žฅ๋‹จ์ ์ด ์žˆ์ง€๋งŒ ์ง„ํ–‰ํ•ด์•ผ๋˜๋Š” ํ”„๋กœ์ ํŠธ์˜ ๋ชฉํ‘œ์™€ ํ˜„์žฌ ๊ฐ€์ง„ ์ž์›์„ ๊ณ ๋ คํ•˜์—ฌ ์„ ํƒํ•ด์•ผ๋  ๊ฒƒ ๊ฐ™๋‹ค.

๊ทธ๋ฆฌ๊ณ  PWA๋ฅผ ์ ์šฉํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ•„์ˆ˜๋กœ ์•„๋ž˜์˜ ์‚ฌํ•ญ์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.

  • ์›น์ฝ”๋“œ๋กœ ๋งŒ๋“  ์›น ์‚ฌ์ดํŠธ๋‚˜ ์›น ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ์žˆ์–ด์•ผ ํ•œ๋‹ค.
  • HTTPS๋ฅผ ์ด์šฉํ•˜์—ฌ ์„œ๋น„์Šค๋ฅผ ์ œ๊ณตํ•ด์•ผ ํ•œ๋‹ค.
  • ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฉ”๋‹ˆํŽ˜์ด์ŠคํŠธ๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.(JSON์œผ๋กœ ๋˜์–ด์žˆ๊ณ , ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ •๋ณด๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ)
  • ์„œ๋น„์Šค ์›Œ์ปค๊ฐ€ ์žˆ์–ด์•ผ ํ•œ๋‹ค.

์šฉ์–ด์‚ฌ์ „

SDK(์†Œํ”„ํŠธ์›จ์–ด ๊ฐœ๋ฐœ ํ‚คํŠธ) : ๊ฐœ๋ฐœ์ž์—๊ฒŒ ๋‹ค๋ฅธ ํ”„๋กœ๊ทธ๋žจ์— ์ถ”๊ฐ€ํ•˜๊ฑฐ๋‚˜ ์—ฐ๊ฒฐํ•  ์ˆ˜์žˆ๋Š” ์ปค์Šคํ…€ ์•ฑ์„ ์ œ์ž‘ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜๋Š” ๋„๊ตฌ ๋ชจ์Œ

Service Worker :Client์˜ Browser์— ์„ค์น˜๋˜๋ฉฐ Background Process๋กœ ๋™์ž‘ํ•˜๋Š” Script Code, ์„œ๋ฒ„๋กœ ๊ฐ€๋Š” Request๋ฅผ ๊ฐ€๋กœ์ฑ„๋Š” Proxy๋กœ ์ž‘๋™ํ•˜๊ธฐ ๋•Œ๋ฌธ์— Web App์— ๋‹ค์–‘ํ•˜๊ณ  ์œ ์šฉํ•œ ๊ธฐ๋Šฅ์„ ์ œ๊ณต


์ฐธ๊ณ ๋งํฌ

MDN - ํ”„๋กœ๊ทธ๋ ˆ์‹œ๋ธŒ ์›น ์•ฑ ์†Œ๊ฐœ

Tecoble - PWA์— ๋Œ€ํ•ด ์•Œ์•„๋ณด์ž

๋“œ๋ฆผ์ฝ”๋”ฉ์—˜๋ฆฌ - PWA

[PWA] 1. Progressive Web Apps ์ด๋ž€?

ํ”„๋กœ๊ทธ๋ ˆ์‹œ๋ธŒ ์›น ์•ฑ(PWA)์ด๋ž€ ๋ฌด์—‡์ด๋ฉฐ, ์™œ ํ•„์š”ํ•œ๊ฐ€? - wishket

PWA vs ๋„ค์ดํ‹ฐ๋ธŒ ์•ฑ, ์–ด๋–ค ๊ฒƒ์„ ์„ ํƒํ•ด์•ผ ํ• ๊นŒ?