MetaDapper: 올바른 도구를 사용하여 데이터 매핑 및 변환을 쉽게 수행

게시 됨: 2022-03-11

데이터 변환, 번역 및 매핑은 결코 로켓 과학이 아니지만 지루한 작업입니다. 간단한 데이터 변환 작업(예: CSV 파일을 클래스 인스턴스 목록으로 읽는 것)에도 적지 않은 양의 코드가 필요할 수 있습니다. 이러한 모든 작업은 많은 공통점을 공유하지만 자체 데이터 변환 방법이 필요할 정도로 "충분히 다릅니다".

우리가 구축하는 거의 모든 시스템에서 우리는 기존 데이터 저장소에서 데이터를 가져오고, 들어오는 스트림에서 데이터를 처리하고, 내부용으로 한 형식에서 다른 형식으로 변환하는 등 한 형식에서 다른 형식으로 데이터를 변환해야 하는 자신을 발견하게 될 것입니다. 데이터를 원하는 출력 형식으로 처리하거나 변환합니다.

그리고 그렇게 할 때마다 작업은 이전에 여러 번 수행한 작업과 실망스러울 정도로 비슷해 보이지만 데이터 매핑 프로세스를 처음부터 다시 해야 하기에 충분한 차이점이 있습니다.

또한, 가장 널리 사용되는 형식과 액세스 기술이 계속 발전하고 새로운 형식이 도입되고 인기를 얻으면서 프로그래머는 새로운 데이터 변환 및 매핑 기술, 라이브러리, API 및 프레임워크를 지속적으로 배워야 합니다. 데이터 과학 서비스가 지속적으로 개발되고 발전함에 따라 전문 도구에 대한 수요도 확대됩니다.

AutoMapper(한 객체에서 다른 객체로 데이터 매핑) 또는 Resharper(기존 코드 리팩터링)와 같은 도구를 활용할 수 있지만 무엇을 하든 코드 작성은 지루하고 항상 유지 관리해야 합니다. 그런 다음 내부 코드 및 키 값을 다른 계층이나 시스템의 값으로 변환, null 값을 기본값으로 변환, 유형 변환 등과 같은 교차 도메인 변환 처리를 위한 솔루션을 마련해야 합니다.

유효성 검사에는 DataAnnotations 및 jQuery 유효성 검사 플러그인과 같은 기술과 많은 사용자 지정 유효성 검사 코드로 해결되는 유사한 문제가 있습니다. 그리고 이러한 각 기술의 뉘앙스는 매우 미묘할 수 있습니다.

고급 데이터 과학자로서 "더 나은 방법이 있을 것"이라고 스스로에게 말합니다. 사실, 있습니다. 이것이 바로 이 데이터 매핑 자습서의 내용입니다.

MetaDapper 데이터 매핑 도구 소개

MetaDapper는 다양한 데이터 매핑 기술을 사용하여 이 프로세스를 개선하는 데 도움이 되는 데이터 매핑 도구입니다.

MetaDapper는 데이터 변환 프로세스를 최대한 단순화하고 간소화하기 위해 노력하는 .NET 라이브러리입니다.

MetaDapper는 다음을 통해 데이터 변환을 용이하게 합니다.

  • 각 데이터 변환 작업에 고유한 측면에서 데이터 변환 프로세스의 반복 가능한 상용구 부분을 분리합니다.
  • 임의의 복잡한 매핑 및 변환 규칙을 지정하기 위한 사용하기 쉽고 직관적인 사용자 인터페이스를 제공합니다.

MetaDapper는 논리적 매핑(스키마, 데이터 변환 및 유효성 검사)과 물리적 데이터 매핑(다양한 파일 형식 및 API 간의 변환)을 분리합니다. 논리적 매핑은 강력한 기능 세트를 제공하며 매우 구체적인 요구 사항을 처리하기 위해 고유한 방법을 연결할 수 있습니다. 물리적 매핑에는 지속적으로 확장되고 있는 다양한 지원 형식 집합이 포함됩니다. 매핑을 구성하기 위해 MetaDapper Configurator가 제공됩니다. 매핑을 생성 및 편집하고 테스트 또는 일회성 변환을 위해 실행하기 위해 사용하기 쉬운 Windows 실행 파일입니다.

클래스 인스턴스 목록을 XML 또는 CSV 파일로 변환하고, SQL 데이터베이스 레코드를 채우고, 테이블을 채우기 위한 SQL 스크립트를 생성하고, 스프레드시트를 만드는 등의 작업은 모두 몇 초 안에 생성할 수 있는 동일한 구성 파일을 사용하여 수행됩니다.

.NET 프로그램에 MetaDapper를 포함하려면 다음을 수행하기만 하면 됩니다.

  • 라이브러리에 대한 참조 추가
  • MetaDapper 엔진 인스턴스화
  • 소스 판독기(및 모든 매개변수), 대상 작성기(및 모든 매개변수) 및 구성 파일을 지정하여 매핑을 실행합니다.

성공하면 작성자는 변환된 데이터를 출력합니다. 오류가 발생하면 예외가 자세한 오류 정보를 반환하므로 데이터를 거부하거나 구성을 조정할 수 있습니다.

다음은 간단한 데이터 매핑 예입니다.

 List<MyClass> result; try { // Instantiate the MetaDapper library. var log = new Log(); var cultureInfo = new CultureInfo("en-US"); var md = new MetaDapper.Engine.MetaDapper(log, cultureInfo); using (var inputStream = new StreamReader(@"C:\myfile.csv")) { md.MapData( new CsvReaderParameters { Log = log, CultureInfo = cultureInfo, InputStream = inputStream.BaseStream, InputEncoding = Encoding.ASCII, FirstRecordIsHeader = false }, new PublicPropertiesWriterParameters { Log = log, CultureInfo = cultureInfo }, @"C:\MyMetaDapperConfiguration.xml", false, out result); } } catch (Exception) { throw; }

MetaDapper "구성자"

MetaDapper Configurator는 데이터 구조 및 변환/매핑 규칙을 정의하는 단계를 시각적으로 안내하는 방법을 제공합니다. Configurator를 사용하면 구성을 생성, 편집 및 실행할 수 있습니다(예: 테스트 또는 일회성 변환용).

MetaDapper의 Configurator는 최대한 많은 프로세스를 자동화하기 위해 노력합니다. 예를 들어 필드 매핑을 지정할 때 가능한 경우 이름 일치를 사용하여 소스 및 대상 필드가 자동으로 일치됩니다. 또한 메타데이터를 포함하는 데이터 소스에 대한 레코드 정의를 생성할 때 데이터 소스를 가리키면 필드 정의가 자동으로 채워질 수 있습니다.

레코드 정의는 생성되면 생성된 데이터 소스(있는 경우)에 대한 링크를 유지하므로 데이터 소스 스키마가 이후에 변경될 경우 자동으로 업데이트될 수 있습니다. 사용 가능한 메타데이터가 거의 또는 전혀 없는 데이터 소스에 대한 레코드 정의를 구성할 때 메타데이터를 포함하는 다른 유사한 데이터 소스를 사용할 수 있는 경우 해당 레코드 정의를 복사하여(메타데이터와 함께) 새 레코드 정의 및 그런 다음 두 데이터 원본 간에 존재할 수 있는 차이점을 반영하도록 편집할 수 있습니다. 그리고 스키마와 메타데이터가 여러 데이터 소스에 대해 동일한 경우 단일 레코드 정의를 모두 사용할 수 있습니다.

데이터 변환 프로세스 간소화

데이터 변환 프로세스에 내재된 몇 가지 문제와 MetaDapper가 개발자를 위해 이를 용이하고 단순화하는 방식에 대해 더 자세히 살펴보겠습니다.

소스를 대상 데이터로 매핑

유지 관리 과정에서 내부 또는 외부 구조가 변경되면 이러한 구조에 의존하는 매핑 코드도 조정해야 할 수 있습니다. 이것은 유지 보수 작업이 자주 필요한 영역이므로 어떤 솔루션을 사용하든 유지 보수 비용을 평가해야 합니다. 예를 들어 TotalSale 속성이 Sale 클래스에서 제거된 경우 관련 매핑 할당을 적절하게 조정해야 합니다.

MetaDapper를 사용하면 매핑을 업데이트하는 데 몇 초 정도 소요될 수 있습니다. 예를 들어 클래스 유형의 경우 새로 컴파일된 정의로 필드를 새로 고치려면 "클래스에서 필드 정의 가져오기" 버튼을 클릭하기만 하면 됩니다.

소스를 대상 데이터로 매핑

유형 변환

예를 들어 날짜/시간 및 숫자 유형 변환과 같은 일부 유형 변환은 호스트 환경의 국가별 설정에 민감합니다(코드에 명시적으로 지정되지 않는 한). 따라서 국가별 설정이 다른 새 서버에 애플리케이션을 배포하면 이를 고려하지 않은 코드가 중단될 수 있습니다. 예를 들어 날짜 값 "1-2-2014"는 미국 설정이 있는 컴퓨터에서는 2014년 1월 2일로 해석되지만 영국 설정이 있는 컴퓨터에서는 2014년 2월 1일로 해석됩니다. MetaDapper는 모든 암시적 .NET 변환을 지원하며 변환의 일부로 값의 복잡한 재형식화도 허용합니다. 또한 MetaDapper 리더, 작성자 및 매핑 엔진에서 별도의(즉, 독립적인) 국제 설정을 지정할 수 있습니다.

복잡한 기본값

때로는 기본값을 결정하기 위해 다른 시스템에 대한 액세스가 필요하거나 복잡한 코딩이 필요한 특정 비즈니스 규칙이 필요합니다. MetaDapper를 사용하면 엔진에 등록하고 기본값을 제공하고, 사용자 정의 데이터 변환을 수행하고, 사용자 정의 필드 유효성 검사를 제공하는 데 사용할 수 있는 사용자 정의 대리자 메서드의 수에 제한이 없습니다.

조건부 유효성 검사 규칙

필드 값이 조건부로 필요한 경우(또는 유효한 값이 다른 필드의 값에 종속되는 경우에도)은 드문 일이 아닙니다. 예를 들어, 파트너 이름 및 파트너 사회 보장 코드 필드를 비워 둘 수 있지만 파트너 이름이 제공되는 경우 파트너 사회 보장 코드(및 가능한 다른 필드)를 제공해야 합니다. 이러한 유형의 조건부 유효성 검사는 복잡하고 사용자 지정 코드에서 잘못되기 쉽습니다. 대조적으로 MetaDapper를 사용하면 이러한 종류의 데이터 매핑 관계를 쉽게 구성할 수 있습니다. 특히 레코드 정의의 필드 목록은 조건부 필수 필드 그룹에 나열될 수 있습니다.

이러한 예제 데이터 필드 간의 관계는 MetaDapper와 같은 데이터 매핑 도구를 사용하여 쉽게 구성할 수 있습니다.

그런 다음 매핑에서 그룹은 null이 아닌 경우 그룹의 모든 필드가 제공되어야 하는 모든 필드와 연관될 수 있습니다. 예를 들어:

이 데이터 매핑 예제는 MetaDapper와 사용자 지정 코드를 사용하여 더 쉽게 구성할 수 있음을 보여줍니다.

도메인 간에 매핑된 값 변환

소스 데이터에 일치하지 않는 값이 포함될 수 있습니다. 예를 들어, 인사말 필드에는 "Mr.", "Mr", "MR.", "Mister" 또는 "M"은 물론 모든 여성 동등물이 포함될 수 있습니다. 또는 통화 필드에는 "$"와 같은 값이 포함될 수 있지만 대상 형식에는 "USD"가 필요합니다. 제품 코드는 한 시스템에서 다른 시스템으로 변환해야 할 수 있는 값의 또 다른 예입니다. MetaDapper는 매핑 중에 값을 번역하는 데 사용할 수 있는 재사용 가능한 "동의어 목록" 사양을 허용합니다.

정의되면 동의어 그룹을 지정하여 관련 필드 매핑에 사용할 수 있습니다.

이 데이터 매핑 기술은 Social Security 예제에서 동의어를 잘 처리합니다.

값 형식 및 복잡한 계산을 기반으로 하는 매핑

새 값의 형식을 지정하려면 하나 이상의 필드 값을 사용해야 할 수 있습니다. 예를 들어, 소스 값은 상수로 장식해야 하거나(예: sale.PriceEach = "$" + priceEach; ) 값을 생성하기 위해 여러 필드를 사용해야 할 수 있습니다(예: sale.Code = code1 + “_” + code2; ).

MetaDapper는 필드 또는 상수 값의 하위 문자열 부분을 포함하여 현재 레코드의 필드를 사용하여 값을 작성할 수 있는 서식 지정/템플릿 기능을 제공합니다. 형식을 지정하고 나면 값이 지정된 대상 유형(문자열일 필요는 없음)으로 변환됩니다.

마찬가지로 필드 값과 상수의 모든 조합에 대해 전체 수학 연산자 및 함수 세트를 사용하여 매핑 중에 복잡한 계산을 수행할 수 있습니다.

검증 규칙

사용자 지정 유효성 검사 대리자를 등록하고 매핑에 사용할 수 있습니다. 다음은 필드 값이 정수인지 확인하는 사용자 정의 방법의 예입니다(필드의 데이터 유형을 정수로 만들지 않음).

 private static bool ValidateIsInteger( Log log, CultureInfo cultureInfo, object value, ref List<ErrorInfo> errors) { try { Convert.ToInt32(value); } catch (Exception) { return false; } return true; }

MetaDapper를 인스턴스화할 때 메서드가 등록됩니다. 그러면 모든 필드 매핑 정의에 쉽게 적용할 수 있습니다.

MetaDapper 정의 그림

그룹화, 정렬 및 필터링

그룹화 및 정렬 작업은 종종 데이터베이스 쿼리에서 처리될 수 있지만 모든 데이터 소스가 데이터베이스인 것은 아닙니다. 따라서 MetaDapper는 메모리 내에서 수행할 수 있는 복잡한 그룹화 및 정렬 작업의 구성을 지원합니다.

원본 데이터의 일부만 필요할 수 있는 경우 데이터베이스가 아닌 원본에서 필터링하는 것은 구현 및 유지 관리하기가 매우 복잡할 수 있습니다. MetaDapper는 필요에 따라 작업을 임의로 심층적으로 중첩하여 레코드당 필드 평가 수에 관계없이 부울 연산자로 복잡한 필터 구성을 지원합니다. 예를 들어:

복잡한 필터는 여기에 표시된 데이터 매핑 프로세스에서 중요한 역할을 합니다.

위의 필터는 다음 C# 코드와 동일합니다.

 if (sale.TransactionID > “0” AND sale.Currency == “USD” AND (sale.Amount > “3” || sale.Amount == “1”)

중첩 매핑

일부 매핑은 데이터 변환 프로세스를 완료하기 위해 여러 단계를 거쳐야 합니다. 몇 가지 예에는 접두사 또는 합계 레코드가 필요한 데이터, 필드 값 또는 문서 구조에 따라 다르게 매핑되어야 하는 데이터, 또는 단순히 복잡한 매핑의 여러 단계(예: 번역 이름, 유형 변환 등)를 분리하기 위해 필요한 데이터가 포함됩니다. 이를 위해 MetaDapper는 모든 수준의 깊이에 대한 중첩 매핑을 지원합니다.

형식 대 구조

데이터 매핑 및 변환 도구인 MetaDapper는 내부 판독기 및 기록기 인터페이스를 사용하여 거의 모든 데이터 형식을 읽거나 쓸 수 있도록 구성되었습니다. 이를 통해 매우 가볍고 형식별 뉘앙스에만 초점을 맞춘 리더/라이터 클래스를 만들 수 있습니다.

독자와 작가도 최대한 지능적이고 유연하게 행동합니다. 예를 들어, XML 판독기 및 작성기는 XPath를 사용하여 XML 파일에서 데이터를 검색하거나 쓸 위치를 지정합니다. 예를 들어 XML이 아닌 형식(예: CSV 파일)에서 읽고 쓰는 데 동일한 구성을 사용할 수도 있습니다. 이 경우 XPath 값은 단순히 무시됩니다. 마찬가지로 XPath 설정이 포함되지 않은 구성을 XML 판독기 또는 기록기와 함께 사용하면 오류가 생성됩니다.

응. 오른쪽. 확신하는. (일부 실제 데이터 매핑 예)

당신은 회의적입니다. 그리고 난 당신을 비난하지 않습니다. 소프트웨어 도구가 그들이 주장하는 전부는 아닙니다. 따라서 MetaDapper가 이미 운영상의 이점을 제공하는 데 사용된 몇 가지 실제 사례가 있습니다.

의료 보험 관리 소프트웨어를 제공하는 회사에는 웹 양식을 작성하고 싶지 않지만 스프레드시트로 데이터를 제공하기를 원하는 고객이 있었습니다. MetaDapper를 사용하여 업로드된 스프레드시트를 메모리로 읽고, 데이터를 정리하고, 레코드를 확인하고, 결과를 데이터베이스에 저장합니다. 그들은 게시하는 각 스프레드시트 템플릿에 대한 구성 파일을 쉽게 생성할 수 있는 MetaDapper를 사용하여 인적 검증 없이 고객의 Excel 파일을 수락할 수 있습니다.

한 대형 가스 회사에 내부 응용 프로그램이 있고 관리 사용자가 보고서를 Excel 형식으로 다운로드할 수 있기를 원했습니다. 보고서 형식은 정기적으로 변경될 수 있습니다. MetaDapper는 데이터베이스에서 Excel 시트를 생성하는 것을 용이하게 했습니다. Excel 형식을 업데이트하려면 코드 변경이나 재컴파일 없이 MetaDapper 구성 파일만 업데이트하면 됩니다.

자산 관리 소프트웨어를 제공하는 회사는 이러한 시스템으로 가져오기 위해 고객 종속 회계 패키지 형식으로 재무 데이터를 생성하기 위한 솔루션이 필요했습니다. 일반 회계 데이터 쿼리는 ORM 래퍼를 사용하여 개발되었으며 MetaDapper를 사용하여 데이터를 정렬, 필터링 및 각 고객에 대해 원하는 스키마 및 형식으로 매핑했습니다. 각 고객에 대해 하나 이상의 MetaDapper 구성이 만들어지며 이는 신규 고객의 주요 판매 기능이 되었습니다. 제품은 사용자 정의 또는 표준 회계 패키지 형식을 지원하도록 몇 분 안에 구성할 수 있으므로 필수 및 기존 시스템과의 통합이 각각의 신규 판매에 포함됩니다. 같은 회사는 다양한 소프트웨어 통합 프로젝트에서 MetaDapper를 사용하여 데이터를 매핑 및 변환하고 시스템 간에 내부 코드를 변환합니다.

주요 자동차 대리점은 Excel 형식의 일부 판매 보고서를 애플리케이션 중 하나에 추가해야 했습니다. 보고서는 시작부터 완료까지 1시간 이내에 애플리케이션에 추가되었습니다.

한 개발자는 다른 웹사이트에서 사용된 세트와 동일한 미국 주 테이블이 필요했습니다. MetaDapper는 사이트에서 데이터를 마이닝하고 몇 분 안에 테이블을 채우기 위한 SQL 스크립트를 생성하는 데 사용되었습니다.

이것은 데이터 매핑 도구로서 MetaDapper의 입증된 유용성과 가치의 몇 가지 예일 뿐입니다.

마무리

데이터 변환에 대해 보다 일반적으로 생각하기 시작하고 비즈니스 규칙과 무한한 유용성을 가진 데이터 세트에 대해 생각하기 시작하려면 정신적 도약이 필요합니다. MetaDapper는 이러한 관점을 촉진하고 촉진하는 프레임워크입니다.

다른 기술인 MetaDapper를 사용하든 자체 데이터 매핑 솔루션을 사용하든 이는 데이터 변환 프로젝트의 복잡성과 숨겨진 비용에 대한 소개였습니다. 유익한 정보가 되셨기를 바랍니다.

(MetaDapper에 대한 자세한 내용은 [email protected]으로 MetaDapper 팀에 문의하십시오.)