PWA

2025. 4. 28. 02:18·튜토리얼

목적


K-PaaS 대회에 친구들과 함께 출전하게 되어 새롭게 배워야 할 기술이다.

 

Progressive Web App이란?


PWA는 Progressive Web App 그대로 해석하면 진보적인 웹 앱이라는 뜻으로 웹과 앱의 장점을 결합한 기술이다. PWA는 기본적으로 Web으로 구성되지만 네이티브 앱의 특성인 오프라인 실행, 빠른 로딩 시간, 홈 화면 위젯 추가 기능 등을 지원한다.

 

PWA, 왜 사용할까?


높은 사용자 경험 제공

네이티브 앱의 장점인 오프라인에서의 사용과 같은 높은 사용자 경험을 제공한다.

 

빠른 성능

기본적으로 브라우저에서 실행되기 때문에 초기, 로드 시 속도가 모두 빠르다.

 

번거롭지 않은 배포

앱 스토어와 같은 검토 과정이 필요한 절차를 거치지 않고 빠르게 배포할 수 있다.

 

핵심 기술


PWA를 구성하는 핵심 기술들을 알아보자.

 

서비스 워커(Service Worker)

네트워크 요청을 가로채고 캐싱하는 역할을 수행하며 백그라운드에서 실행되는 스크립트

오프라인 지원, 데이터 캐싱, 푸시 알림 등의 기능을 구현할 수 있다.

 

매니페스트

PWA에 대한 메타데이터를 제공하는 JSON 파일

홈 화면 위젯 아이콘, 이름, 시작 URL 등을 정의한다.

 

셸 아키텍쳐

콘텐츠가 로딩되기 전 UI의 기본 구조를 미리 로딩하여 높은 UX를 제공하는 아키텍처

html과 같은 정적 콘텐츠를 미리 로딩하고 동적 콘텐츠를 나중에 로딩한다.

 

어떻게 사용할 수 있을까?


PWA는 기본적으로 웹을 기반으로 구성되기 때문에 웹 기술을 사용하여 개발할 수 있다.

가장 기본적인 HTML, CSS, JS부터 React까지 다양하게 사용할 수 있다.

이때 웹과 앱을 모두 지원하기 위해 반응형 웹 디자인을 해야 하는 것을 유의해두자.

 

설치와 초기 설정


필자는 이번에 Next.js의 PWA를 구성하게 도와주는 next-pwa를 사용하였다.

만약 최신 버전에서 호환성 문제가 일어난다면 최신 버전을 더 잘 지원하는 **@ducanh2912/next-pwa** 를 설치하도록 하자.

 

설치

Next.js 설치

npx create-next-app@latest

 

next-pwa 설치

npm install next-pwa

 

manifest.json

Manifest Generator에서 쉽게 manifest 파일을 설정해 준 뒤 사용해 보자.

{
  "theme_color": "#1B1A55",
  "background_color": "#FFFFFF",
  "icons": [
    {
      "purpose": "maskable",
      "sizes": "512x512",
      "src": "/icon512_maskable.png",
      "type": "image/png"
    },
    {
      "purpose": "any",
      "sizes": "512x512",
      "src": "/icon512_rounded.png",
      "type": "image/png"
    }
  ],
  "orientation": "portrait",
  "display": "standalone",
  "dir": "auto",
  "lang": "ko-KR",
  "name": "NASA",
  "short_name": "nasa",
  "description": "nasa open api for study"
}

 

 

색상 설명

Theme Color 탭 부분의 보라 컬러
Background color 스플래시 이미지, 로딩 화면의 배경색

 

display 속성 설명

Standalone(추천) 주소 표시줄, UI 요소가 제거된 네이티브 앱과 가장 비슷한 환경
FullScreen 콘텐츠 이외의 모든 요소가 숨겨지는 환경
Minimal-ui 뒤로가기, 새로고침등의 최소한의 UI 요소가 표시되는 환경
Browser 일반 브라우저와 동일한 환경

 

next.config.ts

Next.js에 PWA를 적용해 보자.

import withPWA from "next-pwa";

const nextConfig = {
	// Next.js 외부 이미지 접근 허용
  images: {
    remotePatterns: [
      {
        protocol: "http" as const,
        hostname: "**",
      },
      {
        protocol: "https" as const,
        hostname: "**",
      },
    ],
  },
};

export default withPWA({
	// build 시 Service Worker, Workbox 파일 public 폴더에 생성
	// (루트 경로에서 동작하게 하려면 무조건 public 폴더에 생성해야함)
  dest: "public",
  
  // Service Worker 등록
  register: true,
  
  // 새로운 Service Worker 생성 시 원래의 Service Worker와 바로 교체
  skipWaiting: true,
  
  // 개발 환경에서 실행 시 PWA 비활성화
  disable: process.env.NODE_ENV === "development",
})(nextConfig);

 

배포 및 실행

PWA가 잘 적용되었는지 확인해 주기 위해 Vercel로 배포하여 확인하여 보니 잘 작동하는 것을 확인할 수 있었다. 앱이 궁금하다면 이 주소로 접속하면 된다. (시간이 지나면 닫혀있을 수도 있다.)

 

예제


Pinterest

StarBucks

 

위 사이트에 접속하여 개발자 도구를 열고 manifest 파일을 확인하면 PWA로 구현된 것을 알 수 있다.

 

결론


PWA는 모바일 + 웹 환경을 구성해야 할 때 개발 시간과 비용을 아낄 수 있는 좋은 방법 중 하나인 것 같다.

다음 시간에는 React Native를 공부해 봐도 좋을 것 같다.

 

참고 자료


https://f-lab.kr/insight/importance-of-pwa-in-frontend-development

 

https://ssow93.tistory.com/56

 

프로그레시브 웹 앱(PWA)에 대한 내용 정리

⚡ 개요 PWA는 Progressive Web App의 약자이다. PWA는 모바일 웹 애플리케이션의 새로운 형태로 사용자가 앱을 다운로드하거나 설치하지 않아도 모바일 기기에서 애플리케이션을 실행할 수 있게 해준

ssow93.tistory.com

 

https://p-web.co.kr/server/bbs/board.php?bo_table=free&wr_id=90&page=6

 

피그마를 활용한 PWA 네이티브 앱 제작 기초 > 자유게시판 | 펜션웹

본문 --> --> PWA(Progressive Web App)는 현대 웹 개발에서 중요한 트렌드로 자리 잡고 있으며, 네이티브 앱의 장점을 결합한 혁신적인 접근 방식입니다. 특히, HTML, CSS, 자바스크립트와 같은 웹 기술을

p-web.co.kr

 

https://nextjs.org/docs/app/building-your-application/configuring/progressive-web-apps

 

Guides: PWAs | Next.js

Learn how to build a Progressive Web Application (PWA) with Next.js.

nextjs.org

 

https://gist.github.com/cdnkr/25d3746bdb35767d66c7ae6d26c2ed98

 

Setting up a PWA with install button in Next.js 15

Setting up a PWA with install button in Next.js 15 - pwa-setup-next15.md

gist.github.com

 

https://api.nasa.gov/

 

NASA Open APIs

 

api.nasa.gov

 

'튜토리얼' 카테고리의 다른 글

Zod  (1) 2025.06.04
스키마  (0) 2025.05.07
React Hooks  (0) 2025.04.23
React Rendering  (0) 2025.04.23
Mock Service Worker  (0) 2025.04.16
'튜토리얼' 카테고리의 다른 글
  • Zod
  • 스키마
  • React Hooks
  • React Rendering
Dino0204
Dino0204
프론트엔드 개발자를 넘어 풀스택 개발자가 되고 싶은 광주소마고 학생의 개발일지.
  • Dino0204
    디노의 개발일지
    Dino0204
    • 분류 전체보기 (22)
      • 튜토리얼 (11)
      • 개발후기 (7)
      • 트러블슈팅 (1)
      • 나의 생각 (2)
      • 서평 (1)
      • 회고 (0)
  • 전체
    오늘
    어제
  • hELLO· Designed By정상우.v4.10.3
Dino0204
PWA
상단으로

티스토리툴바