[개발환경]eGov 3.10 웹 프로젝트 + nexacro 17 연동(2)

Inung_92·2023년 5월 10일
2

개발환경

목록 보기
4/7
post-thumbnail

지난 게시글에 이어서 eGovFrame web project + nexacro17 연동하기를 이어서 해보겠다. 혹시라도 지난 게시글을 보지 못했다면 여기를 클릭해서 보고오도록 하자.


eGovFrame web project + Nexacro17 연동

⚡️ Filter + Servlet 설정

지난 게시글과 동일하게 소제목은 패키지명 + 파일명이다.

🖥️ src/main/webapp/WEB-INF/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
	<display-name>sampleuiadapter17</display-name>

	<!-- encoding filter -->
	<filter>
		<filter-name>encodingFilter</filter-name>
		<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
		<init-param>
			<param-name>encoding</param-name>
			<param-value>utf-8</param-value>
		</init-param>
	</filter>
	<filter-mapping>
		<filter-name>encodingFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
	<!-- /.encoding filter -->

	<!-- <script> 형태의 코드를 &lt;로 자동전환하는 HTMLTagFilter -->
	<filter>
		<filter-name>HTMLTagFilter</filter-name>
		<filter-class>egovframework.rte.ptl.mvc.filter.HTMLTagFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>HTMLTagFilter</filter-name>
		<url-pattern>*.do</url-pattern>
	</filter-mapping>
	<!-- /.HTMLTagFilter -->

	<!-- Application Context 설정 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath*:egovframework/spring/context-*.xml</param-value>
	</context-param>

	<listener>
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
	</listener>
	<!-- /.Application Context 설정 -->

	<!-- nexacro Excel Import/Export 설정 -->
	<servlet>
		<servlet-name>XImport</servlet-name>
		<servlet-class>com.nexacro.xeni.services.GridExportImportServlet</servlet-class>
	</servlet>

	<servlet-mapping>
		<servlet-name>XImport</servlet-name>
		<url-pattern>/XImport</url-pattern>
	</servlet-mapping>
	<!-- /.nexacro Excel Import/Export 설정 -->

	<servlet>
		<servlet-name>action</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name>
			<param-value>/WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup>
	</servlet>

	<servlet-mapping>
		<servlet-name>action</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	<mime-mapping>
		<extension>xlsx</extension>
		<mime-type>application/vnd.openxmlformats-officedocument.spreadsheetml.sheet</mime-type>
	</mime-mapping>
	<welcome-file-list>
		<welcome-file>index.html</welcome-file>
	</welcome-file-list>

	...생략

</web-app>

🖥️ src/main/webapp/WEB-INF/config/egovframework/springmvc/dispatcher-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:p="http://www.springframework.org/schema/p" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.0.xsd
                http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.0.xsd
                http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc-4.0.xsd">

	<!-- 어노테이션 활성화 -->
	<mvc:annotation-driven />

	<context:component-scan base-package="sample" />

	<!-- <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter"> <property name="webBindingInitializer"> <bean class="egovframework.example.cmmn.web.EgovBindingInitializer" /> </property> </bean> -->
	<bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
		<property name="interceptors">
			<list>
				<ref bean="localeChangeInterceptor" />
			</list>
		</property>
	</bean>

	<bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
		<property name="defaultLocale" value="ko" />
	</bean>
	<!-- 쿠키를 이용한 Locale 이용시 <bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver"/> -->
	<bean id="localeChangeInterceptor" class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
		<property name="paramName" value="lang" />
	</bean>

	<bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver">
		<property name="defaultErrorView" value="cmmn/egovError" />
		<property name="exceptionMappings">
			<props>
				<prop key="org.springframework.dao.DataAccessException">cmmn/dataAccessFailure</prop>
				<prop key="org.springframework.transaction.TransactionException">cmmn/transactionFailure</prop>
				<prop key="egovframework.rte.fdl.cmmn.exception.EgovBizException">cmmn/egovError</prop>
				<prop key="org.springframework.security.AccessDeniedException">cmmn/egovError</prop>
			</props>
		</property>
	</bean>

	<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1" p:viewClass="org.springframework.web.servlet.view.JstlView" p:suffix=".jsp" />

	<bean id="jsonView" class="org.springframework.web.servlet.view.json.MappingJackson2JsonView">
		<property name="contentType" value="application/json;charset=UTF-8">
		</property>
	</bean>

	<!-- For Pagination Tag <bean id="imageRenderer" class="egovframework.example.cmmn.web.EgovImgPaginationRenderer"/> <bean id="paginationManager" class="egovframework.rte.ptl.mvc.tags.ui.pagination.DefaultPaginationManager"> <property name="rendererType"> <map> <entry key="image" value-ref="imageRenderer"/> </map> </property> </bean> /For Pagination Tag -->

	<mvc:view-controller path="/cmmn/validator.do" view-name="cmmn/validator" />

	<!-- nexacro setting -->
	<bean id="nexacroInterceptor" class="com.nexacro.uiadapter.spring.core.servlet.NexacroInterceptor" />

	<!-- nexacro method argument resolver -->
	<bean id="nexacroMethodArgumentResolver" class="com.nexacro.uiadapter.spring.core.resolve.NexacroMethodArgumentResolver" />

	<!-- <bean id="beanNameViewResolver" class="org.springframework.web.servlet.view.BeanNameViewResolver" p:order="0"/> -->
	<bean id="nexacroView" class="com.nexacro.uiadapter.spring.core.view.NexacroView">
		<property name="defaultContentType" value="PlatformXml" />
		<property name="defaultCharset" value="UTF-8" />
	</bean>

	<bean id="nexacroFileView" class="com.nexacro.uiadapter.spring.core.view.NexacroFileView" />

	<!-- nexacro method return value handler -->
	<bean id="nexacroMethodReturnValueHandler" class="com.nexacro.uiadapter.spring.core.resolve.NexacroHandlerMethodReturnValueHandler">
		<!-- <property name="view" value="nexacroView" /> -->
		<property name="view" ref="nexacroView" />
		<property name="fileView" ref="nexacroFileView" />
	</bean>

	<!-- nexacro exception resolver -->
	<bean id="exceptionResolver" class="com.nexacro.uiadapter.spring.core.resolve.NexacroMappingExceptionResolver" p:order="1">
		<property name="view" ref="nexacroView" />
		<property name="shouldLogStackTrace" value="true" />
		<property name="shouldSendStackTrace" value="true" />
		<!-- shouldSendStackTrace 가 false 일 경우 nexacro platform으로 전송되는 에러메시지 -->
		<!-- <property name="defaultErrorMsg" value="An Error Occured. check the ErrorCode for detail of error infomation" /> -->
		<property name="defaultErrorMsg" value="fail.common.msg" />
		<property name="messageSource" ref="messageSource" />
	</bean>

	<!-- XENI (nexacro) Request Mapping -->

	<bean class="org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter" />
	<bean id="xeniUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping" p:order="0">
		<property name="mappings">
			<props>
				<prop key="/XExportImport.do">xeniWrappingController</prop>
			</props>
		</property>
	</bean>

	<bean id="xeniWrappingController" class="org.springframework.web.servlet.mvc.ServletWrappingController">
		<property name="servletClass">
			<value>com.nexacro.java.xeni.services.GridExportImportServlet</value>
		</property>
	</bean>

	<!-- XENI (nexacro) Request Mapping -->

	<!-- - This bean processes annotated handler methods, applying Application-specific PropertyEditors - for request parameter binding. It overrides the default AnnotationMethodHandlerAdapter. -->
	<bean class="com.nexacro.uiadapter.spring.core.resolve.NexacroRequestMappingHandlerAdapter" p:order="1">
		<property name="customArgumentResolvers">
			<list>
				<ref bean="nexacroMethodArgumentResolver" />
			</list>
		</property>
		<property name="customReturnValueHandlers">
			<list>
				<ref bean="nexacroMethodReturnValueHandler" />
			</list>
		</property>
	</bean>
	<!-- /.nexacro setting -->
</beans>

위의 두가지 xml 파일을 설정하여 nexacro와 연동 시 사용 할 dispatcher-servlet에 대한 준비를 마치면된다.

⚡️ web project에 nexacro 프로젝트 포함시키기

  1. 넥사크로 프로젝트 생성 시 경로 지정
    사진에 있는 경로는 기본적으로 설정되는 경로이다. 여기서 예를 들어 web project의 경로가 C:\workspace\sample 이라면 경로를 다음과 같이 수정해주면 된다.
    C:\workspace\sample\src\main\프로젝트명

  2. 프로젝트 Generate 경로 지정
    첫번째 빨간색으로 음영이 쳐져있는 부분이 web project 디렉토리내의 경로이며, 마지막 빨간색 음영처리 부분은 넥사크로 프로젝트명이다.

이 부분에서 헷갈리지 말아야하는 것은 첫번째 프로젝트의 경로를 설정해주는 것은 실제 프로젝트 파일이 위치하는 곳이며, 두번째 Genarate 경로는 소스코드를 변환하여 저장하는 위치를 설정해주는 것이다.

이렇게 설정이 맞춰지면 다음과 같이 이클립스에서 확인이 가능하다.

이러한 구조를 가진 프로젝트가 생성되어지면 정상적으로 설정이 완료된 것이다.

⚡️ 라이브러리 설치

이제 마지막으로 pom.xml에 필요한 라이브러리들의 의존성을 추가해주자. 사실 가장 먼저 설정해야하는 부분이지만 코드가 길어 헷갈릴 수 있어 가장 마지막에 설정한 것을 이해해주기 바란다.

🖥️ properties 설정

<properties>
  <spring.maven.artifact.version>4.3.25.RELEASE</spring.maven.artifact.version>
  <egovframework.rte.version>3.10.0</egovframework.rte.version>
  <nexacro17.version>1.0.0-SNAPSHOT</nexacro17.version>
  <hibernate.validator.version>5.1.2.Final</hibernate.validator.version>
</properties>

🖥️ nexacro repository 설정

<!-- nexacro repository -->
<repository>
  <id>tobesoft</id>
  <url>http://mangosteen.tobesoft.co.kr/nexus/repository/maven-public</url>
  <releases>
    <enabled>true</enabled>
  </releases>
  <snapshots>
    <enabled>true</enabled>
  </snapshots>
</repository>
<!-- /.nexacro repository -->

해당 리포지토리에서 nexacro와 관련된 라이브러리를 다운받아온다.

🖥️ Spring 버전일치 Dependency 설정

<!-- *** 버전 미일치 시 : java.lang.noclassdeffounderror: lorg/springframework/beans/factory/access/beanfactoryreference; 발생 *** -->
<!-- spring version -->
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-core</artifactId>
  <version>${spring.maven.artifact.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-aop</artifactId>
  <version>${spring.maven.artifact.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
  <version>${spring.maven.artifact.version}</version>
</dependency>
<dependency>
  <groupId>org.springframework</groupId>
  <artifactId>spring-orm</artifactId>
  <version>${spring.maven.artifact.version}</version>
</dependency>
<!-- /.spring version -->

web project 생성 시 Spring 라이브러리들의 버전이 상이할 수 있으니 properties에 선언한 Spring의 버전으로 통일시켜준다.

🖥️ nexacro library Dependency 설정

<!-- nexacro library -->
<dependency>
  <groupId>com.nexacro</groupId>
  <artifactId>uiadapter-spring-core</artifactId>
  <version>${nexacro17.version}</version>
</dependency>

<dependency>
  <groupId>com.nexacro</groupId>
  <artifactId>uiadapter-spring-dataaccess</artifactId>
  <version>${nexacro17.version}</version>
</dependency>

<dependency>
  <groupId>com.nexacro</groupId>
  <artifactId>uiadapter-spring-excel</artifactId>
  <version>${nexacro17.version}</version>
</dependency>
<!-- /.nexacro library -->

🖥️ Jackson 설정

<!-- Jackson -->
<dependency>
  <groupId>org.codehaus.jackson</groupId>
  <artifactId>jackson-mapper-asl</artifactId>
  <version>1.9.2</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-core</artifactId>
  <version>2.9.1</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-annotations</artifactId>
  <version>2.9.1</version>
</dependency>
<dependency>
  <groupId>com.fasterxml.jackson.core</groupId>
  <artifactId>jackson-databind</artifactId>
  <version>2.9.1</version>
</dependency>
<!-- /.Jackson -->

Jackson은 왜 설정하느냐 궁금할 수 있지만 내부적으로 nexacro와 Spring이 데이터를 주고 받을 때 json의 형태로 데이터를 주고받는다. 그렇기 때문에 해당 라이브러리를 등록하지 않으면 오류가 발생한다.

pom.xml 설정을 완료하고나면 위와 같이 라이브러리들이 설치될 것이다. 이렇게하면 nexacro와 egovframe web project의 설정이 완료된다.


마무리

nexacro를 처음 다루다보니 내부 구조를 이해하고, Spring과 어떻게 연동을 해야하는지 다양한 시도도 많이해보았다. 아직 많은 기능을 다루어 본 것이 아니기에 해당 설정만으로 모든 기능에 대한 것이 완료되었다고 하기는 어렵지만 위의 설정을 통해 HTTP 통신을 이용한 DB 조회등은 충분히 가능하니 추가적인 부분은 nexacro의 공식문서 또는 유튜브를 통해 확인해보도록 하자.

혹시 설정 간 궁금한 부분은 댓글로 남겨주시면 감사드리겠습니다.

그럼 이만.👊🏽

profile
서핑하는 개발자🏄🏽

0개의 댓글