n8n 프로덕션 설치 — PostgreSQL 연동 완전 가이드
📋 실습 안내
✏️ CODE EDITOR (JSX)
▶ 실행 버튼을 눌러 코드를 테스트하세요.
👁️ 내 미리보기
내 코드 실행 결과
🎯 완성 미리보기
목표
위 에디터 코드를 수정해서 이 결과물과 똑같이 만들어보세요!
💡 TODO 주석을 채워서 위 결과물처럼 동작하게 만들어보세요
🤖 AI 선생님에게 질문하기
이번 강의 전용
▼
선생님이 답변 중이에요...
⚠️ 학습 관련 질문만 답변합니다. 관련 없는 질문은 자동으로 학습으로 유도됩니다.
Q1. n8n에서 N8N_ENCRYPTION_KEY를 변경했을 때 발생하는 문제는?
💡 N8N_ENCRYPTION_KEY는 저장된 모든 크리덴셜(Google, Slack, GitHub 등 연동 인증 정보)을 암호화/복호화하는 데 사용됩니다. 이 키를 변경하면 이미 암호화된 크리덴셜을 복호화할 수 없어서 모든 크리덴셜이 사용 불가 상태가 됩니다. 처음 설치 시 생성한 키를 안전한 곳에 보관하고, 절대 변경하지 않아야 합니다.
Q2. n8n에서 SQLite 대신 PostgreSQL을 사용해야 하는 가장 큰 이유는?
💡 SQLite는 파일 기반 DB로 동시 쓰기가 제한적입니다. 여러 워크플로우가 동시에 실행되거나, 웹훅으로 동시 다중 요청이 올 때 database is locked 오류가 발생합니다. PostgreSQL은 동시 쓰기를 완벽하게 지원하므로 프로덕션 환경에서 안정적입니다.
Q3. n8n을 SQLite에서 PostgreSQL로 마이그레이션할 때 직접 이전이 불가능한 데이터는?
💡 크리덴셜은 N8N_ENCRYPTION_KEY로 암호화되어 DB에 저장됩니다. 같은 암호화 키를 유지하면서 PostgreSQL로 전환하면 이론적으로 이전 가능하지만, n8n 공식 마이그레이션 도구는 제공되지 않습니다. 실제 마이그레이션에서는 워크플로우는 export/import로 이전하고, 크리덴셜은 새로 입력하는 것이 가장 안전합니다.
Q4. docker-compose.yml에서 restart: always와 restart: unless-stopped의 차이는?
💡 restart: always는 수동으로 docker stop 해도 Docker 데몬이 재시작되면 컨테이너를 다시 시작합니다. restart: unless-stopped는 수동으로 중지한 경우 Docker 데몬이 재시작되어도 컨테이너를 시작하지 않습니다. 프로덕션에서는 보통 unless-stopped를 사용하고, 서버 재부팅 후 자동 시작이 필요한 경우 always를 사용합니다.
Q5. n8n 실행 이력 설정 중 DB 용량을 가장 효과적으로 줄이는 설정 조합은?
💡 성공한 실행은 일반적으로 다시 볼 필요가 없으므로 EXECUTIONS_DATA_SAVE_ON_SUCCESS=none으로 저장 자체를 막는 것이 가장 효과적입니다. 여기에 EXECUTIONS_DATA_PRUNE=true와 MAX_AGE 설정을 추가하면 오류 이력도 일정 기간 후 자동 정리됩니다. 오류 이력(SAVE_ON_ERROR=all)은 트러블슈팅을 위해 유지하는 것이 좋습니다.
😅
아쉽네요!
점수: 0점 — 70점 이상이 되어야 통과합니다.