관리 메뉴

새로운 시작, GuyV's lIfe sTyle.

닷넷 게시판 만들기 Part 52 (마지막회) 본문

ⓟrogramming/asp.net 게시판

닷넷 게시판 만들기 Part 52 (마지막회)

가이브 2011.06.30 16:04

2011/06/22 - [ⓟrogramming/asp.net 게시판] - 닷넷 게시판 만들기 Part 49
2011/06/24 - [ⓟrogramming/asp.net 게시판] - 닷넷 게시판 만들기 Part 50
2011/06/27 - [ⓟrogramming/asp.net 게시판] - 닷넷 게시판 만들기 Part 51


1. 닷넷 개발환경 준비, 테스트
2. 닷넷 알아보기 [7/7]
3. asp.net 컨트롤 [10/10]
4. 데이터베이스(DB) [7/7]
5. 닷넷 게시판을 만들어보기 전에.. [4/4]
6. 게시판 만들기 <1> [18/18]
7. 게시판 만들기 <2> [4/4]



이전 시간에 해봤던 포토게시판에서 닷넷 기능 중 하나인 GDI+ (System.Drawing.XXX)를 이용해 이미지를 편집하는 기능을 해봤는데, 이 외에도 네트워크(System.Net.xxx)를 이용해 날씨/증권같은 생활정보나 인터넷 결제시스템을 연동할 수도 있다. 나아가서는 C# 문법을 알고 있고, MSDN 읽는법을 알기 때문에 웹(asp.net)을 벗어나 Silverlight 플랫폼을 이용해 RIA 라 불리는 어플도 만들 수 있으며, XNA 게임 개발, 그리고 국내에 곧 출시될 Windows Phone 7 용 어플(앱)도 만들 수 있다. 이 Programming 이라는 것은 결과물을 만들어내기 위한 기반 기술인 C#, C++, Java 등의 프로그래밍 언어(플랫폼)를 가지고 아무 것도 없는 백지에 원하는 것을 만들어 내는게 목적인데, 결과는 무조건 나오게 되어 있으나 결과를 내는 여러가지 방법 중 단 하나라도 자기 것으로 만들기가 힘들다. 포기하면 끝, 그렇지 않으면 진행형이니 선택은 잘 하시리라 생각한다.

이 글의 시리즈도 이제 막바지로 접어들었는데, 6장을 시작할 때 언급했지만 게시판을 만들 수 있는 기술은 1~5장을 통해 모두 습득을 했으나 조각을 어떻게 조립하는지 모르기 때문에 하기가 힘들 뿐이다. 구현하지 않았지만 회원 관리 기능도 이제 구현이 가능하실 것이며, 같이 해보지 않아도 이제 알아서 하실 수 있는 방명록도 별 어렵지 않게 구현 가능하실 것이리라 생각한다. 이처럼, 프로그래밍은 결과가 중요한 것이 아니다. 만들지 않아도 좋다. 차라리 '어떻게 만들까?'를 고민하고 빈 노트에 손으로 그려보는 것이 더 프로그래밍 기술 습득에 도움이 된다. 물론 닷넷에서 제공해주는 클래스의 범위를 많이 알고 있으면 있을 수록 구현해낼 수 있는 범위(시야)는 넓어질 것이다.



마지막으로 하나 남은 게시판 종류인 방명록을 구현해보자.

지금까지 해온 방법대로, (1)예상되는 결과물(디자인)을 먼저 태그로 날코딩하고, (2)적절하게 서버컨트롤로 교체를 해준 후 (3)기존에 구현해놓은 이벤트(Page_Load)를 알맞게 수정해주면 되겠다.

일반적으로 방명록은 따로 글 내용 보기 페이지가 없다. 물론 있어도 상관없으나, 10년 전부터 홈페이지 '방명록'은 그랬다. ^^; 또한 작성은 대부분 이름과 내용만 입력한다.(제목이 없다) 그리고 비회원도 남길 수 있겠다. 만약 비회원이 남길 수 있으면 자신의 방명록을 수정하거나 삭제하기 위해 비밀번호 입력란이 필요할 수 있겠으나, 우리는 기획에서 회원만 사용할 수 있는 게시판으로 설계하였으므로 아예 제외하고 비회원은 수정과 삭제가 불가능하게 하자.

board_list.aspx 에서 포토게시판에서 사용하는 PlaceHolder 컨트롤 밑에 phBoard3 이름의 id 를 지정해서 하나 더 만들자. 여기에 디자인을 하기로 한다.





board_list.aspx 에서는 전체적으로 하나의 <table>..</table> 안에 리스트를 돌려가며 쓰는 것이므로 <tr>...</tr>로 감싸져야한다. <td> 태그의 colspan 속성은 빼기로 하자. (포토게시판에서부터 필자의 실수이다 ^^)

지금 리스트의 형식만 정리해보면 다음처럼 되겠다.

<table>

<tr>
    .. 전체글 / 페이지 번호 ..
</tr>

<ASP:PlaceHolder id="phBoard1" runat="server" /> 일반게시판
<ASP:PlaceHolder id="phBoard2" runat="server" /> 포토게시판
<ASP:PlaceHolder id="phBoard3" runat="server" /> 방명록

</table>

<table width="600">
     .. 페이지 이동 기능 ..
</table>

<form id="frm" runat="server">
[검색기능]
</form>

[새글쓰기] 링크



함께 해봤듯이, 뭐든지 하나하나 추가하다보면 완성이 된다. 여러분들이 이곳 저곳에서 강좌를 읽고 제공하는 소스를 열어보면, '이 소스를 어떻게 만들었을까?'라는 생각이 들겠지만 결국 빈 칸에 하나씩 필요한 코드를 넣다보니 길어진 것이다. 지금까지 해본 전체 소스를 하나하나씩 열어서 살펴보자. 이게 다 내가 직접 작성한 코드였다니... 신기하지 않은가?


디자인을 하기 전에, 방명록만 표시하기 위해 'c'값이 방명록 카테고리인 'guestbook'일 때에는 phBoard3 만 보이도록 하자. (포토게시판처럼)




필자의 방명록 (디자인) 날코딩의 결과물은 다음 그림처럼 나왔다. 여러분들도 게시판의 범위 내에서 나름대로 뭐든지 생각나는대로 디자인 해보기로 하자.


 


디자인은 style 속성으로 도배를 했다. 디자인 요소인 CSS는 여러분들이 따로 학습하시기 바란다. 우리가 중요시 여겨야되는 것은 구현방법일 뿐이다. (디자인 파트도 매우 중요하다 ^^)

입력값은 이름과 내용, 이렇게 두 가지뿐이다. 입력값을 체크하여 혹시 비어있다면 오류메시지를 띄우기로 한다.
이제 입력 값들을 서버컨트롤로 바꿔보자. <form runat="server">..</form>으로 감싸고 이름을 "txtName", 내용을 "txtContent"로 각각 ID로 지정한다. 그리고 버튼은 "btnWrite"로 하고, 클릭이벤트는 btnWrite_Click 으로 하자.

바꾼 후에 실행해보면 오류가 발생할 것이다.



board_list.aspx 파일에는 하단에 검색기능으로 <form runat="server">..</form>이 존재한다. 그래서 오류가 발생하게 되는데, 이 문제는 간단하게 <form runat="server">..</form>를 board_list.aspx 에 전체적으로 감싸주면 해결을 할 수 있다. 일반적으로 닷넷에는 서버컨트롤이 전 페이지에 모두 들어가므로 사실 전체적으로 <form runat="server">..</form>으로 감싸지게 된다. 또 다른 해결방법으로는 지금 방명록 형식상 검색 기능이 별 필요가 없으므로 검색의 <form>을 아예 없애버려도 되겠다.

우리는 두번째 방법으로 해결해보기로 한다.


이렇게 가려주면 ID가 frm 인 검색용도의 <form>은 모두 없어지게 된다. 그리고 다른 게시판에서는 phBoard3 컨트롤 자체가 없어지기 때문에 방명록 글쓰기의 서버 폼태그는 신경쓰지 않아도 되겠다.

다음 코드가 방명록 쓰기 기능을 서버컨트롤로 변경한 결과이다.


이름, 내용의 ID 속성 값과 에러메시지를 출력할 Label 컨트롤의 ID인 lblError
를 기억해주고, 그림에서는 빠졌지만 btnWrite 버튼의 클릭 이벤트를 btnWrite_Click 으로 지정하고 메서드도 작성해두자.

그리고 하단에 리스트 부분도 Repeater(id=rptList3) 로 감싸주고 후에 데이터를 바인딩 했을 시에 데이터가 잘 출력되게 수정하도록 하자. 자료 입력시에 이름인 txtName 값은 게시판 테이블의 user_name 필드에 넣을 예정이다.



날짜 출력은 (엿장수 마음대로 ^^) 일반게시판처럼 간단하게 ToCustimTime(object) 메서드를 이용하겠다.

오류 없이 실행이 잘 된다면 서버컨트롤 배치는 잘 되었다는 것이다. 그리고 rptList3 에서 보듯이 Repeater에 DataSource 를 지정하지 않은 상태에서 데이터를 뿌려도 오류가 발생하지 않음을 참고하자.

이제 btnWrite_Click() 메서드의 처리 코드를 작성하도록 하자. 다 해봤으므로 설명은 제외하겠다.



그리고 최종적으로 rptList3 에 DataSource 를 주고 DataBind() 메서드를 실행해서 데이터가 뿌려지도록 하자.



전체적으로 결과물이 잘 만들어졌는가? lblError 컨트롤의 text 속성값은 별 필요 없으니 아예 삭제하자.



그리고 방명록일 때 하단에 "새글쓰기"를 없애는 방법은 여러분들이 각자 연구해보도록 하자.
방명록이 너무 길어도 보기가 그러니 Board.PAGE_SIZE 를 5로 줄이는 것도 좋겠다.
홈페이지 주인인 관리자만 방문객의 글에 답변을 달아주는 방법도 연구해보자. (댓글 테이블을 이용하면 될 것이다)
또한 게시판에서 글을 작성하면 엔터를 쳐서 다음줄로 넘겼는데도 불구하고 글보기에서는 다음줄로 넘어가지 않을 것이다. 매우 당연한 말인데, 충분히 어떻게 수정하는지 아시리라 생각한다.
그리고 DB에 입력되는 모든 값들은 작은따옴표(') 값을 입력할 때에 DB 오류가 발생한다. 이러한 이유에 대해 고민해보자.

마지막으로 언급하지 않은(일부러 넘어간 것을 포함해서) 강좌에 쓰인 홈페이지 구석구석에 숨어있는 버그와 기능추가/개선은 모두 여러분들의 몫이다. ^^

모든 것들을 다 함께 수정해볼 수 있으나 과감하게 여러분들의 스킬 향상을 위해 생략하도록 한다. 정말이다. 여러분들을 위해서 생략하는 것이다. 


어줍잖은 글을 읽으며 공부하느라 고생하셨다는 말씀을 드리며 '닷넷 게시판 만들기'강의를 마친다.







----------------------------------
제가 게을러 별 내용없는 글을 마무리 하는데까지 반 년이나 넘게 걸렸네요.
글 내용에도 여러번 강조했지만 어떤 강의를 보시든, 책을 보시든 내용을 전달 하는데 있어서 한계가 있는 것 같습니다.
(글솜씨가 부족한 점도 있지만)

다른 주제로 '쇼핑몰 만들기', 'xx 프로그램 만들기' 등을 글로 써 본들 이 글을 모두 읽고 자기것으로 만드신 분들에게는 의미가 없을거라 생각하구요. 이제 여러분들이 뭐든지 직접 만들어보시면서 각종 커뮤니티 사이트, 프로그래밍 관련 카페에서 질문을 하심며 더 많은 것을 알아나가거나 해결해야 할 것입니다.~

언제나 즐프하시구요. 프로그램 만드는 방법보다 오류 잡는 방법을 더 익혀주시면 좋답니다.
마지막으로.. Error 와 꼭 사귀시길 바랍니다.

5 Comments
댓글쓰기 폼