Next.js로 프로젝트를 진행했는데, 데스크탑이 아닌 모바일 버전으로 사용할 것을 고려해 모바일 디자인으로만 했었다. 그런데 웹보다는 앱이 더 편할거 같아 앱으로 제작해야할까 고민하던 중 웹 앱으로 쉽게 발행할 수 있다고 해서 next-pwa
를 이용해 웹 앱으로 만들어보았다.
PWA(Progressive Web Apps)
는 HTML/CSS/javascript와 같은 웹 기술로 만드는 앱이다. 우리가 온라인에서 볼 수 있는 사이트 중 트위터나 스타벅스, 핀터레스트 등은 PWA 웹앱으로 이용이 가능하며, 네이티브 앱과 비슷한 사용자 경험을 제공한다.
네이티브 앱과 PWA 차이는 무엇일까?
우리가 앱스토어나 플레이스토어에서 다운로드하는네이티브 앱
은 일반적으로 해당 플랫폼에 특화된 언어를 이용해 만드는 경우가 많다. 이때 해당하는 언어는 스위프트, 코틀린, 플러터 등이 있다. 반면PWA
는 홈 화면에 저장되면 브라우저에서 실행되고 네이티브 앱처럼 동작한다.
간단하게
앱으로 만들 수 있다.푸시 알림
을 통해 사용자들과 소통할 수 있다.웹 기술만으로
발행이 가능하다.이 외에도 다양한 장점이 있겠지만, PWA의 큰 장점은 다른 기술이 필요없이 간단하고 부드러우며 알림이 가능하다는 것이다.
npm i @ducanh2912/next-pwa && npm i -D webpack
/** @type {import('next').NextConfig} */
import withPWAInit from "@ducanh2912/next-pwa";
const withPWA = withPWAInit({
dest: 'public',
register: true,
skipWaiting: true,
extendDefaultRuntimeCaching: true,
});
const nextConfig = {
...
};
export default withPWA(nextConfig);
{
"name": "앱 이름",
"short_name": "앱 이름",
"icons": [
{
"src": "/아이콘-192x192.png",
"sizes": "192x192",
"type": "image/png",
"purpose": "any maskable"
},
{
"src": "/아이콘-384x384.png",
"sizes": "384x384",
"type": "image/png"
},
{
"src": "/아이콘-512x512.png",
"sizes": "512x512",
"type": "image/png"
}
],
"theme_color": "#FFFFFF",
"background_color": "#FFFFFF",
"start_url": "/",
"display": "standalone",
"orientation": "portrait"
}
위와 같이 적으면 되는데, 이때 내가 발행할 웹 앱의 아이콘을 사이즈별로 넣어주면 된다. 예시는 3가지인데 더 다양하게 넣어도 된다.
export const metadata = {
...
manifest: "/manifest.json",
appleWebApp: {
capable: true,
statusBarStyle: "default",
title: "앱 이름",
},
}
export const viewport = {
...
themeColor: "#FFFFFF",
}
npm run build && npm run dev
해당 명령어를 입력하고 개발자 도구에서 lighthouse
탭으로 들어가 검사를 해주면 된다.
위 사진과 같이 PWA 체크 표시가 뜨면 완료된 것이고, 만약 뜨지 않는다면 콘솔 창에서 오류 메시지를 확인해야한다. (나 같은 경우 manifest.json을 manifast.json이라 오타를 내서 계속 오류가 났었다..)
공식문서를 꼭 찾아보고 해야한다. 저도 다른 블로그 글 참고해서 했는데, 방법이 변경된건지 오류만 떴는데 공식문서 보고 하니까 문제가 없었다. 오류가 난다면 공식문서를 꼭 체크해볼 것..!
다른게 있을까 생각했는데, 달랐다! 매우 깔끔해지고 가벼워진 느낌이 들었다.
일단 PWA 발행 전, 사파리에서 웹 사이트로 접속해 홈 화면에 추가를 누르면 그냥 마음대로 로고를 만들어준다. 반면 PWA로 발행하고 난 후에는 내가 manifest.json 파일에 설정한 로고를 보여준다.
사파리 웹 브라우저로 들어가서 상단에 주소 창과 하단에 도구바가 있어서 갑갑한 느낌이 든다.
앱처럼 아무 상단 바, 하단 바 없이 부드럽게 작동한다.