⭐ 프로세스 간 통신(IPC)이란?
- Process들 간에 데이터 및 정보를 주고 받기 위한 Mechanism
- Kernel에서 IPC를 위한 도구를 제공
- System Call의 형태로 Process에게 제공됨
- Shared Memory
- Message Passing
- IPC의 필요성:
- Process 협력 모델 (Cooperating Process Model)을 구현하기 위해 IPC가 반드시 필요함
- 실행 중인 Process는 협력하는 다른 Process의 영향을 받음
🧩 Shared Memory: IPC 모델 1
- Process의 특정 Memory 영역을 공유
- 공유한 Memory 영역에 읽기/쓰기를 통해 통신
- Read and Write
- 프로그램이 공유한 Memory 영역에 바로 접근
- 응용 프로그램 레벨에서 통신
- 공유 메모리 설정 시 커널 관여, 그 이후에는 관여 X
🧩 Message Passing: IPC 모델 2

- Process간 Memory 공유 없이 동작 가능
- 고정길이 메시지, 가변길이 메시지를 송/수신자끼리 주고 받음
- Kernel을 통한 메시지 통신 기능을 제공
- Send and Receive
- Kernel을 경유하여 Message 전송
- Kernel에서 데이터를 버퍼링
- 문맥전환에 연관됨
- 활용 예) 클라이언트 – 서버 방식의 통신
- 구현 IPC
- Pipe
- Message Queue
- Socket
🧩 IPC 두 가지 모델 그림

IPC에서 동기화의 필요성
- Message Passing 방식 – Kernel이 동기화 제공 (시스템 콜 호출 시 커널이 알아서 동기화)
- Send와 Receive와 같은 연산에 대해서는 Kernel이 동기화
- Send와 Receive를 수행할 때에는 Program에서 동기화에 대한 고려 없이 사용 가능
- Shared Memory 방식– 부가적인 방법이 필요
- Memory 영역에 대한 동시적인 접근을 제어하기 위한 방법이 필요
- 접근 제어 방식은 Locking이나 세마포어 (Semaphore) 방법이 있음
🧩 Pipe
- 하나의 Process가 다른 Process로 데이터를 직접 전달하는 방법
- 데이터는 한 쪽 방향으로만 이동함. 따라서 양방향 통신을 위해서는 두 개의 Pipe가 필요 (Half
Duplex)
- 1대 1의 의사소통만이 가능
- 보내어진 순서대로만 받음
- 용량 제한이 있기 때문에, Pipe가 꽉 차면 더 이상 쓸 수 없음
🧩 Signal
특정 **Process**에게 **Kernel**을 통해 **Event**를 전달하는 방법
- 송신 Process: 여러 신호 중 하나를 특정 Process에 보냄. 이 동작은 수신할 Process의 상태에
무관하게 수행
- 수신 Process: 신호 종류에 따라 신호 처리 방법을 지정 가능
- 무시
- 단순히 신호를 붙잡아 둠
- 특정 처리 루틴 (Signal Handler)를 두어 처리
- 비동기적인 동작
- Process A가 Signal을 Process B에게 보내더라도, Signal 처리는 Process B가 Scheduling 되어야 가능함
🧩 Shared Memory
두 개 이상의 Process들이 하나의 Memory 영역을 공유하여 통신하는 방법
- Memory의 직접 사용으로 빠르고 자유로운 통신 가능
- 둘 이상의 Process가 동시에 Memory를 변경하지 않도록, Process 간의 동기화가 필요함
🧩 Message Queue
고정된 크기를 갖는 Message의 연결 리스트 (Linked List)를 이용하여 통신을 하는 방법
- Message 단위의 통신- Message의 형태는 통신하고자 하는 Process 간의 약속이 필요
- Message의 형태는 사용자가 정의하여 사용
- 여러 Process가 동시에 접근 가능
🧩 Socket
- Socket의 정의
- An end-point for communication
- Port를 ****이용하여 통신하는데 사용됨
- Port는 운영체제가 제공하는 Abstraction임
- Port 번호를 이용하여 통신하려는 상대 Process의 Socket을 찾아감
- 다른 IPC와 달리 Process의 위치에 Independent
- Local 또는 Remote
- Port의 도움으로 가능
- Local의 경우, Port 번호만으로 식별
- Remote의 경우, IP 주소 + Port 번호 조합으로 식별
- 연결 (Connection)의 Semantics를 정할 수 있음
- Reliable (TCP) / Unreliable (UDP)
Socket의 특성
- Process Independent
- Port를 사용하기 때문에 Machine Boundary와 관계 없음
- E.g., Port로 여러 Web Browser를 생성
- Remote Machine은 Local Machine의 Port만 보임 (Socket은 보이지 않음)
- 즉, 소켓은 Remote Machine에 있음
⭐ iOS에서의 IPC 방식
🧩 왜 중요한가
iOS 앱은 단일 프로세스로 동작하지만, App Extensions(위젯, 공유 확장, 키보드 등)은 별도의 프로세스로 실행된다. 메인 앱과 Extension이 데이터를 주고받으려면 IPC가 필요하다.
iOS는 보안상의 이유로 Shared Memory를 직접 사용하기 어렵고, 대부분 Message Passing 기반의 방식을 사용한다.
🧩 1. App Groups (Shared Container)
메인 앱과 Extension이 데이터를 공유하는 가장 일반적인 방법이다.
let defaults = UserDefaults(suiteName: "group.com.myapp")
defaults?.set("Hello", forKey: "sharedData")
let defaults = UserDefaults(suiteName: "group.com.myapp")
let data = defaults?.string(forKey: "sharedData")
App Groups는 공유 컨테이너 자체를 말하고, UserDefaults는 그 안에서 쓸 수 있는 방법 중 하나이다.
파일 공유도 가능하다.
let containerURL = FileManager.default
.containerURL(forSecurityApplicationGroupIdentifier: "group.com.myapp")
🧩 2. XPC (Cross-Process Communication)
XNU 커널의 Mach 메시지 기반 IPC다. iOS에서는 시스템이 내부적으로 사용하며, 개발자가 직접 쓸 일은 거의 없다. macOS에서는 앱과 Helper 프로세스 간 통신에 활용된다.
🧩 3. URL Scheme
다른 앱을 열면서 데이터를 전달한다.
let url = URL(string: "myotherapp://action?param=value")!
UIApplication.shared.open(url)
func application(_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey: Any]) -> Bool {
return true
}
🧩 4. Universal Links
웹 URL을 앱에서 직접 처리한다. URL Scheme보다 보안성이 높다.
func scene(_ scene: UIScene,
continue userActivity: NSUserActivity) {
guard let url = userActivity.webpageURL else { return }
}
🧩 방식별 비교
| 방식 | 용도 | 특징 |
|---|
| App Groups | 앱 ↔ Extension | 파일, UserDefaults 공유 |
| XPC | 시스템 내부 | Mach 메시지 기반, 개발자 직접 사용 제한 |
| URL Scheme | 앱 ↔ 앱 | 단방향, 간단한 데이터 전달 |
| Universal Links | 웹 ↔ 앱 | 도메인 소유 검증 필요, 보안성 높음 |
🧩 운영체제 개념과의 연결
iOS의 IPC는 기본적으로 Message Passing 방식이다.
각 앱이 샌드박스로 격리되어 있어서 Shared Memory를 직접 사용할 수 없고, 커널이나 시스템 서비스를 통해 데이터를 주고받는다.
App Groups의 Shared Container도 내부적으로는 파일 시스템을 통한 간접 공유 방식이다.