[Geoserver] 특정 저장소에 있는 레이어를 다른 저장소에 옮기는 방법
이번에 Geoserver의 특정 저장소에 있는 레이어들을 다른 저장소로 한번에 옮겨야 할 일이 있어서 정리해본다.
우선 geoserver의 저장소는 아래와 같은 구조인데
geoserver에는 여러개의 작업공간이 있고, 그 작업공간에는 또 여러개의 저장소들이 있다. 그리고 그 저장소는
여러개의 레이어들을 포함하고 있다.
근데 만약 작업공간A에 있는 저장소a에 있는 모든 레이어들을 저장소b로 옮기고 싶다면 어떻게 해야 될까?
저장소a에 있는 레이어들을 저장소b로 옮기고 저장소a는 삭제해야 되는 상황..
(물론 다 옮기는게 아니라 몇개만 옮기는 상황도 포함됨)
특정 저장소에 있는 레이어들을 다른 저장소로 옮기는 방법
geoserver의 workspaces디렉터리로 가자.
보통 D:\geoserver-2.21.1-bin\data_dir\workspaces 이 경로임.. ( 설치 경로만 환경에 따라 바꿔주면 된다.. )
이 경로에 있는게 작업공간인데, 본인이 이동을 원하는 저장소를 가진 작업공간에 들어가도록 하자.
나는 topp 작업공간에 들어가보도록 하겠다.
topp 작업공간에는 states_shapefile과 taz_shapes라는 저장소 2개가 있다. 그리고 그 아래에는 각각 레이어들을 포함한다.
이제 taz_shapes저장소에 있는 레이어들을 states_shapefile저장소로 옮겨보도록 하자.
1) taz_shapes저장소에 있는 레이어들을 states_shapefile저장소로 복사 붙여넣기를 한다.
2) 이동한 레이어들의 featuretype.xml을 열어 DataStoreInfoImpl를 수정해준다.
여기에서 가장 중요한 부분이다. 각 레이어 디렉터리에 가면 featuretype.xml이 있는데
이 친구가 비유하자면, "주민등록증" 같은 느낌이다. 이 레이어의 모든 정보가 들어있다.
그 중에 <store>태그는 이 레이어가 어느 저장소의 레이어인지를 나타낸다. 즉,
taz_shapes저장소에 있는 레이어들을 states_shapefile저장소로 옮기긴 했지만, taz_shapes저장소에 있던 레이어들은
아직 states_shapefile저장소를 바라보고 있기 때문에 taz_shapes저장소를 바라보도록 수정해야 한다.
위의 <store>안에 있는 <id>값을 states_shapefile저장소의 DataStoreInfoImpl로 변경해준다.
해당 정보는 states_shapefile 디렉터리의 datastore.xml 파일에 있다. (datastore.xml은 저장소의 주민등록증 같은 느낌..)
즉 여기에서는 이동한 레이어들의 featuretpye.xml에서
<id>DataStoreInfoImpl--570ae188:124761b8d78:-7fdc</id> 값을
<id>DataStoreInfoImpl--570ae188:124761b8d78:-7fd9</id> 로 변경해주면 된다.
레이어들이 많아서, featuretype.xml을 편집하기 힘들면 윈도우 환경에서 powershell을 이용해서 특정 경로의
모든 xml 내용을 편집 할 수도 있다. (편함) 아래 링크를 참조하도록 하자.
[기타] 특정 경로에 있는 모든 파일(XML)의 내용 변경하는 방법 (feat. PowerShell)
이렇게 변경을 해준 뒤, geoserver를 재구동 해주면 변경 된 저장소로 레이어들이 이동 된 것을 확인 할 수 있다.
ps. 레이어들을 옮긴 뒤 featuretype.xml를 수정하지 않아도 저장소 이동은 된다. 단
레이어들은 변경 된 저장소를 바라보고 있지 않기 때문에 새로 일일이 발행해줘야 한다. 그럴바에
xml파일을 변경하는게 더 편하다.