그룹 대화

적용 대상:SQL ServerAzure SQL Managed Instance

대화 그룹은 관련 대화 그룹을 식별합니다. 대화 그룹을 사용하면 애플리케이션이 특정 비즈니스 작업과 관련된 대화를 쉽게 조정할 수 있습니다.

모든 대화는 하나의 대화 그룹에 속합니다. 모든 대화 그룹은 특정 서비스와 연결되며 그룹의 모든 대화는 해당 서비스와의 대화입니다. 대화 그룹에는 여러 대화가 포함될 수 있습니다.

SQL Server에서는 대화 그룹을 사용하여 특정 비즈니스 작업에 관련된 메시지에 대해 EOIO(Exactly-Once-In-Order) 방식으로 액세스를 제공합니다. 애플리케이션이 메시지를 보내거나 받을 때 SQL Server에서 메시지가 속한 대화 그룹을 잠급니다. 따라서 한 번에 하나의 세션만 대화 그룹에 대한 메시지를 받을 수 있습니다. 대화 그룹을 잠그면 애플리케이션이 각 대화 그룹의 메시지가 EOIO 방식으로 처리됩니다. 대화 그룹에는 둘 이상의 대화가 포함될 수 있으므로 애플리케이션은 대화 그룹을 사용하여 동일한 비즈니스 작업과 관련된 메시지를 식별하고 이러한 메시지를 함께 처리할 수 있습니다.

대화 그룹은 대화의 참가자 간에 공유되지 않습니다. 따라서 대화의 각 참가자는 해당 대화를 적절하게 그룹화할 수 있습니다. 애플리케이션은 서비스에서 특별한 지원을 요구하지 않고도 서비스 간의 복잡한 상호 작용을 관리할 수 있습니다.

대화 그룹의 예

인사 관리 애플리케이션에는 급여 서비스의 정보와 복리후생 서비스의 정보를 조합하는 GetEmployeeInformation 서비스가 포함될 수 있습니다. GetEmployeeInformation 서비스는 각 서비스와 대화를 시작하고 특정 대화를 같은 대화 그룹의 다른 대화에 연결합니다. Service Broker는 급여 서비스 또는 혜택 서비스에서 메시지가 도착하는지 여부에 관계없이 이 두 대화에서 들어오는 각 메시지에 대화 그룹 식별자를 추가합니다. 대화가 같은 대화 그룹에 있으므로 Service Broker는 GetEmployeeInformation 서비스에서 진행 중인 요청 수에 관계없이 GetEmployeeInformation 서비스에서 복리후생 정보를 수당 정보와 일치시키는 데 필요한 모든 정보를 제공합니다.

급여 서비스로 보내는 메시지와 복리후생 서비스로 보내는 메시지에는 GetEmployeeInformation에서 만든 대화 그룹의 대화 그룹 정보가 포함되지 않습니다. 각 서비스는 독립적으로 작동하며 GetEmployeeInformation 서비스에서만 전체 비즈니스 태스크에 대한 정보를 유지 관리합니다. 서비스를 서로 독립적으로 유지하면 각 서비스를 간편하게 코딩하고 쉽게 기본 얻을 수 있습니다. 이러한 독립성 기본 또 다른 이점은 한 서비스를 사용할 수 없는 경우 다른 서비스가 계속 작동할 수 있다는 것입니다.

애플리케이션 상태 구성

대화 그룹의 한 가지 이점은 대화 그룹 식별자가 애플리케이션 상태를 식별하고 검색하는 편리한 키라는 것입니다. 대화 그룹 식별자를 사용하면 데이터베이스에서 애플리케이션 상태를 쉽게 기본 수 있습니다. 작업을 수행하는 데 시간이 지남에 따라 많은 메시지를 교환해야 하는 경우 애플리케이션 상태를 기본 확인하기 위해 애플리케이션 인스턴스를 계속 실행하는 것은 비효율적입니다. 메시지 간에 태스크와 연결된 모든 데이터가 데이터베이스에 저장되고 해당 태스크와 연결된 다음 메시지가 수신될 때 검색되는 경우 애플리케이션의 확장성이 좋아집니다. 대화 그룹 식별자를 애플리케이션 개발자가 제공하는 상태 테이블에서 기본 키로 사용하여 특정 작업과 연결된 상태를 빠르게 검색할 수 있습니다. 대화 그룹 식별자를 사용하여 상태를 유지 관리하는 방법에 관한 자세한 내용은 상태 관리를 참조하세요.

SQL Server에서 애플리케이션이 메시지를 보내거나 받을 때마다 대화 그룹을 잠그므로 애플리케이션은 다른 프로그램이 동시에 같은 상태 데이터를 업데이트하지 않도록 명시적으로 방지할 필요가 없습니다. 애플리케이션은 단순히 대화 그룹을 잠그고, 상태를 복원하고, 메시지를 처리하고, 상태를 업데이트한 다음, 트랜잭션을 커밋합니다.

SQL Server에서는 편의를 위해 애플리케이션이 메시지를 수신하지 않고도 다음에 사용할 수 있는 대화 그룹을 잠글 수 있습니다. GET CONVERSATION GROUP 문을 사용하여 애플리케이션은 메시지를 처리하기 전에 대화 그룹을 잠그고 상태를 복원할 수 있습니다. 자세한 내용은 GET CONVERSATION GROUP(Transact-SQL) 문을 참조하세요.

대화 그룹 수명

Service Broker는 대화 그룹의 수명을 관리합니다. 대화 그룹을 명시적으로 만들거나 삭제할 필요는 없습니다. Service Broker는 다음과 같은 상황에서 새 대화 그룹을 만듭니다.

  • 애플리케이션은 기존 대화 그룹과 관련이 없는 새 대화를 시작합니다. Service Broker는 새 대화 그룹을 만들고 대화 그룹에 새 식별자를 할당합니다.

  • 애플리케이션은 현재 존재하지 않는 대화 그룹 식별자와 관련된 대화를 시작합니다. 이 경우 Service Broker는 지정된 식별자를 사용하여 새 대화 그룹을 만듭니다. 즉, 대화 그룹 식별자에 고유한 값을 할당할 수 있습니다.

  • Service Broker는 다른 서비스에서 시작한 새 대화의 첫 번째 메시지를 받습니다. 이 경우 Service Broker는 서비스 이름과 Broker 인스턴스 식별자(있는 경우)를 사용하여 다음을 수행합니다.

    1. 적절한 큐를 찾습니다.

    2. 새 대화 그룹을 만들고 대화 그룹을 큐에 연결합니다.

    3. 새 대화 핸들을 만들고 새 대화 그룹에 대화 핸들을 추가합니다.

    4. 큐에 들어오는 메시지를 배치합니다.

Service Broker는 대화 그룹을 만든 대화의 메타데이터에 대화 그룹 식별자를 추가합니다. Service Broker가 대화 그룹과 연결된 모든 대화에 대한 메시지를 받을 때마다 Service Broker는 큐에 메시지를 입력하기 전에 해당 메시지에 대화 그룹 식별자를 추가합니다.

대화 그룹 식별자는 Service Broker가 만들 때부터 식별자 끝과 연결된 모든 대화까지 유효합니다. 즉, 그룹의 모든 대화가 활성 상태인 동안 대화 그룹 식별자가 유효하도록 보장됩니다.

대화 그룹 식별자를 사용하여 애플리케이션 상태를 관리하는 애플리케이션은 개발자가 제공한 상태 테이블을 사용합니다. 애플리케이션에서 상태가 더 이상 필요하지 않은 것으로 판단되면 애플리케이션이 상태 테이블에서 해당 상태를 삭제해야 합니다. 대부분의 경우 애플리케이션은 태스크가 성공적으로 완료된 후 또는 오류가 발생한 후 작업을 완료할 수 없음을 나타내는 상태를 삭제합니다. 이러한 경우 애플리케이션은 일반적으로 최종 응답 메시지를 보내고 대화를 종료하는 트랜잭션 내에서 상태를 삭제하는 명령을 포함합니다. 이 전략은 애플리케이션 상태와 대화 그룹 식별자의 수명을 같게 만듭니다. 보내기 작업이 실패하면 삭제 작업이 롤백됩니다. 마찬가지로 삭제 작업이 실패하면 보내기 작업이 롤백되고 SQL Server에서 메시지를 보내지 않습니다. 두 경우 모두 애플리케이션 상태와 대화 그룹 식별자가 유효한 상태로 유지됩니다. 두 작업이 모두 성공하면 대화 그룹 식별자 수명이 프로그램이 연결된 애플리케이션 상태를 삭제하는 동시에 종료됩니다.

참고 항목