Utility SpotlightSMSMap

Jeff Tondt

이 기사의 코드 다운로드: UtilitySpotlight2007_07.exe (2477KB)

"백문이 불여일견이다"라는 속담이 있는데, 이 유명한 속담은 그림 한 장으로 복잡한 이야기를 쉽게 전달할 수 있으며 이미지 한 개가 장황한 텍스트보다 훨씬 더 효과적임을 나타냅니다. 또한 많은 양의 데이터를 빠르게 전달해야 하는 시각화의 목표도 적절히 설명해 줍니다.

필자를 비롯한 System Management Server(SMS) 애호가들에게는 전반적인 SMS 계층 구조를 하나의 그림으로 그려 보는 것이 인프라의 구조를 파악하는 데 많은 도움이 됩니다. 이러한 그림은 관리 담당자에게 SMS 마이그레이션 계획 이전과 이후의 상황을 보여 주는 데 활용할 수 있습니다. 어떤 문제 해결 상황에서 이 같은 다이어그램은 문제에 대한 해결책을 찾거나 적어도 다른 사람들로부터 도움을 구하는 데 매우 유용합니다. 물론 책임감 있는 SMS 관리자라면 문제 해결이 아닌 다른 이유로도 시스템 계층 구조를 문서화해야 할 필요가 있습니다.

그림 그리기

물론 이러한 다이어그램을 직접 그릴 수도 있습니다. 소매를 걷고 직접 SMS 계층 구조를 그리고 사이트 설정을 문서화할 수도 있습니다. 그러나 Microsoft® Operations Manager(MOM)로 SMS 서버를 모니터링하고 있다면 이를 통해 SMS 계층 구조를 다이어그램으로 나타낼 수 있습니다. 물론 MOM은 그림 전용 프로그램이 아니며 사이트 설정을 문서화하지도 않습니다. 다른 방법이나 손쉬운 도구도 있긴 하지만, 현재로서는 적어도 필자의 마음에 드는 적절하게 세련된 그림을 그리고 사이트 설정을 문서화하는 데 도움이 되는 도구를 찾지 못했습니다.

그래서 직접 이런 도구를 만들기로 결심했고 그 결과 SMSMap 1.0이 탄생하게 되었습니다. SMSMap은 SMS SDK의 SMS 관리 라이브러리를 사용하며 COM을 통해 Microsoft Visio®를 자동화하는 Visual Basic® .NET 응용 프로그램입니다. 이 유틸리티는 대상 SMS 사이트 서버를 쿼리한 다음 시각적으로 뛰어난 Visio 다이어그램을 만들고 사이트 설정을 XML 파일로 내보냅니다. XML을 선택한 이유는 사이트 설정을 문서화하는 가장 호환성이 뛰어난 방식이기 때문입니다. 필자는 다른 SMS 서버와 관련된 실제 서버뿐 아니라 SMS 역할도 보여 주도록 했습니다. 덕분에 Visio 레이어로 다이어그램을 이리저리 수정하여 여러 관점에서 SMS 계층 구조를 볼 수 있게 되었습니다.

그림 1 방사형 형식

그림 1** 방사형 형식 **

현재는 이 프로그램에서 Visio 다이어그램에 여섯 가지 형식 중 하나를 선택하여 사용할 수 있습니다. 예를 들어 그림 1은 방사형 형식을 사용하여 매우 단순한 SMS 계층 구조를 보여 주며 그림 2는 동일한 계층 구조를 순서도를 사용하여 보여 줍니다. 이 유틸리티는 이보다 규모가 큰 계층 구조에도 사용할 수 있지만 여기서는 설명을 간단히 하기 위해 단순한 계층 구조를 사용했습니다.

그림 2 순서도 형식

그림 2** 순서도 형식 **

언젠가는 모든 사이트 설정을 문서화할 수 있는 수준으로 SMSMap이 발전할 것입니다. 현재는 SMS 사이트 역할과 모든 경계만 문서화합니다. 간단하게 훨씬 많은 사이트 설정을 XML 파일로 내보낼 수도 있습니다.

SMSMap 사용

SMSMap의 소스 코드와 설치 파일은 TechNet Magazine 웹 사이트에서 다운로드할 수 있습니다. SMSMap을 설치하려면 설치 과정을 안내하는 SMSMapSetup.msi를 실행하기만 하면 됩니다. SMSMap은 Visio를 사용하므로 Visio도 설치되어 있어야 합니다. 설치한 후에는 C:\Program Files\Microsoft\smsmap\smsmap.exe(SMSMap을 기본 위치에 설치한 경우)를 실행하십시오.

SMSMap은 어느 컴퓨터에서나 실행할 수 있습니다. 그런데 SMSMap을 사이트 서버에서 실행해야 할 필요는 없습니다. 또한 대부분의 SMS 사이트 서버에는 Visio가 설치되어 있지 않습니다. 쿼리를 실행할 SMS 사이트 서버 이름을 입력합니다. 전체 계층 구조를 쿼리하려는 경우 중앙 사이트 이름을 입력합니다. 하위 주 사이트 서버의 이름을 입력할 수도 있지만, 이 경우 해당 하위 주 사이트 아래의 계층 구조만 얻을 수 있습니다. 다음으로, SMS를 쿼리할 수 있는 권한이 있는 계정을 domain\username 형식으로 입력하고 계정의 암호를 입력합니다. 암호는 표시되지 않으므로 다른 사용자가 보는 곳에서 입력해도 괜찮습니다.

여섯 개의 라디오 단추를 사용하여 레이아웃을 선택하고 그림에 SMS 역할을 표시할지 여부를 선택할 수 있습니다. 이러한 확인란은 Options(옵션) 탭에 있습니다. Draw(그리기) 단추를 누르면 유틸리티가 시작됩니다. 이 유틸리티는 먼저 Visio를 사용할 수 있는지 확인한 다음 지정된 SMS 주 사이트 서버를 쿼리하고 Visio 다이어그램에 개체를 추가합니다. SMSMap이 개체를 추가하는 동안에는 Visio 다이어그램이 그다지 세련돼 보이지 않을 수도 있습니다. 그러나 마지막에는 사용자가 처음에 지정했던 형식으로 개체가 알맞게 구성됩니다.

자세히 알아보기

지금까지는 SMSMap으로 SMS 계층 구조를 문서화하는 이유와 그 방법을 살펴보았습니다. 개발 업무를 줄이고 싶은 개발자들을 위해 이제부터 이 유틸리티의 작동 방식에 대해 좀 더 자세히 알아보겠습니다.

SMSMap은 관리되는 SMS 사이트 서버 인터페이스를 사용하여 SMS 정보를 수집하고 Visio 주 Interop 어셈블리를 사용하여 필요한 모든 도형이 준비된 Visio 다이어그램을 생성합니다. SMS 2003 SDK 버전 3.1에는 관리되는 SMS 사이트 서버 인터페이스의 최신 릴리스가 포함되어 있습니다. 이 관리 인터페이스 집합을 이용하면 모든 Microsoft .NET Framework 사용 언어나 응용 프로그램을 통해 SMS 사이트 서버에 연결하여 이를 구성할 수 있습니다.

이러한 인터페이스는 System.Management 네임스페이스를 사용하여 Windows® Management Instrumentation(WMI)을 통해 SMS 공급자와 상호 작용합니다. 이 인터페이스를 사용하려면 C#, Visual Basic .NET 등의 .NET 호환 언어를 사용하여 응용 프로그램을 개발해야 하며 .NET 어셈블리에서 SMS SDK와 함께 제공한 Microsoft.SystemsManagementServer.Automation.dll을 참조해야 합니다.

일관된 개체 지향 모델을 제공하기 위해 .NET Management 클래스에서는 WMI 개체 모델의 특유한 표현법이 대부분 제거되었습니다. WMI 연결, 개체 열거, 메서드 실행, 개체 삭제, 개체 검색 및 이벤트 캡처 등의 기본 작업을 모두 .NET Management 클래스를 통해 수행할 수 있습니다.

Visio 주 Interop 어셈블리

주 Interop 어셈블리를 사용하면 Visio 같은 COM 응용 프로그램을 관리 코드를 통해 프로그래밍 방식으로 제어할 수 있습니다. Visio 주 Interop 어셈블리를 사용하면 Visio의 기능을 관리 응용 프로그램에 통합 및 확장할 수 있습니다.

컴퓨터에 .NET Framework가 이미 설치되어 있는 경우 나중에 Visio를 설치하면 컴퓨터의 GAC(전역 어셈블리 캐시)에 Visio 주 Interop 어셈블리가 추가됩니다. 그러면 관리 응용 프로그램에서 Visio 주 Interop 어셈블리에 대한 참조를 추가할 수 있습니다.

프로젝트에 대한 참조를 추가한 후에는 관리 응용 프로그램에서 Visio 개체를 사용할 수 있습니다. Visio에는 클래스, 인터페이스 및 열거형을 제공하는 광범위한 개체 모델이 있으므로 프로그래밍 방식으로 다이어그램을 만들 수 있습니다.

프로그램 흐름

지금까지 Visio와 SMS의 기본 구성 요소 인터페이스에 대해 설명했으며, 이제부터는 유틸리티 자체의 흐름에 대해 설명하겠습니다.

관리 인터페이스를 사용하는 첫 번째 단계는 SMS 공급자에 연결하는 것입니다. 이를 위해서는 SMSProvider 클래스의 새 인스턴스를 만들면 됩니다. 내부적으로 이 클래스는 지정된 사이트 서버에 대한 SMS 공급자를 찾은 다음 지정된 자격 증명으로 해당 공급자에 연결합니다. 공급자가 로컬 컴퓨터에 있는 경우에는 제공된 자격 증명 대신 현재 로그인한 사용자의 자격 증명이 공급자에 연결할 때 사용됩니다. SMS 서버에서도 SMSMap을 실행할 수는 있지만 가급적이면 Visio가 설치된 별도의 워크스테이션에서 실행하는 것이 좋습니다. 대부분의 SMS 사이트 서버에 Visio가 설치되어 있지 않은 데는 그만한 이유가 있습니다.

SMSProvider 클래스를 통해 SMS 사이트의 데이터에 액세스하는 경우 SMS 관리자 콘솔을 사용할 때와 동일하게 보안 권한이 간주됩니다. 예를 들어 SMSProvider를 통해 사이트 서버의 설정을 구성하려는 경우 공급자에 연결할 때 사용한 계정에는 관리자 콘솔을 사용할 때와 동일한 권한 집합이 있어야 합니다.

SMSProvider 클래스는 현재 사이트(공급자가 속한 사이트)나 특정 사이트 코드의 사이트에 대한 사이트 설정을 가져올 수 있는 GetSiteSettings 메서드를 제공합니다. 그림 3의 코드 조각은 SMSMap이 대상 사이트 서버의 공급자에 연결하는 방법을 보여 줍니다. 사용자 자격 증명은 Domain\User 형식으로 전달됩니다. 현재 컴퓨터를 나타내기 위해 "."을 지정할 수도 있습니다. 그림 3에는 결과를 UI와 로그에 표시하는 데 사용할 수 있는 코드도 포함되어 있습니다.

Figure 3 GetSiteSettings 코드 조각

Imports System.Management
Imports Microsoft.SystemsManagementServer.Automation

 oProvider = New SMSProvider(txtServer.Text, txtUser.Text, txtPassword.Text)
 oSite = oProvider.GetSiteSettings()
 Trace.WriteLine(“Connected to “ & txtServer.Text & “: “ & My.Computer.Clock.LocalTime)
 ListBox1.Items.Add(“Connected to “ & txtServer.Text & “: “ & My.Computer.Clock.LocalTime)
 Application.DoEvents()
...

다음 단계는 그림 4와 같이 대상 사이트 서버의 SMS 정보를 수집 및 기록하는 XML 파일을 설정하는 것입니다.

Figure 4 XML 파일 만들기

‘ First, Create the XML File 
 oWriter = New XmlTextWriter(m_sXmlFile, System.Text.Encoding.UTF8)
 oWriter.WriteStartDocument()
 oWriter.WriteStartElement(“Hierarchy”)

 ‘ Export Target Site to XML
 oWriter.WriteStartElement(“Site”)
 oWriter.WriteAttributeString(“Code”, oSite.SiteCode.ToString.ToUpper)
 oWriter.WriteStartElement(“SiteServer”)
 oWriter.WriteAttributeString(“Name”, oSite.SiteServer.ToString.ToUpper)
 oWriter.WriteEndElement()
 oWriter.WriteStartElement(“ParentSiteCode”)
 oWriter.WriteAttributeString(“SiteCode”, “THIS_IS_THE_TOP”)
 oWriter.WriteEndElement()

...

그런 다음에는 그림 5와 같이 대상 사이트를 Visio 다이어그램에 그리고 UI와 로그에서 사이트가 업데이트되도록 해야 합니다.

Figure 5 Visio에서 사이트 그리기

 ‘Draw Central Site
 dblXLocation = 4.25
 dblYLocation = 8.5
 vApp = New Visio.Application()
 vDoc = vApp.Documents.Add(“”)
 vStencil = vApp.Documents.OpenEx(TEMPLATEPATH, 4)
 ‘ Add Layers
 vExistingLayers = CType(vDoc.Pages(1).Layers, Visio.Layers)
 vLayer = CType(vExistingLayers.Add(“Site”), Microsoft.Office.Interop.Visio.Layer)

...

 If oSite.SiteType = SiteTypes.PrimarySite Then
 vFlowChartMaster = vStencil.Masters(“Primary Site”)
 ElseIf oSite.SiteType = SiteTypes.SecondarySite Then
 vFlowChartMaster = vStencil.Masters(“Secondary Site”)
 End If
 vToShape = vApp.ActivePage.Drop(vFlowChartMaster, dblXLocation, dblYLocation)
 vLayer.Add(vToShape, preserveMembers)

...

대상 사이트 서버의 전체 계층 구조를 파악하기 위해 SMS를 쿼리하여 Visio에서 이를 그리는 위의 기본 코드가 실행됩니다. 이 코드는 Level이라는 함수이며 계층 구조의 규모에 관계없이 하위 사이트를 모두 쿼리할 때까지 반복해서 호출됩니다. Level은 SMS 사이트 정보를 수집하여 대상 사이트 내 각 하위 사이트의 로그와 UI 및 XML에 이를 기록합니다. 마지막으로 그림 6은 유틸리티를 시작할 때 선택한 형식으로 Visio 다이어그램의 서식이 설정되는 방식을 보여 줍니다. 그런 다음 XML과 로그 파일이 닫힙니다.

Figure 6 마무리

 vDoc.Pages(1).Layout()
 vDoc.Pages(1).ResizeToFitContents()

 ‘Calculate the page width and height with a 5% boundary 
 visCell = vDoc.Pages(1).PageSheet.Cells(“PageHeight”)
 dHeight = visCell.Result(“in”)
 visCell = vDoc.Pages(1).PageSheet.Cells(“PageWidth”)
 dWidth = visCell.Result(“in”)
 dHeight = dHeight + 1
 dWidth = dWidth + 1
 vDoc.Pages(1).PageSheet.Cells(“PageHeight”).Result(“in”) = dHeight
 vDoc.Pages(1).PageSheet.Cells(“PageWidth”).Result(“in”) = dWidth
 vDoc.Pages(1).CenterDrawing()
 Trace.WriteLine(“Arranged Sites “ & oSite.SiteServer & “: “ & My.Computer.Clock.LocalTime)
 ListBox1.Items.Add(“Arranged Sites “ & oSite.SiteServer & “: “ & My.Computer.Clock.LocalTime)
 vFlowChartMaster = vStencil.Masters(“Background world”)
 vApp.ActivePage.Drop(vFlowChartMaster, 0, 0)

 ‘Finish up
 vDoc.SaveAs(SAVENEWFILE)
 vDoc.Close()
 vApp.Quit()
 vDoc = Nothing
 vApp = Nothing
 GC.Collect()

...

첫걸음

물론 아직까지는 시작에 불과하며 개선의 여지가 많이 남아 있습니다. SDK에서 Device Management Point(장치 관리 지점)를 찾지 못했으므로 이것도 검토해야 합니다. 사이트를 완전하게 문서화하기 위해 여러 가지 다른 사이트 설정을 추가할 수 있습니다. 크고 작은 계층 구조를 보다 보기 좋게 만들려면 보다 많은 시간과 노력을 들여 매우 다양한 Visio 레이아웃 설정을 추가해야 할 것입니다. 레이아웃 유형마다 효과적인 다이어그램을 표현하려 할 때 고유한 어려움이 있습니다. 물론 System Center Configuration Manager 2007에 대한 지원을 추가하는 것도 다음에 달성해야 할 매우 중요한 단계입니다. 그렇지만 이 첫 번째 버전의 SMSMap만으로도 SMS 관리자가 Visio 레이어와 투명성을 통해 대략적인 그림을 표현하고 몇몇 가정 시나리오를 시도하는 데 많은 도움이 될 것입니다.

소스 코드를 다운로드하여 고유의 필요에 맞게 유틸리티를 확장할 수 있습니다. 필자는 SMSMap을 Visio 2003이 설치된 Windows XP SP2와 Visio 2007이 설치된 Windows Vista™ Enterprise에서 테스트했습니다. 이 유틸리티를 개선하는 것과 관련하여 의견이 있으시면 jeff.tondt@microsoft.com으로 전자 메일을 보내주시기 바랍니다.

Jeff Tondt는 Microsoft Consulting Services의 수석 컨설턴트로, 주로 시스템 관리, 자동화 및 패치 관리를 담당하고 있으며 SMS 분야의 전문가입니다. 문의 사항이 있으면 jeff.tondt@microsoft.com으로 연락하시면 됩니다.

© 2008 Microsoft Corporation 및 CMP Media, LLC. All rights reserved. 이 문서의 전부 또는 일부를 무단으로 복제하는 행위는 금지됩니다..