n8n으로 SNS(X_트위터) 자동 포스팅하기_도르마무 삽질

소개

n8n으로 sns를 자동 포스팅하는 워크플로우를 만들어보았습니다!

아무래도 기업, 개인사업자, 솔로프리너의 경우 가장 먼저 고려하는 마케팅채널이 SNS인 만큼 이걸 자동화한다면 유용할 것으로 생각했습니다.

청강으로 참여하는 블로그 스터디에서는 네이버블로그도 하시던데, 저는 우선 가장 쉽다는 X에 도전해 봤습니다.

프로젝트는 두 가지로 나눠져있는데요.

1번 프로젝트: 하나의 매체 해외 AI뉴스를 자동으로 요약해서 포스팅하기

2번 프로젝트: 여러 매체의 해외 AI뉴스를 정기적으로 하루 5~6번 자동으로 요약해서 포스팅하기

이 두 가지가 다른 이유는 2번 프로젝트는 일단 매체가 여러 개고, 기존에 올린 글들을 "중복검사"해서 새로운 포스팅을 한다는 겁니다. sns자동화 해놨더니 매번 똑같은 글만 올리면 안 되니까요.

결론부터 말씀드리면, 1번 프로젝트는 쉬웠으나 2번 프로젝트는 이 중복검사 기능 때문에 많이 헤맸습니다. 그래도 어찌저찌 성공은 했슙니다!

진행 방법

[1번 프로젝트] - 하나의 매체에서 자동포스팅

1. 사전 기획

  • 먼저 클로드와 해봅니다. 여러 SNS 채널 중 X(트위터)를 추천합니다.

  • 오늘 안에 끝난다고 했는데... 이녀석 거짓말을 했습니다.(2.5일 걸림)

2. 트위터 개발자 API발급

  1. 하나 만들고 아웃풋보고, 하나 만들고 인풋-아웃풋보면서 만들어 나갑니다.

  2. 전체적인 노드 흐름은 아래와 같습니다.

  • Schedule Trigger → 정해진 시간마다 자동 실행

  • SS Read → OpenAI 블로그 최신 글 목록 가져오기

  • Code in JavaScript → 첫 번째 글만 뽑아 트윗 초안 만들기

  • Message a model (Gemini) → 영어 제목을 한국어 트윗 문구로 변환

  • Code in JavaScript1 → 번역 문구+링크+해시태그 조합

  • Create Tweet → 최종 트윗을 X(Twitter)에 게시

  1. 어라 생각보다 금방 만들었네? 괜히 으쓱한 마음이 듭니다. 근데 문제가 생깁니다. 일단 rss피드를 가져오는 매체가 하나이기에 다양성이 떨어집니다. 또 매체가 포스팅을 가끔 하면 중복으로 게시글이 올라갑니다.

 

[프로젝트 2] 매체를 다양화 하고, 게시글도 중복으로 검사해서 늘 새로운 게시글만 올리기!

  1. 사전 기획

    1. 현재 만든 구조에서 Rss Read 노드를 여러 개 다양화하자.

    2. 이미 올린 포스팅은 구글시트에 기록하자.

    3. 그리고 올리기 전에 기록된 구글시트에서 중복검사를 하자.

    4. 중복검사 시 이상 없으면 새로운 글을 올리자.

*이러한 저의 생각은 큰 실수였습니다. 기존의 노드에서 살짝 변형+추가하면 될 줄 알았는데, 완전히 다른 구조가 필요했던 것입니다.

  1. 노드의 흐름은 다음과 같습니다.

  • Schedule Trigger2 → 매일 07/10/13/16/19/22시에 워크플로우 자동 시작

  • RSS Read7/8/9/10/11 → 5개 AI 관련 RSS(각기 다른 소스)에서 최신 글 목록 가져오기

  • Merge1 (combine by position) → 5개 RSS 결과를 하나로 합치기

  • 통합처리코드 (Code) → 기사들을 정리·정렬하고 “소스별 1개 보장 + 랜덤 후보” 리스트 생성

  • Get row(s) in sheet1 (Google Sheets) → 시트에서 이미 올린 링크 목록 읽기

  • 중복처리노드 (Code) → 후보에서 중복 아닌 첫 글만 선택(없으면 흐름 중단)

  • Message a model2 (Gemini) → 선택된 영어 제목을 짧은 한국어 트윗 문구로 변환

  • Code in JavaScript6 → 번역 문구에 원문 링크+해시태그 붙여 최종 트윗 만들기

  • Create Tweet2 → 최종 트윗을 X(Twitter)에 게시

  • Append row in sheet1 → 게시한 제목/링크/시간/상태를 시트에 기록(로그/중복방지용)

 

흐름도의 예
  1. 결과는 계속적인 실패였습니다.  점점 길어지고 Code 노드에서 계속 오류가 뜨더라구요. 엄청나게 수정하고, 계속 만들었다 지워도 중복게시물이 올라가거나 오류가 떴습니다.

    1. 아래 통합처리코드, 중복처리노드에서 지속적으로 오류가 발생합니다.

    2. 클로드와 여러 번 대화해도 같은 증상입니다.

  2. 결국 다음날을 기약하기로 합니다.

  3. 곰곰이 생각해보니 모든 Rss피드를 갖고와서 하나로 만든다음에 Code노드를 계속적으로 활용하는 것은 뭔가 직관적이지 않다는 생각을 합니다.

    1. 차라리 if 노드를 써서 Rss 1번 -> 중복확인됨 -> IF노드 False -> Rss 2번 이렇게 가는 구조가 낫다고 판단합니다.

  4. 다시 새롭게 시작합니다.

    1. 클로드는 기존 워크플로우를 수정하는 것을 추천했지만, 무한 오류의 늪에 빠졌기에 새롭게 하자고 했습니다. 제가 제안한 방식이 복잡하다고 했지만, 그래도 직관적이고 오류 수정이 쉽다고 합니다.

    2. 워크플로우는 제 '사고 흐름상 더 직관적인 방식!' -> 이게 중요한 것 같습니다.

    3. 우선 저는 Rss 각각별로 왔다갔다하는 작업을 만드려고 하였으나, 클로드가 추천한 RSS수집기 방식으로 합니다.

한국어 앱의 스크린 샷
  1. 각 노드별 내용은 다음과 같습니다.

  • Schedule Trigger2 → 하루 6번(07/10/13/16/19/22시) 자동 실행

  • rss선택기 (Code) → 5개 AI RSS 중 하나를 순서대로 선택

  • RSS feed read → 선택된 RSS 주소에서 기사 목록 가져오기

  • 글선택 (Code) → 받아온 기사 중 첫 번째 글만 선택

  • Get row(s) in sheet1 → 구글시트에서 이미 올린 글 목록 불러오기

  • 중복체크노드 (Code) → 선택한 글이 시트에 있는지 중복 여부 검사

  • If → 새 글이면 Gemini로, 중복이면 다시 rss선택기로 돌아가기

  • Message a model2 (Gemini) → 영어 제목을 한국어 트윗 문구로 변환

  • Code in JavaScript6 → 번역 문구에 링크+해시태그 붙여 최종 트윗 텍스트 만들기

  • Create Tweet2 (Twitter) → (현재 비활성) 트윗 게시용 노드

  • Append row in sheet1 → 게시한 글 정보를 구글시트에 기록

프로세스 흐름도를 보여주는 다이어그램

  1. 결국 Human Intelligence

  • 처음에는 여전히 같은 오류가 발생했습니다.(그냥 중복 게시됨)

  • 생전 할 줄 모르는 로그까지 찾아서(F12) 보내봤지만 역시 같은 증상입니다.

  • 하나씩 꼼꼼히 뜯어보다보니 구글시트 읽는 부분에서 아웃풋이 이상한 것을 발견하고 얘기해줍니다.

  • 다행히 해당 문제에 대한 해결책을 줍니다.

한국어 웹 사이트의 스크린 샷
  1. 중복을 감지하고 제가 설정한 매체 여러 곳을 하나씩 확인하고 포스팅합니다! 기쁘면서도 안도의 한숨을 내쉽니다😂

 

결과와 배운 점

  1. 기존 잘 되는 워크플로우를 "확장"할 때 현재 구조에서 할 것인지 잘 고민해볼 것.

    1. 기존 워크플로우는 잘 되지만, 확장버전은 안 될 수 있습니다.

    2. 저는 rss노드를 늘리고, 중복검사까지 추가해서 기존과는 많이 달라졌습니다.

    3. 꼭 AI와 미리 점검해보는 게 좋을 듯 합니다.

  1. 안 될 때는 인풋 아웃풋을 하나씩 보면서 구체적으로 문제점을 얘기할 것

    1. 저도 역시 전체를 긁어서 문제해결 "해줘"라고 했는데요, 그때마다 클로드가 문제점을 잘 찾지 못하고 반복해서 수정->해줘->수정->해줘 이렇게만 돌아갔습니다.

    2. 인풋 아웃풋보면서 어디어디가 문제인 것 같다고 구체적으로 얘기해주면 더 답을 잘 주는듯 합니다.

  1. 사람이 생각해도 직관적일 것. 휴먼 인텔리전스.

    1. 저도 그냥 클로드 추천대로 Code노드를 많이 썼는데요, 문제는 오류가 났을 때 무슨 말인지 모른다는 겁니다…

    2. Code노드도 좋지만, 사람이 생각해도 제일 직관적인 흐름과 방향이 좋은 것 같습니다. 심플 이즈 베스트가 맞는지는 모르겠습니다. 이제까지 제 경험입니다ㅎㅎ

  1. 어떤 하나의 노드를 그냥 패스(비활성화)하고 싶을 때: 그 노드를 선택하고 "D"버튼을 누르면 됩니다.

    1. 트위터를 하도 자주 테스트하다보니 시간 제한에 걸렸습니다.

    2. 그래서 그냥 구글시트에 잘 들어가는지 확인만 하고 싶었습니다.

    3. 클로드에게 물어보니 노드를 선택하고 "D"를 누르면 되더라구요. (비활성화)

힘들었지만, 역시나 소중한 레쓴들을 얻었네요. 삽질 후기를 읽어주셔서 감사합니다.

4
2개의 답글

👉 이 게시글도 읽어보세요