Intellij + SpringBoot 에 전자정부 프레임워크를 적용하기 위한 세부 적용 규칙을 정리했다.
eGov3.9(최신) 버전에서도 스프링 부트 지원을 해주지 않기 때문에 커스터마이징 하여 사용해야 된다.
* eGov에서 제공하는 호환성 가이드.pptx 및 3.0 세부 적용 가이드.pdf 참고로 작성했으며,
적용 기준에 맞게 위의 환경에서 동작까지 확인했지만, 따로 인증을 받은 것은 아니니 참고용으로 봤으면 한다.
[0. 추가 정보]
- 환경 : SpringBoot + Maven + IntelliJ Ultimate + eGov 3.9
- 전자정부 프레임워크에서 제공하는 Sample 은 eclipse + spring MVC + Web(jsp) 동작 테스트 이며,
Config 관련 ( AOP / DB / Common 등) 설정 파일들은 모두 xml 기반으로 작성되었다.
- 해당 포스트에서는 Config 관련 설정 파일은 xml 대신 Java Annotation Config 로 구현했다.
- 현재 사용한 eGov3.9 대신
(아직 안나옴/ 올해 말 ~ 내년에 나온다고 함) eGov4.0 버전에서는 SpringBoot 를 지원해준다고 하니 그때 사용하는 것도 방법.
[1. 실행환경 변경 금지]
=> 전자정부 실행 환경 라이브러리를 변경할 수 없다.
- 개별적 / maven을 통해서 다운로드 받은 전자정부 실행 환경 라이브러리에 인위적 변경을 가할 수 없다.
- egovframework.rte로 시작하는 파일을 대상으로 한다.
- 최소 아래의 라이브러리의 Maven Dependency를 추가한다.
: egovframework.rte.ptl.mvc-x.x.x.jar
: egovframework.rte.fdl.cmmn-x.x.x.jar
: egovframework.rte.psl.dataaccess-x.x.x.jar
: egovframework.rte.fdl.logging-x.x.x.jar
# 예시) POM.xml - Maven Dependency & Repository 추가
<properties>
<egovframework.rte.version>3.9.0</egovframework.rte.version>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
</properties>
<!-- 1. 표준프레임워크 실행환경 라이브러리 -->
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.fdl.security</artifactId>
<version>${egovframework.rte.version}</version>
</dependency>
<dependency>
<groupId>egovframework.rte</groupId>
<artifactId>egovframework.rte.psl.dataaccess</artifactId>
<version>${egovframework.rte.version}</version>
</dependency>
<!-- 2. 다운받기 위한 레포지토리 -->
<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>http://maven.egovframe.kr:8080/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
<repository>
<id>egovframe2</id>
<url>http://www.egovframe.go.kr/maven/</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>false</enabled>
</snapshots>
</repository>
[2. 설정 파일 위치 규칙]
=> xml 파일 중 beans 혹은 sqlMap 엘리먼트를 가지고 있는 파일을 대상으로 특정 위치에 존재해야 된다.
- 프로젝트 루트에 위치하면 안된다.
- 공통적인 상위 디렉토리 가져야 한다.
- WEB-INF 및 target 폴더 내의 xml 제외한다.
[3. 아키택처 관련 규칙]
=> 상속, 클래스 구현 등 아키텍처 정의 시 규칙을 준수해야 된다.
- Controller
: 상단 @Controller 선언한다.
- Service
: 상단 @Service 선언 및 ServiceImpl클래스는 EgovAbstractServiceImpl 상속/확장해 사용한다. (v3.0 이상)
: 모든 Service 클래스는 특정 인터페이스를 구현하고 해당 인터페이스를 확장시켜 사용한다.
* src/test 폴더 내에 있는 클래스들은 점검 대상에서 제외된다.
- Mybatis (둘 중 하나 만족해야 한다.)
1. EgovAbstractMapper 상속해 사용한다. (기존 DAO 형태로 사용하는 경우)
2. 제공하는 MapperConfigurer 와 @Mapper 사용한다. (Mapper Interface로 사용하는 경우)
: XML 설정 파일 공통설정파일 <configuration> / SQL 매핑파일 <mapper> / SqlSessionFactoryBean 설정 / MapperConfigurer 빈 설정
# Mybatis / ibatis / JPA / Hibernate 모두 제시하는 적용 기준이 있으며,
해당 자료에서는 Mybatis - Mapper Interface로 구현하는 방법으로 사용한다.
# 예시) Service, 인터페이스 구현 및 해당 인터페이스를 override 해서 사용한다.
// Service 클래스 적용 예시
public interface TestService {
public void test(String id);
}
// ServiceImpl 클래스 적용 예시
public class TestServiceImpl extends EgovAbstractServiceImpl implements TestService {
@Override
public void test(String id) {
//
}
}
# EgovAbstractServiceImpl 상속 시, 주의 사항.
- EgovAbstractServiceImpl : 프레임워크 공통 Exception 처리를 위한 기능을 제공하는 추상 클래스
해당 클래스 구현을 보면
비즈니스 서비스 구현 시, 디폴트로 Exception 처리를 위한 processException 메소드와 leaveaTrace 메소드를 가진다.
1. processException의 경우 ) EgovBizException 발생 시 Exception 메시지와 함께 presentation layer로 전달된다.
2. leaveaTrace의 경우 ) Excepton을 presentation layer로 던지지 않고 수행 후 계속 비즈니스 로직으로 돌아오게 해준다.
=> EgovAbstractServiceImpl 클래스를 상속할 경우, LeaveaTrace를 작성해야 된다.
// 예시,
@Configuration
public class CommonConfiguration {
/**
* Exception 이거나 Exception 이 아닌 경우에 Trace 후처리 로직을 실행 시키고자 할 때 사용한다.
* DefaultTraceHandleManager에 TraceHandler를 등록하는 형태로 설정된다.
*/
@Bean
public LeaveaTrace leaveaTrace(DefaultTraceHandleManager traceHandleManager) {
LeaveaTrace leaveaTrace = new LeaveaTrace();
leaveaTrace.setTraceHandlerServices(new TraceHandlerService[]{traceHandleManager});
return leaveaTrace;
}
@Bean
public DefaultTraceHandleManager traceHandleManager(AntPathMatcher antPathMatcher, DefaultTraceHandler defaultTraceHandler) {
DefaultTraceHandleManager defaultTraceHandleManager = new DefaultTraceHandleManager();
defaultTraceHandleManager.setReqExpMatcher(antPathMatcher);
defaultTraceHandleManager.setPatterns(new String[]{"*"});
defaultTraceHandleManager.setHandlers(new TraceHandler[]{defaultTraceHandler});
return defaultTraceHandleManager;
}
@Bean
public AntPathMatcher antPathMatcher() {
AntPathMatcher antPathMatcher = new AntPathMatcher();
return antPathMatcher;
}
@Bean
public DefaultTraceHandler defaultTraceHandler() {
DefaultTraceHandler defaultTraceHandler = new DefaultTraceHandler();
return defaultTraceHandler;
}
}
# Mybatis 작성
SpringBoot라서 application.yml 자동 주입 시켜도 되지만, DataSource로 직접 넣어주어도 된다.
대신, exclude={DataSourceAutoConfiguration.class}) 자동 주입 제외 시켜야 한다.
MapperConfigurer + SqlSessionFactoryBean 사용
// 1. Mybatis Configuration 작성
@Configuration
@MapperScan(basePackages = "com.example.mapper")
@EnableTransactionManagement
public class DatabaseConfiguration {
@Bean
public DataSource dataSource(){
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName("");
dataSource.setUrl("");
dataSource.setUsername( "" );
dataSource.setPassword( "" );
return dataSource;
}
@Bean
public SqlSessionFactory sqlSessionFactory(DataSource dataSource) throws Exception {
final SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();
sessionFactory.setDataSource(dataSource);
PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();
sessionFactory.setMapperLocations(resolver.getResources("classpath:mapper/*.xml"));
return sessionFactory.getObject();
}
@Bean
MapperConfigurer mapperConfigurer(DataSource dataSource) {
MapperConfigurer mapperConfigurer = new MapperConfigurer();
mapperConfigurer.setBasePackage("impl 위치");
return mapperConfigurer;
}
}
# Mapper import 시 확인 필수.
//
import egovframework.rte.psl.dataaccess.mapper.Mapper
// Mapper 빈 등록 & 인터페이스 생성
@Mapper
public interface TestMapper {
List<String> getList();
}
// Mapper.xml 작성
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<mapper namespace="com.example.mapper.TestMapper">
</mapper>
[4. 확장 및 활용 규칙]
- 실행 환경은 규정에 맞게 확장되어야 한다.
: 대상 : 프로젝트 내 자바 클래스 중 egovframework.rte 패키지에 속한 클래스를 상속받은 클래스 모두가 대상이다.
: 해당 클래스는 egovframework.rte 패키지 내에 정의될 수 없으며, Egov라는 이름으로 시작할 수 없다.
- 실행 환경은 적극적으로 활용되어야 한다.
: 해당 프로젝트 내에 적어도 한 개 이상의 실행 환경 라이브러리 존재해야 한다.
: 해당 프로젝트 내에 적어도 한 개 이상의 DAO 클래스가 있어야 한다.
: 해당 프로젝트 내에 적어도 한 개 이상의 Service 클래스가 있어야 한다.
[5. 기타]
조건 : Intellij Ultimate + jsp 파일을 사용할 때
* Community 버전은 jsp 파일 지원 안한다.
- webapp/WEB-INF/ 폴더 추가한다.
- View Template을 jsp로 사용하도록 지정한다.
* 경로는 view 이름에 접두어, 접미어 붙여 구성한다.
// 다른 방버 : application.yml 에서 사용해도 무방
@Bean
public InternalResourceViewResolver viewResolver() {
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/jsp/");
resolver.setSuffix(".jsp");
return resolver;
}
지금까지 SpringBoot + Intellij 에서 eGov 적용 방법에 대해 설명하였다.
'Computer Science > Java' 카테고리의 다른 글
KeyCloak 설치 & 정리 (0) | 2020.12.06 |
---|---|
# Google_OAuth2.0_SpringBoot 구현 1 - Authorization code (0) | 2020.11.07 |
[intelliJ] 전자정부 프레임워크 구축(세팅)하기 (0) | 2020.10.14 |
[eclipse]전자정부 표준프레임워크 개발환경 구축하기 (0) | 2020.10.14 |
# 스프링 이벤트 캐치 - PostgreSQL Logical Replication Streaming (0) | 2020.09.15 |