-
JEUS auto-deploy 팁WAS/JEUS 2025. 6. 24. 23:57

개발 목적으로 Webtob/JEUS 구성을 위한 분들을 위한 가이드 포스팅 :)
TmaxSoft Engineer의 설치방식으로 진행되며, JEUS는 11년 연속 국내 1위 미들웨어입니다.
✅ JEUS auto-deploy 설정 어떻게 해?
JEUS auto-deploy는 2025.06 기준으로 JEUS 8.5만 패치 적용으로 지원하고 있습니다.
설정 내용은 아래 게시글을 참고 부탁드립니다 :)
JEUS 3가지 배포( WAR, Directory, auto-deploy )
개발 목적으로 Webtob/JEUS 구성을 위한 분들을 위한 가이드 포스팅 :) TmaxSoft Engineer의 설치방식으로 진행되며, JEUS는 11년 연속 국내 1위 미들웨어입니다. ✅ JEUS 배포방식?JEUS는 공식적으로는 2가지
ko-o.tistory.com
✅ JEUS auto-deploy Tip!
JEUS auto-deploy 기본 배포를 하게 되면 Application 별칭, context-path가 이름을 따라가게 됩니다.
[ Application 이름 KIOR-jeus-test 인데 호출은 ' / ' 하고 싶을때! ]
우회하기 위해서 jeus-web-dd.xml을 사용합니다 :)

해당 개선사항은 TmaxSoft Official 내용은 아닙니다.
우회 방법으로 생각해본 것입니다. 추후 해당 배포 방식을 많이 사용하다보면 개선되지 않을까? 싶습니다 ☺️
📌 불편한 EX #1
[ jeus-test.war ]를 auto-deploy(WAR) 방식으로 배포.
브라우져 요청시 http://localhost/jeus-test.war/login.jsp 이런식으로 호출해야 합니다.
JVM Option

auto-deploy 기준 디렉토리( /sw/jeus/test )
[jeus@admin:/sw/jeus/test]$ ls -altr total 20 drwxr-xr-x 1 jeus jeus 4096 Jun 24 13:43 .. -rw------- 1 jeus jeus 6543 Jun 24 14:18 jeus-test.war drwxr-xr-x 2 jeus jeus 4096 Jun 24 14:18 .배포확인 및 호출


📌 불편한 EX #2
[ ROOT ]를 auto-deploy(디렉토리) 방식으로 배포.
브라우져 요청시 http://localhost/ROOT/login.jsp 이런식으로 호출해야 합니다.
auto-deploy 기준 디렉토리( /sw/jeus/test )
[jeus@admin:/sw/jeus/test]$ ls -atlr total 16 drwxr-xr-x 1 jeus jeus 4096 Jun 24 13:43 .. drwxr-xr-x 3 jeus jeus 4096 Jun 24 14:18 ROOT drwxr-xr-x 3 jeus jeus 4096 Jun 24 14:28 .배포확인 및 호출


🚀 해결 방법!
우선 jeus-web-dd.xml을 WEB-INF 하위에 만들어 주도록 합니다. (생성 단축: webddgen -file ./)
내용은 아래와 같습니다.
중요한 점은 "<context-path>" 태그입니다 :)
<?xml version="1.0" encoding="UTF-8"?><jeus-web-dd xmlns="http://www.tmaxsoft.com/xml/ns/jeus" version="8.0"> <webinf-first> <enabled>false</enabled> </webinf-first> <!-- the URL path of the context. --> <context-path>/kior</context-path> </jeus-web-dd>그럼 동일하게 불편한 EX #2를 다시 해보겠습니다.
auto-deploy 기준 디렉토리( /sw/jeus/test )
[jeus@admin:/sw/jeus/test]$ ls -atlr total 16 drwxr-xr-x 1 jeus jeus 4096 Jun 24 13:43 .. drwxr-xr-x 3 jeus jeus 4096 Jun 24 14:18 ROOT drwxr-xr-x 3 jeus jeus 4096 Jun 24 14:28 . [jeus@admin:/sw/jeus/test/ROOT/WEB-INF]$ ls -altr jeus-web-dd.xml -rw------- 1 jeus jeus 399 Jun 24 14:37 jeus-web-dd.xml배포확인 및 호출


💡webadmin NPE
auto-deploy 후에 webadmin > Application에서 확인할 때 아래의 사진과 내용이 확인될 것입니다...
해결 방법은 !!! webadmin.war를 패치 입니다.
2025.06 기준으로 공식 패치가 아닌 연구소 패치만 있으니깐 엔지니어에게 문의해서 조치 받으세요! (참고: IMS-340828)

java.lang.NullPointerException at scala.Predef$.Boolean2boolean(Predef.scala:366) at scalate.applications.$_scalate_$application_scaml$$anonfun$$_scalate_$render$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$mcV$sp$13.apply$mcV$sp(application.scaml.scala:218) at scalate.applications.$_scalate_$application_scaml$$anonfun$$_scalate_$render$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$mcV$sp$13.apply(application.scaml.scala:204) at scalate.applications.$_scalate_$application_scaml$$anonfun$$_scalate_$render$1$$anonfun$apply$mcV$sp$1$$anonfun$apply$mcV$sp$13.apply(application.scaml.scala:204) at org.fusesource.scalate.RenderContext$class.withUri(RenderContext.scala:444) at org.fusesource.scalate.DefaultRenderContext.withUri(DefaultRenderContext.scala:31) at jeus.tool.webadmin.tags.JeusTags$$anonfun$layout$1.apply$mcV$sp(JeusTags.scala:391) at jeus.tool.webadmin.tags.JeusTags$.renderBody(JeusTags.scala:404) at scalate.tags.$_scalate_$group_scaml$.$_scalate_$render(group.scaml.scala:100) at scalate.tags.$_scalate_$group_scaml.render(group.scaml.scala:113) at org.fusesource.scalate.RenderContext$$anonfun$render$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(RenderContext.scala:388) at org.fusesource.scalate.RenderContext$$anonfun$render$1$$anonfun$apply$mcV$sp$1.apply(RenderContext.scala:388) at org.fusesource.scalate.RenderContext$$anonfun$render$1$$anonfun$apply$mcV$sp$1.apply(RenderContext.scala:388) at org.fusesource.scalate.RenderContext$class.withUri(RenderContext.scala:444) at org.fusesource.scalate.DefaultRenderContext.withUri(DefaultRenderContext.scala:31) at org.fusesource.scalate.RenderContext$$anonfun$render$1.apply$mcV$sp(RenderContext.scala:387) at org.fusesource.scalate.RenderContext$$anonfun$render$1.apply(RenderContext.scala:387) at org.fusesource.scalate.RenderContext$$anonfun$render$1.apply(RenderContext.scala:387) at org.fusesource.scalate.RenderContext$class.withAttributes(RenderContext.scala:418) at org.fusesource.scalate.DefaultRenderContext.withAttributes(DefaultRenderContext.scala:31) at org.fusesource.scalate.RenderContext$class.render(RenderContext.scala:386) at org.fusesource.scalate.DefaultRenderContext.render(DefaultRenderContext.scala:31) at jeus.tool.webadmin.tags.JeusTags$.layout(JeusTags.scala:390) at jeus.tool.webadmin.tags.JeusTags$.group(JeusTags.scala:267) at scalate.applications.$_scalate_$application_scaml$$anonfun$$_scalate_$render$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(application.scaml.scala:204) at org.fusesource.scalate.DefaultRenderContext.capture(DefaultRenderContext.scala:76) at org.fusesource.scalate.RenderContext$class.layout(RenderContext.scala:398) at org.fusesource.scalate.DefaultRenderContext.layout(DefaultRenderContext.scala:31) at jeus.tool.webadmin.tags.JeusTags$.layout(JeusTags.scala:397) at scalate.applications.$_scalate_$application_scaml$$anonfun$$_scalate_$render$1.apply$mcV$sp(application.scaml.scala:76) at org.fusesource.scalate.DefaultRenderContext.capture(DefaultRenderContext.scala:76) at org.fusesource.scalate.RenderContext$class.layout(RenderContext.scala:398) at org.fusesource.scalate.DefaultRenderContext.layout(DefaultRenderContext.scala:31) at scalate.applications.$_scalate_$application_scaml$.$_scalate_$render(application.scaml.scala:45) at scalate.applications.$_scalate_$application_scaml.render(application.scaml.scala:311) at org.fusesource.scalate.DefaultRenderContext.capture(DefaultRenderContext.scala:93) at org.fusesource.scalate.layout.DefaultLayoutStrategy.layout(DefaultLayoutStrategy.scala:45) at org.fusesource.scalate.TemplateEngine$$anonfun$layout$1$$anonfun$apply$mcV$sp$1.apply$mcV$sp(TemplateEngine.scala:568) at org.fusesource.scalate.TemplateEngine$$anonfun$layout$1$$anonfun$apply$mcV$sp$1.apply(TemplateEngine.scala:568) at org.fusesource.scalate.TemplateEngine$$anonfun$layout$1$$anonfun$apply$mcV$sp$1.apply(TemplateEngine.scala:568) at org.fusesource.scalate.RenderContext$class.withUri(RenderContext.scala:444) at org.fusesource.scalate.DefaultRenderContext.withUri(DefaultRenderContext.scala:31) at org.fusesource.scalate.TemplateEngine$$anonfun$layout$1.apply$mcV$sp(TemplateEngine.scala:567) at org.fusesource.scalate.TemplateEngine$$anonfun$layout$1.apply(TemplateEngine.scala:564) at org.fusesource.scalate.TemplateEngine$$anonfun$layout$1.apply(TemplateEngine.scala:564) at org.fusesource.scalate.RenderContext$.using(RenderContext.scala:49) at org.fusesource.scalate.TemplateEngine.layout(TemplateEngine.scala:564) at org.fusesource.scalate.TemplateEngine.layout(TemplateEngine.scala:557) at org.fusesource.scalate.TemplateEngine.layout(TemplateEngine.scala:621) at org.fusesource.scalate.spring.view.LayoutScalateRenderStrategy$class.render(ScalateView.scala:51) at org.fusesource.scalate.spring.view.ScalateUrlView.render(ScalateView.scala:85) at org.fusesource.scalate.spring.view.ScalateUrlView$$anonfun$renderMergedTemplateModel$1.apply$mcV$sp(ScalateView.scala:97) at org.fusesource.scalate.spring.view.ScalateUrlView$$anonfun$renderMergedTemplateModel$1.apply(ScalateView.scala:97) at org.fusesource.scalate.spring.view.ScalateUrlView$$anonfun$renderMergedTemplateModel$1.apply(ScalateView.scala:97) at org.fusesource.scalate.RenderContext$.using(RenderContext.scala:49) at org.fusesource.scalate.spring.view.ScalateUrlView.renderMergedTemplateModel(ScalateView.scala:96) at org.springframework.web.servlet.view.AbstractTemplateView.renderMergedOutputModel(AbstractTemplateView.java:181) at org.springframework.web.servlet.view.AbstractView.render(AbstractView.java:316) at org.springframework.web.servlet.DispatcherServlet.render(DispatcherServlet.java:1406) at org.springframework.web.servlet.DispatcherServlet.processDispatchResult(DispatcherServlet.java:1150) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:1089) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:965) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:1006) at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:898) at javax.servlet.http.HttpServlet.service(HttpServlet.java:686) at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:883) at javax.servlet.http.HttpServlet.service(HttpServlet.java:791) at jeus.servlet.engine.ServletWrapper.executeServlet(ServletWrapper.java:173) at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:113) at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:87) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:317) at jeus.tool.webadmin.security.JeusAuthenticationFilter.doFilter(JeusAuthenticationFilter.scala:70) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.invoke(FilterSecurityInterceptor.java:127) at org.springframework.security.web.access.intercept.FilterSecurityInterceptor.doFilter(FilterSecurityInterceptor.java:91) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.access.ExceptionTranslationFilter.doFilter(ExceptionTranslationFilter.java:114) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.session.SessionManagementFilter.doFilter(SessionManagementFilter.java:137) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.servletapi.SecurityContextHolderAwareRequestFilter.doFilter(SecurityContextHolderAwareRequestFilter.java:170) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.savedrequest.RequestCacheAwareFilter.doFilter(RequestCacheAwareFilter.java:63) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.authentication.AbstractAuthenticationProcessingFilter.doFilter(AbstractAuthenticationProcessingFilter.java:200) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.authentication.logout.LogoutFilter.doFilter(LogoutFilter.java:116) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.header.HeaderWriterFilter.doFilterInternal(HeaderWriterFilter.java:66) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.context.request.async.WebAsyncManagerIntegrationFilter.doFilterInternal(WebAsyncManagerIntegrationFilter.java:56) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.context.SecurityContextPersistenceFilter.doFilter(SecurityContextPersistenceFilter.java:105) at org.springframework.security.web.FilterChainProxy$VirtualFilterChain.doFilter(FilterChainProxy.java:331) at org.springframework.security.web.FilterChainProxy.doFilterInternal(FilterChainProxy.java:214) at org.springframework.security.web.FilterChainProxy.doFilter(FilterChainProxy.java:177) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:354) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:267) at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:99) at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:87) at jeus.tool.webadmin.support.URLEncodeFilter.doFilter(URLEncodeFilter.scala:28) at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:99) at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:87) at org.springframework.web.filter.HiddenHttpMethodFilter.doFilterInternal(HiddenHttpMethodFilter.java:94) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:99) at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:87) at org.springframework.web.multipart.support.MultipartFilter.doFilterInternal(MultipartFilter.java:125) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:99) at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:87) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:201) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:117) at jeus.servlet.filter.FilterChainImpl.internalDoFilter(FilterChainImpl.java:99) at jeus.servlet.filter.FilterChainImpl.doFilter(FilterChainImpl.java:87) at jeus.servlet.engine.ServletWrapper.execute(ServletWrapper.java:148) at jeus.servlet.valve.ContextBasicValve.invoke(ContextBasicValve.java:83) at jeus.servlet.valve.VirtualHostBasicValve.invoke(VirtualHostBasicValve.java:15) at jeus.servlet.valve.WebContainerBasicValve.invoke(WebContainerBasicValve.java:67) at jeus.servlet.engine.RequestProcessor.run(RequestProcessor.java:209) at jeus.util.pool.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:1301) at jeus.util.pool.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:1345) at jeus.servlet.engine.WebThreadPoolExecutor$WebRequestWorker.run(WebThreadPoolExecutor.java:201) at java.base/java.lang.Thread.run(Thread.java:834)
🔎 결론
JEUS는 최신 패치를 통해 auto-deploy 기능을 지원합니다.
별도 관리 도구 및 script 없이도 지정 디렉터리에 애플리케이션을 위치시키는 것만으로 자동 배포가 가능 :)
설정 방법은 기존 포스팅을 참고하시고 이번에는 호출 URL 변경하는 방법 가이드 입니다.
jeus-web-dd.xml 을 통해서 접속 경로(context-path)를 자유롭게 지정할 수 있으니 반드시 태그(context-path)를 이용하세요!

이번 포스팅을 하다보니 ... WebtoB JEUS 이미지 Build 하는 것도 해야
의미 있다는 생각이 드는데... @_@
'WAS > JEUS' 카테고리의 다른 글
JEUS LOG(D_SESSION-2183, D_SESSION-3188, D_SESSION-3186) (0) 2026.01.27 JEUS LOG(D_SESSION-3105, D_SESSION-3103) OFF (5) 2025.07.01 JEUS 3가지 배포( WAR, Directory, auto-deploy ) (0) 2025.06.24 JEUS 서버재기동시 자동시작(ver.이중화) (0) 2025.05.22 JEUS 서버 재기동시 자동시작 (0) 2025.05.20