---
title: "데이터 변환의 유효성 검사 및 오류 수정"
date: "2022-11-30"
categories: 
  - "data-integration"
  - "tools"
tags: 
  - "data-integration"
  - "data-mapping"
  - "data-mapping-debugger"
  - "data-mapping-validation"
  - "mapforce"
description: MapForce를 사용하여 데이터 변환의 유효성을 검증하고 오류를 수정하는 방법을 알아보세요. 이 기사에서는 데이터 매핑 및 통합 과정에서 정확성을 확보하는 다양한 기술을 소개합니다.
---
Status: #blog

Tags:  #data-integration #data-mapping #data-mapping-debugger #data-mapping-validation #mapforce

Categories: [data-integration](/blog/ko/category/data-integration.md) | [etl](/blog/ko/category/etl.md)
# 데이터 변환의 유효성 검사 및 오류 수정

소프트웨어 개발자 및 기타 데이터 전문가들은 종종 데이터를 한 형식에서 다른 형식으로 변환해야 합니다. 이러한 변환은 단순한 일대일 변환일 수도 있지만, 더 복잡한 처리가 필요할 수도 있습니다. 예를 들어, CSV 파일을 데이터베이스로 가져올 때 관계를 생성해야 하거나, 원본 데이터를 대상 형식에 맞게 분할해야 할 수도 있습니다. 전체 이름과 이름, 중간 이름, 성, 그리고 선택적인 접미어를 분리하는 경우가 이에 해당합니다. 데이터 변환의 유효성을 검증하는 것은 데이터 손실이나 손상을 방지하는 데 매우 중요합니다.

이전 게시글에서 "[웹 서비스 데이터 통합](https://www.altova.com/blog/web-service-data-integration/)"에 대해 설명하면서, GMT 시간 값을 문자열로 표현하고, 이를 초 단위의 숫자 값과 결합하여 날씨 예보에 필요한 지역 시간을 생성했습니다. 이 작업을 수행하기 위해 필요한 모든 단계를 수행하는 사용자 함수를 만들었습니다. MapForce는 강력한 인터랙티브 데이터 매핑 디버거를 포함하고 있으며, 이를 통해 이 변환 과정을 쉽게 추적하고 검증할 수 있습니다. 작동 방식을 자세히 살펴보겠습니다.

![컴퓨터로 작업하는 소프트웨어 개발자](/blog/images/Mapforce_debug_blog_1.jpg)

<!--more-->

저희 데이터 변환 프로젝트에서 사용자 함수 "calc-local-time"이 어떻게 사용되는지 보여드리겠습니다. 보시다시피, MapForce는 시각적인 인터페이스와 드래그 앤 드롭 기능을 통해 코딩 없이 데이터 매핑을 지원합니다.

[![데이터 변환 프로젝트에서 지역 시간을 계산하는 사용자 정의 함수](/blog/images/data-mapping-1-2.png)](data-mapping-1-2.png)

이 함수는 `dt_txt`라는 문자열 값을 입력받습니다. 이 값은 날짜와 시간을 나타내며, 형식은 "2020-02-22 18:00:00"과 같습니다. 또한, 예측 지역의 시간대와 관련된 숫자 값을 입력받습니다. 이 값은 GMT와의 시간 차이를 초 단위로 나타냅니다.

데이터가 변환되면, 해당 함수의 결과는 엑셀 스프레드시트의 A열에 저장됩니다. 스프레드시트 내에서 A열의 형식은 "날짜"로 정의되어 있으며, 지정된 형식에는 시간 정보도 포함됩니다. 예를 들어, "5/20/20 4:00 PM"과 같이 표시됩니다.

사용자 함수 헤더를 두 번 클릭하면 해당 함수가 확장되어 개별 작업들이 표시됩니다

[![사용자 함수에서 수행되는 작업은 지역 시간을 계산하는 것입니다](/blog/images/calc-local-time-1.png)](calc-local-time-1.png)

두 개의 입력 값은 오른쪽 부분에 있으며, 최종 출력 값인 "A"는 가장 왼쪽에 위치합니다. 간단히 설명하자면, 이 함수는 입력된 날짜 및 시간(dt_txt)에 특정 시간대의 시간을 더하여 현지 시간을 계산합니다. MapForce에는 위 그림에서 출력 값 "A" 바로 왼쪽에 표시된 것처럼, 이 작업을 수행하는 내장된 날짜/시간 덧셈 함수가 포함되어 있습니다. 하지만 실제로는 보이는 것만큼 간단하지 않습니다! 웹 서비스로부터 수신되는 입력 값은 다양한 형식으로 제공되므로, 날짜/시간 덧셈 함수의 형식과 구문에 맞게 조정해야 합니다.

### MapForce 디버거를 사용하여 데이터 변환의 유효성을 검증하는 방법

저희는 MapForce를 사용할 수 있습니다 [데이터 변환 디버거](https://www.altova.com/ko/mapforce#data_mapping_debugger) 사용자 정의 함수의 작동 과정을 추적하여 원하는 결과를 얻는지 확인합니다. 먼저, 타임존 입력 필드를 마우스 오른쪽 버튼으로 클릭하여 디버깅 중단점을 설정합니다

[![디버거의 중단점을 사용하여 데이터 변환 과정을 검증합니다](/blog/images/debug-1.png)](debug-1.png)

여러 개의 디버깅 도우미 창이 열리고, 프로그램은 중단점(breakpoint)에 도달할 때까지 실행을 계속합니다. 중단점에 도달했을 때, 처리된 값이 강조 표시됩니다

[![데이터 변환 과정의 디버깅 중, 지정된 중단점에서 일시 정지됩니다](/blog/images/debug-2.png)](debug-2.png)

저희는 실행을 계속하기 위한 다양한 옵션을 제공합니다. "최소 단계" 옵션은 각 데이터 변환 과정을 가장 자세하게 보여줍니다.

[![MapForce 도구 모음에 있는 디버깅 옵션](/blog/images/debug-3.png)](debug-3.png)

이 명령어는 단계를 세분화하며, 일반적으로 각 연결에 대해 두 번씩 중단됩니다. 즉, 소스에서 값이 생성될 때 한 번, 그리고 대상에서 해당 값을 사용할 때 한 번씩 중단됩니다. "최소 단계"를 반복적으로 클릭하면 변환이 계속 실행되며, "calc-local-time" 함수가 처리되는 과정을 정확하게 확인할 수 있습니다

[![사용자가 정의한 함수의 실행 과정을 단계별로 살펴보겠습니다](/blog/images/debug-4.png)](debug-4.png)

실행 과정을 계속 진행하면서, 각 연결 지점에 해당하는 값들이 창에 추가됩니다.

내장된 `datetime-add` 함수는 첫 번째 입력으로 날짜 및 시간 값을, 두 번째 입력으로 더할 시간 간격을 지정하는 문자열 값을 필요로 합니다. 아래 그림에서는 출력 값을 생성하는 과정을 단계별로 보여줍니다. 강조 표시된 부분은 `datetime-add` 함수에 입력되는 값과 최종적으로 생성된 결과입니다

[![기능 결과를 확인하기 위해 계속해서 다음 단계로 진행합니다](/blog/images/debug-5.png)](debug-5.png)

초 단위의 원래 오프셋 값은 28,800초이며, 이는 8시간에 해당합니다. 생성된 결과는 dt_txt 기준 시간보다 8시간 뒤에 나타나므로, 출력 결과는 유효합니다.

### 다른 사례들을 고려해 볼 때

GMT 시간과의 시차는 GMT 기준 동쪽에 위치한 지역에서만 양수가 됩니다. GMT 기준 서쪽에 위치한 지역은 시차가 음수가 되어야 합니다. 다시 말해, 뉴욕은 런던보다 서쪽에 위치하므로 현지 시간이 더 빠릅니다. 반면, 베이징은 GMT 기준 동쪽에 위치하므로 현지 시간이 더 늦습니다.

`calc-local-time` 함수가 시간대 오프셋이 음수인 경우에도 제대로 작동하는지 확인해야 합니다.

우리는 여러 가지 방법으로 이를 수행할 수 있습니다. 저희가 사용하는 도시 목록에는 GMT 기준 동쪽에 위치한 도시와 서쪽에 위치한 도시가 모두 포함되어 있습니다. 우리는 실행 과정을 계속 진행하면서, 음수 시간대를 가진 도시를 만날 때까지 계속 진행할 수 있습니다.

[![EB 서비스 데이터 매핑을 위한 도시 목록 입력 파일의 내용입니다](/blog/images/port-list-grid-1.png)](port-list-grid-1.png)

웹 서비스는 각 도시별로 40개의 예측 정보를 제공하므로, 처음 4개 도시의 모든 정보를 확인하는 것은 매우 번거로울 수 있습니다.

도시 목록을 수정하여 서구 반구의 새로운 도시를 목록 맨 위에 추가하거나, 테스트 케이스를 위해 새로운 입력 파일을 만들 수 있습니다. 많은 경우에 이러한 방식이 합리적인 테스트 전략이 될 수 있습니다.

또는, 특정 조건을 설정하여 중단점을 설정할 수 있습니다. 만약 중단점을 설정하여 값이 음수일 때만 프로그램 실행을 일시 중지하도록 설정한다면, 원래 입력 파일을 계속 사용할 수 있습니다. 이것이 최종 결론에 가장 빠르게 도달하는 방법입니다.

데이터 매핑으로 돌아와서, 중단점을 수정하려면 중단점 아이콘을 마우스 오른쪽 버튼으로 클릭합니다

[![브레이크포인트 속성 수정하기](/blog/images/breakpoint-props-1.png)](breakpoint-props-1.png)

이렇게 하면 대화 상자가 열리며, 여기서 중단점을 조건부로 설정할 수 있습니다. 아래 그림은 타임존 값이 음수일 경우 실행을 중단하는 조건을 보여줍니다

[![데이터 변환 유효성 검사를 위한 중단점 속성 대화 상자](/blog/images/breakpoint-props-2.png)](breakpoint-props-2.png)

이제 매핑 작업을 디버그 모드로 다시 실행할 수 있습니다. 입력 목록에 있는 처음 몇 개의 도시 중, 모두 GMT 시간대보다 동쪽에 위치한 도시들이 처리됩니다. 첫 번째로 음수 시간대 값을 가진 도시가 나타나면, 중단점이 실행되고 프로그램 실행이 일시 중지됩니다.

[![브레이크포인트 조건이 충족되어 프로그램 실행이 일시 중지됩니다](/blog/images/debug-6.png)](debug-6.png)

위에서 설명한 동일한 단계 추적 방식을 사용하면, `calc-local-time` 함수가 작동하는 동안 음수 값에 어떤 변화가 발생하는지 확인할 수 있습니다.

[![음수 입력 값에 대한 데이터 변환 과정을 추적하여 데이터 변환의 유효성을 검증합니다](/blog/images/debug-7.png)](debug-7.png)

-25,200초의 시간대 값을 문자열로 변환합니다. 그런 다음, 내장된 연결 함수를 사용하여 문자열의 시작과 끝에 문자를 추가하여 `datetime-add` 함수에 사용할 기간 문자열을 생성합니다.

음수 값을 더하는 것은 뺄셈과 같지만, 현재 시점에서는 기간을 나타내는 구문이 정확하지 않습니다. 마이너스 기호(하이픈)는 기간 문자열의 첫 번째 문자로 시작해야 합니다. 따라서 `replace` 함수는 문자열에서 "PT-"를 찾고, 찾으면 "-PT"로 바꿉니다.

25,200초는 7시간입니다. 입력 값인 2020-05-23T00:00:00에서 7시간을 빼면 2020-05-22T17:00:00, 즉 2020년 5월 22일 오후 5시가 됩니다. 이제 양수 및 음수 오프셋을 사용하는 경우에 대한 사용자 함수를 검증했습니다.

데이터 변환의 정확성을 검증하든, 예상치 못한 결과를 추적하든, [디버깅 데이터 변환 과정](https://www.altova.com/ko/mapforce#data_mapping_debugger) MapForce는 데이터 통합 및 ETL 프로젝트의 정확한 작동 원리에 대한 깊이 있는 이해를 제공하며, 이전에는 훨씬 더 고가의 데이터 매핑 제품에서도 불가능했던 수준의 통찰력을 제공합니다.

짧은 영상을 보세요 [영상 시연](https://www.altova.com/ko/mapforce/demos) MapForce 또는 [무료 체험판을 다운로드하세요](https://www.altova.com/ko/mapforce/download) JSON 및 웹 서비스 데이터 통합, 또는 기타 데이터 매핑, 변환 및 처리 작업 등 자체 프로젝트를 시작하는 데 필요한 튜토리얼, 도움말, 그리고 다양한 예제들을 제공합니다!
