
목적
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로 배포하여 확인하여 보니 잘 작동하는 것을 확인할 수 있었다. 앱이 궁금하다면 이 주소로 접속하면 된다. (시간이 지나면 닫혀있을 수도 있다.)

예제
StarBucks
위 사이트에 접속하여 개발자 도구를 열고 manifest 파일을 확인하면 PWA로 구현된 것을 알 수 있다.
결론
PWA는 모바일 + 웹 환경을 구성해야 할 때 개발 시간과 비용을 아낄 수 있는 좋은 방법 중 하나인 것 같다.
다음 시간에는 React Native를 공부해 봐도 좋을 것 같다.
참고 자료
https://f-lab.kr/insight/importance-of-pwa-in-frontend-development
프로그레시브 웹 앱(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
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 |