그룹으로 작업하는 방법
피어 투 피어 그룹화는 개발자가 보안 피어 네트워크를 빠르고 효과적으로 만들 수 있는 기술입니다. 다음 목록에서는 피어 그룹화 애플리케이션을 만들 때의 주요 고려 사항을 식별합니다.
피어 ID 가져오기
그룹을 만들거나 연결하기 전에 피어는 피어 ID를 가져와야 합니다. 이 ID는 그룹에 대한 피어를 고유하게 식별하는 데 사용되는 이름입니다. 피어에 정의된 모든 피어 ID의 열거 목록을 가져오려면 피어에 대한 핸들을 반환하는 PeerEnumIdentities를 호출합니다. 피어 ID를 가져오려면 열거형 핸들과 검색할 멤버 수를 사용하여 PeerGetNextItem 을 호출합니다. pCount 매개 변수가 요청된 피어 ID 수보다 작은 값을 반환할 때까지 PeerGetNextItem을 계속 호출합니다.
피어에 대한 피어 ID가 없는 경우 PeerIdentityCreate를 호출하여 만들 수 있습니다. 피어 ID를 만든 후 피어는 할당된 공개 키가 포함된 ID XML Blob을 생성합니다.
피어 ID 정보는 PeerIdentityGetXML을 호출하여 가져옵니다. 이 피어 ID 정보는 그룹 작성자 또는 관리자가 초대 XML Blob으로 그룹에 가입하는 데 필요한 자격 증명을 발급하는 데 사용됩니다.
피어 ID에 대한 자세한 내용은 Identity Manager API 설명서를 참조하세요.
피어 그룹화 인프라 시작
피어 그룹화 API의 함수가 애플리케이션에서 호출되기 전에 PeerGroupStartup 을 호출해야 합니다. 이 함수는 애플리케이션에 대한 피어 그룹화 인프라를 초기화하고 지원되는 버전을 설정합니다.
그룹 핸들 가져오기
그룹에 연결하고 참여를 시작하려면 피어 그룹에 대한 핸들을 가져와야 합니다. 다음 목록에서는 피어 그룹에 연결하는 세 가지 방법을 식별합니다.
- PeerGroupCreate를 호출하여 피어 그룹을 만듭니다. 이 그룹은 새 피어 그룹을 초기화하고 피어를 소유자 및 단독 관리자로 사용하여 유효한 핸들을 반환합니다.
- PeerGroupJoin을 호출하여 피어 그룹에 조인합니다. 피어 그룹에 가입하려면 피어 그룹 관리자로부터 초대를 받아야 합니다. 초대를 받으려면 초대를 만들고 이메일 또는 FTP와 같은 외부 메커니즘을 통해 사용자에게 보내는 관리자에게 ID 정보 XML Blob을 보냅니다. 초대 및 피어 ID는 그룹에 유효한 핸들을 반환하는 PeerGroupJoin에 전달됩니다.
- PeerGroupOpen을 호출하여 피어가 이전에 조인한 피어 그룹을 엽니다. 이 경우 초대를 받을 필요가 없습니다.
위의 함수 중 하나에서 유효한 피어 그룹 핸들을 가져온 후 새 핸들을 사용하여 PeerGroupConnect 를 호출하여 피어 그룹에 연결할 수 있습니다.
참고
피어 그룹에 대한 연결이 실패하면 PEER_GROUP_EVENT_CONNECTION_FAILED 이벤트가 발생합니다. 처리기는 피어 그룹에 대한 연결을 다시 설정하려고 시도할 수 있습니다.
피어 그룹화 이벤트 등록
피어가 피어 그룹에 참여하기 전에 피어는 피어 그룹 이벤트에 등록해야 합니다. 특정 피어 이벤트에 등록하려면 PeerGroupRegisterEvent를 호출하고 PEER_GROUP_EVENT_TYPE 정의된 하나 이상의 피어 이벤트 형식을 전달합니다. 애플리케이션에 적용되는 각 피어 이벤트에 등록해야 합니다. 예를 들어 직접 연결을 통해 데이터를 받으려면 PEER_GROUP_EVENT_DIRECT_CONNECTION 등록하고 이벤트를 PEER_GROUP_EVENT_INCOMING_DATA. 각 호출은 이벤트 핸들을 사용하고 해당 피어 이벤트에 대한 HPEEREVENT 핸들을 반환합니다.
이벤트 처리기는 등록된 피어 이벤트에 대한 핸들을 PeerGroupGetEventData에 전달하여 피어 이벤트와 연결된 데이터를 가져올 수 있습니다. 이 피어 이벤트 데이터는 PEER_GROUP_EVENT_DATA 공용 구조체로 반환됩니다. 피어 이벤트 큐가 비어 있으면 이 함수는 PEER_S_NO_EVENT_DATA 반환합니다.
PeerGroupUnregisterEvent를 호출하고 등록 취소하려는 피어 이벤트에 대한 핸들을 제공하여 피어 이벤트에 대한 등록을 취소할 수 있습니다. 함수가 호출되면 핸들과 연결된 피어 이벤트가 더 이상 등록되지 않습니다.
관리자 및 멤버 역할 만들기
피어 그룹을 만드는 피어를 피어 그룹 작성자라고 하며 기본적으로 관리자 역할이 있습니다. 피어 그룹 작성자만 그룹 속성을 설정할 수 있습니다.
피어 그룹에 초대된 피어는 관리자 또는 멤버일 수 있습니다. 초대를 발급하는 관리자가 관리자 역할을 할당한 경우 새 멤버를 피어 그룹에 초대하고 마찬가지로 관리자 역할을 다른 구성원에게 할당할 수 있습니다.
피어 그룹 멤버의 역할은 관리자가 구성원에게 제공하는 초대에 설정됩니다. 관리자를 더 추가하려면 초대를 만들 때 PeerGroupCreateInvitation의 pRoles 매개 변수 값을 PEER_GROUP_ROLE_ADMIN 설정합니다.
멤버는 피어 그룹에 참여할 수 있지만 새 멤버를 초대하고 권한을 부여하거나, 그룹 속성을 설정하거나, 특별히 만들지 않은 그룹 레코드를 업데이트하거나 삭제할 수는 없습니다. 참여하는 피어에 멤버 상태 할당하려면 해당 피어에 대한 초대를 만들 때 PeerGroupCreateInvitation의 pRoles 매개 변수 값을 PEER_GROUP_ROLE_MEMBER 설정합니다.
멤버의 역할을 변경하려면 새 역할을 포함하는 새 자격 증명을 해당 멤버에게 발급해야 합니다. 이 작업을 수행하려면 PeerGroupEnumMembers에서 반환된 PEER_MEMBER 구조에서 이 멤버에 대한 PEER_CREDENTIAL_INFO 구조를 가져옵니다. PEER_CREDENTIAL_INFOpRoles 필드를 새 역할로 변경하고 구조체를 PeerGroupIssueCredentials에 전달합니다.
피어 그룹에 연결할 때까지 새 자격 증명이 피어에 적용되지 않습니다. 현재 연결된 경우 그룹을 닫고 다시 연결하여 업데이트된 자격 증명을 가져와야 합니다.
피어 찾기
피어 그룹에 참여하는 모든 피어의 열거된 목록을 가져오려면 그룹 핸들을 사용하여 PeerGroupEnumMembers 를 호출합니다. 이 핸들은 열거형에 대한 핸들을 반환합니다. 멤버를 가져오려면 열거형 핸들과 검색할 멤버 수를 사용하여 PeerGetNextItem 을 호출합니다. pCount 매개 변수가 요청된 멤버 수보다 작은 값을 반환할 때까지 PeerGetNextItem을 계속 호출합니다. 사용 가능한 멤버의 전체 목록이 반환되지 않을 수 있습니다.
각 멤버는 활성 피어에 대한 피어, 노드 ID 및 IP 주소의 ID를 포함하는 PEER_MEMBER 구조체로 표시됩니다.
완료되면 열거형을 닫고 PeerEndEnumeration을 호출하여 연결된 메모리를 해제합니다.
피어에 직접 연결
피어가 피어 그룹에 연결되면 PeerGroupOpenDirectConnection 을 호출하고 다른 피어의 ID를 제공하여 연결된 다른 멤버와의 일대일 교환을 시작합니다. 이 호출은 비동기적이며 64비트 연결 ID를 반환합니다. 호출에 성공하면 연결이 성공했음을 나타내는 PEER_GROUP_EVENT_DIRECT_CONNECTION_EVENT 피어 이벤트가 수신됩니다. 연결에 성공하면 연결 ID가 유효하며 직접 연결을 통해 데이터를 보내고 받는 데 사용할 수 있습니다.
직접 연결을 수신하려면 다른 피어도 이전에 PEER_GROUP_EVENT_DIRECT_CONNECTION 피어 이벤트에 등록해야 합니다.
피어에 데이터를 보내려면 유효한 연결 ID를 사용하여 PeerGroupSendData 를 호출합니다. 데이터를 수신하려면 다른 피어를 PEER_GROUP_EVENT_INCOMING_DATA 피어 이벤트에 등록해야 합니다. 마찬가지로 보내는 피어가 데이터를 차례로 수신하려는 경우 PEER_GROUP_EVENT_INCOMING_DATA 피어 이벤트에 대해서도 등록해야 합니다.
그룹의 다른 피어와 현재 활성 직접 연결의 총 집합을 받으려면 PeerGroupEnumConnections 를 호출하여 열거형을 열고 PeerGetNextItem을 사용하여 연결 목록을 반복합니다.
직접 연결을 닫려면 PeerGroupCloseDirectConnection 을 호출하고 연결 ID를 전달합니다.
피어 그룹 닫기 및 종료
피어 그룹에 대한 연결을 닫려면 그룹 핸들을 무효화하지만 피어 그룹화 인프라를 종료하지 않는 PeerGroupClose를 호출합니다. 피어 투 피어 그룹 데이터는 PeerGroupDelete를 호출하여 삭제됩니다.
애플리케이션이 피어 그룹화 인프라 사용을 마치면 PeerGroupShutdown을 호출해야 합니다.