동적 LINQ (파트 1: LINQ 동적 쿼리 라이브러리 사용하기)
번역/ScottGu's Blog 2008. 1. 7. 16:07원문 : Dynamic LINQ (Part 1: Using the LINQ Dynamic Query Library)
LINQ (언어 통합 쿼리)는 VS2008과 .NET 3.5에서 제공되는 새로운 기능의 하나입니다. LINQ는 데이터 쿼리라는 개념을 .NET에 있어서 가장 중요한 프로그래밍 개념으로 만들고, 프로그래밍 언어에서 효율적으로 쿼리를 표현할 수 있게 합니다.
LINQ가 좋은 점 중 한 가지는 VB와 C#에서 형식에 안전한 쿼리를 작성할 수 있다는 것입니다. 즉, LINQ 쿼리는 컴파일 타임에 검사가 되며, 작성한 코드는 완전한 자동완성과 리팩토링을 지원합니다.
형식에 안정한 쿼리를 작성하는 것이 대부분의 경우에는 바람직한 일이겠지만, 동적으로 쿼리를 작성하는 유연함이 필요한 경우도 있을 것입니다.예를 들어서, 최종 사용자인 비즈니스 분석자가 드롭다운을 이용하여 스스로 자신에게 필요한 쿼리(또는 뷰)를 만드는 것과 같이, 애플리케이션에 비즈니스를 이해하는 UI를 탑재할 수 있습니다.
예전에는 이러한 동적 쿼리 시나리오를 문자열을 서로 연결하여 동적 SQL 쿼리를 생성하는 것으로 해결하곤 하였습니다. 최근에 몇몇 분들이 제게 메일로 물어보시기를, LINQ를 사용할 때는 이런 시나리오를 어떻게 처리할 수 있냐고 하셨습니다. 아래 포스트는 LINQ 팀에서 제공하는 동적 쿼리 라이브러리를 사용하여 LINQ 쿼리를 동적으로 생성하는 방법에 대해서 설명합니다.
LINQ 동적 쿼리 라이브러 다운로드하기
VS 2008 샘플 다운로드 페이지에는 동적 쿼리 LINQ 헬퍼 라이브러리를 포함하는 VB와 C# 샘플 패키지에 대한 링크가 있습니다. 동적 쿼리 라이브러리(그리고 그에 대한 문서)로 바로 가는 링크는 아래와 같습니다.
- VB 동적 쿼리 라이브러리 (\Language Samples\LINQSamples\DynamicQuery directory 에 포함되어 있음)
- C# 동적 쿼리 라이브러리 (\LinqSamples\DynamicQuery directory 에 포함되어 있음)
VB와 C#의 DynamicQuery 샘플에는 형식에 안전한 언어 연산자 대신 문자열 매개변수를 가지는 익스텐션 메서드를 사용하여 LINQ 쿼리를 표현할 수 있는 헬퍼 라이브러리의 소스 구현이 포함되어 있습니다. DynamicQuery 라이브러리의 C# 혹은 VB 구현물을 프로젝트에 복사/붙여넣기 하면, 엔드 유저의 입력에 따라 더욱 더 동적으로 LINQ 쿼리를 생성할 수 있습니다.
간단한 동적 쿼리 라이브러리 예제
LINQ to SQL, LINQ to Objects, LINQ to XML, LINQ to Entities, LINQ to SharePoint, LINQ to TerraServer 등을 포함하여 어떠한 LINQ 데이터 프로바이더에 대해서도 DynamicQuery 라이브러리를 사용할 수 있습니다. LINQ 쿼리를 작성하기 위해 언어 연산자나 형식에 안전한 람다 익스텐션 메서드를 사용할 필요 없이, 동적 쿼리 라이브러리를 이용하면 어떤 문자열 식도 수용할 수 있는 익스텐션 메서드 기반의 문자열을 사용할 수 있습니다.
예컨데, 아래는 Northwind 데이터베이스에서 데이터를 가져와 ASP.NET GridView 컨트롤에 표시하는, 일반적인 형식 안전한 LINQ to SQL VB 쿼리입니다.
위 쿼리를 LINQ DynamicQuery 라이브러리를 사용하여 다시 쓴다면 다음과 같습니다.
조건절(where)과 정렬절(orderby)이 코드 식이 아닌 문자열 식을 가지는 것을 주목하여 주십시오. 이 문자열 식들은 늦은 바인딩이 되기 때문에 동적으로 생성될 수 있습니다. 예를 들어, 엔드 유저인 비지니스 분석자가 (임의의 조건절을 포함하여) 스스로에게 필요한 쿼리를 생성할 수 있도록 할 수도 있는 것입니다.
동적 쿼리 라이브러리 문서
위 VB와 C# 동적 쿼리 샘플에는 동적 쿼리 라이브러리 익스텐션 메서드를 사용하는 상세한 방법을 담고 있는 HTML 문서가 포함되어 있습니다. 동적 쿼리 라이브러리를 더 깊이 사용하기 위해서는 반드시 이 문서를 볼 필요가 있을 것입니다.
동적 쿼리 라이브러 예제의 다운로드와 실행
저는 LINQ to SQL을 사용하여 Northwind 샘플 데이터베이스를 쿼리하는 ASP.NET 웹사이트에서 동적 LINQ 라이브러리가 응용되는 간단한 VB와 C# 예제를 작성하였습니다. 아래 링크에서 이를 다운로드 받을 수 있습니다.
위 예제는 무료인 Visual Web Developer 2008 Express 나 VS 2008에서 모두 동작합니다.
동적 LINQ 쿼리를 생성하는 다른 방법들
동적 쿼리 라이브러리를 사용하는 것은 대단히 간단하고 쉽습니다. 또한 대부분의 쿼리가 동적이라서 엔드 유저에게 동적 쿼리를 만드는 UI를 제공하여야 하는 경우에는 특히 유용합니다.
다음 블로그 포스트에서는 동적 LINQ 쿼리를 작성하는 방법에 대해 더 깊숙이 살펴보도록 하겠습니다. 또한 형식 안전한 조건자 메서드를 사용하여 동적 LINQ 쿼리를 작성하는 방법들에 대해서도 살펴보고자 합니다. (C# 3.0 In a Nutshell book의 탁월한 저자인 Joseph와 Ben Albahari는 이미 이에 대한 훌륭한 기사를 여기에 썼습니다.)
도움이 되길 바라며,
스캇