본문 바로가기

경험/Spring

Spring 프로젝트, 전자정부프레임워크로 마이그레이션 - 소개 & Maven

이 글에서는 기존 스프링 프로젝트를 전자정부프레임워크로 마이그레이션하는 방법을 알아보려고 한다. 


체리맥주님~ 저희 사용하고 스프링 프로젝트, 전자정부프레임워크 적용해주세요~~

당황했다. 전자정부프레임워크 소리만 들어봤지 무엇인지는 자세히 몰랐다. "스프링이랑 똑같은 거 아닌가(ㅋㅋ?)"라고 생각했다. 일단, 요청을 알아야 처리를 하기에 요청에서 받은 단서들을 조사하기 시작했다.

전자정부프레임워크(eGov)란 무엇인가?

https://www.egovframe.go.kr/home/sub.do?menuNo=9

  전자정부 표준프레임워크 사이트를 훑어본 후, 나는 전자정부프레임워크(이하 eGov라 표기)를 개발환경(IDE), 실행환경(소스, 라이브러리), 운영환경(VCS, 서버)등을 제공/정의해놓은 집합체라고 정의했다.

 

 eGov를 사용하면 공통 컴포넌트를 통해 빠른 개발이 가능해 보인다. 또한, 다른 곳에서도 똑같이 사용하기 때문에 표준이 세워져 유지보수할 경우에 코드 이해를 더 빨리 할 수 있을 것이다. 아마도?

 

eGov의 목적이 표준을 세우고, 유지보수에 용이하게 한다는 것을 보았을 때, eGov로 인정받으려면 eGov에서 제공한 규칙에 따라 프로그래밍 하는 것이 "eGov를 적용했다"의 최소한의 기준이 될 것이다.


eGov로 인정받으려면?

공식사이트에서 제공하는 적용가이드의 일부를 발췌한 내용을 정리해보았다. 스프링과의 차이점이 여기서 나온다!

 

  • 표준프레임워크 실행환경의 정상적인 설치 여부 점검
    • 운영서버(WAS)의 [웹어플리케이션 루트 디렉토리]/WEB-INF/lib/ 디렉터리에 "org.egovframe.rte"로 시작하는 .jar 파일이 존재하는지 확인
  • 실제 소스코드에서 실행환경이 활용되고 있는지 점검
    • 아래 구문이 검색되는 소스코드가 있는지 확인
      • import org.egovframe.rte
    • 상기 소스코드 중 EgovAbstractDAO(EgovAbstractMapper) 또는 EgovAbstractServiceImpl(또는 AbstractServiceImpl1)) 클래스를 상속한 구문이 존재하는지 확인
      • EgovAbstractDAO (예: public class NotificationDAO extends EgovAbstractDAO)
      • EgovAbstractServiceImpl 또는 AbstractServiceImpl (예: public class NotificationServiceImpl extends EgovAbstractServiceImpl)
  • 상세 내용은 전자정부프레임워크 공식 사이트의 적용지원 가이드에 잘(?) 나와있다.

이렇게 보니 eGov는 Spring을 조금 더 표준화시킨 것으로도 보인다.


Maven

일단 위의 조건들을 지키려면

근데 여기서 이슈. 난 인텔리제이 IDE를 사용한다. 기존 프로젝트를 진행하는 동료들도 모두 인텔리제이를 사용한다. 그러나 공식문서나 블로그들의 예시는 모두 이클립스였다.. 다음에 할 때는 헤매지 않고, 다른 이들도 헤매지 않도록 정리한다 ^^

LocalRepository

공식문서를 읽어보면, 공통 컴포넌트를 사용하는데 이를 위해선 레파지토리를 받아서 설정해주어야 한다.

 

1. 공식위키에서 찾은 maven 레파지토리를 로컬 레파지토리로 지정한다. 레파지토리 파일 다운로드 링크

2. 인텔리제이 내에서 더블 shift 후, "maven"을 입력한다.

3. settings.xml을 생성/열기를 선택한다.

4. 압축 푼 레파지토리 파일경로를 localRepository로 지정한다.

<?xml version="1.0" encoding="UTF-8"?>
<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0 http://maven.apache.org/xsd/settings-1.0.0.xsd">
    <localRepository>/Users/EGOVEDU/maven_repository_4_0/</localRepository>
</settings>

pom.xml

  그 후, pom.xml을 설정함을 통해 종속성을 프로젝트에 적용시켜야 한다.

나의 경우, 3.10버전의 예시에서 버전명만 바꿔서 시도하고 있었다. 4.0부터 maven groupId와 artifactId가 조금 바뀌어 있었던 것도 모른채로.. ㅋ_ㅋ..

이 글을 보는 분들은 나와 같은 실수를 하지 않았으면 좋겠다.

 

그리고 여기서 중요한 점은, eGov4.0 기준으로는 springframework의 버전이 5.3.6이다. 기존 프로젝트는 5.0.8이었기에 이 또한 마이그레이션 해주어야 한다.

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <!-- ...생략 -->
    <repositories>
        <repository>
            <id>mvn2s</id>
            <url>https://repo1.maven.org/maven2/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>true</enabled>
            </snapshots>
        </repository>

        <repository>
            <id>egovframe</id>
            <url>https://maven.egovframe.go.kr/maven/</url>
            <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>

        <!-- oracle lib 오류로 인해 추가 -->
        <repository>
            <id>oracle</id>
            <name>ORACLE JDBC Repository</name>
            <url>https://packages.atlassian.com/maven-3rdparty/</url>
        </repository>

    </repositories>

    <properties>
        <java-version>1.8</java-version>
        <spring.maven.artifact.version>5.3.6</spring.maven.artifact.version>
        <org.aspectj-version>1.9.1</org.aspectj-version>
        <org.slf4j-version>1.7.25</org.slf4j-version>
        <org.egovframe.rte.version>4.0.0</org.egovframe.rte.version>
    </properties>

    <!-- 라이브러리 -->
    <dependencies>
        <!-- 전자정부프레임워크 -->
        <dependency>
            <groupId>org.egovframe.rte</groupId>
            <artifactId>org.egovframe.rte.ptl.mvc</artifactId>
            <version>${org.egovframe.rte.version}</version>
            <exclusions>
                <exclusion>
                    <artifactId>commons-logging</artifactId>
                    <groupId>commons-logging</groupId>
                </exclusion>
            </exclusions>
        </dependency>
        <dependency>
            <groupId>org.egovframe.rte</groupId>
            <artifactId>org.egovframe.rte.psl.dataaccess</artifactId>
            <version>${org.egovframe.rte.version}</version>
        </dependency>
        <dependency>
            <groupId>org.egovframe.rte</groupId>
            <artifactId>org.egovframe.rte.fdl.idgnr</artifactId>
            <version>${org.egovframe.rte.version}</version>
        </dependency>
        <dependency>
            <groupId>org.egovframe.rte</groupId>
            <artifactId>org.egovframe.rte.fdl.property</artifactId>
            <version>${org.egovframe.rte.version}</version>
        </dependency>

        <!-- Spring -->
<!--        <dependency>-->
<!--            <groupId>org.springframework</groupId>-->
<!--            <artifactId>spring-context</artifactId>-->
<!--            <version>${org.springframework-version}</version>-->
<!--            <exclusions>-->
<!--                &lt;!&ndash; Exclude Commons Logging in favor of SLF4j &ndash;&gt;-->
<!--                <exclusion>-->
<!--                    <groupId>commons-logging</groupId>-->
<!--                    <artifactId>commons-logging</artifactId>-->
<!--                </exclusion>-->
<!--            </exclusions>-->
<!--        </dependency>-->
<!--        <dependency>-->
<!--            <groupId>org.springframework</groupId>-->
<!--            <artifactId>spring-webmvc</artifactId>-->
<!--            <version>${org.springframework-version}</version>-->
<!--        </dependency>-->

<!--        <dependency>-->
<!--            <groupId>org.springframework</groupId>-->
<!--            <artifactId>spring-jdbc</artifactId>-->
<!--            <version>${org.springframework-version}</version>-->
<!--        </dependency>-->
        <!-- End dependencies -->

        <!-- ...생략 -->
    </dependencies>
    <!-- ...생략 -->
</project>

 

 지금까지 Spring과 eGov의 차이점, eGov의 적용 기준, eGov의 메이븐 세팅을 알아보았다.

다음 시간에는 Spring 버전 업에 따라 발생한 오류들을 해결한 경험에 대해 나눠보도록 하겠다.