민감한 정보를 암호화하지 않고 데이터베이스에 저장하는 것은 좋은 일이 아니지만, 애플리케이션 코드의 버그나 데이터베이스의 잘못된 구성으로 인해 실수로 민감한 정보가 유출된 적이 있으신가요? 민감한 정보가 감지될 때마다 알림을 받아 즉각적인 조치를 취할 수 있는 방법이 있다면 어떨까요?
이제부터 이 기능을 활용하는 방법을 살펴보겠습니다. 카우치베이스 이벤트 서비스를 사용하여 문서의 변경 사항을 감지하는 자바스크립트 함수를 작성할 수 있습니다. 특히, 문서에 주민등록번호가 나타나지 않아야 할 때 나타나는지 살펴볼 것입니다.
앞으로 이벤트는 다음과 같은 다양한 사용 사례 중 하나에 불과하다는 점에 유의하는 것이 중요합니다. 카우치베이스. 이벤트 서비스는 다음 날짜부터 사용할 수 있습니다. 카우치베이스 서버 5.5 를 출시했습니다.
N1QL 구조는 아직 개발 중이라는 점에 유의하세요. 이 기능은 개발 목적으로만 사용되며 프로덕션 환경에서는 사용해서는 안 됩니다.
Node.js 및 Express 프레임워크로 RESTful API 만들기
이 예에서는 실제로 알림을 보내지 않습니다. 이는 완전히 새로운 문제입니다. 대신 함수가 트리거될 때마다 데이터베이스가 핑할 샘플 API를 만들겠습니다. 이 API는 메시지를 출력하지만 실제로는 푸시 알림이나 이메일을 보내도록 할 것입니다.
컴퓨터 어딘가에 새 디렉터리를 만들고 해당 디렉터리에서 다음을 실행합니다:
1 |
npm init -y |
위의 명령은 새 Node.js 프로젝트, 더 구체적으로는 package.json 파일을 생성합니다. 이 예제에서 API는 Couchbase를 사용할 필요는 없지만 HTTP 요청을 수신하기 위한 프레임워크가 필요합니다.
프로젝트 내에서 다음 명령을 실행합니다:
1 |
npm 설치 express body-파서 --저장 |
위의 명령은 Express와 JSON 형식의 요청 본문을 수락하기 위한 미들웨어를 설치합니다.
이제 app.js 파일을 열고 다음 자바스크립트 코드를 포함하세요:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
const Express = require("express"); const 바디파서 = require("body-parser"); var 앱 = Express(); 앱.사용(바디파서.json()); 앱.사용(바디파서.urlencoded({ 확장: true })); 앱.post("/알림", (요청, 응답) => { 콘솔.로그("POST /알림"); 에 대한(키 in 요청.body) { 만약(요청.body.hasOwnProperty(키)) { 콘솔.로그(JSON.parse(키)); } } 응답.보내기("보낸"); }); var 서버 = 앱.듣기(3000, () => { 콘솔.로그("듣기..."); }); |
이 튜토리얼의 핵심은 Node.js로 API를 만드는 것이 아니므로 너무 자세히 설명하지 않겠습니다. 기본적으로 단일 API 엔드포인트를 설정하고, 들어오는 데이터를 파싱하여 콘솔에 출력하는 것입니다. 이 작업은 Node.js에 국한되지 않고 모든 기술로 수행할 수 있으며 실제로는 엔드포인트가 트리거될 때 일종의 메시지를 보내게 될 것입니다.
이제 중요한 기능, 즉 Couchbase Server의 기능에 집중할 수 있습니다.
NoSQL 문서 변경 사항을 수신하는 함수 만들기
앞서 말씀드린 것처럼 이벤트 서비스는 이제 막 출시된 Couchbase 5.5부터 사용할 수 있습니다.
현재 이벤트 서비스를 성공적으로 사용하려면 두 개의 버킷이 필요합니다.
제 예제에서는 예제 버킷과 예제 이벤트 버킷. 둘 다 표준 버킷이지만 하나는 메타데이터를 저장하는 데 사용됩니다.
기본적으로 보안상의 이유로 어떤 요청도 카우치베이스 서버를 벗어날 수 없으므로 카우치베이스 서버에서 알림 API로 요청을 할 것이므로 화이트리스트를 구성해야 합니다.
에서 설정 영역에서 카우치베이스 대시보드의 고급 N1QL 설정 섹션에 추가합니다. 저는 Couchbase와 API를 모두 로컬에서 실행하고 있으므로 호스트와 포트만 추가하면 됩니다. 설정이 약간 다를 수 있습니다.
이제 민감한 데이터를 감시하는 기능을 만들 수 있습니다.
새 기능을 추가할 때는 버킷 세부정보와 일치하도록 정보를 입력하세요. 함수를 구동하는 로직은 다음에 작성합니다.
기능을 사용할 수 있게 되면 JavaScript를 편집하려고 합니다. 기본적으로 다음과 비슷한 내용이 표시됩니다:
1 2 3 4 5 |
함수 온업데이트(doc, 메타) { 로그('document', doc); } 함수 OnDelete(메타) { } |
우리의 목표는 문서가 삭제되는 것이 아니라 업데이트될 때 함수를 트리거하는 것입니다. 여러 가지 일이 일어나야 합니다.
- 생성하거나 변경했는지 확인합니다.
사람
문서. - 보세요.
ssn
속성을 사용하여 정규식이 주민등록번호로 유효성을 검사할 수 있는지 확인합니다. - API에 cURL 요청을 보냅니다.
위의 단계를 설명하는 코드는 아래에서 확인할 수 있습니다:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
함수 온업데이트(doc, 메타) { 로그('document', doc); 만약(doc.유형 == '사람') { var isSSN = /^(?:\d{3}-\d{2}-\d{4}|\d{2}-\d{7})$/; 만약(isSSN.테스트(doc.ssn)) { var http = 선택 CURL( "http://localhost:3000/notify", { "요청": "POST", "header": "application/json", "데이터": $메타 } ); http.실행 쿼리(); 로그('ssn', '원시 SSN에 대한 알림 보내기') } } } |
cURL 요청을 발행하기 위해 N1QL 쿼리를 사용하고 있음을 주목하세요. 이 방법만이 유일한 방법은 아니지만 N1QL 문서.
이 예에서는 문서 자체를 API로 전송하고 주민등록번호를 추가로 노출하는 대신 문서 키가 포함된 메타 정보를 전송합니다. 그러면 수신자는 키를 기반으로 문서를 찾을 수 있습니다.
결론
지금까지 Couchbase Eventing 서비스를 사용하여 함수를 만들고 주민등록번호와 같은 민감한 정보를 감지하는 방법을 살펴보았습니다. 이 예제에서 보여드린 것처럼 데이터베이스 내의 데이터를 변경하거나 알림을 보내는 함수를 만들 수 있습니다.
이벤트 서비스에 대해 자세히 알아보려면 다음 문서를 통해 설명서를 확인하세요. 카우치베이스 개발자 포털 또는 새로운 서비스 발표. 에서 사용할 수 있는 다른 기능에 대해 알아보기 카우치베이스 서버 5.5 릴리스.