CouchDB의 _changes 피드는 데이터베이스에서 발생한 변경 사항을 실시간으로 추적할 수 있는 강력한 기능입니다. 이를 활용하면 실시간 동기화, 이벤트 기반 트리거, 백업 시스템 구축 등에 활용할 수 있습니다.
📌 목차
- _changes API란?
- _changes 피드 유형
- _changes 활용 사례
- _changes 사용 방법
- 주의할 점 및 성능 최적화
🔎 _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를 활용하여 더 강력한 실시간 애플리케이션을 만들어 보세요! 🚀
'장인으로의 여정 > 유용한 TIP' 카테고리의 다른 글
RESTful API vs GraphQL: 차이점과 선택 기준 (0) | 2025.02.12 |
---|---|
지하철 파업시 실시간 열차 운행정보 보기 (0) | 2024.12.19 |
ubuntu 용량 1TB 하드 200G 인식 => 최대로 인식하게 수정하는 방법 (0) | 2022.02.09 |
댓글