데이터 매핑: 이진 객체
이진 객체는 데이터베이스에서 관리하기 어렵습니다. 크기가 크고, 내용이 사람이 읽을 수 없으며, 제어 문자로 오해될 수 있는 데이터 바이트를 포함할 수 있습니다. 심지어 이진 대용량 객체(BLOB)의 데이터 유형 이름조차도 대부분의 데이터베이스 관리자가 이 객체를 선호하지 않는다는 점을 반영합니다. 관계형 데이터베이스가 등장하기 전에는, BLOB는 "정의되지 않거나 불규칙한 형태의 무언가"로 정의되었습니다
Altova MapForce는 수상 경력을 다수 보유한 강력한 데이터 매핑 도구입니다 다양한 형식 간의 변환 및 통합을 위한 그래픽 데이터 매핑 도구, 이 기능은 이미지, PDF 파일, 비디오 파일 또는 기타 모든 종류의 이진 데이터를 포함하여 다양한 데이터를 모든 주요 관계형 데이터베이스와 쉽고 효율적으로 연결할 수 있도록 지원합니다. 예시를 통해 자세히 살펴보겠습니다.

MapForce는 바이너리 객체와 데이터베이스 간의 매핑을 위한 내장 함수인 "read-binary-file"과 "write-binary-file"을 제공합니다. 이번 글에서는 MapForce 온라인 도움말에 있는 "read-binary-file" 예제를 확장하여, 다양한 바이너리 객체를 관계형 데이터베이스에 삽입하는 완전한 매핑을 구축하는 방법을 설명하겠습니다.
다음은 데이터베이스에 이미지를 삽입하는 방법을 보여주는 예시입니다

이 매핑(mapping)은 "image01.png"라는 로컬 파일을 데이터베이스 테이블에 삽입합니다. 데이터베이스 구조를 살펴보면, 이미지에 대한 일부 메타데이터가 별도의 열에 저장되어 있으며, 이를 통해 해당 이미지를 검색하고 추출할 수 있습니다. 따라서 큰 바이너리 데이터 파일을 데이터베이스에 저장할 때, 나중에 해당 파일을 찾을 수 있는 방법을 마련하는 것이 중요합니다!
저희의 경우, 마케팅 부서에서 여러 제품을 지원하는 다양한 바이너리 파일을 관리하기 위해 SQLite 데이터베이스를 생성할 것입니다. 이 바이너리 데이터는 로고 이미지 파일, 제품 데이터 시트 PDF, 제품 사용 화면 캡처, 사진, 비디오 파일 등이 될 수 있습니다.
우선, 삽입하려는 정보를 설명하는 간단한 CSV 텍스트 파일부터 시작하겠습니다

이 프로젝트가 완료될 때쯤, 사용자들은 데이터베이스에 수십 개 또는 심지어 수백 개의 자산을 보유하게 될 수 있습니다. 나중에 특정 자산을 검색해야 할 때, 자산 유형의 이름은 쿼리에 매우 중요한 메타데이터 역할을 합니다. 하지만 유형 열에 있는 어떤 항목이라도 오타가 있거나 일관성이 없다면, 방대한 이진 데이터가 고립되어 복구할 수 없게 될 것입니다.
특정 자산 유형 목록을 적용하려면 CSV 파일을 XMLSpy에 가져온 후, "Type" 요소가 미리 정의된 목록에서 선택되도록 XML 스키마를 생성합니다. 그런 다음, 경험이 부족한 마케팅 인턴도 XMLSpy의 그리드 보기를 사용하여 자산 목록을 만들 수 있습니다. "Type" 필드는 미리 정의된 값만 허용하도록 설정됩니다

XML 스키마에 제품 이름 목록을 추가하거나, 최소한 "Product" 요소를 반드시 포함하도록 설정할 수 있습니다. 또한, "Asset" 요소의 데이터 유형을 "xs:anyURI"로 설정하여 파일 참조를 강제할 수도 있습니다. 다음은 XMLSpy 스키마 뷰에서 "Asset" 요소의 데이터 유형 설정을 보여주는 "Details" 도우미 창입니다

MapForce에서 CSV 또는 XML 소스에서 데이터를 매핑하는 방식은 기본적으로 동일합니다. 즉, 데이터 매핑 과정은 소스 파일의 형식이 다르더라도 큰 차이가 없습니다.
먼저, 새로운 MapForce를 실행하여 데이터 매핑 작업을 시작하고, 자산 목록과 데이터베이스 테이블을 연결하겠습니다.

저희는 DatabaseSpy를 사용하여 새로운 SQLite 데이터베이스 테이블을 생성합니다 MapForce 도움말에 있는 예제를 약간 수정했습니다. "제품" 열에는 제품 이름이, "자산 유형" 열에는 자산의 종류가 입력됩니다. "레코드 날짜" 열은 각 바이너리 객체의 생성 날짜를 기록합니다.
이제 매핑포스 도움말에 설명된 대로 ID 열을 자동 번호로 설정하고, 소스(source)와 대상(target) 간의 간단한 연결 관계를 설정하겠습니다

소스 맵에서 "제품" 및 "유형" 정보를 데이터베이스의 해당 열에 직접 매핑합니다. "행" 요소를 매핑하면 입력 데이터의 각 행에 대해 새로운 데이터베이스 레코드가 생성됩니다.
이제 데이터베이스에서 이진 데이터를 BLOB(Binary Large Object) 형식으로 저장하는 방법을 알아보겠습니다

내장된 MapForce 함수인 "read-binary-file"은 소스 파일의 "Asset" 요소에 지정된 파일 이름을 사용하여 BLOB(Binary Large Object) 데이터를 생성합니다. 이 함수는 소스 파일 이름에 따른 어떤 규칙에도 관계없이, 항상 소스 데이터를 base64 이진 데이터로 처리합니다.
매핑 작업을 완료하려면, 에셋(Asset)에서 파일 이름을 추출하고 저장 날짜를 저장할 수 있는 연결 정보가 필요합니다

"폴더 삭제" 기능은 로컬 파일, 네트워크 파일 또는 웹상의 파일 등 어떤 경로에서든 파일 이름을 자동으로 추출합니다.
"now" 함수는 매핑 실행 날짜와 시간을 기록하지만, 우리는 날짜만 필요하므로 "substring-before" 함수를 사용하여 시간 정보를 제거했습니다.
매핑 창 하단에 있는 "실행" 버튼을 클릭하면 매핑 작업이 실행되고 SQL 스크립트가 생성됩니다

이 스크립트는 현재까지의 결과를 확인하기 위한 미리보기 버전이며, 메인 출력 메뉴에서 해당 항목을 선택하면 스크립트가 실행됩니다

스크립트 실행 결과가 표시됩니다

데이터베이스에 연결하고, MapForce 내에서 결과를 추가적으로 검증하기 위해 "DB 쿼리" 버튼을 클릭합니다

"제품 파일" 열에 있는 BLOB(Binary Large Object) 데이터만으로는 많은 정보를 얻을 수 없지만, 다른 열들은 각 자산에 대한 유용한 메타데이터를 제공합니다.
다음 문장으로 이어집니다 [data-mapping-binary-objects-part-2|후속 게시글 데이터 매핑을 통해 이진 객체를 어떻게 활용하는지 보여드리겠습니다 [데이터베이스에서 자산을 추출합니다]] 그리고 원본 그대로 저장합니다. 만약 너무 기다리기 힘들다면, 무료 체험판을 다운로드하세요 자체 데이터 매핑, 변환 및 처리 프로젝트를 시작하는 데 도움이 되는 튜토리얼, 도움말, 그리고 다양한 예제들을 포함하고 있습니다!