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

Keepnext Insight
"자동화는 단순히 코드를 짜는 것이 아니라, 불확실성이 개입할 수 있는 모든 틈새를 구조적으로 밀봉하는 작업이다. 단 하나의 잘못된 설정(Alias)이 전체 파이프라인을 마비시킬 수 있음을 기억하라."
정위치 (Right Location): 정확한 파일 경로와 마크다운 문법
T-Blog(블로거)용 포스트와 순수 Markdown 보관용 포스트(유언, 묘비명, 초충실록 등)의 저장 위치를 명확히 분리했습니다. 또한, 마크다운 본문 내에 구분선(---)이 들어갈 경우 프론트매터 파서가 고장 나는 현상을 발견하고, 모든 구성 요소(제목, 본문, 이미지)가 **정위치(正位置)**에 안착하도록 AI 프롬프트 지시어를 엄격하게 통제했습니다.
2. 5S 관점에서의 시스템 최적화
[본문 시작]
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와 다양한 기록들이 끝없이 뻗어나가길 기대합니다.

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.
GitHub Docs. (2026). "Events that trigger workflows - schedule". GitHub.
Gemini API Documentation. (2026). "Rate limits and quotas". Google for Developers.
댓글
댓글 쓰기