오늘은 어디로 갈까...

Eclipse cnt.framework's DAO Plug-In 본문

삽질

Eclipse cnt.framework's DAO Plug-In

剛宇 2008. 10. 31. 12:28

이 동네에서 쓰는 프레임워크 중에 cnt.framework라 불리우는 놈이 있는거 같은데, 결론은 shit~이다.
(enxx 작품인가)
나름데로 고심한 흔적은 있어보이나, 이건 영 아니올시다.
나도 예전에 프레임워크를 만들면서, 산고의 고통속에서 많은 누(?)를 범하긴 했지만...
이놈에서 느껴지는 것은 자바기본이 부실하다는것 밖에....(나도 못하긴 하지만.T_T)
그중에서 가장 마음에 안드는 부분은 DAO 생성 부분. (다른 기능은 안써봤음. ^^;)
xml에 sql을 정의해서, DAO 생성프로그램을 실행(ant 이용) 생성할 대상 sql 이름을 넣고, 자바 파일(DAO)을 생성한다.
현재 개발 환경은 이클립스인데, ant를 이용해서 실행 후 화면 갱신(refresh)까지 해줘야한다.
(깜빡 잊고, 화면 갱신을 안하면, 재컴파일이 안되서 테스트 하는데, 왜 안되지~~하고 고뇌를 많이함 T_T)
뭐 여기까진 번거롭지만, 열심히~ 사용하면 되는데,
문제는 동적 조건절을 만들기가 참 얘매하다는것이다.(iBatis가 그립다.)
쿼리문을 추가로 붙이는 기능은 구현이 가능하지만, 바인딩변수를 사용할 수가 없어 변수값을 그대로 조건절에 노출시켜야한다는..
그래서, 한때 유행했던(?) SQL-Injection의 좋은 놀이 도구가 되어버리는 슬픈 운명이 기다린다는것이다.
물론 상속받아 일일히 다 구현을해서 제대로된 처리를 할 수도 있지만,
그럼 이 놈의 존재 이유가 없어지는것일뿐만아니라, 너무 귀찮다는것이지...
간단한(?) 동적 조건을 쿼리문으로 해결을 해서 사용하지만, 조금 복잡해지면 한숨만 나올뿐이다.
 ->     select * from dual where ({xxx} is null or xxx = {xxx})

뭐 신세 한탄은 이만 하고, 본론으로 돌아가서,
이 플러그인은 sql을 정의한 xml을 변경하면 DAO를 자동 생성해주는 기능을 가지고 있다.
원래 있던 DAO 생성프로그램을 클래스파일만 존재해서, 열심히 디컴파일하여 만들어봤다.
기존 생성프로그램 구조도 별로 좋지 못하여 많은 난관이 있었다.
처음에는 실행 프로그램만 잘 사용하면 될까 싶었는데, 삐~~~였다.
(파일 위치 지정이 안되고, 파일 파싱후 그 정보를 메모리로 상주(?)시켜버렸고, 기타 등등...)
그래서 클래스 2-3개 정도만 새로 구현하여 사용할까해서 열심히 디컴파일해서 작업을 했지만...
파고들면들수록 새로 구현해야하는게 많아져서 좌절에 빠져버렸다..
귀찮아서 포기할까 싶었는데, 불현듯 스쳐가는 생각.
(아... 난 잔머리의 대왕일까.. ^^;)
문제의 핵심은 SqlRepository 클래스에 있는데, 이놈은 싱글톤으로 생성되어 곳곳에서 사용되어진다.
내가 바꿔할 졍보가 SqlRepository 의 멤버변수로 정의되어있는데, 그곳에 접근(?)할 수가 없어서
문제가 야기된것이었다.(메소드라도 좀 만들어놓지. T_T)
잔머리로 생각해낸 해결책은, 접근 불가능한 변수들은 접근가능하게 만들면 된다는것이었다.
private 선언되어서 접근이 불가능한 변수들들 접근가능하게 변경한다음, 
내 마음대로 주물락~거려서 구현을 했다는것이다.
  SqlRepository sqlRepository = SqlRepository.getRepository();
  Field[] fields = SqlRepository.class.getDeclaredFields();
  AccessibleObject.setAccessible(fields, true);
가끔은 쉽게 가는것도 좋지 않을까 ^^;;



뱀다리 :  Nature와 Builder에 대하여, 좀더 연구해볼것!!