Jump to content
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr ×
과거의 기술자료(읽기 전용): https://tech.devgear.co.kr

데이터 ETL: 사용자 맞춤 라이브바인딩을 여러분의 앱에 추가하기


Recommended Posts

이안 바커 (Ian Barker)"Data ETL: Adding Custom LiveBindings To Your Apps" 을 번역했습니다. (원문 작성: 2021년 5월, 최종 번역: 2024년 1월)

최근에 있었던 TCoffeeAndCode 중에 데이터 ETL에 초점을 맞춘 에피소드가 진행되었다. 거기에서 FireDAC을 이용해 다양한 방식으로 데이터를 추출하고 조작하는 방법에 대한 훌륭한 토론이 있었다. 이 글에서는 데이터 ETL이란 무엇인지, 라이브바인딩이란 무엇인지, IDE 소프트웨어에서 라이브바인딩 사용하는 방법, 커스텀 바인딩 표현식으로 라이브바인딩 사용하는 방법 등에 대해 알아본다.

TCoffeeAndCode 에피소드를 놓친 분들을 위한 다시 보기 영상이 아래에 있다.

목차


데이터 ETL을 쉽게 했다 - 트윗 하나 덕분이었다!

우리는 - 많은 다른 것들도 다루었지만 - 라이브바인딩의 이점에 대해 이야기했다. 웹 세미나 시작 10분전에 나는 트윗 하나를 받았다. 이번에 새로 엠바카데로 MVP로 선정된 David Cornelius가 보낸 것이었다. 그는 직접 RAD 스튜디오의 라이브바인딩을 실험해봤다고 했다.

나는 최근에 델파이의 라이브바인딩을 점점 더 많이 사용하고 있다. 그리고, 이것은 많은 사람들이 평가하는 것 보다 훨씬 더 유용하다고 생각한다. 나는 CustomFormat 메서드의 오픈-소스 라이브러리를 깃허브에서 시작했다: https://t.co/yUds77hYIQ 다른 사람들의 의견이 궁금하다.
— David Cornelius (@delphidave) 2021년 5월 26일

완벽한 타이밍이었다! David는 그의 블로그 글에서 라이브 바인딩에 대해 설명한다. 그리고, 개인적인 여정에 대해 이야기를 했는데, 나와 별반 다르지 않았다. 그 역시 라이브바인딩에 대한 미적지근하게 안주했던 시절이 있엇고 지금은 라이브바인딩의 활용법 하나하나에 감사하고 있다.

 

라이브바인딩은 보기보다 훨씬 강력하다.

내가 처음 라이브바인딩에 대해 들었을 때, 그저 오래된 datasource /datafield같은 관계의 변형 정도로 보였다. 예전 버전의 델파이 그리고 유서 깊은 비주얼 베이직에서 이미 있던 것 말이다. 생긴 것으로 봐서는, 화면에 보이는 컨트롤들을 데이터베이스 테이블에 있는 (하나 또는 여러 개의) 필드와 연결해야 할 것 같았다. 그것도 더 보기 좋은 그래픽 기반의 관계 편집기를 통해서 말이다.

spacer.png

일단 라이브바인딩을 위와 같은 방법으로 시작하고 나면, 여러분이 나와 비슷한 종류의 사람이라면, 아마 라이브바인딩의 진면목을 서서히 알아가기 시작할 것이다. 그저 이 컨트롤과 저 필드를 연결하는 관계에 그치는 것이 아니라 훨씬 더 많은 파워가 있다는 것을 알게 될 것이다. 컨트롤을 클래스 및 내부 코드 데이터 구조에 연결하는 것은 프로그래머의 초능력 역할을 하는 RAD 스튜디오 기능 중 하나다. 내가 자주 언급하는 바와 같이, 나처럼 상당히 게으른 프로그래머가 실제로는 엄청나게 생산적일 수 있는 이유는 RAD 스튜디오의 이런 강력함 덕분이다. 내가 생산적이라는 말이 아니라, RAD 스튜디오가 생산적이라는 말이다. 적어도 내 경우에는 델파이를 이야기하는 것이다.

 

라이브바인딩 표현식을 이용한 데이터 ETL

라이브바인딩에 대한 훌륭한 글들이 있다. 라이브바인딩을 처음 시작하는 것부터 더 수준높은 주제까지 설명한다.

하지만, David Cornelius는 라이브바인딩의 아이디어를 수용하고 조금 더 나아간다!

 

커스텀 바인딩 표현식을 사용하여 라이브바인딩을 확장하는 방법

David는 코드를 제작하여 깃허브에 제공하고 있다. 그것은 라이브바인딩 편집기 안에서 몇 가지 커스텀 표현식을 추가한다.

spacer.png

리포지토리에는 여러분의 앱 안에 포함시킬 수 있는 유닛들이 있다. 이 유닛들을 넣으면, 제공되는 라이브바인딩 커스텀 표현식을 더 향상시킬 수 있다. 예를 들면 데이터베이스 필드(또는 레코드 또는 클래스- 라이브바인딩이라는 점을 잊지 말자) 안에 들어간 날짜 이후의 연도를 자동으로 계산하도록 할 수 있다.

 

라이브바인딩 커스텀 표현식

다음은 David의 리포지토리에 있는 예시 코드 몇 줄이다:

function MakeMinutesSinceMethod: IInvokable;
begin
  Result := MakeInvokable(function(Args: TArray<IValue>): IValue
      var
        InputDate: TDateTime;
        RoundDigits: Integer;
        MinutesSince: Double;
      begin
        CheckArgs(Args, InputDate, RoundDigits);
        MinutesSince := RoundTo(TTimeSpan.Subtract(Now, InputDate).TotalMinutes, RoundDigits);
 
        Result := TValueWrapper.Create(MinutesSince);
      end);
end;

이 코드는 라이브바인딩 사용자 정의 표현식으로 MinutesSince(MyDateTimeDBField, 2)를 추가할 수 있도록 한다. 이 표현식은 "MyDateTimeDBField"의 값을 출력할 때, 그 필드에 안에 있는 날짜와 시간 이후로 몇 분(minute)이 지났는지를 제공할 수 있다.  아주 좋다.

 

라이브 바인딩에서 날짜와 시간을 계산하는 또다른 방법

David는 커스텀 표현식 메서드에서 상당히 효율적인 코드를 사용한다. 우리가 만든 코드 안에 System.DateUtils 유닛을 포함하면, David의 함수를 변경 및/또는 확장하여, DateUtils 유닛 안에 들어있는 거의 모든 날짜/시간 계산을 포함시킬 수 있다. 단 알맞은 경우에 그렇다. 예를 들어, 우리가 "IsAM"이라는 함수를 만들 수 있을 텐데, 이 함수를 DateUtils 유닛 안에 있는 IsAM 함수에 연결하고, 연결된 날짜/시간 필드가 오전 또는 오후인지 여부에 따라 특수한 텍스트를 표시하도록 할 수 있다.

 

RAD 스튜디오 라이브바인딩은 효율적인가?

당연히, 더 많은 함수를 추가할수록 그리고 더 많은 유닛을 포함할수록 코드의 양이 점점 커지는 문제가 생긴다. 그러니 함수를 사용할 때는 신중해야 한다. 또한 커스텀 표현식은 반드시 가능한 단단하고 빨라야 한다. 왜냐하면 이 표현식은 데이터베이스 필드 또는 구조 위에서 작동하도록 연결되기 때문이다. 당연히, 커스텀 라이브바인딩이 느리면 전반적으로 비효율적인 결과를 낳는다. 특히 수천 또는 수만 개의 레코드를 처리하는 경우라면 말이다.

 

커스텀 라이브바인딩에 대해 더 자세한 내용을 확인할 수 있는 곳

커스텀 라이브 바인딩에 대한 David Cornelius 블로그의 훌륭한 게시글을 꼭 읽어 보길 바란다: https://corneliusconcepts.tech/beyond-standard-livebindings 

그의 깃허브 페이지로 이동하여 거기에서 직접 리포지토리를 복제할 수도 있다: https://github.com/corneliusdavid/LiveBindingsBeyond 

이 글을 쓰는 시점에는 David가 아직 엠바카데로 MVP 디렉토리에 표시되지 않았지만 곧 표시될 예정이다. 앞으로 그가 어떤 것을 더 선보일 지 기대된다.

RAD 스튜디오 델파이를 사용하면 데이터 ETL(데이터 추출, 변환, 로딩)을 빠르고 효율적이며 쉽게 수행할 수 있다.  지금, 평가판을 다운로드 해보자.

이 댓글 링크
다른 사이트에 공유하기

이 토의에 참여하세요

지금 바로 의견을 남길 수 있습니다. 그리고 나서 가입해도 됩니다. 이미 회원이라면, 지금 로그인하고 본인 계정으로 의견을 남기세요.

Guest
이 토픽(기고/질문)에 답하기

×   서식있는 텍스트로 붙여넣기.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   이전에 작성한 콘텐츠가 복원되었습니다..   편집창 비우기

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

중요한 정보

이용약관 개인정보보호정책 이용규칙 이 사이트가 더 잘 작동하기 위해 방문자의 컴퓨터에 쿠키가 배치됩니다. 쿠키 설정 변경에서 원하는 설정을 할 수 있습니다. 변경하지 않으면 쿠키를 허용하는 것으로 이해합니다.