ASP.NET2009.04.17 11:11
오픈소스 프레임웍의 단점인 셋팅을 하는데만 벌써 5번째 게시물이 되었다.
힘들게 하나하나 셋팅하고 자료 찾는 작업이 반복적으로 이루어진다. 하지만, 셋팅이 끝나고 페이지가 정상적으로 뜰때 그 성취감은 정말 뿌듯~ 하다. :)

이전 게시물에서 Models 폴더 아래에 Business Logic을 위한 구조를 잡았다. 차근차근 하나씩 해 보자.
우선 첫 게시물에서 만든 ThreadBoard 와 매핑시킬 Entity Class 흔히 VO(Value Object) 라 한다.


참고로, 폴더 구조대로 Namespace를 잡아 두었다.
TBoard.vb 의 코드는 다음과 같다.


간단한 VO 하나 코딩하는데, 시간이 꽤 걸렸다. Visual Studio 에서는 아직은 Entity Class 에 대한 지원이 약간 부족한듯 하다. 참고로 자바 개발툴인 Eclipse와 IntelliJ 에서는 위 코드와 같이 Properity 를 한꺼번에 쉽게 코드 생성이 가능하다. 이 부분을 흔히 getter and setter 설정이라고 한다. 혹시나 MS 관계자분이 이 글을 봤을때 제안을 할수 있도록 IntelliJ 에서 지원하는 getter and setter 팝업메뉴를 첨부 하겠다. 이렇게 한번에 되면 좋을것 같은데 VS2010 에서는 지원 하려나? ^^;


암튼 이게 중요한게 아니고, 빨리 세팅을 마무리 해 보자.

이 TBoard 클래스는 테이블과 매핑이 될 부분이다. 어플리케이션이 커지고 복잡해 지면, 이런 VO 가 많아진다. 거의 테이블과 1:1 정도 되는것 같다.

다음으로는 Board.xml 파일을 만들어 보자 코드는 다음과 같다.


여기서 중요한건, resultMap 인데, property는 앞서 코딩한 SpringBoard.Models.Vo.TBoard 의 private 변수명과 매칭이 되어야 하고, column은 테이블 필드명과 같아야 한다.

다음으로 BoardListDAO 인터페이스를 다음과 같이 코딩한다.


셋팅을 위한 테스트 메서드를 선언하는 부분이다. 이제 구현부 SqlMapBoardListDAO 클래스는 다음과 같이 코딩한다.


이게 iBATIS의 파워이다. Mapper.Instance().QueryForList() 메서드를 이용하여, Board.xml의 getList 라는 statement 를 호출하고, 결과값을 그대로 반환한다.

원래 이 부분에서 iBATIS가 없을때는 커넥션, 예외처리, 디비 닫는 부분 까지 모두 여기서 처리를 했었다. 하지만, iBATIS의 도움을 받아서 이렇게 한줄로 끝난다. 또한, 운영중 요구사항 변경이 쿼리 수정 정도의 요구 일때는 Board.xml 파일 하나만 수정하면 곧바로 적용이 되어버린다. 훌륭하다~

자~ 그러면, 비즈니스 로직 부분을 처리 했는데, 어떻게 호출을 할까?
앞서 설명한 Front Controller 패턴으로 처리 하기 위해 Facade 클래스를 만들어 두었다. 거기에 등록 해야 한다.

이전에 만들어둔 SpringBoardFacade 인터페이스의 Test 메서드를 이렇게 바꾼다.


리턴타입이 기존에 String 타입이였던것을 IList 로 바꾸었다. 그리고, SpringBoardImpl 클래스에 setter injection 을 위한 프라퍼티 설정과 Test() 메서드 변경을 위해 다음과 같이 코드를 수정하자.


좀 특이한 부분이 생겼다. boardListDAO property 인데, 이건, 이전에 만들어둔 objects.xml 에서 injection 을 위한 통로가 된다. 그러면 당연히 objects.xml 도 다음과 같이 수정하자.


이제 마지막으로 HomeController 클래스를 수정해야 한다.
참고로, 클래스에 Dependency Injection 을 위해서는 생성자에 inject, property 에 inject, 인터페이스에 inject 이렇게 세가지 방법이 있다.

HomeController 클래스에는 생성자 인젝션으로 처리가 되어있다. constructor-arg 이 부분이 생성자 인젝션, 그리고, property name="boardListDAO" ... 이 부분이 setter injection(property injection) 이다.
HomeController 클래스는 다음과 같이 변경되었다.


이제 View 에 표현해 보자.
Index.aspx 페이지는 다음처럼 두줄이 추가 되었다.(코드 하이라이트에서 asp.net 코드는 처리 못하는군 ㅡㅡ;)



실행을 해 보면 다음과 같은 화면이 정상적으로 잘 뜬다.

이렇게 해서 ASP.NET MVC + SPRING.NET + iBATIS.NET 의 구성 셋팅이 모두 끝났다.

ASP.NET MVC 의 흐름을 그대로 따르면서, SPRING.NET의 DI를 이용해 결합도를 낮추었고, iBATIS.NET의 매핑으로 데이터베이스에서 쉽게 데이터를 가져왔다.

친절하게도 지금까지의 소스는 아래 링크!!! 하지만 동작이 안될것이다. SqlMap.config 의 connectionString을 수정해야 한다.

ex) Data Source=(local);Initial Catalog=디비명;User ID=아이디;Password=패스워드

저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower

티스토리 툴바