정말 너무나 오랜만에 글을 써보는것 같습니다.. 거의 반년만인것 같은데.. 몇달간 자바를 배우느라

안돌아가는 머리 부여잡고 고생중입니다. 다들 재미없어하는 프로그래밍 얘기를 여기다 쓸줄이야

ㅋㅋㅋ 그런다고 잘 알면서 쓰는것도 아니고 잘못된 정보가 있을수도 있으니 보시는분들은 나름

필터링 해서 보시면 되겠습니다. 어짜피 파일도 많고 안의 내용을 전부 글로 쓰기는 시간도 없고

귀찮기도 해서 대략적인 파일구조만 설명하고 예제로 만든 파일을 첨부했습니다.

1. iBatis
  iBatis를 처음접했을때는 파일갯수만 늘어나고 복잡하다고 생각했습니다.. MVC Model 1에서
 주구장창 사용해오던 DAO클래스에 너무나 익숙해져서인지 왜 쓰는지도 사실 잘 몰랐고 새로운
 시도는 항상 어려움이 있는것 같습니다. 근데 계속써보니 DAO클래스 만들어서 PrepareStatement
 줄창써서 쿼리날릴때와는 비교도 안되게 편하더군요. 생각해보면 DAO클래스 제작은 노가다에
 가까웠던듯 싶습니다. 물론 단점은 존재하는것 같습니다. DAO클래스는 자바파일이라 쿼리문
 중간에 조건문을 사용해서 다양한 기능을 만들어볼수 있었는데 iBatis를 사용하게 되면 아직
 더많은 속성들을 몰라서인지 몰라도 PL/SQL의 Function이나 Procedure를 사용해야될일이
 많아질것 같았습니다. 물론 PL/SQL을 잘 모르는 저로서는 손발이 떨릴뿐.. 그래도 단순
 히 리스트 출력,수정,삭제,삽입에는 iBatis를 사용하는것이 편한것 같습니다.

2. Struts2
 Struts1까지는 그래도 MVC Model2를 초기에 공부할때 했던것들과 형식이 유사해서 편했
 습니다만 Struts2를 하면서 라이브러리가 개발자눈에 안보이게 처리하는 부분이 많아서
 적응하는데 좀 시간이 걸렸습니다. 에센셜한 부분에선 깡통같은 머리라 특히 Getter/Setter를
 어떻게 JSP에서 불러올수 있는지는 그냥 신기하기만 하네요. 기존에 JSP에서 Model2를 적용
 해서 만들면서 getAttribute나 setAttribute를 사용하지를 못하니 조금 답답한 면이 없지 않았
 습니다만 계속 만들어보다보니 그저 만들어보는데에는 기존방식과 크게 다르진 않더군요.
 대신 인터셉터가 들어가고 유효성검사(Validation) 체인이 걸리면 규모가 커질경우 보기에
 좀 복잡하겠다는 생각이 들었습니다.

 개발환경 : Eclipse EUROPA,Oracle 10g Database

 전체 UI :

사용자 삽입 이미지

모양은 별로 신경쓸 부분이 아니라 생각해서 대충.. 페이징도 없습니다.

Eclipse Workspace:

사용자 삽입 이미지

전체적인 파일구조입니다. 대략적인 설명부터..

iBATIS
custom.dao패키지
SqlMapConfig.xml : DB와 연결할 타입을 설정합니다. DBCP,JDBC,JNDI를 사용할수가 있는데
ConnectionPool이 어째 잘 적용이 안되서 JDBC로 설정했습니다.

Query.xml : SqlMapConfig.xml에서 읽어들이는 파일입니다. 여기에는 실제 쿼리문과 custom.dto
패키지의 CusomDTO클래스 파일을 읽어들일수 있는 설정을 해주게됩니다. 파일이름은 아무렇게나
만들어도 상관없습니다. 편의를 위해 Query.xml로 했습니다.

CustomDAO.java : struts1이나 MVC Model1에서 사용하던 DAO클래스와 같은 기능을 담당
합니다. 물론 이름은 임의로 줘도 상관없고 여기서 SqlMapConfig.xml을 파싱하게됩니다.
Query.xml은 SqlMapConfig.xml에서 읽어들이기 때문에 같이 파싱이 되겠죠. 이 파일내의
각 기능을 담당하는 메소드에서 Query.xml에 정의한 실제쿼리문에 대한 id를 참조하게 됩니다.

Struts2
struts.xml : Struts2의 각 액션에 대한 정의를 해주는 파일입니다. Struts1에서는 struts-config.xml
로 정의되있습니다. struts.xml에서는 라이브러리내의 struts-default를 상속받아 인터셉터나 기타
기능등을 사용할수가 있으며 이 struts-default는 재정의 가능합니다. 또한 라이브러리 내의
default.properties의 내용을 여기서 struts.properties라는 파일을 만들어서 재정의 가능합니다.
(물론 제대로 써본적은 없습니다..;;;)

대략적인 설명은 위와같습니다.

소스내에 주석을 달아놨는데..개인적인 용도로 썼던주석이라 보기에 좀 거북하겠지만 저같이

잘이해가 안되신 분들을위해..ㅋ  실행은 index.jsp로 하시면 되고 이클립스에서 war파일을

import시키면 되겠습니다.

 
간만에 글을 썼긴한데 설명도 별것도 없고 이상해졌네요. 주석에 모든 설명이 있긴합니다..

불확실한 정보지만.. 상당히 간단하게 만들었기 때문에 Struts2와 iBatis의 연동방식을

이해하는데에는 괜찮다고 생각됩니다.

다음에는 제 개인적 정리 차원에서 iBatis만 다뤄보도록 하겠습니다.

p.s : 깜빡하고 DB테이블을 넣질 않았네요.. DTO클래스에서 정의된 내용을 가지고 테이블 만드시면
되겠습니다. 혹시 필요하신분은 댓글 달아주세요~(물론 오라클이 설치되있다고 가정합니다.-0-
참고로 번호값을 받아올때 시퀀스를 생성하지 않았습니다..)

  • BlogIcon 감사합니다. 2009.11.30 01:29

    스트럭트2랑 ibatis랑 개념을 못잡고 있었는데 정말 자세하고 알기 쉽게 설명해 놓으셔서 큰 도움이 됐습니다.. war 파일도 올려놓으시다니.. 복받으세요.

    • BlogIcon 박디 2009.11.30 23:15

      보잘것 없는 소스지만 보고 도움되셨다니 기분이 좋습니다^^

  • 트랜잭션. 2010.01.28 14:58

    트랜잭션 처리는 없는거 같은뎅.. 따로 안하셔도 적용되나요..

    • BlogIcon 박디 2010.01.30 19:33

      만든지 오래되서 소스에서 적용했는지 까먹었습니다만..아마 따로 적용하지 않았을겁니다. 아이바티스는 기본으로 오토커밋이기 때문에 따로 처리해주는것이 좋긴합니다.

  • 잘봤습니다^^ 2010.07.22 20:34

    근데 와르파일 적용해서 테이블도 만들고 인덱스.jsp 실행 했는데
    페이지를 찾을수 없닫고 뜨는데 왜그럴까요?
    와르파일 임포트시키고 테이블만 만들고 또 따로 뭐 바꾸거나 할거 잇나요?^^

    • BlogIcon 박디 2010.07.25 23:24

      그런경우는 대부분 server.xml에서 <context>가 제대로 정의 되있지 않거나 톰캣이 사용하는 포트등이 다르게 설정되있을때 생깁니다. 아마 제가 사용했던 포트와 다른것 같은데 소스 한번 봐보시구요. 톰캣 설정도 한번 봐보시길 바랍니다.

  • 왕초보 2010.08.05 23:30

    좋은자료발견해서 응용해보려고 하는데 db쪽 에러가나서요.
    db를 지금도 갖고계시다면 공유좀부탁드려요

    • BlogIcon 박디 2010.08.07 15:20

      db내용은 아주 간단합니다. 이 소스 만든지가 오래되서 어떻게 했는지 가물합니다만.. 제가 쓴글 보니 시퀀스 생성도 안했다는건 글이 추가될때 숫자 자동 증가(Auto increment)를 안했다는 것이니 화면에 보이는대로 create table하시면 됩니다. 아마도 소스에서는 글이 db에 insert될때 숫자가 +1이 되도록 만든것 같네요. 어떤 종류의 db에러가 나는지 모르겠지만 보통 아이바티스 연결시 에러나는건 xml설정 이상이나 oracle sid정보등이 xml에 정의한 설정과 일치하지 않을때 자주 나오니 살펴봐보셔야 할 것 같습니다.

  • 김승래 2010.10.20 17:33

    잘봤슴니다. :-)
    ㅎ_ㅎ think you

  • 와우 2010.11.18 14:30

    정말 심각하게 감사합니다.
    ibatis 어렵지 않은거라고해서.. 대충 인터넷으로 공부하려고 했는데..
    정신이 없더라구요.
    실제 예제보면서 주석보니까 이해가 잘 됩니다. 감사합니다!

    • BlogIcon 박디 2010.12.01 21:55

      한번 해보고 나서 살펴보면.. 예제가 라이브러리와 같이 있긴하지만 처음에 봤을때는 좀 난감하죠. 정작 만들어놓고 안쓰니 저는 다 까먹었네요 ㅎㅎ 도움이 되셨다니 다행입니다.

  • ........ 2011.01.10 18:54

    한생명을 살리셨습니다...

  • ........ 2011.01.10 19:30

    아.. 그리고...
    create table erpex2 (no number,name varchar(16),sex varchar(4),dept varchar(32),job varchar(32),sawonnum number,comm number,sal number);
    테이블 스크립트며..
    데이터가 없을때 등록 누르시면 null point 에러가 나더라구요..
    물론 자바에서 잡으셔도 되지만...
    전 db쪽이라...
    getmaxno쪽 sql 맵퍼에 쿼리문을 살짝 수정하시면.. 에러 없이 가능합니다...
    select decode(max(no)+1,null,0,max(no)+1) from erpex2

    • BlogIcon 박디 2011.01.11 20:43

      이 소스 만든지 한참이 되서 잘 기억은 안나지만 아마 널처리 한게 하나도 없을겁니다 ㅎㅎ. 의견감사하구요. 간만에 한번 봐보게 되네요^^

  • 2011.01.21 15:39

    비밀댓글입니다

    • BlogIcon 박디 2011.01.25 01:22 신고

      공부는 했었지만 저도 지금 회사에서 EJB를 쓰고있어서 거의 다 까먹었습니다 ㅎㅎ.. 가물가물한 기억에 이 소스외에 따로 관심이 있어서 게시판을 만들어본적이 있었는데 s태그를 쓴다는것이 반드시 정석은 아니라고 생각합니다.. JSP표현식으로 가능하다면 그렇게 썼다고 해서 문제까지 발생할것 같진 않은데요. 오히려 유지보수 차원이나 추후에 마이그레이션이 발생할 경우 특정 프레임워크에 종속되어 작업이 힘들어 질수도 있겠구요. 가장 기억남는건 s:iterator 였는데 Arraylist대신 간편하게쓸수 있어서 좋긴했지만 복잡한 프로그램에서는 조작이 힘들었던 기억이 나네요. 깊이있게 공부했던것이 아니라 제 주관적인 생각은 이렇습니다.