완전히 자동화된 뉴스레터를 출시할 수 있다면 어떨까요? 최소한의 코딩과 API 인증 정보만으로 이제 가능합니다. n8n, Bright Data, OpenAI가 바로 이를 실현할 수 있는 힘을 제공합니다.
오늘은 이 과정을 직접 실행해 보며 얼마나 쉬운지 보여드리겠습니다!
시작하기
워크플로우에 접근하는 것 부터 시작하겠습니다(무료로 사용 가능). 이 게시물 상단에 있는 “워크플로우 사용” 버튼을 클릭하세요. 요청 시 n8n의 자체 호스팅 인스턴스를 실행해야 합니다.

n8n 자체 호스팅
sudo snap install docker
도커를 시작하고 n8n을 실행합니다.
sudo docker volume create n8n_data
sudo docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
커뮤니티 노드 설치
이제 커뮤니티 노드 몇 개를 설치할 차례입니다. “설정”으로 이동하여 “커뮤니티 노드”를 클릭하세요.

“npm” 입력란에 Bright Data 노드를 입력하세요.
n8n-nodes-brightdata
다음으로, 문서 생성기에 대해서도 동일한 작업을 수행합니다.
n8n-nodes-document-generator

이 노드들을 설치한 후, Ctrl+C로 Docker 인스턴스를 종료하세요.
그런 다음 다시 시작하세요.
sudo docker run -it --rm --name n8n -p 5678:5678 -v n8n_data:/home/node/.n8n docker.n8n.io/n8nio/n8n
커뮤니티 노드 설치에 대한 전체 문서는 여기에서 확인할 수 있습니다.
API 키 받기
Bright Data
아직 가입하지 않았다면 Web Unlocker에 가입해야 합니다. 이 도구는 CAPTCHA 우회 및 프록시 통합과 같은 모든 종류의 멋진 스크래핑 기능을 제공합니다. 플레이그라운드에서 API 키를 얻을 수 있습니다.

이 키를 안전한 곳에 저장하세요.
OpenAI
OpenAI 대시보드의 API 키 탭에서 기존 키를 확인하거나 새 키를 생성할 수 있습니다.

다시 한번, 키를 안전한 곳에 보관하세요.
SMTP
SMTP의 경우 Elastic Email을 사용하고 있습니다. 무료 플랜에서는 본인에게만 이메일을 보낼 수 있지만, 이 튜토리얼에는 충분합니다.
참고: SMTP 연결 생성 시 오류가 발생했습니다. SSL을 비활성화하면 해결됩니다.

SMTP를 사용할 때는 어떤 클라이언트(Elastic Email 또는 기타)를 사용하든 사용자 이름, 비밀번호 및 연결 세부 정보를 저장해야 합니다. Elastic Email의 경우 여기에서 확인할 수 있습니다.

워크플로 조정
웹 언락커로 사이트 가져오기
워크플로우에서 Bright Data 아이콘을 마우스 오른쪽 버튼으로 클릭하고 “열기”를 선택하세요. 설정 편집을 위해 연필 아이콘을 클릭하세요.

“Token” 섹션에 Web Unlocker API 키를 추가하세요.

이제 모든 것이 제대로 작동하도록 스키마를 조정해 보겠습니다. 설정 하단에서 형식이 “JSON”으로 설정되어 있는지 확인하세요. 아래 이미지에서 우리 URL은 https://www.mediamarkt.de/입니다. 스크래핑하려는 원하는 URL로 이 부분을 교체하세요. 존 이름도 자신의 웹 언락커 존 이름으로 교체하세요.

HTML 추출
이제 HTML 추출이 올바르게 설정되었는지 확인해 보겠습니다. “소스 데이터”가 “JSON”으로 설정되어 있는지 확인하세요. 추출 값은 아래 이미지와 일치해야 합니다: 키: title, CSS 선택기: title, 반환 값: 텍스트. 다른 사이트를 작업 중이라면 필요에 따라 이 필드를 조정할 수 있지만, 페이지에 본문이 없거나 제목이 없다면 스크래핑할 가치가 없을 것입니다.

마무리하기 전에 아래로 스크롤하여 다른 필드도 동일하게 설정하세요: 키: body, CSS 선택기: body, 반환 값: 텍스트.

데이터를 ChatGPT로 전달하기
ChatGPT가 데이터를 파싱해 줍니다. 대규모 언어 모델(LLM)의 힘 덕분에 파서 코드를 직접 작성할 필요조차 없습니다. AI 모델을 활용한 스크래핑에 대해 자세히 알아보려면 여기를 참조하세요. 여기서의 과정은 매우 간단합니다: ChatGPT에 웹페이지를 제공하면, 깔끔한 제품 목록을 출력해 줍니다.
이제 ChatGPT 연결을 설정할 차례입니다. “카테고리별 거래 목록 생성” 노드의 설정을 엽니다. Bright Data API 키를 추가한 것과 동일한 방식으로 OpenAI API 키를 추가하세요. 그런 다음 다음 필드가 올바른지 확인하세요: 리소스: 텍스트, 작업: 모델에 메시지 전송. 다른 모델을 사용하려면 자유롭게 변경하되, 본 예제에서는 GPT-4o mini를 사용합니다.

하단으로 스크롤하여 나머지 필드도 올바르게 설정되었는지 확인하세요.

ChatGPT에서 결과 추출
이제 “결과에서 항목 추출”이라는 노드의 설정을 엽니다. “분리할 필드”가 message.content.results로 설정되어 있는지 확인하세요.

HTML 문서 생성
이제 HTML 문서를 생성할 차례입니다. 이는 실제 이메일을 구성하는 원시 HTML입니다. 워크플로 테스트를 실행하면 입력값을 HTML 템플릿에 직접 드래그 앤 드롭할 수 있습니다. “Template String”이 Expression으로 설정되어 있는지 확인하세요.

원한다면 아래의 HTML 템플릿을 복사하여 붙여넣을 수 있습니다. 아래 HTML은 필수 요소가 아니라 시작하는 데 도움을 주기 위한 것입니다. 원하는 방식으로 데이터를 스타일링할 수 있지만, JSON 데이터를 올바르게 삽입해야 합니다.
<h1>{{ $json.name }}</h1>
<p>{{ $json.description }}</p>
<a href={{ $('Generate List of Deals by Category').item.json.message.content.results[0].link }}>
{{ $('Generate List of Deals by Category').item.json.message.content.results[0].link }}
</a>
<h2>{{ $('Generate List of Deals by Category').item.json.message.content.results[1].name }}</h2>
<ul>
<li><p>{{ $('Generate List of Deals by Category').item.json.message.content.results[1].description }}</p></li>
<li>{{ $('Generate List of Deals by Category').item.json.message.content.results[1].price }}</li>
<li>
<a href={{ $('Generate List of Deals by Category').item.json.message.content.results[1].link }}>
{{ $('Generate List of Deals by Category').item.json.message.content.results[1].link }}
</a>
</li>
</ul>
<h2>{{ $('Generate List of Deals by Category').item.json.message.content.results[2].name }}</h2>
<ul>
<li><p>{{ $('Generate List of Deals by Category').item.json.message.content.results[2].description }}</p></li>
<li>{{ $('Generate List of Deals by Category').item.json.message.content.results[2].price }}</li>
<li>
<a href={{ $('Generate List of Deals by Category').item.json.message.content.results[2].link }}>
{{ $('Generate List of Deals by Category').item.json.message.content.results[2].link }}
</a>
</li>
</ul>
<h2>{{ $('Generate List of Deals by Category').item.json.message.content.results[3].name }}</h2>
<ul>
<li><p>{{ $('Generate List of Deals by Category').item.json.message.content.results[3].description }}</p></li>
<li>{{ $('Generate List of Deals by Category').item.json.message.content.results[3].price }}</li>
<li>
<a href={{ $('Generate List of Deals by Category').item.json.message.content.results[3].link }}>
{{ $('Generate List of Deals by Category').item.json.message.content.results[3].link }}
</a>
</li>
</ul>
<h2>{{ $('Generate List of Deals by Category').item.json.message.content.results[4].name }}</h2>
<ul>
<li><p>{{ $('Generate List of Deals by Category').item.json.message.content.results[4].description }}</p></li>
<li>{{ $('Generate List of Deals by Category').item.json.message.content.results[4].price }}</li>
<li>
<a href={{ $('Generate List of Deals by Category').item.json.message.content.results[4].link }}>
{{ $('Generate List of Deals by Category').item.json.message.content.results[4].link }}</a></li>
</ul>
<h2>{{ $('Generate List of Deals by Category').item.json.message.content.results[5].name }}</h2>
<ul>
<li><p>{{ $('Generate List of Deals by Category').item.json.message.content.results[5].description }}</p></li>
<li>{{ $('Generate List of Deals by Category').item.json.message.content.results[5].price }}</li>
<li>
<a href={{ $('Generate List of Deals by Category').item.json.message.content.results[5].link }}>
{{ $('Generate List of Deals by Category').item.json.message.content.results[5].link }}
</a>
</li>
</ul>
이메일로 사용자 알림
이제 SMTP 서버에 연결할 차례입니다. 아직 API 키를 추가하지 않았다면 “연필” 아이콘을 클릭하여 연결 세부 정보를 편집하세요. “발신자 이메일”을 발신할 이메일 주소로 변경하세요. “제목”은 원하는 대로 설정하세요. “이메일 형식” 은 HTML로 유지해야 합니다.

이제 SMTP 계정 자격 증명을 추가하세요. 사용자, 비밀번호, 호스트, 포트가 필요합니다.

사용자에게 성공 알림
이제 사용자에게 모든 작업이 완료되었음을 알리는 페이지를 생성해 보겠습니다. “완료 메시지”와 “완료 제목”을 원하는 내용으로 변경하세요. 다른 모든 필드는 그대로 유지해야 합니다. 단순히 프로세스가 완료되었음을 사용자에게 알리는 것이기 때문입니다.

결과 이메일
모든 설정이 완료되었으니 테스트해 보겠습니다. “워크플로 테스트”를 클릭하세요. 다음과 같은 팝업이 표시됩니다. 카테고리를 선택하고 거래 정보를 받을 이메일 주소를 입력하세요.

“거래 받기”를 클릭하세요. 정보를 제출하면 팝업이 다음과 같이 표시됩니다.

마지막으로 수신함을 확인하세요. 거래 이메일이 바로 보이지 않으면 스팸 폴더를 살펴보세요. 대부분의 현대 이메일 서비스는 이와 같은 대량 발송 메일을 스팸으로 표시합니다. 이메일을 찾으면 열어 거래 내용을 확인하세요!

결론
n8n, Bright Data, OpenAI를 활용하면 스마트한 데이터 기반 뉴스레터를 완전히 자동화할 수 있는 도구를 갖추게 됩니다. 데이터 추출을 위한 Web Unlocker, 콘텐츠 생성을 위한 ChatGPT, 이메일 발송을 위한 SMTP를 활용하면 최소한의 노력으로 맞춤형 할인 추천을 생성할 수 있습니다.
하지만 여기서 멈출 필요가 있을까요? Bright Data는 자동화를 한 단계 더 발전시킬 수 있는 다양한 데이터 솔루션을 제공합니다:
- 주거용 프록시
- 스크래핑 브라우저
- 스크레이퍼 API
- 데이터셋
이메일 마케팅 자동화를 한 단계 업그레이드하세요. 지금 무료 체험판에 가입하고 더 스마트하고 효율적인 워크플로우를 구축해 보세요!