lecture Home > ASP.NET > .NET Board

.NET 게시판 강좌 - 김연진님 제공

   강좌 최초 작성일 : 2001년 08월 10일
   강좌 최종 수정일 : 2001년 08월 23일

   작성자 : Cassatt(김 연진)
   편집자 : Taeyo(김 태영)

   강좌 제목 : ASP.NET의 소개 : Web Forms, user control, Data Binding

( 주. * 전에 custom control이라 썼었는데, 박배경님의 지적으로 user control로 바꿉니다.
   user control이 정확한 이름이며, custom control은 또 다른 개념으로, 설명하지 못하고
   넘어갑니다. 박배경 님의 지적에 감사드리며, 저도 아직은, 배우는 입장이라 강좌에 오류가
   있을 수 있음을 알려드립니다. )

얼마전 어느 책을 보니, ASP.net과 ASP가 얼마나 다르냐 하는 질문에 "매우(Very)" 라고 한단어로 답하더군요. ^^ 암튼 약간 해보니, 정말 Very 달랐습니다. 예전엔 Request, Response, Server, Session 같은 중요한 몇가지 개체가 ASP에서 제공하는 거의 전부였죠. 다른 부분은 Server.CreateObject로 생성되는 COM 개체를 통해서 했었습니다. COM은, 조금만 신경쓰면, 조금만 실력있으면 무엇이건 만들어서, ASP에 붙이면 된다는, 확장성 측면에서 대단한 장점이 있었습니다.

그러나, 그러한 '확장성'이란 장점이 있지만, 기본적으로 제공하는게 몇개 안되어서( 일례로 파일 Upload나 Binary 파일 읽고 쓰는 것 조차 어려운 일이었습니다 ) 그런 장점이 무색한 감이 있었습니다. PHP와 비교하자면, PHP는 비록 기능을 확장하기 어렵다 해도, 그래픽, Binary 파일처리, 소켓 통신등 기본적으로 제공하는 함수가 많기 때문에 어지간한 작업은 다 처리가 됩니다.

그런데 이제 asp.net으로 가면, 개체의 홍수(?)를 만나게 됩니다. dot net 플랫폼에서 제공하는 개체는 거의 모두 asp.net에서 쓸 수 있습니다. 그래픽 처리, 소켓 통신, 암호화 등등, 전에 COM으로 만들어야 했던 대부분의 작업을 asp.net만으로 할 수 있죠. dot net이 "플랫폼"이란 말의 뜻이 이런게 아닐까 합니다. ( 거의 OS라 봐도 되고요, OS위에 한 층을 덧씌운 것으로 생각하시면 될것 같습니다 )

이건 물론 좋은 일입니다만, asp 하다 asp.net으로 넘어가는 사람들( 저를 포함해서 )은 감잡기 참 어렵습니다. 개체가 너무 많아서 뭐가 중요한지도 잘 모르겠고, 도움말도 거의 Giga 급이라 분량에 압도되는 상황입니다. ^^;

ASP.net에서만 쓰이는 개체들도 많이 늘어났고, 사용법도 바뀌었습니다. 예전에 지원했던 모든 개체들은 여전히 지원됩니다만, 그에 더해 전혀 새로운 개체들이 나옵니다. 예를 들어 여전히 Server.CreateObject("adodb.connection")를 쓸 수 있지만, 그보다 효율적인 SqlConnection 개체도 쓸 수 있는데요, 그 둘은 사용법이 전혀 다릅니다. 여전히 Request, Response 개체가 쓰이지만, 그에 더해서 WebForm 개체들이 사용되기 때문에 그러한 개체 신경 안쓰고도 많은 부분 코딩이 가능합니다.

암튼, 서론이 길었는데요, 앞으로 두 강 정도는 게시판 자체보다는, ASP.net을 소개하는 글로 채우려 합니다. 이 사이트에 제가 첫 asp.net 강좌를 하게 되는 것이라서, dot net을 잠깐이라도 소개해야 할 것 같아서입니다.


ASP.net에선 확장자를 .aspx로 하게 됩니다. asp.net에서 쓰이게될 파일의 확장자와 파일 몇가지 소개해 보겠습니다.
  • .aspx : asp.net 페이지입니다. .asp의 dot net 버젼이라 보시면 됩니다.
  • .ascx : user control, 혹은 pagelet이라 불리는 페이지에 쓰이는 확장자입니다. 이것 이용하면, 자기만의 서버 컨트롤을 만들어서, 태그 형태로 소스에 집어넣을수 있습니다. 안에 들어가는 내용은 aspx과 거의 비슷합니다.
  • .vb : vb 언어 소스 파일입니다. vbc.exe 로 컴파일하게 됩니다.
  • .cs : c# 소스 파일입니다. csc.exe로 컴파일하게 됩니다.
  • web.config : 설정 파일입니다. 웹사이트 관련 여러 세부 설정사항을 xml 형태로 지정해주게 됩니다.
  • global.asax : global.asa의 asp.net 버젼입니다.
VisualStudio.net을 쓴다면, xx.aspx 에 태그들을 넣고, xx.aspx.cs (혹은 xx.aspx.vb ) 에 소스 코드를 넣게 됩니다. 코드 부분과 태그 부분을 완전히 분리하는 것이죠.

ASP.net에 대한 소개로, 간략한 예제를 보도록 하겠습니다. 다음은 기존의 asp로 짠 소스입니다.

<%
  dim today
  today=now
%>

오늘은 <%=today%>입니다.

이것은 오늘날짜를 출력해주는 예제인데요, 이것을 aspx 로 바꾸면 다음 처럼 됩니다.

<%
  dim today as System.DateTime
  today=now
%>

오늘은 <%=today%>입니다.

첫번째 차이점으로, asp.net에선, 위의 dim 문에서 처럼, 변수의 형(type)을 지정해 주게 됩니다. 형을 지정하지 않아도 이경우는 에러는 나지 않지만, 그러면 형이 Object 형( 예전의 Variant와 비슷한 형 )이 됩니다.

asp.net은 (언어를 지정해 주지 않으면 ) vbscript가 아닌, vb 언어가 쓰입니다. vb와 vbscript의 큰 차이점은, vb는 컴파일된다는 것입니다. 형이 지정되지 않는다는 것은 script언어에선 큰 문제가 되지 않지만, 컴파일되는 언어에선 문제가 됩니다. 컴파일러가 형이 어떻게 변할지 추측할 수 없기 때문에, 어떤 형type도 넣을 수 있는 Object 형을 쓰게 됩니다. 그럼 비 효율적인 코드를 만들어낼 수 밖에 없습니다.

요점은, dot net은 컴파일되며, 변수형을 지정해 줄수 있다, 그리고 형을 지정하는 것이 낫다는 겁니다. ( 컴파일은 페이지가 변경된 후 처음 로드 될때만 하기 때문에, 처음에는 약간 느릴 수 있지만 다음 부터는 빨라집니다 )
그덕에 속도가 매우 빠릅니다. 예를들어,

asp 소스
<%
dim i,j
dim sum
Response.write now&"<br>"
for i=0 to 10
 sum=0
 for j=1 to 1000000
  sum=sum+j
 next
next
Response.write now&"<br>"
%>
aspx 소스
<%
dim i as long
dim j as long
dim sum as long
Response.write (cstr(now)+"<br>")
for i=0 to 10
 sum=0
 for j=1 to 1000000
  sum=sum+j
 next
next
Response.write (cstr(now)+"<br>")
%>

이처럼, 루프문을 사용해보면, 비슷한 소스임에도, 제 컴퓨터에서 asp소스는 약 13초, aspx 소스는 0.2 ~ 0.3 초 정도 걸립니다. 엄청난 차이죠. 이것이 컴파일 하고/안하고, 형을 지정해 주고/지정하지 않고의 차이입니다.

다시 원래 예제로 돌아와서, 형을 지정하는 것 빼면 큰 차이가 없어 보입니다. 일반 asp 코드는, 형 변환이나 형 지정해 약간 신경써주고 확장자를 aspx로 바꿔주기만 해도, 대부분 잘 돌아갑니다.  그렇지만 아마도, 이제 dot net으로 바뀌었으니 dot net 식으로 짜야 할 것 같습니다.

원래의 날짜 출력 예제에 asp.net 옷을 약간 입히면 다음처럼 됩니다.

<script language='vb' runat="server">

  dim today as System.DateTime

  sub Page_Load( obj as Object, args as EventArgs ) 
    today=now
    DataBind()
  end sub

</script>

오늘은 <%# today %>입니다.

두가지 특징이 있겠습니다.

  • Page_Load() 에서 보듯, 이벤트 방식으로 돌아갑니다. ( Page_Load는 페이지가 로드될때 실행되는 이벤트입니다 )
  • <%# today %> 여기서 앞에 = 이 아닌, #이 쓰인 것에 주의.< /li >
위처럼 작성하면 디자인과 관련된 부분과, 코드 부분이 나뉘게 됩니다. 예전처럼 html 코드 중간중간에 <% %> 를 넣고 asp 코드를 삽입하면, 코드가 길어지면 보기가 어렵습니다. 예전엔 첫번째줄 부터 차례대로 아래로 실행되는 형태였는데, 이제는 각 부분 부분으로 나뉘어 실행되게 되었습니다. asp.net에선 가능한 소스 부분과 태그부분을 나눠서 작성하게 될겁니다.

그리고 <%# %>으로 둘러쌓인 부분은 위에서 DataBind() 함수가 호출될때 값이 들어갑니다. html 중간중간에 들어갈 부분들은 스크립트에서 만들어지고, DataBind() 호출시 소스에 들어갑니다. 위 예제 만으로는 큰 장점이 없지만, 이 DataBind 라는 측면 때문에, 코드부와 태그부를 좀더 깔끔하게(?) 나눌수 있게됩니다.

dot net 과, 소위 '객체지향' 프로그래밍의 요점은, 범위를 나누고, 각 부분별로 묶어놓는 것이 아닐까 합니다. 이를테면 컴포넌트화입니다.

어떻게 하느냐는 전적으로 만드는 사람 자유지만, 앞으로 asp.net 프로그래밍은 아마도 다음처럼 크게 두부분으로 나뉘게 될 것입니다.

  • DB에 저장된 내용을 알수있는 모습으로(?) 가공하는 책임은 dll(컴포넌트) 에서 합니다.
  • aspx 에선 위에서 가공된 내용을 html(혹은 xml, wml등,... 무엇이건) 표현하는 역할을 합니다.
이렇게 크게 두 부분으로 나눌 수 있고, 또 그 안에서도 여러 부분으로 나뉘어집니다.
aspx 페이지에서 이 모든 것을 한꺼번에 할 수도 있습니다. ( 현재의 일반적인 asp 방식처럼 ) 두번째 예제에서 보듯, 형을 지정해주는 것 등 지금의 asp 코드를 약간만 바꿔주면 aspx로 실행됩니다. 그렇지만, 이렇게 부분 부분 나누는 것에는 여러 장점이 있습니다.
  • 디버깅이 쉽다 : 각 컴포넌트 별로 디버깅을 해서, 디버깅 끝난 각 부분을 모아서 조립하면 됩니다.
  • 유지보수가 쉽다 : 로직이 바뀌는 경우, 해당 컴포넌트만 바꾸면 됩니다.
  • 업무 분담이 쉽다 : 각 부분 별로 작업하면 되기 때문입니다.
  • 재사용 : 만들어진 컴포넌트 들은 여러 곳에서 재사용 됩니다.
  • 가공된 데이터는 여러 방식으로 표현될 수 있다 - 같은 컴포넌트에서 나온 자료를 html, xml, web, 혹은 vb로된 클라이언트 프로그램으로 표현할 수 있습니다.
aspx 페이지 자체 내에서도 여러 방식으로 '나누고, 묶게' 됩니다.
  • 코드 부분과, html 태그 부분이 나뉠 것이고, html 태그 부분엔 동적인 내용이라 할 지라도 거의 태그 형태로 들어가게 될 것입니다. 예를 들어 게시판 목록이라 할지라도, 전처럼 do while~loop 나 for 문을 html 태그 중간중간에 넣지 않고도, 태그 형태로된 서버 컨트롤에 bind 해서 구현할 수 있게 됩니다.
    VS.net으로 작성한다면, 아예 서버스크립트 부분을 xxx.aspx.cs 식으로 이름 붙여서, 다른 파일로 작성하게 됩니다.
  • 표현 방식이 다른(?) 페이지 내의 요소들도 "custom control"이라 불리는 것으로, 각기 다른 파일에 로직을 정의해서 끼워넣을 수 있습니다 - 예를 들어, 한 페이지가 메뉴, 공지사항, poll 로 되어 있다면, 각기 다른 파일에 그 로직과 표현방식을 정의해 두고, 그것들을 조립해서 하나의 페이지로 만들면 됩니다.
이제 asp.net에 새롭게 등장하는 측면들을 아주, 간단하게 살펴보겠습니다.

1.1 Web Forms

텍스트 박스에 글을 입력하고, 버튼을 클릭하면 화면에 그 글이 나오도록 하는것은, asp 상에서는 다음처럼 구현될 수 있습니다.

ex.asp:
<%
dim str
str=request.queryString("str")
%>
쓴 글 : <%=str%>
<form method=get action="ex.asp">
  <input type=text name="str">
  <input type=submit value="입력">
</form>

이것은 자기자신에게 form을 get 방식으로 submit 해서 넘어온 값을 출력하게 됩니다. 로컬 사용자가 내용을 입력한 후, submit 버튼을 누르면, action에 지정된 ex.asp, 즉 자기자신에게 폼의 내용을 전송하게 됩니다. 그럼 서버에서 ex.asp가 처리되면서, 넘어온 값 ( request.queryString("str") ) 을 이용해서 html을 만들어서 다시 사용자에게 전송합니다. 이것은 코드 자체는 길지 않으나, 처음 보는 사람은 이해하기 쉽지 않습니다.

아마도 다음이 더 직관적이지 않을까 합니다.

<script language='c#' runat="server">
  void SubmitBtn_OnClick(Object o, EventArgs e)
  {
     label1.Text=str.Text;
  }
</script>

<form id="fm" runat="server">
쓴 글 :<asp:Label id="label1" runat="server" /><p>
 <asp:TextBox id="str" runat="server" />
 <asp:Button Text="입력" runat="server" OnClick="SubmitBtn_OnClick" />
</form>

마치 버튼을 클릭한 이벤트가 발생했을때 ( On - Click ) 글을 바꾸는 것 처럼 코딩이되어 있습니다. 이것은 코드를 읽기 쉽게 해주고, 서버와 클라이언트 사이에 값을 넘기고 받는 과정을 잘 몰라도 쉽게 프로그램을 짤 수 있도록 해줍니다.

또한, server에서 실행되는 폼 ( <form ... runat="server"> )을 사용하면, 폼 내의 여러 컨트롤들은 그 상태(state)가 유지됩니다. 즉, 위 예제를 실행한 후, 내용을 입력하고 버튼을 누르면, 코드 상에서 특별한 처리를 안해도 text박스엔 입력한 내용이 그대로 있습니다. textbox 뿐 아니라, select 박스, radio 버튼도 마찬가지입니다.

이 webform은 ( 개인적인 생각에 ) 쉽게만 볼 일이 아닌것 같습니다. 겉 모습은 vb나, javascript 처럼 변했지만, 내부적으로는 그러한 겉모양을 유지하기 위해 복잡하게 흘러갑니다. 그 내막(?)을 잘 알아야 효율적인 프로그램을 짤 수 있을 것 같습니다.
예를 들어, 상태가 유지되는 것은 좋아 보이지만, 그것을 구현하기 위해서 hidden 필드에 상태값을 넣어서 클라이언트와 서버간에 주고 받습니다. 이것은 많은 내용을 넘기는 경우 비효율적입니다. ( 값이 넘어간 후, 폼 필드의 상태를 유지하기 위해 원래 쓴값 + 알파 가 다시 넘어옵니다 ) 효율적으로 짜기 위해서는 지금 아는 것에 더해서, 그 내막까지 추측해야 할 것 같습니다.

또한, 이것 쓰다보면 span, div 같은 태그와 style 속성을 쓰게 되는데, 이것은 IE에서만 작동하는 코드를 만들게 합니다. Validator 컨트롤 경우 클라이언트 스크립트는 NN 4에서 작동하지 않더군요. span, div 같은 태그는 NN에서 이상하게 나올수 있습니다. ( 안그러려면, 피해가면서 코딩해야 하기때문에,.. 더 복잡할 수 있다는 얘기입니다 )

아무튼, 이 단점은 생각만큼은 편하지 않더라, 쉽지 않더라는 것일 뿐이고요, 사용하는 사람 능력에 달렸을겁니다.
이 webform을 이용하면, 내용을 정확히 입력했는지 여부를 체크( Form Validation )한다거나 전에 좀 귀찮았던, select 박스나 radio 버튼 값을 바꾼다거나 하는 일들이 쉽고 편해집니다. 또한 그런 일들이, VS.net을 쓴다면 간단한 Drag-Drop 몇번과 속성 지정해주는 것만으로 되죠.

이번 게시판에선, 글쓰기/글수정과 글 지우기(비밀번호입력하는부분)에서 다룹니다.

1.2 user control

dot net에서 개인적으로 제일 유용하게 생각되었던 것이 user control 입니다. 이것을 이용하면, 자주 쓰이는 부분 부분을 만들어 저장해 두고, 여러곳에서 재사용할 수 있습니다.

예를 들어, 홈페이지가 통짜 페이지(프레임 안쓰는 페이지) 인 경우, 윗부분의 메뉴와 아랫부분의 copyright 표시부분은 모든 페이지에 들어가게 됩니다. 이것은 지금은 다음처럼, 대부분 include문을 쓰고 있습니다. ( 수작업으로 하나하나 넣지 않는다면)

<!--#include file="...\head.asp"-->
....
<!--#include file="...\footer.asp"-->

이것은 user control을 이용해서, 다음처럼 태그 넣듯 할 수 있습니다. ( 이번 게시판에서 실제로 쓰이는 소스입니다 )

<%@ Register TagPrefix="cst" TagName="header" Src="pagelet/cstHeader.ascx" %>
<%@ Register TagPrefix="cst" TagName="footer" Src="pagelet/cstfooter.ascx" %>
....
<cst:header title="자유게시판" />
....
<cst:footer />

각 부분을 ascx 파일로 만들어두고, 그것을 위처럼 태그로 정의한 후 사용하면 됩니다. cstHeader.ascx 경우 다음과 같은 소스입니다.

<script runat="server" language="C#">
  public String title="게시판";
</script>

<table border=0 width=600 cellpadding=0 cellspacing=0 align=center>
  <tr>
    <td class="cmTitle" ><b><%# title %></b></td>
  </tr>
</table>
<p>

소스에선 디폴트로 "게시판"이라고 출력하도록 되어 있지만, <cst:header title="방명록" /> 처럼 title로 정한 부분을 "방명록"이라고 바꾸면 그렇게 출력되죠. 이것은 이번 게시판에 쓰일, 간단한 예이고요, 얼마든지 다양하게 응용할 수 있으리라 생각됩니다.

이것은 다음과 같은 장점을 가집니다.

  • 태그 형태이기 때문에 보기 편합니다.
  • 각 컨트롤은 컴파일되므로 빠릅니다. ( include에 비교했을때 )
  • 일반 태그처럼, 속성 값(위에서 title)을 넣어줄 수 있습니다. 즉 하나의 소스로, 속성값에 따라 다른 모습으로 표현하도록 할 수 있습니다.
  • 하나를 만들어두고 재사용한다면, 유지보수가 쉽습니다 ( 한 소스만 바꾸면 모두 바뀌므로 )
  • 각각의 컴포넌트는 캐쉬 여부를 정해줄 수 있습니다.
요즈음 웹 페이지는 여러 부분을 한페이지로 구성하는경우가 많은데요, 한 예로 메인 페이지가, 오른쪽 메뉴, 공지사항, 뉴스, poll 등으로 구성되어 있다면, 각각을 user control로 만들고, 메인 페이지는 그 각각의 컨트롤을 조립하는 식으로 구성할 수 있습니다. 나뉘어서 좀더 관리하기 편해진 것도 좋지만, 이 경우 가끔만 Update 되는 공지사항 같은 것은 서버상에서 cache하도록 해서 퍼포먼스를 높일 수도 있습니다. 한편 news 경우는 캐쉬되는 시간을 짧게 잡아서, 자주 캐쉬되도록 하고요. 각 부분별로 캐쉬할 수 있게 된 것이죠.

물론, 캐쉬도 캐쉬지만 가장 큰 장점은 각 부분 별로 만들어두고, 재사용할 수 있다는 것이겠습니다.

게시판에는 각 페이지의 머리부분과 꼬리부분, 그리고 글 목록보기(list.aspx)에서 각 페이지로 바로가는 페이지 링크 표시하는 부분에 사용해 보았습니다.

1.3 Data Binding

Data Binding은, 앞 예제에서 잠시 보았는데요, 전의 Response.Write ( 혹은 <%= %> ) 의 대체라 볼 수 있습니다. 솔직히, 정확한 개념은 저도 잘 모르겠네요. /QuickStart에 있는 내용을 번역해 보도록 하겠습니다.

"ASP.NET은, 새로운, 정의 가능한 data binding 구문을 소개한다. 이것은 개발자가 데이터 소스뿐 아니라, 속성값, 컬렉션, 표현식, 혹은 메서드 호출후 반환된 값에 의해서도 bind 할 수 있도록 하는, 매우 유연한 구문이다. 다음은 새로운 구문의 몇가지 예제를 보여준다

단순 속성값Customer: <%# custID %>
컬렉션Orders: <asp:ListBox id="List1" datasource='<%# myArray %>' runat="server">
표현식Contact: <%# ( customer.First Name + " " + customer.LastName ) %>
메서드 결과값Outstanding Balance: <%# GetBalance(custID) %>

이 구문이 ASP의 Response.Write 축약 -- <%= %> --과 유사해 보이지만, 이것의 행동은 매우 다르다. ASP의 <%= %>이 페이지가 실행될때 처리되지만, ASP.NET의 data binding 구문은 DataBind 메서드가 호출될 때만 실행된다.

DataBind는 페이지와 모든 서버 컨트롤의 메서드이다. 부모 컨트롤에서 DataBind를 호출 하면, 그 컨트롤의 모든 자식에게 계단식으로 전파된다. 그래서, 예를 들어 DataList1.DataBind() 는 DataList 템플릿 내의 모든 컨트롤 각각의 DataBind 메서드를 호출한다. 페이지의 DataBind -- Page.DataBind() 혹은 단순히 DataBind() -- 를 호출하면 그 페이지의 모든 data binding 식이 처리된다. .... "

이 글읽어도 잘 감이 안오더군요. ^^; 아무튼, 사전 찾아보면, bind는 묶다, 한데 얽어매다, 등의 뜻입니다. 제가 이해하기론, data binding은 자료(data)와, 표현 컨트롤(혹은, 단순한 값) 이 어떠한 관계인지, 관계를 묶어주는 것입니다. 전의 asp와의 차이라면, asp에선 Html로 어떻게 표현될지, 그 로직을 써주어야 했죠. 하지만, data binding을 이용하면, 관계만 설정해주면 그것을 어떻게 표현할 것인지는 해당 컨트롤에서 하게됩니다. 예를 들어보죠.

<%@ Import namespace="System.Data" %>
<%@ Import namespace="System.Data.SqlClient" %>

<html>
<head>

    <script language="C#" runat="server"> 
      void Page_Load( Object o,EventArgs e) {   
          SqlConnectionconn=newSqlConnection("server=localhost;uid=xxx;pwd=xxx;database=xxx;");
          conn.Open();
          string sql = "select top 10 seq,writer,email,title,writeDate,readed "
                       + " from cstBoard order by seq desc ";
          SqlCommand cmd = new SqlCommand( sql, conn);

          SqlDataReader dr=cmd.ExecuteReader();

          dataGrid1.DataSource=dr;
          dataGrid1.DataBind();
          conn.Close();
      }
    </script>

</head>
<body>

    <h3><font face="Verdana">Databinding 예제</font></h3>

    <form runat=server>

        <asp:DataGrid id="dataGrid1" runat="server"
          BorderColor="black"
          BorderWidth="1"
          GridLines="Both"
          CellPadding="3"
          CellSpacing="0"
          HeaderStyle-BackColor="#aaaadd"
        />

    </form>

</body>
</html>

예제는, 이번에 만들 게시판 테이블에서 앞에서 10개를 불러와 출력하는 것인데요, DB 컨넥션이나, 쿼리문 등은 나중에 좀더 자세히 하게 될 것이고요, 눈여겨 보실 부분은 다음 두문장입니다.

dataGrid1.DataSource=dr;
dataGrid1.DataBind();

Sql 문의 처리 결과 값을 해당 컨트롤에 연결시켜 주는 이 두 문장 만으로, 다음과 같은 결과 화면을 만들어낼 수 있습니다.

소스에, for 문이나 do-while등, 위와 같은 HTML 표현을 위한 어떠한 문장도 없었습니다. 자료와 컨트롤을 연결(Bind)만 해주면, 나머지는 컨트롤(위에서 DataGrid control)이 알아서 해주게 됩니다.

물론, 간단하게 할 수 있다는 것이 보통 그렇듯, 좀 특이한 것 하려면 복잡해집니다. ^^; 이번 게시판에선 글 목록 보여주는 부분에서 좀더 자세히 다룹니다


설명이 많이 부족했으리라 생각합니다만, 그럼에도 제가 잘 모르고, 해보지 않아 설명을 잘 못드리는 것이 아직 많이 남아있습니다.
  • 우선 Web Service 란 것이 있습니다. dot net에서 가장 강조되는 부분이 아마도 Web Service 일텐데요, 중요한 것임에도, 제가 해본 적이 없어서 설명을 못드리겠네요. ( 개념조차 잘, 이해 못하고 있습니다 )
  • 웹 페이지를 여러 방식으로 캐쉬할 수 있습니다. 전에는 클라이언트의 expire 시간을 정해주는 정도였는데, 이제는 서버내에서 한 페이지 혹은 일부 페이지만, 혹은 DB 내용을 캐쉬하는 등 갖가지 방식으로 조정할 수 있습니다.
  • 인증 방식에 여러 선택사항이 있습니다.
  • 세션(session)개체를 어떻게 구현할지를 선택( cookie로, url로, db 서버로) 할 수 있는 등, 여러 선택 사항이 있습니다.
내용이 많은데, 너무나 간단히 설명하고 넘어가네요. 각각의 주제들 별로 여러 강좌가 나올 수 있을 것 같습니다. 좀더 세부적인 내용은 직접 만들면서 하도록 하겠습니다.

자세한 내용은 SDK 설치할때 생기는 예제 사이트인, localhost/QuickStart을 참조하시기 바랍니다. 그리고 ibuyspy.com의 소스를 보시면, aspx 페이지가 대체 어떤 모습이 될지, 대충 감을 잡으시리라 생각합니다.

결론은,... 음... 지금의 asp에서 건질건 별로 없다는 겁니다. ^^; 뭐하나 제대로 남아 있는게 없네요.

암튼,다음 강좌에선 DB 부분을 소개해 보겠습니다.

 

Back