앱스크립트 콘솔을 Go로 옮기기: 인터페이스와 상태 설계
TECH INSIGHT / EXPLAINED
Apps Script 웹 콘솔을 Go로 옮기는 일은 인터페이스 계약과 운영을 옮기는 작업입니다. 브라우저 요청·응답을 먼저 보존한 뒤 장기 실행 작업을 그 뒤로 이동합니다. 아래 내용은 특정 운영 이력 주장이 아닌 구체적인 이식 설계 예시입니다.
실제 프로젝트의 로컬 실행 화면
기존 프로젝트의 화면 또는 함수를 로컬에서 실행해 촬영했습니다. 개인정보 없는 샘플 입력을 사용했으며, 실행한 범위는 각 이미지 아래에 설명했습니다.
실제 제약 때문에 옮긴다
Apps Script에는 실행·서비스 할당량이 있으므로 모든 트리거가 같은 6분 규칙이라고 가정하지 말고 계정과 트리거 종류를 확인합니다. 동시성 제어용 LockService, 값 보존용 PropertiesService, 로컬 개발용 clasp도 제공합니다. 직접 소유한 장기 실행 프로세스와 I/O 제어가 필요하면 Go가 유용하지만 호스팅·패치·인증 책임도 생깁니다.
요청과 응답의 계약을 기록한다
의미가 같을 때 액션 이름을 유지합니다. 상태 코드, 필드 타입, null/오류, 날짜, 권한 규칙도 맞춰야 합니다. google.script.run을 쓰는 브라우저에는 전송 계층 어댑터가 필요하므로 액션 이름만 같다고 프런트엔드가 그대로 동작하지는 않습니다. 예시 계약은 다음과 같습니다.
POST /api {"action":"startBot","request_id":"start-17"}
200 {"ok":true,"data":{"state":"running","generation":8}}
POST /api {"action":"startBot","request_id":"start-17"}
200 {"ok":true,"data":{"state":"running","generation":8}}시작·정지를 멱등하게 만든다
수명주기 잠금 안에서 STOPPED를 확인하고 STARTING과 세대 번호를 정한 뒤 context/cancel과 작업자 하나를 만듭니다. 반복 시작은 기존 상태를 반환합니다. 정지는 해당 세대를 취소하고 done을 기다리며, 일치하는 세대만 STOPPED로 바꿀 수 있습니다. 취소는 협조적입니다. 상태 확인 없이 시작하면 두 루프가 생기고 하나뿐인 cancel 함수가 덮어써질 수 있습니다.
조회부터 비교하고 쓰기를 전환한다
민감한 정보를 제거한 요청 표본을 양쪽에서 재생해 정규화한 응답을 비교합니다. 조회를 먼저 옮긴 뒤 중복 방지 키가 있는 쓰기 하나를 전환하세요. 롤백 중 구·신 스케줄러가 동시에 행동하지 않도록 합니다. 상태는 선택한 저장소에 보존하고 재시작 후 외부 효과를 대사합니다. 메모리 상태는 편하지만 충돌하면 사라집니다. 대상 OS/아키텍처로 빌드하고 cgo 등의 의존성도 확인하세요.
공식 문서와 이어 읽기
내용·예제 검토: 2026-09-29
댓글
댓글 쓰기