노션 업무 템플릿 개발기 #2: Firebase와 Webhook으로 구현한 Slack 자동화

GUEST 계정의 한계를 넘어 Firebase Functions로 구축한 실시간 업무 알림 시스템. 팀의 업무 가시성을 극대화한 과정을 공유합니다.

Notion생산성템플릿협업업무관리
--

🚀 새로운 시작: 팀장님의 등장과 명확한 가이드

2025년 1월 7일, 조직 개편과 함께 팀장님이 새로 부임하셨습니다. 이전 글에서 고군분투했던 본부장님용 템플릿은 팀장님의 스타일과는 조금 달랐지만, 이번에는 매우 강력한 무기가 있었습니다. 바로 엑셀로 정리된 명확한 요구사항이었죠.

팀장님의 3대 요구사항

  1. 필드 정의: 테이블에 포함되어야 할 열(Column) 정보를 명확히 정의.
  2. 데이터 형식: 각 필드에 들어갈 데이터 규격 지정.
  3. 상세 기록: 업무 내용은 최대한 자세히 기록할 것.

💡 자동화의 필요성: "도구가 잡무가 되지 않게"

팀장님의 가이드는 명확했지만, 실무자 입장에서 일일이 날짜를 입력하고 상태를 변경하는 것은 또 다른 '잡무'였습니다. 이를 해결하기 위해 세 가지 핵심 자동화를 설계했습니다.

  1. 시작일 자동화: 상태가 "진행 중"으로 변경되면 현재 날짜 자동 입력.
  2. 종료일 자동화: 상태가 "테스트" 또는 "완료"로 변경되면 현재 날짜 자동 입력.
  3. 실시간 알림: 완료 상태가 되는 즉시 팀 채널에 공유.

🛑 난관: GUEST 계정의 한계

팀원 모두 GUEST 계정이었기에 노션 자체 자동화 기능을 사용하는 데 제약이 있었습니다. 다행히 유료 계정 권한을 가진 분의 도움으로 기본 자동화는 해결했으나, 커스텀 Slack 알림은 외부 시스템 연동이 필수적이었습니다.


🏗️ 시스템 아키텍처

단순 알림을 넘어, 노션 페이지 링크와 담당자 정보가 포함된 구조화된 메시지를 보내기 위해 Firebase Functions를 브릿지로 활용했습니다.

🛠️ 실전 구현: Firebase Functions 기반 Slack 앱

1. Firebase Functions 코드 작성

Node.js와 Axios를 활용하여 노션의 페이로드를 받아 Slack Block Kit 형식으로 전송합니다.

const functions = require('firebase-functions');
const axios = require('axios');

exports.notionToSlack = functions.https.onRequest(async (req, res) => {
  try {
    const { title, assignee, completedDate, url } = req.body;

    const slackMessage = {
      text: `✅ 업무 완료 알림`,
      blocks: [
        {
          type: "section",
          text: {
            type: "mrkdwn",
            text: `*${title}*\\n*담당자:* ${assignee}\\n*완료일:* ${completedDate}`
          }
        },
        {
          type: "actions",
          elements: [
            {
              type: "button",
              text: { type: "plain_text", text: "노션 페이지 열기" },
              url: url,
              style: "primary"
            }
          ]
        }
      ]
    };

    await axios.post(process.env.SLACK_WEBHOOK_URL, slackMessage);
    res.status(200).send('Success');
  } catch (error) {
    console.error('Error:', error);
    res.status(500).send('Error');
  }
});

2. 핵심 설정: Google IAM 권한 (중요!)

배포 후 노션 서버가 이 함수를 호출할 수 있도록 **공개 액세스(allUsers)**를 허용해야 합니다. 이 단계를 놓치면 403 에러를 마주하게 됩니다.

gcloud functions add-iam-policy-binding notionToSlack \\
  --member="allUsers" \\
  --role="roles/cloudfunctions.invoker"


ℹ️ Slack에 나타낼 정보 선택

필요한 데이터만 파싱해서 Slack으로 전송합니다:

  • 업무 제목
  • 담당자
  • 완료일
  • 노션 페이지 링크

실제 사용 화면

  • 노션 템플릿 최종 버전
    • 아래 '업무 리스트업' 페이지는 전체 DB 테이블을 의미합니다. (팀장님 전용으로 사용되는 테이블)
    • 새로 만들면 기존에 작성한 내용을 모두 일일이 옮겨야 해서, 형태는 제가 제안했던 템플릿을 유지하되 팀장님의 요구사항을 추가했습니다.

팀장님이 사용하는 전체 업무 대시보드

팀원들이 각자 사용하는 업무 기록 페이지

Slack 알림 화면

웹훅 상세 정보

업무 완료 시 Slack 채널로 전송되는 알림

성과 측정과 피드백

이후 팀장님은 매달 초 각자 진행한 업무들의 개수를 격려의 말씀과 함께 엑셀 파일로 전달해 주셨습니다.

팀장님 피드백 엑셀 파일

📈 성과 및 피드백: 데이터가 말해주는 가치

시스템 도입 후 팀장님은 매달 업무 통계를 기반으로 팀원들을 격려해주셨습니다.

월별 통계주요 피드백
2월자동화 도입 초기, 데이터 누락 없이 실시간 업무 파악 성공
3월업무 처리량 증가 및 데드라인 준수율 향상
4월정량적 지표 기반의 상부 보고용 데이터 확보

🧠 정량적 데이터에 대한 고찰

팀장님은 "이 정도 했다"를 보여주기 위한 용도로 활용하셨지만, 개발자로서 저는 **'숫자 너머의 가치'**를 고민하게 되었습니다.

단순히 처리한 업무의 개수보다 긴급 대응 속도재작업 비율 같은 질적 지표를 어떻게 자동화에 녹여낼지가 다음 과제로 남았습니다.


🏁 회고

배운 점

  • 요구사항의 힘: 엑셀로 정리된 명확한 가이드가 개발 속도를 5배 이상 높여주었습니다.
  • 서버리스의 편리함: Firebase Functions를 통해 서버 관리 부담 없이 강력한 브릿지를 구축했습니다.
  • IAM의 중요성: 클라우드 인프라 활용 시 권한 관리(IAM)가 연동의 핵심임을 체감했습니다.

시리즈 완결

궁금한 점이나 비슷한 자동화 경험이 있다면 댓글로 공유해주세요! 🙌

댓글

0/2000
Newsletter

이 글이 도움이 되셨나요?

새로운 글이 발행되면 이메일로 알려드립니다.

뉴스레터 구독하기