박정기
박정기
🗡️ AI 레전드
🎖️ 마스터 파트너
🚀 SNS 챌린지 달성자

[문과생도 n8n] 카카오톡 오픈채팅방 100% 자동화 성공, SNS 챌린지 기술 리더의 사례

지피터스 SNS 챌린지 실시간 인증 카운트 자동화하기 사례글

소개

지피터스 스터디 멤버들과 함께하는 SNS 챌린지에서는 매일 오픈채팅방에 #인증 메시지를 남기곤 했어요. 그런데 이걸 실시간으로 집계해서 통계처럼 보고 싶다!는 생각이 들었습니다 📊
또한, 오픈채팅방(이번엔 Discord 기반)을 카카오톡처럼 자동화하고 싶은 욕심도 생겼죠. 그래서 노코드 자동화 도구인 n8nSupabase를 활용해 데이터를 모으고 저장하는 시스템을 만들었습니다!

인증 사이트 바로가기 : https://gpters-sns-challenge.streamlit.app/

그래프를 보여주는 웹 사이트 스크린 샷

한국 웹 사이트의 인기를 보여주는 그래프

진행 방법

🧰 사용한 도구들

  • n8n: 전체 자동화 흐름 설계 및 실행

  • Supabase: 데이터 저장용 PostgreSQL 기반 DB

  • Discord API: 오픈채팅방 메시지를 실시간으로 수집

    한국 채팅 화면의 스크린 샷

🧩 자동화 흐름 요약 및 노드 설명

프로세스의 다른 단계를 보여주는 다이어그램
  1. Schedule Trigger: 일정 간격(예: 매 10초)으로 워크플로우를 자동 실행하게 합니다.

  2. Discord (Get All Messages): 지정한 Discord 채널에서 최근 메시지를 모두 불러옵니다.

    • guildId, channelId를 설정해 특정 채널로부터 데이터를 수집합니다.

  3. Set (Edit Fields): Discord에서 받은 메시지 중 필요한 데이터만 추출합니다.

    • 예: embeds[0].description, embeds[0].author.name, timestamp

  4. Code (데이터 가공): Set 노드로 정제한 데이터를 더 다듬습니다.

    • author_name, content, ts 필드를 만들어 구조를 단순화

return $input.all().map(item => {
  const embed = item.json.embeds?.[0] ?? {};

  return {
    json: {
      author_name: embed.author?.name ?? 'Unknown',
      content:     embed.description ?? '',
      ts:          item.json.timestamp
    }
  };
});
  1. Code1 (정렬): 메시지를 시간순으로 정렬합니다.

return $input.all()
  .sort((a, b) => new Date(a.json.ts) - new Date(b.json.ts));
  1. Supabase1 (기존 데이터 불러오기): 현재 DB에 저장되어 있는 모든 메시지를 가져옵니다.

    • 중복 여부를 판단하기 위해 필요합니다.

  2. Code2 (중복 제거): 새로 들어온 데이터 중 기존 DB에 없는 것만 추려냅니다.

    • 작성자 + 내용 + 시간 조합을 키로 사용해 중복 여부 판단

function makeKey(item) {
  const ts = new Date(item.json.ts).getTime();
  return [item.json.author_name, item.json.content, ts].join('||');
}

const existingSet = new Set(existing.map(makeKey));

const result = incoming.filter(item => {
  const key = makeKey(item);
  return !existingSet.has(key);
});
  1. Supabase (Insert): 필터링된 새로운 메시지를 DB에 저장합니다.

    • 자동으로 필드 매핑되어 깔끔하게 저장됩니다.

검은 색 화면에서 항목 목록의 스크린 샷

결과와 배운 점

처음엔 Discord 메시지 구조가 익숙하지 않아서 embeds, author, description 등 어디서 뭘 꺼내야 할지 감을 못 잡았어요 🤯
또, Supabase에 중복 저장을 막기 위한 고유값 키 설계도 꽤 고민스러웠죠.

하지만 하나하나 테스트하면서 n8n에서 데이터 가공 → 중복 필터링 → DB 저장까지 노코드로 구현 가능한 걸 체감했고, 챌린지 참여 현황을 자동으로 수집할 수 있어서 뿌듯했답니다! 🙌

도움 받은 글


처음엔 어렵지만 막상 흐름을 이해하고 나면 정말 재밌고 유용해요! 노코드도 강력한 자동화 도구가 될 수 있다는 걸 꼭 한번 체험해보세요 💪

9
5개의 답글

👉 이 게시글도 읽어보세요