본문 바로가기
개발/iOS

iOS/macOS 번들(Bundle)에 대하여 - Part 1

by lucidmaj7 2022. 10. 11.
728x90
반응형

iOS 개발을 하다보면 번들 ID부터 시작해서..자꾸 접하게 되는 것이 번들(Bundle)이다. 그냥 추상적으로 앱을 묶어놓은 패키지, 앱이 사용하는 공간 정도로 생각하고 있었으나 그 개념이 명확히 몰라 베일에 쌓여있었다. 도대체 번들(Bundle)이란 무엇인가? 왜 번들이 필요할까?

macOS에서 응용프로그램에서 앱을 하나 선택해 패키지 보기를 선택하면 무언가 디렉터리로 들어가진다.

 

분명 .app 확장자를 가지는 파일인데 안에 내용은 마치 폴더와 같은 구조이다. 이 안에는 앱이 쓰는 아이콘, 이미지, 실행 바이너리 등이 들어있다. 어떤 .app확장자를 가지는 응용 프로그램을 열어봐도 동일한 구조의 디렉터리가 나온다. 분명 파일인데 왜 폴더 처럼 구성 되어 있을까?

macOS에서 앱을 설치하는 방법 중 가장흔한 방법이 무엇인가? 바로 .dmg디스크 이미지를 다운받고 열면 그 안에 앱을 그냥 마우스로 드래그 해서 Application폴더에 넣어주면 끝이다. 

MS윈도우에서 앱을 설치하는 방법보다 훨씬 직관적이라 할 수 있다. 이러한 사용자 경험을 가능케 하는게 무엇인가?

그 비밀은 macOS, iOS의 Package, Bundle 이라는 기술 덕분이다.

Apple Bundle Programming Guide문서에 따르면 번들은 다음과 같다.

Bundles are a fundamental technology in macOS and iOS that are used to encapsulate code and resources.
- Bundle은 macOS와 iOS에서 코드와 리소스들을 캡슐화 할 때 사용되는 기본적인 기술이다. 

Bundles are a convenient way to deliver software in macOS and iOS. Bundles provide a simplified interface for end users and at the same time provide support for development.
- 번들은 macOS와 iOS에서 소프트웨어를 제공하는 편리한 방법이다. 번들은 유저와 개발자에게 간소화된 인터페이스를 제공한다. 

A bundle is a directory with a standardized hierarchical structure that holds executable code and the resources used by that code.
- 번들은 실행코드와 코드가 사용하는 리소스들을 가지고 있는 표준화된 계측적 구조를 가진 디렉터리이다.

그런데 번들을 자세히 알아보기 앞서 패키지와 번들의 차이 부터 좀 보고 가자.

반응형

1. 번들과 패키지

위에서 앱의 패키지 보기를 클릭해 보았다. 번들을 이야기 하면서 왜 패키지를 이야기 해야 할까? 애플 문서에 따르면 패키지와 번들은 같은 의미로 언급되지만 실제로 매우 다른 개념이라고 한다.

패키지: Finder가 단일 파일인 것 처럼 제공하는 디렉터리
번들: 실행 가능한 코드와 그 코드가 사용하는 리소스를 포함하는 표준화된 계층 구조를 가지 디렉터리.

패키지는 Finder에서 마치 하나의 파일처럼 다룰 수 있는 디렉터리를 의미하며, 이는 컴퓨터를 사용하는 유저(User)입장에서 여러개의 파일 폴더를 신경쓰지 않고 하나의 파일처럼 다룰 수 있는 경험을 제공한다고 할 수 있다. 즉, macOS를 좀 더 사용하기 쉽게 만드는 추상화 기술이라고 볼 수 있다.

반대로 번들은 개발자 입장에서 코드를 패키징하고 운영체제가 해당 코드에 엑세스 할 수 있도록 돕는데 중접을 둔다. MS 윈도우의 경우 개발자 마음대로 리소스 폴더를 정의하고, 실행파일을 정의하며, dll 등 여러 파일들을 자신의 입맛에 맞게 재배치 할 수 있다. 왜냐면 딱히 표준이랄게 없기 때문이다. 하지만 macOS, iOS는 번들이라는 기술을 통해 개발자에게 표준화된 파일, 리소스 배치 방법을 제공한다고 볼 수있다.

그럼 왜 번들패키지가 같은 의미로도 사용될까? 그 이유는 번들도 패키지의 한 종류 이기 때문이다.

1.1. Finder가 패키지를 식별하는 방법

그럼 Finder는 어떻게 디렉터리를 패키지로 인식하는 것일까? Finder는 다음 조건 중 하나라도 해당하는 경우 패키지로 간주 한다.

  • 디렉터리 이름에 .app, .bundle, .framework, .plugin, .kext인 경우
  • 다른 응용 프로그램이 패키지 유형을 정의하는 경우
  • 패키지 비트 세트가 있는 경우

이 중 가장 많이 쓰이는 방법은 알려진 확장자로 지정되는 경우이다. .app, .bundle, .framework등 알려진 확장자에 맞춰진 디렉터리 구조는 xcode에서 프로젝트를 생성하면 그에 맞춰 적절한 디렉터리 구조가 생성되므로 개발자가 특별히 신경쓸 일은 없다.

대부분 번들은 패키지이기 때문에 Finder에서 단일 파일로 보이지만, .framework 번들은 개발자가 해더나, 기타 리소스 등을 참조해야하기 때문에 폴더처럼 직접 열어 볼 수 있게 제공된고 한다.

 

1.2. 번들의 표시 이름을 마음데로 변경 할 수 있나?

macOS에서 아니 컴퓨터 안에 있는 파일과 폴더는 사용자가 자유롭게 변경이 가능하다. 그냥 디렉터리에 불과한 번들 패키지도 마찬가지 일 것 이다. 그냥 폴더처럼 이름을 막 바꿀 수 있을 텐데 이렇게 되면 framework를 참조하는 다른 응용프로그램이나, 모듈들이 해당 번들이나 패키지를 찾을 수 없어 동작할 수 없게 만들지도 모른다. 그래서 번들 패키지는 Display Name이라는 것을 제공한다.

Finder에서 보여지는 이름들은 그냥 표면적인 Display Name일 뿐이며 Finder에서 실제 번들과 Display Name을 맵핑 시켜주는 것이다. 이렇게 해서 OS의 언어에 따라 앱이름을 해당 언어에 맞춰서 보여 줄 수 있는 다국어 지원도 용이해 질 수 있다.

1.3. 번들의 장점

  • 번들은 개발자들에게 다음과 같은 장점을 제공한다.
  • 번들은 단순히 파일시스템의 디렉터리 계층이기 때문에 파일 기반 인터페이스를 이용하여 번들을 탐색 할 수 있다.
  • 번들의 디렉터리 구조는 다국어 지원을 쉽게 가능하게 해준다. 쉽게 새로운 언어를 추가 하거나 제거할 수 있기 해준다.
  • 번들은 multi fork format인 HFS, HFS+, AFP와 single-fork format인 UFS, SMB, NFS 등 서로 다른 볼륨 포멧에 저장 가능하다.
  • 사용자는 손 쉽게 finder에서 Drag 등으로 설치, 이동, 제거 등을 할 수 있다.
  • 번들은 패키지이기 때문에 사용자의 우발적인 수정에 덜 취약하다.
  • 서로 다른 아키텍처(PowerPC, Intel, x86, x64) 칩을 지원 할 수 있다.

1.4. 번들의 유형

번들은 여러가지 유형이 있지만 대표적으로 다음과 같은 번들 유형이 존재한다.

  • 애플리케이션
  • 프레임워크
  • 플러그인

 

참고

 

 

 

 

728x90
반응형

댓글