Apps Script 프로젝트가 늘어나면 반드시 망가지는 것들
Apps Script 프로젝트가 늘어날수록 소유자, 트리거, 권한, 버전 관리가 흩어지는 문제를 정리합니다.
26 개의 글
Apps Script 프로젝트가 늘어날수록 소유자, 트리거, 권한, 버전 관리가 흩어지는 문제를 정리합니다.
Make.com 구독과 Apps Script 직접 운영의 실제 비용을 초기 속도, 예외 처리, 유지보수 기준으로 비교합니다.
바이브코딩으로 빠르게 만든 Apps Script가 시간이 지나며 유지보수 문제로 바뀌는 이유를 정리합니다.
매일 돌던 Apps Script 트리거가 갑자기 멈추는 흔한 원인과 운영자가 먼저 확인해야 할 항목을 정리합니다.
Google Forms 응답 데이터가 며칠 만에 지저분해지는 이유와 수집 직후 정리해야 하는 기준을 설명합니다.
Apps Script 자동화가 실제 업무에서 비용으로 바뀌는 지점을 트리거, 외부 API, 유지보수 관점에서 정리합니다.
모바일 localStorage는 용량이 차면 데이터를 조용히 버린다. 그런데 '저장됨' 플래그는 남아 완료 체크가 뜬다. 저장소 계층별 용도, 큰 본문을 IndexedDB에 두는 법, 열 때 정합성 검사, storage.persist()로 eviction 줄이기까지.
GAS에서 스코프·트리거·권한은 에러 없이 조용히 실패한다. 매니페스트 스코프 하나가 빠지면 트리거가 한 번도 안 돈다. 왜 조용히 실패하는지, 멱등 설치로 20개 한도를 피하는 법, 하트비트와 '설치 직후 증명'까지.
Apps Script는 promote 하는 순간 100% 사용자에게 나간다 — 카나리가 없다. push와 deploy의 차이, 새 검사를 compat → warn → enforce로 내보내는 법, 옛 클라이언트를 세는 텔레메트리, 그리고 사고 시 롤백 명령까지.
구글 시트는 '2026-06' 같은 문자열을 조용히 Date로 강제 변환한다. 저장·읽기·비교가 각자 월을 다르게 계산하면 완료가 영원히 거부된다. 무엇이 강제 변환되는지, 셀을 텍스트로 고정하고 읽을 때 방어하는 법, 배치 쓰기와 수식 인젝션까지.
AI로 현장 점검 앱을 GAS로 만들었다. 데모는 잘 돌았다. 그리고 배포 버튼 하나에 전 현장이 잠기고, 시트가 날짜를 바꿔치기하고, 초록 체크가 거짓말을 했다. 실제로 하루 종일 잡은 버그들과, GAS로 바이브 코딩하기 전에 미리 신경 쓸 것들.
구글 앱스크립트(GAS)로 주문·예약·재고·정산·현장 입력 같은 반복 업무를 자동화하는 법. 무엇이 되고, 어디까지 0원이고, 언제 한계에 부딪히는지 한 곳에 정리한 길잡이.
체크리포트 데모를 만들며 실제로 헤맨 지점과 코드. 공유 시트 동시 저장은 ScriptLock + 멱등 키로 막고, 셀에는 메타데이터만, 내보내기는 시간 예산으로 끊는다. 좋은 코드와 나쁜 코드를 함께 본다.
혼자 쓰는 앱은 화면만 있으면 된다. 여러 점검자가 같은 데이터를 쓰는 점검 앱은 공유, 충돌, 보고서가 핵심이다. 그래도 범위를 좁히면 GAS·시트·드라이브로 유지비 없이 시작할 수 있다. 직접 써볼 수 있는 공개 데모도 있다.
GAS에서 느린 건 자바스크립트가 아니라 Sheets·Drive 같은 서비스 호출이다. 루프 안 getValue/setValue를 일괄 getValues/setValues로 바꾸면 수십 배 빨라진다.
구글 시트 셀은 5만 자에서 막힌다. 사진·서명을 data URL로 기록 행에 넣으면 저장이 깨진다. 셀에는 메타데이터만 남겨라.
‘누구로 실행’ × ‘누가 접근’ 조합이 데이터 권한과 코드 공개 여부를 결정한다. 공개 앱은 앱 레벨 인증을 따로 설계해야 한다.
Apps Script는 한 번 실행이 6분에서 강제 종료된다. 대량 작업은 청크 + 커서 + 시간 트리거 재개로 설계해야 절반만 처리되는 사고를 막는다.
Properties 값은 한 개당 약 9KB가 한계다. 캐시는 유실돼도 되는 데이터에만. 큰 상태는 Sheet·Drive·외부 DB로. JSON 직렬화는 타입을 잃는다.
SVG foreignObject로 DOM을 캡처하면 모바일 Safari·GAS iframe에서 멈추거나 빈 이미지가 나온다. 직접 캔버스에 그리고, 다운로드는 Web Share로 받아라.
여러 사용자·트리거가 같은 자산을 쓰면 번호가 겹치고 행이 덮인다. tryLock + finally + flush로 막고, 동시 실행 30/user 천장을 설계에 넣어라.
clasp으로 새 버전을 올릴 때 deployment ID를 재사용하면 /exec URL이 고정된다. 공유 시트 쓰기는 LockService로 막는다.
429·503·타임아웃 같은 일시적 실패는 재시도로 살릴 수 있다. 단 멱등성 없는 쓰기는 멱등키 없이 재시도하지 마라. 6분 안에서 멈춰라.
템플릿에서 긴 데이터 로드를 하면 첫 화면이 늦는다. 껍데기를 먼저 그리고 google.script.run으로 비동기 로드하되, 모든 호출에 실패 핸들러를 붙여라.
GAS는 짧은 자동화에 강하고 장시간·대량·다수 동시에 약하다. 할당량은 계정 단위로 공유된다. 한계 신호를 미리 알고 이전 계획을 세워라.
분류·요약·초안은 Vertex AI(Gemini)를 GAS에서 직접 호출해 더한다. 6분을 넘는 무거운 일은 Cloud Run으로 넘긴다. 단 사람 승인 게이트는 필수.