티스토리 뷰
목차
ArcGIS 서버 응용프로그램 성능 및 조율 사항
ArcGIS 개념과 용어정리 (ArcGIS Server Concepts and Terminology)
출처 : ESRI 기술 문서 (ESRI Technical Paper), 2004년 9월
5. ArcGIS Server 응용프로그램 성능 및 조율 사항
응용 프로그램 상태 및 확장성
GIS 서버의 사용을 상태-유지(stateful) 방식으로 하는가 상태-비유지(stateless) 방식으로 하는가는 사용자 응용프로그램의 확장성에 있어서 매우 중요한 문제이다. 같은 컴퓨터 자원을 가지고 더 많은 수의 사용자를 수용할 수 있는 응용프로그램은 그렇지 못한 것보다 더 좋은 확장성을 가지고 있다.
확장성에 이르는 핵심 요소는
- GIS 서버를 상태-비유지 방식으로 사용하고
- 풀링되는 서버 오브젝트를 사용하며
- 서버 오브젝트는 될 수 있는 대로 조속히 해제함으로써 응용프로그램이 서버 오브젝트를 붙잡는 시간을 최소로 하고, .NET 또는 Java에서 제공하는 비사용 메모리 해제기능(가비지 컬렉션)에 의존하지 않는 것에 있다.
상기 기준을 적용함으로써, 상태-비유지 또는 약한 상태-유지 응용프로그램은 오브젝트 풀링을 활용하고, 그 결과 강한 상태-유지 응용프로그램보다 더 확장성이 있다는 것은 분명하게 이해된다. GIS 서버에 대한 상태-유지 대 상태-비유지에 관한 문제는 응용프로그램 설계에 있어서 매우 핵심적인 부분이다.
ArcGIS Server 성능 및 조율
ArcGIS Server 응용프로그램을 개발한다는 것은 ArcObjects를 원격적으로 프로그래밍하는 것과 같다.
같은 맥락으로, 서버 API는 광범위하며 오브젝트 라이브러리의 연속으로 구성된 다량의 ArcObjects 컴포넌트를 포함하고 있다.
개발자들에게는 서버 API를 이용하여 다양한 종류의 응용프로그램을 구축할 수 있어서, 고성능의 확장성 있는 응용프로그램을 구축함이 가능한 것과 동시에 확장성이 모자란 매우 느리게 작동하는 응용프로그램 구축도 가능하다.
여기에서는 후자의 경우를 극복할 수 있는 전략을 논할 것이지만, 이것은 궁극적으로 주어진 하드웨어 가용자원을 성능과 확장성에 잘 부합하도록 설계하는 개발자와 GIS 서버 운관리자의 손에 달린 것이다.
ArcGIS Server와 미세 짜임의 ArcObjects 컴포넌트
ArcGIS Server는 ArcGIS Engine 및 ArcGIS Desktop이 사용하는 것과 같은 ArcObjects 컴포넌트를 사용한다; 그래서, ArcGIS Engine이나 ArcGIS Desktop에 적용하여 좋지 않은 성능을 발휘하는 GIS 기능이 서버 응용프로그램이 포함되어 있다면, 해당 기능은 서버에 적용되었을 때에도 형편없는 성능을 보일 것이다.
역으로, 해당 기능이 ArcGIS Engine이나 ArcGIS Desktop에 적용되어 좋은 성능을 보인다면, 서버에서 ArcObjects를 잘 사용하도록 적절히 조율되어 적용되었을 때 서버에도 좋은 성능을 보일 것이다.
MapServer 및 GeocodeServer에 대한 조작방법처럼 원격 ArcObjects 컴포넌트로 보내는 간결한 짜임 호출과 폴리곤 주변의 모든 변곡점에 반복처리를 적용하는 것과 같은 미세한 짜임의 호출은 모두 ArcGIS Server API를 통하여 공개되어 있고 사용자 응용프로그램에 사용된다.
그렇지만, 서버에서 실행되고 있는 오브젝트를 웹 응용프로그램에서 호출하고 자 할 때, 그 호출은 모든 프로세스에 두루 걸쳐서 적용된다는 것에 유념할 필요가 있다. 웹 서버는 하나의 프로세스에서 실행되는 데 반하여, 오브젝트는 또 다른 프로세스에서 실행된다.
여러 프로세스에 관여되어 있는 오브젝트에 거는 호출은 같은 프로세스에 관여된 오브젝트에 거는 호출보다 현저하게 느리게 작용한다. 웹 응용프로그램이 다운되는 웹 서버는 대체로 오브젝트가 실행되고 있는 것과는 다른 장비에서 다운되기 때문에, 호출은 프로세스에 대해서는 물론이고 장비에 대해서도 두루 걸쳐서 적용된다.
단일 호출 또는 수십 개 단위의 호출에서 나타나는 확장성 성능 차이는 응용프로그램의 전반적인 성능에 있어서 그렇게 중대한 것은 아니다. 그러나, 만일 응용프로그램이 프로세스 또는 장비에 두루 걸치는 수천 개의 미세한 짜임의 ArcObjects 호출을 발생시킨다면 중대한 성능상의 향상이 응용프로그램에 가해질 수 있다.
원격 오브젝트에 전달하는 미세한 짜임 호출 횟수를 줄임으로써 응용프로그램과 GIS 서버 간의 왕복호출은 최소화해야 한다.
응용프로그램의 특성상 미세한 짜임의 ArcObjects 작업이 꼭 요구된다면, 원격 호출을 최소로 유지하면서 해당 기능을 달성하는 전략은 Visual Basic, C++, 또는 .NET으로 개발할 수 있는 응용프로그램에 특화된 COM 객체 유틸리티로 GIS 서버를 확장하는 것이다.
성능 조율 요약
- 원격 ArcObjects 컴포넌트에 보내는 미세한 짜임 호출을 최소화하는 것이 필요하다.
- 만일 미세한 짜임의 ArcObjects 호출이 필수적이라면, 미세한 짜임의 ArcObjects 소요를 서버 쪽으로 옮겨주는 COM 객체를 생성함으로써 서버를 확장하도록 고려해야 한다.
- 응용프로그램 사용자가 대단히 많은 건수를 조회하지 않도록 하며, 조회한 결과 건수를 제한하도록 한다.
- 조회결과 제한기능과 특정 MapServer 또는 GeocodeServer의 산출물이 응용프로그램에 대해 잘 설정되도록 GIS 서버 운관리자와 더불어 확고히 한다.
ArcGIS 서버 응용프로그램 성능 및 조율 사항