Back to blog
Feb 15, 2024
4 min read

IPC (Inter-Process Communication)

프로세스 간 통신 방법과 각 기법의 특징

IPC(Inter-Process Communication)는 서로 다른 프로세스가 데이터를 주고받는 메커니즘이다. 프로세스는 독립적인 메모리 공간을 가지므로 직접 데이터를 공유할 수 없다. IPC는 이러한 격리된 프로세스들이 협력하여 작업을 수행할 수 있도록 해준다.

파이프 (Pipe)

파이프는 단방향 통신 채널이다. 한쪽 끝에서 쓰고 다른 쪽 끝에서 읽는 구조로, 데이터가 한 방향으로만 흐른다. Unix/Linux의 파이프 연산자(|)가 이를 사용한다.

익명 파이프(Anonymous Pipe)는 부모-자식 프로세스 간 통신에 사용된다. pipe() 시스템 콜로 생성하며, 파일 디스크립터를 통해 읽고 쓰고 프로세스가 종료되면 사라진다.

명명된 파이프(Named Pipe, FIFO)는 파일 시스템에 이름을 가진 파이프다. 부모-자식 관계가 아닌 프로세스들도 통신할 수 있다. mkfifo() 명령어로 생성한다.

명명된 파이프는 파일처럼 보이지만 실제로는 메모리에 데이터를 저장하며 서로 관련 없는 프로세스들도 같은 경로를 알고 있으면 통신할 수 있다.

공유 메모리 (Shared Memory)

공유 메모리는 여러 프로세스가 같은 메모리 영역에 접근하는 방식으로 가장 빠른 IPC 방법이며, 대용량 데이터 교환에 적합하다.

데이터를 복사할 필요 없이 메모리에 직접 읽고 쓰므로, 커널을 거치지 않아 속도가 빠르다. 반면 여러 프로세스가 동시에 같은 메모리를 수정하면 경쟁 상태(Race Condition)가 생기므로, 세마포어나 뮤텍스로 동기화해야 한다.

메시지 큐 (Message Queue)

메시지 큐는 메시지 단위로 데이터를 주고받는 큐 구조로 커널이 메시지를 관리하며, 프로세스는 큐에 메시지를 넣거나 꺼낸다.

메시지 우선순위를 지원해 중요한 메시지를 먼저 처리할 수 있다. 송신자는 수신자가 메시지를 읽을 때까지 기다리지 않아도 되는 비동기 통신도 가능하다.

기능설명예시
메시지 타입msg_type으로 분류1:일반, 2:긴급, 3:알림
선택적 수신특정 타입만 수신 가능msgrcv(…, type:2)
비동기송신자가 블로킹 안 됨메시지 보내고 즉시 반환
FIFO 순서같은 타입 내에서 순서 보장타입 1: [A→B→C]
크기 제한시스템 한계 존재보통 8KB-16KB

소켓 (Socket)

소켓은 네트워크를 통한 프로세스 간 통신을 위한 인터페이스다. 같은 컴퓨터의 프로세스뿐 아니라 네트워크로 연결된 다른 컴퓨터의 프로세스와도 통신할 수 있다.

Unix Domain Socket은 같은 시스템 내의 프로세스 간 통신에 사용되며 네트워크 스택을 거치지 않으므로 TCP/UDP 소켓보다 빠르다. TCP/UDP Socket은 네트워크를 통한 통신에 사용된다. 원격 서버와 클라이언트 간 통신의 표준 방법이다.

시그널 (Signal)

시그널은 프로세스에게 이벤트를 알리는 비동기 메커니즘이다. 소프트웨어 인터럽트로 볼 수 있으며, 프로세스 제어나 예외 처리에 사용된다.

비동기성이 시그널의 특징이다. 언제든지 발생할 수 있으며, 프로세스는 시그널 핸들러를 등록하여 처리한다.

시그널은 간단한 알림에는 유용하지만, 복잡한 데이터를 전달하기에는 적합하지 않다. 주로 프로세스 제어나 타임아웃 처리에 사용된다.

IPC 방식속도복잡도데이터 크기프로세스 관계실무 사례
파이프중간낮음제한적부모-자식Shell 명령 파이프라인
Named Pipe중간낮음제한적무관로그 수집기
공유 메모리매우 빠름높음대용량무관PostgreSQL 버퍼, Redis
메시지 큐중간중간제한적무관비동기 작업 큐
Unix Socket빠름중간무제한로컬Docker, MySQL, Nginx
TCP/UDP Socket느림중간무제한네트워크REST API, gRPC
시그널빠름낮음없음무관프로세스 종료, Reload

IPC는 분산 시스템의 기본이며, 현대 백엔드 아키텍처는 다양한 IPC 메커니즘의 조합으로 구성된다. 각 방법의 특성을 이해하고 적절히 활용하는 것이 성능 최적화의 핵심이다.