본문 바로가기
장인으로의 여정/유용한 TIP

CouchDB Changes 피드 완벽 가이드 🚀

by 유기농프로그래밍 2025. 2. 11.
반응형

couchdb

CouchDB의 _changes 피드는 데이터베이스에서 발생한 변경 사항을 실시간으로 추적할 수 있는 강력한 기능입니다. 이를 활용하면 실시간 동기화, 이벤트 기반 트리거, 백업 시스템 구축 등에 활용할 수 있습니다.


📌 목차

  1. _changes API란?
  2. _changes 피드 유형
  3. _changes 활용 사례
  4. _changes 사용 방법
  5. 주의할 점 및 성능 최적화

🔎 _changes API란?

CouchDB의 _changes API는 특정 데이터베이스에서 발생하는 문서 변경 사항을 스트리밍 방식으로 제공합니다. 이를 통해 클라이언트는 변경된 문서의 ID, 수정 시퀀스, 삭제 여부 등을 확인할 수 있습니다.

✅ 즉, 특정 데이터베이스의 변경 사항을 실시간으로 모니터링할 수 있는 API입니다.


📌 _changes 피드 유형

CouchDB의 _changes API는 여러 가지 피드(feed) 유형을 제공합니다.

 

1️⃣ Normal (기본 설정)

  • 변경 사항을 한 번 가져오고 API 호출이 종료됩니다.
  • 지속적인 연결이 필요 없는 경우 적합합니다.

 

2️⃣ Longpoll (긴 폴링)

  • 새로운 변경 사항이 발생할 때까지 대기했다가 데이터를 반환합니다.
  • 즉, 변경이 없으면 응답이 지연됩니다.
  • RESTful 환경에서 실시간 동기화를 원할 때 유용합니다.

 

3️⃣ Continuous (연속 스트리밍)

  • 무한 스트리밍 방식으로 동작하며, 새로운 변경 사항이 발생하면 즉시 클라이언트에 전달됩니다.
  • 웹소켓과 유사한 방식으로 지속적인 변경 모니터링이 필요할 때 사용됩니다.

 

4️⃣ EventSource (이벤트 스트리밍)

  • HTML5 EventSource를 활용한 서버-푸시 방식입니다.
  • HTTP 연결을 유지하면서 변경 사항을 이벤트 형태로 전달합니다.

 


📌 _changes 활용 사례

이 기능을 어떻게 활용할 수 있을까요? 몇 가지 대표적인 사용 사례를 소개합니다.

✅ 1. 실시간 데이터 동기화

  • 모바일 앱이나 웹 애플리케이션에서 오프라인 모드를 지원할 때 유용합니다.
  • 예를 들어, PouchDB와 결합하면 브라우저에서 CouchDB와 쉽게 동기화할 수 있습니다.

 

✅ 2. 이벤트 기반 처리 시스템

  • 데이터가 변경될 때 특정 작업을 트리거할 수 있습니다.
  • 예를 들어, 주문 상태가 변경될 때 알림을 보내는 시스템을 구축할 수 있습니다.

 

✅ 3. 백업 및 감사 로그 시스템

  • 변경 사항을 지속적으로 모니터링하여 별도의 로그 시스템에 저장할 수 있습니다.
  • CouchDB의 Multi-Master Replication과 결합하면 분산된 환경에서도 강력한 백업 시스템을 만들 수 있습니다.

 


📌 _changes 사용 방법

이제 실제로 _changes API를 사용하는 방법을 살펴보겠습니다.

1️⃣ 기본 호출

curl -X GET 'http://localhost:5984/mydatabase/_changes'

🔹 mydatabase에서 모든 변경 사항을 한 번만 가져옵니다.

 

2️⃣ longpoll 피드

curl -X GET 'http://localhost:5984/mydatabase/_changes?feed=longpoll'

🔹 새로운 변경이 발생할 때까지 대기 후 데이터를 반환합니다.

 

3️⃣ continuous 피드

curl -X GET 'http://localhost:5984/mydatabase/_changes?feed=continuous'

🔹 새로운 변경 사항이 생길 때마다 스트리밍 방식으로 즉시 반환합니다.

 

4️⃣ 특정 문서 필터링

curl -X GET 'http://localhost:5984/mydatabase/_changes?filter=mydesign/myfilter'

🔹 특정 문서만 가져오도록 필터링할 수 있습니다.

📢 필터링 기능을 사용하면 네트워크 비용을 줄이고 성능을 최적화할 수 있습니다!

 

📌 since 옵션 값의 종류

1️⃣ 기본값 (since=0)

  • _changes API의 기본 동작이며, 처음부터 모든 변경 사항을 반환합니다.
  • 예제:
    처음부터 모든 변경 사항을 조회합니다.
curl -X GET 'http://localhost:5984/mydatabase/_changes?since=0'

2️⃣ 특정 시퀀스 번호 (since=<sequence_id>)

  • 마지막으로 처리한 변경 사항 이후의 데이터만 가져올 수 있습니다.
  • 예제:
    시퀀스 ID가 10 이후의 변경 사항을 반환합니다.
curl -X GET 'http://localhost:5984/mydatabase/_changes?since=10'

 

3️⃣ latest (since=now)

  • API 호출 시점을 기준으로 이후의 변경 사항만 가져옵니다.
  • 현재 변경 사항은 무시하고, 새로운 변경 사항만 감지하고 싶을 때 유용합니다.
  • 예제: 
  • API 호출 이후 발생하는 변경 사항만 반환합니다.
curl -X GET 'http://localhost:5984/mydatabase/_changes?since=now'

 

📌 주의할 점 및 성능 최적화

✅ _changes API를 효율적으로사용하기 위한 몇 가지 팁을 알아봅시다.

 

1️⃣ 필터(Filter) 활용
→ 불필요한 데이터를 가져오지 않도록 필터를 적용하여 트래픽을 줄이세요.

 

2️⃣ seq (시퀀스) 값을 저장
→ 변경 사항을 추적할 때 마지막 시퀀스 값을 저장하여 불필요한 데이터 요청을 방지하세요.

 

3️⃣ continuous 모드는 주의해서 사용
→ 무한 스트리밍이므로 연결 수가 많아지면 서버 부하가 커질 수 있습니다. 필요할 때만 사용하세요.

 

4️⃣ CouchDB Replication과 함께 활용
→ _changes API를 CouchDB의 복제 기능과 결합하면 더 강력한 실시간 동기화 시스템을 만들 수 있습니다.


🔗 자세히 알아보기

더 자세한 내용은 아래 링크에서 확인할 수 있습니다.

 

🔍 CouchDB _changes API

 

이제 CouchDB의 _changes API를 활용하여 더 강력한 실시간 애플리케이션을 만들어 보세요! 🚀

반응형

댓글