작업개요
전자정부 스프링 프레임워크로 개발된 레거시 프로젝트를 상위 버전으로 마이그레이션 작업을 하게 되었습니다.
스프링 부트로 옮겨가고 싶었으나 스프링 3.0.5 버전으로 작성된 오래된 버전이어서 일단은 4.x 대로 올리는 작업을 우선하게 되었으며 제법 많은 시행착오를 거치면서 진행했기에 시간을 많이 할애하게 되었습니다.
전자정부 프레임워크 공식 사이트에서 버전간 마이그레이션 가이드 문서가 제공되고 있으니 해당 문서를 참고해서 작업 하시는걸 추천드립니다. 첨에 이 문서를 제대로 보지 않고 진행해서 더 헤맸던것 같습니다.
제가 작업한 전자정부프레임워크 실행환경 버전은 중구난방이어서 딱히 버전을 몇으로 올렸다라고 말하기 힘드네요.
최신 실행환경의 버전이 4.1인데 스프링 버전은 5.3.20을 쓰고 있는걸 보니 업그레이드 작업을 여러번 진행해야 최신 실행환경으로 올라올 수 있을듯 합니다.
사전 작업으로 svn에 관리되고 있는 기존 소스 branch 를 하나 떠서 해당 branch 버전을 새로이 checkout 해서 작업을 진행했습니다.
기존 스프링 3.0.5 에서 4.3.2로 타겟팅 해서 작업을 진행했으며 초기화를 2번 진행하고 난 뒤에야 비로소 작업을 완료 할 수 있었습니다.
전자정부 프레임워크(egovframework) 실행환경 가이드를 참고해보시면 좋습니다만 가이드 문서가 더 좋다고 판단합니다.
설정 xml 구성 변경
pom.xml 구성의 핵심은 아래와 같이 작성했습니다.
jdk 버전은 1.8로 셋팅했으며, spring framework 버전은 4.3.2.RELEASE 로 설정
그외 요구되는 디펜던시 라이브러리 들의 버전도 그에 맞게 구성을 했습니다.
<properties>
<java-version>1.8</java-version>
<org.springframework-version>4.3.2.RELEASE</org.springframework-version>
<org.aspectj-version>1.8.9</org.aspectj-version>
<org.slf4j-version>1.7.7</org.slf4j-version>
<org.poi-version>3.9</org.poi-version>
<egovframework.rte-version>3.8.0</egovframework.rte-version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<org.apache.tiles-version>2.2.2</org.apache.tiles-version>
</properties>
릴리즈 노트에 나와있는 변경 내역을 보시면 어느 버전을 적용해야 할지 도움이 될 것입니다.
https://www.egovframe.go.kr/home/sub.do?menuNo=32
context-sqlMap.xml
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
===>
<bean id="sqlMapClient" class="egovframework.rte.psl.orm.ibatis.SqlMapClientFactoryBean">
ibatis 를 사용하고 있어서 bean 클래스 변경이 필요합니다. mybatis 로 넘어가고 싶네요
com-servlet.xml
<bean class="org.springframework.http.converter.json.MappingJacksonHttpMessageConverter">
===>
<bean class="org.springframework.http.converter.json.MappingJackson2HttpMessageConverter">
서블릿 설정 내 Jackson 클래스도 변경해줍니다.
그리고 설정 xml내 xsd 링크의 버전을 4.0으로 다 올립니다.
spring-***-.4.0.xsd 로 변환
web.xml 의 내 web-app version 또한 2.5에서 3.0으로 올립니다.
그리고 log 관련 라이브러리도 logback 으로 대체 되어야 해서 resource 폴더 아래 logback.xml 파일 생성해줍니다.
logback 설정 파일의 내용은 아래와 같습니다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration scan="true" scanPeriod="30 seconds">
<appender name="CONSOLE" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
</encoder>
</appender>
<appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>/tmp/access.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>/tmp/access-%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>30</maxHistory>
</rollingPolicy>
<encoder>
<Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
</encoder>
</appender>
<logger name="org.springframework" level="info"/>
<logger name="kr.or.connect" level="debug"/>
<root level="debug">
<appender-ref ref="CONSOLE"/>
<appender-ref ref="FILE"/>
</root>
</configuration>
빌드 오류 수정
기존 라이브러리와의 충돌을 고려해 repository 폴더를 새로운 경로로 설정하고 maven update 를 진행해서 필요한 종속 라이브러리를 새로이 받도록 했습니다.
그리고 project build 를 진행시켜보니 각종 오류와 경고메시지를 맞이하게 되었습니다.
이후부터 마이그레이션 가이드 페이지를 하나씩 훑어보면서 작업을 진행했습니다.
https://www.egovframe.go.kr/wiki/doku.php?id=egovframework:rtemigration3.0
Generics 적용에 따른 casting 적용 작업과 명명 규칙 준수에 따라 기존 AbtractrServiceImpl 클래스를 EgovAbstractServiceImpl로 변경해주었습니다.
캐스팅 작업이 일괄로 진행이 어려운 부분이어서 모든 소스코드를 열어 작업하느라 시간이 많이 소요되었습니다.
이클립스가 제공해주는 Quick Fix 를 통해 하나씩 진행을 했습니다.
AbstractServiceImpl => EgovAbstractServiceImpl 변경 작업의 경우 파일 검색을 통해 찾아서 일괄 변경해주는 방식으로 진행했습니다.
가장 많은 참조를 일으키는 Controller 는 가장 나중에, 참조의 가장 밑바닥이라고 판단되는 DAO와 Service 부터 위로 진행을 했습니다.
return list(""); 로 리턴되던 타입을 return (List)list(); 와 같이 명시적으로 변환해주었습니다.
logger.error(e); => logger.error(e.toString());
그외 자잘한 버그 수정을 해주고 작업을 마무리 하게 됩니다.
tomcat도 7버전에서는 구동이 되지 않아 tomcat 8 버전으로 변경하게 되었고 이와 관련해서도 몇가지 수정을 해주게 되었습니다. 레거시 시스템이 2개여서 2번의 작업을 하는데 발생하는 문제가 그때 그때 달라서 일일이 다 기록하지 못했네요.
제가 적용한 버전은 전자정부프레임워크 3.1 로 추
전자정부프레임워크 업그레이드 가이드 문서
전자정부프레임워크 자료실에서 표준프레임워크 업그레이드 가이드 문서를 확인하실 수 있습니다.
매우 상세히 알려주고 있으며 이 문서를 보면 실패없이 업그레이드 한방에 가능하시리라 봅니다.
다운받은 파일 제 블로그에도 올려드리니 참고하시기 바랍니다.