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

[DocWiki 번역] 데이터베이스 변경 공지 (FireDAC)


Recommended Posts

Docwiki에 있는 "Data Change Notifications (FireDAC)"을 번역한 글: 번역일: 2022년 4월 4일)

위로 가기: [DocWiki 번역] 명령(command)을 가지고 작업하기 (FireDAC)

 

몇몇 데이터베이스에서는 데이터 변경 공지 (Data Change Notifications) 기능을 사용하여 데이터베이스 클라이언트에게 데이터 변경을 공지할 수 있다.

이 기능은 데이터베이스 안에서 발생한 데이터 변경 (예: INSERT, UPDATE, DELETE 동작)을 추적하여 데이터베이스 클라이언트에게 알려준다.

FireDAC에서는 여러 데이터베이스에서 제공하는 변경 공지 기능(변경 공지 지원 참고)을 활용할 수 있다. 하지만, FireDAC은 데이터베이스 종류에 따라 다른 메소드를 사용하여 이 기능을 구현한다. 이 글은 FireDAC의 데이터베이스 변경 공지 (Data Change Notifications) 기능에 대한 일반적인 정보를 제공한다. 그리고 이 기능을 적용할 때, 각 DBMS 별로 고려할 사항을 정리했다.

데이터베이스 변경 매커니즘에 대한 자세한 정보는 [DocWiki 번역] 데이터베이스 알림 (FireDAC)을 참고한다.

목차


1 FireDAC 데이터 변경 공지(notefication) 기능 설정하기

FireDAC 애플리케이션에서 데이터베이스 변경 공지 (Data Change Notifications) 기능을 설정하려면, 아래에 설명하는 주요 컴포넌트들을 넣어서 구성해야 한다.

  • TFDConnection 오브젝트 한개: DBMS 연결을 담당하는 FireDAC 연결(connection) 오브젝트

주의: 이 글은 당신이 FireDAC 사용하기 시작하는 단계에 설명된 데모 데이터베이스를 연결하는 간단한 VCL 애플리케이션 개발 방법을 읽고 이해했음을 전제로 한다.

  • TFDQuery 오브젝트 한개: SQL 쿼리를 실행할 수 있는 데이터셋을 구현할 때 사용하는 FireDAC 오브젝트. 이 SQL 쿼리의 기본 프로퍼티를 아래와 같이 설정해야 한다. 참고로 SQL 쿼리는 추적 기록 될 수 있다.
    • Connection 프로퍼티에는 위  FireDAC 연결(connection) 오브젝트를 지정해야 한다.
    • SQL 프로퍼티에는 원하는 SQL문을 지정한다.
    • ChangeAlerter 프로퍼티에는 이 데이터셋과 연결되는 FireDAC alerter 오브젝트를 지정한다.
    • ChangeAlertName 프로퍼티에는 변경을 추적하려는 대상인 데이터베이스 테이블 이름을 지정한다.
  • TFDEventAlerter 오브젝트 한개: 데이터베이스 변경 공지를 전담 관리하는 오브젝트이다. 이 EventAlerter의 기본 프로퍼티를 아래와 같이 설정해야 한다.
    • Options 프로퍼티에는 이 alerter의 행위를 제어하는 프로퍼티들을 세트로 지정한다.
    • SubscriptionName 프로퍼티에는 변경 공지를 받는 subscription name을  지정한다. 이것은 사용하는 데이터베이스가 무엇인가에 따라 필요할 수 있다.

주의:  추적되는 TFDQuery를 실행하기 전에 TFDEventAlerter를 먼저 Activate 해야 한다. 쿼리 공지 API에 해당 구문이 등록되어 있어야하기 때문이다. MS-SQL 서버와 Oracle에서는 필수 조건이다.

 

2 변경 공지에 반응하기 (Responses to Change Notifications)

데이터 변경 공지를 받으면, FireDAC은 자동으로 변경된 데이터를 담아와서 데이터셋을 업데이트한다. 이 동작은 TFDEventAlerter 컴포넌트의 아래 프로퍼티를 통해 제어할 수 있다.

각 DBMS 별로 고려할 사항에 나열된 데모 프로젝트에는 어떻게 사용하는 지를 알려준다.

또한, 추적 대상인 데이터셋에서 변경 발생이 탐지될 때 TFDCustomEventAlerter.OnAlert 이벤트 핸들러가 작동할 수 있다. 이 이벤트 핸들러를 사용하면, 데이터 변경 공지를 받았을 때, 이에 반응하여 수행하고자 하는 작업을 직접 구현할 수 있다.  아래 코드는  데이터베이스에서 데이터 변경이 발생될 때 마다 메시지를 표시하도록 OnAlert 이벤트 핸들러를 구현한 것이다. 

델파이:

procedure TForm1.FDEventAlerter1Alert(ASender: TFDCustomEventAlerter;
  const AEventName: string; const AArgument: Variant);
begin
ShowMessage('demo 데이터셋에서 변경이 감지되었습니다.');
end;

C++빌더:

void __fastcall TForm1::FDEventAlerter1Alert(TFDCustomEventAlerter *ASender, const UnicodeString AEventName,
          const Variant &AArgument)
{
  ShowMessage("demo 데이터셋에서 변경이 감지되었습니다. ");
}

 

3.  변경 공지 지원 (Change Notification Support)

아래 표는 각 DBMS 별로 사용되는 변경 공지(Change Notification)  매커니즘에 대한 정보를 요약한 것이다.

(역자 주: 표는 번역을 생략합니다. 여기를 눌러서 원문을 참고하세요)

 

4 DBMS 별 데이터 변경 공지 (Data Change Notifications for Specific DBMS)

이 섹션에서는 데이터 변경 공지 (Data Change Notifications)기능을 적용할 때, 각 DBMS 별로 고려할 사항을 정리했다.

4.1 인터베이스 체인지 뷰 (InterBase Change Views)

체인지 뷰 (Change Views) 기능은 Interbase에 있는 데이터 변경 공지 기능이다. 자세한 내용은 Change Views를 참고.

InterBase 애플리케이션에서 체인지 뷰 기능을 사용하도록 개발하기에 앞서 먼저 체인지 뷰에 대한 구독(subscription)을  생성해야 한다. 인터베이스 데이터베이스 안에 구독(subscription)을  생성하는 코드는 다음과 같다.

/* xxx라는 구독(subscription)을 만들어서 테이블 'yyy'의 변경을 추적한다 */
CREATE SUBSCRIPTION xxx ON yyy FOR ROW (INSERT, UPDATE, DELETE);

더 자세한 구성 방법은 아래 프로젝트 샘플에 있다.

  • 시작 | 프로그램 | Embarcadero RAD Studio Alexandria | Samples 를 열고, Object Pascal\Database\FireDAC\Samples\DBMS Specific\InterBase\ChangeView\Generic 폴더로 이동한다.

 

4.2 오라클 CQN (Oracle CQN)

Continuous Query Notification (CQN) 기능은 Oracle에 있는 데이터 변경 공지 기능이다.  자세한 내용은 Continuous Query Notification를 참고.

Oracle의 CQN 기능을 구성하려면 아래 사항을 고려해야 한다.

  • Oracle 클라이언트에  change notification 권한(privilege)이 있어야 한다. 사용자에게 이 권한을 제공하는 코드는 다음과 같다.
    /* change notification 권한(privilege)을 xxx Oracle 사용자에게 부여한다 */
    GRANT DBMS_CHANGE_NOTIFICATION TO xxx;
  • SQL 프로퍼티에 있는 SELECT SQL 문에는 해당 기반 테이블의 ROWID 컬럼이 반드시 있어야 한다. 예문: SELECT t.ROWID, t.* FROM table t.

    주의ROWID는 데이터베이스 안에서 행(row)을 식별하는 고유 필드이다. 이 값은 테이블에 행이 추가(insert)될 때 생성되고, 삭제(remove)될 때 파괴된다. ROWID는 몇가지 중요한 용도로 사용된다. 예를 들어 행(row)하나를 가장 빠르게 접근할 수 있다.
     
  • TFDEventAlerter 오브젝트의 프로퍼티를 아래와 같이 설정해야 한다.
    • Options.Kind 프로퍼티에는 QueryNotifies를 지정한다.
    • SubscriptionName 프로퍼티에는 무슨 값이든 넣어야 한다. 비워두면 안된다. 이것이 비어있으면 쿼리는 증가분만 반영하는 것이 아니라 전체 새로고침을 한다.

더 자세한 내용은 FireDAC Oracle CQN 샘플을 참고.

4.2.1 오라클의 알려진 이슈 (Oracle Known Issues)

11.2 클라이언트 소프트웨어의 일부 버전에서는 11.2 데이터베이스로부터 오는 변경 공지, OCI 콜백, 고급 큐 (AQ, Advanced Queuing) 공지를 받지 못하는 이슈가 있다. Oracle이 알고 있는 이슈이며 자세한 내용은 Oracle 페이지를 참고한다.

 

4.3 MS-SQL (Microsoft SQL)

MS-SQL 데이터베이스에 있는 데이터 변경 공지 기능을 구성하는 더 자세한 방법은 아래 프로젝트 샘플에 있다.

  • 시작 | 프로그램 | Embarcadero RAD Studio Alexandria | Samples 를 열고, Object Pascal\Database\FireDAC\Samples\DBMS Specific\MSSQL\QueryNotify 폴더로 이동한다.

 

5 기타 자료 (See Also)

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

이 토의에 참여하세요

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

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...

중요한 정보

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