데이터 액세스 전략 권장 사항

업데이트: 2007년 11월

ADO.NET에서는 연결을 열고 데이터를 가져오거나 작업을 수행한 다음 연결을 닫는 데이터 액세스 모델이 기본적으로 사용됩니다. ADO.NET에서는 이 모델에 대해 작업하는 방법으로 두 가지 기본 전략을 제공합니다. 한 모델에서는 데이터 소스와 연결되어 있지 않은 동안 작업할 수 있는 메모리 내의 레코드 캐시인 데이터 집합에 데이터를 저장합니다. 데이터 집합을 사용하려면 데이터 집합의 인스턴스를 만든 다음 데이터 어댑터를 사용하여 데이터 소스에서 가져온 데이터로 채웁니다. 그런 다음에는 데이터 집합의 데이터에 대해 작업합니다. 예를 들어, 컨트롤을 데이터 집합 멤버에 바인딩합니다. 자세한 내용은 Visual Studio의 데이터 집합 개요를 참조하십시오.

또 다른 방법은 데이터베이스에 대해 직접 작업을 수행하는 것입니다. 이 모델에서는 SQL 문이나 저장 프로시저에 대한 참조가 포함된 TableAdapter 쿼리 또는 데이터 명령을 사용합니다. 그런 다음 쿼리 또는 명령을 실행하여 작업을 수행할 수 있습니다. 자세한 내용은 데이터를 응용 프로그램으로 페치를 참조하십시오.

데이터 집합에 데이터 저장

Visual Studio 응용 프로그램에서 일반적인 데이터 액세스 모델은 데이터 집합에 데이터를 저장한 다음 TableAdapters 또는 데이터 어댑터를 사용하여 데이터베이스의 데이터를 읽고 쓰는 것입니다. 데이터 집합 모델의 장점은 다음과 같습니다.

  • 여러 테이블 작업   데이터 집합에는 별개의 개체로 유지되는 여러 개의 결과 테이블이 포함될 수 있습니다. 각 테이블을 개별적으로 작업하거나 테이블 간을 부모-자식 테이블로서 탐색할 수 있습니다.

  • 여러 소스의 데이터 조작   데이터 집합의 테이블은 서로 다른 여러 소스의 데이터(예: 같은 데이터 집합에 있는 서로 다른 데이터베이스, XML 파일, 스프레드시트에서 가져온 데이터)를 나타낼 수 있습니다. 다양한 소스의 데이터가 데이터 집합에 포함되고 나면, 단일 소스에서 가져온 데이터처럼 같은 형식으로 데이터를 조작하고 관계를 설정할 수 있습니다.

  • 분산 응용 프로그램의 계층 간 데이터 이동   데이터를 데이터 집합에 유지함으로써 응용 프로그램의 프레젠테이션 계층, 비즈니스 계층, 데이터 계층 간에 데이터를 쉽게 이동할 수 있습니다.

  • 다른 응용 프로그램과의 데이터 교환   데이터 집합을 사용하면 같은 응용 프로그램의 다른 구성 요소뿐 아니라 다른 응용 프로그램과도 데이터를 교환할 수 있습니다. 데이터 집합에서는 데이터를 XML로 serialize하고 XML 스키마를 읽고 쓰는 등의 기능을 폭넓게 지원합니다.

  • 데이터 바인딩   폼 작업을 할 때는 명령을 실행한 다음 프로그래밍 방식으로 데이터 값을 컨트롤에 로드하는 것보다는 컨트롤을 데이터 집합의 데이터에 바인딩하는 방법이 더 간편합니다.

  • 다시 사용하기 위해 레코드 유지   데이터 집합을 사용하면 데이터베이스를 다시 쿼리할 필요 없이 동일한 레코드를 반복적으로 사용할 수 있습니다. 데이터 집합 기능을 사용하면 레코드를 필터링하고 정렬할 수 있으며, 페이징 기능을 사용할 때 데이터 집합을 데이터의 소스로 사용할 수 있습니다.

  • 간편한 프로그래밍   데이터 집합에 대한 작업을 할 때는 데이터 집합의 구조를 개체로 표시하는 클래스 파일을 만들 수 있습니다. 예를 들어, dataset.Customers 개체를 사용하여 데이터 집합의 Customers 테이블에 액세스할 수 있습니다. 이러한 액세스 방식을 사용하면 데이터 집합에 대한 프로그래밍이 더욱 간단 명료해지고 오류 가능성이 줄어듭니다. IntelliSense, 데이터 어댑터 구성 마법사 등의 Visual Studio 도구에서 이 방식이 지원됩니다.

데이터베이스 작업 직접 수행

데이터베이스와 직접 상호 작용할 수도 있습니다. 이 모델에서는 SQL 문이나 저장 프로시저에 대한 참조가 포함된 데이터 명령 집합을 사용합니다. 그런 다음 명령을 실행하여 작업을 수행할 수 있습니다. 자세한 내용은 명령(ADO.NET)을 참조하십시오.

보안 정보:

CommandType 속성을 Text로 설정한 상태에서 데이터 명령을 사용하는 경우, 클라이언트에서 전송된 정보를 데이터베이스에 전달하기 전에 이 정보를 자세히 검사해야 합니다. 악의적인 사용자가 데이터베이스에 무단으로 액세스하거나 데이터베이스를 훼손하기 위해 수정된 SQL 문이나 추가적인 SQL 문을 전송(주입)할 수도 있습니다. 사용자 입력을 데이터베이스에 전송하기 전에 항상 해당 정보의 유효성을 검사해야 합니다. 가능하면 항상 매개 변수가 있는 쿼리나 저장 프로시저를 사용하는 것이 좋습니다.

데이터베이스에 대해 직접 작업하면 다음과 같은 이점이 있습니다.

  • 추가적인 기능   앞에서 설명했듯이 DDL 명령 실행과 같은 일부 작업은 데이터 명령을 실행해야 수행할 수 있습니다.

  • 실행을 직접 제어   명령(데이터를 읽을 경우 데이터 판독기)을 사용하면 SQL 문 또는 저장 프로시저의 실행 방법 및 시기, 결과 값 또는 반환 값의 형식 등을 좀 더 직접적으로 제어할 수 있습니다.

  • 적은 오버헤드   데이터베이스에서 직접 읽고 쓰므로 데이터 집합에 데이터를 저장할 필요가 없습니다. 데이터 집합에는 메모리가 필요하므로, 데이터 집합을 사용하지 않음으로써 응용 프로그램의 오버헤드가 줄어듭니다. 검색 결과를 웹 페이지에 표시하는 경우처럼 데이터를 한 번만 사용하는 경우에 특히 이러한 이점을 얻을 수 있습니다. 이 경우, 데이터를 표시하기 위해 데이터 집합을 만들고 그 데이터 집합에 데이터를 채울 필요가 없습니다.

  • 프로그래밍 부담 감소   웹 응용 프로그램과 같은 일부 경우에서는 데이터 집합의 상태를 저장하기 위한 추가 프로그래밍 작업이 필요합니다. 예를 들어, Web Forms 페이지의 경우 데이터 집합을 저장하고 복구하기 위한 프로그래밍 코드를 추가하지 않으면 페이지를 사용할 때마다 매 번 페이지가 삭제되었다 다시 생성됩니다. 그러나 데이터 읽기를 사용하여 데이터베이스에서 직접 읽으면 데이터 집합 관리로 인한 추가 단계가 필요 없습니다.

데이터 액세스를 위한 권장 사항

다음 단원에서는 특정 응용 프로그램 형식에 사용할 데이터 액세스 전략을 선택하기 위한 권장 사항을 제공합니다.

Windows Forms

대개 Windows Form에서는 데이터 집합을 사용합니다. Windows Forms은 대개 사용자가 작업할 때마다 폼 및 그 안의 데이터가 생성되었다 삭제되는 Web Forms과는 다른 리치 클라이언트에서 사용됩니다. 전부터 Windows Forms 응용 프로그램에서는 폼에 하나씩 레코드를 표시하는 등 레코드의 캐시를 유지함으로써 이점을 얻을 수 있는 데이터 액세스 시나리오를 제공합니다. 자세한 내용은 클라이언트 데이터 응용 프로그램 만들기를 참조하십시오.

특히 다음과 같은 경우에 데이터 집합을 사용합니다.

  • 동일한 레코드에 대해 반복적으로 작업하는 경우. 예를 들어, 사용자가 레코드 간을 탐색할 수 있도록 할 수 있습니다.

  • 데이터 집합 작업을 위해 특별히 디자인된 Windows Forms 데이터 바인딩 아키텍처를 사용하는 경우

  • 그 밖에 위에서 Web Forms에 대해 설명한 것과 동일한 경우

다음과 같은 경우에는 TableAdapter 쿼리 또는 데이터 명령을 사용합니다.

  • 데이터베이스에서 스칼라 반환을 얻는 경우

  • DDL 명령과 같은 쿼리 외의 작업을 수행하는 경우

  • 보고서를 만드는 등 폼에 표시하기 위해 읽기 전용으로 데이터에 액세스하는 경우. 즉, 데이터에 액세스한 후 계속 사용하기 위해 데이터를 보유할 필요가 없는 경우에 데이터 명령을 사용합니다.

Web Forms

대개 데이터 명령을 사용합니다. 데이터를 페치하려면 데이터 읽기를 사용합니다. Web Forms 페이지의 경우에는 페이지에서 라운드트립이 발생할 때마다 페이지 및 그 컨트롤과 구성 요소가 다시 생성되므로, 라운드트립 간에 데이터 집합을 캐싱하려는 경우가 아니면 매번 데이터 집합을 만들어서 채우는 것은 비효율적일 수 있습니다.

다음과 같은 경우에 데이터 집합을 사용합니다.

  • 서로 다른 데이터 소스에서 가져온 테이블 또는 각기 별개인 여러 테이블에 대해 작업하는 경우

  • XML Web services와 같은 다른 응용 프로그램이나 구성 요소와 데이터를 교환하는 경우

  • 데이터베이스에서 가져온 각 레코드에 대해 확장적인 처리를 수행해야 하는 경우. 데이터 명령과 데이터 읽기를 사용하면 각 레코드를 읽으면서 처리할 때 연결이 오랜 시간 동안 열려 있게 되어 응용 프로그램의 성능과 확장성이 떨어질 수 있습니다.

  • 관련 레코드에서 정보를 조회해야 하는 경우처럼, 데이터 처리에서 상호 의존적인 레코드를 사용하는 경우

  • 데이터에 대해 XSLT 변환과 같은 XML 작업을 수행하는 경우

  • 데이터 집합에서 제공하는 프로그래밍 편의성을 활용하려는 경우

XML Web services

XML Web services는 ASP.NET 웹 응용 프로그램이므로 Web Forms 페이지와 동일한 모델을 사용합니다. 즉 XML Web services는 매 번의 호출에서 생성되었다 삭제됩니다. 따라서 XML Web services를 위한 데이터 액세스 모델은 Web Forms을 위한 데이터 액세스 모델과 대체적으로 같다고 할 수 있습니다. 그러나 XML Web services는 주로 중간 계층 개체이고, 웹을 통해 다른 응용 프로그램과 데이터를 교환하는 데 주된 목적이 있습니다.

다음과 같은 경우에 데이터 집합을 사용합니다.

  • XML Web services에서 데이터를 주고 받는 경우. 예를 들어, 데이터를 메서드의 반환 값으로서 전달하고 메서드 인수로서 받습니다. 이 방법은 XML Web services에서 기본적으로 사용됩니다. 다른 이유로 데이터 명령을 사용하려는 경우에도 다른 구성 요소와 데이터를 교환하려면 데이터 집합을 사용해야 합니다.

  • 위에서 Web Forms에 대해 설명한 것과 동일한 경우

다음과 같은 경우에는 데이터 명령을 사용하거나 필요에 따라 데이터 읽기를 사용합니다.

  • XML Web services에서 스칼라 반환을 검색하는 경우

  • XML Web services에서 DDL 명령과 같은 쿼리 외의 작업을 수행하는 경우

  • XML Web services에서 저장 프로시저를 호출하여 데이터베이스 내에서 논리를 실행하는 경우

참고 항목

개념

데이터의 새로운 기능

장치 및 데이터 액세스

기타 리소스

데이터 연습

데이터 액세스 시작

Visual Studio에서 데이터에 연결

데이터를 받기 위해 응용 프로그램 준비

데이터를 응용 프로그램으로 페치

Windows 응용 프로그램에서 폼에 데이터 표시

응용 프로그램에서 데이터 편집

ADO.NET