본문 바로가기
CS/운영체제

[CS] 프로세스 간 통신 (Inter Process Communication, IPC)

by yseee 2026. 5. 11.
반응형

 

안녕하세요! SSAFY 15기 유상은 기자입니다.

 

오늘은 운영체제의 개념 중 하나인
IPC(Inter-Process Communication, 프로세스 간 통신) 대해 정리해보려고 합니다.


1. IPC란 무엇인가?

IPC (Inter-Process Communication)

프로세스 간 데이터를 주고받기 위한 통신 방식

프로세스는 왜 직접 통신할 수 없을까?

프로세스(Process)는 운영체제에서 실행 중인 프로그램이다.

운영체제는 각 프로세스에게 독립된 메모리 공간을 제공하며 실행한다.
이를 프로세스 격리(Process Isolation)라고 한다.

 

이 구조 덕분에

  • 안정성과 보안이 향상되고
  • 하나의 프로세스 오류가 전체 시스템에 영향을 덜 주게 된다.

하지만 문제도 존재한다.

프로세스들은 서로 메모리를 직접 공유할 수 없기 때문에 데이터를 바로 주고받을 수 없다.

예를 들어 현대 프로그램들은 여러 프로세스가 함께 협력하며 동작한다.

예시

웹 브라우저

  • 브라우저 프로세스
  • 렌더링 프로세스
  • GPU 프로세스
  • 확장 프로그램 프로세스

웹 서버 시스템

  • 요청 처리 프로세스
  • DB 프로세스
  • 로그 저장 프로세스

부모 프로세스와 자식 프로세스

  • 파일 압축 작업
  • 백그라운드 작업 처리

즉, 서로 협력해야 하는 프로세스들은 데이터를 주고받을 수 있는 별도의 통신 방법이 필요하다.

그래서 등장한 것이 바로 IPC이다.


2. IPC의 목적

IPC의 목적은 크게 두 가지로 볼 수 있다.

2-1. 데이터 전달

프로세스 간 필요한 데이터를 주고받는다.

 

예:

  • 부모 프로세스 → 자식 프로세스 작업 전달
  • 서버 → 클라이언트 응답 전달
  • 웹 서버 → DB 요청 전달

2-2. 작업 동기화

여러 프로세스가 동시에 같은 자원에 접근하면 문제가 발생할 수 있다.

 

예:

  • 동시에 같은 파일 수정
  • 동시에 같은 메모리 접근

따라서 실행 순서를 조정하고 충돌을 방지하는 동기화 과정이 필요하다.


3. IPC의 두 가지 방식

IPC는 크게 두 가지 방식으로 나뉜다.

방식 핵심 아이디어
Message Passing 데이터를 전달
Shared Memory 메모리 공간 자체를 공유

 


4. IPC의 첫 번째 방식 - Message Passing

가장 먼저 등장한 IPC 방식은 Message Passing (메시지 전달) 방식이다.

핵심 아이디어는 단순하다.

“프로세스끼리 직접 메모리를 공유하지 말고,
운영체제가 중간에서 데이터를 전달하자”

 

구조는 다음과 같다.

Process A
→ Kernel
→ Process B

프로세스는 직접 데이터를 전달하지 못하고 반드시 운영체제를 거친다.

왜 운영체제를 거칠까?

프로세스는 서로 메모리에 직접 접근할 수 없기 때문이다.

그래서 운영체제가 중간에서 데이터를 안전하게 전달해 준다.

이 과정에서 등장하는 중요한 개념이 바로 System Call이다.

 

System Call은 사용자 프로그램이 운영체제 기능을 요청하는 방식이다.

 

즉 프로세스는 운영체제에게

"운영체제야,
이 데이터를 다른 프로세스에게 전달해줘"

라고 요청하는 것이다.

📌Message Passing은 안전하지만 운영체제 개입 비용이 존재하는 방식

Pipe - 대표적인 Message Passing 방식

Pipe는 대표적인 IPC 방식 중 하나이다.

한쪽 프로세스가 데이터를 쓰고(write)

다른 프로세스가 데이터를 읽는다(read)

그래서 이름도 “파이프(pipe)”이다.

마치 물이 파이프를 따라 흐르는 것처럼 데이터가 전달된다.

어디에 사용할까?

대표적인 예시는 리눅스 명령어이다.

ls | grep txt
  • ls → 파일 목록 출력
  • grep txt → txt 파일만 필터링

데이터 생성 → 다른 프로세스가 가공

형태로 협력하는 것이다.

Pipe 종류

종류 특징
unnamed pipe 부모-자식 프로세스 관계
named pipe(FIFO) 관계 없는 프로세스도 가능

 


5. Message Passing은 왜 느릴까?

Message Passing은 안전성이 높다.

하지만 성능 비용이 존재한다.

왜냐하면 운영체제가 계속 개입하기 때문이다.

 

흐름을 보면 다음과 같은 형태로 동작한다.

User Mode
↓
Kernel Mode
↓
다시 User Mode

즉 데이터를 전달할 때마다 커널을 반드시 거쳐야 한다.

왜 비용이 발생할까?

  • mode switching 비용
  • 데이터 복사 비용
  • context switching 가능성

등이 발생한다.

 

예를 들어 다음과 같이 데이터 복사가 발생한다.

Process A
→ kernel buffer 복사
→ Process B

따라서 데이터 크기가 커질수록 성능 비용도 증가하게 된다.


6. IPC의 두 번째 방식 - Shared Memory

운영체제는 여기서 새로운 문제를 마주한다.

“굳이 데이터를 계속 복사해야 할까?”

 

그래서 등장한 방식이 Shared Memory (공유 메모리)이다.

 

Shared Memory는:

프로세스들이 같은 메모리 공간 일부를 공유하는 방식

 

즉 데이터를 계속 전달하는 것이 아니라,

아예 같은 공간을 함께 사용하는 것이다.

 

예를 들어

프로세스 A:
공유 메모리에 "hello" 저장

프로세스 B:
공유 메모리에서 "hello" 읽음

즉 A가 쓴 데이터를 B가 바로 읽을 수 있다.

마치 같은 메모장을 함께 사용하는 느낌이다.

왜 빠를까?

Shared Memory는 커널 개입 감소, 데이터 복사 감소가 가능하다.

Process A ↔ Shared Memory ↔ Process B

형태로 직접 메모리에 접근한다.

그래서 일반 메모리 접근처럼 빠르게 동작할 수 있다.

 

📌 Shared Memory는 매우 빠르지만 동기화 문제가 발생할 수 있는 방식


7. Shared Memory의 문제점

속도는 빠르지만 문제점도 존재한다.

두 프로세스가 동시에 접근하면 데이터 충돌이 발생할 수 있다.

이 문제를 해결하기 위해 Mutex, Semaphore 같은 동기화 기법이 사용된다.


8. Signal - 이벤트를 알리는 IPC

앞에서 본 IPC 방식들은 데이터를 전달하는 목적이 강했다.

하지만 Signal은 조금 다르다.

 

Signal은 데이터를 전달하기보다는 특정 이벤트 발생을 알리는 방식에 가깝다.

예를 들어, 다음과 같은 상황을 프로세스에게 빠르게 알린다.

"강제 종료해"
"Ctrl + C 입력됨"
"잘못된 메모리 접근 발생"

대표적인 Signal

Signal 의미
SIGINT Ctrl + C 입력
SIGKILL 강제 종료
SIGTERM 종료 요청
SIGSEGV 잘못된 메모리 접근

 

특징

  • 비동기 방식
  • 빠르고 단순함
  • 데이터 전달보다 이벤트 알림 목적

9. IPC의 확장 - Socket과 RPC

지금까지는 같은 컴퓨터 내부에서의 IPC를 살펴봤다.

하지만 현대 시스템은 여러 서버가 함께 동작한다.

서버 A
↔ 서버 B
↔ 서버 C

이런 구조에서는 네트워크를 통한 통신이 필요하다.

여기서 사용하는 것이 Socket과 RPC이다.

Socket

Socket은 프로세스 간 네트워크 통신을 가능하게 하는 방식이다.

즉 같은 컴퓨터 내부뿐 아니라 다른 컴퓨터와도 통신할 수 있다.

RPC (Remote Procedure Call)

RPC다른 컴퓨터의 함수를 마치 내 함수처럼 호출하는 방식이다.

함수 호출처럼 보이지만 실제로는 네트워크 통신이 일어난다.

 

대표 사례:

  • gRPC
  • REST API 기반 서비스

10. 프로그래밍 언어별 IPC 사용

IPC 개념은 운영체제 개념이지만 실제 사용 방식은 언어마다 조금씩 다르다.

 

예시 - pipe

C 언어

pipe(fd);
fork();
read();
write();

운영체제 IPC 기능을 시스템 콜 형태로 직접 사용하는 경우가 많다.

Python

from multiprocessing import Pipe

고수준 라이브러리 형태로 쉽게 사용할 수 있다.

Java

Java는 운영체제 pipe를 직접 다루기보다

PipedInputStream
PipedOutputStream

같은 방식으로 추상화하여 제공한다.

언어 특징
C 운영체제 IPC 기능 직접 사용
Python 고수준 라이브러리 제공
Java JVM 기반 추상화 제공

 

참고 자료: 이것이 취업을 위한 컴퓨터 과학이다 with CS 기술 면접


📢 SSAFY 공식 채널 안내

 

📸 기자단 SNS 바로가기 →
SSAFY 기자단의 다양한 콘텐츠(SSAFY 생활, IT 지식, 취업 및 현직자 이야기)는 아래 채널에서 확인하실 수 있습니다.

 

🎥 SSAFY 유튜브 | 헬로싸피(싸피티비) 바로가기 →
AI, 취업, 인생 꿀팁까지! 라이브 방송과 싸피티비 콘텐츠가 주기적으로 방송됩니다.

 

🌐 SSAFY 공식 홈페이지 바로가기 →
SSAFY의 공식 홈페이지를 통해 주요 일정 및 내용을 확인해 주세요.



반응형