Computer >> 컴퓨터 >  >> 시스템 >> Mac

macOS 앱 번들(App Bundle) 완벽 분석: 내부 구조와 각 파일의 역할

macOS 앱 번들(App Bundle) 완벽 분석: 내부 구조와 각 파일의 역할

macOS 앱 안에는 무엇이 들어 있고, 그것들은 어떤 역할을 할까요? macOS 앱은 하나의 단일 파일처럼 보이지만, 실제로는 특별한 아이콘을 가진 폴더, 즉 '번들(Bundle)'에 가깝습니다. 이 번들을 열어보면 애플리케이션 실행에 필요한 다양한 파일들이 담겨 있는 것을 확인할 수 있습니다. 번들 구조를 제대로 이해하면 개발자, 시스템 관리자, 게임 모더, 해킨토시 빌더, 보안에 관심 있는 사용자, 그리고 앱 문제를 해결해야 하는 모든 사람에게 큰 도움이 됩니다.

macOS 앱 번들이란?

Apple의 공식 정의에 따르면, 번들이란 "실행 가능한 코드와 해당 코드가 사용하는 리소스를 담고 있는 표준화된 계층 구조의 디렉터리"를 의미합니다. 쉽게 말해 그것이 바로 애플리케이션입니다. 개발자는 앱이 정상적으로 작동하도록 특정 구조와 형식을 반드시 준수해야 하며, 이 규칙을 어기면 앱이 제대로 작동하지 않을 가능성이 높습니다. 따라서 앱에 문제가 발생했을 때 애플리케이션 번들은 유용한 문제 해결 출발점이 될 수 있습니다.

번들은 앱만을 위한 것이 아닙니다. .framework, .bundle, .plugin, .kext 같은 확장자를 가진 파일들도 모두 번들 형태입니다. Finder에서는 이러한 번들이 하나의 단일 객체처럼 표시되며, 번들의 패키지 내용을 직접 열어 들어가기 전까지는 내부를 볼 수 없습니다.

앱 번들 여는 방법

일반 디렉터리와 달리, 애플리케이션 번들을 열려면 몇 가지 단계를 거쳐야 합니다.

1. '/Applications/' 폴더에서 앱 아이콘을 마우스 오른쪽 버튼으로 클릭합니다.

2. 컨텍스트 메뉴에서 '패키지 내용 보기(Show Package Contents)'를 클릭합니다.

macOS 앱 번들(App Bundle) 완벽 분석: 내부 구조와 각 파일의 역할

3. 'Contents' 폴더를 더블클릭하여 앱의 기본 디렉터리로 진입합니다.

macOS 앱 번들의 기본 구조

번들의 'Contents' 폴더 안에는 여러 파일이 들어 있습니다. 모든 macOS 앱은 최소한 다음 두 가지 요소를 반드시 포함해야 합니다.

  • Info.plist: 필수 설정 정보와 애플리케이션 식별 문자열을 담고 있습니다.
  • MacOS/실행 파일(Executable): 'MacOS' 폴더 안에 위치하며, 사용자가 앱을 실행할 때 작동하는 코드입니다. 실행 파일이 없다면 번들이라고 부르기 어렵습니다.
macOS 앱 번들(App Bundle) 완벽 분석: 내부 구조와 각 파일의 역할

그 외에도 자주 볼 수 있는 폴더들에 다양한 추가 파일이 포함되어 있습니다.

  • Plugins: 코어 실행 파일의 기능을 확장하는 확장 프로그램 형태의 미니 실행 파일입니다. 정적 리소스와 달리 플러그인은 앱에 동적으로 기능을 추가합니다.
  • Resources: 앱이 의존하는 지원 파일들이 모여 있는 곳입니다. 이미지, 아이콘, 사운드, 폰트, nib 파일, 현지화(localization) 파일, 데이터 저장소 등이 여기에 포함됩니다. 플러그인과 달리 이 리소스들은 실행 파일의 핵심 기능을 지원하는 역할을 합니다.
  • Frameworks: 플러그인과 마찬가지로 앱에 필요한 상위 프레임워크도 각각 독립적인 번들입니다. 다만 플러그인과는 다른 계층 구조를 사용합니다.
  • CodeSignature: 애플리케이션의 각 부분에 대한 코드 서명 정보를 담은 구조화된 plist 파일입니다. 이 서명을 통해 앱과 macOS는 애플리케이션의 무결성을 검증하고 앱 탈취(hijacking) 공격을 방지할 수 있습니다.

iOS 앱 번들도 동일한 기본 구조와 파일 형식을 사용하지만, 계층 구조가 조금 다르게 나타나는 경우가 많습니다.

Info.plist 자세히 살펴보기

macOS 앱 번들(App Bundle) 완벽 분석: 내부 구조와 각 파일의 역할

Info.plist는 애플리케이션의 기본 정보를 한눈에 파악할 수 있는 핵심 파일입니다. 여기에는 다른 모든 번들 식별자와 중복되지 않아야 하는 고유한 번들 식별자(bundle identifier)가 포함됩니다. Apple은 이 과정을 단순화하기 위해 'com.apple.siri.launcher'나 'org.videolan.vlc'처럼 역방향 도메인 표기법(reverse domain notation)을 사용할 것을 권장합니다. Info.plist에 대해 더 알고 싶다면 Apple이 제공하는 키(key) 목록을 참고하고 각 키의 역할을 살펴보는 것이 좋습니다.

이 파일에는 앱 아이콘, 앱 이름, 버전 번호, 저작권 정보, 오류 보고 링크, 기본 언어 등 앱의 기본 정보도 함께 들어 있습니다. 참고로 관례와 시스템 규칙에 따라 'Info'의 'I'는 항상 대문자로 표기됩니다.

실행 파일(Executable)

실행 파일은 애플리케이션의 핵심 코드가 위치하는 곳입니다. 앱이 실행되면 macOS는 번들의 'MacOS' 디렉터리에 있는 실행 파일에 담긴 코드를 구동합니다. 대부분의 앱은 단일 실행 파일만 가지지만, 헬퍼(helper) 실행 파일 용도로 두 개 이상을 사용하는 경우도 있습니다. 이 파일은 사용자가 쉽게 열람하거나 편집할 수 없기 때문에 일반적으로 소프트웨어 개발자 외에는 큰 관심을 받지 않습니다.

리소스 및 추가 지원 파일

앱에 필수적인 모든 요소는 번들 안에 포함되어야 합니다. 실행 파일 자체의 일부가 아니라면, 번들 내부의 리소스 폴더 중 하나에 배치해야 합니다. 이러한 리소스는 기본 'Resources' 폴더에 저장하거나 여러 하위 폴더로 나누어 관리할 수 있습니다.

  • 확실하지 않다면 대부분의 리소스는 'Resources' 폴더에 넣습니다.
  • 프레임워크는 'Frameworks' 폴더에 넣습니다.
  • 플러그인은 'Plugins' 폴더에 넣습니다.
  • 현지화 파일(.lproj 디렉터리)은 Resources 폴더에 넣습니다.

이러한 기본 규칙 외에도 Apple은 다양한 권장 사항과 관례를 제공하므로, 특별한 사유가 없다면 이를 따르는 것이 좋습니다.

결론

macOS 애플리케이션은 앱 파일들을 위한 계층형 컨테이너인 '번들' 안에 담겨 있습니다. 기본 구조는 모든 앱에서 동일하며, 사용자에게 가장 흥미로운 파일들은 대체로 앱 번들 내부의 Resources 폴더에서 찾을 수 있습니다.