Interprocess Communications

Windows 운영 체제는 애플리케이션 간의 통신 및 데이터 공유를 용이하게 하는 메커니즘을 제공합니다. 전체적으로 이러한 메커니즘에서 사용하도록 설정된 활동을 IPC( Interprocess Communications )라고 합니다. IPC의 일부 형태는 여러 전문 프로세스 간의 노동 분담을 용이하게합니다. 다른 형태의 IPC는 네트워크의 컴퓨터 간 노동 분담을 용이하게 합니다.

일반적으로 애플리케이션은 클라이언트 또는 서버로 분류된 IPC를 사용할 수 있습니다. 클라이언트는 다른 애플리케이션 또는 프로세스에서 서비스를 요청하는 애플리케이션 또는 프로세스입니다. 서버는 애플리케이션 또는 클라이언트 요청에 응답하는 프로세스입니다. 대부분의 애플리케이션은 상황에 따라 클라이언트와 서버 모두의 역할을 합니다. 예를 들어 워드 프로세싱 애플리케이션은 서버 역할을 하는 스프레드시트 애플리케이션에서 제조 비용의 요약 테이블을 요청하는 클라이언트 역할을 할 수 있습니다. 그러면 스프레드시트 애플리케이션이 자동화된 인벤토리 제어 애플리케이션에서 최신 인벤토리 수준을 요청하는 클라이언트 역할을 할 수 있습니다.

애플리케이션이 IPC의 이점을 누릴 수 있다고 결정한 후에는 사용할 수 있는 IPC 메서드를 결정해야 합니다. 애플리케이션에서 여러 IPC 메커니즘을 사용할 가능성이 높습니다. 이러한 질문에 대한 답변은 하나 이상의 IPC 메커니즘을 사용하여 애플리케이션이 이점을 얻을 수 있는지 여부를 결정합니다.

  • 애플리케이션이 네트워크의 다른 컴퓨터에서 실행되는 다른 애플리케이션과 통신할 수 있어야 하나요, 아니면 애플리케이션이 로컬 컴퓨터의 애플리케이션과만 통신하기에 충분한가요?
  • 애플리케이션이 다른 운영 체제(예: 16비트 Windows 또는 UNIX)에서 실행 중일 수 있는 다른 컴퓨터에서 실행되는 애플리케이션과 통신할 수 있어야 하나요?
  • 애플리케이션 사용자가 애플리케이션이 통신하는 다른 애플리케이션을 선택해야 하나요, 아니면 애플리케이션이 해당 협력 파트너를 암시적으로 찾을 수 있나요?
  • 애플리케이션이 다른 애플리케이션과 잘라내기 및 붙여넣기 작업을 허용하는 등 일반적인 방식으로 다양한 애플리케이션과 통신해야 하나요, 아니면 통신 요구 사항이 특정 다른 애플리케이션과의 제한된 상호 작용 집합으로 제한되어야 하나요?
  • 성능이 애플리케이션의 중요한 측면인가요? 모든 IPC 메커니즘에는 약간의 오버헤드가 포함됩니다.
  • 애플리케이션이 GUI 애플리케이션 또는 콘솔 애플리케이션이어야 하나요? 일부 IPC 메커니즘에는 GUI 애플리케이션이 필요합니다.

다음 IPC 메커니즘은 Windows에서 지원됩니다.

IPC용 클립보드 사용

클립보드는 애플리케이션 간의 데이터 공유를 위한 중앙 보관소 역할을 합니다. 사용자가 애플리케이션에서 잘라내기 또는 복사 작업을 수행할 때 애플리케이션은 선택한 데이터를 하나 이상의 표준 또는 애플리케이션 정의 형식으로 클립보드에 배치합니다. 그런 다음, 다른 모든 애플리케이션은 클립보드에서 데이터를 검색하여 이해할 수 있는 사용 가능한 형식 중에서 선택할 수 있습니다. 클립보드는 매우 느슨하게 결합된 교환 매체로, 애플리케이션이 데이터 형식에만 동의해야 합니다. 애플리케이션은 동일한 컴퓨터 또는 네트워크의 다른 컴퓨터에 상주할 수 있습니다.

키 포인트: 모든 애플리케이션은 이해하는 데이터 형식에 대해 클립보드를 지원해야 합니다. 예를 들어 텍스트 편집기 또는 워드 프로세서는 최소한 순수 텍스트 형식으로 클립보드 데이터를 생성하고 수락할 수 있어야 합니다. 자세한 내용은 클립보드를 참조하세요.

IPC용 COM 사용

OLE를 사용하는 애플리케이션은 복합 문서, 즉 다양한 애플리케이션의 데이터로 구성된 문서를 관리합니다. OLE는 애플리케이션이 데이터 편집을 위해 다른 애플리케이션에서 쉽게 호출할 수 있도록 하는 서비스를 제공합니다. 예를 들어 OLE를 사용하는 워드 프로세서는 스프레드시트의 그래프를 포함할 수 있습니다. 사용자가 편집할 포함된 차트를 선택하여 워드 프로세서 내에서 스프레드시트를 자동으로 시작할 수 있습니다. OLE는 스프레드시트를 시작하고 편집을 위해 그래프를 표시합니다. 사용자가 스프레드시트를 종료하면 원래 워드 프로세서 문서에서 그래프가 업데이트됩니다. 스프레드시트는 워드 프로세서의 확장으로 나타납니다.

OLE의 기초는 COM(구성 요소 개체 모델)입니다. COM을 사용하는 소프트웨어 구성 요소는 아직 작성되지 않은 구성 요소와도 다양한 다른 구성 요소와 통신할 수 있습니다. 구성 요소는 개체 및 클라이언트로 상호 작용합니다. 분산 COM은 네트워크를 통해 작동할 수 있도록 COM 프로그래밍 모델을 확장합니다.

키 포인트: OLE는 복합 문서를 지원하고 애플리케이션이 선택되면 데이터 편집을 위해 다른 애플리케이션을 자동으로 시작하는 포함되거나 연결된 데이터를 포함할 수 있도록 합니다. 이렇게 하면 OLE를 사용하는 다른 애플리케이션에서 애플리케이션을 확장할 수 있습니다. COM 개체는 인터페이스라고 하는 하나 이상의 관련 함수 집합을 통해 개체의 데이터에 대한 액세스를 제공합니다. 자세한 내용은 COM 및 ActiveX 개체 서비스를 참조하세요.

IPC용 데이터 복사 사용

데이터 복사를 사용하면 애플리케이션이 WM_COPYDATA 메시지를 사용하여 다른 애플리케이션에 정보를 보낼 있습니다. 이 방법을 사용하려면 송신 애플리케이션과 수신 애플리케이션 간의 협력이 필요합니다. 수신 애플리케이션은 정보의 형식을 알고 발신자를 식별할 수 있어야 합니다. 보내는 애플리케이션은 포인터에서 참조하는 메모리를 수정할 수 없습니다.

키 포인트: 데이터 복사를 사용하여 Windows 메시징을 사용하여 다른 애플리케이션에 정보를 빠르게 보낼 수 있습니다. 자세한 내용은 데이터 복사를 참조하세요.

IPC용 DDE 사용

DDE는 애플리케이션이 다양한 형식으로 데이터를 교환할 수 있도록 하는 프로토콜입니다. 애플리케이션은 일회성 데이터 교환 또는 새 데이터를 사용할 수 있게 되면 애플리케이션이 서로 업데이트되는 지속적인 교환에 DDE를 사용할 수 있습니다.

DDE에서 사용하는 데이터 형식은 클립보드에서 사용하는 형식과 동일합니다. DDE는 클립보드 메커니즘의 확장으로 간주할 수 있습니다. 클립보드는 메뉴에서 붙여넣기 명령을 선택하는 등 사용자 명령에 대한 일회성 응답에 거의 항상 사용됩니다. DDE는 일반적으로 사용자 명령에 의해 시작되지만 추가 사용자 상호 작용 없이 계속 작동하는 경우가 많습니다. 더 긴밀하게 결합된 통신 요구 사항이 있는 애플리케이션 간에 특수 목적 IPC에 대한 사용자 지정 DDE 데이터 형식을 정의할 수도 있습니다.

DDE 교환은 동일한 컴퓨터 또는 네트워크의 다른 컴퓨터에서 실행되는 애플리케이션 간에 발생할 수 있습니다.

키 포인트: DDE는 최신 기술만큼 효율적이지 않습니다. 그러나 다른 IPC 메커니즘이 적합하지 않거나 DDE만 지원하는 기존 애플리케이션과 인터페이스해야 하는 경우에도 DDE를 사용할 수 있습니다. 자세한 내용은 동적 데이터 교환동적 데이터 교환 관리 라이브러리를 참조하세요.

IPC용 파일 매핑 사용

파일 매핑 을 사용하면 프로세스에서 파일의 내용을 프로세스의 주소 공간에서 메모리 블록인 것처럼 처리할 수 있습니다. 프로세스는 간단한 포인터 작업을 사용하여 파일 내용을 검사하고 수정할 수 있습니다. 둘 이상의 프로세스가 동일한 파일 매핑에 액세스하는 경우 각 프로세스는 파일의 내용을 읽거나 수정하는 데 사용할 수 있는 자체 주소 공간에서 메모리에 대한 포인터를 받습니다. 프로세스는 멀티태스킹 환경에서 데이터 손상을 방지하기 위해 세마포와 같은 동기화 개체를 사용해야 합니다.

특수한 파일 매핑 사례를 사용하여 프로세스 간에 명명된 공유 메모리 를 제공할 수 있습니다. 파일 매핑 개체를 만들 때 시스템 교환 파일을 지정하면 파일 매핑 개체가 공유 메모리 블록으로 처리됩니다. 다른 프로세스는 동일한 파일 매핑 개체를 열어 동일한 메모리 블록에 액세스할 수 있습니다.

파일 매핑은 매우 효율적이며 무단 데이터 손상을 방지하는 데 도움이 되는 운영 체제 지원 보안 특성도 제공합니다. 파일 매핑은 로컬 컴퓨터의 프로세스 간에만 사용할 수 있습니다. 네트워크를 통해 사용할 수 없습니다.

키 포인트: 파일 매핑은 동일한 컴퓨터의 두 개 이상의 프로세스가 데이터를 공유하는 효율적인 방법이지만 프로세스 간에 동기화를 제공해야 합니다. 자세한 내용은 파일 매핑 및 동기화를 참조 하세요.

IPC용 Mailslot 사용

메일 슬롯은 단방향 통신을 제공합니다. mailslot을 만드는 모든 프로세스는 mailslot 서버입니다. mailslot 클라이언트라는 다른 프로세스는 mailslot에 메시지를 작성하여 mailslot 서버로 메시지를 보냅니다. 들어오는 메시지는 항상 mailslot에 추가됩니다. mailslot은 mailslot 서버에서 메시지를 읽을 때까지 메시지를 저장합니다. 프로세스는 mailslot 서버와 mailslot 클라이언트 모두일 수 있으므로 여러 mailslot을 사용하여 양방향 통신을 수행할 수 있습니다.

mailslot 클라이언트는 로컬 컴퓨터의 mailslot, 다른 컴퓨터의 mailslot 또는 지정된 네트워크 도메인의 모든 컴퓨터에서 동일한 이름의 모든 mailslot에 메시지를 보낼 수 있습니다. 도메인의 모든 mailslot에 브로드캐스트되는 메시지는 400바이트 이하일 수 있는 반면, 단일 mailslot으로 전송된 메시지는 mailslot을 만들 때 mailslot 서버에서 지정한 최대 메시지 크기에 의해서만 제한됩니다.

키 포인트: Mailslots는 애플리케이션이 짧은 메시지를 보내고 받을 수 있는 쉬운 방법을 제공합니다. 또한 네트워크 도메인의 모든 컴퓨터에서 메시지를 브로드캐스트하는 기능도 제공합니다. 자세한 내용은 Mailslots를 참조하세요.

IPC용 파이프 사용

양방향 통신을 위한 파이프에는 익명 파이프와 명명된 파이프의 두 가지 유형이 있습니다. 익명 파이프를 사용하면 관련 프로세스가 서로 정보를 전송할 수 있습니다. 일반적으로 익명 파이프는 부모 프로세스와 데이터를 교환할 수 있도록 자식 프로세스의 표준 입력 또는 출력을 리디렉션하는 데 사용됩니다. 양방향(이중 작업)으로 데이터를 교환하려면 두 개의 익명 파이프를 만들어야 합니다. 부모 프로세스는 쓰기 핸들을 사용하여 한 파이프에 데이터를 쓰는 반면 자식 프로세스는 읽기 핸들을 사용하여 해당 파이프에서 데이터를 읽습니다. 마찬가지로 자식 프로세스는 다른 파이프에 데이터를 쓰고 부모 프로세스는 데이터를 읽습니다. 익명 파이프는 네트워크를 통해 사용할 수 없으며 관련 없는 프로세스 간에 사용할 수도 없습니다.

명명된 파이프는 관련 프로세스가 아닌 프로세스 간 및 다른 컴퓨터의 프로세스 간에 데이터를 전송하는 데 사용됩니다. 일반적으로 명명된 파이프 서버 프로세스는 잘 알려진 이름 또는 클라이언트와 통신할 이름을 가진 명명된 파이프를 만듭니다. 파이프의 이름을 알고 있는 명명된 파이프 클라이언트 프로세스는 명명된 파이프 서버 프로세스에서 지정한 액세스 제한에 따라 다른 쪽 끝을 열 수 있습니다. 서버와 클라이언트가 모두 파이프에 연결되면 파이프에서 읽기 및 쓰기 작업을 수행하여 데이터를 교환할 수 있습니다.

키 포인트: 익명 파이프는 표준 입력 또는 출력을 동일한 컴퓨터의 자식 프로세스로 리디렉션하는 효율적인 방법을 제공합니다. 명명된 파이프는 동일한 컴퓨터 또는 네트워크를 통해 두 프로세스 간에 데이터를 전송하기 위한 간단한 프로그래밍 인터페이스를 제공합니다. 자세한 내용은 파이프를 참조하세요.

IPC용 RPC 사용

RPC를 사용하면 애플리케이션에서 함수를 원격으로 호출할 수 있습니다. 따라서 RPC를 사용하면 IPC를 함수 호출만큼 쉽게 수행할 수 있습니다. RPC는 단일 컴퓨터 또는 네트워크의 다른 컴퓨터에서 프로세스 간에 작동합니다.

Windows에서 제공하는 RPC는 OSF(Open Software Foundation) DCE(분산 컴퓨팅 환경)를 준수합니다. 즉, RPC를 사용하는 애플리케이션은 DCE를 지원하는 다른 운영 체제와 실행되는 애플리케이션과 통신할 수 있습니다. RPC는 서로 다른 하드웨어 아키텍처를 고려하고 서로 다른 환경 간의 바이트 순서를 고려하여 데이터 변환을 자동으로 지원합니다.

RPC 클라이언트와 서버는 긴밀하게 결합되어 있지만 여전히 고성능을 유지합니다. 이 시스템은 RPC를 광범위하게 사용하여 운영 체제의 여러 부분 간에 클라이언트/서버 관계를 용이하게 합니다.

키 포인트: RPC는 자동 데이터 변환 및 다른 운영 체제와의 통신을 지원하는 함수 수준 인터페이스입니다. RPC를 사용하여 긴밀하게 결합된 고성능 분산 애플리케이션을 만들 수 있습니다. 자세한 내용은 Microsoft RPC 구성 요소를 참조하세요.

IPC용 Windows 소켓 사용

Windows 소켓은 프로토콜 독립적 인터페이스입니다. 기본 프로토콜의 통신 기능을 활용합니다. Windows 소켓 2에서 소켓 핸들은 필요에 따라 표준 파일 I/O 함수가 있는 파일 핸들로 사용할 수 있습니다.

Windows 소켓은 BSD(버클리 소프트웨어 배포)에서 처음 대중화된 소켓을 기반으로 합니다. Windows 소켓을 사용하는 애플리케이션은 다른 유형의 시스템에서 다른 소켓 구현과 통신할 수 있습니다. 그러나 모든 전송 서비스 공급자가 사용 가능한 모든 옵션을 지원하는 것은 아닙니다.

키 포인트: Windows 소켓은 현재 및 새로운 네트워킹 기능을 지원할 수 있는 프로토콜 독립적 인터페이스입니다. 자세한 내용은 Windows 소켓 2를 참조하세요.