TextBox 웹 컨트롤이 있는 그림 9의 코드로 새 열이 작성됩니다. 이 그림에 표시된 DataBinder.Eval
메서드는 데이터베이스에 있는 올바른 수량을 TextBox로 출력합니다. 이 트릭을 사용하여 다른 웹 컨트롤 작업뿐만 아니라 CheckBox 및
Label 웹 컨트롤 작업도 할 수 있습니다. 지금까지 편집할 수 있는 텍스트 필드를 DataGrid 웹 컨트롤의 열에 추가하는 방법을
설명했습니다. 하지만 변경 사항을 데이터베이스의 텍스트 필드에 다시 적용하지 못하면 소용이 없습니다. 그림 9에 표시된 TextBox 컨트롤의 ID가 Quantity로 설정되어야 합니다.
따라서 사용자가 장바구니 Web Form을 제출한 후 해당 값에 액세스하려면 Quantity.Text에 액세스할 수 있어야 합니다. 맞습니까?
그 대답은 아니오입니다. 해당 값에 쉽게 액세스할 수 있는 방법은 없습니다. 업데이트된 값을 데이터베이스에 다시 저장하는 가장 간단한
방법은 항목 컬렉션을 사용하여 행마다 DataGrid를 반복하고 FindControl 메서드를 사용하여 TextBox를 찾고 TextBox 값을
얻으며 ADO.NET을 사용하여 데이터 소스에 해당 값을 다시 저장하는 것입니다.
Dim i As Integer
For i = 0 To MyList.Items.Count - 1
' 행의 컨트롤에 대한 참조 얻기
Dim quantityTxt As TextBox = _
CType(MyList.Items(i).FindControl
("Quantity"), TextBox)
' *** 이제 quantityText.Text 값에
' 액세스할 수 있으며 ***
' *** 이 값을 사용하여
' 데이터 소스에 다시 저장할 수 있습니다. ***
Next
이 기사에서는 데이터베이스에 데이터를 저장하는 데 필요한 ADO.NET 코드는 다루지 않습니다. 전체 예제를 보려면 http://www.ibuyspy.com? 에서 IBuySpy 저장소 데모를
다운로드하십시오. DataGrids의 일반적인 내용에 대해서는 Dino Esposito의 MSDN Magazine의 Cutting Edge? 칼럼을 참조하십시오.
신용 카드 처리 센터 통합
고객이 체크 아웃할 때 고객이 구매한 제품의 대금을 지불할 수 있는지 확인해야 합니다. 제품을 배달하지 않고 신용 카드 대금을 청구하는
것은 불법이며 고객이 지불 능력이 있는지 확인하지 않고 제품을 배달하는 것은 좋지 않은 비즈니스 습관이므로, 신용 카드 처리 회사는 카드를
신속하게 인증하는 방법을 제공합니다. 신용 카드가 인증되면 몇 가지 제한된 경우(예를 들어, 신용 카드가 인증되고 대금이 청구되는 사이의 짧은
시간 안에 취소되는 경우)를 제외하고 제품 배달 후 대금이 지불될 것이라는 보장을 할 수 있습니다.
대부분의 온라인 신용 카드 처리 회사는 그 회사 서버에 대한 연결을 처리하고 신용 카드 인증을 실행하는 ActiveX DLL을 제공합니다.
이러한 회사들은 사용자의 Visual Studio.NET 또는 ASP.NET 프로젝트에 직접 연결되는 어셈블리를 조만간 제공할 것입니다.
현재로서는 COM 상호 운용성을 사용할 수 있습니다.
COM 상호 운용성을 통해 ASP.NET 응용 프로그램의 COM 개체를 사용할 수 있습니다. ASP.NET의 COM 개체에 액세스할 수
있는 가장 쉬운 방법은 런타임에 바인딩을 사용하는 것입니다. ASP 3.0에서와 같이, ASP.NET의 서버 개체는 시스템에 등록된 모든 COM
개체의 인스턴스를 반환하는 CreateObject 메서드를 제공합니다. 따라서 구성 요소에 대한 ProgID가
MyComponent.Authorize인 경우, 다음과 같이 ASP.NET의 해당 개체를 사용하여 그러한 개체를 작성할 수 있습니다.
Object oAuthor = Server.CreateObject("MyComponent.Authorize")
그러면 ASP 3.0 또는 Visual Basic 6.0에서와 같이 개체의 속성 및 메서드에 액세스할 수 있습니다.
심각한 성능 장애를 일으키는 런타임에 바인딩을 사용하는 대신 COM 개체에 대한 프록시 클래스를 작성할 수 있습니다. 프록시 클래스에는
COM 개체와 연결하는 데 필요한 모든 통로가 있으며 해당 개체의 메서드 및 속성에 대한 컴파일러를 표시합니다. Visual Studio
.NET 사용자의 경우, 이러한 기능을 사용하여 개체에 대한 IntelliSense도 얻을 수 있습니다. Microsoft .NET
Framework는 프록시 클래스를 자동으로 작성하는 tlbimp.exe(Type Library Importer)라고 하는 유틸리티와 함께
제공됩니다. 이 유틸리티는 명령 프롬프트에서 쉽게 사용할 수 있습니다.
tlbimp OriginalDLL.dll /out:MyNewDLL.dll
새 DLL을 응용 프로그램 루트의 /bin 디렉터리에 저장하면 ASP.NET의 다른 개체와 마찬가지로 COM 개체를 작업할 수
있습니다.
성능 및 최적화
ASP.NET은 전자 상거래 사이트의 성능을 조정하기 위해 몇 가지 도구를 제공합니다. 이러한 도구 중 하나가 데이터 캐싱입니다.
ASP.NET을 사용하여 비용이 많이 드는 개체를 메모리에 저장할 수 있습니다. 예를 들어, 사이트 성능을 향상시키려면 제품 세부 정보와 같이
자주 변경되지 않는 항목에 대한 데이터베이스에 반복적인 호출을 캐시할 수 있습니다.
캐시 작업은 모든 키 값 기반 사전 개체를 사용하는 것과 똑같이 사용할 수 있습니다. 비용이 많이 드는 DataSet의 경우, 필요할
때마다 DataSet을 작성하지 않고 다음과 같은 코드를 사용하여 처음으로 DataSet에 액세스할 때 캐시에 저장합니다.
Cache("Categories") = dsCategories
그러면 다음과 같이 캐시에서 읽을 수 있습니다.
myDataSet = Ctype(Cache("Categories"), DataSet)
할당하기 전에 Ctype 메서드를 사용하여 DataSet을 입력하여 캐시에서 반환된 개체를 캐스팅합니다. 캐시가 개체를 반환하기
때문에 이 작업이 필요합니다. 이러한 방법으로 캐시에 저장된 개체는 응용 프로그램을 다시 시작하거나 캐시를 직접 플러시할 때까지 사용할 수
있습니다.
그림 10 DataSet 캐시
public static void GetCategoryData()
{
// DataSet이 캐시에 있는 경우
if( Page.Cache["Categories"]!= null )
//캐시된 DataSet 반환
return (DataSet)Page.Cache["Categories"];
// 그렇지 않은 경우 데이터베이스에서 DataSet 가져오기
else
{
//ADO.NET connection 개체 및 command 개체 만들기
SqlConnection conn = new SqlConnection(
ConfigurationSettings.AppSettings["ConnectionString"]);
SqlCommand cmd = new SqlCommand("SELECT * FROM Categories",
conn);
//DataAdapter 개체 및 DataSet 개체 만들기
SqlDataAdapter myAdapter = new SqlDataAdapter(myCommand);
DataSet ds = new DataSet();
//데이터베이스 연결 열기
conn.Open();
//DataSet 채우기
myAdapter.Fill(ds, "AllDomains");
//데이터베이스 연결 닫기
conn.Close();
//캐시에 DataSet 저장
context.Cache["AllDomains"] = ds;
//DataSet 반환
return ds;
}
}
|
그림 10은 호출을 데이터베이스에 캐시하는 방법을 보여줍니다.
구성 요소에 캐싱을 구현하는 경우, HttpContext 개체에서 Cache 개체의 현재 인스턴스를 찾아야 합니다.
HttpContext context = HttpContext.Current;
이렇게 하면 context.Cache["CachedItem"] 명령을 사용하여 캐시에 액세스할 수 있습니다.
지금까지 가장 간단한 양식의 Cache 개체를 사용하는 방법에 대해서만 설명했습니다. Cache 개체의 Insert 메서드를 사용하여
캐시에 새로운 항목을 추가함으로써 캐시된 항목에 대한 종속성 및 만료 시간을 추가할 수 있습니다. 예를 들어, 웹 사이트 루트에 XML 파일
형식으로 메뉴를 저장하고 해당 메뉴에 처음으로 액세스할 때 캐싱한다고 가정해 봅니다(SQL Server™를 사용할 수 없거나 응용 프로그램의
메뉴에 XML의 손쉬운 구성이 필요한 경우도 있습니다). 원래 파일이 변경되면 해당 메뉴가 이러한 변경 사항을 자동으로 반영합니다. Insert
메서드를 사용하여 캐시에 메뉴 데이터를 추가하여 파일 자체에 캐시된 개체의 종속성을 만들 수 있습니다. 파일이 변경되면 캐시에서 메뉴가 제거되고
다음에 액세스할 때 메뉴가 다시 추가됩니다. 캐시에 메뉴를 삽입하려면 다음과 같이 Cache 개체의 Insert 메서드를 사용합니다.
Cache.Insert("mainMenu", sXMLMenu, new CacheDependency
("C:\Inetpub\wwwroot\myCommerceSite\mainMenu.xml"))
첫 번째 인수는 캐시된 항목의 이름을 정의합니다. 두 번째 인수는 캐시될 내용을 정의합니다. 마지막 인수는
CacheDependency 형식으로서 캐시된 항목이 종속되는 파일의 위치를 정의합니다.
ASP.NET은 개별적인 데이터 청크를 캐시하는 기능 이외에 출력 캐싱 기능도 제공합니다. 페이지의 출력을 캐시할 수 있는 경우,
메모리에서 해당 페이지가 직접 출력됩니다. 코드 또는 디스크 액세스를 실행하지 않아도 됩니다. 이 기능은 좀처럼 변경되지 않는 응용 프로그램의
페이지에서 사용하면 좋습니다. 페이지에 사용자에 맞게 설정된 환영 메시지와 같은 동적 콘텐트가 전혀 없는 경우에는 출력 캐싱 기능을 사용하지
않습니다. 이 경우, 각 페이지 버전이 별도로 캐시되어 전자 상거래 사이트 성능에 나쁜 영향을 주게 됩니다.
출력을 캐싱하는 몇 가지 방법이 있습니다. 가장 쉬운 방법은 다음과 같은 페이지 지시문을 사용하는 것입니다.
<%@ OutputCache Duration="60" %>
이 코드를 페이지 상단에 지정하면 전체 응답이 캐시됩니다. 기간 특성이 초 단위로 측정됩니다.
결론
본 기사에서는 ASP.NET을 사용하여 더욱 빠르고 향상된 전자 상거래 사이트를 작성하는 방법에 대해 설명했습니다. ASP.NET을 통해
UserControls 및 DataList 웹 컨트롤을 사용하여 온라인 카탈로그에서 탐색할 수 있는 메뉴를 작성하는 방법, 양식 기반 인증 사용
방법, 사용자 입력 유효성 검사 방법, 장바구니 작성하는 방법, 다른 전자 상거래 작업 중 일부를 실행하는 방법과 함께 ASP.NET의 새로운
기능을 사용하여 전자 상거래 사이트를 작성하는 방법을 설명했습니다.
|