티스토리 툴바



작년에 수행했던 전자정부 프레임워크에서는 에러메시지는 비교적 예쁘게 발생하는 편이라 에러잡는데 크게 어려움을 못 느꼈었다.

올해 프로젝트를 하고 있는 중에 "알 수 없는 오류가 발생하였습니다."라는 메시지가 나타나면서 서버도, 사용자도, 프레임워크도 정말 알 수 없는 오류가 되어버렸다.

log4j의 debug레벨 출력에도, Was의 로그에도 그 어디에도 에러의 흔적이 나타나지 않았다.
당황해하면서도... intellij의 디버깅 모드로 잡아서 처리하거나 디버깅도 안잡히면 정말 감으로 때려잡는(!) 기가막힌 상황이 발생하였다. (감으로 때려잡는 승률이 꽤 괜찮아서 이젠 나도 점점 급수가 오르는 느낌이다.)

그러던 중~ 오늘 작년에 진행하던 프로젝트의 유지보수 작업을 하였는데 이게 알 수 없는 에러를 뿌려댐과 동시에, 디버깅에도 잡히지 않았고 감에도 잡히지 않았다. (ㅠ_ㅡ)

이틀간의 삽질 끝에 에러를 못 잡다가 에러 페이지의 하단 공백이 새삼 안쓰러워서(?!)
/WEB-INF/jsp/egovframework/cmm/egovError.jsp
파일을 열어봤더니...

세상에... 에러메시지를 출력하는 구문이 주석처리가 되어있었던 것이다!

원래 분명히 있었으나 저번에 웹취약성 감사를 받으면서 주석처리 해버렸는데 까맣게 잊고 있었던 것이었다.

그렇다면 현재 진행하고 있는 놈은?! 하는 생각에 봤더니... 국정원에서 친절하게 가이드 해주셔서 아예 배포본부터 빼놓은 듯 하다.

빼놨으면 고지를 해주던가!!!!!!!!!!!!!!!!!!!

아 진짜 나라밥 먹는 것들은 왜 하나같이 업무 태만으로 국민을 고생시키는걸까...ㅠ_ㅡ

알 수 없는 오류 때문에 고생하시는 개발자 분들 아래 파일에 다음과 같은 라인을 추가해주면 에러가 예쁘게 나타난다.

egovError.jsp
dataAccessFailure.jsp
egovBizException.jsp

추가 구문 - 서버 콘솔 로깅
<%
          Throwable ex = (Throwable)request.getAttribute("exception");
          ex.printStackTrace();
%>


화면에 직접 에러를 보이고 싶을 때
${exception.message}

쉽다.

이젠 고생 그만해야지.. ㅠ_ㅡ
    @RequestMapping("/cvpl/updateCvplCnsltBest.do")
    public String updateCvplCnsltBest(
            CvplCnsltVO cvplCnsltVO,
            @ModelAttribute("searchVO") CvplSearchVO searchVO, SessionStatus status)
            throws Exception {
    if(egovWebServiceClientRegisterCvpl.registerCvpl(cvplCnsltVO)) {
            cvplCnsltService.updateCvplCnsltBest(cvplCnsltVO);
            status.setComplete();
    }
        return "forward:/cvpl/egovCvplCnsltList.do";
    }


전자정부프레임워크에서 트랜잭션 메소드를 컨트롤러에 등록하여 사용할시 forward나 return 경로를 사용할 경우 중복으로 저장되는 현상이 발생한다.
그럴 경우 트랜잭션 컨트롤러의 패러미터 부분에
SessionStatus를 걸고 return 하기 전에 세션을 마무리 해주면 된다!(매우 중요)

전자정부프레임워크를 권장사항(?)에 따라

JDK 1.6, Tomcat 6 에서 돌리면

TagSupport, c.Tld 어쩌고 저쩌고 하는 에러가 날 수 있다.

이는 웹 어플리케이션의 WEB-INF/lib 디렉토리에 구동하는 톰캣의 jsp-api.jar, servlet-api.jar와 다른 버전의 라이브러리가 들어가서 그렇다.

컴파일러 빌드패스에서 개발환경에서 구동하는 톰캣의 servlet-api.jar와 jsp-api.jar 파일을 임포트 시켜서 WEB-INF/lib로 라이브러리 출력으로

설정을 걸어두던지 직접 TOMCAT/lib에서 위의 두 파일을 복사하면 말끔하게 태그라이브러리 관련한 에러가 사라진다.

2010-04-05 23:58:46,831 ERROR [org.springframework.web.context.ContextLoader] Context initialization failed

org.springframework.beans.factory.BeanCreationException: Error creating bean with name ‘egovJDBCAppender’: Autowiring of methods failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire method: public void egovframework.rte.fdl.logging.db.EgovJDBCAppender.setDataSource(javax.sql.DataSource); nested exception is org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.sql.DataSource] is defined:


이런 에러가 날 때가 있다.

전자정부 프레임워크 사이트에서는 관리자가 귀찮아서 알려주는 짓 따위 안한다.

그래서 혼자 두시간 동안 삽질한 결과 ..

..

..



public class EgovJDBCAppender extends JDBCAppender {


/** 로그 실행 위치 정보 flag */

boolean locationInfo = false;


/** 싱글톤 dataSource provider - Spring 연동 dataSource 제공 */

private final SingletonDataSourceProvider provider;


/**

   * ‘@Autowired’ Annotation 형식으로 dataSource 를 받아와 이를 SingletonDataSourceProvider 의 setDataSource 메서드를 호출하여 설정해 준다.

   * @param dataSource

   * - Spring 에서 설정한 dataSource

   */

@Resource(name = “dataSource”) <— 여기의 주석을 지워주면 된다.

@Autowired(required = false)

public void setDataSource(DataSource dataSource) {

provider.setDataSource(dataSource);

}





그렇다. 아래의 주석만 지워주면 되는 것이었다…

어쩌라구.. ㅠ_ㅡ

@Resource(name = “dataSource”)

제가 직접 설치를 해보면서 진행중인데 가이드 사이트에 올라와있는 그대로 사용하면 MYSQL은 에러납니다.

오라클 쪽은 아직 셋팅을 안해봐서 모르겠습니다.

MYSQL 쪽이 에러가 나는 이유는 테이블 생성시 Foreign-Key를 걸 때 부모와 자식 테이블의 순서가 바뀌어서 걸리지 않기 때문에 에러가 납니다.

일일히 찾아가면서 순서를 맞추어 다시 배포합니다.

유용하게 쓰시길 바랍니다.

첨부파일을 다운받아서 사용하시면 됩니다.


참고로 이 스크립트는 기본적으로 com 이라는 DB를 생성해 공통 컴포넌트 관련 테이블을 생성하도록 스크립팅 되어 있습니다.

별도의 DB를 사용하시려면

1단계 스크립트의 첫부분에서 DB create 부분과 use DB관련 부분 수정해서 사용하시면 되겠습니다.=

해당 가이드 페이지 링크

1. pom.xml에 다음을 추가한다.

<repositories>

<repository>

<id>mvn2</id>

<url>http://repo1.maven.org/maven2/</url>

<releases>

<enabled>true</enabled>

</releases>

<snapshots>

<enabled>true</enabled>

</snapshots>

</repository>

<repository>

<id>jboss</id>

<url>http://repository.jboss.com/maven2/</url>

<releases>

<enabled>true</enabled>

</releases>

<snapshots>

<enabled>true</enabled>

</snapshots>

</repository>

<repository>

<id>atlassian</id>

<url>http://maven.atlassian.com/repository/public/</url>

<releases>

<enabled>true</enabled>

</releases>

<snapshots>

<enabled>true</enabled>

</snapshots>

</repository>


<repository>

<id>egovframe</id>

<url>http://www.egovframe.go.kr/maven/</url>

<releases>

<enabled>true</enabled>

</releases>

<snapshots>

<enabled>false</enabled>

</snapshots>

</repository>

</repositories>

2. 프로젝트의 pom.xml의 <dependencies>에 아래 내용을 붙인다.

<dependency>

<groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>2.0.4</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>2.0.4</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-acl</artifactId> <version>2.0.4</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core-tiger</artifactId> <version>2.0.4</version> </dependency>

준비물

아래 설명에서 url은 이클립스의 Help -> Install New Software -> Add...

에 추가하는 링크다. (Amatears 제외)

1. 이클립스 3.5 갈릴레오 For JavaEE Developers 최신버전 - 다운로드

2. Help -> Install New Software -> Add...

3. EMF 추가 - http://download.eclipse.org/modeling/emf/updates/

4. EMF SDK 2.5.0 (EMF + XSD) 만 선택해서 설치

5. UML2 설치 - http://download.eclipse.org/modeling/mdt/updates/releases/

6. MDT UML2 SDK 3.0.1 설치

7. AJDT 설치 (이클립스 3.5용) http://download.eclipse.org/tools/ajdt/35/dev/update

8. Amateras UML, ERD 설치

업데이트 사이트가 아닌 http://sourceforge.jp/projects/amateras/releases/에 직접 방문하여 Amateras UML, Amateras ERD 최신버전을 다운받아

Eclipse의 plugin 디렉토리에 복사한다.

9. SVN 설치 http://download.eclipse.org/technology/subversive/0.7/update-site/

10. SVN 설치 후 Eclipse를 재시작하면 SVN Connector 다운로더가 자동으로 뜬다. Connector 설치

11. m2eclipse 설치 - http://m2eclipse.sonatype.org/sites/m2e

12. PMD 설치 : http://pmd.sourceforge.net/eclipse

PMD For Eclipse 3만 선택하여 설치

13. Spring IDE 설치 - http://springide.org/updatesite/

14. 첨부파일을 다운받아 각각 features와 plugins 디렉토리에 압축을 푼 파일을 복사


15. 이클립스를 재시작

16. eGovFramework 설치 - http://www.egovframe.go.kr/update

첨부파일을 먼저 설치하는 이유는 업데이트 사이트에 참조하는 구버전 파일이 없어 에러가 발생하기 때문임.

17. Maven 환경설정 페이지의 Maven 환경설정 Part를 따라서 환경설정 및 설치를 해주세요

18. 이클립스 재시작 후 File - New - eGovFramework Web Project에서 Sample Project를 생성하여 파일이 생성되는지 확인


이번에 저희 회사에서 차후 공공SI 시장에서 유리한 고지를 점유하기 위한

전자정부 프레임워크의 도입을 놓고 연구를 시작하였습니다.

참고로 저희회사는 자바서비스넷(http://www.javaservice.net)의 JDF프레임워크에 기반한 자체 프레임워크를 사용하고 있었습니다.

내년부터 정부가 공공시장에서 전자정부 프레임워크의 도입을 50%까지 확대한다는 발표에 (더러워서....)

팀 회의를 통해 지금부터 연구를 시작하여 차후 사업에 대해 준비하기로 하였습니다.

지금껏 파본 전자정부 프레임워크에 대한 소감을 말하자면

1. Spring 2.5 + iBatis + Hibernate 등등 최신의 오픈소스기반 프레임워크 입니다.

2. http://www.egovframe.go.kr 에서 Q&A와 Wiki를 통해 사용자 지원을 충실히(?) 하고 있습니다.

3. 우리나라 SI 3사에서 컨소시엄을 구성하여 만들어낸 프레임워크 입니다.

4. 웬만한 기초 공통 컴포넌트들이 기본으로 구축되어 있어 프레임워크 사용업체는 다른 서비스 모듈에는 신경 쓸 필요 없이 최대한 비즈니스 로직에 집중할 수 있습니다. (게시판, 커뮤니티, 등등등 상당히 번거롭고 신경쓰이는 공통 컴포넌트들이 이미 구축되어있어 다운로드하여 필요에 따라 커스터마이징 후 사용하기만 하면 됩니다.

5. Eclipse IDE 플러그인을 통해 편리한 개발 환경을 지원합니다.

6. 테스팅, 디플로잉, 버전관리, 이슈관리 등 기본 협업개발환경을 기본적으로 지원합니다.

여기까지 전자정부 프레임워크의 장점을 서술하였고 단점은...

- 유지보수가 역부족인 듯...

뭐.. 공공시장에서 뒹굴어 본 바 공무원 마인드가 적용되는 사이트라 할 수 있습니다... 초기 배포 및 가이드 구성은 상당히 우수하게 잘 되었으나

차후 보수 과정에서 생긴 변경사항 및 오류사항이 제대로 적용되고 있지 않습니다.

적용시 생기는 문제점에 대하여 사용자들이 Q&A를 통해 지원받고 있으나 근본적인 문제인 기본 가이드를 전혀 수정하지 않아(!) 적용시 재차

Q&A를 확인해야 하는 문제점이 있습니다.

Wiki 몇 글자 수정하는게 그렇게 힘들까요 ㅡ.,ㅡ;;;; 그렇게 담당자 중심 설명 시스템을 구축할꺼면 왜 Wiki를 쓰는건지 이해가 안가는군요...

아무튼 공부하는 입장에서 저도 까먹지않게, 프레임워크 셋팅 시 생기는 이슈와 관련하여 계속 포스팅 하도록 하겠습니다.

소개에 대한 자세한 사항은 위에 소개한 전자정부 홈페이지를 방문하시기 바랍니다.

참! 기존에 Spring+iBatis로 작업하던 업체에서는 프레임워크를 포팅하기가 굉장히 쉬울 듯 합니다.

많은 관심부탁드립니다.

이전 1 다음