이 글은 Microsoft Word의 DOC(.doc) 을 대상으로, 문서가 내부적으로 어떻게 저장되고 파싱되는지를 단계적으로 설명합니다. OLE2 기반 파일 구조를 바탕으로 WordDocument, Table, Data Stream의 역할을 살펴보고, 문서 해석의 핵심인 FIB(File Information Block) 를 중심으로 데이터 위치와 크기를 추적하는 방식을 다룹니다. 또한 CP 개념과 PLC·STTB·RG 등 주요 데이터 집합 구조를 통해 텍스트와 속성이 어떻게 매핑되는지 설명하며, MS-DOC 공식 명세을 활용해 필요한 데이터명을 찾고 구조를 해석하는 방법을 소개합니다. 마지막으로 Clx 예제를 통해 실제 바이너리 데이터 읽기와 파싱 과정(C++ 코드) 을 구체적으로 보여주며, DOC 포맷 내부 구조를 이해하고 문서 데이터를 직접 해석하는 기초를 제시합니다. ||
요약
이 글은 Microsoft Word의 DOC(.doc) 을 대상으로, 문서가 내부적으로 어떻게 저장되고 파싱되는지를 단계적으로 설명합니다. OLE2 기반 파일 구조를 바탕으로 WordDocument, Table, Data Stream의 역할을 살펴보고, 문서 해석의 핵심인 FIB(File Information Block) 를 중심으로 데이터 위치와 크기를 추적하는 방식을 다룹니다. 또한 CP 개념과 PLC·STTB·RG 등 주요 데이터 집합 구조를 통해 텍스트와 속성이 어떻게 매핑되는지 설명하며, MS-DOC 공식 명세을 활용해 필요한 데이터명을 찾고 구조를 해석하는 방법을 소개합니다. 마지막으로 Clx 예제를 통해 실제 바이너리 데이터 읽기와 파싱 과정(C++ 코드) 을 구체적으로 보여주며, DOC 포맷 내부 구조를 이해하고 문서 데이터를 직접 해석하는 기초를 제시합니다.
서론
안녕하세요, 한글과컴퓨터에서 한워드를 개발하고 있는 유영입니다.
이번 글은 비전공자분들도 쉽게 DOC(.doc) 포맷의 구조를 이해하고, 더 나아가 파싱 방법까지 접해보실 수 있도록 정보를 드리기 위해 작성했습니다.
워드로 문서 작업을 자주 하는 분들이라면 .docx와 .doc라는 확장자가 매우 익숙하실 텐데요. 최근에는 대부분의 문서가 기본으로 .docx 확장자로 저장되다 보니, 두 형식이 정확히 어떻게 다른지 모른 채 프로그램이 저장해 주는 대로 사용하는 경우가 많습니다.
파일 형식 드롭다운
파일 형식 드롭다운을 내려 살펴보면, .doc 옆에 (97~2003)이라는 숫자가 붙어있는 것을 볼 수 있습니다. 아래에서 다시 설명하겠지만, 이는 DOC가 1997년부터 2003년 사이에 사용된 과거의 포맷임을 의미합니다.
그렇다면, 이제는 잘 사용되지 않는 옛 파일 형식을 굳이 공부해야 할까요?
당연히 저희는 DOC 포맷에 대해 공부해야 합니다. 여전히 기업이나 공공기관에는 오래 보존해야 하는 중요한 문서들이 많고, 그중 상당수가 여전히 .doc 형식으로 남아있기 때문입니다. 이것이 바로 우리가 DOC 포맷에 대해 끊임없이 연구하고 학습해야 하는 이유입니다.
DOC 포맷 소개
① DOC 포맷이란?
Word Binary File Format(.doc)는 워드 문서 처리를 위한 바이너리 형식의 파일 확장자입니다.
물론 .doc로 끝난다고 모두 같은 DOC 포맷은 아닙니다. 저희가 일반적으로 말하는 DOC 포맷은 MS Word 97 이후에 사용된 .doc 확장자로, [MS-DOC] 공식 명세를 따르고 있습니다. MS Word 97보다 더 이전에 나온 .doc 문서는 확장자만 같을 뿐 구조는 명세를 따르지 않았습니다.
Word 6.0 / 95.doc 확장자를 사용하지만, 매우 오래된 바이너리 포맷명세도 비공개되어 있으며 구조도 다름Word 97 ~ 2003우리가 일반적으로 말하는 DOC[MS-DOC] 공식 명세를 따름Word 2007 ~이후부터는 .docx 포맷을 사용
DOC 포맷이 DOCX 포맷으로 대체된 이유?
DOC 포맷은 바이너리 형식이기 때문에 .docx 확장자처럼 xml 파일로 확인할 수 없습니다.
xml 파일이 묶인 zip 형