티스토리 뷰

반응형

 

 

📮 메일슬롯(Mailslot): 운영체제가 제공하는 "한 방향 메시지 우체통"


🧠 메일슬롯이란?

**메일슬롯(Mailslot)**은
한쪽 프로세스가 메시지를 보내고, 다른 프로세스가 이를 읽을 수 있도록 하는
운영체제 제공의 “단방향 메시지 기반 통신” 시스템입니다.

마치 우체통처럼:

  • 발신자(보내는 쪽)는 메시지를 우체통에 넣기만 하고
  • 수신자(받는 쪽)는 정해진 시간마다 와서 확인해서 꺼내 갑니다.

운영체제는 이 우체통 역할을 하는 메일슬롯을 커널 자원으로 만들어 관리합니다.


🏗️ 메일슬롯의 구조

[Writer 프로세스] → (Mailslot) → [Reader 프로세스]
  • Reader는 메일슬롯을 생성함 (우체통 설치)
  • Writer는 메일슬롯 이름을 알고 있어야 메시지를 보낼 수 있음
  • 메시지는 운영체제가 임시로 보관
  • Reader가 꺼내가면 메시지는 사라짐 (1회성 읽기)

🛠️ 어떻게 작동하나? (동작 순서)

1. 수신자(Reader) 측

HANDLE hSlot = CreateMailslot(
  "\\\\.\\mailslot\\MySlot", // 고유한 이름
  0,                         // 메시지 최대 크기 (0이면 제한 없음)
  MAILSLOT_WAIT_FOREVER,    // 대기 시간
  NULL
);
  • 고유한 이름을 가진 메일슬롯을 생성
  • 이 이름은 Writer가 메시지를 보낼 때 필요

2. 송신자(Writer) 측

HANDLE hWrite = CreateFile(
  "\\\\.\\mailslot\\MySlot",  // Reader가 만든 메일슬롯 이름
  GENERIC_WRITE,
  FILE_SHARE_READ,
  NULL,
  OPEN_EXISTING,
  FILE_ATTRIBUTE_NORMAL,
  NULL
);

WriteFile(hWrite, "Hello", 5, &written, NULL);
  • Reader가 만든 우체통 이름으로 접근
  • WriteFile로 메시지 전송

3. Reader가 메시지 수신

ReadFile(hSlot, buffer, sizeof(buffer), &read, NULL);
  • 수신자는 ReadFile로 대기하거나 주기적으로 확인
  • 읽고 나면 해당 메시지는 메일슬롯에서 삭제됨

📬 메일슬롯의 특징 요약

항목 설명

통신 방향 단방향 (Writer → Reader)
메시지 타입 문자열 기반
통신 범위 같은 컴퓨터 또는 같은 네트워크 내 다른 컴퓨터 가능
연결 필요성 없음 (비연결형)
속도 빠르지만 실시간 통신에는 부적합
운영체제 지원 Windows에서만 지원되는 IPC 방식

🎯 메일슬롯은 언제 유용할까?

  • 시스템 모니터링 툴에서 여러 클라이언트가 하나의 서버로 로그를 보내는 경우
  • 메시지 양이 적고, 전달 순서가 완벽히 중요하지 않은 경우
  • 간단한 브로드캐스트 통신이 필요한 경우

예를 들어,

  • 여러 프로그램이 하나의 중앙 로깅 프로세스로 메시지를 보내고 싶을 때
  • 사용자 이벤트 감지기들이 경고 메시지를 하나의 UI로 전달할 때

이런 단방향, 단순 메시지 전달용 구조에 메일슬롯은 매우 적합합니다.


❗ 한계점과 제약

한계 설명

단방향 송신자는 수신자로부터 응답을 받을 수 없음
메시지 확인 불가 메시지가 수신되었는지 보장하지 않음 (ACK 없음)
보안 취약 네임 기반 식별이라 악의적 접근 가능성 존재
속도 제한 실시간 IPC에는 부적합

❗ 수신 여부 보장이 없기 때문에
“확실하게 데이터가 전달되어야 하는 시스템”에는 부적합합니다.


🔄 다른 IPC 방식과의 비교

방식 양방향? 구조 메시지 보관 네트워크 통신 윈도우 전용

메일슬롯 ❌ 단방향 이름 기반 O (커널이 보관) O (같은 LAN)
Named Pipe ✅ 양방향 서버-클라이언트 X (즉시 읽어야 함) O
메시지 큐 ❌ 또는 ✅ 큐 구조 O X (로컬 전용) ❌ (POSIX/Linux)
공유 메모리 메모리 맵 공유 X X
소켓 연결 기반 사용자 처리 ✅ (IP 기반)

✅ 마무리 요약

항목 내용

정체 운영체제가 제공하는 단방향 메시지 통신 IPC
특징 수신자는 메일슬롯 생성, 송신자는 그 이름으로 메시지 보냄
장점 구조 단순, 네트워크 확장 가능, 코드 짧음
단점 단방향, 응답 불가, 실시간성 약함
대표 용도 로깅, 이벤트 알림, 단순 브로드캐스트

📮 메일슬롯은 복잡한 설정 없이도 간단한 메시지를 주고받을 수 있게 해주는 도구입니다.
“가볍고 빠른 메시지 알림용”으로는 유용하지만,
양방향 통신이나 신뢰성 있는 데이터 처리에는 적합하지 않습니다.

 

 

2025.03.24 - [프로그래밍/시스템 프로그래밍] - IPC는 왜 필요할까?

 

 

반응형

'프로그래밍 > 시스템 프로그래밍' 카테고리의 다른 글

프로세스와 환경변수  (0) 2025.03.26
부모 프로세스 vs 자식 프로세스  (0) 2025.03.24
IPC는 왜 필요할까?  (0) 2025.03.24
🧠 UC Count란 무엇인가?  (0) 2025.03.24
커널 오브젝트와 핸들  (0) 2025.03.24
반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/06   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30
글 보관함