Search

9. n8n API와 Streamlit으로 만드는 이메일 작성 봇

섹션
3. Workflow: 이메일 작성 도우미

n8n API와 Streamlit을 활용한 이메일 작성 봇

아키텍처 변경: Chat UI에서 Webhook API로

워크플로우 구조 변경

Chat Trigger → Webhook 전환

Chat UI 제거: 기존 Chat Trigger 노드 대신 Webhook 사용
HTTP Method 설정: POST 방식으로 API 호출 수신
API Key 인증: Header를 통한 보안 인증 추가

Webhook 설정 및 테스트

헤더 인증: API 키를 Header에 포함하여 보안 강화
테스트 실행: Webhook URL 및 인증 키 동작 확인
파라미터 확인: 호출 시 전달되는 데이터 구조 파악

메모리 및 세션 관리 변경

Session ID 외부 전달: Chat UI 자동 생성 대신 사용자 전달 방식
Define Below 활용: 사용자 메시지 직접 입력 구조
Agent 연결 해제: Chat Trigger와의 자동 연결 제거

개발 환경 설정

uv 패키지 매니저 도입

uv의 장점 및 권장 이유

성능 우위: pip, poetry 대비 빠른 설치 속도
일관성 보장: 패키지 버전 및 Python 버전 동기화
개발 편의성: uv sync로 동일 환경 구축
필수 사용 권장: 현대적인 Python 패키지 관리

프로젝트 초기화

가상환경 생성: uv를 통한 격리된 개발 환경
pyproject.toml: 프로젝트 설정 및 의존성 관리
환경변수 설정: .env 파일을 통한 민감 정보 관리

Streamlit UI 개발

기본 인터페이스 구성

Streamlit 기본 설정

제목 설정: 한국어 인터페이스 구성
실시간 업데이트: 코드 변경 시 자동 반영
분할 화면: 개발 효율성을 위한 뷰 분할

Chat Input 구현

입력 인터페이스: st.chat_input() 활용
엔터키 동작: 메시지 전송 기능
사용자 경험: 직관적인 채팅 인터페이스

세션 상태 관리

Streamlit 특성 및 대응

상태 초기화 문제: 값 변경 시 코드 재실행
Session State 활용: st.session_state로 데이터 유지
메시지 리스트: 채팅 히스토리 관리

채팅 메시지 렌더링

메시지 순회: 기존 대화 내용 표시
Role 기반 표시: 사용자/AI 구분
동적 업데이트: 새 메시지 추가 시 실시간 반영

API 통신 구현

n8n Webhook 호출

API 요청 구성

HTTP Headers: 인증 키 포함
요청 본문: 사용자 메시지 및 세션 정보
Session ID: UUID를 활용한 고유 세션 식별

응답 처리

JSON 응답: n8n에서 반환하는 구조화된 데이터
에러 처리: API 호출 실패 시 대응 방안
응답 표시: AI 생성 답변을 채팅 인터페이스에 표시

데이터 전달 최적화

메시지 전달 방식

사용자 메시지만 전달: n8n Agent 메모리 활용
히스토리 관리: n8n 내부에서 대화 기록 관리
효율적 통신: 불필요한 데이터 전송 최소화

n8n Agent 설정 및 최적화

워크플로우 구성

Node 연결 및 설정

Webhook → Agent: 사용자 입력을 Agent로 전달
Memory 설정: Session ID 기반 대화 기록 관리
Respond to Webhook: API 응답 반환

시스템 프롬프트 설계

역할 정의: 이메일 작성 봇의 명확한 역할
반복 질문: 필요한 정보를 모두 확보할 때까지 질문
사용자 가이드: 체계적인 정보 수집 프로세스

Memory 및 Context 관리

Context Window 조정

기본값 3: 일반적인 이메일 작성 시나리오
확장 권장: 사용자 실수 고려하여 5-7로 증가
비용 효율성: Input Token이 Output Token보다 저렴

에러 방지 전략

정보 부족 시: Agent가 재질문하도록 설계
사용자 편의성: 충분한 Context로 반복 질문 최소화
유연한 대화: 자연스러운 정보 수집 프로세스

실제 사용 및 테스트

워크플로우 검증

단계별 테스트

Webhook 연결: API 호출 및 응답 확인
Agent 동작: 사용자 메시지 처리 및 응답 생성
메모리 기능: 대화 기록 유지 확인

프로덕션 배포

URL 변경: 테스트에서 프로덕션 환경으로 전환
실시간 동작: 실제 사용 시나리오 검증
응답 품질: AI 생성 답변의 적절성 평가

보안 및 안전성 고려사항

이메일 발송 제한

Gmail Tool 사용 제한

직접 발송 금지: AI의 100% 정확도 한계
인간 검증: 최종 확인 후 발송
오류 방지: 잘못된 이메일 자동 발송 위험 제거

사용자 제어

드래프트 생성: 검토 가능한 형태로 제공
최종 확인: 사용자가 직접 검토 후 발송
안전한 워크플로우: 실수 최소화 프로세스

개발 방법론 비교

n8n + Streamlit vs 순수 개발

n8n 방식의 장점

빠른 배포: 이미 배포된 워크플로우 활용
인프라 관리: 관리 포인트 감소
팀별 커스터마이징: 각 팀별 다른 Agent 구성
비개발자 접근성: 프롬프트 수정의 용이성

확장성 및 유지보수

워크플로우 복제: 무제한 워크플로우 생성
맞춤형 설정: 팀별 특화된 요구사항 대응
협업 친화적: 개발자가 아닌 사용자도 수정 가능

순수 개발이 필요한 경우

n8n 한계 상황

복잡한 변수 관리: 20개 이상의 변수 추적 어려움
Storage 필요성: 복잡한 상태 관리 요구
과도한 엔지니어링: n8n 커뮤니티 솔루션의 복잡성

선택 기준

커스터마이징 깊이: 얼마나 세밀한 제어가 필요한가
개발 리소스: 팀의 개발 역량 및 시간
유지보수성: 장기적인 관리 관점

아키텍처 설계 철학

분리된 책임

UI Layer: Streamlit을 통한 사용자 인터페이스
Logic Layer: n8n을 통한 비즈니스 로직
AI Layer: 각종 AI 모델과의 통합

확장 가능한 구조

모듈화: 각 컴포넌트의 독립적 개발 및 배포
API 기반: 느슨한 결합을 통한 유연성
팀별 대응: 다양한 요구사항에 맞는 확장성