본문 바로가기
블로그 이미지

방문해 주셔서 감사합니다! 항상 행복하세요!

  
   - 문의사항은 메일 또는 댓글로 언제든 연락주세요.
   - "해줘","답 내놔" 같은 질문은 답변드리지 않습니다.
   - 메일주소 : lts06069@naver.com


Spring framework

전자정부, MongoTemplate 빈 생성 오류

야근없는 행복한 삶을 위해 ~
by 마샤와 곰 2019. 6. 3.

 

 

전자정부 버전 3.5에서 몽고db와 커넥션을 활용하여 데이터베이스에 접속하는 환경설정을 하다가, 빈 생성시 오류메시지와 함께 동작하지 않았다.

1. 오류타입 1 : spring-data-mongodb BeanFactoryReference error

2. 오류타입 2 : No bean named 'mongo' available

3. 오류타입 3 : spring framework failed to load applicationcontext

4. 오류타입 4 : java.lang.NoClassDefFoundError: com/mongodb/client/model/Collation

설치한 라이브러리 버전이 실제 동작하는 스프링 프레임워크 버전과 안맞거나, 자바버전과 안맞거나 하는 등의 문제로 생각 되었다.

1번, 3번의 오류는 전자정부 환경과 몽고db연결 후 데이터를 매핑해주는 spring-data-mongodb 에서의 버그일 수도 있다.

전자정부 프레임워크에서(버전 3.8까지) maven 환경의 몽고템플릿의 빈 객체 의존성을 주입하려면 몽고데이터 관련된 라이브러리는 따로 빼서 WEB-INF/lib에 두는 것이 편하다.

이녀석을 pom.xml에 두면 자꾸 라이브러리를 찾지 못해서 인지 오류타입 3 과 같은 내용을 보이며 뻗어버렸다.

2번의 오류는 크레덴셜(보안접속) 문제로 *.xml에서 설정을 잘못 하였을 경우의 오류메시지로 확인하였으며 사용중인 몽고db 커넥터 라이브러리 버전이 낮으면 생기는 오류였다.

마찬가지로 4번의 오류도 최초 빈객체가 만들어 질 때 까지는 문제가 없으나 매핑하는 도중 발생하는 런타임 오류였는데...몽고db 커넥터 라이브러리 버전이 낮으면 생기는 오류였다.

2번과 4번은 mongo-java-driver의 버전을 3.8.x 버전으로 올려주니 해결되었다.

마찬가지로 전자정부 버전을 3.5에서 3.8로 올렸다. 3.5에서는 몽고템플릿의 집계함수를 사용하려면 매핑하는 라이브러리 버전을 올려야 하는데 전자정부 버전이 낮아서 지원이 안되서 오류가 계속 났었다.

몽고db 3.x.x 버전에서 집계함수를 사용하려면 전자정부 버전도 올려주어야 한다.

환경 기준

- 데이터베이스 버전 : 몽고db 3.x.x

- 전자정부 버전 : 3.8

- 몽고 드라이버 라이브러리 버전 : 3.8.x

- 매핑하는 라이브러리 버전 : 2.0.x * 만약 의존성 문제로 자꾸 서버가 다운된다면(개발환경에서), 따로 두는게 편하다. 자꾸 못찾으며 뻗는경우가 생긴다..

 

	<properties>
		<spring.maven.artifact.version>4.3.16.RELEASE</spring.maven.artifact.version>
		<egovframework.rte.version>3.8.0</egovframework.rte.version>
		<org.apache.tiles-version>3.0.3</org.apache.tiles-version>
		<webapp.lib>${basedir}/src/main/webapp/WEB-INF/lib</webapp.lib> <!-- Jenkins lib guide property -->
	</properties>

	<dependencies>
	    <dependency>
	        <groupId>org.mongodb</groupId>
	        <artifactId>mongo-java-driver</artifactId>
	        <version>3.8.2</version>
	    </dependency>
	</dependencies>

요렇게 직접추가를..

 

반응형
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)

댓글