0822-02 [Lessons Learned] 3정 5S로 돌아본 블로그 자동화 파이프라인(SMTP/LLM) 안정화 프로젝트

가장 완벽한 무인 자동화 파이프라인을 구축하기 위한 기나긴 여정이 드디어 안정화 단계에 접어들었습니다. 수많은 535 인증 에러와 인코딩 깨짐, 그리고 API 할당량 초과라는 난관을 뚫고 쟁취한 오늘의 **'레슨런(Lessons Learned)'**을 제조업의 혁신 방법론인 3정 5S(3정: 정품, 정량, 정위치 / 5S: 정리, 정돈, 청소, 청결, 습관화) 관점에서 되짚어 봅니다.




Keepnext Insight 

"자동화는 단순히 코드를 짜는 것이 아니라, 불확실성이 개입할 수 있는 모든 틈새를 구조적으로 밀봉하는 작업이다. 단 하나의 잘못된 설정(Alias)이 전체 파이프라인을 마비시킬 수 있음을 기억하라."

[본문 시작]

1. 3정(三定) 관점에서의 파이프라인 트러블슈팅

정품 (Right Item): 정확한 인증 수단과 계정의 일치

오늘 가장 우리를 괴롭혔던 문제는 구글 SMTP 서버의 535 5.7.8 Username and Password not accepted 에러였습니다. 원인은 **'포워딩용 Alias 계정(xxxxxx@keepnext.kr)'**과 **'실제 앱 비밀번호 발급 계정(xxxxxx@gmail.com)'**의 불일치였습니다. 구글의 보안 정책이 강화되면서 '정확한 아이디'와 '해당 아이디에서 발급된 16자리 앱 비밀번호'라는 **정품(正品)**의 결합만이 시스템을 통과할 수 있었습니다. 결국 파이썬 코드 내에 발송 계정을 하드코딩하여 혼선을 원천 차단했습니다.

정량 (Right Quantity): API 할당량(Quota) 제어

이메일 발송 에러를 잡기 위해 깃허브 액션(GitHub Actions)을 짧은 시간에 수십 번 반복 실행했습니다. 그 결과 429 You exceeded your current quota 에러를 맞닥뜨렸습니다. 무한정 제공될 것 같은 AI(Gemini API)도 분당 호출 횟수라는 정해진 **정량(定量)**이 존재합니다. 이를 교훈 삼아, API 실패 시 단순히 '오류'라고 알리는 것을 넘어 실제 에러 메시지(Quota 초과 등)를 리포트 메일에 포함시켜 상태를 투명하게 모니터링할 수 있도록 조치했습니다.
정위치 (Right Location): 정확한 파일 경로와 마크다운 문법

T-Blog(블로거)용 포스트와 순수 Markdown 보관용 포스트(유언, 묘비명, 초충실록 등)의 저장 위치를 명확히 분리했습니다. 또한, 마크다운 본문 내에 구분선(---)이 들어갈 경우 프론트매터 파서가 고장 나는 현상을 발견하고, 모든 구성 요소(제목, 본문, 이미지)가 **정위치(正位置)**에 안착하도록 AI 프롬프트 지시어를 엄격하게 통제했습니다.
2. 5S 관점에서의 시스템 최적화

정리 (Seiri): 중복 워크플로우 제거

과거에 산발적으로 생성되었던 pilsa-builder.yml, annals-builder.yml 등 6개의 낡고 고장난 개별 워크플로우 파일들을 과감하게 삭제했습니다. 쓸모없는 코드를 덜어내는 것이 안정화의 첫걸음이었습니다.

정돈 (Seiton): 마스터 파이프라인 통합

삭제된 워크플로우들의 기능을 auto posting blog.keepnext 라는 단 하나의 마스터 파이프라인으로 통합했습니다. 시간대별(오후 4시~5시 10분)로 카테고리가 순차적으로 실행되도록 시간표를 아름답게 정돈했습니다.

청소 (Seiso): 인코딩 및 버그 청소

우분투 서버와 윈도우 환경 간의 한글 인코딩 깨짐(Mojibake) 현상을 \uXXXX 유니코드 이스케이프 방식을 통해 말끔히 씻어냈습니다. 본문에 섞여 나오던 잡다한 기호들도 프롬프트 정제를 통해 청소했습니다.

청결 (Seiketsu): 마크다운 원문 무결성 표준화

AI가 작성하는 글의 품질을 **표준화(청결 유지)**했습니다.상단 100px, 하단 50px 이미지 강제 삽입

## (H2) 마크다운 헤더 필수 사용
3,000자 분량 및 3개 이상의 '실제 팩트 기반' 참고문헌 인용 강제
Keepnext Insight 인용구(>) 포맷 강제
습관화 (Shitsuke): 크론(Cron)을 통한 무인 영구 자동화

이제 이 모든 정교한 규칙과 에러 방지 로직들은 GitHub Actions의 크론(Cron) 스케줄러에 탑재되었습니다. 인간의 개입 없이도 시스템 스스로 매일 규칙을 지키며(습관화) 글을 생산해 낼 것입니다.
요약 및 결론

오늘의 트러블슈팅은 단순한 '버그 수정'을 넘어, 복잡하게 얽혀있던 레거시 설정들을 걷어내고 파이프라인의 **'뼈대(Architecture)'**를 올바르게 다시 세우는 과정이었습니다. 3정 5S의 철학은 공장 뿐만 아니라 소프트웨어 자동화 인프라 구축에도 정확히 들어맞습니다. 이 견고해진 토대 위에서 T-Blog와 다양한 기록들이 끝없이 뻗어나가길 기대합니다.


참고문헌

Google Workspace Admin Help. (2026). "Control access to less secure apps and App Passwords". Google Support.
GitHub Docs. (2026). "Events that trigger workflows - schedule". GitHub.
Gemini API Documentation. (2026). "Rate limits and quotas". Google for Developers.

댓글

이 블로그의 인기 게시물

2026 산업 트렌드, 디지털 트윈(Digital Twin) 기술을 활용한 스마트 엔지니어링과 제조 혁신의 미래

2026 비즈니스 트렌드, 기업형 Agentic AI(자율 행동 AI)의 도입 전략과 업무 자동화의 미래

데이터 기반 의사결정(Data-Driven): 직관을 넘어서는 비즈니스 인사이트 [Vol. 375]