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

 

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

 

2회차에서는 FireDAC의 추적과 모니터링에 대한 내용으로 진행합니다.

 

FireDAC 추적과 모니터링

FireDAC의 추적기능을 이용하면 애플리케이션과 데이터베이스 사이의 통신내용을 상세하게 보거나 기록할 수 있습니다. 

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

(주의 : 추적과 모니터링 기능은 애플리케이션의 성능에 영향을 줄 수 있습니다. 디버그 모드에서만 추적기능이 동작하도록 구성하기 바랍니다.)

 

추적 모니터링 컴포넌트

FireDAC에서는 추적 모니터링 기능을 아래 3종류의 컴포넌트로 제공합니다.

  • TFDMoniFlatFileClientLink : 추적 결과를 텍스트 파일로 기록합니다. 애플리케이션이 완료되면 생성된 추적기록 파일 목록이 표시됩니다.
  • TFDMoniRemoteClientLink : 추적 결과를 FDMonitor 유틸리티에 출력(원격지 가능)합니다.(추적 시작 전에 FDMonitor를 미리 실행해야 추적이 기록됩니다.)
  • TFDMoniCustomClientLik : 추적 결과를 커스텀 이벤트핸들러를 통해 출력합니다. 애플리케이션에서는 OnOut 이벤트를 이용해 직접 추적 결과를 기록해야 합니다.
추적 모니터링 컴포넌트는 아래와 같이 사용합니다.
  1. 추적 모니터링 컴포넌트(TFDMoniXXXXClientLink)를 폼(또는 데이터모듈)에 추가합니다.
  2. 추가한 컴포넌트의 Tracing 속성을 True로 설정(기록을 위한 속성 추가설정)
  3. 연결 컴포넌트(TFDConnection)의 연결속성에서 MonitorBy 항목을 선택(FlatFile, Remote, Custom) 합니다.

추적 항목 선택

추적 항목은 추적 모니터링 컴포넌트의 EventKinds 속성을 통해 선택할 수 있습니다. 각 항목은 아래와 같습니다.(참고 : Debugging and Reporting Environment Questions (FireDAC))

  • LiveCycle : 객체의 생성 / 소멸. 예를 들어, IFDPhysConnection가 생성됩니다. 
  • Error : DBMS 오류 
  • ConnConnect : 연결 열기 및 닫기 
  • ConnTransact : 시작 / 커밋 / 롤백 
  • ConnService : 특별 이벤트 
  • CmdPrepare : IFDPhysCommand.Prepare 호출 
  • CmdExecute : IFDPhysCommand.Execute 또는 Open 호출 
  • CmdDataIn : 명령 매개 변수 값 
  • CmdDataOut : 결과 집합 행 
  • AdaptUpdat :​​ 업데이트 후 처리 모든 정보 
  • Vendor : 낮은 수준 DBMS API 호출 
  • Component : 고레벨 이벤트

추적과 모니터링에 대해 더 자세한 내용은 FireDAC 기술문서 - Tracing and Monitoring(FireDAC)을 참고하기 바랍니다.

 

메타데이터와 DBMS 연결정보

FireDAC은 데이터베이스의 메타데이터를 조회할 수 있습니다.

 

메타데이터 쿼리 - TFDConnection 사용

다음과 같이 데이터베이스 오브젝트 이름 목록을 손쉽게 조회할 수 있는 메소드를 제공합니다.

  • GetCatalogNames - 카탈로그 목록 
  • GetSchemaNames - 스키마 목록 
  • GetTableNames - 테이블 및 뷰 목록 
  • GetFieldNames - 테이블 필드 목록 
  • GetKeyFieldNames - 테이블 기본 키 목록 
  • GetGeneratorNames - 발전기 / 시퀀스 목록 
  • GetPackageNames - 패키지 목록 
  • GetStoredProcNames - 저장 프로 시저 목록

사용 예제는 아래와 같습니다.(Memo1에 테이블명 목록을 출력)

1
FDConnection1.GetTableNames('Northwind', 'dbo', '', Memo1.Lines);

 

메타데이터 쿼리 - TFDMetaInfoQuery 사용

TFDMetaInfoQuery 컴포넌트는 메타데이터를 조회할 수 있는 데이터셋 컴포넌트입니다.

연결 설정 후 MetaInfoKind 속성만 연결하면 데이터셋을 열수 있습니다.(추가 옵션으로 CatalogName, SchemaName, BaseObjectName, ObjectName 속성을 설정합니다.)

 

추적과 모니터링, 메타데이터 샘플 프로그램 소개

이 샘플 프로그램에서는 아래 기능을 확인합니다.

  • 추적 & 모니터링 기능을 확인합니다.
  • DBMS 연결정보를 메모에 출력합니다.
  • 메타데이터
    • 테이블 목록, 필드목록, 제너레이터 목록, 스토어드프로시저 목록 조회
    • TFDConnection의 메소드와 TFDMetaInfoQuery를 이용합니다.

[샘플코드 받기 - 데브기어 github 페이지]

 

추적과 모니터링 기능

  • 폼(또는 데이터 모듈)에 추적 모니터링 컴포넌트 추가
  • FDConnection1의 연결속성 중 MonitorBy 항목을 추가한 추적 모니터링 컴포넌트 종류(Remote, FlatFile, Custom)로 선택
  • 테스트 주의사항
    • 원격 모니터링(Remote)- 애플리케이션 실행 전 FDMonitor 유틸리티(Tools > FireDAC Monitor)를 먼저 실행할 것
    • 파일 모니터링(FlatFile) - 애플리케이션 종료 후 실행파일과 같은 경로의 Trace.txt 파일에 로그가 기록됨
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm2.Button1Click(Sender: TObject);
begin
  // 원격 모니터링
  DM.FDMoniRemoteClientLink1.Tracing := False;
  DM.FDConnection1.Params.MonitorBy := TFDMonitorBy.mbRemote;
  DM.FDMoniRemoteClientLink1.Tracing := True;
 
  DM.FDTable1.Close;
  DM.FDTable1.Open;
end;
 
procedure TForm2.Button2Click(Sender: TObject);
begin
  // 파일 모니터링
  DM.FDMoniFlatFileClientLink1.Tracing := False;
  DM.FDConnection1.Params.MonitorBy := TFDMonitorBy.mbFlatFile;
  DM.FDMoniFlatFileClientLink1.FileName := TPath.Combine(TPath.GetLibraryPath, 'trace.txt');
  DM.FDMoniFlatFileClientLink1.Tracing := True;
 
  DM.FDTable1.Close;
  DM.FDTable1.Open;
end;
연결 정보 레포팅
DBMS 연결에 관한 정보를 레포팅합니다. 접속정보, FireDAC 정보, 클라이언트 모듈 정보, 세션 정보를 확인할 수 있습니다.
1
DM.FDConnection1.GetInfoReport(Memo1.Lines);
 
FireDAC 메타데이터 제공
연결된 DBMS의 테이블 목록, 테이블의 필드목록, 제너레이터목록, 스토어드프로시저 목록을 화면에 출력합니다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// TFDConnection 메타데이터 메소드 이용
procedure TForm2.Button4Click(Sender: TObject);
var
  MetaType: string;
begin
  MetaType := (Sender as TButton).Caption;
  if MetaType = 'GetTableNames' then
    DM.FDConnection1.GetTableNames('', '', '', Memo2.Lines)
  else if MetaType = 'GetFieldNames' then
    DM.FDConnection1.GetFieldNames('', '', 'EMPLOYEE', '', Memo2.Lines)
  else if MetaType = 'GetGeneratorNames' then
    DM.FDConnection1.GetGeneratorNames('', '', '', Memo2.Lines)
  else if MetaType = 'GetStoredProcName' then
    DM.FDConnection1.GetStoredProcNames('', '', '', '', Memo2.Lines)
  ;
end;
 
// TFDMetaInfoQuery 컴포넌트 이용
procedure TForm2.Button5Click(Sender: TObject);
var
  MetaType: string;
begin
  DM.FDMetaInfoQuery1.Close;
 
  MetaType := (Sender as TButton).Caption;
  if MetaType = 'GetTableNames' then
    DM.FDMetaInfoQuery1.MetaInfoKind := TFDPhysMetaInfoKind.mkTables
  else if MetaType = 'GetFieldNames' then
  begin
    DM.FDMetaInfoQuery1.MetaInfoKind := TFDPhysMetaInfoKind.mkTableFields;
    DM.FDMetaInfoQuery1.ObjectName := 'EMPLOYEE';
  end
  else if MetaType = 'GetGeneratorNames' then
    DM.FDMetaInfoQuery1.MetaInfoKind := TFDPhysMetaInfoKind.mkGenerators
  else if MetaType = 'GetStoredProcName' then
    DM.FDMetaInfoQuery1.MetaInfoKind := TFDPhysMetaInfoKind.mkProcs
  ;
 
  DM.FDMetaInfoQuery1.Open;
end;

관련링크


FireDAC Skill Sprints 관련 글


번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 15409
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 13959
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 16495
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 22045
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 23266
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 18920
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 39242
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 174693
882 [10.3 리오] 리눅스 컴파일러에 non-ARC 메모리 모델이 적용됩니다. 험프리 2018.12.04 384
881 이 달의 기술자료 - 2018년 12월 file 험프리 2018.11.30 442
880 [다시보기] 전세계 개발자를 위한 컨퍼런스! CodeRage 2018 file 관리자 2018.11.29 332
879 [커뮤니티 에디션] 사용 자격 기준 정리 관리자 2018.11.29 679
878 [발표자료] 20181121 What's NEW! RAD스튜디오 10.3 Rio file 관리자 2018.11.22 862
877 [10.3 리오] C++17 지원으로 Clang 컴파일러가 더욱 강화되었습니다. file 관리자 2018.11.16 1014
876 [10.3 리오] 안드로이드 Z-Order, 네이티브 컨트롤 관리자 2018.11.15 1048
875 [엠바카데로 온라인 세미나] 10.3 RIO를 확인하세요! 관리자 2018.11.14 313
874 [10.3 리오] IDE가 현대적이고 깔끔하게 업데이트 되었습니다. 관리자 2018.11.14 1886
873 [10.3 리오] 델파이 언어의 새로운 변화: 인라인 변수 선언 관리자 2018.11.12 2669
872 이 달의 기술자료 - 2018년 11월 file 험프리 2018.10.26 497
871 [오픈소스] AutoTablesForRADServer - RAD 서버용 REST API 자동 생성기 file 험프리 2018.10.26 438
870 엠바카데로 제품의 중요 업데이트 소식 - from 아타나스 포포브(엠바카데로 GM) 관리자 2018.10.24 859
869 올 해의 기술자료 TOP 10 - 개발자들이 가장 많이 클릭한 기술자료는? 관리자 2018.10.24 591
868 [고객사례-게임, 델파이] 오목게임 관리자 2018.10.23 799
867 새롭게 출시될 RAD스튜디오 'NEW' 베타 버전, 지금 신청하세요! (유지보수계약 고객 한정) 관리자 2018.10.05 631
866 이 달의 기술자료 - 2018년 10월 file 험프리 2018.10.01 600
865 RAD 스튜디오에서 iOS 12에 대응 험프리 2018.09.27 558
864 [엠바카데로 Feature Friday] RAD스튜디오와 함께사용하면 더욱 강력하게 활용할 수 있는 컴포넌트들 관리자 2018.09.14 667