.NET Framework 3.5 SP1에 포함되어 발표되었으며, 데이터베이스의 테이블, 컬럼 등을 REST 방식으로 노출시겨 원격지의 클라이언트가 HTTP verb 만으로 접근할 수 있는 기능을 제공하고 있는 ADO.NET Data Services 가 버전 1.5 CTP1을 공개하였다. 서비스는 WCF를 통해 노출되며 전송되는 데이터는 JSON이나 AtomPub 이 기본 형식이라서 AJAX, Silverlight 등 다양한 형태의 클라이언트와 연동이 자유롭다.
이전 버전과 달라진 1.5의 특징은 다음과 같다.
1. Row Count
그림에서와 같이 paging parameter를 요청 말미에 추가하여 분필요한 네트웍 자원의 낭비를 줄일 수 있다. 전체 갯수만을 원할 경우 $count를 이용하면 된다.
2. Server-driven paging
사용자가 데이터베이스 테이블의 전체 데이터를 요청할 경우 서버에서 강제로 paging을 부여할 수 있다. 이경우 서버가 전달하고자 하는 만큼만 전달하게 된다. 서버측에서 Data Service Configuration에 대해 SetResourceSetPageSize(“Product”, 20)를 호출하여 클라이언트의 요청에 대해 무조건 20개만을 전달하도록 설정할 수 있기 때문에 아래 그림에서처럼 /Products라고 요청하더라도 500,000건의 데이터가 넘어오는 것이 아니라 자동적으로 20건과 Next 링크가 보내지게 된다.
3. Frendly feeds
ADO.NET Data Services가 엔티티를 AtomPub 형태로 노출시키고자 할 경우 APP (Atom Publishing Protocol) 형식에 해당 property를 자동으로 매핑해주는 것을 말한다.
4. Blob streams
사진과 같은 큰 용량의 바이너리 데이터를 아래와 같이 요청할 경우, 실제로 돌아오는 응답은 해당 사진에 대한 메타데이터 (링크)이며, 사진 자체를 원할 경우 아래와 같이 요청 말미에 $value를 붙이면 실제 바이러리 사진 데이터가 넘어온다. 이는 사용자에 따라서 바이너리 데이터를 실제 사용하지 않은 경우에도 무조건 전송함으로서 낭비되는 네트웍 자산을 보호하기 위함이다.
5. WPF/Silverlight Data binding
ADO.NET Data Service의 API를 통해 엔티티를 가져오고자 할 경우 그림에서와 같이 먼저 DataServiceContext를 얻고 이로부터 원하는 엔티티를 조회를 통해 가져오게 된다. 이렇게 획득한 엔티티를 WPF나 Silverlight의 FrameworkElement 및 이의 하위 클래스 인스턴스에 바이딩하게 된다. 이때, 바이딩된 엔티티에 변경을 가하였을 경우 이전 버전까지는 변경 사항을 저장하기 위해 Data Service에 수동으로 notify를 해야하는 번거로움이 있었다. 새로운 버전 1.5에서는 엔티티 자체가 특정 인터페이스 (INotifyPropertyChanged)를 구현하고 있다면 FrameworkElement가 자동으로 DataServiceContext에 변경 사실을 알려주어 저장토록 한다.
ADO.NET Data Services 1.5 CTP1은 아래 링크에서 다운로드 받을 수 있다.
다운로드 바로가기
좀 더 자세한 정보를 원한다면 ADO.NET Data Services를 개발하고 있는 Astoria 팀 블로그를 방문하시길...
참고로, 어제 공식 발표된 Silverlight 3 베타가 제공하는 많은 기능 중에 .NET RIA Services라는 것이 포함되어 있는데, 여기에는 데이터베이스 내의 테이블 중에서 사용하고자 하는 것들을 명시하는 것만으로도 클라이언트에게로 데이터가 전송될 수 있도록 하는 기능을 자동으로 부여하는 것을 포함하고 있다. 이는 내부적으로 ADO.NET Data Services 기능을 이용하여 (WCF) 데이터베이스 테이블을 REST로 노출해주는 것이다.

