[GeoServer] Platform Independent Binary - JNDI 설정법

식빵·2024년 4월 19일
1

Geoserver

목록 보기
5/7
post-thumbnail

Geoserver 공식 문서에 JNDI 설정법을 톰캣 서블릿 엔진에 대해서만 알려주고,
Platform Independent Binary 패키지에서 사용되는 Jetty 서블릿 엔진에서의
JNDI 설정법은 알려주고 있지 않습니다.

결국 혼자 이리저리 찾아다녀서 방법을 알아냈고, 그 방법을 공유합니다.

사용된 GeoServer, JDK 버전

GeoServer

참고로 여기서 사용된 geoserver 버전은 2.24.2 이며,
다운로드 패키지는 Platform Independent Binary 입니다. (다운로드 링크)

  • Platform Independent Binary 는 서블릿 엔진으로 jetty 를 사용합니다.

Jdk 는 21 버전을 사용했습니다




필수 Jar 다운로드

자신의 geoserver 다운로드 경로에 위 그림처럼 lib 디렉토리가 있을 겁니다.
해당 lib 디렉토리를 열면 jetty 모듈에서 사용하는 다양한 jar 가 보입니다.

다만 위의 그림처럼 jetty-jndi-<버전>.jar, jetty-plus-<버전>.jar 는 보이지 않을 겁니다.
이 2개의 jar 는 직접 수동으로 다운로드 받아서 직접 lib 디렉토리에 넣어줘야 합니다.


jar 다운로드는 maven repository 를 활용하면 됩니다.
다만 버전 선택을 유의해야 합니다. 현재 자신의 lib 디렉토리에 있는
다른 jetty-???-<version>.jar 파일의 version 과 동일한 걸 다운 받아야 합니다.


이점 유의해서 아래 링크로 들어가서 각각의 jar 를 다운로드 받으면 됩니다.


저는 9.4.52.v20230823 버전을 사용함으로 아래와 같이 다운로드를 받았습니다.

1. 각각의 링크에 들어가서 스크롤을 좀 내려서 제가 원하는 버전의 버튼을 클릭합니다.


2. 화면 상단 즈음에 보이는 jar 버튼을 클릭합니다. 그러면 다운로드가 됩니다.



mod 파일 작성

{geoserver 설치 경로}/modules 디렉토리 안에서
plus.mod 라는 이름의 파일을 생성합니다.


그리고 아래처럼 작성합니다.

[description]
for jndi configuration

[lib]
lib/jetty-plus-${jetty.version}.jar
lib/jetty-jndi-${jetty.version}.jar

[xml]
etc/jetty-plus.xml



start.ini 파일 수정

{geoserver 설치 경로}/start.ini 파일을 에디터로 열어주고,

맨 끝줄에 아래 그림처럼 --module=plus 문구를 추가해주면 됩니다. (# 는 주석입니다)



커넥션 풀 라이브러리 설치

{geoserver 설치 경로}/webapps/geoserver/WEB-INF/lib 에 먼저
jndi 가 사용할 커넥션 풀 라이브러리(jar)를 설치해줘야 합니다.
저는 HikariCp 를 사용하기 위해서 아래처럼 하나 추가했습니다.



jetty-web.xml 생성

{geoserver 설치 경로}/webapps/geoserver/WEB-INF 경로에서
jetty-web.xml 을 하나 생성합니다.


그리고 아래처럼 내용을 작성합니다.

<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">

<Configure class="org.eclipse.jetty.webapp.WebAppContext">
    <New class="org.eclipse.jetty.plus.jndi.Resource">
        <Arg></Arg>
        <Arg>jdbc/mydb</Arg>
        <Arg>
            <New class="com.zaxxer.hikari.HikariDataSource">
                <Arg>
                    <New class="com.zaxxer.hikari.HikariConfig">
                        <Set name="driverClassName">org.postgresql.Driver</Set>
                        <Set name="jdbcUrl">jdbc:postgresql://localhost:5432/postgres</Set>
                        <Set name="username">postgres</Set>
                        <Set name="password">root</Set>
                        <Set name="maximumPoolSize">50</Set>
                    </New>
                </Arg>
            </New>
        </Arg>
    </New>
    <!-- 아래 한줄은 지금 내용과 관련없으므로 주석처리 -->
    <!--<Set name="maxFormContentSize">10000000</Set>-->
</Configure>
  • <Arg>jdbc/mydb</Arg> 에 작성된 것이 추후에 사용할 jndi 의 명칭입니다.



web.xml 내용 수정

{geoserver 설치 경로}/webapps/geoserver/WEB-INF 경로에서
web.xml 을 편집기로 열여줍니다.


web.xml 을 열면 이미 수많은 설정들을 볼 수 있습니다.
하지만 신경 쓸 필요없습니다.

저희는 그저 맨 끝 줄 바로 위에 resource-ref 태그를
아래 예시처럼 추가만 해주면 됩니다.

<?xml version="1.0" encoding="UTF-8"?>
<web-app 
        xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
        metadata-complete="false"
        version="3.1">
    <display-name>GeoServer</display-name>
  
    <!-- 중간 내용 모두 생략! -->

    <!-- JNDI 설정 -->
    <resource-ref>
      <!-- jetty-web.xml 에서 지정했던 jndi 이름과 동일해야 합니다! -->
      <res-ref-name>jdbc/mydb</res-ref-name>
      <res-type>javax.sql.DataSource</res-type>
      <res-auth>Container</res-auth>
    </resource-ref>
</web-app>



startup.bat, shutdown.bat

{geoserver 설치 경로}/bin 디렉토리에 자신의 실행 파일이 있을 겁니다.
이거는 꼭 해야되는 건 아닙니다. 다만 저는 프로그램 시작할 때 보이는
경고문이 조금 성가셔서 작업해주는 겁니다.
GEOSERVER_HOME, GEOSERVER_DATA_DIR 환경변수를 세팅해줍니다.

set GEOSERVER_HOME="{geoserver 설치 경로}"
set GEOSERVER_DATA_DIR="{geoserver 설치 경로}\data_dir"

실제 적용 예시

  • startup.bat


  • shutdown.bat



관리자 권한으로 실행하기

반드시 관리자 권한으로 CMD 혹은 Powershell 을 실행시키고,
앞서 저희가 수정했던 startup.bat 파일을 실행시켜 줍니다.

기동이 완료되었다면 http://localhost:8080/geoserver 에 접속해서
화면이 정상적으로 나오는지 확인합니다.

  • id : admin
  • pw : geoserver

... 로 로그인도 잘되는지 최종적으로 확인합니다.



테스트용 작업공간 생성

  • 저는 coding_toast 라는 이름의 작업공간을 생성했습니다.
  • 네임스페이스 URI 는 실제 도메인일 필요는 없습니다! 그냥 편하게 아무렇게나 지으세요~



jndi 저장소 생성



  • 위 그림에 빨간줄 친 부분이 바로 저희가 jetty-web.xml 에서 지정했던 JNDI 의 명칭입니다.
  • 그 바로 밑에 schema 는 실제 Database 에 존재하는 스키마를 작성하면 됩니다.




JNDI 기반 레이어 발행


  • 앞서 생성한 저장소의 명칭을 골라줍니다.

  • JNDI 로 매핑했던 DB 의 table 들이 보입니다!
  • 발행하기 버튼만 클릭하면 끝입니다.



이상으로 JNDI 설정법이였습니다.
고생하셨습니다.



참고 링크

profile
백엔드를 계속 배우고 있는 개발자입니다 😊

2개의 댓글

comment-user-thumbnail
2024년 11월 7일

안녕하세요 당신이 저를 살리셨습니다. 감사합니다. 앞으로 주님말고 당신에게 매일 기도를 올리기로 했습니다.

1개의 답글