ADO.NET과 ADO 비교
업데이트: 2007년 11월
ADO.NET의 특징을 알 수 있도록 ADO(ActiveX Data Objects)와 ADO.NET의 특징을 비교해 봅니다.
메모리 내장 데이터 표현
메모리 내장 데이터 표현은 ADO의 경우에는 레코드 집합이며, ADO.NET의 경우에는 데이터 집합입니다. 여기에는 중요한 차이점이 있습니다.
테이블 수
레코드 집합은 하나의 테이블처럼 보입니다. 레코드 집합에 여러 데이터베이스 테이블의 데이터를 포함시키려면 JOIN 쿼리를 사용해야 합니다. 이 쿼리는 다양한 데이터베이스 테이블의 데이터를 하나의 결과 테이블로 결합시킵니다.
이와 반대로 데이터 집합은 하나 이상의 테이블로 이루어집니다. 데이터 집합 내의 테이블은 데이터 테이블이라고 하며 DataTable 개체입니다. 데이터 집합이 여러 데이터베이스 테이블의 데이터를 포함하는 경우 일반적으로 여러 DataTable 개체를 포함합니다. 즉, 각 DataTable 개체는 보통 하나의 데이터베이스 테이블이나 뷰에 해당됩니다. 이런 방식으로 데이터 집합은 내부 데이터베이스의 구조를 모방합니다.
일반적으로 데이터 집합에는 관계도 포함됩니다. 데이터 집합 내의 관계는 데이터베이스의 외래 키 관계와 비슷합니다. 즉, 테이블의 행이 서로 연관되어 있습니다. 예를 들어, 데이터 집합에 투자자에 대한 테이블과 각 투자자의 주식 구매에 대한 테이블이 있는 경우 투자자 테이블의 각 행과 이에 해당하는 구매 테이블의 행을 연결하는 관계가 포함될 수 있습니다.
데이터 집합에는 여러 개의 개별 테이블이 있고 이들 간의 관계에 대한 정보를 유지할 수 있기 때문에 자동 관계 작성 테이블 및 다대다 관계를 가진 테이블을 포함하여 레코드 집합보다 훨씬 풍부한 데이터 구조가 유지될 수 있습니다.
데이터 탐색 및 커서
ADO에서는 ADO MoveNext 메서드를 사용하여 레코드 집합의 행을 순차적으로 검색할 수 있습니다. ADO.NET의 경우에는 행이 컬렉션으로 나타나므로 테이블 또는 필요한 경우 컬렉션을 전체 반복하거나 서수 또는 기본 키 인덱스를 통해 특정 행에 액세스할 수 있습니다. DataRelation 개체는 마스터 레코드와 세부 레코드에 대한 정보를 유지하고 사용 중인 레코드와 관련된 레코드를 얻을 수 있도록 하는 메서드를 제공합니다. 예를 들어, Investor 테이블의 "Nate Sun"에 대한 행에서 시작하여 이 투자자의 구매에 대해 설명하는 Purchase 테이블 행 집합을 탐색할 수 있습니다.
참고: |
---|
Windows Forms 응용 프로그램은 데이터 소스에서 레코드를 탐색할 수 있는 BindingNavigator를 제공합니다. 자세한 내용은 BindingNavigator 컨트롤(Windows Forms)을 참조하십시오. |
커서는 레코드 탐색, 데이터 업데이트 능력 및 다른 사용자가 데이터베이스에서 변경한 내용의 가시성을 제어하는 데이터베이스 요소입니다. ADO.NET에는 고유한 커서 개체가 없지만 대신 기존 커서의 기능을 제공하는 데이터 클래스가 있습니다. 예를 들어, ADO.NET의 DataReader 개체에는 앞으로만 이동할 수 있는 읽기 전용 커서와 같은 기능이 있습니다.
열려 있는 연결 최소화
ADO.NET에서는 Select 또는 Update 같은 데이터베이스 작업을 수행하기에 적합한 기간 동안만 연결을 열어 둡니다. 행을 데이터 집합에 읽어 들인 다음에는 데이터 소스에 계속 연결하지 않고도 이를 사용할 수 있습니다. ADO의 경우에도 레코드 집합에서 연결이 끊어진 액세스를 제공할 수 있지만 ADO는 기본적으로 연결된 액세스에 사용하도록 설계되었습니다.
ADO와 ADO.NET의 연결이 끊어진 프로세스 사이에는 중요한 차이점이 있는데, ADO에서는 OLE DB 공급자를 호출하여 데이터베이스와 통신하지만 ADO.NET에서는 TableAdapter 또는 데이터 어댑터(예: SqlDataAdapter)를 통해 데이베이스와 통신한다는 것입니다. 데이터 어댑터는 OLE DB 공급자 또는 내부 데이터 소스에서 제공하는 API를 호출합니다. 중요한 차이점에는 어댑터를 사용하면 성능을 최적화하거나 데이터 유효성 검사를 수행하거나 다른 프로세스를 추가하여 데이터 집합의 변경 내용이 데이터베이스로 전송되는 방식을 제어할 수 있다는 점도 있습니다.
응용 프로그램 간의 데이터 공유
ADO의 연결이 끊어진 레코드 집합을 전송하는 것보다 응용 프로그램 간에 ADO.NET 데이터 집합을 전송하는 것이 훨씬 쉽습니다. ADO의 연결이 끊어진 레코드 집합을 한 구성 요소에서 다른 구성 요소로 전송하려면 COM 마샬링을 사용합니다. ADO.NET의 데이터를 전송하려면 XML 스트림을 전송할 수 있는 데이터 집합을 사용합니다.
COM 마샬링을 사용하지 않고 XML 파일로 전송하면 다음과 같은 장점이 있습니다.
보다 다양한 데이터 형식
COM 마샬링은 COM 표준으로 정의된 제한된 데이터 형식 집합을 제공합니다. ADO.NET에서 데이터 집합의 전송은 XML 형식을 기반으로 하기 때문에 데이터 형식에 대한 제한은 없습니다. 따라서 데이터 집합을 공유하는 구성 요소는 일반적으로 사용되는 데이터 형식 집합을 다양하게 사용할 수 있습니다.
성능
큰 ADO 레코드 집합 또는 ADO.NET 데이터 집합을 전송하면 네트워크 리소스가 소모될 수 있습니다. 데이터 양이 증가함에 따라 네트워크에 가중되는 부하도 증가됩니다. ADO와 ADO.NET은 모두 전송되는 데이터 양을 최소화할 수 있습니다. 그러나 ADO.NET에서는 데이터 형식 변환이 필요하지 않다는 성능상의 장점이 있습니다. ADO에서는 구성 요소 간에 레코드 집합을 전송하기 위해 COM 마샬링이 필요하며, ADO 데이터 형식을 COM 데이터 형식으로 변환해야 합니다.
방화벽 통과
방화벽을 사용하면 두 구성 요소에서 연결이 끊어진 ADO 레코드 집합을 전송하는 것을 막을 수 있습니다. 또한 일반적으로 HTML 텍스트는 전송할 수 있지만 COM 마샬링과 같은 시스템 수준의 요청은 통과하지 못하도록 구성되어 있습니다.
구성 요소는 XML을 사용하여 ADO.NET 데이터 집합을 교환하기 때문에 데이터 집합이 방화벽을 통과할 수 있습니다.