맨위로가기

리소스 포크

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

1. 개요

리소스 포크는 클래식 Mac OS의 파일 시스템에서 구현되어 메모리 사용량 절감, 국제화 및 현지화, 애플리케이션 설치 및 제거 단순화 등을 위해 사용되었다. 각 리소스는 OSType 식별자, ID, 선택적인 이름을 가지며, 대화 상자, 이미지, 소리, 실행 파일 바이너리 등 표준화된 리소스 유형이 존재한다. 리소스 포크는 리소스 데이터의 배치를 기록하는 "리소스 맵"을 통해 임의 접근을 용이하게 한다.

인터넷 사용이 보편화되면서 다른 운영 체제와의 파일 공유가 중요해짐에 따라 macOS에서는 리소스 포크 사용을 자제하고, 번들 방식을 통해 리소스 포크에 해당하는 데이터를 데이터 포크 측에 저장하는 방식으로 대체되었다. 리소스 포크는 AFP, SMB, NFS, FTP와 같은 파일 공유 프로토콜을 통해 다른 파일 시스템에 접근하거나 파일을 전송할 때 호환성 문제를 야기할 수 있으며, AppleDouble 형식을 사용하여 이러한 문제를 해결한다.

더 읽어볼만한 페이지

  • 맥 OS - 맥 OS X 서버 1.0
    맥 OS X 서버 1.0은 애플이 1999년에 출시한 서버 운영 체제로, 클래식 맥 OS와 넥스트스텝 기술을 결합하여 넷부트 서버, 아파치 웹 서버, 퀵타임 스트리밍 서버 등의 기능을 제공했지만, 높은 가격과 일부 단점으로 인해 빠르게 단종되었다.
  • 맥 OS - 시스템 7
    시스템 7은 1991년 애플이 출시한 매킨토시 운영 체제의 주요 업그레이드 버전으로, 싱글 태스킹 한계를 극복하고 개인 파일 공유, 별칭, 드래그 앤 드롭 등 다양한 기능을 제공하며 PowerPC 기반 컴퓨터를 지원한다.
리소스 포크
기본 정보
언어별 명칭
영어Resource fork
일본어リソースフォーク (Risōsu fōku)
한국어리소스 포크
개요
정의파일 시스템에서 파일 데이터를 저장하는 방법 중 하나이다.
macOS에서 주로 사용되며, 파일의 메타데이터나 리소스를 별도의 영역에 저장한다.
역사매킨토시 운영체제 초기에 도입되었다.
데이터 포크와 함께 파일 시스템의 핵심적인 부분이었다.
기술적 내용
구성 요소데이터 포크: 실제 파일 데이터를 저장하는 영역이다.
리소스 포크: 아이콘, 메뉴, 창 정의 등 메타데이터와 리소스를 저장하는 영역이다.
작동 방식파일 시스템은 파일을 데이터 포크와 리소스 포크로 나누어 관리한다.
운영체제는 필요에 따라 각 포크에 접근하여 데이터를 읽거나 쓴다.
장점메타데이터와 실제 데이터를 분리하여 관리하기 용이하다.
파일의 아이콘이나 속성 정보를 쉽게 변경할 수 있다.
단점다른 운영체제와의 호환성이 떨어진다.
파일 시스템 구조가 복잡해질 수 있다.
활용
macOSmacOS에서 실행 파일, 이미지, 사운드 파일 등의 메타데이터를 저장하는 데 사용된다.
파일의 아이콘, 창 정보, 지역화된 문자열 등을 저장하는 데 활용된다.
기타일부 고전 맥 OS 응용 프로그램에서 데이터와 코드를 분리하는 데 사용되었다.
현재는 사용이 줄어들고 있지만, 여전히 일부 파일 시스템에서 사용된다.
호환성 문제
다른 운영체제윈도우, 리눅스 등의 운영체제에서는 리소스 포크를 지원하지 않는다.
리소스 포크가 포함된 파일을 다른 운영체제로 옮길 경우, 메타데이터가 손실될 수 있다.
해결 방법파일 압축: 리소스 포크를 데이터 포크에 병합하여 압축하면 다른 운영체제에서도 파일을 온전히 보존할 수 있다.
메타데이터 분리: 메타데이터를 별도의 파일로 저장하여 함께 옮기는 방법을 사용할 수 있다.
참고 자료
관련 문서데이터 포크
파일 시스템
macOS

2. 역사적 배경

리소스 포크는 클래식 Mac OS의 파일 시스템인 MFS, HFS, HFS Plus 및 macOS의 APFS에서 구현되었다. 리소스 포크는 메모리 사용량 절감, 국제화 및 현지화 지원, 애플리케이션 설치/제거 단순화 등의 목적으로 사용되었다.[2]

마이크로소프트 윈도우에도 "리소스"라는 개념이 있지만, Mac OS의 리소스와는 관련이 없다. 일부 파일에는 리소스 포크만 존재하기도 하는데, 클래식 Mac OS의 글꼴 파일이나 실행 코드 자체가 'CODE' 유형의 리소스에 포함된 클래식 68k 응용 프로그램이 그 예시이다. 이후 PowerPC 바이너리는 실행 코드를 데이터 포크에 저장했다.

리소스 포크는 매킨토시 파일 시스템에서만 지원되었기 때문에 다른 운영 체제의 파일 시스템으로는 복사할 수 없었다. 따라서 시스템 간 전송을 위해 리소스와 데이터 포크를 하나의 파일로 인코딩하는 BinHex, MacBinary 형식이 사용되었다. A/UX는 AppleSingle 및 AppleDouble 형식을 통해 유닉스 파일 시스템에서 리소스 포크를 지원했다. Mac OS X Tiger부터 AppleDouble은 Windows SMB 공유 및 FAT32 볼륨과 같은 파일 시스템에 리소스 포크를 저장하는 데 사용되었다. HFS Plus 파일 시스템에서는 데이터 및 리소스 포크 외에 다른 포크를 허용하는 설정도 가능했다.

2002년 8월 7일, 애플은 개발자가 Mac OS X에서 Mach-O 바이너리의 리소스 포크에 리소스를 구축하지 않도록 권장했다.[3]

HFS나 HFS+는 리소스 포크를 지원하는 파일 시스템이고, AFP는 리소스 포크를 지원하는 파일 공유 프로토콜이다. 이러한 파일 시스템이나 파일 공유 프로토콜은 현재 Classic Mac OS만 지원하고 있기 때문에, 사실상 Classic Mac OS만의 기능이 되었다. Classic Mac OS는 UFS 파일 시스템에 설치하여 사용할 수도 있는데, 이 경우 리소스 포크를 실제 데이터와는 다른 파일로 분리하여 관리한다.

현재 macOS에서 가장 많이 사용되는 HFS+에서는 데이터 포크와 리소스 포크 이외의 포크도 다룰 수 있도록 설계되어 있으며(멀티 포크), macOS(v10.3 이후)에서는 멀티 포크 기능을 이용하여 파일에 확장 속성을 추가하거나, 접근 제어 목록에 의한 보안 기능을 제공한다.

Windows NT 이후 채택된 파일 시스템인 NTFS에서는, 대체 데이터 스트림을 사용할 수 있으므로, 이것을 이용하여 리소스 포크를 저장할 수 있다. SFM(Service for Macintosh)을 사용하여 Classic Mac OS에서 Windows로 파일을 전송하는 경우, 이것이 사용된다.

리소스 포크는 파일 본체와는 별개의 정보이므로, 다른 OS로 전송하거나 HFS나 HFS+ 이외의 파일 시스템에 저장하는 경우에는 처리가 필요했다. 리소스 포크를 사용하는 오래된 클래식 애플리케이션을 배포하거나, 썸네일 아이콘이 붙은 이미지를 전송하기 위해서는 MacBinary, BinHex, AppleSingle, AppleDouble과 같은 형식을 사용해야 했다.

실제로는 아카이브 파일로 묶거나, 디스크 이미지로 배포하는 방법이 널리 사용되었다. 이러한 방법에서는 여러 파일을 하나로 묶을 수 있으며, 에일리어스도 처리할 수 있었다. 더욱이 데이터 압축도 가능했다. 압축 아카이브로는 Compact Pro나 StuffIt이 이용되었다. MacLHA에서는 MacBinary로 만든 다음 LHA 아카이브에 격납하는 수법이 취해졌다. 디스크 이미지로는 IMG 형식이 이용되었다.

현재의 macOS에서는, 애플이 zip 형식이나 tar 형식을 확장하여 리소스 포크나 그 외의 메타데이터를 저장할 수 있도록 하고 있다. 이것은 AppleDouble 형식을 사용하여 데이터 포크(AppleDouble Data file)와 그 외의 메타데이터(AppleDouble Header file)로 나누어 아카이브에 격납하는 방식이다. 또한, DMG라는 새로운 디스크 이미지도 채용하고 있다.

인터넷 보편화와 다른 운영 체제와의 파일 공유 필요성이 증가하면서 리소스 포크 사용은 점차 줄어들었다. macOS에서는 번들, 확장 파일 속성 등 다른 기술이 리소스 포크를 대체하고 있다.

2. 1. 매킨토시 파일 시스템

리소스 포크는 클래식 Mac OS의 파일 시스템인 MFS, HFS, HFS Plus 및 macOS의 APFS에서 구현되었다. 리소스 포크는 다음 세 가지 목적으로 사용되었다.

  • 메모리 사용량 절감: 필요한 시점까지 모든 그래픽 데이터를 디스크에 저장하여 가상 메모리처럼 사용함으로써 메모리 요구량을 줄였다.
  • 국제화 및 현지화 지원: 그림과 텍스트를 리소스 포크에 별도로 저장하여 프로그래머가 아니더라도 쉽게 현지화할 수 있도록 했다.
  • 애플리케이션 설치/제거 단순화: 응용 프로그램의 거의 모든 구성 요소를 단일 파일로 배포하여 설치 및 제거를 쉽게 했다.


리소스 포크는 데이터베이스에서 구조화된 레코드를 추출하는 방식과 유사하게 작동한다. ( 마이크로소프트 윈도우에도 "리소스"라는 개념이 있지만, Mac OS의 리소스와는 관련이 없다.)

일부 파일에는 리소스 포크만 존재하기도 한다. 예를 들어 클래식 Mac OS의 글꼴 파일이나, 실행 코드조차 'CODE' 유형의 리소스에 포함된 클래식 68k 응용 프로그램이 이에 해당한다. 이후 PowerPC 바이너리는 실행 코드를 데이터 포크에 저장했다.

리소스 포크는 매킨토시 파일 시스템에서만 지원되었기 때문에 다른 운영 체제의 파일 시스템으로는 복사할 수 없었다. 따라서 시스템 간 전송을 위해 리소스와 데이터 포크를 하나의 파일로 인코딩하는 BinHex, MacBinary 형식이 사용되었다. A/UX는 AppleSingle 및 AppleDouble 형식을 통해 유닉스 파일 시스템에서 리소스 포크를 지원했다. Mac OS X Tiger부터 AppleDouble은 Windows SMB 공유 및 FAT32 볼륨과 같은 파일 시스템에 리소스 포크를 저장하는 데 사용되었다.

HFS Plus 파일 시스템에서는 데이터 및 리소스 포크 외에 다른 포크를 허용하는 설정도 가능했다.[2]

2002년 8월 7일, 애플은 개발자가 Mac OS X에서 Mach-O 바이너리의 리소스 포크에 리소스를 구축하지 않도록 권장했다.[3]

리소스 포크는 HFS나 HFS+라고 불리는 파일 시스템과 AFP라고 불리는 파일 공유 프로토콜만 지원했다. 이러한 파일 시스템이나 파일 공유 프로토콜은 현재 Classic Mac OS만 지원하고 있기 때문에, 사실상 Classic Mac OS만의 기능이 되었다. 한편, Classic Mac OS는 UFS라고 불리는 파일 시스템에 설치하여 사용할 수도 있는데, 이 경우 리소스 포크를 실제 데이터와는 다른 파일로 분리하여 관리한다.

현재 macOS에서 가장 많이 사용되는 HFS+에서는 데이터 포크와 리소스 포크 이외의 포크도 다룰 수 있도록 설계되어 있으며(멀티 포크), macOS(v10.3 이후)에서는 멀티 포크 기능을 이용하여 파일에 확장 속성을 추가하거나, 접근 제어 목록에 의한 보안 기능이 제공된다.

Windows NT 이후에 채택된 파일 시스템인 NTFS에서는, 대체 데이터 스트림을 사용할 수 있으므로, 이것을 이용하여 리소스 포크를 저장할 수 있다. SFM(Service for Macintosh)을 사용하여 Classic Mac OS에서 Windows로 파일을 전송하는 경우, 이것이 사용된다.

리소스 포크는 파일 본체와는 별개의 정보이므로, 다른 OS로 전송하거나 HFS나 HFS+ 이외의 파일 시스템에 저장하는 경우에는 처리가 필요하다.

리소스 포크를 사용하고 있는 오래된 클래식 애플리케이션을 배포하거나, 썸네일 아이콘이 붙은 이미지를 전송하기 위해서는 MacBinary, BinHex, AppleSingle, AppleDouble과 같은 형식을 사용할 필요가 있다.

실제로는 아카이브 파일로 묶거나, 디스크 이미지로 배포하는 방법이 널리 사용되었다. 이러한 방법에서는 여러 파일을 하나로 묶을 수 있으며, 에일리어스도 처리할 수 있다. 더욱이 데이터의 압축이 가능하다는 이점도 있다.

압축 아카이브로는 Compact Pro나 StuffIt이 이용되었다. MacLHA에서는 MacBinary로 만든 다음 LHA 아카이브에 격납하는 수법이 취해졌다. 디스크 이미지로는 IMG 형식이 이용되었다.

현재의 macOS에서는, 애플사가 zip 형식이나 tar 형식을 확장하여 리소스 포크나 그 외의 메타데이터를 저장할 수 있도록 하고 있다. 이것은 AppleDouble 형식을 사용하여 데이터 포크(AppleDouble Data file)와 그 외의 메타데이터(AppleDouble Header file)로 나누어 아카이브에 격납하는 수법이다. 또한, DMG라고 불리는 새로운 디스크 이미지도 채용하고 있다.

2. 2. 리소스 포크의 쇠퇴

애플은 개발자들에게 Mac OS X에서 Mach-O 바이너리의 리소스 포크에 리소스를 구축하지 않도록 권장했다.[3] 인터넷 보편화와 다른 운영 체제와의 파일 공유 필요성이 증가하면서 리소스 포크 사용은 점차 줄어들었다. macOS에서는 번들, 확장 파일 속성 등 다른 기술이 리소스 포크를 대체하고 있다.

다른 운영 체제로 파일을 전송하거나 HFS나 HFS+ 이외의 파일 시스템에 저장할 때 리소스 포크는 별도로 처리해야 했다. 이를 위해 MacBinary, BinHex, AppleSingle 같은 형식이 사용되었다. 실제로는 Compact Pro나 StuffIt 같은 압축 아카이브나 디스크 이미지로 배포하는 방법이 널리 사용되었다.

현재 macOS는 zip이나 tar 형식을 확장하여 리소스 포크와 메타데이터를 저장할 수 있도록 하고 있다. 이는 AppleSingle 형식을 사용하여 데이터 포크와 메타데이터를 나누어 아카이브에 격납하는 방식이다. 또한, DMG라는 새로운 디스크 이미지도 사용된다.

인터넷 보편화로 인해 다른 운영 체제 사용자와 파일을 공유하는 일이 많아지면서, 리소스 포크는 문제를 일으키는 경우가 있었다. 이에 따라 macOS에서는 리소스 포크 사용을 자제하고, 번들과 같이 리소스를 데이터 포크 쪽에 저장하는 방식을 사용하게 되었다. 이는 파일 공유를 용이하게 하고, 리소스 포크가 없는 UNIX 소프트웨어 이식도 쉽게 만들었다.

3. 리소스 식별자

각 리소스는 OSType 식별자(4바이트 값), ID(부호 있는 16비트 워드), 선택적인 이름을 갖는다. 대화 상자 (DITL), 이미지(PICT), 소리(snd), 그리고 실행 파일 바이너리(CODE)에 대한 표준화된 리소스 유형이 있으며, PowerPC 프로세서가 등장하기 전까지는 예외 없이 리소스 포크에 저장되었다.

리소스 유형의 이름실제 이름
alisalias
ALRTalert
APPLapplication
BNDLbundle
cicncolor icon
clutcolor look-up table
CNTLcontrol
CODEcode resource
CURScursor
DITLdialog item list
DLOGdialog
FREFfile reference
hfdricon balloon help
icl88-bit icon list
icns32-bit icon list
ICONicon
kindfile description
MBARmenu bar
MDEFmenu definition
MENUmenu
MooVmovie
openopen
PICTpicture
PREFpreference
sndsound
STRstring
STR#string list
stylstyle
TEXTtext
TMPLtemplate
versversion
WDEFwindow definition
WINDwindow



윈도우 렌더링을 위한 서브루틴은 자체 리소스 유형(WDEF)에 저장되고, 메뉴 렌더링을 위한 서브루틴은 자체 리소스 유형(MDEF)에 저장된다. 이러한 배열을 통해 사용자는 ResEdit와 같은 도구를 사용하여 애플리케이션 파일 또는 시스템 파일의 리소스를 수정하여 개별 애플리케이션뿐만 아니라 운영 체제 자체도 쉽게 사용자 정의할 수 있었다.

애플리케이션 또는 다른 코드 내에서 리소스는 유형, ID, 또는 이름을 조합하여 리소스 포크에 저장되는 방식과 위치에 관계없이 간단하게 로드할 수 있다. 클라이언트는 로드된 리소스에 대한 핸들을 반환받아 다른 힙 기반 데이터처럼 액세스할 수 있다. 이를 용이하게 하는 OS 구성 요소는 리소스 관리자이다. 리소스 관리자는 데이터 저장 세부 정보를 데이터에서 추상화하는 것 외에도 열린 리소스 포크 집합을 스택으로 정렬하여 가장 최근에 열린 파일을 맨 위에 둔다. 리소스를 로드하려고 할 때, 스택의 맨 위(현재 문서의 리소스 포크일 수 있음)에서 먼저 찾은 다음, 그 아래(애플리케이션의 리소스 포크)에서 찾은 다음, 그 아래(시스템 리소스 포크)에서 찾는다. 이러한 배열은 매우 강력하며 로컬 리소스가 더 낮은 수준의 더 전역적인 리소스를 재정의할 수 있으므로 예를 들어 애플리케이션은 표준 시스템 리소스 대신 자체 아이콘이나 글꼴을 제공할 수 있다. 또한 애플리케이션은 다른 리소스와 동일한 API를 사용하여 시스템에서 리소스를 로드할 수 있으며, 해당 리소스가 저장되는 위치나 방식에 관계없이 애플리케이션에 모든 리소스가 동일하게 사용할 수 있고 사용하기 쉽다. 시스템은 이로 인해 발생하는 리소스 충돌을 방지하기 위해 특정 범위의 리소스 ID를 예약한다. 리소스 관리자 API를 통해 프로그래머는 스택을 조작하고 검색 동작을 수정할 수 있다.

4. 리소스 포크의 구조

리소스 포크는 '리소스 맵'이라는 데이터 조각을 포함하는데, 이는 리소스 데이터 항목의 위치를 저장한다. 이 맵은 정의된 ID와 이름을 기반으로 리소스 데이터에 대한 임의 접근을 가능하게 한다. 리소스 포크는 기본적으로 리소스 맵과 리소스 데이터 자체, 두 가지 요소로 구성되어 있지만, 실제로는 각 데이터 유형이 여러 개의 데이터 항목을 저장하는 계층적 구조이다. 리소스 데이터에 정보가 저장되는 형식은 '리소스 유형'이라는 정보 유형에 따라 정의된다. 리소스 데이터는 종종 다른 유형의 데이터를 참조한다.

리소스 포크의 구조는 다음과 같다.


  • 헤더: 리소스 데이터 및 리소스 맵의 시작 위치와 길이를 기록한다.
  • 리소스 데이터: 실제 데이터이다. 데이터의 앞 4바이트에 데이터 길이를 기록하며, 여러 개가 존재할 수 있다.
  • 리소스 맵: 리소스 데이터의 위치 등을 기록한다. 리소스 맵 내부는 다음과 같이 구성된다.
  • 리소스 타입 리스트: 사용 중인 리소스 타입 등을 기록한다.
  • 리소스 참조 리스트: 지정 ID가 가진 리소스 데이터의 시작 위치와 그 리소스에 붙여진 이름의 위치를 기록한다.
  • 리소스 이름 리스트: 리소스 데이터에 이름으로 접근할 때 사용하는 이름을 기록한다.

5. 리소스 포크 접근

이전에는 리소스 포크가 '리소스 매니저' API를 통해 접근되었다. 이 API는 현재 더 이상 사용되지 않는다.[5]

더 이상 사용되지 않는 API에서 리소스 포크 접근 과정은 다음과 같다.

# 리소스 포크에 접근할 때, 헤더에서 리소스 데이터의 시작 위치 및 길이와 리소스 맵을 포함한 데이터를 읽는다.

# 읽을 리소스 유형이 지정된 경우, 해당 유형이 리소스 목록에 있는지 확인하고, 해당 유형을 포함하는 데이터 항목의 수와 리소스 맵의 시작 위치로부터의 리소스 참조 목록에서의 오프셋을 찾는다.

# 리소스 ID, 리소스 이름의 오프셋, 리소스 속성, 리소스 데이터의 시작 위치로부터의 데이터 오프셋을 찾는다.

# 지정된 ID 또는 이름을 가진 리소스 데이터가 리소스 데이터에 있는 경우, 위에서 얻은 오프셋에 접근하고, 데이터 길이를 찾고, 저장된 모든 데이터를 읽어 반환 값으로 반환한다.

POSIX 인터페이스에서는 리소스 포크를 `''filename''/..namedfork/rsrc` 또는 `''filename''/rsrc`로 접근할 수 있었다. 더 짧은 형태는 Mac OS X v10.4에서 더 이상 사용되지 않았고, Mac OS X v10.7에서 완전히 제거되었다.[6]

6. 데이터 타입

리소스 포크를 구성하는 가장 작은 요소는 데이터 타입이라고 불린다. 여러 종류의 데이터 타입이 존재한다. 리소스 포크에 접근한 후에는 미리 정의된 데이터 타입에 맞게 내용을 읽어들여 내용을 찾을 수 있다. 데이터 처리 방식을 프로그램 내에 정의하면 TMPL 리소스라고 불리는 리소스도 저장할 수 있다. 이 방법을 사용하면 ResEdit과 같은 프로그램으로 데이터를 볼 때 가시성이 향상되어 나중에 편집하기가 더 쉬워진다. 매킨토시 플랫폼은 모토로라 기반 프로세서(68k 및 PPC)로 시작되었기 때문에 데이터는 빅 엔디안 형식으로 디스크에 직렬화된다.[9]

다음은 주요 데이터 타입을 알파벳순으로 나열한 것이다.

데이터 타입실제 이름설명
BBIT바이너리 비트단일 부울 비트(참 또는 거짓)를 나타낸다. 일반적으로 BBIT의 수는 8의 배수여야 한다.
BOOL부울부울 값을 나타낸다. 2바이트로 구성되며, 256은 참이고 0은 거짓이다.
CHAR문자1바이트 문자를 나타낸다.
CSTRC 문자열C 프로그래밍 언어에서 사용되는 형식의 문자열을 나타낸다. 즉, 바이트의 널 종료 문자열이다.
DLNG십진수 긴 단어 정수십진수 긴 단어(4바이트 정수). 대략 -21억에서 21억 사이의 값을 나타낸다.
HEXD16진수 덤프이 위치부터 끝까지의 데이터가 16진수임을 나타낸다. 코드 리소스 또는 압축된 데이터를 나타내는 데 사용된다.
HLNG긴 단어 16진수이 데이터는 4바이트 16진수 값으로 처리된다. 특히 C의 부호 없는 long 값과 같이 21억보다 큰 정수를 나타내는 데 사용된다.
PSTR파스칼 문자열파스칼 문자열을 나타내며, 첫 번째 바이트는 문자열의 길이를 나타낸다.
TNAM유형 이름크리에이터 코드와 같은 값을 나타내는 문자열로, 항상 4바이트 길이이다.
RECT사각형사각형의 모서리 좌표(위, 왼쪽, 아래, 오른쪽)를 나타낸다. 항상 8바이트 길이이다.


7. 리소스 타입

리소스 타입은 리소스 포크 자체뿐만 아니라 파일, 클립보드 데이터 등을 식별하는 데 사용된다. 각 리소스는 OSType 식별자(4바이트 값), ID(부호 있는 16비트 워드), 선택적인 이름을 가진다.

리소스 타입은 4바이트 길이여야 하므로, 'snd'나 'STR'과 같은 유형은 실제로 끝에 공백(0x20)이 붙는다.

다음은 몇 가지 일반적인 리소스 타입이다.

리소스 타입설명
ALRT (alert)애플리케이션 알림 상자의 모양을 정의한다.
APPL (application)애플리케이션 정보를 저장한다.
BNDL (bundle)애플리케이션에서 사용되는 파일 유형 아이콘과 같은 데이터를 정의한다.
cicn (color icon)데이터에서 사용되는 컬러 아이콘을 정의한다.
clut (color look-up table)데이터에서 사용되는 색상 팔레트를 정의한다.
CNTL (control)윈도에 배치된 구성 요소의 세부 정보를 정의한다.
CODE (code resource)프로그램의 기계 코드를 저장한다.
CURS (cursor)단색 커서의 모양을 정의한다(8 × 8 비트 사각형).
DITL (dialog item list)윈도의 구성 요소를 정의한다.
DLOG (dialog)애플리케이션의 대화 상자 모양을 정의한다.
FREF (file reference)애플리케이션에서 처리되는 파일 유형을 정의한다.
hfdr (icon balloon help)커서가 Finder에서 파일 위로 마우스를 가져갈 때 표시되는 풍선 도움말의 내용과 모양을 정의한다.
icl8 (8-bit icon list)Finder에 표시되는 아이콘을 정의한다.
icns (32-bit icon list)Finder에 표시되는 아이콘을 정의한다.
ICON (icon)데이터에서 사용되는 단색 항목을 정의한다.
kind (file description)파일 유형에 대한 설명을 정의한다.
MBAR (menu bar)애플리케이션의 메뉴 및 메뉴 모음을 정의한다.
MDEF (menu definition)애플리케이션의 메뉴를 정의한다. 색상 팔레트와 같은 복잡한 모양의 메뉴를 정의하는 데에도 사용할 수 있다.
MENU (menu)애플리케이션의 메뉴 항목을 정의한다.
MooV (movie)QuickTime 동영상을 저장한다.
open (open)애플리케이션이 열 수 있는 파일 유형을 정의한다.
PICT (picture)파일에 포함된 PICT 이미지를 저장한다.
PREF (preference)애플리케이션의 환경 설정을 저장한다.
snd (sound)파일에서 사용되는 소리를 저장한다.
STR (string)파일에서 사용되는 문자열 또는 16진수 데이터를 저장한다.
STR# (string list)파일에서 사용되는 여러 문자열을 저장한다.
styl (style)텍스트의 글꼴, 색상 및 크기와 같은 스타일 정보를 정의한다.
TEXT (text)텍스트를 저장한다.
TMPL (template)리소스 데이터의 형식을 정의한다.
vers (version)파일의 버전 또는 사용 지역을 정의한다.
WDEF (window definition)애플리케이션의 윈도를 정의한다. 지정되지 않은 모양의 윈도도 정의할 수 있다.
WIND (window)애플리케이션 윈도의 모양을 정의한다.


8. 리소스 포크 편집

리소스 포크는 ResEdit 등의 리소스 편집기를 사용하여 편집할 수 있으며, 이를 통해 소프트웨어의 지역화 및 사용자 정의를 할 수 있다. 대부분의 리소스 편집기는 데이터의 시각적 편집을 지원한다. 애플에서 무료로 제공하는 통합 개발 환경인 MPW 및 Apple Developer's Tools에는 Rez 컴파일러가 포함되어 있다. 이 컴파일러는 전용 Rez 언어를 사용하여 소스 코드를 컴파일하여 리소스 포크를 생성한다. 또한, 리소스 포크를 다시 Rez 코드로 변환하는 DeRez 디컴파일러도 포함되어 있다.[7]

리소스 포크 편집기는 다음과 같다.

편집기설명
ResEdit애플에서 무료로 배포했으며, 리소스 데이터를 시각적으로 편집할 수 있다. 최신 macOS에서는 실행되지 않는다.
ResorcererResEdit보다 더 많은 유형의 데이터를 시각적으로 편집할 수 있어 인기가 많다.
HexEdit바이너리 편집기. 리소스 포크보다는 데이터 포크를 편집하는 데 더 일반적으로 사용된다.
ResKnifeMac OS X용 오픈 소스 편집기. 더 이상 유지 관리되지 않는다.
Rezycle리소스 포크에서 리소스를 별도의 바이너리 파일로 추출하는 macOS 도구.
resource_dasmmacOS 및 Linux용 오픈 소스 리소스 추출기.[7]
ResForge클래식 리소스 포크 파일 및 관련 형식을 편집할 수 있는 macOS용 리소스 편집기. macOS 10.14 이상과 호환되며, 64비트 인텔 및 애플 실리콘에서 네이티브로 실행된다.[8]


9. 호환성

리소스 포크는 파일 공유 프로토콜인 AFP, SMB, NFS, FTP 등을 통해 다른 파일 시스템에 접근하거나 파일을 전송할 때 호환성 문제를 일으킬 수 있다. AFP는 리소스 포크를 기본적으로 지원하지만, SMB, NFS, FTP는 그렇지 않다.[9] macOS는 AppleDouble 형식을 사용하여 메타데이터와 리소스 포크를 별도의 파일로 저장함으로써 이 문제를 해결한다. 예를 들어 '''ExampleFile.psd''' 파일의 경우, 데이터 포크는 '''ExampleFile.psd'''에, 리소스 포크와 메타데이터는 '''._ExampleFile.psd'''에 저장된다.

MacBinary, BinHex 등의 파일 형식을 사용하여 리소스 포크를 보존할 수도 있다.

10. 다른 운영 체제

제록스 알토(Xerox Alto)의 Smalltalk-76에서 그래픽 객체의 리소스 관리자 개념이 처음 시작되었다.[10] Windows NT의 NTFS는 대체 데이터 스트림을 통해 포크를 지원할 수 있다. BeOS는 파일 시스템 내에 데이터베이스를 구현하여 리소스 포크와 유사하게 사용할 수 있었다.

AmigaOS는 `.info` 파일을 사용하여 메타 데이터를 저장한다. 예를 들어, `MyProject`라는 프로젝트를 디스크에 저장하면 `MyProject`와 `MyProject.info` 두 파일이 저장된다. `MyProject.info` 파일은 프로젝트 아이콘, 프로젝트를 열기 위해 필요한 프로그램 정보, 사용자 주석 등을 포함한다. 최신 AmigaOS 클론인 AROS, MorphOS, AOS4는 `.info` 파일 구조를 상속받았으며, PNG 그래픽 파일을 아이콘 비트맵으로 사용할 수 있다.

NeXT 운영 체제 NeXTSTEP 및 OPENSTEP, 그 후속 제품인 macOS 및 RISC OS번들 또는 응용 프로그램 디렉토리 형태로 리소스를 관리한다. 이 디렉토리는 사용자에게 응용 프로그램 자체로 표시되며, 리소스는 TIFF 파일과 같은 원래 형식으로 유지된다. macOS는 하위 호환성을 위해 Carbon 라이브러리의 일부로 클래식 리소스 관리자 API를 유지하며, 리소스 자체를 파일 시스템 내의 별도 데이터 파일에 저장할 수 있다.

11. 리소스 포크의 현재 상황

인터넷이 보편화되면서 다른 운영 체제 사용자들과 파일을 공유하는 것이 당연해졌고, 이에 따라 리소스 포크는 다른 운영 체제 사용자들을 당황하게 하는 경우가 종종 발생하였다. macOS에서는 리소스 포크의 사용을 최대한 자제하게 되었으며, 이로 인해 다른 운영 체제에서 리소스 포크가 문제를 일으키는 일이 없어졌고 파일 공유도 용이해졌다. 한편, 리소스 포크를 대체하기 위해 번들이라고 불리는 폴더 계층 안에 리소스 포크에 해당하는 데이터를 데이터 포크 측에 저장하는 방식도 사용하게 되었다. 이는 정형화된 정보가 많은 응용 프로그램에서 특히 많이 사용된다.

이러한 개선 덕분에 파일 공유가 쉬워졌을 뿐만 아니라, 리소스 포크가 없는 UNIX 소프트웨어도 쉽게 이식할 수 있게 되었다.

macOS에서는 파일에 확장자를 붙이는 것이 권장되지만, 프로퍼티 목록을 사용하여 사용자가 확장자를 의식하지 않도록 하고 있다.

참조

[1] 웹사이트 Technical Note FL19: Data in Resource Fork: Don't do It https://developer.ap[...] 1986-03-01
[2] 웹사이트 Technical Note TN1150: HFS Plus Volume Format https://developer.ap[...] 2024-02-11
[3] 웹사이트 Technical Q&A QA1175: Resource forks in Mach-O binaries https://developer.ap[...] 2002-08-07
[4] 웹사이트 Mac OS X Resource Forks http://jonsview.com/[...] 2012-10-22
[5] 웹사이트 Resource Manager Reference https://developer.ap[...] 2012-10-22
[6] 웹사이트 Using Pathnames http://developer.app[...] 2002-12-18
[7] 웹사이트 resource_dasm https://github.com/f[...]
[8] 웹사이트 ResForge https://github.com/a[...]
[9] 웹사이트 Mac OS X v10.5, v10.6: About named streams on SMB-mounted NAS, Mac OS X, and Windows servers; "-36" or "-50" alerts may appear http://support.apple[...] 2010-04-19
[10] 웹사이트 The Early History of Smalltalk http://gagne.homedns[...] 2008-07-24
[11] 문서 マルチレコードのファイル、といったようなもの自体は普通にあるものであり、実際には全く特有ではない。
[12] 웹인용 Technical Note FL19: Data in Resource Fork: Don't do It https://developer.ap[...]



본 사이트는 AI가 위키백과와 뉴스 기사,정부 간행물,학술 논문등을 바탕으로 정보를 가공하여 제공하는 백과사전형 서비스입니다.
모든 문서는 AI에 의해 자동 생성되며, CC BY-SA 4.0 라이선스에 따라 이용할 수 있습니다.
하지만, 위키백과나 뉴스 기사 자체에 오류, 부정확한 정보, 또는 가짜 뉴스가 포함될 수 있으며, AI는 이러한 내용을 완벽하게 걸러내지 못할 수 있습니다.
따라서 제공되는 정보에 일부 오류나 편향이 있을 수 있으므로, 중요한 정보는 반드시 다른 출처를 통해 교차 검증하시기 바랍니다.

문의하기 : help@durumis.com