광卫 ㅇr님! 누구㈏★ ㉠ㅏ능 Next.js 프로젝트를 5분만에 앱으로

y·2024년 5월 22일
19

💬 TIL

목록 보기
8/10
post-thumbnail
post-custom-banner

Next.js로 만든 웹만 있다면? 나도 웹 앱 만들기 5분만에 가능!


Next.js로 프로젝트를 진행했는데, 데스크탑이 아닌 모바일 버전으로 사용할 것을 고려해 모바일 디자인으로만 했었다. 그런데 웹보다는 앱이 더 편할거 같아 앱으로 제작해야할까 고민하던 중 웹 앱으로 쉽게 발행할 수 있다고 해서 next-pwa를 이용해 웹 앱으로 만들어보았다.

PWA가 뭣인데요..?

PWA(Progressive Web Apps)HTML/CSS/javascript와 같은 웹 기술로 만드는 앱이다. 우리가 온라인에서 볼 수 있는 사이트 중 트위터나 스타벅스, 핀터레스트 등은 PWA 웹앱으로 이용이 가능하며, 네이티브 앱과 비슷한 사용자 경험을 제공한다.

네이티브 앱과 PWA 차이는 무엇일까?
우리가 앱스토어나 플레이스토어에서 다운로드하는 네이티브 앱은 일반적으로 해당 플랫폼에 특화된 언어를 이용해 만드는 경우가 많다. 이때 해당하는 언어는 스위프트, 코틀린, 플러터 등이 있다. 반면 PWA는 홈 화면에 저장되면 브라우저에서 실행되고 네이티브 앱처럼 동작한다.

PWA 장점! 이래도 안 해?

  • 기존에 존재하는 웹 사이트를 다른 언어 사용없이 코드를 조금만 추가해 간단하게 앱으로 만들 수 있다.
  • 웹으로 발행했을 때 알림과 같은 기능을 제공하지 못했다면, PWA는 푸시 알림을 통해 사용자들과 소통할 수 있다.
  • 모바일에서 웹 사이트를 보는 것보다 PWA를 보는 것이 더 빠르고 가벼우며, 화면이 보기 좋다.
  • IOS, 안드로이드 개발을 따로 할 필요가 없이 웹 기술만으로 발행이 가능하다.

이 외에도 다양한 장점이 있겠지만, PWA의 큰 장점은 다른 기술이 필요없이 간단하고 부드러우며 알림이 가능하다는 것이다.

Next.js 14 프로젝트로 웹 앱 만들기


1. next-pwa 설치하기

npm i @ducanh2912/next-pwa && npm i -D webpack

2. next.config.mjs 파일 수정하기

/** @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);

3. public 폴더에 manifest.json 파일 생성해주기

{
  "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가지인데 더 다양하게 넣어도 된다.

4. layout.js 파일 수정해주기

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 파일에 설정한 로고를 보여준다.

들어갔을 때도 다르다!

웹앱으로 발행하기 전

사파리 웹 브라우저로 들어가서 상단에 주소 창과 하단에 도구바가 있어서 갑갑한 느낌이 든다.

웹앱으로 발행한 후

앱처럼 아무 상단 바, 하단 바 없이 부드럽게 작동한다.

profile
hiyunn.contact@gmail.com
post-custom-banner

0개의 댓글