어린 시절 롤러코스터 타이쿤이라는 놀이공원을 만드는 게임을 즐겨했었습니다. 특정 미션을 달성해야 하는 캠페인 모드와 함께 자유롭게 상상력을 발휘할 수 있는 샌드박스 모드가 있었던 것이 기억납니다. 오늘은 iOS의 샌드박스 🏜️ 개념에 대해 알아보려 합니다.(제목을 안전한 놀이터라고 지으니까 괜히 도박장 사이트 같기도 하고,, 이상하네요)
샌드박스 SandBox
앱이 손상될 경우 피해를 최소화하기 위해 시스템 리소스와 사용자 데이터에 대한 액세스 제한 기술
쉽게 말해 아이들이 다칠까봐 모래 상자 안에서만 놀게 하는 것처럼, 특정 앱이 제한된 공간 내에서만 동작하도록 만든 시스템이라고 생각할 수 있습니다.
샌드박스는 어떻게 제한된 공간 내에서만 동작하도록 만들 수 있을까요? 우선 샌드박스 없이 앱이 설치된 상황을 예시로 들어보겠습니다. 우리가 만든 APP은 사용자의 개인 정보, 하드웨어, 각종 파일 시스템 심지어 또 다른 APP 데이터에도 접근할 수 있을 것 입니다. (굉장히 편리하고 다양한 서비스를 제공할 수 있을 것 같아 군침이 돕니다.)
하지만 만약 우리가 만든 APP이 손상되었다면 어떨까요? 악성 코드나 해킹을 당했다던가, 충돌이 난 데이터를 다른 시스템에 영향을 주는 상황을 말이죠. 아마 우리의 핸드폰은 엉망진창이 될 지도 모릅니다.
이를 방지하기 위해 샌드박스 기술이 도입되었습니다. 각 APP에게 '너 이 모래 상자에서만 놀아!'라고 이야기하는 것이죠. 샌드박스에서만 놀기 때문에 위 그림처럼 시스템 리소스에 침투하거나 마음대로 조작하는 등의 행동이 어려워집니다.
이는 각 APP의 시점에서 바라봤을 때 샌드박스 세상이 전부인 것처럼 보이게 됩니다. 조금 더 개발자스럽게 표현을 바꿔보자면, 자기 자신을 Root 디렉토리로 인식하게 됩니다. 자신이 Root 디렉토리이기 때문에 외부 디렉토리는 인식조차 못하게 된다는 뜻이죠!
그렇다면 사용자의 개인 정보, 하드웨어, 각종 파일 시스템에는 이제 접근이 불가능해진 것일까요? iOS를 쓰다보면 많은 앱들이 카메라를 사용하고 앨범 시스템에 접근하고 있는데 이게 어떻게 가능할까요?
iOS 개발을 경험하신 분이라면 예상할 수 있듯, API를 통해 각 시스템에 접근할 수 있도록 정의하고 있습니다. 특정 시스템 리소스가 필요하다면, 권한을 요청하고 허용 여부에 따라 데이터 및 하드웨어를 조작할 수 있게 되는 것이죠.
평소 사용자에게 접근 권한을 묻는 Alert는 모두 샌드박스에서 각 시스템에 접근하기 위한 장치라고 생각할 수 있습니다. 샌드박스 덕분에 iOS의 보안 시스템이 좋다라는 평가를 많이 받게 된다고 하네요!
샌드박스 내부 구조 뜯어보기
샌드박스는 새 앱을 설치하는 동안 만들어집니다. 그리고 내부에는 여러 컨테이너가 만들어집니다. 각 컨테이너를 살펴보겠습니다.
1. Bundle Container
앱의 번들을 보관하는 컨테이너입니다. 번들은 쉽게 말해 앱이 실행되는데 필요한 리소스와 실행 파일을 포함하는 디렉토리 구조입니다. 실행 파일, plist, Resources 등을 그룹화하고 있습니다. 번들에 대해선 추후 포스팅에서 더 자세히 다뤄보도록 하겠습니다.
2. Data Container
앱이 저장할 수 있는 여러 하위 디렉토리를 가지고 있는 컨테이너입니다. 앱에서 생성한 데이터를 저장하는 `Documents`, 설정 파일 및 캐시, 사용자 데이터를 저장하는 `Library`, 임시 파일을 저장하는 `Temp`, iOS 내부 데이터 및 로그를 저장하는 `SystemData` 등의 하위 디렉토리가 존재합니다.
3. iCloud Container
앱이 iCloud와 데이터를 동기화하고 공유할 수 있도록 제공하는 컨테이너입니다. 위 그림에서는 iCloud Container만 표시되어있지만, 이외도 앱은 런타임 중에 다양한 컨테이너(App Group Container, On-Demand Resources Contaier 등)에 접근할 수 있다고 합니다.
정리하기
- iOS는 보안을 위해 기본 접근은 샌드박스 디렉토리로 제한하되, API를 통해 다양한 시스템 리소스와 상호작용이 가능한 기술입니다.
- 샌드박스는 크게 앱이 실행하는데 필요한 리소스를 가진 `Bundle Container`와 앱이 저장할 수 있는 디렉토리를 가진 `Data Container`로 이루어져있습니다.
Ref.
App Sandbox | Apple Developer Documentation
Restrict access to system resources and user data in macOS apps to contain damage if an app becomes compromised.
developer.apple.com
File System Basics
File System Basics A file system handles the persistent storage of data files, apps, and the files associated with the operating system itself. Therefore, the file system is one of the fundamental resources used by all processes. APFS is the default file s
developer.apple.com
'CS' 카테고리의 다른 글
멀티태스킹과 멀티프로세싱, 비슷한듯 다른 두 개념 (0) | 2025.03.17 |
---|---|
iOS에서 OS 뜯어보기 (0) | 2025.02.26 |
스마트폰의 CPU, AP 알아보기 (1) | 2025.02.24 |
Intel Mac과 M1 Mac이 달랐던 이유 (2) | 2025.02.24 |
작지만 빠른 친구 캐시 알아보기 (0) | 2025.02.22 |