실패 알림을 만들었을 때는 워크플로가 멈춰도 하루 뒤에야 알았고, 자동 시작을 걸었을 때는 PC 를 껐다 켜면 n8n 이 안 떠 있는 것을 다뤘습니다. 이번은 그 다음입니다. 그 PC 가 없어지면. PC 를 바꾸거나, n8n 을 두었던 사람이 회사를 나가거나, 디스크가 죽었을 때 무엇을 챙겨 두어야 다른 PC 에서 같은 워크플로가 도는지, 직접 지우고 되살려 본 기록입니다.
5~50인 회사에서 n8n 을 사무실 PC 한 대에 두면 백업은 대개 「워크플로 JSON 내려받아 두기」로 끝납니다. 그게 얼마만큼인지 보려고, ④ 글에서 만든 워크플로 A(실패 알림, Publish 됨)·B·C 가 그대로 있는 이 PC 의 n8n 을 대상으로 했습니다.
먼저 결론 셋. 워크플로 JSON 은 절반입니다. 자격증명은 따로 내보내야 하고, 내보내도 56바이트짜리 파일 하나가 없으면 열리지 않습니다. 그리고 지우고 되살린 워크플로는 ID 가 바뀌거나 Publish 가 풀려서, 「같은 것」이 아니었습니다. 셋 다 아래에 있습니다.
다른 PC 가 없어서 이렇게 했습니다
다른 PC 가 없었습니다. 그래서 같은 PC 에서 두 가지로 대신했습니다.
- 같은 n8n 에서 워크플로를 지우고 JSON 으로 되살리기 — ID·트리거·자격증명 연결·Publish 상태가 그대로인지 봅니다.
- 빈 데이터 폴더로 n8n 을 하나 더 띄우기 — n8n 은
N8N_USER_FOLDER로 데이터 폴더를 바꿀 수 있어서, 빈 폴더를 주면 「처음 깐 PC」와 같은 상태가 됩니다. 여기에 내보낸 파일을 들여와 봅니다. 포트는 5680 으로 바꿔 원래 것(5678)과 같이 띄웠습니다.
2번이 「다른 PC」에 가깝지만 같지는 않습니다. node 와 n8n 버전이 같고, 경로도 같고, 무엇보다 원래 PC 가 옆에 살아 있습니다. 진짜 PC 가 죽었을 때 원래 폴더에서 꺼내 올 것이 없다는 점은 이 방법으로는 재현이 안 됩니다. 그 한계는 아래 「걸리는 것」에 다시 적습니다.
n8n 데이터 폴더에 무엇이 있나
백업 대상이 무엇인지부터 봤습니다. 윈도우에서 n8n 은 C:\Users\사용자\.n8n\ 에 모든 것을 둡니다. 이 PC 의 폴더는 이랬습니다.
| 파일 | 크기 | 무엇 |
|---|---|---|
config |
56바이트 | 암호화 키(encryptionKey) 하나. 자격증명을 잠근 열쇠입니다 |
database.sqlite |
1.4MB | 워크플로 · 자격증명(암호화됨) · 계정 · 실행 기록 · 설정 전부 |
database.sqlite-wal |
4.1MB | 위 파일에 아직 합쳐지지 않은 최근 변경분 |
database.sqlite-shm |
32KB | 위 wal 의 색인 |
n8nEventLog*.log |
총 9MB | 이벤트 로그 4개 |
nodes\ · storage\ |
거의 빔 | 커뮤니티 노드 · 바이너리 저장소 |
두 가지가 눈에 띄었습니다.
config 가 56바이트입니다. 열어 보면 키 하나뿐입니다(값은 32자, 여기에 적지 않습니다). n8n 이 처음 뜰 때 만들어 두고, 자격증명을 저장할 때 이 키로 잠급니다. 이 파일이 이 글의 두 번째 결론입니다.
database.sqlite 의 수정 시각이 9월 12일인데 -wal 은 9월 16일입니다. SQLite 의 WAL 모드는 변경분을 본 파일에 바로 쓰지 않고 -wal 에 모아 두었다가 나중에 합칩니다. 이 PC 에서는 나흘치 변경이 -wal 에만 있었습니다. database.sqlite 한 파일만 복사하면 그 나흘이 빠집니다. n8n 을 끄면 합쳐지는지는 이 글에서 확인하지 못했고, 대신 세 파일을 같이 복사했습니다.
내보내기 — 세 가지를 다 해 봤습니다
n8n 을 끈 상태에서 먼저 했습니다. n8n 을 npx 로 깐 PC라 CLI 는 node.exe 로 n8n 을 직접 불렀습니다(⑧ 글과 같은 경로).
| 방법 | 걸린 시간 | 결과 | |
|---|---|---|---|
| 1 | 화면 오른쪽 위 「···」 → Download | 바로 | 워크플로 하나 = JSON 파일 하나 (2.5KB) |
| 2 | n8n export:workflow --all --output=… |
12초 | 워크플로 3개 = JSON 파일 하나 (5.8KB) |
| 3 | n8n export:credentials --all --output=… |
8초 | 자격증명 1개 = JSON 파일 하나 |

1과 2는 같은 워크플로인데 내용이 다릅니다. CLI 쪽에만 있는 것이 staticData 였습니다. ④ 글에서 「10분에 한 번만」 알리려고 Code 노드가 적어 두던 「마지막 발송 시각」이 여기 들어 있습니다. 화면 Download 에는 없습니다. 반대로 화면 쪽에만 meta.instanceId 가 있습니다. 둘 다 노드·연결·설정은 같았고, 자격증명은 둘 다 id 와 이름만 실려 있습니다. 비밀번호는 없습니다. 그래서 워크플로 JSON 은 어디에 올려 두어도 비밀이 새지는 않지만, 그것만으로는 다른 PC 에서 메일이 안 나갑니다.
3의 자격증명 파일은 data 칸이 U2FsdG… 로 시작하는 152자 문자열이었습니다. 기본이 암호화입니다. --decrypted 를 붙이면 user·password·host·port 가 그대로 보이는 평문 파일이 나옵니다(6초). 이 평문 파일은 그 자체가 비밀번호 파일이라, 아래에서 쓴 뒤 지웠습니다.
켜진 상태에서도 해 봤습니다. 「CLI 가 n8n 이 켜진 상태에서 데이터베이스를 잠글 것」이라고 예상했는데, 빗나갔습니다. export:workflow 는 켜진 채로 7초에 끝났고 n8n 은 그동안 200 을 줬습니다. 나중에 import:workflow 도 켜진 채로 됐습니다(14초). 잠금은 없었습니다. 다만 들여온 직후 화면 목록에는 바로 나왔는데, 그것을 도는 워크플로로 살리는 것은 별개였습니다(아래).
막힌 지점 1 — 「Successfully imported」 인데 열리지 않습니다
빈 폴더로 띄울 n8n 에 워크플로 3개를 들여왔습니다. 빈 폴더라 데이터베이스 마이그레이션이 먼저 돌고, 그 뒤 이렇게 끝났습니다(8초).
Importing 3 workflows...
Deactivating workflow "A. 실패 알림 (Error Trigger)". Remember to activate later.
Successfully imported 3 workflows.
「Deactivating … Remember to activate later.」 — Publish 상태는 안 따라온다는 뜻입니다. 이건 뒤에 다시 나옵니다.
이어서 암호화된 자격증명 파일을 들여왔습니다.
Successfully imported 1 credential.
성공입니다. 그런데 이 폴더의 n8n 이 정말 그 자격증명을 읽을 수 있는지 보려고, 같은 폴더에서 --decrypted 로 다시 내보내 봤습니다.
Error exporting credentials. See log messages for details.
Credentials could not be decrypted. The likely reason is that a different "encryptionKey" was used to encrypt the data.
빈 폴더로 뜬 n8n 은 자기 config 를 새로 만들었고, 그 안의 키가 원래 PC 의 키와 다릅니다. 들여올 때는 암호문을 그대로 넣기만 하니 「성공」이고, 풀 때 비로소 안 풀립니다. 성공 응답이 성공이 아니었습니다.
화면에서는 이렇게 보입니다. 자격증명 목록에 「Needs first setup」이 붙어 있고, 열면 User·Password·Host 칸이 전부 비어 있고 위에 「Couldn’t connect with these settings」 가 떠 있습니다. 키가 다르다는 말은 화면 어디에도 없고, n8n 로그에만 bad decrypt 가 남았습니다. 이걸 모르고 보면 「자격증명이 비어서 왔네」 하고 다시 입력할 텐데, 그 비밀번호를 아는 사람이 회사에 없으면 거기서 멈춥니다.

푸는 방법은 둘이었습니다.
| 방법 | 한 것 | 결과 |
|---|---|---|
원래 config 파일을 새 폴더에 복사 |
56바이트 파일 하나 덮어쓰기 | --decrypted 내보내기가 되고 칸이 채워짐 |
--decrypted 로 내보낸 평문 파일을 들여오기 |
새 키로 다시 잠김 | 됨 — 대신 평문 파일이 디스크에 남음 |
백업에서 제일 작은 파일이 제일 중요했습니다. config 를 다른 PC 에 복사하거나, 같은 값을 환경 변수 N8N_ENCRYPTION_KEY 로 주면 됩니다. 이 글에서는 파일 복사만 했습니다.
한 가지 더 있었습니다. 새 폴더 n8n 의 키를 바꿔 다시 켰더니 브라우저 로그인이 풀려 있었습니다. 한 번 본 것이라 이유는 단정하지 않습니다.
막힌 지점 2 — 화면에서 들여오면 다른 워크플로가 됩니다
이번엔 원래 n8n 에서 A 를 지우고 되살렸습니다. 이 버전(2.8)은 「···」 메뉴에 Delete 가 없고 Archive 가 있습니다. 누르면 「Archive Workflow?」 하나만 묻고 넘어갑니다. B 와 C 가 A 를 Error Workflow 로 쓰고 있는데, 그 말은 없습니다. 아카이브된 A 는 목록에서 사라지지만 지워진 것은 아니어서, 완전히 없애는 것은 한 번 더 해야 합니다(이 글에서는 화면이 부르는 것과 같은 요청으로 없앴습니다).
없앤 뒤 B 의 설정을 열어 봤습니다.

Error Workflow 칸에 「A. 실패 알림」 대신 열여섯 자 ID 가 그대로 앉아 있습니다. 경고도 없습니다. 이 상태로 B 가 실패하면 알림이 어디로 가는지는 시험하지 않았습니다.
A 를 되살렸습니다. 새 워크플로를 열고 「···」 → Import from file → 아까 Download 한 JSON. 캔버스에 노드 셋이 그대로 올라오고, Send Email 노드를 열면 자격증명 「시험용 SMTP」가 골라져 있습니다. 같은 PC 에 같은 ID 의 자격증명이 있으니 연결은 살았습니다. 그런데,

- ID 가 바뀌었습니다. 주소창의 ID 가 원래 것이 아닙니다. 새 워크플로를 열었을 때 받은 ID 에 내용만 얹힌 것입니다.
- Publish 가 안 돼 있습니다. 오른쪽 위가 회색 「Publish」 입니다. 원래 A 는 초록 「Published」 였습니다.
staticData가 없습니다. 화면 Download 에 없던 것이니 당연합니다.- B 와 C 는 여전히 옛 ID 를 봅니다. 드롭다운을 열면 새 A 가 있긴 한데, ④ 글에서 본 그대로 회색에 경고 아이콘 — Publish 가 안 됐기 때문입니다. A 를 Publish 하고, B 와 C 의 설정에서 A 를 다시 고르고 저장해야 합니다. 워크플로가 3개라 3분이지만, 30개면 어느 것이 어느 것을 가리켰는지부터 찾아야 합니다.
CLI 로 들여오면 ID 는 지키고 Publish 는 풀립니다
화면으로 들여온 A 를 지우고, 이번엔 CLI 내보내기 파일(원래 ID 가 들어 있는 것)로 n8n import:workflow 를 했습니다. n8n 은 켜진 채였습니다.
Importing 1 workflows...
Deactivating workflow "A. 실패 알림 (Error Trigger)". Remember to activate later.
Successfully imported 1 workflow.
| 화면 Import from file | CLI import:workflow |
|
|---|---|---|
| ID | 바뀜 | 원래대로 |
| B·C 의 Error Workflow | 옛 ID 를 가리킨 채 | 그대로 살아남(같은 ID 이므로) |
| 자격증명 연결 | 살아 있음 | 살아 있음 |
staticData |
없음 | 있음 |
| Publish | 안 됨 | 안 됨 |

B 의 설정을 다시 열면 이름이 돌아와 있습니다. 대신 A 를 다시 Publish 하는 것은 사람이 해야 합니다. 화면에서 「Publish」 → 버전 이름 창 → 「Publish」. 그러고 나서 원래 n8n 은 지우기 전과 같은 목록(A 만 Published)으로 돌아왔습니다.
그리고 어느 쪽으로 되살려도 돌아오지 않은 것이 있습니다. A 의 실행 기록입니다. 지우기 전 A 에는 ④ 글 이후의 실행이 쌓여 있었는데, 되살린 A 는 0건입니다. 워크플로 JSON 에는 실행 기록이 없고, 워크플로를 지우면 그 실행 기록도 같이 지워집니다. 버전 기록도 새로 시작합니다.
빈 폴더로 띄우면 「Set up owner account」 부터입니다
빈 폴더 n8n(5680 포트)에 워크플로·자격증명·config 를 다 넣고 브라우저로 열었습니다.

계정은 내보내기에 없습니다. 처음 깐 것처럼 관리자 계정을 새로 만들라고 합니다. 만들고 들어가면 워크플로 3개가 있는데 셋 다 Publish 가 안 돼 있고, 실행 기록은 0, 자격증명은 이름만 같은 것이 하나 있습니다(원래 config 를 넣었으니 이건 열립니다). 켜지기까지 23초였습니다. 이게 「JSON 백업」으로 다른 PC 에 옮겼을 때의 첫 화면입니다.
폴더를 통째로 복사하면 그대로입니다
마지막으로, 처음에 n8n 을 끈 상태에서 복사해 둔 .n8n 폴더(config · sqlite 세 파일 · 로그 전부, 14MB)를 다른 자리에 놓고 그 폴더로 n8n 을 띄웠습니다.
| JSON 으로 들여온 빈 폴더 | 폴더 통째 복사 | |
|---|---|---|
| 첫 화면 | Set up owner account | 로그인 (원래 계정·비밀번호로 들어감) |
| A 의 Publish | 풀림 | Published 그대로 — 로그에 「Activated workflow “A…”」 |
| A 의 실행 기록 | 0건 | 58건 |
| 자격증명 | config 를 같이 옮겨야 열림 |
열림 |
| B·C 의 Error Workflow | 되살린 방법에 따라 | 그대로 |
30초 안에 떴고, 로그인부터 실행 기록까지 지우기 전과 같았습니다. 이 PC 에서 「그대로」였다는 것이지, 다른 PC 에서 같다고 본 것은 아닙니다.
이 방법으로 쓸 때 걸리는 것
다른 PC 에서 한 것이 아닙니다. 같은 PC 에 같은 node · 같은 n8n 2.8.4 · 같은 경로였습니다. n8n 버전이 다른 PC 로 폴더를 옮기면 처음 켤 때 마이그레이션이 돌 텐데, 그건 이 글에서 보지 않았습니다.
config 를 잃으면 자격증명은 끝입니다. 폴더째 백업하면 그 안에 있으니 잊기 어렵지만, 워크플로 JSON 만 챙긴 백업이라면 이 파일이 없습니다. 반대로 이 파일이 있으면 그 사람은 백업 안의 모든 비밀번호를 풀 수 있습니다. 워크플로 JSON 과 같은 자리에 두지 말라는 뜻입니다.
--decrypted 파일은 비밀번호 파일입니다. 만들었으면 쓰고 지우십시오. 이 글에서도 지웠습니다.
켜진 채 복사한 폴더는 시험하지 않았습니다. 이 글의 폴더 복사는 n8n 을 끈 뒤였습니다. 켜진 채 복사하면 -wal 과 본 파일이 어긋난 순간을 잡을 수 있습니다.
자동으로 백업해 주는 것은 없습니다. 위의 어느 것도 사람이 손으로 한 것입니다. export:workflow 를 작업 스케줄러에 거는 것이 다음 순서인데, ⑧ 글의 「끝」 버튼과 PATH 문제가 그대로 따라올 것이라 이 글에서는 하지 않았습니다.
되살린 워크플로는 다시 Publish 해야 합니다. 화면이든 CLI 든 같습니다. 워크플로가 많으면 어느 것이 Publish 돼 있었는지 목록을 따로 적어 두는 편이 낫습니다. CLI 내보내기 JSON 의 active 칸이 그 목록이긴 한데, 들여올 때 읽어 주지는 않았습니다.
요약
.n8n\config (56바이트) |
자격증명의 열쇠. 이것 없이 자격증명을 옮기면 「성공」 뒤에 빈 칸 |
database.sqlite + -wal + -shm |
세 파일을 같이. -wal 에만 나흘치가 있었음 |
| 화면 Download | 노드·연결·설정. staticData 없음. 자격증명은 ID·이름만 |
export:workflow --all |
위에 staticData 포함. 켜진 채로도 됨(7초) |
export:credentials |
기본 암호화. --decrypted 는 평문 — 쓰고 지울 것 |
| Archive | B·C 가 A 를 쓰고 있어도 경고 없음. 설정 칸에 ID 문자열이 남음 |
| 화면 Import from file | ID 바뀜 · Publish 풀림 · 참조하던 쪽은 옛 ID |
CLI import:workflow |
ID 유지 · Publish 풀림 (Deactivating … Remember to activate later.) |
| 실행 기록 | JSON 에 없음. 워크플로를 지우면 같이 사라짐 |
| 빈 폴더 + JSON | 「Set up owner account」 부터. 계정은 내보내기에 없음 |
| 폴더 통째 복사 (끈 상태) | 로그인 · Published · 실행 58건 · 자격증명 전부 그대로 |
| 못 한 것 | 진짜 다른 PC · 버전 다른 PC · 켜진 채 폴더 복사 · 자동 백업 |
지운 것은 워크플로 하나였고, 시간이 간 곳은 이번에도 n8n 안이 아니었습니다. 56바이트 파일 하나와, 「같은 워크플로」가 무엇인가였습니다.
참고
– n8n 공식 문서 — CLI commands (export:workflow · export:credentials · import:workflow · import:credentials)
– n8n 공식 문서 — Environment variables: N8N_USER_FOLDER · N8N_ENCRYPTION_KEY
– SQLite 공식 문서 — Write-Ahead Logging