2026. 4. 3.

폼 응답을 뉴스레터 구독자로 자동 등록하기

폼 응답을 뉴스레터 구독자로 자동 등록하기

회사에서 협력사 직원들에게 혜택을 제공하는 프로그램을 운영하고 있다. 협력사 담당자가 온라인 폼으로 직원 정보를 접수하면, 이름이랑 이메일이랑 전화번호가 Google Sheets에 쌓인다. 여기에 마케팅 수신 동의 항목도 있어서, 동의한 사람은 뉴스레터 구독자로 등록해야 한다.

이 과정이 전부 수동이었다. 스프레드시트를 열고, "동의합니다"라고 답한 행을 찾고, 이미 등록한 사람인지 확인하고, 새로운 사람 정보를 복사해서 뉴스레터 플랫폼에 붙여넣는다. 협력사가 여러 곳이니까 스프레드시트도 여러 개고, 이걸 매번 반복해야 한다. 진짜 귀찮다.

Zapier 같은 걸로 해볼까 했는데, 조건이 좀 까다로웠다. 동의 여부를 필터링해야 하고, 이미 등록된 사람은 건너뛰어야 하고, 수신거부한 사람을 다시 등록하면 안 된다. 이런 조건이 겹치면 Zapier 비용이 올라가고 세밀한 제어도 어렵다.

결국 Google Apps Script로 짰다. Google Sheets랑 같은 생태계 안에 있으니까 데이터 접근이 자연스럽고, 무료고, 시간 맞춰서 자동으로 돌릴 수 있다.

5분마다 스크립트가 돌면서 모든 스프레드시트를 훑는다. 동의한 사람을 찾고, 이미 처리한 이메일인지 확인하고, 새로운 사람만 뉴스레터 API로 등록한다. 결과는 Slack으로 알려준다.

만들면서 신경 쓴 게 몇 가지 있는데, 하나는 "어디까지 처리했는지"를 기록하는 방식이다. 처음에는 "몇 번째 행까지 봤는지"를 저장하려 했는데, 스프레드시트에서 행이 삭제되거나 순서가 바뀌면 다 틀어진다. 그래서 처리한 이메일 주소 자체를 기록하는 방식으로 바꿨더니 훨씬 안정적이다.

수신거부한 사람을 보호하는 것도 중요했다. 이미 수신거부를 한 사람이 새 폼에서 다시 동의를 눌렀다고 강제로 재구독시키면 안 되니까, 이 경우를 감지해서 건너뛰도록 했다.

Slack 알림에는 개인정보 마스킹을 적용했다. "홍길동"은 "홍*동"으로, 이메일도 앞부분만 보이게 처리해서 보낸다. Slack 채널에 개인정보가 그대로 남으면 곤란하니까.

그리고 새 협력사가 추가되면? Drive 폴더에 스프레드시트가 생기면 알아서 인식한다. 코드를 수정할 필요가 없다. 이게 은근히 만족스럽다.

이제 수동으로 하던 일이 완전히 사라졌다. 가끔 Slack 알림 확인하는 거 말고는 신경 쓸 게 없고, 운영 비용도 0원이다.

돌이켜 보면, 자동화의 진짜 난이도는 "동의한 사람을 뉴스레터에 등록한다"는 핵심 흐름이 아니라 그 주변의 예외 처리에 있었다. 이메일 형식이 이상하다거나, 전화번호에 공백이 섞여 있다거나, 수신거부했다가 다시 동의하는 경우 같은 것들. 사람이 수동으로 할 때는 무의식적으로 대응하던 것들이, 자동화에서는 전부 명시적으로 처리되어야 한다.