📅 Sense Stock 개발 일지 (2025-08-24)
n8n, 사용자 질의 기반 경제/시장/주식 분석 자동화 파이프라인 구축 중 진행한 작업들을 정리합니다.
오늘은 의존성 지옥부터 파일 권한 문제까지 해결한 작업 내용을 정리했습니다.
지난번에는 기존 자동화 워크플로우를 최적화하고, 오늘은 Parsing 결과 확인과 프롬프트 고도화를 할 예정이었으나..
n8n 버전 업데이트라는 간단해 보이는 작업이 어떻게 의존성 문제와 예상치 못한 권한 문제로 이어졌는지, 그리고 그 모든 과정을 어떻게 해결했는지에 대한 전체 여정을 공유하려 한다.
모든 것의 시작은 "Update가 오랫동안 안됐다는 알림"에서 부터이다. ㅋㅋㅋㅋ
기존 docker-compose.yml이 build 명령어로 이미지를 만들고 있었기에, 이걸 n8n 공식 이미지를 사용하는 image: n8nio/n8n:latest로 바꾸면 아주 깔끔하고 편해질 것이라 기대했다. 하지만 그건 거대한 착각의 시작이었다.
docker-compose up -d를 실행하자마자, 잘 돌아가던 모든 워크플로우가 멈춰 섰다. 원인을 파고들자 부끄러운 진실과 마주했다. 내 시스템은 그냥 n8n이 아니었다. 웹 자동화를 위한 Playwright 이미지를 기반으로, Python, gspread, fastapi, beautifulsoup4 등 수많은 커스텀 패키지를 설치한, 나만의 맞춤형 시스템이었던 것이다. 당연히 아무것도 없는 공식 이미지에서는 내 '특별한 부품들'을 찾을 수 없으니 에러가 나는 게 당연했다.
🧱 3단계에 걸친 문제 해결 과정
STEP 1. 처참하게 실패한 '공식 이미지' 사용법
# Before: 내가 직접 만든 커스텀 이미지
services:
n8n:
build:
context: .
# After: 모든 것을 망가뜨렸던 시도
services:
n8n:
image: n8nio/n8n:latest # 이 한 줄이 문제였다!
STEP 2. 성공적인 'Dockerfile' 직접 수정
# 기존 RUN npm install -g n8n
# 변경
RUN npm install -g n8n@1.45.1 # 버전을 콕 집어 설치
이후 docker-compose build로 이미지를 재빌딩하여 1차 문제를 해결했다.
STEP 3. '환경 변수'로 권한 문제 해결
업데이트 후 발생한 파일 쓰기 권한 오류는 환경 변수 추가로 해결했다.
# docker-compose.yml
services:
n8n:
# ... (기존 설정들)
environment:
# n8n 폴더에 대한 파일 접근 차단을 해제(true, Default)
- N8N_BLOCK_FILE_ACCESS_TO_N8N_FILES=false
🗂 전체 작업 흐름 정리
- (실패) 단순 업데이트 시도: docker-compose.yml의 build를 image 태그로 변경.
- 1차 문제 직면: 커스텀 의존성(Playwright, Python 패키지 등)이 모두 사라져 워크플로우 중단.
- 1차 원인 분석: 내 시스템이 고도로 커스텀된 환경이라는 사실을 깨달음.
- (성공) 올바른 업데이트: Dockerfile에서 npm install -g n8n@<Version>으로 버전을 명시하고 docker-compose build로 이미지 재빌드.
- 2차 문제 직면: 업데이트 성공 후, 파일 저장 노드에서 "is not writable" 권한 에러 발생.
- 2차 원인 분석: n8n 버전업에 따른 내부 보안 정책 변경으로 추정.
- 최종 해결: docker-compose.yml에 N8N_BLOCK_FILE_ACCESS_TO_N8N_FILES=false 환경 변수를 추가하여 컨테이너 재시작. 모든 기능이 정상화됨.
🧠 진행 중 고민한 점들
- 업데이트는 끝이 아니었다
버전 숫자만 올리면 끝날 줄 알았는데, 버전업에 따른 정책 변경(Breaking Changes), 추가 기능 등
릴리즈 내용을 주기적으로 확인해야겠다. 좋은 기능들이 그 사이 많이 생겻더라.- 실시간(Chat Streaming)을 답변을 해준다. 나중에 적용해봐야겠다.
- 장점으로는 사용자가 요청했을때 작업의 진해여부를 알 수 있다.
- Debug 상태에서 Workflow 수정 가능(Edit in Debug)
- 매우 유용한 기능이다. 내가 매번 실행하고 Debug 상태에서 수정하고 싶었는데, 좋은 기능이다.
- 실시간(Chat Streaming)을 답변을 해준다. 나중에 적용해봐야겠다.
- 문서화, 그리고 또 문서화
Dockerfile에 어떤 패키지를 왜 설치했는지, 내 시스템이 어떤 특별한 환경 변수 설정을 필요로 하는지 기록해뒀더라면 이 모든 삽질의 절반은 줄일 수 있었을 것이다. - 미궁에 빠진 N8N_RESTRICT_FILE_ACCESS_TO
예전에 특정 경로 접근 제어에 잘 사용했던 이 변수가 이번엔 왜 제대로 작동하지 않았는지 아직도 의문이다. 찜찜...
그리고 지난번 Google OAuth2 인증 관련 Error에 대한 해결 내용을 작성했었는데, 또 다시 Error가 발생했다.
관련 내용은 아래 블로그 글에 추가적으로 작성했다.
https://cord-ai.tistory.com/251
n8n, Google OAuth2 인증 오류
https://cord-ai.tistory.com/213 n8n, Google Calendar OAuth2 인증 오류n8n을 Docker에 설치해서 잘 사용하다가, 서버를 재시작하거나 Docker 컨테이너를 다시 실행했더니 Google Calendar 인증이 풀리는 경험, 해보셨나
cord-ai.tistory.com
❓ 다음 단계에서 고민 중인 것들
- Data Search 노드의 결과값 분리
현재는 기업과 매칭되는 데이터를 'context'라는 하나의 키에 전부 담아서 추출(Output)하고 있다. 앞으로 프롬프트에서 '기업 개요', '최신 뉴스'처럼 필요한 정보만 개별로 참조할 수 있도록, 결과값을 명확히 구분해서 추출하는 구조로 변경해야 한다. - Best Keyword Extract 프롬프트 수정
이전에 질문의 '유효성 검사' 기능을 별도의 Agent로 분리했기 때문에, 기존 Agent의 역할을 재정의해야 한다. 이제 이 Agent는 유효성 검사 없이, 이미 검증된 질문에서 순수하게 핵심 키워드를 추출하는데만 집중하도록 프롬프트를 수정할 필요가 있다. - Keyword Parsing Node 에러 해결
Best Keyword Extract Agent에서 결과값이 정상적으로 나왔음에도, 바로 다음 노드인 Keyword Parsing Node에서 에러가 발생하고 있다. 두 노드 사이에 오고 가는 데이터의 형식이 맞지 않는 것으로 추정됨.
원래 이전과 같은 이슈가 없었으면 아래 내용들을 그대로 진행할려고 했었던건데... 😕
'Automation Tool > n8n Project' 카테고리의 다른 글
Sense Stock, D+24 (5) | 2025.08.14 |
---|---|
💣 프로젝트 트러블슈팅 및 삽질 기록 (4) | 2025.08.12 |
Sense Stock 개발 회고, 세 번째 (3) | 2025.08.12 |
Sense Stock, D+23 (2) | 2025.08.11 |
Sense Stock, D+22 (4) | 2025.08.06 |
댓글