소개
우습게 봤다가 큰 코 다친 느낌입니다.
그까이거 뭐 대충... 하면 될 줄 알았는데, 노드 하나 연결하는 게 보통 일이 아니네요. ㅜㅜ
시작할 때는 큰 꿈을 갖고 시작했습니다.
지번만 에어테이블에 입력하면 뒤에 정보들이 따라서 입력되도록 하는게 최종 목표입니다.
1차적으로 pdf 파일 하나만 드라이브에 저장하면 자동으로 나머지 관련 정보들이 좌라락 저장되도록 하려고 했습니다.
그런데 한 스텝이 진전이 안됩니다.... 욕심이 너무 과했나봅니다.
확 줄여서.. 일단 구글시트에 데이터 저장하면 에어테이블에 입력되도록 하는 것부터 시작했습니다.
저의 큰 실패와 작은 성공을 보시면서 위안 삼으시길 바랍니다.
1차 목표 진행 이력 (큰 실패)
n8n의 AI Agent를 통해 pdf를 읽고 데이터를 정리하게 하려고 했습니다. 그런데 AI agent가 pdf를 직접 읽어서 처리하지 못합니다.
n8n은 pdf를 data extractor로 text로 변환한 후에 처리합니다.
문제는 이 건축물대장이라는 파일은 거의 그림에 가깝습니다.
이걸 처리해 달라고 하면 data extractor는 이렇게 text를 따 옵니다.
그래서 아무리 클로드에 정리를 요청해도 제대로 못합니다. 심지어 데이터도 틀립니다.
클로드에 직접 pdf를 업로드하면 정말 깔끔하게 처리해 줍니다.
HTTP Request를 통해 클로드를 연결해 봤지만 통하지 않습니다.
결국 이틀동안 헤매다 n8n을 통해 클로드가 pdf를 정리하는 건 포기했습니다.
작은 목표 진행 이력 (작은 성공)
그래서 일단은 쉬운 것부터 해보기로 했습니다.
구글시트에 데이터를 저장하면 에어테이블에 기록하는 워크플로우입니다.
(사실 그냥 카피&페이스트가 더 쉽습니다.) 어디까지나 연습 차원에서~~
데이터를 구글시트에 저장합니다.
저장되는 걸 트리거로 에어테이블에 기록하면 될 줄 알았습니다. 그러나
두 가지 문제가 발생합니다. 제목행을 데이터로 인식합니다.
그리고 빈 칸이 생기면 에러가 발생합니다.
이 두가지를 해결하기 위해 edit 노드가 필요합니다. (클로드가 알려줌)
// 입력 데이터를 처리하는 코드 const inputData = $input.all(); // n8n의 입력 데이터 배열 가져오기 // JSON 데이터 변환 및 제목 행 제거 const jsonData = inputData.map(item => item.json); // 입력 데이터의 JSON 추출 const filteredData = jsonData.slice(1); // 제목 행(첫 번째 객체) 제거 // 모든 항목 확인 및 비어 있는 값 처리 const processedData = filteredData.map(item => { // 모든 키를 순회하며 비어 있는 값을 0으로 설정 Object.keys(item).forEach(key => { item[key] = item[key] !== undefined && item[key] !== null && item[key] !== "" ? item[key] : 0; }); return { json: item }; // n8n에서 사용 가능한 형식으로 반환 }); return processedData;
그러면 제목행도 빼주고 빈칸은 0으로 반환해 줍니다.
이번엔 데이터 중복이 문제입니다.
이미 에어테이블에 데이터가 있는데 또 만들어 넣습니다.
이걸 해결하기 위해 compare 노드를 씁니다.
이전의 에어테이블의 지번 항목을 찾고 (Search airtable), 새로 입력하려는 지번을 비교해서 새로 입력하려는 데에만 있는 값만 기록하라(In A only)는 내용입니다.
그러면 새로운 데이터만 입력하게 됩니다.
정말 단순한 한 가지만 진행하는데도 이렇게나 고민하게 될 줄 몰랐습니다.
그래도 일단 뭐라도 하나 실행되는 걸 확인했다는데 의의를 두고 다음 단계로 넘어가려고 합니다.
최종 목표를 향해 다음단계를 진행하러 갑니다.
모두들 즐거운 설 명절 (n8n과 함께) 보내세요~~