📘 블100프로젝트 Part 8 – 자동 실행 설정 성공, 그러나 자동 포맷 실패기 😅
어제까지, 로컬 LLM 기반 블로그 자동화 서버를 완성하고 나서
오늘은 그 흐름을 이어 받아, 한 단계 더 개선하려고 했다.
컴퓨터 전원을 켜면 자동으로 WSL이 실행되고,
그 안에서 pm2, ollama, n8n이 동시에 작동하는 환경을 만들고자 한 것.
말 그대로 부팅만 해도 블로그 서버가 작동하는 구조다.
🖥️ 1. 자동 실행 구성 – 부팅부터 돌아가는 나만의 LLM 서버
Windows 작업 스케줄러에 wsl.exe -d Ubuntu를 등록하고
WSL 내부 .bashrc에는 pm2 resurrect를 추가했다.
그리고 pm2 save로 현재 실행 중인 프로세스를 저장했다.
이제는 컴퓨터만 켜면 n8n, ollama, article-api가 자동으로 돌아간다.
아무것도 안 눌러도 블로그 서버가 살아나는 이 느낌, 진짜 서버 같았다.
❌ 2. 그런데 다시 돌려보니... 결과물이 이상하다?
자동 실행은 잘 됐다. 그런데 문제는 그 다음이었다.
어제처럼 블로그 글을 생성하려 했는데, 이상하게도 결과물이 엉망이었다.
똑같은 프롬프트를 사용했는데도:
- 이미지가 빠졌고
- 프롬프트대로 구성도 안 지켜졌고
- 예시 링크도 누락됐고
- 문단 흐름도 매끄럽지 않았다
말 그대로 그냥 문장 몇 개 나열한 수준이었다.
어제 Part 7에서 아주 잘 작동했던 자동화 결과물이
오늘은 완전히 품질이 떨어진 것이다.
🧠 3. 원인은 뭘까? 다시 돌아본 프롬프트 전략
처음엔 프롬프트 문제인가 싶었다.
하지만 다시 확인해보니 프롬프트도 동일했다.
그렇다면 문제는 LLM의 상태나 메모리, 혹은 문맥 길이의 차이일 수도 있다.
결국 로컬 LLM도 매번 결과가 일관적이진 않다는 걸 체감하게 되었다.
🔧 4. 개선 방향 – 프롬프트 고정보다 더 중요한 것
프롬프트를 잘 짜는 것도 중요하지만,
이번에는 오히려 결과물 품질 검증 단계를 추가해야겠다고 느꼈다.
또한 모델 간 역할 분리도 더 명확히 했다.
- openhermes:latest → 블로그 스타일 초안 작성
- mistral:instruct → HTML 구조 포맷 변환
이 구성을 유지하되, 결과물이 어긋나면 다시 재요청하거나,
간단한 QA 필터링 단계를 넣는 걸 고려 중이다.
🔄 5. 또 다른 문제 – Ollama가 충돌했다
자동 실행은 되었지만, Ollama는 종종 pm2와 충돌 상태가 되었다.
기존에 systemd 서비스에 등록되어 있어서,
pm2보다 먼저 실행되며 포트를 점유하고 있었던 것.
🧹 6. 시스템 서비스 제거로 해결
다음 명령어들로 기존 시스템 서비스 정리 후 해결했다:
sudo systemctl stop ollama
sudo systemctl disable ollama
sudo rm /etc/systemd/system/ollama.service
sudo systemctl daemon-reload
그리고 다시 pm2에 등록해서 안정화 완료:
pm2 start /usr/local/bin/ollama --name ollama -- serve
pm2 save
이제는 부팅 → WSL 실행 → .bashrc → pm2 resurrect까지
정상적으로 모든 프로세스가 작동한다.
⚠️ 7. 부팅 직후 실행하면 모델이 이상해지는 이유는?
이번 경험을 겪고 보니, 한 가지 의심이 들었다.
“혹시 컴퓨터를 켜자마자 실행한 게 문제였던 건 아닐까?”
알고 보니 그럴 가능성도 충분하다.
- Windows 부팅 직후 GPU나 CUDA 초기화가 완료되기 전일 수 있고
- WSL도 완전히 안정화되기 전에 pm2가 먼저 실행되면서 문제가 생길 수 있다
- SSD 캐시, 드라이버, 백그라운드 디스크 접근 등의 영향도 무시 못 한다
결론: 모델이 이상한 결과를 냈던 이유가 단순히 프롬프트 문제가 아니라,
부팅 타이밍 이슈일 수도 있었다.
🔧 8. 실행 타이밍 조절 팁
이를 방지하기 위해 다음과 같은 방법도 고려 중이다:
- .bashrc에 sleep 10 && pm2 resurrect
- pm2 등록 시 --restart-delay 설정
- n8n, ollama는 pm2가 아닌 별도 스크립트로 1~2분 지연 후 실행
이렇게 하면 GPU/WSL 초기화가 끝난 후 LLM이 실행되도록 유도할 수 있다.
✅ 정리하며
오늘의 교훈은 분명하다.
자동화 시스템이 잘 작동한다고 해서, 항상 일관된 결과물이 나오는 건 아니다.
프롬프트가 똑같아도,
모델의 상태, 부팅 타이밍, 리소스 준비 여부에 따라 결과가 전혀 달라질 수 있다.
그래서 자동화의 마지막 단계는 언제나 ‘검증’이어야 한다.
다음 단계에서는 결과물 체크 자동화, 프롬프트 버전 관리,
그리고 모델별 결과 비교 기능을 붙여볼 생각이다.
👉 어제 예시 글 다시 보기
https://www.korealifenews.com/2025/04/seouls-new-immigration-policy_54.html
읽어줘서 감사합니다 🙏
블100프로젝트는 계속됩니다. 다음은 Part 9에서 만나요.