์น ๊ฐ๋ฐ์ ๊ณต๋ถํ๋ฉด์ ์ ์ ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ์ ํฅ๋ฏธ๋ฅผ ๊ฐ์ง๊ฒ ๋์๋ค. ์ฃผ๋ ฅ ์คํ์ด React์ฌ์ React Native๋ฅผ ๊ณต๋ถํด์ผํ๋ ๊ณ ๋ฏผํ๋ ์ฐจ์, ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ์ ์ฌํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ฉด์๋ ์น ๊ธฐ์ ๋ง์ผ๋ก ๊ตฌํํ ์ ์๋ PWA(Progressive Web App)์ ์๊ฒ ๋์๋ค.
๊ฐ์ธ์ ์ผ๋ก ์ฌ๋ฌ ํ๋ก์ ํธ์์ PWA๋ฅผ ์ ์ฉํด๋ณด์์ผ๋ฉฐ, ์ง๊ธ ์งํ์ค์ธ ํด์ปคํค์์๋ PWA๋ฅผ ์ ์ฉํด๋ณด์๋ค. ์ด์ ๋ ์ด๋ค ํ๋ก์ ํธ๋ฅผ ์์ํ๋ PWA๋ถํฐ ์ ์ฉํ๊ณ ๋ณผ ์ ๋๋ก PWA๋ฅผ ์ฌ๋ํ์ง๋ง, ๋ถ๋๋ฝ๊ฒ๋ ์ ์๊ณ ์ฌ์ฉํ์ง๋ ๋ชปํ๋ค. ์ผ๋จ ์ค์น ๋ฒํผ๋ง ๋จ๋ฉด ๋ง์กฑํ๋ ์์ค์ด์๋๋ฐ ์ด์ ๋ PWA๋ฅผ ์ ์ฉํ๋ ๊ฒ์ ๊ทธ์น์ง ์๊ณ , ๋ณด๋ค ๊น์ด ์ดํดํ๊ณ ํ์ฉํ๊ธฐ ์ํด PWA์ ์ ๋ฐ์ ์ธ ๊ฐ๋ ๋ถํฐ ํต์ฌ ๊ธฐ์ ๊น์ง ์ ๋ฆฌํด๋ณด๋ ค๊ณ ํ๋ค.
1. PWA(Progressive Web App)๋
PWA(Progressive Web App)์ ์น ๊ธฐ์ ์ ํ์ฉํ์ฌ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ์ ์ฌํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด๋ค.
๊ตฌ๊ธ์ด ์ฒ์ ๊ฐ๋ ์ ์ ๋ฆฝํ์ผ๋ฉฐ, '์ง๋ณด์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ' ์ด๋ผ๋ ์ด๋ฆ์ฒ๋ผ, ์ ํต์ ์ธ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ํ๊ณ๋ฅผ ๋ฐ์ด๋์ด ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ค. PWA๋ ๊ธฐ์กด์ ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ๋ฌ๋ฆฌ ์คํ๋ผ์ธ์์ ์๋ํ ์ ์๊ณ , ํธ์ ์๋ฆผ๊ณผ ํ ํ๋ฉด ๋ฐ๋ก๊ฐ๊ธฐ ์ค์น ๋ฑ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ค.
์ฌํ ์น ๊ธฐ์ ์ฒ๋ผ, PWA๋ ๊ธฐ๋ณธ์ ์ผ๋ก HTML, CSS, Javascript๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๋๋ค. ์ฌ๊ธฐ์ Service Worker, Web Manifes ๋ฑ์ ๊ธฐ์ ์ ํ์ฉํ์ฌ, ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๊ฐ์ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ๋ค. ์ด๋ฌํ ํน์ฑ ๋๋ถ์ ์ฌ์ฉ์๋ ๋ณ๋์ ์ฑ ์คํ ์ด์์ ๋ค์ด๋ก๋ ํ์ง๋ ์๊ณ ๋ ์น์ฌ์ดํธ๋ฅผ ๋ค์ดํฐ๋ธ ์ฑ์ฒ๋ผ ์ฌ์ฉํ ์ ์๋ค.
PWA์ ๊ฐ์ฅ ํฐ ํน์ง์ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ์ ์ฌํ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ฉด์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฅ์ ์ ๊ทธ๋๋ก ์ ์งํ๋ค๋ ์ ์ด๋ค. PWA์ ์ฃผ์ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
์คํ๋ผ์ธ ์ง์
PWA๋ Service Worker๋ฅผ ์ด์ฉํ์ฌ, ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋์ด์ง ์ํฉ์์๋ ๊ธฐ๋ณธ์ ์ธ ๊ธฐ๋ฅ์ ์ ๊ณตํ ์ ์๋ค. ์บ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋ผ์ธ์์๋ ํ์ด์ง๋ฅผ ๋ก๋ํ ์ ์์ผ๋ฉฐ, ๋คํธ์ํฌ๊ฐ ๋ณต๊ตฌ๋๋ฉด ๋ฐ์ดํฐ๋ฅผ ๋๊ธฐํํ ์ ์๋ค.
๋ฐฑ๊ทธ๋ผ์ด๋ ๋๊ธฐํ
๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋๊ฒผ์ ๋ ์ฌ์ฉ์๊ฐ ์ ๋ ฅํ ๋ฐ์ดํฐ๋ฅผ ์์ ์ ์ฅํ๊ณ , ์ฐ๊ฒฐ์ด ๋ณต๊ตฌ๋๋ฉด ์๋์ผ๋ก ์๋ฒ์ ๋๊ธฐํํ ์ ์๋ค(SyncManager API ํ์ฉ ๊ฐ๋ฅ)
navigator.serviceWorker.ready.then(reg => {
return reg.sync.register('sync-event');
});
ํธ์ ์๋ฆผ ์ง์
ํธ์ ์๋ฆผ์ ํ์ฉํ์ฌ ์ฌ์ฉ์๊ฐ ์ฑ์ ์คํํ์ง ์์๋ ์๋ฆผ์ ๋ฐ์ ์ ์๋ค. Web Push API๋ฅผ ์ฌ์ฉํ์ฌ ๊ตฌํ๋๋ฉฐ, ์ฌ์ฉ์ ๋ฆฌํ ์ ์ ๋์ด๋ ๋ฐ ์ค์ํ ์ญํ ์ ํ๋ค.
์ ์ฅ ๊ณต๊ฐ ๊ด๋ฆฌ
์บ์ ์ฌ์ฉ๋์ด ๋ง์์ง๋ฉด ๋ธ๋ผ์ฐ์ ๊ฐ ์ด๋ฅผ ์ญ์ ํ ์ ์๋ค. Storage API๋ฅผ ํ์ฉํด ์ ์ฅ ๊ณต๊ฐ์ ํจ์จ์ ์ผ๋ก ๊ด๋ฆฌํ ํ์๊ฐ ์๋ค.
์ฑ ์คํ ์ด ์ค์น ๋ถํ์
PWA๋ ๋ณ๋์ ์ฑ ์คํ ์ด๋ฅผ ๊ฑฐ์น์ง ์๊ณ ๋ธ๋ผ์ฐ์ ์์ ์ง์ ์ค์นํ ์ ์๋ค. ์ฌ์ฉ์๋ ์น ์ฌ์ดํธ๋ฅผ ๋ฐฉ๋ฌธํ ํ ๋ฐ๋ก ํ ํ๋ฉด์ ์ถ๊ฐํ์ฌ ๋ค์ดํฐ๋ธ ์ฑ์ฒ๋ผ ์คํํ ์ ์๋ค.
2. PWA์ ํต์ฌ ๊ธฐ์
PWA๋ฅผ ๊ตฌํํ๊ธฐ ์ํด์๋ ๋ช ๊ฐ์ง ํต์ฌ ๊ธฐ์ ์ ์ ์ฉํด์ผ ํ๋ค. ์ฃผ์ ์์๋ ๋ค์๊ณผ ๊ฐ๋ค.
Service Worker
Service Worker๋ ๋ธ๋ผ์ฐ์ ์ ์น ์๋ฒ ์ฌ์ด์์ ๋คํธ์ํฌ ์์ฒญ์ ๊ฐ๋ก์ฑ๊ณ , ์บ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํ์ฌ ์คํ๋ผ์ธ์์๋ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋์ํ ์ ์๋๋ก ํ๋ ๊ธฐ์ ์ด๋ค.
if ('serviceWorker' in navigator) {
navigator.serviceWorker.register('/service-worker.js')
.then(registration => {
console.log('Service Worker ๋ฑ๋ก ์ฑ๊ณต:', registration);
})
.catch(error => {
console.log('Service Worker ๋ฑ๋ก ์คํจ:', error);
});
}
์ ์ฝ๋์์ navigator.serviceWorker.register() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ Service Worker๋ฅผ ๋ฑ๋กํ๋ค. ๋ฑ๋ก์ด ์๋ฃ๋๋ฉด ๋ธ๋ผ์ฐ์ ๋ ํด๋น ์คํฌ๋ฆฝํธ๋ฅผ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์คํํ๋ฉด์ ๋คํธ์ํฌ ์์ฒญ์ ๊ฐ๋ก์ฑ๊ฑฐ๋ ์บ์ฑ ์ ๋ต์ ์ํํ ์ ์๋ค.
Web App Manifest
Web App Manifest๋ JSON ํ์ผ๋ก, PWA๊ฐ ๋ค์ดํฐ๋ธ ์ฑ์ฒ๋ผ ๋์ํ ์ ์๋๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ๋ฉํ๋ฐ์ดํฐ๋ฅผ ์ ๊ณตํ๋ค.
{
"name": "My PWA App",
"short_name": "PWA",
"start_url": "/index.html",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#000000",
"icons": [
{
"src": "/icons/icon-192x192.png",
"sizes": "192x192",
"type": "image/png"
}
]
}
JSON ํ์ผ ์์ฑ ํ, index.html์์ ๋ค์๊ณผ ๊ฐ์ด ์ฐ๊ฒฐํ๋ค.
<link rel="manifest" href="/manifest.json">
์ค์ ์ ์๋ฃํ๋ฉด ์ฌ์ฉ์๊ฐ ์น ์ฌ์ดํธ๋ฅผ ํ ํ๋ฉด์ ์ถ๊ฐํ ๋ ํด๋น ๋ฉํ๋ฐ์ดํฐ๊ฐ ๋ฐ์๋๋ฉฐ, ๋ค์ดํฐ๋ธ ์ฑ์ฒ๋ผ ๋ณด์ด๋ ํจ๊ณผ๋ฅผ ์ป์ ์ ์๋ค.
์บ์ฑ ์ ๋ต
PWA์์๋ ์บ์ฑ์ ํตํด ์คํ๋ผ์ธ ์ง์์ ๊ฐํํ๋ค. ๋ํ์ ์ธ ์บ์ฑ ์ ๋ต์ ๋ค์๊ณผ ๊ฐ๋ค.
- Cache First: ๋คํธ์ํฌ๋ณด๋ค ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฐ์ ์ ๊ณต
- Network First: ์ต์ ๋ฐ์ดํฐ ์ฐ์ ์์ฒญ, ์คํจ ์ ์บ์ ์ฌ์ฉ
- Stale-While-Revalidate: ์บ์๋ ๋ฐ์ดํฐ๋ฅผ ์ฆ์ ์ ๊ณตํ๋ฉด์ ๋คํธ์ํฌ ์์ฒญ์ ํตํด ์ต์ ๋ฐ์ดํฐ๋ก ์ ๋ฐ์ดํธ
self.addEventListener('fetch', event => {
event.respondWith(
caches.match(event.request).then(response => {
return response || fetch(event.request);
})
);
});
์ ์ฝ๋๋ Cache-first ์ ๋ต์ ๊ตฌํํ ์์์ด๋ค.
3. PWA ํ๋ก์ ํธ์ ์ ์ฉํ๊ธฐ
react ํ๋ก์ ํธ์์ PWA๋ create-react-app์ผ๋ก ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ค.
1. ํ๋ก์ ํธ ์์ฑ
npx create-react-app <ํ๋ก์ ํธ๋ช
> --template cra-template-pwa
2. manifest.json ์ค์
์๋น์ค ์ด๋ฆ, ์์ด์ฝ ๋ฑ์ ์ค์ ํ ์ ์๋ค.
{
"short_name": "PWA App",
"name": "My Progressive Web Application",
"start_url": "/",
"display": "standalone",
"background_color": "#ffffff",
"theme_color": "#000000"
}
3. serviceWorkerRegistration.js ์์
serviceWorkerRegistration.register();
unregister -> register๋ก ๋ณ๊ฒฝํด์ฃผ์ด์ผ ํ๋ค.
- register(): serviceworker๋ฅผ ํ์ฑํํ์ฌ ์คํ๋ผ์ธ ์บ์ฑ, ํธ์์๋ฆผ ๋ฑ ๊ธฐ๋ฅ ์ฌ์ฉ์ด ๊ฐ๋ฅํ๊ฒ ํ๋ค.
- unregister(): ๊ธฐ์กด ๋ฑ๋ก๋ service worker๋ฅผ ์ ๊ฑฐํ์ฌ pwa ๊ธฐ๋ฅ์ ๋นํ์ฑํํ๋ค.
4. PWA์ ์ฅ์ ๊ณผ ๋จ์
โ PWA์ ์ฅ์
๋ฉํฐ ํ๋ซํผ ์ง์
- PWA๋ ์น ๊ธฐ์ ์ ๊ธฐ๋ฐ์ผ๋ก ๊ฐ๋ฐ๋๋ฏ๋ก, ๋ณ๋์ ๋ค์ดํฐ๋ธ ์ฑ์ ๋ง๋ค์ง ์์๋ ๋ค์ํ ์ด์์ฒด์ ์์ ๋์ผํ ํ๊ฒฝ์ ์ ๊ณตํ ์ ์๋ค.
- ํ๋์ ์ฝ๋๋ฒ ์ด์ค๋ก ์น๊ณผ ๋ชจ๋ฐ์ผ์ ๋ชจ๋ ์ง์ํ ์ ์์ด ๊ฐ๋ฐ ๋ฐ ์ ์ง๋ณด์ ๋น์ฉ ์ ๊ฐ์ด ๊ฐ๋ฅํ๋ค.
์ค์น ๋ถ๋ด ์์
- ์ฌ์ฉ์๊ฐ ์ฑ์คํ ์ด๋ฅผ ๊ฑฐ์น์ง ์๊ณ , ๋ธ๋ผ์ฐ์ ์์ ๋ฐ๋ก ์ฑ์ ์ค์นํ ์ ์๋ค.
- ์ค์น ๊ณผ์ ์ด ๊ฐ๋จํด ์ฌ์ฉ์ ์ดํ์ ์ค์ผ ์ ์๋ค.
๋น ๋ฅธ ๋ก๋ฉ ์๋
- Service Worker๋ฅผ ํ์ฉํ ์บ์ฑ ๊ธฐ์ ๋ก ์ธํด ํ์ด์ง ๋ก๋ฉ ์๋๊ฐ ๋นจ๋ผ์ง๋ค.
- ๋คํธ์ํฌ๊ฐ ๋ถ์์ ํ ํ๊ฒฝ์์๋ ๋น ๋ฅด๊ฒ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ ์ ์๋ค.
์คํ๋ผ์ธ ์ง์
- ๋คํธ์ํฌ ์ฐ๊ฒฐ์ด ๋๊ฒจ๋ ์บ์ฑ๋ ๋ฐ์ดํฐ๋ฅผ ํ์ฉํด ์ฑ์ ์ฌ์ฉํ ์ ์๋ค.
- ์คํ๋ผ์ธ์์๋ ํน์ ๊ธฐ๋ฅ์ด ๋์ํ๋๋ก ์ค์ ํ ์ ์๋ค.
ํธ์ ์๋ฆผ ๊ธฐ๋ฅ
- ์น ํธ์ ์๋ฆผ์ ํตํด ์ฌ์ฉ์ ๋ฆฌํ ์ ์ ๋์ผ ์ ์๋ค.
- ํธ์ ๊ธฐ๋ฅ์ ํ์ฉํ๋ฉด ๋ง์ผํ ๋ฐ ์ฌ์ฉ์ ์ฐธ์ฌ ์ ๋๊ฐ ๊ฐ๋ฅํ๋ค.
SEO(๊ฒ์ ์์ง ์ต์ ํ)์ ์ ๋ฆฌ
- ์ผ๋ฐ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๋ฌ๋ฆฌ ์น ํ์ด์ง ํํ๋ก ์ ๊ณต๋๋ฏ๋ก, ๊ฒ์ ์์ง์์ ํฌ๋กค๋ง์ด ๊ฐ๋ฅํ๋ค.
- ๊ตฌ๊ธ, ๋ค์ด๋ฒ ๋ฑ์ ๊ฒ์ ๊ฒฐ๊ณผ์ ๋ ธ์ถ๋ ์ ์์ด ๋ ๋ง์ ์ ์ ์ ๊ธฐ๋ํ ์ ์๋ค.
์ ๋ฐ์ดํธ๊ฐ ์ฝ๋ค
- ์ฌ์ฉ์๊ฐ ์ฑ์ ์ง์ ์ ๋ฐ์ดํธํ ํ์ ์์ด, ๋ฐฐํฌ๋ ์ต์ ๋ฒ์ ์ด ์๋์ผ๋ก ์ ์ฉ๋๋ค.
- ๋ฒ๊ทธ ์์ ์ด๋ ๊ธฐ๋ฅ ์ถ๊ฐ๊ฐ ์ฉ์ดํ๋ค.
โ PWA์ ๋จ์
์ ํ์ ์ธ iOS ์ง์
- iOS์ Safari๋ PWA์ ์ผ๋ถ ๊ธฐ๋ฅ์ ์ ํ์ ์ผ๋ก ์ง์ํ๋ฉฐ, ํธ์ ์๋ฆผ ๊ธฐ๋ฅ์ด ์์ ํ์ง ์๋ค.
- ๋ฐฐํฐ๋ฆฌ ์ ์ฝ ๋ชจ๋์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ๋์์ด ์ ํ๋ ์ ์๋ค.
ํ๋์จ์ด ์ ๊ทผ์ฑ ์ ํ
- ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๋น๊ตํ์ ๋, ์นด๋ฉ๋ผ, ๋ธ๋ฃจํฌ์ค, NFC ๋ฑ ์ผ๋ถ ๊ธฐ๊ธฐ ๊ธฐ๋ฅ์ ๋ํ ์ ๊ทผ์ด ์ ํ์ ์ด๋ค.
- ๊ณ ์ฌ์์ ๊ทธ๋ํฝ ์ฐ์ฐ์ด ํ์ํ ๊ฒฝ์ฐ ๋ค์ดํฐ๋ธ ์ฑ๋ณด๋ค ์ฑ๋ฅ์ด ๋จ์ด์ง ์ ์๋ค.
์ฑ ์คํ ์ด ์ ์ ์ฐจ๋จ
- ์ฑ์คํ ์ด์ ๋ฑ๋ก๋์ง ์์ผ๋ฏ๋ก, ์ฑ์คํ ์ด๋ฅผ ํตํ ์ฌ์ฉ์ ์ ์ ์ด ์ด๋ ต๋ค.
- ๊ธฐ์กด ์ฑ์คํ ์ด ์ํ๊ณ๋ฅผ ํ์ฉํ ๋ง์ผํ ์ด ๋ถ๊ฐ๋ฅํ๋ค.
๋ธ๋ผ์ฐ์ ๋ณ ํธํ์ฑ ๋ฌธ์
- ๋ธ๋ผ์ฐ์ ๋ง๋ค PWA ์ง์ ์์ค์ด ๋ค๋ฅด๋ค. (ํนํ iOS์ Safari๋ ์ผ๋ถ ๊ธฐ๋ฅ ๋ฏธ์ง์)
- ์ต์ ๊ธฐ๋ฅ์ ํ์ฉํ๋ ค๋ฉด ๋ธ๋ผ์ฐ์ ํธํ์ฑ์ ๊ณ ๋ คํด์ผ ํ๋ค.
๋ณด์ ์ด์
- HTTPS ํ๊ฒฝ์์๋ง ์๋ํด์ผ ํ๋ฉฐ, Service Worker์ ๋ณด์ ์ค์ ์ด ํ์ํ๋ค.
- ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ๋น๊ตํ๋ฉด OS ์ฐจ์์ ๋ณด์์ด ๋ถ์กฑํ ์ ์๋ค.
PWA๋ฅผ ์ฑ์คํ ์ด์ ์ถ์ํ ์ ์๋ค?
ํ๋ก ํธ์๋ ๊ฐ๋ฐ์๋ก์ PWA๋ ์น ๊ธฐ์ ๋ง์ผ๋ก๋ ๋ค์ดํฐ๋ธ ์ฑ๊ณผ ์ ์ฌํ ์ฌ์ฉ์ ๊ฒฝํ์ ์ ๊ณตํ ์ ์๋ค๋ ์ ์์ ๋งค๋ ฅ์ ์ธ ์ ํ์ง์๋ค. ํฌ๋ก์ค ํ๋์ํผ ํธํ์ฑ๊ณผ ๋ฐ์ด๋ ์ ๊ทผ์ฑ์ ๋ฌผ๋ก , ๋ชจ๋ฐ์ผ ์ฑ ๊ฐ๋ฐ์ ๋ํ ์ถ๊ฐ์ ์ธ ํ์ต ๋ถ๋ด ์์ด๋ ์ฑ๊ณผ ๊ฐ์ ์๋น์ค๋ฅผ ๊ตฌํํ ์ ์๋ค๋ ์ฅ์ ์ด ์ปธ๋ค.
ํนํ ์ฑ์คํ ์ด ๋ฑ๋ก ๊ณผ์ ์์ด๋ ์ฌ์ฉ์๊ฐ ์ง์ ์ค์นํ ์ ์๋ค๋ ์ ์ด ๊ฐ์ฅ ํฐ ์ฅ์ ์ผ๋ก ์ฌ๊ฒจ์ก๋ค. ํ์ง๋ง ๋์์ ์ด๋ ์๋ ์ ๊ฒ์ด๊ธฐ๋ ํ๋ค. ์ฑ ์คํ ์ด๋ฅผ ํตํ ๊ฒ์ ๋ ธ์ถ, ์ฌ์ฉ์ ๋ฆฌ๋ทฐ, ๋ค์ด๋ก๋ ํต๊ณ ๋ฑ ์คํ ์ด ์ํ๊ณ๊ฐ ์ ๊ณตํ๋ ์ด์ ์ ํ์ฉํ ์ ์๋ค๋ ์์ฌ์์ด ์์๋ค.
๊ทธ๋ฌ๋ ์ค, PWA๋ฅผ ์ฑ์คํ ์ด์ ์ถ์ํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๋ค. ์ด๋ PWA์ ํ์ฉ ๊ฐ๋ฅ์ฑ์ ํ์ธต ๋ ๋ํ๋ ๋ฐ๊ฒฌ์ด์๋ค. ์น ๊ธฐ์ ์ ์ฅ์ ์ ์ ์งํ๋ฉด์๋ ์ฑ ์คํ ์ด ์ํ๊ณ์ ์ด์ ์ ํจ๊ป ํ์ฉํ ์ ์๊ฒ ๋ ๊ฒ์ด๋ค. ์ฑ ์คํ ์ด(google, apple)์ ๋ฐ๋ผ ๋ณ๋์ ์ค์ ์ด ํ์ํ๋ค.
1. Google play store ์ถ์
TWA(Trusted Web Activity)๋ฅผ ์ฌ์ฉํ์ฌ, PWA๋ฅผ ๋ค์ดํฐ๋ธ ์ฑ์ผ๋ก ํจํค์งํ์ฌ ์ถ์ํ ์ ์๋ค.
2. Apple App Store ์ถ์
์ง์ ๋ฐฐํฌ๋ ์ง์ํ์ง ์์ง๋ง, ios PWA Wrapper, ์น๋ทฐ ๋ํผ๋ฅผ ํตํด ์ถ์๊ฐ ๊ฐ๋ฅํ๋ค.
PWA๋ ์๋ฉด ์์๋ก ์ฌ๋ฏธ์๋ ๊ฒ ๊ฐ๋ค. ํจํค์งํ์ฌ ์ฑ ์คํ ์ด์ ์ถ์ํ ์ ์๋ค๋ ๊ฒ์ ์๊ฒ ๋์๊ณ , ์์ผ๋ก๋ PWA๋ฅผ ์ ์ฉํ ๊ฒ ๊ฐ๋ค. PWA์ ์๋ก์ด ๊ฐ๋ฅ์ฑ์ ์๊ฒ ๋์๊ณ ...์ฑ ์ถ์๊น์ง ์๋ํด๋ณด๋ ๊ฒ๋ ์ฌ๋ฏธ์์ ๊ฒ ๊ฐ๋ค.
'๐ฅ๏ธdevelop > Frontend' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Electron] Vibeํ๊ฒ ์ผ๋ ํธ๋ก ์์ํ๊ธฐ (2) | 2025.03.30 |
---|---|
[Next.js] ๋ก๊ทธ์ธ ๋ค๋ก๊ฐ๊ธฐ๋ก ์ ๊ทผ ์ ํํ๊ธฐ-router.push vs router.replace (0) | 2024.11.19 |
[Three.js] Three.js๋ฅผ ์์ํด๋ณด์ (0) | 2024.10.27 |