소개
시도하고자 했던 것과 그 이유를 알려주세요.
NOTION DB UPDATE 각 팀원 작성 시 '작성자 본인'만 인지, 팀원은 인지하기 어려움
다른 숫자를 보여주는 Google 스프레드 시트의 스크린 샷
진행 방법
어떤 도구를 사용했고, 어떻게 활용하셨나요?
N8N 기본 세팅
그록, 제미나이, 클로드 등에 "워크 플로우 설계" 질문
워크 플로우
TRIGGER : 매일 아침 10시 (9시 출근하여 작성할 수도 있으니)
LOAD LASTRUN : 전날 오전 9시~금일 오전 9시 기준
이 코드는 워크플로우의 마지막 실행 시각을 기록하고 관리하는 간단한 스크립트입니다.
주요 기능
현재 시각 기록: 코드가 실행되는 현재 시각을
now변수에 저장합니다.이전 실행 시각 로드:
workflowStaticData.lastRun을 통해 이전 워크플로우 실행 시각을 불러옵니다.workflowStaticData는 워크플로우 전체에서 공유되고 지속되는 데이터를 저장하는 공간입니다.첫 실행 여부 판단:
lastRun값이 없으면 (즉, 이전 실행 기록이 없으면) 첫 실행으로 판단합니다.마지막 실행 시각 업데이트: 현재 시각을
workflowStaticData.lastRun에 새로 저장하여, 다음 번 워크플로우 실행 시 이 시각이 '이전 실행 시각'이 되도록 업데이트합니다.결과 출력: 다음 정보들을 JSON 형태로 출력합니다.
lastRun: 이전 실행 시각 (첫 실행이라면 현재 시각)isFirstRun: 첫 실행 여부 (true/false)currentTime: 현재 실행 시각
노션 DB페이지 아이디 연결
COMPUTE DIFF 코드 노드 : 전날 오전 9시~금일 오전 9시 기준
변경된 내용을 찾아
변경 전 --> 변경 후 데이터 표시 ex) 제안 전 --> 제안 완료
컴퓨터에서 코드 편집기의 스크린 샷
주요 기능
이전 데이터 저장 및 활용:
nodeStaticData.prevData를 사용하여 이전 워크플로우 실행 시점의 노션 데이터를 저장하고, 이를 현재 데이터와 비교하는 데 사용합니다.데이터 초기화: 처음 실행되거나 이전 데이터가 없을 경우, 현재 노션 데이터를
prevData에 저장하고 변경사항은 보고하지 않습니다.동적인 필드 감지: 코드에 필드를 미리 지정할 필요 없이, 현재 데이터와 이전 데이터에서 노션의 기본 시스템 필드(
id,created_time등)를 제외한 모든 사용자 정의 필드를 자동으로 찾아냅니다. 덕분에 노션 데이터베이스 스키마가 변경되어도 유연하게 작동할 수 있습니다.데이터 정규화: 노션 데이터는 복잡하고 중첩된 구조를 가질 수 있습니다.
normalizeData함수를 사용하여 다양한 노션 속성 타입(예: 리치 텍스트, 숫자, 선택 옵션)을 비교 가능한 문자열 형태로 변환합니다. 이를 통해 데이터의 내부 구조가 조금 달라도 정확한 비교가 가능합니다.변경사항 감지 (Diff):
각 노션 항목에 대해 현재 버전(
cur)과prevData에 저장된 이전 버전(old) 을 비교합니다.감지된 모든 필드를 반복하며
normalizeData함수를 사용해 값을 비교합니다.필드에서 차이점이 발견되면 해당 필드 이름, 이전 값, 현재 값을 기록합니다.
결과 출력:
항목에서 변경사항이 감지되면 해당 항목의
id와 변경된 내용(diffs)을 포함하는 출력을 생성하여outputs배열에 추가합니다.모든 항목에서 변경사항이 없으면, 변경사항이 없다는 메시지와 함께 디버그 정보를 반환합니다.
영구 데이터 업데이트: 모든 현재 항목을 처리한 후,
nodeStaticData.prevData를 최신 항목 버전으로 업데이트하여 다음 실행을 준비합니다.디버깅 및 로깅: 코드에는 디버깅을 위한
console.log문이 풍부하게 포함되어 있어, 데이터 비교 과정, 감지된 필드, 변경사항 등을 상세히 확인할 수 있습니다.
결론적으로, 이 스크립트는 노션 데이터베이스의 수정사항을 추적하여 실제 데이터 변경이 발생했을 때만 후속 작업
genernate message 코드 노드
코드 편집기의 스크린 샷
워크플로우의 실행 상태와 관련된 상세한 디버그 정보를 포함하는 메시지를 만듭니다.
포함될 수 있는 정보는 다음과 같습니다:
오류 메시지 (
$json.error)일반 상태 메시지 (
$json.message)처리된 아이템 수, 이전 데이터가 있던 아이템 수, 새로운 아이템 수 (
$json.processedItems)확인된 필드 목록 (
$json.fieldsChecked)현재 확인 시각
변경사항 알림 메시지 생성:
입력 데이터
$json에diffs배열이 존재하고 내용이 있는 경우 (즉, 변경사항이 감지된 경우) 이 모드로 진입합니다.노션 항목에서 어떤 필드가 어떻게 변경되었는지를 명확하게 보여주는 메시지를 생성합니다.
변경사항 목록은 "필드: 이전 값 -> 현재 값" 형식으로 구성됩니다.
메시지에는 "노션 행사 정보가 업데이트되었습니다!"와 같은 안내 문구와 함께 변경된 내용, 그리고 확인 시각이 포함됩니다.
텔레그램 메시지
결과와 배운 점
과정 중에 어떤 시행착오를 겪었나요?
cursor ai 와 100 번은 싸웠으나 결론은.... 속았습니다.
안될 것 같은데, 계속 코드를 수정하는데.. 몇 가지 패턴으로 '뫼비우스 띠' 무한 반복.
notion db 전체를 변경 전 vs 변경 후 저장을 하고, 비교를 해야 : 저장을 위한 기능 부재!!
3일 정도 코드 수정 --> 테스트 --> 수정 --> 테스트 하다 깨달음. "저장"을 못하는데, 저 1개라도 기억하고 알려준게 용하다. 5~6개를 수정하면, 1개 정도만 용캐 기억해서 알려주는 수준
앞으로의 계획이 있다면 들려주세요.
팀원분들의 의견 : 꼭 변경 전, 변경 후 정보 불필요할 수도... 요일별로 정보 가져오게 수정하기로
만약 위 기능을 고수해야 한다면
DB를 일자별로 구글 시트 등에 자동 저장 시키고, 비교하게 만들자 (1안)
노션 유료 모델에서는 뭐가 변했는지 알려주는 것이 가능. 이를 활용하여 기획 (2안)
1번. '요일별 '제안' 정보 & '비정기 제안' 내용 : 오전 10시, 오후 3시 노티를 텔레그램 대화방에 알려주는 방향으로 다시 개발해 보기로...