작업 노트를 홈페이지와 같은 폴더에 두는 것은 편하다. 그러나 그 폴더를 그대로 올리는 방식이라면 노트도 공개 파일이 될 수 있다. 실제 실패가 남은 인수인계를 읽고 이번 사이트에서는 원본 자료와 작업 문서, 공개 출력의 경계를 다시 확인했다.

메뉴에 없는 파일도 주소로 요청할 수 있다

방문자에게 메뉴나 링크가 없다는 이유로 파일이 비공개가 되지는 않는다. 정적 배포 대상에 들어간 파일은 이름을 알거나 주소가 다른 곳에 남으면 직접 요청할 수 있다. 과거 작업 기록은 작업 문서와 생성 기록을 사이트 폴더 밖으로 옮긴 이유를 이 문제로 설명한다. 문서를 숨기는 화면 기능과 파일 전달의 경계는 서로 다르다.

원래 기록에는 제외 파일과 이동 규칙으로 숨기려던 시도가 그 당시 배포에서 기대대로 작동하지 않았다고 남아 있다. 이 기록을 모든 현재 호스팅의 규칙으로 일반화하지 않는다. 실제 배포 방식에서 어떤 파일이 자산으로 올라갔는지를 먼저 확인하고, 공개하지 않을 자료는 아예 업로드 대상 밖에 두는 더 분명한 경계를 택한다.

소스와 공개 결과의 폴더를 구별한다

소스에는 작업 지침과 검사 코드, 원본 자료와 비공개 근거가 필요하다. 공개 결과에는 방문자가 받을 화면과 승인한 자산만 필요하다. 이번 사이트는 출력 폴더에 필요한 파일을 선택해 복사하고 배포기는 그 출력에서 자산 목록을 만든다. 프로젝트 전체를 그대로 올리지 않는 선택이 작업 자료의 실수 노출을 줄이는 첫 구조다.

현재 업로드 후보 경로 쉰두 개를 읽어 작업 문서 폴더와 비공개 폴더, 파이썬 도구와 메모가 섞이지 않았는지 확인했다. 서버 실행 파일과 서버 전용 모듈은 자산 목록에서 제외해 별도 번들로 처리한다. 서버 코드가 폴더에 있다는 사실만으로 정적 공개 파일이라고 판단하지 않고 실제 업로드 계약을 대조했다.

이름과 내용, 실제 응답을 각각 확인한다

폴더 이름을 바꾸는 것만으로 내용의 비밀 값이나 고객 식별자가 사라지지는 않는다. 자동 검사는 경로와 텍스트에 남은 알려진 표식을 찾는 데 도움이 된다. 이미지와 영상 속 이름이나 문서의 실제 내용은 승인한 바이트와 사람의 검토가 더 필요하다. 스캐너가 못 찾은 표식을 모든 개인정보 검토 완료로 표현하지 않는다.

이번에는 선택한 비공개 경로 일곱 개가 대표 주소에서 찾을 수 없음으로 응답하는지 확인했다. 관리자 목록은 인증 없이 요청했을 때 거절되는지도 확인했다. 이는 정해진 경로의 현재 응답이다. 모든 주소와 모든 저장소를 검사했다는 뜻은 아니며 업로드 목록 검사와 응답 검사를 서로 보완하는 근거로 사용한다.

내려받는 자료도 현재 공개 원고와 연결한다

확장 편집실에서는 이미지와 영상, PDF와 파일을 별도 미디어 서재에 넣을 수 있다. 업로드한 자료가 곧 공개되는 것으로 처리하지 않는다. 공개 검토를 받은 준비 상태의 자료가 현재 발행된 원고에서 사용될 때 전달하는 조건을 둔다. 글을 내린 뒤에도 다른 발행 원고가 같은 자료를 사용하면 공개가 유지될 수 있다는 관계도 고려해야 한다.

새 로고 글의 익명 SVG 세 파일은 검토와 원고 연결 뒤 공개 응답의 해시와 형식을 확인했다. 고객의 원래 로고나 PDF는 올리지 않았다. 파일명과 이미지 설명을 중립적으로 만든 것에 더해 어떤 바이트가 공개되는지까지 확인한 사례다. 글의 공개 상태와 자산의 공개 상태를 따로 흩어 놓지 않으려는 선택이다.

실패 기록은 남기고 공개에는 방법을 남긴다

실패가 담긴 문서는 다음 작업에서 유용하다. 지워서 없애기보다 비공개 근거로 보존하고 공개 글에는 그 실패에서 얻은 판단과 검사 방법을 새로 적는다. 원래 고객 이름과 사이트 주소, 내부 경로를 모두 보여주지 않아도 업로드 대상과 직접 주소의 차이를 충분히 설명할 수 있다.

이번 확인은 로컬 자산 목록과 지정한 HTTP 경로, 관리자 인증 경계의 범위다. 새 브라우저 화면과 미디어 전체의 OCR, 모든 과거 배포의 노출까지 조사한 것은 아니다. 나는 일을 이어가는 데 필요한 문서는 남기되 방문자에게 줄 파일과 다른 경로에서 관리하려 한다. 편집 기능이 커져도 이 경계를 먼저 유지하는 것이 확장의 조건이다.