른록노트

[Spring] 전자정부 프레임워크 시작하기 (3.10) 본문

Web/[Spring]

[Spring] 전자정부 프레임워크 시작하기 (3.10)

른록 2021. 12. 11. 18:40

1. 전자정부 프레임워크 시작하기

(개발 환경 다운로드 메뉴얼)
개발 환경 다운로드 메뉴얼을 보고 진행하시면 됩니다.

1.1 개발 및 실행을 구현도구 환경 정보

  • OS: Windows 10, 7 이상
  • JDK: Java SE SDK 7.0 이상 (JDK 8은 개발환경 3.7 부터 적용가능)
  • IDE: Eclipse 4.16(2020-06) (JDK 8 이상 사용)

저는 3.10 버전을 다운받았고 OS는 Windows 10에서 진행했습니다.

1.2 프로젝트 생성

  1. 개발 환경 다운로드 메뉴얼을 보고 파일을 다운로드 한 후 해당 폴더에 있는 eclipse를 실행합니다.
  2. eGovFrame Web Project를 생성하고 Generate Example 체크박스를 체크해서 예제 소스를 받아온다.
  3. eclipse에서 Tomcat서버 등록 (저는 이젠 지원이 끊켰지만 가장 익숙한 8.0.36버전을 다운받았습니다.)
  4. eclipse에서 프로젝트 Run on Server
  5. 웹에서 http://localhost:톰캣포트/지정한컨텍스트 를 접속하면 기본 게시판이 보입니다. (컨텍스트는 프로젝트 우클릭 후 설정에서 변경할 수 있습니다.)

2. 구동 순서

2.1 준비

프로젝트를 실행하기전에 필요한 작업입니다.

2.1.1. Maven 설정 파일 pom.xml

최상위에 존재하는 pom.xml 파일을 보면 프로젝트 이름과 버전, 설명 그리고 사용하는 라이브러리, 라이브러리를 받아오는 repository 주소, 플러그인, 빌드 방법 등이 정의되어 있습니다.

여기서 사용하는 라이브러리에 대한 정의를 하고 Maven Install을 하여 라이브러리를 받아올 수 있습니다.

2.1.2. WAS 설정 파일 src/main/webapp/WEB-INF/web.xml

Eclipse에 등록한 Tomcat 서버를 사용하여 WAS를 실행할 것 입니다.

web.xml 파일은 WAS의 배포 설명자로, 각 WAS의 환경을 설정하는 역할을 합니다.

웹 전체 작용하는 Filter 설정, servlet설정 등을 설정합니다.

2.2. 실행 (구동 순서대로 설명)

프로젝트가 실행되면 Tomcat 서버에 해당 프로젝트를 배포하여 웹 서비스를 구동합니다.

2.2.1. web.xml을 참고하여 WAS에 필요한 각 정보를 세팅하고 로드합니다.

<?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>egov.sample</display-name> <!-- 프로젝트 표시 이름 -->

    <!-- 필터 : 클라이언트(브라우저)가 서버로 요청을 보내올때 요청이 서블릿으로 전달되기 전, 후에 필터링하기 위한 기술 -->
    <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>

    <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>
    <!-- 필터 끝 -->

    <!-- 서블릿 환경정보 설정 : 스프링 컨테이너 설정 #2.2.1.1 -->
    <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>
    <!-- 리스너 끝 -->


    <!-- 서블릿 설정 : DispatcherServlet 설정 : 클라이언트에서 요청이 오면 적절한 서블릿으로 맵핑 시켜주는 서블릿 #2.2.1.2-->
    <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>
    <!-- 서블릿 설정 끝 -->

    <!-- 시작 페이지 설정 -->
    <welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    <!-- 시작 페이지 설정 끝 -->
    <!-- 서블릿 보안 시작 -->
    <login-config>
        <auth-method>BASIC</auth-method> <!--HTTP-->
    </login-config>
    <!-- 서블릿 보안 끝 -->    

    <!-- 에러페이지 설정 -->
    <error-page>
        <exception-type>java.lang.Throwable</exception-type>
        <location>/common/error.jsp</location>
    </error-page>
    <error-page>
        <error-code>404</error-code>
        <location>/common/error.jsp</location>
    </error-page>
    <error-page>
        <error-code>500</error-code>
        <location>/common/error.jsp</location>
    </error-page>
    <!-- 에러페이지 끝 -->

</web-app>
2.2.1.1. 스프링 컨테이너 설정(환경설정)

web.xml를 읽으면 아래부분이 실행되는데

    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath*:egovframework/spring/context-*.xml</param-value>
    </context-param>

src/main/resources/egovframework/spring/ 에는 아래와 같은 파일이 있습니다. (위에 링크를 들어가면 자세히 나와있습니다.)

context-aspect.xml (ExceptionTransfer 설정(템플릿 서비스임플 클래스에서 발생하는 경우는 Exception에 대한 개별 로그를 출력))
context-common.xml (egovMessageSource 설정(프로퍼티 파일에 등록된 메시지 활용), leavaTrace 설정(Exception발생시 개별 Trace 출력)
context-datasource.xml (데이터베이스 연결 정보)
context-idgen.xml (Id Generation 서비스: 시스템을 개발할 때 필요한 유일한 ID를 생성하기 위해 사용하도록 서비스한다.)
context-mapper.xml (mybatis mapper 설정)
context-properties.xml (property 설정)
context-sqlMap.xml (iBATIS 데이터베이스 계층을 위한 SqlMap 설정)
context-transaction.xml (트랜잭션 설정)
context-validator.xml의 (Vaildator설정)

2.2.1.2. dispatcher-servlet 설정

dispatcher-servlet은 HTTP 프로토콜로 들어오는 모든 요청을 가장 먼저 받아 적합한 컨트롤러에 위임해주는 역할을 하는 서블릿입니다.

<?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">

    <!-- auto detect를 위한 mvc 설정 -->
    <context:component-scan base-package="egovframework">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    </context:component-scan>
    <!-- auto detect를 위한 mvc 설정 끝 -->

    <!-- anotation request mapping과 commandmap형태의 argument를 전달을 위한 설정 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
        <property name="webBindingInitializer">
            <bean class="egovframework.example.cmmn.web.EgovBindingInitializer"/>
        </property>
    </bean>
    <!-- anotation request mapping과 commandmap형태의 argument를 전달을 위한 설정 끝 -->

    <!-- locale 변경 인터셉터 -->
    <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping">
        <property name="interceptors">
            <list>
                <ref bean="localeChangeInterceptor" />
            </list>
        </property>
    </bean>
    <!-- locale 변경 인터셉터 끝 -->

    <bean id="localeResolver" class="org.springframework.web.servlet.i18n.SessionLocaleResolver" />
    <!-- 쿠키를 이용한 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="language" />
    </bean>

    <!-- exception 발생시 이동할 오류페이지 설정 -->
    <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>
    <!-- exception 발생시 이동할 오류페이지 설정 끝 -->

    <!-- 화면처리용 JSP 파일명의 prefix, suffix 처리에 대한 설정 -->
    <bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"
        p:viewClass="org.springframework.web.servlet.view.JstlView"
        p:prefix="/WEB-INF/jsp/egovframework/example/" p:suffix=".jsp"/>
    <!-- 화면처리용 JSP 파일명의 prefix, suffix 처리에 대한 설정 끝 -->

    <!-- 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"/>
</beans>

2.2.2 위에 설정이 다 끝나면 index.jsp 실행

web.xml에 welcome-file-list 부분 실행

<welcome-file-list>
        <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>

index.jsp

<%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="utf-8"%>
<jsp:forward page="/egovSampleList.do"/>

egovSampleList.do로 이동

2.2.3 클라이언트로부터 '/egovSampleList.do' 요청을 받아 Dispatcher-servlet이 해당하는 Controller을 찾고 view 반환

dispatcher-servlet.xml에 context:component-scan을 해놨기 때문에

<context:component-scan base-package="egovframework">
        <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Service"/>
        <context:exclude-filter type="annotation" expression="org.springframework.stereotype.Repository"/>
    </context:component-scan>

egovframework 패키지 안에서

@RequestMapping(value = "/egovSampleList.do") 에 해당하는 함수를 찾아와서 실행합니다.

EgovSampleController.java

@RequestMapping(value = "/egovSampleList.do")
    public String selectSampleList(@ModelAttribute("searchVO") SampleDefaultVO searchVO, ModelMap model) throws Exception {
    ...
    return "sample/egovSampleList";
    }

return 으로 view파일을 반환하는데 이건 dispatcher-servlet.xml에 resolver 설정으로 해당 jsp 파일이 반환됩니다.

<bean class="org.springframework.web.servlet.view.UrlBasedViewResolver" p:order="1"
        p:viewClass="org.springframework.web.servlet.view.JstlView"
        p:prefix="/WEB-INF/jsp/egovframework/example/" p:suffix=".jsp"/>

(권장설정) IDE 설정

Eclipse xml 파일 변경 시 자동 빌드
Eclipse Javascript Editor 다운
Eclipse JSP formmat 변경

반응형
Comments