시리즈 소개
오프라인 PWA를 목표로 하는 To Do 웹앱 프로젝트 To Do Wild 를 개발하며 배운 것들을 적는 시리즈입니다.
- beta service (일단은 오프라인이 될겁니다.)
- github
1인 개발해 운영 중인 메모 웹앱이 있다. memmo.cc
Laravel + Livewire 스택이고 사실상 거의 PHP라고 보면 된다.
그런데 아무래도 메모 앱이라는 건 오프라인 기능 제공을 해야 하지 않나... 싶은 것이다.
그리고 앞으로의 커리어를 생각해서 Typescript 풀스택을 좀 노려보고 싶어졌다.
그래서 Laravel + Vue 스택으로 전환을 시도하고 있다.
그런데 아무래도 Laravel 웹앱은 오프라인 모드에서 잘 돌 것 같지가 않다.
그리고 '로그인 안 한 상태에서는 + 세션/로컬스토리지 단위 저장' 같은 걸 제공하자면, Laravel 기반에서는 애매하고, 클라이언트 부분이 좀더 강화될 필요가 있다.
애초에 나... 웹앱을 오프라인으로 제공하는 방법을 모르잖아...??
그래서 그냥 '뭔가를 오프라인으로 쌔울 수 있음을 증명하는' 웹앱을 만들어보기로 했다.
욕심 낼 것 없이 To Do 앱으로 만들기로 했다. 가뜩이나 클라이언트 개발은 신입급이고 하니 조바심 내지 말고...
이건 개인적으로 잊어버릴까봐 메모하는 것.
Vue 프로젝트는 vue cli로 시작할 거 없고, Vite로 시작하면 된다.
npm create vite@latest todo-wild -- --template vue
정말 너무너무 귀찮아서 그냥 구글에다 대고 "app icon generator"라고 찾아봤고 아이콘 키친이라는 게 있길래 이걸 썼다.
머 그럴듯하니까 됐다.
manifest.json
MDN 문서 백번 읽고 겨우 구성한 게 이거다.
{
"short_name": "To Do Wild",
"name": "To Do Wild: offline todo app",
"description": "An offline PWA exercise by yuptogun.",
"icons": [
{ "src": "/favicon.ico", "type": "image/x-icon", "sizes": "32x32" },
{ "src": "/icon-192.png", "type": "image/png", "sizes": "192x192" },
{ "src": "/icon-512.png", "type": "image/png", "sizes": "512x512" },
{ "src": "/icon-192-maskable.png", "type": "image/png", "sizes": "192x192", "purpose": "maskable" },
{ "src": "/icon-512-maskable.png", "type": "image/png", "sizes": "512x512", "purpose": "maskable" }
],
"id": "/?source=pwa",
"start_url": "/?source=pwa",
"background_color": "#ffffff",
"theme_color": "#9e9e9e",
"display": "standalone",
"scope": "/",
"orientation": "portrait-primary"
}
이것저것 모자란데 일단 '설치'를 띄우는 데는 성공했다.
Docker 기초를 뗀 이후로 나는 내 컴퓨터에 PHP를 깔지 않는다.
개발컨테이너에 익숙해진 이후로는 node도 깔지 않게 되었다.
이번 프로젝트는 다음 순서로 시작했다.
@command:remote-containers.createDevContainerFile
@command:remote-containers.reopenInContainer
@command:workbench.action.remote.close
@command:remote-containers.rebuildAndReopenInContainer
요컨대 프로젝트의 설치와 구성을 모두 개발컨테이너로 해버린다는 발상이다.
사실, 퍼미션 문제만 잘 회피할 수 있다면, 다음 순서대로 하는 게 제일 깔끔하다.
cd my-projects/
docker run --rm -it -v "$(pwd):/app" -w /app node:alpine npm create vite@latest todo-wild -- --template vue
cd todo-wild/
git init
code .
# 이후 개발컨테이너 설정파일 만들어서 열고 실행