본문 바로가기

데이터 엑세스

[FireDAC Skill Sprints] 1. FireDAC 동영상과 샘플로 고급기능 활용하기

엠바카데로에서 FireDAC Skill Sprint 웨비나(1월 23일 ~ 3월 27일: 매주 금요일 10시)를 진행하고 있습니다.


이 글에서는 웨비나 다시보기와 함께 웨비나 일부 내용을 샘플코드와 함께 소개합니다. 하단 온라인 기술 도움말 링크를 통해 더 자세한 내용을 추가학습하시기 바랍니다.


1회차에서는 FireDAC을 소개하고 연결하는 과정으로 진행합니다.

FireDAC 소개

FireDAC은 델파이와 C++빌더에서 멀티-디바이스 데이터베이스 애플리케이션을 개발할 수 있는 범용(Universal) 데이터 엑세스 컴포넌트입니다. 


FireDAC은 통합 API를 사용해 다양한 데이터베이스를 동일한 코드로 제어할 수 있습니다. 그렇기 때문에 개발자는 데이터베이스를 신경쓰지 않고 애플리케이션 개발에 집중할 수 있고, DBMS 변경 시 대부분의 코드를 재사용할 수 있습니다. 그 뿐아니라 FireDAC은 데이터베이스 별 고유기능을 사용하고, 최적의 성능을 발휘할 수 있도록 데이터베이스 별 네이티브 드라이버를 지원합니다.


또한 기술적으로 아래의 장점을 제공합니다.

  • 30배 빠른 데이터 입력이 가능한 Array DML
  • DBMS의 사용내역을 추적하고 모니터링
  • 엑셀형식으로 내보내고, 가져오기 기능을 개발할 수 있는 Batch Move
  • DB에서 가져온 메모리상의 데이터를 대상으로 쿼리할 수 있는 Local SQL
  • 이 외의 기술적인 장점은 아래의 FireDAC Skill Sprints 동영상과 샘플로 고급기능 활용하기 시리즈로 직접 확인하시기 바랍니다. 


FireDAC의 자세한 소개는 데브기어 FireDAC 소개페이지와 FireDAC 기술문서 - Overview를 참고할 수 있습니다.

FireDAC Skill Sprints 동영상과 샘플로 고급기능 활용하기

2. FireDAC으로 DBMS 사용 내역 추적, 모니터링 하기

FireDAC 추적기능을 이용하면 애플리케이션과 데이터베이스 사이의 통신내용을 상세하게 보거나 기록할 수 있습니다. 이 추적 정보에는 이벤트 발생시간, API 호출내역, DB로 전송된 SQL 문, 파라메터와 필드 값, 오류와 경고 등이 기록되어 여러분의 DB 애플리케이션의 문제점을 디버깅하고 해결하는데 유용하게 사용할 수 있습니다.


샘플에서는 데이터 조회(테이블 오픈) 시 애플리케이션과 DBMS의 통신내용을 모니터링 유틸리티(FireDAC Monitor)로 확인하고, DB 애플리케이션 디버깅 시 유용한 메터데이터(DBMS 객체 정보)를 이용해 테이블, 필드, 제너레이터, 스토어드 프로시저 목록을 조회해 봅니다.

3. 캐쉬를 이용한 업데이트와 자동증가필드(Identity) 적용

캐쉬 업데이트는 애플리케이션의 메모리 영역(즉, 데이터셋)에 업데이트 내역을 기록하고, DBMS에 한번에 업데이트(또는 일괄취소) 할 수 있는 기능입니다. 

캐쉬 업데이트를 사용하면 작업내용을 로컬에서 관리하므로 DBMS와의 트래픽을 줄일 수 있고, 사용자는 통신속도와 관계없이 빠른 작업이 가능합니다. 그리고 작업이력을 확인(변경된 레코드 조회, 변경된 항목의 이전 값 확인 등)하고, 작업 변경취소(마지막 작업 변경취소, 선택한 레코드 변경취소 등)을 FireDAC에서 제공하는 메소드를 이용해 손쉽게 구현할 수 있습니다.


샘플에서는 캐쉬 업데이트를 이용해 조회한 데이터를 메모리 상에서 편집(입력, 수정, 삭제) 후 업데이트 목록 표시, 변경취소, 일괄적용/취소 기능을 구현해 봅니다.

Array DML은 DBMS에 업데이트할 데이터를 배열 형태의 파라메터로 한번에 전송해 아주 빠르게 데이터를 입력할 수 있는 기능입니다.

Array DML을 사용하면 DBMS와 애플리케이션 사이의 통신비용을 줄이고 DBMS에 전송하는 요청 횟수를 현격히 줄입니다. 그 결과 실행 속도를 대폭 향상시킬 수 있습니다.

예를 들면, 1만건의 데이터 입력 시 반복 입력 작업을 트랜젝션으로 묶으면 20배 빨라지고, Array DML을 사용하면 다시 10배가 더 빨라집니다. 샘플을 통해 결과를 직접 확인해 보기 바랍니다.

FireDAC에는 검색옵션, 형식옵션, 업데이트옵션, 리소스옵션, 트랜젝션옵션 등의 수많은 옵션을 제공합니다.

이 글에서는 주요 옵션을 살펴봅니다. 주요 옵션을 살펴보고 필요한 옵션은 상세확인 해 여러분의 애플리케이션을 향상해 보기 바랍니다.


샘플에서는 데이터 지연 조회(DetailDelay), 데이터 페이징 단위 조회(RecsSkip, RecsMax)과 같은 고급 기능을 FireDAC 옵션을 이용해 손쉽게 구현해 봅니다.

커맨드 텍스트 전처리는 SQL 명령을 데이터베이스에 전달하기 전 파라메터를 치환하고, FireDAC 매크로 함수를 DBMS에 맞도록 치환하는 기능입니다.

전처리 기능은 아래 3 종류의 매크로 명령을 제공합니다.

  • 매개변수를 확장할 수 있는 대체변수
  • 한번 작성 후 다양한 DBMS에서 사용할 수 있는 SQL문 작성하는 이스케이프 시퀀스
  • 연결된 DBMS에 따라 조건부로 실행되는 SQL문을 작성하는 조건부 대체 

샘플에서는 매크로 대체변수를 이용해 데이터 탐색기를 만들고, 이스케이프 시퀀스로 작성된 통합 SQL문이 실제 DBMS에 전달 시 어떻게 변환되는지 확인해 봅니다.

FireDAC의 ETL은 Extract, Transform, Load의 약자로 아래의 역할을 의미합니다. 

  • Extract(추출) : 같은 종 또는 이기종 데이터 소스로부터 데이터를 추출 
  • Transform(변환) : 추출한 데이터를 분석용 데이터 형식 또는 입력쿼리로 변환
  • Load(로드) : 최종 목적(데이터베이스, 운용 데이터 저장소, 데이터 마트, 또는 데이터 창고)으로 로드 

FireDAC ETL로 아래의 기능을 구현할 수 있습니다.(몇가지 예시입니다.) 

  • Query문으로 조회한 데이터를 엑셀에서 사용할 수 있는 CSV 파일로 내보내기
  • 텍스트파일의 데이터를 데이터베이스 테이블로 가져오기
  • 데이터베이스에서 다른 데이터베이스로 데이터 이동하기

샘플에서는 위 3가지 기능을 직접구현해 봅니다. 컴포넌트 구성과 컴포넌트 속성을 참고할 수 있습니다.

8. TFDMemTable: 메모리 기반 데이터셋 사용하기

TFDMemTable은 메모리 기반 데이터셋입니다. 즉, 데이터베이스 연결 없이 파일 데이터나 코드로 추가한 데이터를 메모리에 올려 데이터셋의 기능(필터링, 정렬 등)을 사용할 수 있습니다.


TFDMemTable은 아래 기능을 할 수 있습니다.

  • 디자인타임과 런타임 시 파일 불러오기(Load File), 파일로 내보내기(Save File), 다른 데이터셋의 데이터가져오기(Assign Data) 기능 사용
  • 런타임 시 파일과 스트림으로 데이터 내보내기, 불러오기 기능을 사용할 수 있으며, JSON, XML, Binary 포맷 선택 가능
  • 멀티티어 애플리케이션(REST 클라이언트, 데이터스냅 등)에서 수신 데이터를 보관하는 데이터셋 역할
  • 내부에서 데이터 보관할 시 컬랙션객체(TList, TStringList) 대신 메모리테이블 사용 시 데이터셋의 기능(UI 컨트롤에 데이터바인딩, Local SQL, 필터링, 정렬 등)을 사용해 다양한 기능 손쉽게 구현가능
  • Local SQL을 이용해 메모리테이블(데이터셋)에서 쿼리 실행
  • ETL 기능으로 다른 데이터소스(텍스트, CSV 등)에서 가져온 데이터 보관

Local SQL은 DB로부터 애플리케이션의 메모리 상으로 가져온 데이터(데이터셋: TDataSet을 상속받은 객체)를 대상으로 다시 SQL 쿼리를 할 수 있는 기능입니다. Local SQL은 아래와 같이 사용할 수 있습니다. 

  • 여러 이기종 DB들에 대한 쿼리 : 다양한 DB에서 가져온 여러 데이터셋을 대상으로 원하는 데이터 쿼리(조인 가능) 
  • 인 메모리 데이터베이스 : TFDMemTable은 메모리상에 있는 데이터셋의 역할 
  • 오프라인 모드 쿼리 : 원격 DB에 연결할 수 없는 경우에도, 이미 가져온 데이터셋을 대상으로 쿼리 실행 
  • 데이터스냅 클라이언트 쿼리 : 데이터스냅 서버(미들웨어)에서 받아온 데이터셋을 대상으로 쿼리 실행 
  • 간편한 마이그레이션 : 애플리케이션 내에서 써드파티를 통해 가져온 데이터셋 객체를 대상으로 쿼리 실행
샘플에서는 Local SQL을 이용해 dbExpress, REST Client, 메모리테이블 등 총 5종류의 이기종의 데이터셋을 조인한 데이터를 그리드에 출력합니다.

10. BDE 프로젝트를 FireDAC으로 마이그레이션 하기

(준비 중)


관련링크