....

Spring + iBatis + Tiles2 반영하면서 생긴일... (썰풀기) 본문

Spring

Spring + iBatis + Tiles2 반영하면서 생긴일... (썰풀기)

idkook 2009. 3. 27. 02:18


그냥.. 아무 생각없이 써내려가는 글...... (뭔가 상당히 기술적인 해법을 기대했다면 안보는게 나을 듯 싶습니다.)
그냥 실제로 적용하다 보니.. 이런 저런 문제가 생기더라.. 그래서 결국은 이렇게 가더라... 라는 일명 삽질기가 되겠습니다.

아래부턴 그냥 나한테 요 몇일간 있던 일을 회고하면서 쓰는 기분이라 편한문체로 써나갈테니 이해를..



기존에 이미 돌아가고 있는 사이트에 투명하게 가져다 붙히기는 Hibernate보다는 iBatis가 좀더 유리한것 같다.
지금 작업중인 사이트의 경우 이전 설계개발자들이 무슨생각을 한건지 DB에 Logging을 꺼버렸다는거...

덕분에 Commit, Rollbak은 지원도 안되고.. 자연스래 Transaction을 편안~~하게 즐길수 있게 해주는 SpringAOP나 아예 Transaction을 기반으로 돌아가는 Hibernate를 올리는건 꿈에도 상상할 수가 없더라....
(갑자기 Hibernate를 붙혀보겠다고 작년 프로젝트에서 일주일을 날밤깐 기억이 난다... 결국 작업기간 다 까먹고 Hibernate는 커녕 SpringJDBC도 못붙히고 날코딩으로 끝낸적이 있었다.. ㄲㄲ)

트랜잭션을 붙히자고 거기 얹혀있는 4가지 웹서버의 DAO단을 전부 뜯어고칠수도 없는 판이고..(개다가 내가 계속 추가 개발을 진행하게 되는 서버는 그중에 단 한대일 뿐이다...) 그렇다고 언제까지 서블릿에서 DAO를 부르고 DAO에 직접 SQL을 때려박아가면서 try catch를 난사하기도 싫고...

결국 이번 작업때 DB의 구조는 그대로 둔 상태에서 DAO 부터 서비스레이어, 뷰쪽가지 일부분이긴 하지만 다시 만들기로 했다... 이유를 설명하긴 힘들지만.. 현재 가동되고 있는 클래스들은 자원반환을 잘 안하고 있어서 어느정도 과부하가 걸리면 바로 레진이 내맘대로 리스타트를 해버리기도 하고 먹통도 되버리기도 하고...

이번에 큰맘 먹고 표준템플릿 코드랑 패키지 체계를 구성해야 겠다 싶어서.. 기존 패키지들에 전혀 의존하지 않고 독자적으로 때어낼수 있도록 만들기로 했다.. (그래야... 나중에 서버 갈아엎자는 말이 나와도 그걸 기반으로 편안하게 가겠다 싶어서.. ㅎㅎㅎ)

우선 그동안 책에서만 봐오던 SpringJDBC를 적용시켰다... 오홋... 죽인다.. 코딩량이 절만으로 줄어든다...

그래도 역시 코드안에 SQL이 들어가는건 불편하다... 아싸리 SQL을 XML로 빼내자.. 하고는 XML 에서 static Hashtable에 쿼리를 몽땅 때려넣어서 땡겨오는 UtilityClass를 하나 만들었다... queryId로 쿼리를 툭 땡겨올 수 있도록.... (이 과정에서 표준 XML을 위한 XSD파일까지 만들면서 삽질을 좀 했다... )

그런데.. 만들고 보이 이거 뭔가 어디서 본거 같은 느낌인게.... 맞다.. 작년 파견근무지에서 사용하던 프레임워크에서 쿼리를 실행할때 땡겨오던 그 방식이다... 근데.. 고급기능이 빠져있다... 바로 다이나믹쿼리...
만들까? 아냐.. 그정도까지 세월아네월아 만지고 있을 시간은 없는데... 하이버네이트는 안되는데... 어쩌지... 하고 있는데.... 전에 같이 일하던 동생이 해준말이 얼핏 생각난다... 이거(전에 쓰던 프레임워크..) iBatis랑 무지 비슷하네요... 똑같진 않지만... 이라고라....

다시 고민이다.. 필요한것만 만들까? 아님 iBatis를 지금 부랴부랴 좀 들이파서 결과를 만들까? 하면서 이미 iBatis 다운받고.. 레퍼런스 문서를 열고 있다... 그리고 헉... 진짜 비슷하네... 정도가 아니라 쿼리를 실행시키는 매서드 명들은 아예 똑같다.. ㅡㅡㅋ;

딱 문서 30분 보고 바로 DAO하나 다 만들어버렸네.. ㅎㄷㄷ

게다가 Spring DI의 위대함은 바로 여기서 드러나니.. 전에 만든 DAO에서 XML에 한줄 틱 바꾸니까 바로 iBatis로 돌아가버린다... 이맛에 쓴다니까... (나중에 DB가 바껴도 별로 안무섭다.. 오히려 환영이다... 제발 Logging이 꺼져있는 Informix는 이제 그만... 트랜잭션 직접 구현하기도 이젠 지겹다.. ㅠㅠ)

결과적으로.. 예전에 날코딩해서 만들었던것보다.. 개발 속도가 거의 2배는 빨라진것 같다... DAO부터 컨트롤단까지이긴 하지만..

이제남은건 View인데... <jsp:include에서 이제좀 벗어나고 싶어지는 욕구가 막 물밀듯이 올라오네...

전에 AppFuse를 공부할 때 분명이 Sitemesh를 눈여겨 봐둬서 이번에 좀 넣어볼까? 하고 꾸역꾸역 기존 JSP에 레이아웃을 분리하고 설정을 해서 넣어봤다... 한 3시간 걸린듯...

그런데 문제가 생겼다... 이미 디자인 다 되있는건데... 묘~하게 스타일이 다 깨진다.. 특히 정렬부분... Onload이벤트도 안먹을때가 있다.. (onload이벤트의 해결책은 분명 보긴 봤는데...)

무엇보다.. 기왕이면 Spring이랑 잘 융합시켜보고 싶어져서.. 아예 Tiles를 보기 시작했다... 오호 이거 좋네.. 괜찮네 하면서도.. 깝깝한 문제가 생겼다... sitemesh처럼 패턴방식으로 템플릿을 적용할 수가 없다는거... (이거 큰일인데.... 홈페이지 전체에 적용할려면 tiles설정xml파일 크기가 장난이 아닐거 같다.. 아무리 상속이 이것저것 다 한다고 쳐도..

게다가.. 이미 만들어놓은 뷰랑 쓰기엔 어딘가 핀트나 접근 방식이 좀 안맞는 듯한 직감이 들기 시작했다. 
만든건 달랑 3페이지 뿐이지만 나름 잘 만들었다고 생각하는게 실제로는 리스트, 읽기, 쓰기, 수정, 삭제를 이 3개의 JSP와 3개의 컨트롤로 끝내버린 상태이고... 게다가 이 3개의 페이지에 EL을 이용해서 카테고리마다 다른 스타일을 적용시켜서 거의 60본정도로 뿔어나보이도록 만들어 놓은 상태인데...

바로 이부분이 타일즈랑 잘 안맞는 부분이였다... 현재 만든 페이지는 좌측 매뉴가 필요없다(프레임 구조라서...) 하지만 똑같은 페이지를 View만 다시 만들어서 한군데 더 만들어야 하는데... 이부분은 좌측 매뉴가 카테고리마다 변한다... top과 bottom은 당연히 들어가는거고...

그때마다 상속에 게시판 명 변할때마다 전부 일일히 XML에 다시 때려넣기가 좀 거시기 하다..(할꺼면 XML에 때려넣어야 하지만.. 이미 ResourceBundle에다가 다 때려넣어놓은걸 또 옮기기가.. OTL)

결국 스타일 깨지는 문제를 해결하면서 sitemesh로 가야 되나 하는 판에... 다음글을 봤다..

Spirng MVC 와 Tiles 2 연동하기(응용)  

흠.... DynamicTilesView라는 녀석도 참 맘에 든다 싶어서 테스트...
오.. 잘된다.. 편하다... 그런데 뭔가 좀 이상하네... 대충 이름이 맞으면 다 때려맞춰서 넣어버리는거 같다...
이거 큰일인데... 지금 내가 만들어놓은 View는 이름이 덜렁 list , view, read, write 이런식으로 되있는데...
바로 프로토타입 테스트로 대충 몇글자 끄적끄적 해서 만들어서 비슷한 환경을 구성해서 테스트...

역시나... View 이름 체계를 뒤집어 엎어야 할 판이다... 편하긴 한데....

다른 뭔가를 앞에 가져다 붙혀서 View이름을 동적으로 생성하게 하고 거기에 맞춰서 tiles를 일일히 만들어야 하는건가.. 고민하면서.. .이제서야 가보는 Tiles 프로젝트 홈페이지.. (본래 맨 처음 가야 하는데.. ㅠㅠ)

2.1이 보인다... 물론 내가 다운도 그걸로 받았으니까 뭐.. 라고 하고 있는데 What's New가 보인다.

http://tiles.apache.org/framework/whats-new.html

그리고... 화면 한가운데.. 제대로 찍혀져 있다.. 그것도 볼드체로.... Wildcard support....
갑자기 눈이 번쩍 뜨인다... 어라?? WildCard면.... 패턴형태를 지원한다는거 아냐? 하면서 두근거리는 맘으로 봤다.. 생각했던거랑 좀 틀리지만... 어케 잘 맞춰낼 수 있을거 같은 기능지원이다.. 아싸~~~

거기다가...... 바로 그 밑에는 EL support도 보인다... Model에 스타일 구분값을 날려서 페이지를 동적으로 생성한 나로써는.. 아예 템플릿에 EL을 쓸 수 있다는게.. 정말 눈물나게 고마운 기능이다..  또 아싸~~~

아래는 원문 중일부..

  • Wildcard support: wildcards are supported:
  • EL support in Tiles definition files, when specifying attributes and templates.
  • 으흐흐.. 이거 너무 맘에 든다.. 내일 출근해서 바로 써먹어야지....

    게다가 Howto에 봤더니 이런것도 있다...

    말인 즉슨 View를 Role을 포함해서 DB로 관리할 수 있다는건데... 조그만 사이트에서는 낭비겠지만.. 전에 있던곳같이 화면이랑 매뉴조차도 웹인터페이스로 직접 생성해야 할 경우를 생각하면 정말 괜찮은 솔루션이 되겠다는 생각도 들고...

    좌우지간 오늘 진짜 별거 다해봤네.... 내일이면 다 까먹을 거 같아서 스토리만 쭈욱 우선 적어봤다....
    머릿속에서 무슨 결론이 나오면 정리좀 해서 올려야지.. ㅡㅡㅋ;

    결론 : 몇일간 한 삽질.

    • SpringJDBC and RowMapper and Custom SQL Loader -> iBatis 한방에 끝.. ㅡㅡㅋ;
    • SpringMVC SimpleFormController showFor어쩌구 매서드에서 바인딩 삽질 -> onShowForm 그냥 해결
    • SpringAOP를 이용한 접근권한 검사에서 결과를 Result폼에 넘겨보려고 삽질 -> UserException만들어서 그냥 해결.. ㅠㅠ;
    • SpringMultiPartResolver 랑 Orelly의 MultipartRequest 붙혀보려고 삽질 -> 그냥 기존 FileRenamePolicy 무시하고 새로 static매서드 몇개 직접 만들어서 해결...
    • SimpleFormController에 Validator를 붙힌뒤 다시 Form으로 돌릴때 TagFree편집기에 Mime코드가 와장창 깨져나오는 문제 삽질.. -> onShowForm()에서 에러가 발견되면 우선 디코드 해서 재전송으로 해결...
    • SiteMesh를 붙혀보고 스타일이 미묘하게 변경되는데 좌절...
    • Tiles2를 보고 페이지마다 일일히 XML을 만들어야 하는데 또 좌절... (게다가 XML이 변경되면 WAS가 리스타트 되지 않으면 반영이 안된다는거에 더 좌절.. )
    • 다 포기하고 SiteMesh로 어찌 해보려다가 Tiles2.1을 보고 급 반전 양상....
    • 내일 언능 작업해서 월요일날 몽땅 반영해야지.. 

    써놓고 보니.. 무슨 매 단계마다 삽질이였다...  바꿔 말하면 그만큼 얻은게 많다는 뜻.... 즐거워라~~  긋~!






     
    Comments