Geoserver
공식 문서에 JNDI
설정법을 톰캣 서블릿 엔진에 대해서만 알려주고,
Platform Independent Binary
패키지에서 사용되는 Jetty
서블릿 엔진에서의
JNDI
설정법은 알려주고 있지 않습니다.
결국 혼자 이리저리 찾아다녀서 방법을 알아냈고, 그 방법을 공유합니다.
GeoServer
참고로 여기서 사용된 geoserver 버전은 2.24.2
이며,
다운로드 패키지는 Platform Independent Binary
입니다. (다운로드 링크)
Platform Independent Binary
는 서블릿 엔진으로 jetty
를 사용합니다.Jdk 는 21
버전을 사용했습니다
자신의 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
버튼을 클릭합니다. 그러면 다운로드가 됩니다.
{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
{geoserver 설치 경로}/start.ini
파일을 에디터로 열어주고,
맨 끝줄에 아래 그림처럼 --module=plus
문구를 추가해주면 됩니다. (#
는 주석입니다)
{geoserver 설치 경로}/webapps/geoserver/WEB-INF/lib
에 먼저
jndi
가 사용할 커넥션 풀 라이브러리(jar)를 설치해줘야 합니다.
저는 HikariCp
를 사용하기 위해서 아래처럼 하나 추가했습니다.
{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
의 명칭입니다.{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>
{geoserver 설치 경로}/bin
디렉토리에 자신의 실행 파일이 있을 겁니다.
이거는 꼭 해야되는 건 아닙니다. 다만 저는 프로그램 시작할 때 보이는
경고문이 조금 성가셔서 작업해주는 겁니다.
GEOSERVER_HOME
, GEOSERVER_DATA_DIR
환경변수를 세팅해줍니다.
set GEOSERVER_HOME="{geoserver 설치 경로}"
set GEOSERVER_DATA_DIR="{geoserver 설치 경로}\data_dir"
실제 적용 예시
반드시 관리자 권한
으로 CMD
혹은 Powershell
을 실행시키고,
앞서 저희가 수정했던 startup.bat
파일을 실행시켜 줍니다.
기동이 완료되었다면 http://localhost:8080/geoserver
에 접속해서
화면이 정상적으로 나오는지 확인합니다.
admin
geoserver
... 로 로그인도 잘되는지 최종적으로 확인합니다.
coding_toast
라는 이름의 작업공간을 생성했습니다.schema
는 실제 Database 에 존재하는 스키마를 작성하면 됩니다.이상으로 JNDI 설정법이였습니다.
고생하셨습니다.
https://docs.geoserver.org/stable/en/user/configuration/globalsettings.html
https://docs.geoserver.org/stable/en/user/datadirectory/configtemplate.html#datadir-configtemplate
https://docs.geoserver.org/stable/en/user/community/proxy-base-ext/usage.html
https://mvnrepository.com/artifact/org.eclipse.jetty.aggregate/jetty-all/9.4.54.v20240208
안녕하세요 당신이 저를 살리셨습니다. 감사합니다. 앞으로 주님말고 당신에게 매일 기도를 올리기로 했습니다.