변경된 데이터 수집을 위한 방법
프로그램을 개발하다보면 변경된 데이터를 반영하기 위해 데이터를 조회해 오는 기술들이 필요로 할 때가 있습니다. 먼저 이러한 상황이 쓰여야하는 예를 들어보면 아래와 같은 상황이 있겠습니다.
- 실시간으로 바뀌는 환율및 주가 정보를 가져와서 반영해야 하는 경우
- IOT 시스템에서 감지된 실시간 센서 정보를 반영해야 하는경우
- 신규 주문 혹은 주문 변경이 감지되었을때 알림을 보내야하는 경우
이를 위한 가장 대표적인 방법인 Polling
과 LogTailing
2가지에 대해서 정리해보려고합니다.
폴링 (Polling)
Polling은 대부분 알고 계시고 간단한 방법일텐데 정기적으로 데이터 수집하는 방식으로, 주기적으로 대상 시스템에 요청을 보내 데이터의 변경을 감지합니다. 예를 들어, 매 분 아래와 같은 쿼리 호출을 통해 변경된 환율 데이터를 가지고 올 수 있을것입니다.
select *
from exchg_rate
where mod_dt >= ${이전 변경시간}
장점
- 구현이 간단합니다.
단점
- 예약된 주기로 데이터를 가지고 오기때문에 실시간으로 변하는 정확한 데이터 감지는 어려울 수 있습니다.
로그 테일링 (LogTailing)
Log Tailing은 로그 파일의 실시간 업데이트를 감지하는 방식으로, 데이터의 변경이 발생하는 즉시 감지 할 수 있습니다. 일반적으로 DB 변경 log 를 감지하는 CDC (Capture Data Change)를 사용해 구현 할 수 있습니다.
장점
- 로그 파일의 변경을 모니터링하여 변경된느 모든 이벤트를 감지할 수 있습니다.
단점
- 구현이 간단하지 않을수 있습니다.
- 실시간 데이터가 전송되기 때문에 변경이 매우 잦은경우 네트워크 부하가 발생할 수 있습니다.
어떤 기술을 사용해야 할까?
위에서 알아본것과 같이 각각의 장/단점이 있기때문에 구현하려는 서비스의 환경에 따라 결정이 나뉘게 될것입니다.
변경되는 모든 데이터들을 실시간으로 빠르게 감지해야하는 서비스의 경우 Log Tailing
을 사용해야 할것이고, 주기적으로 최종 변경된 데이터에 대해서만 감지하면 되는경우에는 Polling
이 유용 할 수 있습니다.
이 뿐 아니라 많은 경우에서는, 두 기술을 혼합하여 사용하는 것이 가장 효과적일 수도 있기때문에 상황에 따라 유연하게 적절한 기술을 선택하여 데이터 수집을 최적화하는 것이 중요합니다.