슬랙 초보지만, 이벤트 기반 자동화를 만들었다
“E열의 값이 O로 바뀌면 슬랙으로 알림 오면 좋겠다.”
운영 쪽은 처음인데, 자동화하고 싶은 부분들이 많이 보였다.
일단 슬랙을 활용한 간단한 자동화부터 시도해 보려고 했다.
그런데 막상 하려니 모르는 단어들이 쏟아졌다.
- Bot?
- Scope?
- Install?
- Apps Script?
나는 슬랙도 처음이었고,
구글 스프레드시트에 코드를 붙여본 것도 처음이었지만
AI 덕분에 어렵지 않았고
오늘은 누구나 따라할 수 있도록 그 과정을 정리해 본다.
1. 내가 만들고 싶었던 것
'이벤트 기반 자동 알림 시스템'
을 만들고 싶었다.
쉽게 말하면 엑셀 값이 바뀌면 자동으로 슬랙에 알림 오는 것을 구현하고 싶었다.
조건은 단순했다.
- 구글 스프레드시트 E열이 “O”로 바뀌면
- 슬랙 채널에 자동 알림 보내기
- 알림에는 id, 담당자, 사전검증 값 포함
2. 전체 구조 이해하기 (개념 먼저)
이걸 이해하면 절반은 끝난다.
↓
Apps Script 실행
↓
Slack Webhook 호출
↓
Slack에 메시지 표시
이걸 기술적으로는 이벤트 기반 자동화
라고 부른다고 한다.
이벤트는 “어떤 일이 발생한 순간”이다.
여기서는 “E열이 O로 바뀐 순간”을 말한다.
3. Slack에서 준비하기 (Webhook 만들기)
① Slack App 생성
- https://api.slack.com/apps 접속
- Create New App
- From scratch 선택
- 워크스페이스 선택
② Bot User 추가
좌측 LNB에서 선택한다.

App Home → Add a Bot User
Your App’s Presence in Slack이라는 섹션에서
App Display Name을 [Edit] 버튼을 눌러 수정해야 한다.

- Display Name 입력
- Default username 입력 (소문자, 공백 없음)
이 단계에서 나는 계속 에러를 만났다.
“doesn’t have a bot user”라는 문구가 떴다.
결론은 단순했다.
Bot을 실제로 생성하지 않으면 설치가 안 된다.
③ OAuth & Permissions 설정
LNB 내의 Features 그룹 안에 있는
OAuth & Permissions 메뉴를 선택한다.

스크롤을 약간 내리면 'Scopes' 섹션이 보일 것이다.

나는 이미 추가해 두었는데,
[Add an OAuth Scope] 버튼을 눌러
나와 똑같이 Bot Token Scopes에 추가해 주면 된다.
(아래 2가지를 검색해서 추가)
- chat:write
- incoming-webhook
그리고 반드시 [Install to Workspace]까지 눌러야 한다.
까지 눌러야 한다.
승인과 설치는 다르다.
④ Incoming Webhook 활성화
좌측 LNB의 Features 그룹 내
'Incoming Webhooks' 메뉴를 선택한다.

Incoming Webhooks → Activate →
Add New Webhook to Workspace
여기서 발급받은 URL이 핵심이다.
이 URL은 “자동 전화번호” 같은 것이다.
이걸 복사해 뒀다가, 아래에서 나오는 코드 내에
슬랙 URL 삽입하라고 표기된 곳에 붙여 넣으면 된다.
4. 구글 스프레드시트에 코드 붙이기
① 확장 프로그램 → Apps Script
구글스프레드시트 메뉴에서 '확장 프로그램'을 누르면
Apps Script로 이동할 수 있다.


좌측 LNB에서 <> 모양의 아이콘 내 Code.gs 메뉴를 누르면 된다.

Code.gs에 아래 코드 전체 붙여 넣는다.
function onEdit(e) {
const range = e.range;
const sheet = e.source.getActiveSheet();
const targetColumn = 5; // E열
if (range.getColumn() !== targetColumn) return;
const newValue = String(range.getValue() ?? "").trim();
if (newValue !== "O") return;
const oldValue = e.oldValue !== undefined ? String(e.oldValue ?? "").trim() : "";
if (oldValue === "O") return;
const row = range.getRow();
const manager = sheet.getRange(row, 4).getValue(); // D열
const preCheck = sheet.getRange(row, 7).getValue(); // G열
const mallId = sheet.getRange(row, 9).getValue(); // I열
const now = Utilities.formatDate(
new Date(),
Session.getScriptTimeZone(),
"yyyy-MM-dd HH:mm"
);
const webhookUrl = "여기에_슬랙_Webhook_URL";
const payload = {
text:
`📢 PC 확인(O) 감지\n` +
`━━━━━━━━━━━━━━\n` +
`🏬 mall_id: ${mallId}\n` +
`👤 담당자: ${manager}\n` +
`🧪 사전검증: ${preCheck}\n` +
`🕒 시간: ${now}`
};
UrlFetchApp.fetch(webhookUrl, {
method: "post",
contentType: "application/json",
payload: JSON.stringify(payload)
});
}
② 트리거 설정
이번엔 좌측 시계 아이콘 → Trigger 추가를 한다.

트리거 메뉴에 들어가면 우측 하단에 '트리거 추가' 버튼이 있다.
눌러서 팝업이 뜨면,
- 실행 함수: onEdit
- 실행할 배포 선택 : Head
- 이벤트 소스 선택 : From spreadsheet
- 이벤트 유형 선택: On edit (수정 시)
세팅하여 저장 후 권한 승인.
5. 테스트
E열을 공란 → O
또는 X → O
슬랙에 메시지가 오면 성공이다.
6. 내가 여기서 배운 것
처음엔 “슬랙 알림 하나”였다.
그런데 실제로는:
- 이벤트 개념 이해
- Webhook 개념 이해
- Slack App 구조 이해
- 권한 승인 구조 경험
- Serverless 자동화 경험
을 한 번에 경험했다.
7. 이 구조는 어디까지 확장될 수 있을까?
지금은 '값 변경 → 알림' 수준이지만
이제 운영 자동화에 재미를 붙여서
조금만 확장해서 ' 값 변경 → n8n → 내부 시스템 자동 처리 → 결과 리포트'
까지 시도해 보려 한다.
마무리
나는 슬랙도 처음이었고,
Apps Script도 처음이었다.
하지만 구조를 이해하고 나니,
이건 생각보다 단순한 “시스템 연결”이었다.
이 글이 나처럼 자동화를 처음 경험하는 누군가에게 도움이 되기를 ✨
'자동화, n8n' 카테고리의 다른 글
| [n8n 개념] 비개발자도 가능한 업무 자동화! n8n 개념부터 시작하기 (0) | 2026.03.16 |
|---|---|
| 스프레드시트 값이 바뀌면 n8n으로 자동 어드민 등록 (1) | 2026.03.10 |
| n8n 기초 - Webhook 노드 알아보기 (0) | 2026.03.09 |