프로세스 간 통신 (Inter-Process Communication, IPC)

프로세스 간 통신은 서로 다른 프로세스들이 데이터를 주고받거나 서로의 동작을 조율하기 위해 사용하는 메커니즘.
한 프로세스의 출력이 다른 프로세스의 입력으로 사용될 수 있다.
이를 통해 프로세스들은 데이터를 교환하고, 작업을 동기화하며, 리소스를 효율적으로 활용할 수 있다.

프로세스 간 통신(IPC)에 대해 체계적으로 설명해드리겠습니다. 이 개념을 더 쉽게 이해하기 위해, 실제 생활의 예시와 함께 설명을 시작하겠습니다.

Shared Memory and Message Passing
Source: https://www.geeksforgeeks.org/inter-process-communication-ipc/

장점

  • 프로세스 간 데이터 공유 및 협력 가능
  • 모듈화 및 유연한 시스템 설계 가능

단점

  • 구현 복잡성 증가
  • 동기화 및 데드락 문제 발생 가능성

IPC의 주요 방식

파이프(Pipe)

파이프는 가장 오래되고 간단한 IPC 방식으로, 한 프로세스의 출력이 다른 프로세스의 입력으로 직접 전달된다.

  • 단방향 통신을 위한 간단한 메커니즘
  • 주로 부모-자식 프로세스 간 통신에 사용
종류

일반 파이프:

  • 부모-자식 프로세스 간 단방향 통신
  • 표준 입출력 스트림 사용
  • 예: Unix의 ‘|’ 연산자

명명된 파이프(Named Pipe):

  • 서로 관련 없는 프로세스 간 통신 가능
  • 파일 시스템에 이름을 가진 특별한 파일로 존재
  • 양방향 통신 지원

메시지 큐(Message Queue)

메시지 형태로 데이터를 주고받는 방식.

특징
  • 구조화된 데이터 전송 가능
  • 비동기 통신 지원
  • 여러 프로세스가 동시에 사용 가능
사용 예
1
2
3
4
5
6
7
8
// 메시지 큐 생성
msgid = msgget(KEY, IPC_CREAT | 0666);

// 메시지 전송
msgsnd(msgid, &message, sizeof(message), 0);

// 메시지 수신
msgrcv(msgid, &message, sizeof(message), 0, 0);

공유 메모리(Shared Memory)

여러 프로세스가 동일한 메모리 영역을 공유하여 통신하는 방식.

장점
  • 가장 빠른 IPC 방식
  • 대용량 데이터 공유에 효율적
  • 직접적인 메모리 접근 가능
주의사항
  • 동기화 메커니즘 필요
  • 메모리 관리 주의 필요
  • 데이터 일관성 유지 중요

세마포어(Semaphore)

공유 자원에 대한 접근을 제어하는 신호 체계.

용도
  • 프로세스 동기화
  • 상호 배제 구현
  • 리소스 카운팅
구현 예
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
// 세마포어 생성
sem_t *sem = sem_open("mysem", O_CREAT, 0644, 1);

// 세마포어 획득
sem_wait(sem);

// 임계 영역 코드
// …

// 세마포어 해제
sem_post(sem);

소켓(Socket)

네트워크를 통한 프로세스 간 통신 방식.

특징
  • 로컬 및 원격 통신 가능
  • 다양한 프로토콜 지원
  • 양방향 통신 가능
사용 사례
  • 클라이언트-서버 애플리케이션
  • 네트워크 서비스
  • 분산 시스템

시그널(Signal)

비동기적인 이벤트를 처리하기 위한 소프트웨어 인터럽트.

주요 시그널
  • SIGTERM: 종료 요청
  • SIGKILL: 강제 종료
  • SIGUSR1/2: 사용자 정의 시그널

IPC 선택 시 고려사항

  1. 통신 패턴

    • 단방향 vs 양방향
    • 동기 vs 비동기
    • 1:1 vs 1:N
  2. 성능 요구사항

    • 지연 시간
    • 처리량
    • 리소스 사용량
  3. 신뢰성

    • 데이터 손실 가능성
    • 오류 처리
    • 복구 메커니즘

프로세스 간 통신의 실제 응용

  1. 데이터베이스 시스템

    • 쿼리 프로세서와 저장소 엔진 간 통신
    • 캐시 관리
    • 트랜잭션 조정
  2. 웹 서버

    • 워커 프로세스 관리
    • 로드 밸런싱
    • 세션 관리
  3. 운영체제

    • 장치 드라이버 통신
    • 시스템 서비스 간 조정
    • 프로세스 스케줄링

프로세스 간 통신의 발전 방향

  1. 분산 시스템

    • 클라우드 환경에서의 IPC
    • 마이크로서비스 아키텍처
    • 컨테이너 간 통신
  2. 새로운 하드웨어 지원

    • RDMA(Remote Direct Memory Access)
    • 하드웨어 가속
    • 새로운 버스 아키텍처
  3. 보안 강화

    • 암호화 통신
    • 접근 제어
    • 격리 정책

참고 및 출처