[GIS] XrGeoService의 구조 및 소개

아래의 그림은 Xr 맵 솔루션의 구성 요소 중 지도 데이터 서비스와 지오프로세싱 및 편집 서비스를 담당하는 XrGeoService의 개략적인 구조입니다. 제공하는 지도 데이터는 미리 렌더링된 일정 크기의 타일 지도 이미지와 수치지도 데이터와 관련된 속성데이터입니다.

사용자 삽입 이미지
클라이언트의 요청(지도데이터 서비스, 편집 서비스, 지오프로세싱 서비스)을 원할하게 처리하기 위해 스레드를 적절하게 분배했으며 포퍼먼스를 극대화 하기 위해 자체적으로 HTTP를 사용하는 웹서버 기능을 내장하고 있습니다. Geodatabase를 통해 다양한 데이터소스에 접근할 수 있으며 대략적인 구조는 아래 그림과 같습니다.

사용자 삽입 이미지
추상화된 Access를 통해 파일, 다양한 상용 DBMS를 지원합니다. 추후 ArcSDE를 통한 지원할 예정이며 XrGeoService는 자바로 개발되어 ArcSDE를 손쉽게 지원할 수 있습니다.

DataUpdater를 통해 원격으로 공간 데이터를 편집할 수 있으며 편집 이력에 대한 시간대별 관리를 지원하여 워하는 시점으로 Rollback이 가능합니다.

XrGeoService의 장점은 공간데이터의 편집 서비스와 다양한 공간데이터베이스를 손쉽게 지원하는 것뿐만 아니라 공간 데이터를 이용한 공간분석 기능인 지오서비스(GeoService) 기능을 제공합니다. 아래의 그림은 GeoprocessingControl을 통해 제공되는 지오서비스에 대한 그림입니다.

사용자 삽입 이미지
원활하고 정확한 지오프로세싱을 위해 방대한 공간 데이터와 속성 데이터가 필요한데 이런 데이터군을 관리하는 서버에서 지오프로세싱을 처리하는 것이 옳바르며 결과만을 클라이언트에게 전송해주는 방식입니다.

[GIS] Xr의 Package Diagram

사용자 삽입 이미지
Xr 맵엔진을 구성하는 핵심 패키지는 위의 다이어그램에서 보이는 것처럼 Data, View, Access, Edit가 있고, 이외에 공통 모듈인 Common과 외부 라이브러리 모듈 패키지인 Extern이 존재합니다. 예전에는 하나의 프로젝트에 모든 패키지를 묶었으나 종속성을 최대한 줄이기 위하여 이번 Xr 맵엔진 개발에서는 각 패키지를 별도의 프로젝트로 분리시켰습니다.

각 모듈에 대해 간단하게 설명을 하면… Access는 파일이나 서비스로부터 데이터를 가져오고 보내는 일을 담당하며 이렇게 주고 받은 데이터를 Data 모듈에서 제공하는 데이터 타입의 인스턴스를 생성합니다. View는 Data를 화면상에 그리는 역활을 하는 모듈이며 Edit는 Data를 편집하고, 편집하기 위해 화면상에 사용자의 입력을 반영하기 위해 View 모듈을 사용하고 이렇게 편집된 데이터를 파일이나 서버에 반영하기 위해 Access 모듈을 사용합니다.

사용자 삽입 이미지
끝으로 위의 그림은 앞서 글로만 잠시 설명했던 두개의 패키지 모듈입니다. Extern은 서드파티 개발자로부터 제공받은 외부 라이브러리로써, 예를 들어 ziplib나 shapelib 등이 있습니다. 그리고 Common은 공통적인 데이터 타입이나 메시지 상수, 매크로 정의, 유틸리티 핼퍼 함수 클래스들의 모음입니다. 이 Extern과 Common은 필요할 경우 전역적으로 참조되는 모듈입니다.

[GIS] ESRI의 SHP,DBF와 지오서비스의 XrV,XrT의 파일 크기 비교

파일 크기가 작다고해서 효율성이 뛰어나다는 것은 아닙니다. 지오서비스의 Xr 맵엔진이 사용하는 수치지도 포맷인 XrV와 속성데이터 포맷인 XrT는 네트워크 서비스에 최적화하기 위해 파일 크기를 최소화하였습니다. 물론 압축은 하지 않습니다. 압축에 대한 트레이드오프가 발생하는데.. 압축을 하면 크기가 줄어 네트워크 전송에 대한 속도를 단축할 수 있지만 압축을 하고 압축을 푸는 시간을 고려하면 이러한 시간 단축에 대한 이점이 상쇄되는지라 압축에 대한 선택은 파일 포맷에서 결정하지 않고 이 파일을 사용하는 클라이언트 어플리케이션의 책임으로 넘겼습니다. ESRI가 처음부터 SHP와 DBF는 네트워크 통신을 통한 서비스 기반으로 설계되지 않았으므로 이러한 크기 최적화가 거의 되어 있지 않습니다.

사용자 삽입 이미지
위의 그래프는 150MB의 DBF 파일과 100MB의 SHP 파일을 지오서비스의 지도 파일(XrV, XrT)로 변환하여 크기를 서로 비교한 것입니다. 벡터 데이터의 경우 절반정도로 줄었고 속성 데이터의 경우 1/5로 상당히 줄었음을 알 수 있습니다.

Xr 맵엔진의 서버를 개발하기에 앞서 서버의 퍼포먼스를 최대화 하기 위해 기반이 되는 데이터를 최적화하는 작업을 하면서 SHP와 DBF 간의 파일 크기면에서 살펴보았습니다.

MySql 터미널 모니터 사용 정리

이 문서는 MySQL을 설치하면 제공되는 터미널 모니터의 사용법을 간단히 정리한 것입니다. 가장 먼저 서버에 연결하는 방법은 아래와 같습니다.

c:\>mysql -h localhost -u root -p
Enter password: ******

쉘에서 mysql 명령을 통해 인자 -h에는 호스트(여기서는 localhost를 지정했으며 로컬일때는 생략이 가능)를 제공하며 -u에는 사용자의 ID(여기서는 root)를 제공하고 마지막으로 -p 옵션을 주어 패스워드를 입력받을 수 있도록 합니다.

사용자 삽입 이미지
패스워드를 올바르게 입력하고 모든 것이 성공하면 위의 그림처럼 mysql>가 뜨고 명령을 입력할 수 있는 상태가 됩니다. 참고로 연결을 끊는 방법은 quit 명령을 내려 종료할 수 있습니다.

시험 삼아 다음 명령을 내려 MySQL의 기능을 테스트해 보도록 하겠습니다.

SELECT VERSION(), CURRENT_DATE;
SELECT SIN(PI()/4), (4+1)*4;
SELECT NOW();

이 세 명령에 대한 결과는 아래와 같습니다.

사용자 삽입 이미지
참가로 명령어 입력 도중에 취소를 하고자 한다면 \c를 입력하고 엔터키를 누르면 됩니다. 정리하면 명령어는 대소문자를 구분하지 않으며 끝은 반드시 ; 으로 끝나야 합니다.

이제 다음은 데이터베이스를 생성하는 명령입니다.

CREATE DATABASE XrGeoDatabase

지금까지 생성되어진 데이터베이스의 목록을 살펴보는 명령은 다음과 같습니다.

SHOW DATABASES;

이 데이터베이스 중에 사용할 데이터베이스를 선택하는 명령은 다음과 같습니다.

USE XrGeoDatabase;

아래는 위에서 새롭게 보인 세개의 명령을 순차적으로 내려 MySQL에서 처리된 결과 화면입니다.

사용자 삽입 이미지
데이터베이스에 대한 명령으로써 삭제에 대한 것은 아래와 같습니다.

DROP DATABASE XrGeoDatabase;

이제 데이터베이스를 선택했고 이 선택한 데이터베이스 안에 테이블을 생성하는 명령은 아래와 같습니다.

CREATE TABLE tablename (
    column_name1 INT,
    column_name2 VARCHAR(15),
    column_name3 INT );

테이블이 잘 생성되었는지 선택된 데이터베이스에 존재하는 테이블의 목록을 살펴보는 명령은 다음과 같습니다.

SHOW TABLES;

특정 테이블에 대한 테이블 스키마를 살펴보는 명령은 다음과 같습니다.

EXPLAIN tablename;

아래의 그림은 위의 세가지 명령을 순서대로 수행한 것에 대한 화면의 결과입니다.

사용자 삽입 이미지
참고로 테이블의 이름을 변경하는 명령은 다음과 같습니다.

RENAME TABLE tablename TO other_tablename;

그리고 필요하지 않은 테이블을 삭제하는 명령은 다음과 같습니다.

DROP TABLE tablename;

MySQL은 사용자가 작업하는 과정의 상태 정보를 제공하기 위해 status 명령을 제공합니다. 또한 명령 처리에 대해 오류나 경고가 발생할 경우 그 메세지를 다시 보기 위해 show errors와 show warnings 명령을 제공합니다.

이외에 데이터를 쿼리하고 레코드를 추가하고 변경하는 등의 SQL문에 대해 간단한 예를 통해 보이고 마무리 하겠습니다.

테이블로부터 지정한 필드들에 대한 값을 쿼리하는 명령

SELECT col1, col2 FROM tablename;

레코드를 추가하는 명령

INSERT INTO tablename VALUES (value1, value2);

조건에 맞는 레코드의 값을 변경하는 명령

UPDATE tablename SET col1=newValue WHERE col2=value;

레코드를 삭제하는 명령

DELETE FROM tablename WHERE col2=value;