Do Not Think!!!

Posted
Filed under 글로 기록하기
현재 Spring과 iBatis를 이용해서 웹어플리케이션을 만들고 있습니다.
그런데 현재 만들고 있는 웹어플리케이션과는 독립적으로 작동하는 별도의 콘솔 어플리케이션을 만들어야 하는 상황이 생겼습니다.

오라클에 clob 데이터를 넣는 작업인데, 이는 기존에 만들고 있는 웹어플리케이션과는 별도로 동작을 해야 하는 기능입니다.

오라클에  clob 데이터를 넣는 작업이 쉬운 일은 아니더군요.
몇가지 방법을 찾아봤는데, 그 중 제일 쉬운 해결책은 iBatis를 이용하는 것이었습니다.

그래서 현재 Spring과 iBatis를 이용해서 웹어플리케이션을 만들고 있었기에, 이와 동일한 구조로 콘솔 어플리케이션을 작성하기로 했습니다.
지금은 독립적으로 동작하지만, 앞으로 제가 생각하고 있는 기획상으로는 함께 동작해야 하는 기능이거든요. 그래서 콘솔 어플리케이션을 동일한 구조로 작성하면, 나중에 통합하기가 쉬워지리라는 생각으로 그렇게 결정했습니다.

웹어플리케이션 구조
HTTP <-> Controller <-> Service <-> DAO <-> DB

콘솔 어플리케이션 구조
Service <-> DAO <-> DB

일단 기존과 동일하게 DAO 테스트 코드를 작성했고, 그 다음으로 테스트 코드를 만족하는 쿼리를 작성했습니다.
그리고, Service 코드는 테스트 코드 없이 작성했습니다. (아직 테스트 코드는 DAO 밖에 없어요. ㅡ.ㅡ;;)

log4j를 설정하고, ant로 jar 파일을 만들어서 돌려보니...
아... 잘 돌아갑니다.

[code]UPDATE widgets
SET lang = 'ko', name = '할 일', author = 'WZDWORKS', description = '오늘 할 일을 한 눈에 정리해보아요!', autoRefresh = '0', maximizable = 'false', icon = 'images/widget/icon_todolist.gif', css = 'java.io.StringReader@ae4646', js = 'java.io.StringReader@187b287', body = 'java.io.StringReader@1d9e2c7', preferences = 'java.io.StringReader@1b7ae22'
WHERE wid = '5'
[/code]
iBatis 로그를 확인해봤습니다.
다른 부분은 완성된 쿼리가 보이는데, css, js, body, preferences 부분은 조금 이상하게 보이네요.
css = 'java.io.StringReader@ae4646', js = 'java.io.StringReader@187b287', body = 'java.io.StringReader@1d9e2c7', preferences = 'java.io.StringReader@1b7ae22'
iBatis에서 자동으로 4000byte가 넘는 clob 데이터를 stream으로 변환해서 오라클에 넣어주는걸 확인할 수 있네요.

일단 이렇게 작성한 방법을 정리했습니다.

다행입니다. 오라클에 4000byte가 넘는 clob 데이터를 이렇게 쉽게 넣을 수가 있다니...