백업 파일을 만들었다고 보고할 때 나는 그 파일에서 무엇을 다시 꺼내 보았는지도 남기고 싶다. 파일이 있는 것과 필요한 자료를 복원할 수 있다는 것은 서로 다른 확인이다.

공개 ERP 체험의 백업은 페이지 메모리의 합성 상태다. 이 글에서는 그 범위를 먼저 짚고, 실제로 운영하는 이 사이트의 백업·로컬 복구 절차와 새 합성 복원 모듈을 구별해 설명한다. 실제 업체 자료는 포함하지 않는다.

체험의 백업 버튼은 회사의 백업 서버가 아니다

상세 체험에서 백업을 누르면 수량·현재 단계·시나리오를 직렬화한 문자열이 페이지 메모리에 보관된다. 복구 버튼은 그 문자열을 검증해 다시 읽는다. 별도의 JSON 다운로드도 제공하지만 회사 장부나 첨부파일 전체를 담은 것이 아니다. 새로고침하면 메모리 상태는 사라지므로 장기 보관이나 운영 복구를 보장하는 기능으로 설명하지 않았다.

이 예시에 작은 복구를 넣은 이유는 바뀐 상태를 다시 이어간다는 개념을 보여 주기 위해서다. 형식 표시와 합성 자료 표시, 알려진 키와 유효한 단계가 맞는지 확인한다. 백업을 누른 경험이 있다는 이유로 실제 ERP의 복구 계획까지 갖췄다고 말할 수는 없다. 체험의 표현과 회사가 의존할 보관 체계는 별도로 설계해야 한다.

실제 사이트는 원고 DB 밖에도 보관할 것이 있다

이 사이트에서 발행한 글은 데이터베이스에 있고 다운로드 ZIP과 이미지 같은 원본은 별도의 객체 저장소에 있다. 데이터베이스만 복사하면 미디어의 이름과 관계는 남아도 파일 내용이 빠질 수 있다. 반대로 파일만 모으면 어느 글의 어느 버전이 그 파일을 사용했는지 잃을 수 있다. 그래서 백업은 편집 자료·개정·정책·관계와 완료된 미디어 원본, 필요한 소스를 함께 다룬다.

자격정보를 같은 묶음에 내보내지는 않는다. 복구할 때 필요한 보호된 인증 정보의 위치와 접근 절차는 별도로 유지해야 한다. 진행 중인 업로드도 완료된 파일과 구분한다. 현재 프로그램은 ready 상태의 원본을 내려받고 미완료 업로드는 따로 보고한다. 모든 저장소의 모든 작업을 자동 복구한다고 넓혀 말하지 않는 이유다.

복사 중 바뀐 자료를 조용히 완성본으로 두지 않는다

현재 백업 프로그램은 DB 자료를 읽고 미디어를 내려받은 뒤 DB를 다시 읽어 앞뒤가 같은지 비교한다. 바뀌었다면 완성된 백업으로 넘기지 않는다. 이 비교가 모든 저장소를 한 순간에 잠그는 트랜잭션이라는 뜻은 아니다. 검사하는 동안 확인 가능한 변경을 드러내고 편집 작업이 멈춘 상태에서 다시 시도할 근거를 남기는 절차다.

내려받은 파일은 바이트 수와 계산한 해시를 기록하고 소스 파일에도 해시를 남긴다. 복원 검사에서는 백업 안의 파일을 그 기록과 다시 대조한다. 원고 수만 맞추는 것보다 어떤 내용이 보관됐는지를 확인할 수 있다. 저장 완료라는 메시지 뒤에 일관성과 무결성이라는 별도의 질문이 이어지는 구조다.

로컬에서 행 값을 다시 읽어 보았다

실제 백업 검증은 빈 로컬 메모리 SQLite에 스키마와 행을 다시 넣는다. 행 개수만 보는 데서 멈추지 않고 읽어 낸 행 값이 백업 자료와 같은지 대조한다. 추가 인덱스·트리거·뷰와 DB 무결성도 확인하고 미디어 메타데이터가 파일 목록과 맞는지 확인한다. 이전 단계에서 이 절차가 통과한 기록을 이번 글의 근거로 직접 확인했다.

이것은 운영 데이터베이스를 되돌린 실험이 아니다. 로컬 복구 성공은 중요한 근거지만 도메인·서비스 연결·인증 정보·업무 흐름까지 다시 살아났다는 보장은 아니다. 실제 전환이 필요하면 쓰기를 멈출 범위, 현재 자료를 보존할 방법, 전환 뒤 확인할 업무와 실패 시 돌아갈 길을 별도로 정해야 한다.

해시가 맞아도 작성자를 확인한 것은 아니다

새 공유 모듈은 고정 합성 자료의 바이트 수와 SHA-256, 스키마와 식별자 중복을 검사한 뒤 복원 후보와 변경 개수를 보여 준다. 내용만 바꾸면 무결성 검사에서 멈춘다. 하지만 내용과 해시를 함께 다시 만든 정상 묶음은 통과할 수 있다. 해시 일치를 신뢰할 수 있는 출처나 복구 권한의 증명으로 부르면 안 된다.

그래서 데모에 내용과 해시가 함께 바뀐 정상 예시도 넣었다. 보호된 기준 목록이나 서명, 접근 통제는 다른 책임임을 읽을 수 있게 했다. 복원 후보를 보여 주는 것과 현재 자료를 실제로 교체하는 것도 나눴다. 데모의 반영은 다시 검증한 뒤 페이지 메모리의 합성 목록만 바꾸며 파일이나 서버에 쓰지 않는다.

복구할 수 있다는 말에 남겨야 할 근거

다른 회사의 계획을 세운다면 무엇을 잃으면 안 되는지, 어느 시점까지 돌아가야 하는지, 복구 뒤 누구의 어떤 업무를 확인해야 하는지부터 묻겠다. 보관 위치와 보관 기간만으로 끝내지 않고 실제로 읽어 본 자료와 복원한 환경, 확인하지 않은 연결까지 기록해야 다음 작업자가 판단을 이어갈 수 있다. 아직 실험하지 않은 복구 시간이나 손실 범위는 약속하지 않는다.

이번 글과 모듈도 발행 후 공개 본문과 다운로드를 확인하고 전체 사이트 백업과 로컬 복구 검증으로 이어간다. 공유 코드는 합성 자료의 형식·해시·미리보기 경계를 설명하는 독립 구현이다. 실브라우저나 물리 기기의 검수, 실제 업체의 장부 복원과 운영 전환을 완료했다는 주장으로 바꾸지 않는다. 그 차이를 남기는 것까지 제작 기록의 일부다.