ASP.NET2009.04.27 13:10
간단한 게시판 하나 만드는데 연재가 길어지고 있습니다. 셋팅과 부연설명등이 잇따라 나오면서 이렇게 되어버렸습니다. ㅡㅡ;
이번 포스트는 글 읽기 입니다. 처음 부터 열심히 따라 하셨다면 쉽게 구현 할수 있을것 입니다.
전체적인 패러다임은 글쓰기 화면과 바슷합니다.

우선 목차 페이지 부터 시작하겠습니다.
글읽기를 위해서 목차의 제목에 링크를 달아야 합니다.

그림과 같이 링크를 달려고 하는데, 어떤 부분을 고쳐야 하는지 한번 봅시다.

처음에 셋팅할때 보았던, Global.asax 의 라우팅을 보면 {controller}/{action}/{id} 라고 해석이 되어집니다.
즉, 예전에는 Detail.aspx?seq=4 라는 표현이 /Board/Detail/4 라고 표현이 됩니다.

그러면 리스트 페이지에서 title을 나타내는 부분에 링크를 걸어주면 됩니다.

기존코드에서 약간 변경이 되었습니다. 기존에 비해 a 태그와 Html.Encode 메서드가 추가 되었습니다. a 메서드의 링크값은 위에서 설명한것과 같이 표현 방식이고, Html.Encode() 메서드는 헬퍼 메서드 입니다. 데이터를 입력하고, 웹페이지에서 다시 보여줄때, encode를 해 주는것이 매우 중요합니다. 왜냐면 악의를 품고 javascript injection 공격에 대한 대비책이 될수 있으니깐요.. 해커들이 개인정보를 빼낼때 주로 인젝션을 사용하는데, 이때 encode 시키면 결과값을 쉽게 알아볼수 없기 때문에 텍스트 데이터에 대해 display 할때는 가급적 Html.Encode() 메서드를 사용하기를 권장합니다.

그럼 상세 내용 보는 페이지(view)를 Detail.aspx 라고 한다면 BoardController 에서 라우팅 메서드를 하나 만들어야 합니다.
기존 코드와 함께 추가된 Detail() 메서드를 추가해 봅시다. BoardController.vb

여기서 주의해야 할 부분은 받는 파라메타의 변수값은 무조건!! id 라야 합니다. 지금은 이유를 모르겠지만, 내부적인 매핑이 별도로 이루어지는 모양입니다.

이렇게 했으면, boardDetail = Me.sbFacade.getBoardDetail(id) 부분에 파란줄이 생길것입니다. 파사드에 메서드가 없기 때문이죠.. 그럼 파사드에 추가해 보도록 하겠습니다.

우선 SpringBoardFacade.vb 인터페이스에 getBoardDetail() 메서드를 추가 해 봅시다.


그리고, SpringBoardImpl.vb 클래스에 구현을 합니다.


마찬가지로, BoardListDAO.vb 인터페이스에도 추가해 줍니다.


그다음은????? SqlMapBoardListDAO.vb 클래스에 구현합니다.


실제 구현 부를 보면 정말 심플합니다.
Mapper.Instance().Update("updateReadCount", seq) 는 현재 게시물의 조회수 1 증가 시키는 명령입니다. update 문이겠죠? 그리고 다음줄에 getBoardDetail 은 게시물의 내용을 가져오는 부분입니다. 이게 딸랑 두줄만에 끝나죠 ^^*

그럼 이제 Board.xml 에서 쿼리를 추가해 줘야 합니다.


간단히 쿼리 두개가 statement id 값을 가지며 추가가 되었습니다.
그러면 다시 컨트롤러(BoardController)로 돌아와 보면 View가 빠져있는걸 알수 있습니다.
그럼 Detail.aspx 라는 뷰를 추가 해 봅시다. 코드 하이라이트가 asp.net 코드는 인식이 안되므로 캡춰 했습니다. 참고로 Write.aspx 와 비슷하니 참조해서 코딩 하시면 됩니다. (이런 무책임함... ㅡㅡ; 죄송합니다. )

여기까지 코딩 했으면 이제 실행해 봅시다. 두번째 글을 클릭하면 다음과 같이 글 보기 화면이 잘 나올것 입니다.

짠~ 근데 날짜 형식도 이상하고.. 많이 허접해 보입니다. 어쩔수 없습니다. 최소한의 디자인으로 이정도면 훌륭하다고 판단이 됩니다. 죄송합니다. ㅠㅠ

이렇게 글 보기 화면까지 훌륭하게 잘 만들어 봤습니다.
남은건 수정, 삭제 입니다. 요것 까지 해서 하나의 게시판 Life Cycle 를 만들어 본 후에 대망의 제 2탄!!!

지금 생각하는건, 똑같은 게시판이지만, AJAX와 jQuery 까지 붙이고.. 욕심이 생기는 부분은 아예 View를 silverlight 로 만들어 버릴까? 하는 생각도 있습니다. 의견을 주시면 적극 반영하여, 2탄 강좌에서는 태요님과 같이 깔끔한 연재가 되도록 할께요 ^^;

앗... 혹시나 하는 생각에 hoons.kr 에서 찾아보니 훈쓰님이 다음과 같은 답변을 달았네요...


참고 해야 겠습니다.

그럼 좋은 하루 되세요~
저작자 표시 비영리 동일 조건 변경 허락
신고
Posted by dotnetpower
ASP.NET2009.04.13 13:02
앞서 포스팅한 내용을 토대로 ASP.NET 으로 간단한 게시판을 제작해 보자.
우선 개발을 위한 환경 셋팅부터...

  • OS : Windows Server 2003; Windows Server 2008; Windows Vista; Windows XP
  • IDE : Visual Studio 2008, Visual Studio 2008 SP1 or Visual Web Developer 2008 SP1
  • Database : MS SQL 2000 or higher
  • Framework : .NET 3.5 SP1
  • ASP.NET MVC 1.0 - Download
  • SPRING.NET 1.2.0 - Download
  • iBATIS.NET DataMapper 1.6.1, DataAccess 1.9.1 - Download

참고로 필자는 Windows Vista Business K, Visual Studio 2008 SP1, MS SQL 2000, .NET Framework 3.5 SP1 이다.

프로젝트 생성 전에 위 프레임웍을 설치 하고, 우선 데이터 베이스 테이블 부터 하나 만들도록 한다.
ASP.NET 개발자들이 항상 들르는 곳중 하나인 Taeyo.pe.kr 의 계층형 게시판과 테이블을 동일하게 만들었다.
게시판 로직에 대한 이해는 태요님의 아티클을 참조 하기 바란다.

테이블명은 ThreadBoard 이며 생성 스크립트는 아래와 같다.


2009-04-16 추가
iBATIS 연동시 빠른 테스트를 위한 샘플데이터 하나를 넣어둔다.

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


기본적인 환경 셋팅과 디비 셋팅이 끝났으면, 다음 단계로 넘어간다.
다음단계는 다음 아티클 참고 하시길 ^^;

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

티스토리 툴바