IPC로 이해하는 프로세스·프로세서 간 데이터 교환

IPC의 공유 메모리와 메시지 패싱, SMP·NUMA·분산 메모리 구조, 동기화와 RDMA·CXL 기반 통신을 정리한다.

2026-08-14 · 최초 발행 2026-01-03

IPC가 다루는 데이터 교환과 동기화

IPC(Inter-Process Communication 또는 Inter-Processor Communication)는 여러 프로세스나 프로세서가 데이터를 주고받고, 작업의 순서와 타이밍을 조정하는 메커니즘이다. 멀티프로세싱 환경에서 작업을 나누고 결과를 합치거나, 공통 자원을 함께 다루고 이벤트를 전달하려면 이 통신 경로가 필요하다.

소프트웨어 관점의 IPC는 프로세스 사이에서 데이터와 제어 정보를 교환하는 방법을 뜻한다. 하드웨어 관점에서는 멀티프로세서 시스템의 CPU들이 메모리와 인터커넥트를 통해 데이터를 교환하는 구조까지 포함한다.

하드웨어 관점(Inter-Processor)통신통신CPU 1인터커넥트(버스, NoC)CPU 2소프트웨어 관점(Inter-Process)IPCIPC프로세스 1운영체제(IPC 메커니즘 제공)프로세스 2IPC(Inter-Process/ProcessorCommunication)

병렬 처리에서는 분리한 작업의 결과를 통합해야 하고, 메모리·파일·장치처럼 공유하는 자원의 접근 순서도 조정해야 한다. 독립 프로세스를 통신으로 연결하면 시스템을 모듈화할 수 있으며, 공유 데이터의 일관성 유지와 이벤트 통지에도 IPC가 사용된다.

프로세스 경계에서 선택하는 통신 방식

공유 메모리는 복사 비용을 줄이는 대신 동기화를 맡긴다

공유 메모리는 여러 프로세스가 하나의 메모리 영역을 읽고 쓰는 방식이다. 메모리 복사만으로 데이터를 공유할 수 있어 고속 통신과 큰 데이터 구조의 공유에 적합하다. 반면 Race Condition을 막기 위한 명시적 동기화, 공유 메모리의 생성·삭제·매핑 관리는 애플리케이션이 함께 고려해야 한다.

공유 메모리 방식읽기/쓰기읽기/쓰기읽기/쓰기필요프로세스 1프로세스 2프로세스 3공유 메모리 영역(데이터 공유)동기화 메커니즘(Mutex, Semaphore)

구현에는 POSIX Shared Memory의 shm_open(), mmap()과 System V Shared Memory의 shmget(), shmat()을 사용할 수 있다. 파일을 메모리에 매핑하는 Memory-Mapped Files도 같은 목적에 쓰이며, 동기화에는 pthread_mutex, sem_open() 등이 사용된다.

메시지 패싱은 통신 경계를 드러낸다

메시지 패싱은 송신자와 수신자가 메시지를 주고받는 방식이다. 통신의 방향과 책임이 명확하고 송수신 자체가 동기화 역할을 할 수 있으며, 분산 시스템으로 확장하기 쉽다. 커널 버퍼를 통한 데이터 복사 오버헤드는 고려해야 할 특성이다.

프로세스 2커널 (메시지 큐)프로세스 1프로세스 2커널 (메시지 큐)프로세스 1메시지 버퍼링메시지 처리(1) send(메시지)(2) receive() 요청(3) 메시지 전달

Pipe는 pipe(), mkfifo()로 다루는 단방향 바이트 스트림이다. 메시지 큐는 POSIX의 mq_send(), mq_receive() 또는 System V의 msgsnd(), msgrcv()로 구현할 수 있다. Socket은 socket(), send(), recv()를 이용한 네트워크 통신 수단이고, RPC(Remote Procedure Call)는 원격 함수 호출 모델을 제공한다.

이벤트, 자원, 영속 데이터에도 IPC가 쓰인다

시그널은 한 프로세스가 다른 프로세스에 비동기 이벤트를 알리는 인터럽트 방식이다. 전달할 수 있는 정보는 시그널 번호로 제한되며 데이터 전송은 할 수 없다. SIGKILL, SIGTERM, SIGUSR1, SIGUSR2가 예시이고 kill(), signal(), sigaction()으로 다룬다.

세마포어는 자원 개수를 제어하고 프로세스 간 순서를 맞추는 동기화 도구다. 카운팅 세마포어는 여러 자원의 접근을 통제하며, 이진 세마포어는 0 또는 1을 사용해 뮤텍스와 유사하게 동작한다. POSIX의 sem_open()과 System V의 semget()이 구현 수단이다.

파일 시스템도 IPC 경로가 될 수 있다. 파일은 영구 저장이 가능하고 표준 파일 API로 단순하게 구현할 수 있지만, 디스크 I/O 오버헤드가 있다. 동시 접근은 flock(), fcntl() 등의 잠금으로 제어한다.

프로세서 구조가 바꾸는 통신 경로

SMP의 공유 메모리와 캐시 일관성

SMP에서는 여러 CPU가 하나의 주 메모리를 공유한다. UMA(Uniform Memory Access) 구조에서는 모든 CPU가 메모리에 동일한 시간에 접근하며, CPU 간 통신은 공유 메모리 주소에 대한 Load/Store로 이뤄진다.

SMP 시스템필요CPU 1(Cache)CPU 2(Cache)CPU 3(Cache)System BusShared Main Memory캐시 일관성프로토콜(MESI)

MESI, MOESI 같은 하드웨어 프로토콜은 캐시 일관성을 유지한다. Compare-And-Swap과 Test-And-Set 같은 Atomic 연산, 메모리 연산 순서를 보장하는 메모리 배리어, 다른 CPU의 캐시 상태를 보는 캐시 스누핑도 이 구조에서 중요하다. 다만 버스 병목 때문에 확장성에는 한계가 있으며, 8-16 CPU가 한계로 제시된다.

NUMA는 메모리 위치에 따라 접근 비용이 달라진다

NUMA(Non-Uniform Memory Access)는 CPU 또는 노드마다 로컬 메모리를 보유하는 분산 메모리 구조다. 로컬 메모리 접근은 빠르지만 원격 메모리 접근은 느리다. 인터커넥트로 다수 노드를 연결해 확장성을 확보하며, 중앙 디렉토리가 캐시 위치를 추적하는 디렉토리 기반 일관성을 사용한다.

NUMA 시스템노드 1노드 0빠름빠름느림(원격 접근)CPU 1CPU 0로컬 메모리로컬 메모리인터커넥트(QPI, Infinity Fabric)

다른 노드의 메모리는 인터커넥트를 통해 접근한다. OS는 NUMA-aware 할당으로 로컬 메모리를 우선 배정할 수 있고, 자주 접근하는 페이지는 로컬로 이동시키는 페이지 마이그레이션을 수행할 수 있다.

분산 메모리에서는 메시지가 노드 경계를 넘는다

클러스터처럼 각 노드가 자신의 메모리만 접근하는 구조에서는 네트워크 메시지 전송이 필요하다. 이 방식은 수천 노드까지 확장할 수 있지만 네트워크 레이턴시가 존재한다.

클러스터노드 2노드 1send(메시지)receive(메시지)CPUNIC네트워크(Ethernet, InfiniBand)NICCPU로컬 메모리로컬 메모리

MPI(Message Passing Interface)는 표준 메시지 패싱 라이브러리다. RDMA(Remote Direct Memory Access)는 CPU 개입 없이 원격 메모리에 직접 접근하며, InfiniBand와 RoCE(RDMA over Converged Ethernet)는 각각 고속 저지연 네트워크와 이더넷 기반 RDMA를 제공한다.

지연 시간과 대역폭으로 보는 IPC 경계

프로세스 간 공유 메모리의 통신 레이턴시는 100ns ~ 1μs, 로컬 소켓은 1μs ~ 10μs다. 원격 RDMA도 1μs ~ 10μs 범위이며, 네트워크 소켓은 10μs ~ 100μs다.

통신 레이턴시 (상대적)빠름느림공유 메모리(프로세스 간)100ns ~ 1μs로컬 소켓(프로세스 간)1μs ~ 10μs원격 RDMA(프로세서 간)1μs ~ 10μs네트워크 소켓(노드 간)10μs ~ 100μs성능저하
메커니즘 대역폭 레이턴시 용도
공유 메모리 (프로세스 간) ~수십 GB/s 100ns ~ 1μs 대용량 데이터 공유
Pipe/Message Queue ~수백 MB/s 1μs ~ 10μs 중소 메시지
로컬 Socket ~수 GB/s 1μs ~ 10μs 네트워크 호환 통신
공유 메모리 (SMP) ~수십 GB/s 수십 ns CPU 간 고속 통신
NUMA 원격 접근 ~수 GB/s 수백 ns NUMA 노드 간
InfiniBand/RDMA ~100 Gb/s 1μs ~ 10μs 클러스터 노드 간
Ethernet ~10-100 Gb/s 10μs ~ 100μs 네트워크 통신

공유 상태를 안전하게 만드는 동기화

뮤텍스는 한 번에 하나의 프로세스만 임계 영역에 들어가도록 하는 상호 배제 수단이다. 잠금을 획득한 프로세스만 해제할 수 있으며, pthread_mutex, Windows Mutex로 구현한다.

프로세스 2Mutex (잠금)프로세스 1프로세스 2Mutex (잠금)프로세스 1P1이 잠금 획득대기 (P1이 잠금 중)잠금 해제(1) lock() 요청(2) 임계 영역 실행(3) lock() 요청(4) unlock()(5) 잠금 획득(6) 임계 영역 실행(7) unlock()

세마포어는 제한된 수의 자원에 여러 프로세스가 접근하도록 제어한다. P(wait)는 카운터를 감소시키고 값이 0이면 대기하며, V(signal)는 카운터를 증가시키고 대기 프로세스를 깨운다. sem_wait(), sem_post()가 구현 함수다.

조건 변수는 특정 조건이 만족될 때까지 대기와 신호를 제공한다. 조건 검사와 대기를 원자적으로 처리하기 위해 뮤텍스와 함께 사용하며, pthread_cond_wait(), pthread_cond_signal()로 구현한다.

Atomic 연산은 중단할 수 없는 단일 연산으로 원자성을 보장한다. Lock-free 동기화에 사용되며 Compare-And-Swap(CAS), Test-And-Set, Fetch-And-Add가 대표적이다. C11 _Atomic, C++11 std::atomic이 구현 수단이다.

운영 환경에서 만나는 IPC

운영체제 서비스에서는 데몬 프로세스와 클라이언트가 통신하고, X Window System 및 Wayland는 클라이언트-서버 IPC를 사용한다. D-Bus는 Linux 데스크톱 애플리케이션의 메시지 버스이며, SystemD는 서비스 관리와 프로세스 간 통신을 담당한다.

데이터베이스는 애플리케이션과 DB 서버 사이에 소켓 통신을 사용한다. 인메모리 DB는 프로세스 간 데이터 공유에 공유 메모리를 쓸 수 있고, 비동기 작업은 메시지 큐로 처리할 수 있다.

Nginx와 Apache의 멀티프로세스 모델은 Worker 프로세스를 사용하며, FastCGI는 웹 서버와 애플리케이션 서버를 소켓으로 연결한다. Memcached와 Redis 같은 캐시 서버도 네트워크 통신 경로에 놓인다.

분산 시스템에서는 MPI가 고성능 컴퓨팅 클러스터에 사용되고, Hadoop은 MapReduce 노드 간 통신을 수행한다. Spark는 RDD 연산과 노드 간 데이터 교환에 IPC 경로를 사용하며, Kubernetes에서는 Service와 Pod가 컨테이너 간 통신을 제공한다.

임베디드 환경에서는 RTOS 태스크가 메시지 큐와 세마포어로 통신한다. 차량 내 ECU는 CAN 버스를 사용하며, 멀티코어 마이크로컨트롤러는 공유 메모리를 사용할 수 있다.

설계할 때 남는 선택 기준

성능에서는 통신 지연 시간, 데이터 전송 속도, 복사와 컨텍스트 스위칭 오버헤드, 프로세스·프로세서 수가 증가할 때의 성능 유지 여부를 함께 본다.

신뢰성 측면에서는 통신 실패와 타임아웃을 처리하고, 순환 대기를 피해서 데드락을 방지해야 한다. 손상된 메시지의 감지와 재전송, 한 프로세스 장애가 전체 시스템으로 번지지 않게 하는 보호도 필요하다.

공유 자원 접근 권한, 민감 데이터 암호화, 통신 상대방 인증, 프로세스 간 격리는 보안 설계의 범위다. POSIX 같은 표준 API를 쓰고 플랫폼별 세부 사항을 추상화하면 다양한 OS와 아키텍처에 대한 이식성을 확보할 수 있다.

RDMA·CXL과 확장되는 통신 모델

RDMA는 네트워크 카드가 CPU 개입 없이 직접 메모리에 접근하는 제로 복사 방식이다. 레이턴시는 마이크로초 수준이고 대역폭은 100 Gbps 이상이며, InfiniBand·RoCE·iWARP 프로토콜이 사용된다.

CXL(Compute Express Link)은 CPU, 가속기, 메모리 사이의 캐시 일관성을 유지한다. PCIe 기반 고속 인터커넥트로 낮은 레이턴시를 제공하며, 풀링된 메모리 자원을 공유하고 CPU + GPU + FPGA + 메모리를 이종으로 통합한다.

gRPC는 Protocol Buffers 기반의 고성능 RPC 프레임워크다. HTTP/2의 멀티플렉싱과 스트리밍을 지원하고 언어·OS에 독립적이어서 클라우드 네이티브 애플리케이션의 마이크로서비스 통신에 쓰인다.

공유 메모리 프레임워크로는 C++ 공유 메모리 라이브러리인 Boost.Interprocess, 제로 복사 공유가 가능한 인메모리 데이터 포맷 Apache Arrow, 공유 메모리 기반 고속 패킷 처리 도구인 DPDK(Data Plane Development Kit)가 있다.

광 인터커넥트는 실리콘 포토닉스로 대역폭 증가를 추구한다. Gen-Z와 CCIX는 캐시 일관성을 지원하는 차세대 인터커넥트이며, NVDIMM과 Optane은 Persistent Memory를 통한 영구 공유 메모리와 연결된다. CPU + GPU + TPU 간 고속 통신을 위한 AI 가속기 통합도 이어진다.

메모리를 중심에 두고 프로세서를 배치하는 메모리 중심 아키텍처, CPU·메모리·스토리지를 분리해 풀링하는 디스어그리게이트 아키텍처, 함수 간 이벤트 기반 통신을 쓰는 서버리스 컴퓨팅, 엣지 디바이스 간 경량 IPC가 새로운 통신 모델로 제시된다.

IPC운영체제공유 메모리동기화NUMA