강의

멘토링

로드맵

Inflearn brand logo image

인프런 커뮤니티 질문&답변

yoon님의 프로필 이미지
yoon

작성한 질문수

코딩 없이 AI 자동화 전문가가 되는 법, n8n 완벽 가이드

N8N 수업 파일 불러오기와 자동 백업 설정 완전 가이드

37강 복구 문의

해결된 질문

작성

·

36

0

안녕하세요 지난번에 많은 도움 받았던 윤상필입니다.
추가 강의는 너무 감사합니다! 다만 아직 진행하지는 못했습니다
그전에 본업과... 사고친것을 수습하느나 벌써 열흘의 시간이 흘렀내요
추가 강의는 진행해보고 궁금한거 있으면 연락드리겠습니다

 

오늘은 다름아니라 위에 언급한 사고때문에 발견한건데요
배경은 이렇습니다.
코드노드에서 const crypto = require('crypto'); 이걸 사용하고싶었는데요
리퀘스트 자체가 되는지 모르겠다만.. 우선 지피티에서는 된다 하였고 진행하였습니다
도커 컴포즈도 건드려보고 이렇게 저렇게 하다가 docker-compose down -v 하라고 하더군요
진행했고... 그결과 볼륨이 다 삭제가 되버려서 기존에 있던 워크플로우가 모두 지워졌습니다
지피티에서는 로컬 디렉토리를 앞으로는 바꾸라고 하는데요 거기까진 진행을 못했습니다.
여튼 복습한다 생각하고 다시 만들어가면될텐데요 그전에 백업에 대한 욕구가 생겼습니다.


강의 안대로 진행하면 백업자체는 가능합니다 다만 복구가 진행이 되지않았습니다
(제컴터의 문제 일수도 있지만 공유드려 봅니다)

 

https://level-sodalite-012.notion.site/2297117a1a43809ea70ce9c53ebbd34b

 

지피티와의 대화는 pdf로 저장하였으나, 인프런에 업로드가 되지 않아
노션에 저장하고 공유해드립니다. (지피티는 두번의 대화를 하였고, 실패를 먼저 대화하였고, 그뒤 다시 지피티대화를 열어서 진행하였습니다)

 

지피티 pdf 저장은 크롬 확장프로그램으로 진행하였습니다

image.png

 

매번 도움주셔서 감사합니다!

답변 2

0

남박사님의 프로필 이미지
남박사
지식공유자

안녕하세요, 상필님.

일단 간단하게만 설명하면 백업 방식은 일반 텍스트 파일 형태로 SQL문을 직접 백업하는 형태의 방법이 있고 또 다른 한가지는 DB를 통째로 덤프화 시켜서 저장하는 방식이 있습니다.

 

첫번째 방식은 백업 파일을 일반 텍스트뷰어로 열어볼 수 있고 그 안에는 "INSERT INTO..." 처럼 사람이 볼 수 있는 일반 텍스트 파일로 SQL문이 작성되게 됩니다.

두번째 방식은 강의에서 사용된 방식으로 DB를 통째로 덤프화 한 바이너리 파일이기에 일반 텍스트 뷰어나 이런걸로는 열어볼 수 없습니다.

 

여기서 첫번째 방식, 일반 텍스트 파일 형태의 SQL문이 백업된 파일을 복원할때는 psql 문을 사용해서, 쉽게 텍스트 파일의 SQL문을 한줄 한줄 query 하는 방식으로 복원이 되고, 두번째 방식으로 백업된 덤프 파일은 pg_restore 명령을 사용해서만 복원이 가능합니다. 대략적으로 이렇게 나뉜다 생각하시면 되고 강의에서는 두번째 방식으로 백업을 하게 됩니다.

 

docker exec $containerName pg_dump -U $dbUser -d $dbName -Fc > $backupPath

위의 코드는 강의에서 제공하는 ps1 스크립트 내용중 백업명령을 수행하는 부분입니다만 아마도 문제가 > backup.dump 에서 발생하지 않았을까? 하는 의심이 드는 부분이긴 합니다. > 로 인해 스트림이 깨져서 바이너리 파일에 손상이 생기지 않았을까 의심이 들긴 합니다.

 

docker exec $containerName pg_dump -U $dbUser -d $dbName -Fc -f /tmp/backup.dump
docker cp ${containerName}:/tmp/backup.dump $backupPath

따라서 위의 코드에서처럼 > 리다이렉트 부분을 제거하고 직접 도커 내부의 /tmp 경로에 backup.dump 파일로 백업 파일을 생성하고 그 뒤에 해당 파일을 호스트로 복사하는 형태로 수정했습니다.

수정된 스크립트(ps1) 파일을 실행하면 실제 백업된 원본 파일이 도커 내부의 /tmp/backup.dump로 남게 됩니다.

 

pg_restore --list /tmp/backup.dump

도커 컨테이너 내부의 백업된 원본 파일을 pg_restore --list 명령을 통해 해당 백업 파일의 유효성 검증을 해볼 수 있습니다. 위의 명령은 반드시 도커 컨테이너의 터미널에서 입력되어야 합니다.

 

image.png

도커 컨테이너 내부의 백업 파일 유효성 검사를 해보면 위의 그림에서처럼 문제 없다는 결과를 얻을 수 있습니다.

 

pg_restore -U <유저명> -d <새DB명> backup.dump

그럼 해당 백업 파일을 위의 명령어를 통해 복구를 할 수 있습니다. 참고로 n8n 설치 디폴트 값을 예시로 들면 유저명은 root 이고 DB명은 n8n 입니다.

 

제가 사용중인 2개의 PC와 1개의 서버, 총 3대의 PC에 현재 N8N이 구동중인 상태라서 당장 복구를 확인 해볼 여건이 되지 않아서 테스트가 되지 않긴 했지만, 개인적인 경험상 유효성 체크 된 덤프 파일이 복구가 되지 않았던 적은 없으니 위의 내용을 참고 하시어 진행해보셨음 합니다.

도커의 볼륨을 삭제해서 N8N 데이터를 모두 날려먹는건 정말 아찔한 경험이 아닐 수 없습니다. 물론 저도 지금까지 한 4~5번 정도 날려먹은 경험이 있기에 처음부터 다시 다 만들고... 뭐 안할 수 있음 좋기야 하겠지만 긍적적으로 보면 그래도 좋은 경험이라 생각합니다.

더 궁금하신 사항이 있으시면 또 질문 주시기 바랍니다.

0

안녕하세요, 인프런 AI 인턴입니다. yoon님.

복구와 백업 관련 문제로 도움을 요청하셨군요. 워크플로우가 삭제되는 아쉬운 상황을 경험하셨다니 안타깝습니다. 또한 백업에 대한 필요성을 느끼셨다는 점에서, 앞으로는 효율적인 데이터 관리가 중요하겠습니다. 아래에 도움이 될 수 있는 몇 가지 정보를 제공드립니다.

  1. 백업과 복구 프로세스 이해:

    • docker-compose down -v 명령어는 모든 볼륨 데이터를 삭제합니다. 앞으로 이 명령어를 사용할 때는 주의하시는 것이 중요합니다.
    • 백업 및 복구 과정에서는 n8n_data 디렉토리의 내용을 주기적으로 백업하시면 데이터 유실을 방지할 수 있습니다.
  2. 백업 파일 관리:

    • n8n의 백업은 주로 JSON 형식으로 저장되며, 복구 시에도 동일한 형식으로 데이터를 불러와야 합니다.
    • 복구 실패 시, 백업 파일 내 JSON 데이터가 유효한지 JSON Lint 같은 도구로 확인해 보세요.
  3. 복구 시 유의점:

    • 복구 절차 중 에러가 발생한다면, 에러 메시지와 JSON 형식 모두를 검토하여 복구 가능성을 높이세요. 복구 시 docker-compose up 명령어를 통해 상태를 점검합니다.
  4. 추가 자료:

    • Notion 링크에서 공유해주신 GPT 대화 내용을 확인하고, GPT와의 토론 내용을 기반으로 추가 조치를 계획해 보세요.

만일 n8n 백업 및 복구에 대한 추가적인 도움이 필요하시다면, 이 외부 자료를 참고하시어 다시 설정해 보실 수도 있습니다.

앞으로 데이터 백업 및 복구가 보다 원활하게 이루어지길 바랍니다. 추가적인 질문이나 도움이 필요하시다면 언제든 질문해 주세요.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏

추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

yoon님의 프로필 이미지
yoon

작성한 질문수

질문하기