좋은생각카드
카드 한 장을 뽑아 짧은 문장을 보고, 내 문장과 메모는 내 기기에만 저장하는 무료 공개 앱입니다.
사용 기술
- Google Apps Script
- HtmlService
- Cloudflare Pages
- localStorage
- Playwright
구조
앱 본체는 Google Apps Script의 HtmlService로 만들고, Cloudflare Pages는 공개 주소와 설치 가능한 앱 셸만 맡습니다. 기본 카드 덱은 빌드할 때 정적 데이터로 묶고, 사용자가 추가한 문장과 메모는 각자의 브라우저 localStorage에만 저장합니다. 별도 서버, 로그인, 데이터베이스를 운영하지 않고 바로 열어 쓰는 구조입니다.
좋은생각카드는 “구글 계정 안에서 만든 앱은 조잡하다”는 선입견을 깨기 위한 실험입니다. 링크를 열면 설명 페이지가 아니라 바로 카드 덱이 나오고, 사용자는 가운데 카드를 탭하거나 끌어 내려 오늘의 문장을 뽑습니다.
소스 전체를 공개했습니다 (MIT): github.com/Haeminway1/good-thought-card — 프론트엔드·백엔드·배포 스크립트까지 그대로 있습니다. 포크해서 명언 덱만 바꾸면, 당신만의 앱을 같은 방식(구글 계정 안, 유지비 0원에 가깝게)으로 올릴 수 있습니다.
핵심은 거창하지 않습니다. 작은 앱은 작게 만들수록 좋습니다. 별도 서버를 빌리고, 로그인 시스템을 붙이고, 데이터베이스부터 설계하지 않아도 됩니다. 목적이 분명하면 Google Apps Script만으로도 충분히 빠르고 간편한 도구가 됩니다.
무엇을 할 수 있나
- 카드 덱에서 랜덤 문장을 한 장 뽑습니다.
- 바로 직전에 나온 문장이 반복되지 않게 했습니다.
- 내 문장을 추가하면 이 기기에만 저장됩니다.
- 뽑은 문장에
내 생각 메모를 남기고 날짜별로 다시 봅니다. - 모바일에서는 한 손으로 쓰고, 데스크톱에서는 작은 앱 셸로 뜹니다.
이 앱은 가입을 요구하지 않습니다. 저장소를 만들라고 하지도 않습니다. 열면 바로 씁니다.
왜 이 방식인가
작은 공개 앱에서 가장 무거운 짐은 기능이 아니라 운영입니다. 서버를 두면 배포, 보안, 비용, 장애 대응이 따라옵니다. 로그인과 데이터베이스를 붙이면 개인정보와 백업 문제도 생깁니다.
좋은생각카드는 그 짐을 일부러 만들지 않았습니다. 기본 문장 덱은 앱 안에 정적으로 넣고, 사용자가 직접 추가한 문장과 메모는 자기 브라우저 안에만 둡니다. 그래서 공개 링크로 열 수 있지만, 방문자끼리 데이터가 섞이지 않습니다.
이게 Google Apps Script가 편한 지점입니다. 화면, 데이터 묶음, 배포를 작게 가져가면 “간단해서 허술한 앱”이 아니라 “간단해서 유지가 쉬운 앱”이 됩니다.
사용한 기술
Google Apps Script / HtmlService
앱 화면을 서비스하는 본체입니다. 별도 서버를 열지 않고, 구글 계정 안에서 웹앱 형태로 배포했습니다.
정적 카드 덱 번들링
기본 문장 데이터는 빌드 과정에서 quote-data.js로 묶었습니다. 앱을 열 때 외부 API를 부르지 않으니 첫 사용이 단순하고 빠릅니다.
브라우저 localStorage
사용자가 추가한 문장과 메모는 localStorage에 저장합니다. 이 버전에서는 동기화보다 즉시성과 프라이버시를 우선했습니다.
Cloudflare Pages 래퍼
Apps Script 웹앱을 그대로 노출하지 않고, 공개 주소와 설치 가능한 앱 셸을 Cloudflare Pages가 담당합니다. 실제 앱 로직은 GAS에 남겨 두고, 래퍼는 사용자가 접근하기 쉬운 문 역할만 합니다.
Playwright 기반 확인
모바일 폭, 데스크톱 셸, 카드 뽑기, 키보드 조작, 반복 방지 같은 흐름을 브라우저에서 확인했습니다. 작은 앱이어도 최종 기준은 “빌드가 됐다”가 아니라 “실제로 눌러서 된다”입니다.
만들면서 정한 경계
이 앱은 공개 앱이지만 공유 서비스는 아닙니다. 내가 추가한 문장과 메모는 다른 사람에게 보이지 않습니다. 같은 사람이라도 다른 기기나 시크릿 창에서는 보이지 않을 수 있습니다. 브라우저 데이터를 지우면 사라질 수도 있습니다.
그 대신 얻는 것이 있습니다. 가입이 없습니다. 서버비가 없습니다. 데이터베이스 관리가 없습니다. 비슷한 규모의 작은 도구라면, 이 단순함이 장점입니다.
이 실험이 보여주는 것
GAS로 만든 도구가 꼭 임시방편일 필요는 없습니다. 업무용 입력 화면, 간단한 예약 도구, 현장 체크 앱, 내부 리포트 앱처럼 목적이 좁고 사용 흐름이 선명한 도구는 훨씬 빠르게 만들 수 있습니다.
중요한 건 “큰 플랫폼처럼 보이게 만들기”가 아닙니다. 필요한 일을 바로 하게 만드는 것입니다. 좋은생각카드는 그 기준으로 만든 작은 실험입니다.