티스토리 뷰

Java

구글 주스와 MyBatis의 연동

Jodu 2017. 9. 23. 11:57
반응형

[서론]

프로그램 만들다 보면 보면 데이터베이스로 부터 데이터를 읽고 쓰는 작업은 필수적이라고 해도 무방할 정도로 데이터베이스에 값을 쓰고 읽는 작업을 많이 한다. 저번 포스팅에서는 Google Guice(이하 주스)를 이용한 의존성 주입을 하는 법에 대해서 알아보았다면 이번 포스팅에서는 주스를 이용해서 MyBatis와 연동하는 법에 대해서 알아보도록 한다. 해당 연동 부분은 내가 참여하고 있는 프로젝트에서 직접 사용하고자 하여 자료를 조사하고 만들었는데 자료가 충분하지 않아 고생을 한 부분이다. (혹은 내가 자료들을 잘못 이해 해서 ...)


[MyBatis와의 연동]

저번 시간에 의존성 주입 모듈을 만들기 위해서 InjetConfig라는 클래스가 AbstractModule을 상속한 클래스에 주입될 클래스들의 관계를 정의하였다. 이와같이 MyBatis와 연동하기 위해서도 필요한 클래스 정보들을 주입하여야 하는데 이것을 MyBatis에서는 MyBatisModule이라는 클래스로 미리 정의가 되어 있다. 다음 아래에서는 MyBatis모듈을 설정하는 내용을 나타낸다. 



MyBatisConfigModule이 PrivateModule을 상속한 것을 볼 수 있다. 이와 같이 다른 API에서 구현한 Module을 내가 주입하고자 하는 Module에서 사용하고자 할때는 PrivateModule을 상속 받아 install이라는 메소드에서 다른 API에서 구현한 Module을 등록 해줄수 있다. 예를 들어 지금은 MyBatisModule을 등록해준거지만 후에 하이버네이트를 사용하고자 한다면 하이버네이트가 지원하는 모듈을 등록 할 수 있을 것이다.

이제 MyBatis가 어떤 DB 벤더를 사용할 지는 bindProperties라는 메소드 안에서 설정 할 수 있게 된다. createProperties라는 메소드는 내가 만든 인터페이스에 디펄트 메소드를 호출 한 것이며 아래와 같다. 



설정정보를 보게 되면 Spring에서 설정해주는 정보와 똑같다는 것을 알 수 있을 것이다. 어떤 DB를 사용할 것이며 url, username, password를 설정하게 된다. 

MyBatisConfigModule을 보게 되면 bind와 expose를 설정해주게 되는데 PrivateModule에서 생성된 인스턴스를 expose를 해주어야만 우리가 실질적으로 사용하는 InjectConfig에서 만들어지는 인스턴스들에 주입이 정상적으로 이루어진다. 만약 expose를 해주지 않는다면 다음고 같은 에러를 보게 될 것이다. 



분명 bind를 해주었지만 expose를 선언하지 않았기에 fruitDB라는 인스터스를 주입받지 못해 CreationException이 발생하게 된다. 

여기까지 정상적으로 설정이 되게 되면 MyBatis와 연동은 끝이 난다. 이제 마지막으로 한가지의 작업이 남는다. 그것은 우리가 이전에는 아래와 같은 설정으로 의존성 주입이 성공적으로 진행된 인스턴스를 생성해달라고 주스에 요청을 하는 작업이 있었다.



이렇게 까지만 했을 경우에는 InjectConfig에 설정된 정보들만 주입이 된 상태의 인스턴스가 반환되므로 아래와 같이 MyBatis설정이 된 모듈도 같이 파라미터로 전달 해주어야한다. 



이제 메인함수를 실행 시켜 보면 아래와 같은 결과 값을 얻을 수 있다. 



위에 com으로 시작하는 내용은 이전 포스팅에서 진행했던 설명의 결과 물이며 일부러 지우지는 않았다.


[결론]

구글 주스를 사용하는 곳은 많이 없다고 들었지만 Spring이 외 이런 의존성주입 프레임워크가 있다는 것을 설명하고 싶었고 첫번째 시간에는 간단한 사용 설명, 이번 시간에는 마이바티스를 사용하는 법까지 해서 포스팅을 진행 하였다. 내가 진행했던 프로젝트에서는 구글 주스를 성공적으로 적용하여 단일 모듈의 웹 필터를 구현하기도 하였다.

이 처럼 구글 주스 또한 스프링에 버금 가는 의존성 주입 프레임워크이다. 지금까지 했던 포스팅에서 만들었던 소스들은


https://github.com/aq3aq4/Guice_postion


에 그대로 있으므로 필요하신 분은 내려받으셔서 참조용으로 사용하셔도 된다.

이번 포스팅까지 진행하면서 제네릭타입 인스턴스의 주입은 어떻게 하는가? 라는 궁금한점이 생기는 분도 있을 것이다 이것에 대한 내용은 다음 포스팅에서 설명하고 그것을 마지막으로 구글 주스에 대해서는 당분간은 포스팅이 없을것 같다.

포스팅을 진행하면서 PrivateModule에 대한 설명이 빈약했는데 추가 설명이나 자세히 아시는 분은 메일로 보내주시면 수정하겠습니다.





반응형

'Java' 카테고리의 다른 글

MapStruct란?  (0) 2021.08.01
HttpServletRequest의 getInputStream 사용시 주의 사항  (0) 2019.03.28
FFMPEG Wrapper Library 사용법  (4) 2018.05.04
구글 주스 사용기[1]  (0) 2017.08.27
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함