웹 서비스와 Groove 2007을 통한 팀 공동 작업의 지원
John C. Hancock
이 기사에서 다루는 내용:
|
이 기사에서 사용하는 기술: Microsoft Office, .NET Framework |
온라인으로 코드 찾아보기
실제 업무를 보다 보면 사무실 밖에서 정보를 수집해야 하는 상황에서 회사 네트워크에 액세스할 수 없는 경우가 많습니다. 예를 들어 소비자 조사 기관에서 직원을 현장에 파견하여 서면 설문 조사를 실시하고 해당 데이터를 데이터베이스에 수동으로 입력하도록 하는 경우가 있습니다. 현장에서 이러한 프로세스를 자동화하는 데 사용할 사용자 지정 응용 프로그램을 만들려면 로컬 데이터 저장소를 관리하고 이 저장소를 서버 데이터베이스와 동기화하는 문제를 해결해야 합니다.
이 기사에서는 Microsoft® Office Groove™ 2007 고유의 공동 작업 기능을 사용자 지정 Microsoft .NET Framework 응용 프로그램에 통합함으로써 이러한 문제를 해결하는 방법을 소개합니다. Groove는 공동 작업 데이터를 수집하고 팀원 간에 안전하게 데이터를 동기화할 수 있는 강력한 클라이언트를 제공하며, 필자가 만든 사용자 지정 .NET Framework 응용 프로그램은 데이터를 회사 데이터베이스에 연결하는 데 사용됩니다.
Groove는 각 팀원이 어떤 네트워크에 연결되어 있든 관계없이 조직의 경계를 넘어 팀원 간에 데이터를 공유할 수 있는 팀 공동 작업 환경입니다. 다시 말해 모든 참가자가 동일한 네트워크에 속해 있지 않아도 되기 때문에 IT 부서의 도움 없이 직원, 파트너 고객을 포함하는 작업 환경을 구축해야 하는 경우 Groove는 매우 유용한 공동 작업 도구가 됩니다. 또한 Groove는 사용자가 오프라인 상태에서도 공유 데이터에 액세스하여 업데이트하고, 다시 네트워크에 연결되었을 때 자동으로 데이터를 동기화해야 하는 모바일 시나리오에도 적합합니다.
Groove 2007은 2007 Microsoft Office system의 Ultimate 및 Enterprise 버전에 포함되며 별도 제품으로 구입할 수도 있습니다. 또한 microsoft.com/downloads에서 Groove 무료 평가판을 설치하고 Groove SDK를 다운로드할 수 있습니다.
Groove를 사용한 솔루션 구축
파일 공유, 토론과 같은 Groove의 기본 기능을 사용하면 적절한 도구로 작업 영역을 만든 다음 이를 재사용 가능한 템플릿으로 저장하는 방법으로 사용자 지정 공동 작업 솔루션을 구축할 수 있습니다. 높은 융통성이 필요한 경우에는 웹 서비스 기반 API를 통해 Groove의 안전한 공동 작업 기능을 활용하는 사용자 지정 응용 프로그램을 개발할 수도 있습니다.
이 칼럼에서 설명할 소비자 조사 응용 프로그램 솔루션은 Tablet PC를 사용하는 조사원이 쇼핑 센터에서 설문 조사를 작성하는 데 사용하게 됩니다. 원칙적으로 이 솔루션은 사용자가 오프라인 상태일 때에도 작동해야 하며, 이후 여러 조사원이 입력한 정보를 손쉽게 통합할 수 있어야 합니다. 실제 환경에서 조사원이 공용 인터넷 연결을 제공하는 커피숍에 들어가 자동으로, 그리고 안전하게 모든 참가자의 정보를 동기화할 수 있다면 매우 편리할 것입니다.
이 솔루션을 설계하는 첫 단계는 Groove에서 조사 책임자가 사용할 새 작업 영역을 만드는 것입니다. 모든 작업 영역에는 참가자가 문서를 서로 공유할 수 있도록 하는 파일 도구, 서로 묻고 답할 수 있는 토론 도구 등 특정 요구 사항을 위한 여러 도구가 포함될 수 있습니다.
작업 영역이 만들어지면 조사 책임자가 모든 조사원에게 작업 영역 참여 초대 메시지를 보냅니다. 이 초대는 각 참가자가 로컬 컴퓨터로 작업 영역을 다운로드할 수 있도록 알림으로 표시됩니다. 이제 모든 참가자가 공동 작업을 수행할 준비가 되었습니다. 참가자가 파일 또는 토론 항목을 추가하여 작업 영역의 로컬 복사본이 변경되면 이러한 변경 내용은 다른 참가자들이 네트워크에 연결할 때 자동으로 안전하게 전파됩니다.
Groove 2007 아키텍처
Groove는 고유한 기능의 바탕이 되는 혁신적인 아키텍처로 설계되었습니다. 첫째, Groove는 중앙 서버가 아니라 참가자의 PC에 모든 데이터를 저장합니다. 따라서 모든 참가자가 공유 리소스에 액세스할 수 있는 안전한 방법을 궁리할 필요가 없습니다. 조사원이 회사의 직원인지, 아니면 독립 사용자인지에 관계없이 조사 책임자는 손쉽게 공유 작업 영역을 만들어 참가자를 초대할 수 있습니다.
둘째, 모든 데이터, 즉 디스크의 로컬 작업 영역과 모든 네트워크 통신이 항상 암호화됩니다. 이로 인한 이점 중 하나는 조사원이 공용 인터넷 연결을 통해 손쉽게 변경 내용을 동기화할 수 있다는 것입니다. 자동 동기화가 이미 암호화되어 있으므로 모든 참가자에게 회사 리소스에 대한 가상 사설망(VPN) 액세스 권한을 부여할 필요가 없습니다.
대부분의 Groove 구성 요소는 클라이언트 기반이지만 서버 기반인 구성 요소도 몇 가지 있습니다. Groove는 저장 및 전달 서비스 역할을 하는 릴레이 서버를 사용하여 클라이언트가 표준 프로토콜을 통해 방화벽을 거쳐 통신할 수 있도록 합니다. 또한 릴레이 서버는 오프라인 사용자를 위해 작업 영역 업데이트의 암호화된 임시 복사본도 저장합니다. 이외에 관리자가 모든 사용자의 라이선스 및 정책 설정을 관리할 수 있는 관리 서버도 있습니다.
독립 실행형 Groove 사용자는 클라이언트를 설치할 때 고유 계정을 만들 수 있는데, 이 계정은 Microsoft에서 호스트하는 릴레이 서버를 자동으로 사용합니다. Groove 사용자 수가 많은 대기업에서는 자체 인프라의 일부로 Office Groove Server 2007을 배포하여 라이선스를 보다 면밀하게 관리하고 Active Directory® 통합과 같은 작업을 수행할 수 있습니다. 중소기업에서는 Office Groove Enterprise 서비스를 구독하면 자체 인프라를 배포할 필요 없이 호스팅되는 중앙 제어용 관리 도구에 액세스할 수 있습니다.
Groove 양식을 사용한 데이터 수집
필자의 솔루션에서는 조사원이 모든 설문 대상 소비자를 대상으로 작성하게 되는 설문 양식이 작업 영역에 포함되어야 합니다. Groove에는 데이터 형식, 캡션, 기타 속성 등을 비롯한 필드를 지정할 수 있는 사용자 지정 양식을 디자인하기 위한 양식 도구가 포함되어 있습니다. 이러한 양식을 만들면 그림 1과 같이 참가자가 작업 영역에 데이터를 추가할 수 있습니다.
그림 1 양식 도구가 있는 Groove 작업 영역 (더 크게 보려면 이미지를 클릭하십시오.)
양식에는 사용자 지정 솔루션 구축 기능을 확장하는 JavaScript 또는 VBScript가 포함될 수도 있습니다. 뿐만 아니라 양식에는 DHTML과 CSS가 사용되기 때문에 UI 스타일 및 서식도 어느 정도 유연하게 구현할 수 있습니다. 조직에서 이미 InfoPath® 양식을 사용하고 있다면 Groove의 기본 제공 양식을 사용하는 대신 Groove InfoPath 양식 도구로 XML 기반 InfoPath 양식 정의를 가져올 수 있습니다.
사용자 지정 양식이 있는 작업 영역을 조사원의 Tablet PC로 다운로드한 경우에는 연결을 끊은 후에도 현장에서 해당 양식을 사용하여 레코드를 추가할 수 있습니다. 나중에 네트워크에 다시 연결하면 추가한 모든 레코드가 다른 참가자와 안전하게 동기화됩니다. 조사 책임자는 작업 영역에 읽지 않은 새 데이터가 있음을 알리는 팝업 알림을 수신하게 됩니다.
조사원들로부터 데이터를 수집하는 것은 전체 작업의 일부일 뿐입니다. 개별 설문 조사의 데이터가 모두 동기화되면 조사 책임자는 세부적인 분석이 가능하도록 모든 데이터를 회사의 데이터베이스에 로드해야 합니다. 회사의 분석가는 SQL Server™ 데이터베이스, Analysis Services 큐브 및 Excel® 비즈니스 인텔리전스 기능을 사용하여 설문 조사 결과를 파악하고 권장 사항을 제시합니다.
응용 프로그램에서 Groove 데이터 액세스
조사 책임자는 Groove 작업 영역에서 데이터를 꺼내 회사 데이터베이스로 가져오려면 Groove 양식 도구에서 CSV(쉼표 분리 값)와 같은 형식으로 데이터를 내보낸 다음 데이터베이스에서 이를 가져오면 됩니다. 그러나 모든 설문 조사 데이터를 한 번에 데이터베이스로 로드하는 것이 아니라 준비되는 대로 로드해야 하는 경우에는 이러한 수동 프로세스는 이내 관리하기 어렵게 됩니다.
따라서 Groove 웹 서비스 기반 .API를 사용하여 현장 조사원이 입력한 데이터를 읽는 사용자 지정 .NET Framework 응용 프로그램을 만드는 것이 더 나은 방법이 될 수 있습니다. 조사 책임자는 공용 인터넷에만 연결된 현장 조사원과 달리 그림 2와 같이 회사 네트워크에 연결되어 있기 때문에 PC에 이러한 응용 프로그램을 설치하면 Groove 작업 영역과 SQL Server 데이터베이스에 모두 액세스할 수 있습니다.
그림 2 Groove 작업 영역 사용자 및 SQL Server 데이터베이스 (더 크게 보려면 이미지를 클릭하십시오.)
이러한 방식은 Groove가 Windows® SharePoint® Services(WSS) 3.0에 통합되는 방식과 유사합니다. 각 팀은 Groove 작업 영역을 사용하여 공동 문서 작업을 수행한 다음 완성된 문서를 SharePoint 문서 라이브러리에 게시하여 회사의 모든 직원이 SharePoint의 기능(예: 검색 및 워크플로)을 활용하도록 할 수 있습니다. 이를 위해서는 Groove와 SharePoint 사이트 모두에 대한 액세스 권한이 있는 사용자가 작업 영역에 SharePoint 파일 도구를 추가하고 SharePoint 문서 라이브러리에 이 도구를 연결해야 합니다. 이제 모든 작업 영역 참가자가 모든 문서의 복사본을 가지고 있으며 변경 내용을 제출할 수 있습니다. 그러면 연결된 사용자가 필요에 따라 SharePoint 문서 라이브러리와 변경 내용을 동기화할 수 있습니다.
Groove 웹 서비스 API 사용
Groove의 프로그래밍 모델에서는 클라이언트 응용 프로그램을 개발하는 경우에도 관리되는 API 대신 웹 서비스를 사용합니다. 이러한 프로그래밍 방식에서는 클라이언트 응용 프로그램이 사실 동일한 컴퓨터에서 실행되고 있는 웹 서비스를 호출하므로 다소 어색하게 느껴집니다. 이러한 서비스는 컴퓨터가 네트워크에 연결되어 있지 않은 경우에도 사용할 수 있습니다. Groove 클라이언트 자체가 요청에 응답하기 때문입니다. 규모가 큰 엔터프라이즈 솔루션의 경우 이와 유사한 프로그래밍 모델을 사용하는 Groove Server Data Bridge라는 서버 기반 제품을 사용할 수 있지만 필자는 이 솔루션에서 클라이언트측 접근 방식을 사용할 것입니다.
그림 3에 나와 있는 클라이언트 응용 프로그램을 만들려면 먼저 액세스하려는 각 Groove 서비스별로 프로젝트에 웹 참조를 추가합니다. Groove SDK에는 각 서비스에 대한 WSDL 파일이 있으므로 관련 .wsdl 파일의 경로를 지정하고 웹 참조의 이름을 "Web reference"(웹 참조)라는 기본 이름에서 보다 실용적인 이름으로 바꾼 다음 Add Reference(참조 추가) 단추를 클릭하여 웹 참조를 추가합니다. 이 응용 프로그램에서는 GrooveAccounts, GrooveForms2, GrooveSpaces 및 GrooveTools 서비스를 사용하게 됩니다.
그림 3 SQL Server 데이터베이스에 Groove 데이터 로드 (더 크게 보려면 이미지를 클릭하십시오.)
Groove 웹 서비스 레지스트리 설정
웹 서비스를 호출하려면 Groove에서 사용하는 포트를 알아야 합니다. 기본 포트는 9080이지만 현재 사용자에 대한 GrooveLocalHTTPPort 레지스트리 설정에서 이 값을 검색해야 합니다. 또한 모든 호출에 대해 레지스트리 키 값을 제공해야 합니다. 이 값은 웹 서비스에서 호출자를 인증하는 데 사용됩니다. 이 키는 그림 4와 같이 LocalRequestKey 레지스트리 설정에서 검색할 수 있습니다. 요청 키는 Groove를 다시 시작할 때마다 무작위로 다시 생성되므로 마지막으로 확인한 후에 다시 생성된 경우를 대비하여 호출할 때마다 레지스트리에서 검색해야 합니다.
Figure 4 Groove 웹 서비스의 레지스트리 설정
using (RegistryKey grooveSettingsRegKey = Registry.CurrentUser.OpenSubKey( “Software\\Microsoft\\Office\\12.0\\Groove”)) { // Get the URL for web services including the port string grooveHost = string.Format(“http://localhost:{0}”, grooveSettingsRegKey.GetValue(“GrooveLocalHTTPPort”, 9080)); // Get the LocalRequestKey for authentication string localRequestKey = (string)grooveSettingsRegKey.OpenSubKey( “WebServices”).GetValue(“LocalRequestKey”); ... }
웹 서비스 인증에는 응답 키라는 레지스트리 설정도 사용됩니다. Groove 웹 서비스를 호출할 때마다 응답에는 LocalResponseKey 레지스트리 설정과 일치하는지 확인할 수 있는 키가 포함됩니다.
계정 및 ID
모든 Groove 사용자에게는 Groove를 처음 시작할 때 구성되는 계정이 있습니다. 이 계정은 사용자의 컴퓨터(또는 여러 컴퓨터)에 파일로 저장되며 암호화 키, 연락처 목록 등의 정보를 포함합니다. 모든 계정에는 다른 Groove 사용자와 공유하는 연락처 정보(예: 전자 메일 주소 및 전화 번호)가 포함된 ID도 하나 이상 있습니다. 또한 필요에 따라 계정에는 여러 ID가 포함될 수 있으므로 예를 들어 하나는 업무용으로, 다른 하나는 친구와 파일을 공유하는 등의 개인용으로 사용할 수 있습니다.
GrooveAccounts 서비스를 사용하면 컴퓨터의 계정 및 ID 목록을 가져올 수 있습니다. 그림 5와 같이 요청 키와 포트를 사용하여 웹 서비스 호출을 설정한 후에는 GrooveAccounts 서비스의 Read2 메서드를 사용하여 Account2 개체의 배열을 반환할 수 있습니다. 각 계정에는 ID 컬렉션이 있으므로 ID의 목록을 로드하여 그림 3과 같이 사용자가 소비자 조사 작업 영역이 있는 ID를 선택하도록 할 수 있습니다. 대부분의 사용자에게는 ID가 하나인 계정 한 개만 있습니다.
Figure 5 모든 Groove 계정 나열
// Set up the web service call for GrooveAccounts GrooveAccounts.GrooveAccounts svc = new GrooveAccounts.GrooveAccounts(); svc.GrooveRequestHeaderValue = new GrooveAccounts.GrooveRequestHeader(); svc.GrooveRequestHeaderValue.GrooveRequestKey = localRequestKey; svc.Url = grooveHost + “/GWS/Groove/2.0/Accounts/”; // Get a list of all the accounts GrooveAccounts.Account2[] accounts = svc.Read2(); // Display all identities foreach (GrooveAccounts.Account2 account in accounts) foreach (GrooveAccounts.Identity2 identity in account.Identities) Console.WriteLine(account.Name + “, “ + identity.Name);
작업 영역 및 도구 목록 가져오기
작업용 ID를 알고 있으면 GrooveSpaces 서비스의 Read 메서드를 사용하여 사용자의 작업 영역 목록을 가져올 수 있습니다. ID 개체에는 해당 ID별로 고유하고 그림 6과 같이 다른 대부분의 Groove 웹 서비스 호출에 사용할 수 있는 URI 속성과, 사용자의 작업 영역에 대한 URL을 포함하는 Spaces 속성이 있습니다.
Figure 6 모든 Groove 작업 영역 나열
private void LoadSpaces(GrooveAccounts.Identity2 identity) { // Set up the web service call for GrooveSpaces GrooveSpaces.GrooveSpaces svc = new GrooveSpaces.GrooveSpaces(); svc.GrooveRequestHeaderValue = new GrooveSpaces.GrooveRequestHeader(); svc.GrooveRequestHeaderValue.GrooveRequestKey = GrooveSettings.RequestKey; svc.GrooveRequestHeaderValue.GrooveIdentityURL = identity.URI; svc.Url = GrooveSettings.GrooveHost + identity.Spaces; // Get the list of spaces _spaces = svc.Read(“”); // Load the list into a combobox comboWorkspaces.DisplayMember = “Name”; comboWorkspaces.DataSource = _spaces; }
앞서 Groove 작업 영역을 만들 때 보았듯이 각 작업 영역에는 파일, 토론, 양식 도구 등 여러 도구가 포함될 수 있습니다. 사용자가 클라이언트 응용 프로그램에서 작업 영역을 선택하면 GrooveTools 서비스의 Read 메서드를 사용하여 시장 조사 데이터가 있는 양식 도구를 찾을 수 있습니다. 작업 영역에는 양식 도구가 하나뿐이므로 이름이 "Forms"인 도구만 찾으면 되지만 보다 정교하게 구현하려면 올바른 형식의 모든 도구가 나열된 목록을 표시하여 사용자가 적절한 도구를 선택하도록 할 수도 있습니다.
Groove 양식에서 데이터 가져오기
레지스트리에서 Groove 설정을 검색하고 계정, ID, 작업 영역 및 도구 목록을 가져오기 위한 코드를 작성했으므로, 이제 분석을 위해 Groove 도구의 데이터를 SQL Server 데이터베이스로 가져오는 원래 요구 사항을 처리할 준비가 되었습니다. 데이터를 가져오는 방법은 사실 매우 간단합니다. 즉, 다음과 같이 RecordQuery 개체를 사용하여 가져올 레코드를 설명하는 쿼리를 설정한 후 GrooveForms2의 QueryRecords 메서드에 전달하기만 하면 됩니다.
// Query ALL records in the ALL view: GrooveForms2.RecordQuery query = new GrooveForms2.RecordQuery(); query.ViewURI = “”; query.UnreadRecordsOnly = false; query.QueryMetadataOnly = false; query.IncludeFileAttachmentContent = false; // Issue the query GrooveForms2.Forms2RecordDataSet recordDataSet = svc.QueryRecords(query);
QueryRecords에 의해 반환된 Forms2RecordDataSet 개체를 살펴보면 상당히 흥미롭습니다. Forms2RecordDataSet에는 XML 형식의 양식을 위한 스키마와 데이터가 모두 포함되어 있으므로 효과적으로 사용하기 위해 몇 가지 조작 과정을 거쳐야 합니다. 양식 데이터 작업을 가장 쉽게 하는 방법은 Forms2RecordDataSet 개체를 보다 익숙한 .NET DataSet 개체로 변환하는 것입니다.
Groove SDK 설명서에서 한 섹션 전체를 할애하여 이 주제를 설명하고 있고, 이 문서의 샘플 다운로드에 코드도 포함되어 있으므로 여기에서는 대략적인 개요만 설명하겠습니다. 게다가 이러한 코드는 한번 작성하면 얼마든지 재사용할 수 있습니다. 기본적으로 새 DataSet을 만들고 ReadXmlSchema 메서드를 사용하여 스키마에 대한 문자열 판독기를 만들고 적절한 XML 버전 선언을 문자열에 추가하는 방법으로 테이블 및 열 정의를 설정합니다. 스키마가 만들어지면 ReadXml 메서드를 사용하여 실제 데이터를 로드할 수 있습니다.
여기서 고려해야 하는 작은 문제 하나는 날짜-시간 열과 관련된 부분입니다. Groove는 Forms2RecordDataSet의 모든 날짜-시간 필드를 세계시로 반환하는 반면 .NET DataSet은 기본적으로 로컬 시간으로 반환합니다. ReadXmlSchema 메서드의 DataSet에 만들어진 모든 열을 순환하면서 데이터를 로드하기 전에 DateTimeMode를 Utc로 설정하는 방법으로 문제를 방지할 수 있습니다.
데이터베이스로 양식 데이터 로드
이제 DataSet을 순환하면서 Groove 양식에서 새로 가져온 각 레코드에 대해 SQL Server 데이터베이스에 새 행을 추가할 수 있습니다. 사용자는 이 프로세스를 회수 제한 없이 실행할 수 있으므로 데이터베이스에 레코드가 중복 로드되지 않도록 하는 메커니즘이 필요합니다.
Groove 양식의 모든 레코드에는 해당 레코드를 고유하게 식별하는 _RecordID라는 시스템 생성 필드가 있습니다. 데이터베이스로 레코드를 로드할 때 이 필드를 포함하면 레코드가 데이터베이스에 이미 추가되었는지 확인하고, 이미 추가된 경우 중복 행을 삽입하지 않고 기존 데이터베이스 행을 업데이트할 수 있습니다. 그러면 프로세스를 마지막으로 실행한 후 수정된 모든 설문 조사 레코드가 SQL Server 데이터베이스에 올바르게 반영됩니다.
결론
Groove는 분산된 팀을 위한 솔루션 구축에 매우 적합한 환경입니다. 원래 이러한 솔루션을 처음부터 새로 개발하기란 어렵고 비용도 많이 듭니다. 파일 공유 및 양식과 같은 기본 기능만 사용하는 경우든, API를 기반으로 완전히 새로운 응용 프로그램을 작성하는 경우든 관계없이 Groove는 매우 유용한 도구가 됩니다.
John C. Hancock은 비즈니스 인텔리전스와 .NET Framework 개발에 정통한 Microsoft의 수석 컨설턴트로, Practical Business Intelligence with SQL Server 2005(Addison-Wesley Professional, 2006년)를 집필했습니다. 저자에게 연락하려면 www.johnchancock.net을 방문하십시오.
https://www.microsoftelearning.com/eLearning/courseDetail.aspx?courseId=91412&offerPriceId=218700&tab=details
https://www.microsoftelearning.com/eLearning/courseDetail.aspx?courseId=91412&offerPriceId=218700&tab=details