이 글이 필요한 사람과 바로 답
PDF 속성에서 작성자 이름을 지웠는데 다른 프로그램에서 다시 보이거나, ChatGPT에 올리기 전에 문서 안의 이름과 제목을 한 번 더 확인하고 싶은 사람을 위한 글입니다.
PDF에는 문서 정보 사전(일반 메타데이터)과 XMP 메타데이터가 함께 들어 있을 수 있습니다. 한쪽만 비웠다고 끝난 것이 아닙니다. 원본을 보관하고 업로드용 사본을 만든 뒤, 일반 메타데이터와 XMP를 각각 검사하세요. 민감한 파일이라면 작성자 필드 몇 개만 지우는 방법보다 Acrobat Pro의 문서 정리 기능처럼 숨은 정보를 폭넓게 검사하는 도구를 쓰는 편이 낫습니다. Adobe도 별도의 Sanitize PDFs in Acrobat Pro 안내를 제공합니다.[1]
이 글은 PDF 파일 자체의 점검 방법을 다룹니다. 회사 규정상 외부 AI 업로드가 금지된 문서를 정리 작업만으로 올려도 된다는 뜻은 아닙니다. 업로드 허용 여부를 먼저 판단해야 한다면 ChatGPT 회사 문서 업로드 전 개인정보와 숨은 정보 점검 기준부터 확인하세요.
확인한 날짜와 환경
- 확인일: 2026년 9월 16일
- 운영체제: Windows 11
- 실행 환경: Python 3.11.16, pypdf 6.16.2
- 테스트 자료: 실명이나 회사 정보가 없는 1쪽 합성 PDF
- 넣은 값: 일반 작성자
Sample Author, XMP 작성자Sample XMP Author - 확인 범위: 일반 메타데이터, XMP 존재 여부, 합성 작성자 문자열의 파일 바이트 잔존 여부
- 직접 확인하지 못한 범위: Acrobat Pro 화면, 실제 ChatGPT 업로드, 전자서명·양식·첨부파일·주석·레이어가 있는 복잡한 PDF
OpenAI는 ChatGPT의 일반 파일 업로드에 관한 공식 FAQ를 운영합니다.[2] 다만 이 FAQ가 PDF 안의 모든 메타데이터를 자동 제거한다고 보장하는 것은 아닙니다. 따라서 업로드 서비스에 맡기기 전에 사용자가 사본을 점검하는 순서로 작성했습니다.
왜 작성자 정보를 지웠는데도 남을 수 있나
pypdf 공식 문서는 PDF에 일반 메타데이터와 XMP라는 두 종류가 있으며 둘이 동시에 존재할 수 있다고 설명합니다.[3] 일반 메타데이터에는 작성자, 제목, 주제, 만든 프로그램 같은 항목이 들어갈 수 있습니다. XMP는 별도의 XML 패킷으로 작성자나 설명을 저장할 수 있습니다.
| 검사 대상 | 확인할 값 | 한쪽만 확인했을 때 생기는 문제 |
|---|---|---|
| 일반 메타데이터 | Author, Title, Subject, Creator, Producer | 속성 창의 이름은 사라져도 XMP 작성자가 남을 수 있음 |
| XMP | dc:creator, dc:title, dc:description 등 | XMP만 없애도 일반 Author가 남을 수 있음 |
| 숨은 문서 요소 | 주석, 첨부, 레이어, 양식, 가려진 내용 | 메타데이터 검사만 통과해도 본문 밖 정보가 남을 수 있음 |
PDF가 열리지 않거나 비밀번호를 요구한다면 메타데이터 삭제보다 암호화 상태를 먼저 해결해야 합니다. 이 경우 PDF 암호화 여부와 권한 있는 사본을 확인하는 순서가 다음 단계입니다.
합성 파일로 직접 검증한 과정과 실제 결과
빈 1쪽 PDF에 일반 작성자와 XMP 작성자를 서로 다른 값으로 넣었습니다. 이후 세 가지 사본을 만들고 reader.metadata, reader.xmp_metadata, 파일 바이트 안의 합성 문자열을 비교했습니다.
- 원본에는 일반 작성자와 XMP 작성자가 모두 있었습니다.
writer.metadata = None으로 일반 메타데이터만 비운 사본에서는 일반 작성자가 사라졌지만 XMP 작성자는 그대로 읽혔습니다.- 복제한 PDF에서 XMP 참조까지 제거한 사본은 pypdf 검사상 XMP가 없었지만, 원래 XMP 작성자 문자열은 파일 바이트에 남았습니다. 연결이 끊어진 객체가 파일 내부에 남은 결과였습니다.
- 새
PdfWriter를 만들고 페이지만 다시 추가한 사본에서는 일반 메타데이터와 XMP가 모두 없었고 두 합성 작성자 문자열도 바이트 검사에서 나오지 않았습니다.
| 합성 사본 | 일반 작성자 | XMP 작성자 | 바이트에 XMP 문자열 |
|---|---|---|---|
| 원본 | 있음 | 있음 | 있음 |
| 일반 메타데이터만 제거 | 없음 | 있음 | 있음 |
| XMP 참조도 제거 | 없음 | 없음 | 있음 |
| 새 문서에 페이지만 재구성 | 없음 | 없음 | 없음 |
qpdf 공식 문서는 입력 PDF를 다시 쓸 때 구조를 재정리하며 연결되지 않은 객체를 제거할 수 있다고 설명합니다.[4] 다만 이번 환경에는 qpdf 실행 파일이 없어 이 동작은 직접 시험하지 못했습니다. 위 표의 결과는 pypdf로 만든 단순 합성 PDF에만 해당합니다.
단계별 해결 과정
- 원본을 복사합니다. 정리 작업은 반드시 업로드용 사본에서만 합니다.
- 문서 속성을 확인합니다. 작성자, 제목, 주제, 키워드, 만든 프로그램처럼 화면에서 보이는 항목을 기록합니다.
- 일반 메타데이터와 XMP를 따로 검사합니다. 아래 읽기 전용 검사 코드는 파일을 수정하지 않습니다.
- 민감도가 높으면 문서 정리 기능을 사용합니다. Acrobat Pro 사용자는 Adobe의 Sanitize 안내에 따라 사본을 검사합니다.[1]
- 결과 사본을 다시 엽니다. 페이지 수, 검색 가능한 텍스트, 링크, 양식, 서명이 필요한 목적에 맞게 유지됐는지 확인합니다.
- 메타데이터를 재검사합니다. 삭제 버튼을 눌렀다는 사실보다 저장된 결과 파일에서 값이 비었는지가 중요합니다.
from pathlib import Path
from pypdf import PdfReader
path = Path("upload-copy.pdf")
reader = PdfReader(path)
print("일반 메타데이터:", dict(reader.metadata or {}))
print("XMP 있음:", reader.xmp_metadata is not None)
if reader.xmp_metadata is not None:
print("XMP 작성자:", list(reader.xmp_metadata.dc_creator or []))
이 코드는 작성자 필드 확인용입니다. 주석, 첨부파일, 가려진 텍스트, 레이어, 양식 데이터까지 안전하다고 판정하는 도구는 아닙니다. PDF의 글자가 비거나 깨지는 문제까지 함께 나타난다면 PDF 텍스트 층과 스캔 이미지 여부를 구분하는 방법도 확인하세요.
실패하기 쉬운 접근
- 파일 탐색기 속성만 보고 끝내기: 운영체제 화면에 안 보이는 XMP가 남을 수 있습니다.
- 일반 Author만 빈칸으로 만들기: XMP 작성자는 별개입니다.
- XMP 참조가 없다는 결과만 믿기: 이번 합성 시험에서는 읽기 결과가 비어도 원래 문자열이 파일 바이트에 남았습니다.
- 메모장 검색만으로 안전 판정하기: 문자열이 압축되거나 인코딩되면 검색되지 않을 수 있습니다.
- 원본을 덮어쓰기: 전자서명, 북마크, 양식, 접근성 태그가 깨졌을 때 되돌리기 어렵습니다.
- 인쇄 후 PDF로 저장하면 모두 안전하다고 보기: 일부 숨은 요소는 사라질 수 있지만 품질, 링크, 검색 가능한 텍스트가 손상될 수 있고 모든 민감정보 제거를 보장하지 않습니다.
복사해서 쓰는 검증 체크리스트
- [ ] 원본과 업로드용 사본을 분리했다.
- [ ] 일반 작성자·제목·주제·키워드를 확인했다.
- [ ] XMP 존재 여부와 XMP 작성자를 따로 확인했다.
- [ ] 주석·첨부·양식·레이어·가려진 내용을 검사했다.
- [ ] 결과 PDF를 닫았다가 다시 열어 페이지와 텍스트를 확인했다.
- [ ] 전자서명이나 인증 상태가 필요한 문서는 변환하지 않았다.
- [ ] 회사의 외부 AI 사용 규정과 문서 등급을 확인했다.
- [ ] 꼭 필요한 페이지만 남기고 불필요한 내용을 제거했다.
- [ ] 업로드 뒤 보관 기간과 삭제 방법을 확인했다.
보안과 한계
메타데이터가 비었다고 PDF 전체가 익명화된 것은 아닙니다. 본문에 적힌 이름, 이미지 속 얼굴이나 서명, 주석, 첨부파일, 양식 값, 링크 주소에도 개인정보가 남을 수 있습니다. 이름을 검은 사각형으로 덮는 것만으로는 원문이 실제 삭제되지 않을 수 있으므로, 민감한 문서는 정식 가리기와 문서 정리 기능을 함께 검토해야 합니다.
이번 직접 검증은 빈 페이지 한 장짜리 합성 PDF에서 수행했습니다. 페이지를 새 문서로 옮기는 방식은 단순 파일에서는 메타데이터를 제외했지만, 복잡한 PDF의 북마크·태그·대화형 요소·전자서명을 보존한다고 확인하지 못했습니다. 중요한 문서는 도구가 성공 메시지를 보여도 결과 사본을 독립적으로 재검사하세요.
결론: 어떤 방법이 맞나
일반적인 개인 문서라면 원본을 보존하고 일반 메타데이터와 XMP를 각각 확인한 뒤 결과 사본을 다시 여는 순서가 기본입니다. 회사 문서나 계약서처럼 민감도가 높다면 몇 개 필드를 수동으로 비우는 방식에 기대지 말고, 승인된 PDF 정리 도구와 회사 보안 절차를 사용하세요. PDF 구조를 잘 모르는 사용자는 Python으로 직접 삭제하기보다 읽기 전용 검사 코드로 남은 항목을 확인하는 용도로만 쓰는 편이 안전합니다.