1. 사전적 정의
IPC(Inter Process Communication)이란, OS상에서 서로 독립적으로 실행되는 프로세스들이
서로 데이터를 주고 받거나 실행 흐름을 동기화하기 위해서 사용하는 매커니즘을 의미한다.
본래 프로세스(Process)는 보안과 안정성을 위해 서로가 할당 받은 메모리 공간에 접근할 수 없는 독립된 섬과 같지만
몇몇의 복잡한 소프트웨어 시스템에서는 각기 다른 기능을 수행하는 프로세스들이 정보를 공유해야 하기 때문에
운영체제가 제공하는 '특수한 통로'를 통해 데이터를 교환할 수 있다.
2. 주요 통신 방식의 매커니즘
① 공유 메모리(Shared Memory)
- 사전적 정의: 두 개 이상의 프로세스가 운영체제로부터 할당받은 동일한 물리적 메모리 영역을 각자의 주소 공간에 매핑하여 공동으로 점유하는 방식
- 상세 설명: 이는 아파트 단지 내의 공동 게시판과 같은 구조를 가짐. 특정 주민(프로세스)이 게시판에 정보를 적어두면, 다른 주민이 우체국이나 관리소를 거치는 별도의 배달 과정 없이 그 자리에 가서 즉시 내용을 확인할 수 있는 것과 같음. IPC 기법 중 유일하게 데이터를 복사(Copy)하는 오버헤드가 발생하지 않고 커널의 개입을 최소화하기 때문에 통신 속도가 가장 빠름. 하지만 여러 프로세스가 동시에 같은 위치에 글을 쓰려 할 때 발생하는 충돌을 막기 위해, 한 번에 한 명만 게시판을 이용하도록 통제하는 세마포어(Semaphore) 등의 동기화 처리가 필수적임.
(💡알면 좋고)
세마포어(Semaphore)란?
세마포어는 여러 개의 프로세스가 공유 자원에 동시에 접근하는 것을 제어하기 위해 사용하는 신호기(Flag) 메커니즘을 의미한다. 마치 공중화장실 입구에 걸린 '사용 중/비어있음' 표지판과 같음.
표지판이 '비어있음'일 때만 사용자가 들어가서 문을 잠글 수 있고(Wait/P 연산), 사용이 끝나고 나오면 다시 '비어있음'으로 상태를 변경(Signal/V 연산)하여 대기 중인 다른 프로세스에게 차례를 넘겨줌. 실무적으로는 Electron이나 Python 멀티 프로세싱 환경에서 공유 메모리 데이터가 깨지는 레이스 컨디션(Race Condition)을 방지하는 가장 기본적인 안전장치 역할을 수행함.
② 메시지 큐 (Message Queues)
- 사전적 정의: 커널에서 관리하는 연결 리스트(Linked List) 형태의 메시지 저장소를 통해 데이터를 비동기적으로 주고받는 방식
- 상세 설명: 이는 아파트 입구에 설치된 무인 택배함과 유사한 구조를 가짐. 송신자(프로세스)가 택배함에 물건을 넣어두면, 수신자는 자신이 원하는 시간에 해당 물건을 찾아갈 수 있음. 메시지마다 고유한 타입을 설정할 수 있어 수신자가 특정 종류의 데이터만 선택적으로 처리하는 것이 가능하며, 송수신 측이 동시에 실행 상태가 아니어도 데이터 전달이 보장되는 비동기적 특성을 가짐.
③ 파이프 (Pipes & Named Pipes)
- 사전적 정의: 운영체제가 생성한 단방향 혹은 양방향 통로를 통해 프로세스 간에 바이트 스트림을 전달하는 방식
- 상세 설명: 두 집 사이를 연결한 플라스틱 관을 통해 쪽지를 밀어 넣는 것과 같음. 기본적으로 한쪽에서는 쓰기만 하고 다른 쪽에서는 읽기만 하는 단방향 구조(Anonymous Pipe)가 일반적이지만, 이름이 있는 파이프(Named Pipe)를 사용하면 전혀 연관이 없는 프로세스끼리도 통신로를 확보할 수 있음. 데이터가 들어온 순서대로 나가는 FIFO(First-In-First-Out) 원칙을 철저히 따르며 통신로가 가득 차면 송신 프로세스가 대기 상태에 빠지는 흐름 제어 기능이 내장되어 있음.
(💡알면 좋고)
표준 스트림(Standard Streams)과 리다이렉션이란?
모든 프로세스는 실행 시 기본적으로 3가지의 통로(입력, 출력, 에러)를 할당받는데, 이를 표준 스트림이라 부른다.
마치 집마다 기본으로 설치된 수도관이나 가스관과 같음.
리눅스 터미널에서 ls | grep과 같이 파이프(|) 기호를 사용하는 것은, 앞선 프로그램의 출력을 다음 프로그램의 입력으로 연결하는 '배관 공사'를 실시간으로 하는 것과 같음. 실무적으로는 Electron 앱에서 Python 스크립트를 spawn하여 실행할 때, Python의 stdout(출력)을 Electron의 입력으로 받아 실시간 로그를 화면에 뿌려주는 구조에서 가장 빈번하게 활용됨.
'개발 잡지식' 카테고리의 다른 글
| Syntax sugar - 문법 설탕이란? (0) | 2026.03.10 |
|---|---|
| l10n? 무슨 약어일까? (0) | 2026.03.10 |
| ---임시 : Fastfy + Svelte 프로젝트 (2) | 2025.07.14 |
| AI + MerMaid를 통해서 손쉽게 다이어그램 그리기 (2) | 2025.07.10 |