본문 바로가기

파이선생

LLM과 Pydantic: 프롬프트 대신 코드 레벨에서 JSON 에러 잡기 LLM과 Pydantic: 프롬프트 대신 코드 레벨에서 JSON 에러 잡기LLM(대규모 언어 모델)에게 JSON 형태로 출력을 요구할 때 흔히 겪는 파싱 에러와 이를 해결하기 위한 과정이다. 단순히 프롬프트를 튜닝하는 것을 넘어, 코드 레벨에서 구조적인 검증을 통해 시스템의 안정성을 높여야 한다는 깨달음을 얻었다.위 화면은 LLM에게 프롬프트로 엄격하게 형식을 지시했음에도 불구하고 잘못된 응답을 반환하여 시스템 에러가 발생한 상황을 보여주는 예시다. LLM의 자유도를 통제하지 못하면 파이프라인 전체가 무너질 수 있음을 보여준다.프롬프트 한 줄이면 JSON이 예쁘게 나올 줄 알았다최근 인공지능을 활용해 다양한 비정형 텍스트 데이터를 분석하고, 이를 서비스 데이터베이스에 맞게 구조화하는 파이프라인 구축을 시.. 더보기
파이썬 MoviePy 영상 자동 렌더링 시도와 메모리 누수 극복기 파이썬 MoviePy 영상 자동 렌더링 시도와 메모리 누수 극복기사업을 운영하다 보면 필연적으로 '콘텐츠 생산의 늪'에 빠지는 순간이 옵니다. 특히 최근 마케팅 트렌드에서는 고객의 이름이나 특정 정보만 살짝 바꾼 '맞춤형 숏폼 영상'이 대량으로 필요했습니다.처음에는 영상 편집 프로그램을 켜서 텍스트 레이어를 일일이 수정하고 렌더링 버튼을 누르는 수작업을 반복했습니다. 하지만 작업량이 10개, 20개를 넘어가자 확신이 들었습니다. "이건 인간이 할 짓이 아니다."결국 저는 이 지루한 반복 작업을 코드로 자동화하기로 결심했습니다. 파이썬(Python) 생태계에서 영상 처리로 유명한 MoviePy 라이브러리를 무기 삼아, 나만의 영상 생성 파이프라인 구축에 나섰습니다.1. 코드 몇 줄의 마법, 그리고 섣부른 .. 더보기
텔레그램 봇으로 일일 보고 시스템을 만들며 겪은 API의 매운맛 텔레그램 봇으로 일일 보고 시스템을 만들며 겪은 API의 매운맛텔레그램 봇 API를 활용해 매일 아침 자동으로 서비스 현황을 보고받는 시스템을 구축하려 했다. 그런데 메시지가 오지 않거나, 5번씩 중복으로 쏟아지거나, 텍스트가 외계어로 깨지는 문제가 연속으로 터졌다. 텔레그램 API의 3가지 숨겨진 함정을 직접 뚫어본 기록이다.이러한 문제들을 해결하기 위해 처음 작성했던 파이썬 코드의 일부를 살펴보면 그 원인을 짐작할 수 있다.위 화면은 텔레그램 봇이 서비스 일일 현황 데이터를 전송하는 코드 작업 화면이다. 이 코드는 완성 직후 서버에 올렸을 때 메시지가 오지 않거나, 반대로 동일한 메시지가 연달아 5번 쏟아지는 예상치 못한 문제를 일으켰다. 보기엔 단순한 API 연동 코드지만, 메시지 길이 제한·Rat.. 더보기
크롬 드라이버 버전 오류와의 전쟁, 웹드라이버 매니저로 마침표를 찍다 크롬 드라이버 버전 오류와의 전쟁, 웹드라이버 매니저로 마침표를 찍다크롬 브라우저가 자동 업데이트되면서 셀레늄 자동화 봇이 갑자기 먹통이 된 경험을 기록한다. SessionNotCreatedException 에러가 반복되는 이유를 찾는 데만 이틀이 걸렸고, 해결책은 단 한 줄의 라이브러리 교체였다.위 화면은 크롬 브라우저 자동 업데이트 이후 셀레늄 스크립트를 실행한 순간의 터미널 로그다. SessionNotCreatedException과 함께 "This version of ChromeDriver only supports Chrome version..."이라는 메시지가 붉게 도배된 화면은, 지금껏 정상 작동하던 자동화 봇이 하루아침에 멈췄다는 것을 의미한다. 하드코딩된 드라이버 파일과 업데이트된 브라우저 .. 더보기
캡차(Captcha)와 보안 시스템에 가로막힌 셀레늄 우회 작전 [에러발생] 캡차(Captcha)와 보안 시스템에 가로막힌 셀레늄 우회 작전사내 데이터 수집 자동화 프로젝트에서 셀레늄(Selenium)이 보안 시스템에 차단당한 실제 경험을 공유한다. 로컬 환경에서는 정상 작동하던 스크립트가 서버 배포 후 캡챠(CAPTCHA)와 Access Denied 벽에 부딪힌 과정, 그리고 기술적 우회 대신 '정공법'을 선택한 판단 기록이다.위 화면은 클라우드 서버에 배포된 셀레늄 스크립트가 실행되던 중 차단된 순간의 브라우저 캡처다. 웹사이트는 봇 접근을 감지하고 캡챠 화면을 띄웠으며, 스크립트는 이를 뚫지 못하고 빈 결괏값만 반환했다. 이 화면 하나가 며칠간의 디버깅을 시작하게 만든 단서였다.왜 시작했나: 수작업의 늪에서 벗어나기 위한 결단사내 데이터 수집 프로젝트를 진행하던.. 더보기
티스토리 API의 한계를 깨부수는 셀레늄 자동 포스팅 파이썬 코드 구현기 지난 글에서는 수동 업로드 노동에서 해방되기 위해 셀레늄(Selenium) 브라우저 자동화와 공식 API를 결합한 멀티채널 자동 업로드 시스템의 설계 사상을 소개해 드렸습니다. 매일 아침 단 한 번의 마우스 더블 클릭만으로 티스토리와 유튜브 쇼츠까지 무인으로 등록되는 시스템을 꿈꾸며, 저는 곧장 신이 나서 파이썬 코딩을 시작했습니다.하지만 실제 코드를 구현하기 시작하자마자 온갖 버그와 장벽에 부딪혔습니다.단순히 크롬 드라이버를 띄워 로그인 버튼을 누르고 본문 입력창에 글씨를 쓰게(send_keys) 하면 될 줄 아는데, 티스토리 에디터의 독특한 웹 구조 때문에 텍스트가 엉뚱한 곳에 적히거나 영문/한글이 뒤섞여 깨지는 현상이 발생했습니다. 이번 글은 셀레늄 자동화 스크립트를 구현하면서 겪었던 세 가지 기술.. 더보기
클릭 한 번으로 블로그와 쇼츠를 여러 채널에 동시에 업로드하는 방법 콘텐츠 자동화 시스템을 완성하고 나서 매일 1개의 고품질 원고와 9:16 쇼츠 동영상이 파이썬을 통해 알아서 구워져 나오는 환경을 구축했습니다. 이제 매일 아침 커피 한 잔을 마시며 폴더에 새로 쌓인 작업물들을 확인하기만 하면 되니 “드디어 나만의 디지털 빌딩에서 월세를 받는 무인 자동화가 성사되었구나!”라며 크게 만족했습니다.하지만 기쁨도 잠시였습니다. 또 다른 수동 노동이 저를 기다리고 있었기 때문입니다.파이썬이 완벽하게 정리해 둔 블로그 글 파일(blog.md)을 복사해서 티스토리 에디터에 붙여넣고, 가로형 이미지들을 한 장 한 장 단락 사이에 드래그하여 배치하며, 유튜브에 들어가 쇼츠 영상과 자막 파일을 수동으로 올리는 작업이 매일 반복되었습니다. 플랫폼이 2~3개로 늘어날수록 복붙과 업로드에 들.. 더보기
쇼츠 자동 렌더링을 시도하다 마주친 지옥의 인코딩 에러 1인 기업가로서 매일 블로그를 쓰고 유튜브 쇼츠 영상을 기획하는 일은 생각보다 엄청난 노동을 요구합니다. 블로그 글을 요약해 대본을 만들고, ElevenLabs로 목소리를 뽑고, AI 이미지를 배치한 뒤, 프리미어나 캡컷 같은 툴을 켜서 자막을 한 땀 한 땀 얹다 보면 반나절이 훌쩍 지나가기 일쑤였습니다."이 영상 편집 과정도 규격화해서 자동으로 렌더링해 주는 프로그램이 있으면 얼마나 좋을까?"이 고민에서 탄생한 것이 바로 파이선생 AI 자동화랩의 핵심 렌더러인 make_shorts.py 프로그램입니다. 파이썬을 기반으로 이미지와 오디오를 받아 9:16 세로형 쇼츠 비디오로 결합하고, 자막 파일(.srt)까지 자동으로 계산해 생성해 주는 시스템입니다.자동화 렌더링 파이프라인의 핵심인 make_shorts.. 더보기