---
title: 데이터 매핑 – 이진 객체
date: 2020-10-21
categories:
  - data-integration
  - database-mapping
  - sql
  - tools
tags:
  - binary-objects
  - data-mapping
description: Altova MapForce는 수상 경력을 자랑하는 데이터 매핑 도구로, 다양한 인기 관계형 데이터베이스에서 이진 데이터를 쉽고 효율적으로 매핑할 수 있는 기능을 제공합니다.
---
Status: #blog

Tags:  #binary-objects #data-mapping

Categories: [data-integration](/blog/ko/category/data-integration.md) | [database + sql](/blog/ko/category/database-sql.md) 
# 데이터 매핑: 이진 객체

이진 객체는 데이터베이스에서 관리하기 어렵습니다. 크기가 크고, 내용이 사람이 읽을 수 없으며, 제어 문자로 오해될 수 있는 데이터 바이트를 포함할 수 있습니다. 심지어 이진 대용량 객체(BLOB)의 데이터 유형 이름조차도 대부분의 데이터베이스 관리자가 이 객체를 선호하지 않는다는 점을 반영합니다. 관계형 데이터베이스가 등장하기 전에는, BLOB는 "정의되지 않거나 불규칙한 형태의 무언가"로 정의되었습니다

Altova MapForce는 수상 경력을 다수 보유한 강력한 데이터 매핑 도구입니다 [다양한 형식 간의 변환 및 통합을 위한 그래픽 데이터 매핑 도구](https://www.altova.com/ko/mapforce), 이 기능은 이미지, PDF 파일, 비디오 파일 또는 기타 모든 종류의 이진 데이터를 포함하여 다양한 데이터를 모든 주요 관계형 데이터베이스와 쉽고 효율적으로 연결할 수 있도록 지원합니다. 예시를 통해 자세히 살펴보겠습니다.

![](/blog/images/blob-insertion.png)

<!--more-->

MapForce는 바이너리 객체와 데이터베이스 간의 매핑을 위한 내장 함수인 "read-binary-file"과 "write-binary-file"을 제공합니다. 이번 글에서는 MapForce 온라인 도움말에 있는 "read-binary-file" 예제를 확장하여, 다양한 바이너리 객체를 관계형 데이터베이스에 삽입하는 완전한 매핑을 구축하는 방법을 설명하겠습니다.

다음은 데이터베이스에 이미지를 삽입하는 방법을 보여주는 예시입니다

[![온라인 도움말: 이진 파일 매핑 예제](/blog/images/help-ex-1.png)](help-ex-1.png)

이 매핑(mapping)은 "image01.png"라는 로컬 파일을 데이터베이스 테이블에 삽입합니다. 데이터베이스 구조를 살펴보면, 이미지에 대한 일부 메타데이터가 별도의 열에 저장되어 있으며, 이를 통해 해당 이미지를 검색하고 추출할 수 있습니다. 따라서 큰 바이너리 데이터 파일을 데이터베이스에 저장할 때, 나중에 해당 파일을 찾을 수 있는 방법을 마련하는 것이 중요합니다!

저희의 경우, 마케팅 부서에서 여러 제품을 지원하는 다양한 바이너리 파일을 관리하기 위해 SQLite 데이터베이스를 생성할 것입니다. 이 바이너리 데이터는 로고 이미지 파일, 제품 데이터 시트 PDF, 제품 사용 화면 캡처, 사진, 비디오 파일 등이 될 수 있습니다.

우선, 삽입하려는 정보를 설명하는 간단한 CSV 텍스트 파일부터 시작하겠습니다

[![데이터베이스 업로드를 위한 CSV 모델](/blog/images/csv-model.png)](csv-model.png)

이 프로젝트가 완료될 때쯤, 사용자들은 데이터베이스에 수십 개 또는 심지어 수백 개의 자산을 보유하게 될 수 있습니다. 나중에 특정 자산을 검색해야 할 때, 자산 유형의 이름은 쿼리에 매우 중요한 메타데이터 역할을 합니다. 하지만 유형 열에 있는 어떤 항목이라도 오타가 있거나 일관성이 없다면, 방대한 이진 데이터가 고립되어 복구할 수 없게 될 것입니다.

특정 자산 유형 목록을 적용하려면 CSV 파일을 XMLSpy에 가져온 후, "Type" 요소가 미리 정의된 목록에서 선택되도록 XML 스키마를 생성합니다. 그런 다음, 경험이 부족한 마케팅 인턴도 [XMLSpy의 그리드 보기](https://www.altova.com/ko/xmlspy-xml-editor)를 사용하여 자산 목록을 만들 수 있습니다. "Type" 필드는 미리 정의된 값만 허용하도록 설정됩니다

[![XMLSpy 그리드 뷰에서 데이터베이스 업로드 기능.](/blog/images/grid-view-1.png)](grid-view-1.png)

XML 스키마에 제품 이름 목록을 추가하거나, 최소한 "Product" 요소를 반드시 포함하도록 설정할 수 있습니다. 또한, "Asset" 요소의 데이터 유형을 "xs:anyURI"로 설정하여 파일 참조를 강제할 수도 있습니다. 다음은 XMLSpy 스키마 뷰에서 "Asset" 요소의 데이터 유형 설정을 보여주는 "Details" 도우미 창입니다

[![업로드 모델의 "Asset" 요소에 대한 XML 스키마 정의입니다](/blog/images/asset-details.png)](asset-details.png)

MapForce에서 CSV 또는 XML 소스에서 데이터를 매핑하는 방식은 기본적으로 동일합니다. 즉, 데이터 매핑 과정은 소스 파일의 형식이 다르더라도 큰 차이가 없습니다.

먼저, 새로운 MapForce를 실행하여 데이터 매핑 작업을 시작하고, 자산 목록과 데이터베이스 테이블을 연결하겠습니다.

[![소스 객체 목록과 데이터베이스 테이블 간의 이진 객체 매핑](/blog/images/map1.png)](map1.png)

저희는 DatabaseSpy를 사용하여 [새로운 SQLite 데이터베이스 테이블을 생성합니다](https://www.altova.com/ko/databasespy) MapForce 도움말에 있는 예제를 약간 수정했습니다. "제품" 열에는 제품 이름이, "자산 유형" 열에는 자산의 종류가 입력됩니다. "레코드 날짜" 열은 각 바이너리 객체의 생성 날짜를 기록합니다.

이제 매핑포스 도움말에 설명된 대로 ID 열을 자동 번호로 설정하고, 소스(source)와 대상(target) 간의 간단한 연결 관계를 설정하겠습니다

[![소스 객체 목록과 데이터베이스 테이블 간의 간단한 매핑 연결](/blog/images/map2.png)](map2.png)

소스 맵에서 "제품" 및 "유형" 정보를 데이터베이스의 해당 열에 직접 매핑합니다. "행" 요소를 매핑하면 입력 데이터의 각 행에 대해 새로운 데이터베이스 레코드가 생성됩니다.

이제 데이터베이스에서 이진 데이터를 BLOB(Binary Large Object) 형식으로 저장하는 방법을 알아보겠습니다

[![데이터베이스 내의 이진 데이터를 BLOB(Binary Large Object) 형식으로 매핑하는 과정](/blog/images/map3.png)](map3.png)

내장된 MapForce 함수인 "read-binary-file"은 소스 파일의 "Asset" 요소에 지정된 파일 이름을 사용하여 BLOB(Binary Large Object) 데이터를 생성합니다. 이 함수는 소스 파일 이름에 따른 어떤 규칙에도 관계없이, 항상 소스 데이터를 base64 이진 데이터로 처리합니다.

매핑 작업을 완료하려면, 에셋(Asset)에서 파일 이름을 추출하고 저장 날짜를 저장할 수 있는 연결 정보가 필요합니다

[![데이터 매핑을 통해 이진 객체를 처리하는 완벽한 예시입니다](/blog/images/map4.png)](map4.png)

"폴더 삭제" 기능은 로컬 파일, 네트워크 파일 또는 웹상의 파일 등 어떤 경로에서든 파일 이름을 자동으로 추출합니다.

"now" 함수는 매핑 실행 날짜와 시간을 기록하지만, 우리는 날짜만 필요하므로 "substring-before" 함수를 사용하여 시간 정보를 제거했습니다.

매핑 창 하단에 있는 "실행" 버튼을 클릭하면 매핑 작업이 실행되고 SQL 스크립트가 생성됩니다

[![데이터 매핑을 위한 이진 객체를 처리하는 SQL 스크립트가 생성되었습니다](/blog/images/sql-script.png)](sql-script.png)

이 스크립트는 현재까지의 결과를 확인하기 위한 미리보기 버전이며, 메인 출력 메뉴에서 해당 항목을 선택하면 스크립트가 실행됩니다

[![데이터 매핑을 위한 SQL 스크립트를 실행하는 메뉴 옵션을 제공합니다. (이 옵션은 이진 객체를 처리합니다.)](/blog/images/output-menu.png)](output-menu.png)

스크립트 실행 결과가 표시됩니다

[![데이터 매핑 및 이진 객체 처리가 성공적으로 완료된 후 생성된 SQL 스크립트 결과입니다](/blog/images/script-result.png)](script-result.png)

데이터베이스에 연결하고, MapForce 내에서 결과를 추가적으로 검증하기 위해 "DB 쿼리" 버튼을 클릭합니다

[![MapForce 데이터베이스 쿼리 창을 사용하여 데이터 매핑의 정확성을 검증하고 바이너리 객체를 확인합니다](/blog/images/db-query.png)](db-query.png)

"제품 파일" 열에 있는 BLOB(Binary Large Object) 데이터만으로는 많은 정보를 얻을 수 없지만, 다른 열들은 각 자산에 대한 유용한 메타데이터를 제공합니다.

다음 문장으로 이어집니다 [후속 게시글](https://www.altova.com/blog/data-mapping-binary-objects-part-2/) 데이터 매핑을 통해 이진 객체를 어떻게 활용하는지 보여드리겠습니다 [데이터베이스에서 자산을 추출합니다](https://www.altova.com/blog/data-mapping-binary-objects-part-2/) 그리고 원본 그대로 저장합니다. 만약 너무 기다리기 힘들다면, [무료 체험판을 다운로드하세요](https://www.altova.com/ko/download) 자체 데이터 매핑, 변환 및 처리 프로젝트를 시작하는 데 도움이 되는 튜토리얼, 도움말, 그리고 다양한 예제들을 포함하고 있습니다!
