๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

๐Ÿ’ปWEB FrontEnd/ํ”„๋ ˆ์ž„์›Œํฌ React

PWA(Progressive Web App)

PWA(Progressive Web App)

์›น์‚ฌ์ดํŠธ๋ฅผ ์•ˆ๋“œ๋กœ์ด๋“œ/iOS ๋ชจ๋ฐ”์ผ ์•ฑ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“œ๋Š” ์ผ์ข…์˜ ์›น๊ฐœ๋ฐœ ๊ธฐ์ˆ 

 

(์žฅ์ )

1. ์Šค๋งˆํŠธํฐ, ํƒœ๋ธ”๋ฆฟ ๋ฐ”ํƒ•ํ™”๋ฉด์— ์—ฌ๋Ÿฌ๋ถ„ ์›น์‚ฌ์ดํŠธ๋ฅผ ์„ค์น˜ ๊ฐ€๋Šฅํ•ฉ๋‹ˆ๋‹ค.

(์ €๊ฑฐ ์„ค์น˜๋œ ์•ฑ ๋ˆ„๋ฅด๋ฉด ์ƒ๋‹จ URL๋ฐ”๊ฐ€ ์ œ๊ฑฐ๋œ ํฌ๋กฌ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ๋œน๋‹ˆ๋‹ค. ์ผ๋ฐ˜ ์‚ฌ์šฉ์ž๋Š” ์•ฑ์ด๋ž‘ ๊ตฌ๋ถ„์„ ๋ชปํ•จ)

 

2. ์˜คํ”„๋ผ์ธ์—์„œ๋„ ๋™์ž‘ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

service-worker.js ๋ผ๋Š” ํŒŒ์ผ๊ณผ ๋ธŒ๋ผ์šฐ์ €์˜ Cache storage ๋•๋ถ„์— ๊ทธ๋ ‡์Šต๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋กœ ๊ฒŒ์ž„๋งŒ๋“ค ๋•Œ ์œ ์šฉํ•˜๊ฒ ๋„ค์š”.

 

3. ์„ค์น˜ ์œ ๋„ ๋น„์šฉ์ด ๋งค์šฐ ์ ์Šต๋‹ˆ๋‹ค.

์•ฑ์„ค์น˜๋ฅผ ์œ ๋„ํ•˜๋Š” ๋งˆ์ผ€ํŒ… ๋น„์šฉ์ด ์ ๊ฒŒ๋“ค์–ด ์ข‹๋‹ค๋Š” ๊ฒ๋‹ˆ๋‹ค.

๊ตฌ๊ธ€ํ”Œ๋ ˆ์ด ์Šคํ† ์–ด ๋ฐฉ๋ฌธํ•ด์„œ ์•ฑ ์„ค์น˜ํ•˜๊ณ  ๋‹ค์šด๋ฐ›๊ฒŒ ํ•˜๋Š”๊ฑด ํ•ญ์ƒ ๋งค์šฐ ๋†’์€ ๋งˆ์ผ€ํŒ…๋น„์šฉ์ด ๋“ญ๋‹ˆ๋‹ค. 

๊ทผ๋ฐ PWA๋ผ๋ฉด ์›น์‚ฌ์ดํŠธ ๋ฐฉ๋ฌธ์ž๋“ค์—๊ฒŒ ๊ฐ„๋‹จํ•œ ํŒ์—…์„ ๋„์›Œ์„œ ์„ค์น˜์œ ๋„ํ•  ์ˆ˜ ์žˆ์œผ๋‹ˆ ํ›จ์”ฌ ์ ์€ ๋งˆ์ผ€ํŒ… ๋น„์šฉ์ด ๋“ค๊ณ ์š”. 

๊ทธ๋ž˜์„œ ๋ฏธ๊ตญ์—์„  PWA๋ฅผ ์ ๊ทน ์ด์šฉํ•˜๊ณ  ์žˆ๋Š” ์‡ผํ•‘๋ชฐ๋“ค์ด ๋งŽ์Šต๋‹ˆ๋‹ค. 

 

PWA ๋งŒ๋“œ๋Š” ๋ฒ•

1. PWA๊ฐ€ ์…‹ํŒ…๋œ ๋ฆฌ์•กํŠธ ํ”„๋กœ์ ํŠธ ์ƒ์„ฑ

 npx create-react-app ํ”„๋กœ์ ํŠธ๋ช… --template cra-template-pwa

 

 

2. ์…‹ํŒ…

index.js ํ•˜๋‹จ์— ์žˆ๋Š” ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ

(index.js)

serviceWorkerRegistration.unregister();

์•„๋ž˜์™€ ๊ฐ™์ด ๋ฐ”๊พผ๋‹ค.

(index.js)

serviceWorkerRegistration.register();

๋ฐ”๊ฟ”์ค€ ๋’ค ํ„ฐ๋ฏธ๋„ ์ฐฝ์— ์•„๋ž˜ ๋ช…๋ น์–ด๋ฅผ ์ž…๋ ฅํ•ด์ฃผ๋ฉด service-worker.js ํŒŒ์ผ์ด ์ƒ๊ธด๋‹ค.

(terminal)

npm run build

 

3. ํ™•์ธ

PWA ์ž˜๋˜๋‚˜ ํ™•์ธํ•˜๋ ค๋ฉด build๋œ๊ฑธ VScode๋กœ ์˜คํ”ˆํ•ด์„œ index.html ๋ฏธ๋ฆฌ๋ณด๊ธฐ ๋„์šด๋‹ค.

=> ์„ค์น˜๋ฒ„ํŠผ ์ƒ๊ธฐ๋ฉด PWA์ž„.

 

manifest.json / service-worker.js ํŒŒ์ผ

manifest.json ํŒŒ์ผ : ์›น์•ฑ์˜ ์•„์ด์ฝ˜, ์ด๋ฆ„, ํ…Œ๋งˆ์ƒ‰ ์ด๋Ÿฐ๊ฑธ ๊ฒฐ์ •ํ•˜๋Š” ๋ถ€๋ถ„์ด๋ผ๊ณ  ๋ณด์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค. 

{
  "version" : "์—ฌ๋Ÿฌ๋ถ„์•ฑ์˜ ๋ฒ„์ „.. ์˜ˆ๋ฅผ ๋“ค๋ฉด 1.12 ์ด๋Ÿฐ๊ฑฐ",
  "short_name" : "์„ค์น˜ํ›„ ์•ฑ๋Ÿฐ์ฒ˜๋‚˜ ๋ฐ”ํƒ•ํ™”๋ฉด์— ํ‘œ์‹œํ•  ์งง์€ 12์ž ์ด๋ฆ„",
  "name" : "๊ธฐ๋ณธ์ด๋ฆ„",
  "icons" : { ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์‚ฌ์ด์ฆˆ๋ณ„ ์•„์ด์ฝ˜ ์ด๋ฏธ์ง€ ๊ฒฝ๋กœ },
  "start_url" : "์•ฑ์•„์ด์ฝ˜ ๋ˆŒ๋ €์„ ์‹œ ๋ณด์—ฌ์ค„ ๋ฉ”์ธํŽ˜์ด์ง€ ๊ฒฝ๋กœ",
  "display" : "standalone ์•„๋‹ˆ๋ฉด fullscreen",
  "background_color" : "์•ฑ ์ฒ˜์Œ ์‹คํ–‰์‹œ ์ž ๊น ๋œจ๋Š” splashscreen์˜ ๋ฐฐ๊ฒฝ์ƒ‰",
  "theme_color" : "์ƒ๋‹จ ํƒญ์ƒ‰์ƒ ๋“ฑ ์›ํ•˜๋Š” ํ…Œ๋งˆ์ƒ‰์ƒ",
}

 

service-worker.js ํŒŒ์ผ

- ์ด ํŒŒ์ผ์— ์„ค์ •์„ ์ž˜ ํ•ด์ฃผ๋ฉด ์ด์ œ ์—ฌ๋Ÿฌ๋ถ„์˜ ์›น์•ฑ์„ ์„ค์น˜ํ–ˆ์„ ๋•Œ ์–ด๋–ค CSS, JS, HTML, ์ด๋ฏธ์ง€ ํŒŒ์ผ์ด ํ•˜๋“œ์— ์„ค์น˜๋ ์ง€ ๊ฒฐ์ •ํ•  ์ˆ˜ ์žˆ๋‹ค.

- ๊ทธ๋Ÿผ ์ด์ œ ๋‹ค์Œ์— ์•ฑ์„ ์ผค ๋•Œ๋งˆ๋‹ค ์„œ๋ฒ„์— CSS,JS,HTML ํŒŒ์ผ์„ ์š”์ฒญํ•˜๋Š”๊ฒŒ ์•„๋‹ˆ๋ผ Cache Storage์— ์ €์žฅ๋˜์–ด์žˆ๋˜ CSS,JS,HTML ํŒŒ์ผ์„ ์‚ฌ์šฉํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค.

- ๊ทธ๋Ÿผ ์ด์ œ ์˜คํ”„๋ผ์ธ์—์„œ๋„ ์‚ฌ์šฉ์ด ๊ฐ€๋Šฅํ•ด์ง€๋Š”๊ฑฐ์ฃ