개발한 Web OpenAPI를 Spring 프레임워크에서 사용할 때 ..

제목이 참 마땅히 지을만한것도 없고.. 어여 이 곳에 정리해 내 머리속에서 지워버리고자 하는 마음에 지은 제목입니다.

상황은.. jetty를 사용해 지도 OpenAPI를 만들었고, 이 OpenAPI를 Spring 프레임워크를 기본으로 하는 웹 시스템에서 사용하는데, AJAX의 POST 방식으로 OpenAPI를 호출합니다. 이때 이 OpenAPI를 Spring 프레임워크가 아닌 환경에서는 Cross Domain 문제가 발생하지 않습니다. 물론 발생하지 않도록 OpenAPI 서버에 조치를 해두었습니다. 그런데.. Spring 프레임워크에서는 Cross Domain 에러가 발생합니다. 신기한건.. AJAX의 GET 방식은 Cross Domain 에러가 발생하지 않고 POST 만 발생합니다.

먼저 Cross Domain 문제는 아래의 코드를 OpenAPI 서버(jetty를 활용하는 서버)에 적용하여 해결할 수 있었습니다. 코드가 긴데.. 불필요한 코드가 있을거라 생각되지만 일단 모두 기재합니다.

위의 코드를 OpenAPI 서버에 적용하면 더 이상 Cross Domain 에러가 발생하지 않습니다만, 여전이 문제가 있습니다. POST 방식으로 데이터를 전달 하는데.. 이 데이터의 형식이 일반적으로 흔한 FORM 형태로 전달되어야 합니다. 그런데 Spring에서는 payload라는 형식으로 전달됩니다. 이에 대한 문제는 클라이언트 웹단에서 AJAX 호출시 headers 옵션값을 추가적으로 지정해 주면 해결됩니다. 즉, 아래처럼요.

솔찍히 Spring 프레임워크에서 발생하는 문제인지는 모르겠습니다. 단지 Spring 프레임워크가 아닌 환경에서는 문제가 발생하지 않았으므로, 아마도 Spring 프레임워크 환경에서 발생하는 문제라고 추측할 뿐이지만.. 여튼 이와 유사한 문제가 발생할 경우에 대한 해결책으로써 기록을 남깁니다.

GDAL에서 제공하는 Command 정리

GDAL은 geotif 등과 같은 Raster 데이터에 대해 수행할 수 있는 다양한 Command를 제공합니다. Raster 파일에 대한 Extent와 좌표계 정보를 얻을 수 있는 gdalinfo.exe에서부터 영상에서 특정 영역만을 뽑아내 또 다른 영상 파일로 저장할 수도 있고, 좌표계에 대한 투영변환도 가능하며 GCP를 지정해 Georeferencing도 가능합니다. GIS 개발자에게 Raster 데이터를 저수준에서 처리하기 위해 GDAL는 매우 활용도가 높고 중요한 오픈소스 라이브러리입니다. (GDAL 라이브러리만 있다면 어떠한 GIS 데이터 포맷이든 모두 내 손 안에 있다규 !!)

GDAL에서 제공하는 Command 명령 중 실제 작업 중에 사용했던 것을 정리해 둡니다.

1. Raster 데이터의 정보 보기

Z:\> gdalinfo A.tif

위의 명령은 A.tif 파일에 대한 좌표계 및 Extents 등에 대한 정보를 얻기 위한 명령입니다.

2. geotif 영상에서 원하는 부분만을 잘라내 또다른 파일로 저장하기

Z:\> gdalwarp -te 197789.97 552829.04 199789.97 554829.04 G:\img\geotif\Seoul_10cm_GRS80.tif g:\a.tif

위의 명령은 Seoul_10cm_GRS80.tif 영상 파일에서 MBR(197789.97 552829.04 199789.97 554829.04)에 대한 부분을 a.tif 파일로 저장하기 위한 명령입니다.

3. GCP를 지정한 Georeferencing 하기

Z:\> gdal_translate -of GTiff -gcp 48.954 1298.304 219084 362071 -gcp 1174.042 348.95 219261 362144 -gcp 2610.376 5.8401 219418 362116 A.jpg B.tif
Z:\> gdalwarp -r lanczos B.tif C.tif

위의 연속적으로 실행되는 2개의 명령 중 첫번째는 GCP를 3개 사용해 입력 파일인 A.jpg 파일에 대해 Georeferencing 하여 B.tif 파일로 저장하라는 명령이고, 두번째는 저장된 B.tif를 Resizing 알고리즘 중 lanczos를 사용해 c.tif 파일로 저장하라는 명령입니다.