ASP.NET2009.04.22 10:10
이번 강좌의 목표는 list 페이지에 출력 해 보는것입니다. 물론 페이징이나 링크 등이 안먹지만 리스트 화면으로 출력 해 보겠습니다. 지난 강좌에 이어 설정파일 수정 부터 하겠습니다.

우선 objects.xml 을 다음과 같이 변경합니다.


마찬가지로 BoardController도 Facade 패턴을 적용하기 위해 생성자 주입을 시킵니다.
다시한번 왜 Facade를 사용하는지 간단히 설명드리자면 Facade 패턴은 복잡한 서브 시스템에 통일된 인터페이스를 두어 복잡한 API를 단순화 시켜 줍니다. 각각의 모듈을 서브 시스템 단위로 쪼개어 구성하는 것은 시스템의 복잡도를 낮춰 주지만 반대로는 각 서브시스템간의 결합도가 증가 하게 됩니다. 이러한 서브시스템 간의 의존도를 낮추고 서브 시스템의 사용자 입장에서 사용하기 편한 인터페이스를 제공하고자 하는것이 Facade 객체 라 합니다. 
Facade객체는 실생활에 따져봤을때 호텔의 인포메이션 센터와 같다고 할수 있습니다. 각 요청을 한곳으로 집중시키는 방식을 말 합니다. MVC 모델에서 요청은 항상 Controller가 받는데, 이 요청을 받을때 Facade 가 중앙 집중식으로 관리 해 주기 때문에 MVC 모델의 패턴에 적합하다고 판단이 되어 채택하게 되었습니다. ^^*

그럼 이제 BoardController 클래스를 다음과 같이 코딩합니다.


여기서도 마찬가지로 Facade 를 통해 게시물 리스트를 가져옵니다. 아주 간격하지 않나요? ^^;

그럼 이 쿼리는 Board.xml 에서 처리 되기 때문에 다음과 같이 변경합니다.


잘 보시면, resultMap과 select 가 1:1 로 매핑됩니다. 사실 이 부분이 좀 애매한 부분인데, 자바 버전에서는  하나만 선언 해 놔도 문제가 없었지만, iBATIS.NET에서는 select하는 필드 수 보다 resultMap에 선언된 property 가 많으니깐 IndexOutOfBoundsException 이 나더라구요.. 왜 그런지는 못찾았습니다. 하다보면 다른곳에서 또 나타나면 그때 다시 개선 방안을 모색해야 할듯 합니다. ㅡㅡ;
아.. 참고로, iBATIS의 가장 단점은 디버깅이 어렵습니다. 엉뚱한 오류가 나는경우가 허다합니다. 그러니 조심조심 해야하죠.
디비가 Oracle 일때 쿼리문의 마지막에 세미콜론(;)이 찍혀있으면 정말 황당한 오류가 나죠.. 참고 하시기 바랍니다. =ㅁ=;

이제 View를 만들어야 합니다. BoardController 에서 보내는 것이니, /Views/Board/List.aspx 를 만듭니다.
제가 쓰는 코드 하이라이트 헬퍼가 asp.net을 지원하지 않아 aspx 코드는 매번 이렇게 캡춰를 받아서 올리네요 ㅡㅡ;

여기서 중요한건, SpringBoard.Models.Vo를 Import 해야지만 m.Title 과 같이 인텔리센스가 동작하고, TBoard 를 사용할수 있습니다. 코드 그대로 간결합니다. ㅡㅡ;

여기까지 하고, 실행 해 봅시다. 실행하여 Board 메뉴를 클릭하면 다음과 같이 리스트가 잘 출력이 됩니다.

처음에 하나의 row만 넣었으니 몇개 더 넣어보고 새로고침 해 봅시다.

INSERT INTO ThreadBoard (thread, depth, writer, pwd, title, mode, content)
Values (2000, 0, 'admin', 'pwd', '두번 째 글입니다', 1, '본문 내용입니다')


INSERT INTO ThreadBoard (thread, depth, writer, pwd, title, mode, content)
Values (3000, 0, 'admin', 'pwd', '세번 째 글입니다', 1, '본문 내용입니다')

이렇게 데이터를 넣고 새로고침 해 봅시다. 다음과 같이 잘 나오나요?

잘 따라 오셨는데 잘 안되시는 분들을 위해 친절하게 지금까지의 소스를 첨부 합니다. 단, sqlMap.config 파일에서 connectinString 을 자신의 디비환경에 맞게 입력 해 주세요.
connectionString="Data Source=(local);Initial Catalog=디비명;User ID=아이디;Password=패스워드"


그럼 다음에는 글쓰기 화면 Write 부분을 해 봅시다.











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

티스토리 툴바