오픈 패키징 컨벤션스

"오늘의AI위키"는 AI 기술로 일관성 있고 체계적인 최신 지식을 제공하는 혁신 플랫폼입니다.
"오늘의AI위키"의 AI를 통해 더욱 풍부하고 폭넓은 지식 경험을 누리세요.

1. 개요

오픈 패키징 컨벤션스(OPC)는 Office Open XML 표준의 일부로, ZIP 파일 형식을 기반으로 하는 파일 형식의 컨테이너 구조를 정의한다. OPC는 XML Paper Specification(XPS) 및 Office Open XML(OOXML)과 같은 다양한 파일 형식에서 사용되며, 3D 제조 형식(3MF), DWFX, .appx 등 여러 파일 형식을 지원한다. OPC는 ZIP 아카이브 내에서 바이너리 및 XML 파일의 위치 독립성을 위해 명명 규칙과 간접 참조 방식을 정의하며, 패키지, 파트, 관계, 청킹, 상대 간접 참조 등의 개념을 사용한다. OPC는 .NET Framework 및 Windows API를 통해 프로그래밍적으로 지원되며, 파일 손상을 줄이고 데이터 접근성을 향상시키기 위해 문서를 작은 덩어리로 나누는 청킹 방식을 사용한다.

오픈 패키징 컨벤션스 - [IT 관련 정보]에 관한 문서
📚 더 읽어볼만한 페이지
  • 오피스 오픈 XML - 벡터 마크업 언어
    벡터 마크업 언어(VML)는 XML 기반의 2차원 벡터 그래픽을 표현하기 위한 마크업 언어였으나, SVG 등의 대체 형식 등장과 인터넷 익스플로러 지원 중단으로 현재는 사용이 제한적이다.
  • 오피스 오픈 XML - 씽크프리 오피스
    씽크프리 오피스는 온프레미스 방식의 보안성이 뛰어난 오피스 소프트웨어로, 웹 브라우저 기반 문서 편집 및 협업 기능을 제공하며, 마이크로소프트 오피스와 호환되고, 2000년에 출시되어 한글과컴퓨터에 인수된 후 글로벌 시장으로 확장되었으며, 2023년 10월 씽크프리 사업부가 분사되었다.
  • 마이크로소프트 이니셔티브 - 차세대 보안 컴퓨팅 기반
    차세대 보안 컴퓨팅 기반(NGSCB)은 마이크로소프트가 설계한 하드웨어 및 소프트웨어 보안 아키텍처로, 개인 정보 보호, 보안 강화, 디지털 권리 관리를 목표로 커튼 메모리, 신뢰 플랫폼 모듈(TPM), Nexus 보안 커널을 활용하는 특징을 가지나, 다양한 비판에 직면하여 윈도우 비스타의 BitLocker 드라이브 암호화 기능으로 일부 축소 구현되었다.
  • 마이크로소프트 이니셔티브 - 마이크로소프트 이매진
    마이크로소프트 이매진은 학생들에게 마이크로소프트의 개발 도구, 소프트웨어, 클라우드 서비스 및 학습 자료를 제공하는 프로그램으로, 원래 드림스파크라는 이름으로 시작되었으며 학생 인증을 통해 무료로 이용 가능하다.
  • Ecma 표준 - ISO/IEC 646
    ISO/IEC 646는 ASCII 기반의 7비트 문자 인코딩 표준으로, 국가별 변형이 존재했으나, 최종 개정판은 ASCII와 호환되도록 정의되었고, 현재는 ITU-T 권고 T.50 IRA가 현행 표준으로 유지되고 있다.
  • Ecma 표준 - 유니버설 미디어 디스크
    유니버설 미디어 디스크(UMD)는 소니 PSP에 사용된 60mm 광 디스크로, 게임, 영상, 음악 콘텐츠를 최대 1.8GB까지 저장하며, DVD와 유사한 지역 코드와 AES 128 비트 암호화를 사용했지만, PSP 외 다른 기기에서 사용 불가 및 디지털 미디어의 발달로 인해 2010년대 초반에 지원이 중단되었다.

2. 사양

OPC는 오피스 오픈 XML 표준 ISO/IEC 29500:2008ECMA-376의 파트 2에 명시되어 있다.

ISO/IEC 29500-2:2008 사양과 ECMA-376 제2판은 PKWARE, Inc.의 .ZIP 파일 형식 사양 버전 6.2.0(2004)을 규범적으로 참조하며, 일련의 규범적 설명을 추가한다. 이전의 ECMA-376 제1판에서는 PKWARE Inc의 ".ZIP 파일 형식 사양" 버전 6.2.1(2005)을 정보 제공용(즉, 규범적이지 않음)으로 참조했다. ZIP 형식 자체는 국제 표준으로 지정되지는 않았지만, 커뮤니티와 개발자들 사이에서 널리 받아들여지고 사용되고 있다.

마이크로소프트는 2006년에 OPC 기반 패키지에 대한 URI 참조에 사용할 "pack" URI 체계(pack://)에 대한 초안을 인터넷 엔지니어링 태스크 포스에 제출했다. 그러나 이 초안은 2009년에 만료되었으며, 지정된 구문은 URI 체계에 대한 인터넷 표준 (STD 66, RFC 3986)과 호환되지 않는다. 현재 이 체계는 역사적인 것으로 분류된다.

ISO 19165:1-2018은 오픈 아카이브 정보 시스템(OAIS)에 정의된 지리공간 패키지를 구현하기 위해 오픈 패키징 컨벤션(OPC)을 사용할 것을 권장한다.

3. 사용

오픈 패키징 컨벤션스(OPC)는 XML Paper Specification(XPS)와 Office Open XML(OOXML)과 같은 여러 파일 형식에서 공통된 ZIP 형식의 프로파일을 제공하기 위해 사용된다. OPC는 ISO/IEC 29500:2008 및 ECMA-376의 파트 2에 명시되어 있으며, 이는 PKWARE의 .ZIP 파일 형식 사양 버전 6.2.0(2004)을 규범적으로 참조한다.

OPC 기반의 ZIP 패키지 안에는 XML 마크업으로 된 데이터나 문서 콘텐츠 외에도 PNG, BMP, AVI, PDF, RTF 같은 다양한 형식의 텍스트 및 바이너리 파일, 심지어 이미 패키지된 ODF 파일까지 포함될 수 있다. OPC는 파일들이 ZIP 아카이브 내의 특정 위치에 의존하지 않도록 명명 규칙과 간접 참조 방식을 정의하여 파일 위치의 독립성을 보장한다.

OPC 파일은 일반적인 ZIP 압축 해제 유틸리티를 사용하여 내용을 확인할 수 있다. 또한, OPC는 파일 내용을 여러 부분으로 나누어 저장하는 청킹(Chunking)과 상대 간접 참조(Relative indirection) 기능을 지원한다.

2006년 마이크로소프트는 OPC 기반 패키지에 대한 URI 참조를 위해 'pack://' URI 체계를 인터넷 엔지니어링 태스크 포스에 제안했으나, 이 초안은 2009년에 만료되었고 현재는 역사적인 기록으로 남아있다. 한편, ISO 19165:1-2018 표준은 개방형 아카이브 정보 시스템(OAIS)에서 정의하는 지리공간 정보 패키지를 구현하는 데 OPC를 사용할 것을 권장하고 있다.

3.1. OPC를 사용하는 파일 형식

OPC는 다수의 새로운 파일 형식의 기반 기술이 되었다:

👆
좌우로 밀어서 보기
파일 형식파일 확장자내용표준
3MF 컨소시엄 3차원 제조 형식(3MF) 파일 형식.3mfCAD 설계 데이터, 적층 제조(3D 프린팅)용
오토데스크 오토캐드 디자인 웹 형식(DWFX) 파일 형식.dwfxCAD 설계 데이터(2D/3D 컴퓨터 그래픽 및 기술 도면)
AutomationML 컨테이너 형식.amlx플랜트 엔지니어링 정보
회로도 문서.cddx레이아웃, 연결 및 포함된 구성 요소를 포함하는 회로도
Family.Show 파일 형식.familyx가계 데이터, 이야기 및 사진
필드 장치 통합 FDI 패키지.fdix필드 장치 통합 정보IEC 62769-4:2015
마이크로소프트 응용 프로그램 가상화 파일 형식.appv이식 가능한 응용 프로그램
마이크로소프트 파워 BI 보고서 파일 형식.pbix데이터 및 정보 시각화 보고서 파일
마이크로소프트 파워 BI 템플릿 파일 형식.pbit데이터 및 정보 시각화 템플릿 파일
마이크로소프트 셈블리오 파일 형식.semblio이미지, 오디오 및 비디오를 포함하는 전자책과 같은 대화형 학습 자료
마이크로소프트 비주얼 스튜디오 2010+ 확장 파일 형식.vsix통합 개발 환경 확장
마이크로소프트 비지오 2013 드로잉 파일 형식.vsdx이전 버전에서 사용된 .vsd(Visio 바이너리 파일) 및 .vdx(Visio XML 드로잉) 형식을 대체
마이크로소프트 윈도우 8, 윈도우 8.1윈도우 폰 8.1 앱 패키지.appx마이크로소프트의 윈도우 스토어 및 윈도우 폰 스토어에 나열된 응용 프로그램의 소프트웨어 패키지
마이크로소프트 윈도우 8.1윈도우 폰 8.1 앱 번들.appxbundle마이크로소프트의 윈도우 스토어 및 윈도우 폰 스토어에 나열된 응용 프로그램의 하드웨어 플랫폼, 언어 및 리소스를 번들로 묶는 소프트웨어 패키지
마이크로소프트 윈도우 애저 C# 패키지.cspkg클라우드 플랫폼 데이터
마이크로소프트 XML 종이 사양.xps문서 교환을 위한 고정 문서
MiraMon 압축된 맵 열기.mmzx지리 정보(지리 공간 래스터 그래픽, 벡터 그래픽 및 표 형식 데이터, 기호화 및 메타데이터 파일, 지리 서비스에 대한 링크 등)ISO 19165-1:2018
NuGet 패키지.nupkg패키지 관리 시스템용 소프트웨어 패키지
Office Open XML 문서.docx워드 프로세싱 문서ECMA-376, ISO/IEC 29500:2008
Office Open XML 프레젠테이션.pptx프레젠테이션 파일ECMA-376, ISO/IEC 29500:2008
Office Open XML 통합 문서.xlsx스프레드시트 통합 문서ECMA-376, ISO/IEC 29500:2008
Open XML 종이 사양.oxps문서 교환을 위한 고정 문서ECMA-388
플랫폼 Industrie 4.0 - 관리 자산 셸.aasx관리 자산 셸(AAS)용 패키지 파일 형식
지멘스 디지털 인더스트리 소프트웨어 파일 형식.jtx
MathWorks 시뮬링크 모델 파일.slx모델 기반 설계를 위한 동적 시스템 사양
SMPTE 미디어 패키지.smpk멀티미디어 비디오 및 오디오 파일의 배포 및 재생을 위한 저장 형식SMPTE ST 2053-2011
SpaceClaim 3D 솔리드 모델 파일.scdoc포함된 3D CAD 데이터 파일에는 표준 ACIS 바이너리(SAB) 솔리드 모델 파일이 포함됩니다.
마이크로소프트 XAML 패키지사양이 아닙니다. 이미지가 있는 WPF FlowDocument를 저장하기 위해 .NET Framework에서만 지원하는 기능

4. 프로그래밍

OPC는 마이크로소프트 .NET Framework 3.0에서 System.IO.Packaging 네임스페이스를 통해 기본적으로 지원된다. 다른 언어를 위한 오픈 소스 라이브러리도 존재한다.

윈도우 7부터는 윈도우 API에서도 COM 인터페이스를 통해 기본적으로 지원되며, 이는 통칭하여 [https://msdn.microsoft.com/en-us/library/windows/desktop/dd371623.aspx 패키징 API]라고 불린다.

또는 ZIP 라이브러리를 사용하여 OPC 파일을 만들고 열 수도 있다. 다만, 이 경우에는 ZIP 파일 내에 올바른 파일들이 포함되어 있고 관련 명명 규칙이 준수되어야 한다.

5. 패키지, 파트 및 관계

--
OPC 용어에서 패키지ZIP 아카이브에 해당하며, 파트는 ZIP 아카이브 내에 저장된 개별 파일을 의미한다. 패키지 안의 모든 파트는 고유한 URI 형식의 파트 이름을 가지며, MIME 미디어 타입 형식으로 표현된 콘텐츠 유형을 지정받는다. 이 콘텐츠 유형은 파트에 저장된 데이터의 종류를 명확히 정의하여, 파일 확장자만으로는 발생할 수 있는 중복이나 모호함 문제를 줄여준다.

OPC 패키지는 패키지 자체, 패키지 내의 파트, 그리고 외부 리소스 간의 연관 관계를 정의하는 관계를 포함할 수 있다. 단순히 디렉토리와 파일 계층 구조를 사용하는 것 외에도, OPC 패키지는 일반적으로 이러한 관계들의 방향 그래프를 통해 콘텐츠에 접근한다. 관계는 다음 네 가지 요소로 구성된다.

* 식별자 (ID): 관계를 고유하게 식별하는 문자열이다.
* 소스 (Source): 관계의 시작점을 나타내며, 패키지 전체이거나 패키지 내의 특정 파트일 수 있다. (선택 사항)
* 관계 유형 (Type): 관계의 성격을 정의하는 URI 형식의 표현이다. 예를 들어, 문서의 메인 콘텐츠, 썸네일 이미지, 메타데이터 등을 나타내는 유형이 있을 수 있다.
* 대상 (Target): 관계가 가리키는 목적지로, 패키지 내의 다른 파트이거나 외부 리소스(URI)일 수 있다.

5.1. 예약된 이름

OPC 패키지 내에서는 특정 파일 이름, 폴더 이름, 확장자가 특별한 용도로 예약되어 있다. 이들은 패키지의 구조와 내용을 정의하는 데 필수적인 역할을 수행한다. 예약된 이름은 다음과 같다.

* `[Content_Types].xml`: 패키지 루트 디렉토리에 위치해야 하는 파일 이름이다. 이 파일은 패키지 안에 포함된 모든 파트(개별 파일)의 MIME 미디어 타입을 정의한다. 파일 확장자에 따른 기본 타입을 지정하고, 필요시 특정 파트에 대해 타입을 재정의하는 역할을 한다.
* `_rels`: 폴더 이름으로 예약되어 있다. 루트 레벨에 있는 `/_rels` 폴더는 패키지 전체의 관계 정보를 저장하며, 일반적으로 `/_rels/.rels` 파일을 포함한다. 또한, 개별 파트의 관계 정보는 해당 파트와 같은 계층에 있는 `_rels` 폴더 안에 저장된다.
* `.rels`: 파일 확장자로 예약되어 있으며, 관계 정보를 담고 있는 XML 파일을 나타낸다. 예를 들어, 루트 관계 파일은 `/_rels/.rels`이고, 특정 파트(예: `word/document.xml`)의 관계 파일은 해당 파트와 같은 위치의 `_rels` 폴더 안에 `word/_rels/document.xml.rels`와 같은 이름으로 존재한다.

이 세 가지 이름(`[Content_Types].xml`, `_rels`, `.rels`)은 OPC 패키지에서 특별한 의미를 가지므로, 사용자가 임의로 파일이나 폴더를 생성할 때 이 이름들을 사용해서는 안 된다.

5.2. /[Content_Types].xml 파일

파일명 "[Content_Types].xml"은 OPC 패키지 내에서 예약된 이름 중 하나로, 패키지에 포함된 모든 파트(part)의 인터넷 미디어 타입을 정의하는 역할을 한다. 이 파일은 파일 확장자를 기반으로 콘텐츠 유형을 기본적으로 지정하며, 필요한 경우 특정 파트에 대해 이 기본값을 재정의(override)하는 기능도 제공한다.

예를 들어, 미리 정의된 인터넷 미디어 타입 중 하나의 기본 할당은 다음과 같이 표현될 수 있다.


5.3. /_rels

루트 레벨의 `/_rels` 폴더는 패키지 전체의 관계 정보를 저장하는 특별한 폴더이다. 이 폴더 이름 `_rels`는 OPC 규격에서 예약된 이름 중 하나이다.

`/_rels` 폴더 안에는 일반적으로 `.rels`라는 확장자를 가진 파일이 포함되는데, 특히 `/_rels/.rels` 파일은 매우 중요하다. 이 파일은 패키지를 처음 열 때 필요한 패키지 수준 관계(package-level relationships) 정보를 담고 있는 XML 파일이다. 애플리케이션이 OPC 형식의 파일을 열면, 가장 먼저 이 `/_rels/.rels` 파일에 접근하여 패키지의 기본적인 구조나 시작 파트 등에 대한 관계 정보를 읽어들인다.

`.rels` 확장자 역시 OPC에서 관계 메타데이터를 저장하기 위해 예약된 확장자이다. 따라서 `/_rels` 폴더와 그 안의 `.rels` 파일은 OPC 패키지의 핵심적인 구조를 이해하고 내용을 탐색하는 데 필수적인 역할을 한다.

5.4. ''[파트 이름]''.rels

각 파트는 자체적인 관계를 가질 수 있다. _rels 폴더는 주어진 패키지 내의 특정 파트에 대한 관계를 저장하는 곳이다. 특정 파트의 관계를 찾으려면, 해당 파트와 같은 위치(계층)에 있는 _rels 폴더 안을 확인한다. 만약 파트가 관계를 가지고 있다면, 이 _rels 폴더 안에는 원래 파트 이름 뒤에 .rels 확장자가 붙은 파일이 존재한다. 예를 들어, [Content_Types].xml 파일에 관계가 있다면, /_rels 폴더 안에 [Content_Types].xml.rels 라는 이름의 파일이 존재하게 된다.

6. 청킹

문서를 작은 덩어리(chunk)로 나누는 것을 권장한다. 이는 파일 손상의 영향을 줄이는 데 더 효과적이며, 데이터 접근성을 향상시키는 데에도 도움이 된다.

예를 들어, 모든 스타일 정보를 하나의 XML 파트(부분)에 저장하고, 각 워크시트를 별도의 파트로 분리할 수 있다. 이렇게 하면 문서를 사용하는 클라이언트(애플리케이션)가 필요한 정보에 더 빠르게 접근할 수 있고, 불필요한 객체 생성을 줄일 수 있다. 또한, 여러 프로세스가 동시에 같은 문서에서 작업하는 것을 더 용이하게 만든다.

오픈 패키징 컨벤션스(OPC)는 이러한 청킹 기능을 지원하며, XML Paper Specification(XPS)나 Office Open XML(OOXML)과 같은 파일 형식에서 사용된다.

7. 상대 간접 참조

오픈 패키징 컨벤션스(OPC)에서는 참조를 가진 각 파일이 간접 참조 목록을 포함하는 고유의 _rels 파일을 가진다. 이는 관련된 모든 리소스를 포함한 정보를 쉽게 잘라내어 붙여넣을 수 있게 하고, 파일 간의 이름 충돌 가능성을 제거하는 이름 범위를 제공하는 등의 장점이 있다.