Airtable과 React로 라이브 대시보드 만들기

게시 됨: 2022-03-11

회사가 대기업이든 신생 기업이든 관계없이 사용자와 고객으로부터 데이터를 수집하고 해당 데이터를 보고하거나 시각화하는 것이 비즈니스에 매우 중요합니다.

나는 최근에 브라질에 기반을 둔 원격 의료 스타트업과 함께 일했습니다. 그 임무는 환자를 의료 전문가 및 건강 코치와 연결하여 원격 치료 및 모니터링을 제공하는 것입니다. 핵심 요구 사항은 코치와 의료 전문가가 환자의 정보와 특정 상황과 관련된 가장 중요한 지표인 대시보드를 쉽게 검토할 수 있는 인터페이스를 만드는 것이었습니다.

Typeform과 Airtable을 입력합니다.

서체

Typeform은 설문 조사를 완료하는 사용자에게 반응형 웹 경험을 가능하게 하는 데이터 수집 도구 중 하나입니다. 또한 특히 결합된 경우 설문조사를 보다 지능적으로 만드는 몇 가지 기능이 함께 제공됩니다.

  • 논리 점프
  • 숨겨진 필드

설문조사는 숨겨진 필드의 값으로 미리 시드할 수 있는 URL을 통해 공유할 수 있으며, 이 값은 논리 점프를 구현하고 링크가 있는 사용자의 설문조사 동작을 변경하는 데 사용할 수 있습니다.

에어테이블 용도

Airtable은 스프레드시트-데이터베이스 하이브리드 및 협업 클라우드 플랫폼입니다. 포인트 앤 클릭 기능에 중점을 두었기 때문에 기술이 없는 사용자도 코딩 없이 구성할 수 있습니다. Airtable은 모든 비즈니스 또는 프로젝트에서 다양한 사용 사례를 가지고 있습니다.

다음 용도로 Airtable Base를 사용할 수 있습니다.

  • CRM (고객 관계 관리)
  • HRIS (인사정보시스템)
  • 프로젝트 관리
  • 콘텐츠 기획
  • 이벤트 기획
  • 사용자 피드백

더 많은 잠재적인 사용 사례가 있습니다. 여기에서 Airtable 사례 연구를 탐색할 수 있습니다.

Airtable에 익숙하지 않은 경우 개념적 데이터 모델은 다음과 같이 분류됩니다.

  • 작업 공간 - 베이스 로 구성
  • 기본 - 테이블 로 구성
  • 테이블 - 필드 (열) 및 행으로 구성
  • 보기 - 선택적 필터 및 축소된 필드가 있는 테이블 데이터에 대한 관점
  • 필드 - 필드 유형이 있는 테이블의 열입니다. 필드 유형 에 대한 자세한 내용은 여기를 참조하십시오.

친숙한 스프레드시트 기능으로 클라우드 호스팅 데이터베이스를 제공하는 것 외에도 플랫폼이 강력한 이유는 다음과 같습니다.

Airtable을 사용하는 기술 및 비기술 사용자에 대한 묘사.

비기술적 사용자를 위해 Airtable은 다음을 제공합니다.

  • 사용하기 쉬운 프런트 엔드 인터페이스
  • 전자 메일을 보내고, 데이터 행을 처리하고, 캘린더에서 약속을 예약하는 등의 포인트 앤 클릭 구성으로 생성할 수 있는 자동화
  • 팀이 동일한 베이스 및 테이블에서 협업할 수 있는 여러 유형의 보기
  • Base를 과급하기 위해 시장에서 설치할 수 있는 Airtable 앱

개발자를 위해 Airtable은 다음을 제공합니다.

  • 잘 문서화된 백엔드 API
  • 개발자가 Base 내에서 작업을 자동화할 수 있는 스크립팅 환경
  • Airtable 환경 내에서 실행되는 맞춤형 개발 스크립트를 트리거하여 자동화 기능을 확장할 수도 있는 자동화

여기에서 Airtable에 대해 자세히 알아볼 수 있습니다.

시작하기: Typeform에서 Airtable로

Typeform 설문조사는 이미 클라이언트에서 구성했으며 다음 단계는 해당 데이터가 Airtable에 도착한 다음 대시보드로 전환되는 방법을 계획하는 것이었습니다. 데이터베이스 위에 대시보드를 만들 때 고려해야 할 많은 질문이 있습니다. 데이터를 어떻게 구성해야 합니까? 시각화 전에 어떤 데이터를 처리해야 합니까? Base를 Google Sheets와 동기화하고 Google Data Studio를 사용해야 하나요? 다른 타사 도구를 내보내고 찾아야 합니까?

개발자에게 다행스럽게도 Airtable은 데이터 처리 단계를 처리하기 위한 자동화 및 스크립팅을 제공할 뿐만 아니라 Airtable Apps를 사용하여 Airtable Base 위에 맞춤형 애플리케이션과 인터페이스를 구축할 수 있게 해줍니다.

Airtable의 맞춤형 앱

Airtable의 Custom Apps는 2018년 초 Airtable Blocks SDK가 출시된 이후로 사용되었으며 최근에는 Apps로 이름이 변경되었습니다. Blocks의 출시는 제작자들이 이제 Airtable이 말했듯이 "무한하게 재조합 가능한 레고 키트"를 개발할 수 있는 능력을 갖게 되었다는 점에서 거대했습니다.

최근에는 앱이 변경되면서 Airtable Marketplace에서 앱을 공개적으로 공유할 수도 있게 되었습니다.

Airtable 앱은 기업에 필요에 맞게 조정할 수 있는 무한히 재조합 가능한 레고 키트를 제공합니다.

Airtable에서 사용자 정의 앱을 빌드하려면 JavaScript 개발자는 사용자 인터페이스를 빌드하는 데 가장 널리 사용되는 JavaScript 라이브러리 중 하나인 React를 사용하는 방법을 알아야 합니다. Airtable은 일관된 UI를 신속하게 구축하고 앱 및 해당 구성 요소 내에서 상태를 관리하는 방법을 결정하는 데 큰 도움이 되는 기능적 React 구성 요소 및 후크의 구성 요소 라이브러리를 제공합니다.

자세한 내용은 Airtable의 시작하기 문서를 확인하고 앱의 예는 GitHub의 Airtable을 확인하세요.

Airtable 대시보드 요구 사항

고객팀과 대시보드 목업을 검토한 결과 사용할 데이터 유형이 명확해졌습니다. 대시보드에 텍스트로 표시되는 일련의 대시보드 구성 요소와 시간이 지남에 따라 추적할 수 있는 다양한 메트릭 차트가 필요합니다.

코치와 의료 전문가는 각 환자에 대한 맞춤형 대시보드를 구축할 수 있어야 했기 때문에 차트를 추가 및 제거할 수 있는 유연한 방법이 필요했습니다. 각 환자와 관련된 기타 정적 데이터는 선택한 환자와 상관없이 표시됩니다.

이 경우 대시보드 섹션은 다음과 같이 요약됩니다.

  • 일반 정보 - 환자 이름, 이메일, 전화번호, 선호하는 연락처, 생년월일, 나이
  • 목표 - 설문조사 결과를 기반으로 한 환자의 목표
  • 일부 통계 - BMI, 키 및 체중
  • 의약품 사용 - 환자가 이미 사용하고 있는 모든 처방약 목록
  • 상태 의 가족력 - 특정 상태를 진단하는 데 도움이 됩니다.
  • 차트 - Airtable 대시보드 사용자가 차트를 추가하고 시간 경과에 따라 시각화할 메트릭을 구성할 수 있는 섹션

Airtable 대시보드 모형을 보여주는 이미지.

차트를 제외한 모든 섹션에 접근하는 한 가지 방법은 목표, 의약품 사용 및 가족력에 대한 모든 열을 대시보드에 하드 코딩하는 것입니다. 그러나 그렇게 하면 클라이언트 팀이 Typeform 설문 조사에 새 질문을 추가하거나 개발자가 사용자 지정 앱을 업데이트하지 않고 대시보드에 해당 데이터를 표시하기 위해 Airtable 테이블에 새 열을 추가할 수 없습니다.

이 문제에 대한 보다 우아하고 확장 가능한 솔루션은 특정 대시보드 섹션과 관련된 열에 태그 를 지정하고 테이블 및 필드 모델을 사용할 때 Airtable이 노출하는 메타데이터를 사용하여 해당 열을 검색하는 방법을 찾는 것이었습니다.

이는 사용자에게 표시할 대시보드 섹션과 관련된 테이블의 열에 태그를 지정하는 장소로 필드 설명을 사용하여 달성되었습니다. 그런 다음 Base에 대한 작성자 역할(관리자)만 대시보드에 표시되는 내용을 변경하기 위해 이러한 필드 설명을 수정할 수 있는 기능을 갖도록 할 수 있습니다. 이 솔루션을 설명하기 위해 우리는 주로 일반 정보의 항목과 차트를 표시하는 방법에 중점을 둘 것입니다.

#TAG# 시스템 만들기

대시보드 섹션이 주어지면 일부 섹션에는 재사용 가능한 태그를 만들고 특정 열에는 특정 태그를 만드는 것이 합리적입니다. 환자 이름, 이메일 및 전화번호와 같은 항목의 경우 각 필드 설명에 #NAME# , #EMAIL##PHONE# 이 각각 추가되었습니다. 그러면 다음과 같이 테이블 메타데이터를 통해 해당 정보를 검색할 수 있습니다.

 const name = table ? table.fields.filter(field => field.description?.includes("#NAME#"))

많은 태그가 지정된 열에서 그려야 하는 대시보드 영역의 경우 각 대시보드 섹션에 대해 다음 태그가 있습니다.

  • OBJ - 목표
  • FAM - 가족 역사
  • MED - 의약품 사용
  • CAN - 암과 관련된 가족력
  • 차트 - 차트를 추가하기 위해 출처가 되어야 하는 모든 열. 수량이어야 합니다

또한 테이블의 열 이름을 대시보드에서 수신할 레이블과 분리하는 것이 중요하므로 #TAG# 를 수신한 모든 항목은 필드 설명에서 두 개의 #LABEL# 태그도 수신할 수 있습니다. . 필드 설명은 다음과 같습니다.

필드 설명에서 태그 사용을 보여주는 스크린샷.

#LABEL# 태그가 누락된 경우 테이블에서 열 이름을 표시합니다.

이전 코드 예제로 필드를 검색한 후 다음과 같은 간단한 함수로 설명에 설정된 레이블을 구문 분석할 수 있습니다.

 // utils.js export const setLabel = (field, labelTag = "#LABEL#") => { const labelTags = (field.description?.match(new RegExp(labelTag, "g")) || []).length; let label; if (labelTags === 2) label = field.description?.split(`${labelTag}`)[1]; if (!label || label?.trim() === '') label = field.name; return {...field, label, name: field.name, description: field.description}; }

#TAG# 시스템을 통해 우리는 세 가지 주요 사항을 달성합니다.

  • 테이블의 열 이름(필드)은 원하는 대로 변경할 수 있습니다.
  • 대시보드의 데이터 레이블은 열 이름과 구별될 수 있습니다.
  • 목표, 의약품 사용량, 가족력 및 차트에 대한 대시보드 섹션 은 코드 줄을 건드리지 않고도 클라이언트 팀에서 업데이트할 수 있습니다.

Airtable의 지속 상태

React에서 state를 사용하고 state가 변경될 경우 해당 구성 요소를 다시 렌더링하기 위해 props로 구성 요소에 전달합니다. 일반적으로 이것은 대시보드 구성 요소에 연료를 공급하는 API 호출과 연결되어 있지만 Airtable에는 이미 모든 데이터가 있으므로 보고 있는 환자를 기준으로 표시할 항목을 필터링하기만 하면 됩니다. 또한 상태를 사용하면 대시보드 자체에서 새로 고침 후에도 데이터가 유지되지 않습니다.

그렇다면 대시보드를 필터링된 상태로 유지하기 위해 새로 고침 후에도 값을 유지하려면 어떻게 해야 할까요? 다행히 Airtable은 대시보드에 앱 설치를 위한 키-값 저장소를 유지 관리하는 useGlobalConfig 라는 후크를 제공합니다. 대시보드 구성 요소에 연료를 공급하기 위해 앱이 로드될 때 이 키-값 저장소에서 값을 검색하는 논리를 구현하기만 하면 됩니다.

useGlobalConfig 후크를 사용할 때 더 유용한 것은 해당 값이 설정되면 대시보드 구성 요소와 하위 구성 요소가 다시 렌더링되므로 일반적인 React 구현에서 상태 변수를 사용하는 것처럼 전역 구성을 사용할 수 있다는 것입니다.

차트 소개

Airtable은 Chart.js(chart-ception)의 React 래퍼인 React Charts를 사용하는 Simple Chart App으로 차트의 예를 제공합니다.

Simple Chart App에는 전체 앱에 대한 하나의 차트가 있지만 Dashboard App에서는 사용자가 자신의 대시보드에서 자신의 차트를 추가 및 제거할 수 있는 기능이 필요합니다. 또한 고객 팀과의 논의에서 특정 측정항목(예: 확장기 및 수축기 혈압)을 동일한 차트에서 더 잘 볼 수 있을 것으로 보입니다.

이를 통해 해결해야 할 다음 항목이 있습니다.

  • 각 사용자의 차트에 대한 지속 상태(또는 전역 구성을 사용하면 더 좋음)
  • 차트당 여러 측정항목 허용

여기에서 Global Config의 기능이 유용합니다. 키-값 저장소를 사용하여 선택한 메트릭과 차트 목록에 대한 기타 항목을 유지할 수 있기 때문입니다. UI에서 차트를 구성할 때 글로벌 구성 업데이트로 인해 차트 구성 요소 자체가 다시 렌더링됩니다. 대시보드 차트 섹션의 경우 대시보드 chart.js 및 단일 chart.js에 중점을 둔 참조용 구성 요소 요지가 있습니다.

각 차트에 전달된 테이블 은 해당 메타데이터가 필드를 찾는 데 사용되는 반면 전달된 레코드dashboard_charts/index.js 를 가져오는 최상위 대시보드 구성 요소에서 선택한 환자가 이미 필터링했습니다.

차트에 대한 드롭다운에 옵션으로 나열된 필드는 useEffect 후크에 다음 줄과 함께 이전에 언급한 #CHART# 태그를 사용하여 가져옵니다.

 // single_chart/index.js … useEffect(() => { (async () => { ... if (table) { const tempFieldOptions = table.fields.filter(field => field.description?.includes('#CHART#')).map(field => { return { ...setLabel(field), value: field.id } }); setFieldSelectOptions([...tempFieldOptions]); } })(); }, [table, records, fields]); ...

위의 코드는 앞에서 참조한 setLabel 함수를 #TAG# 와 함께 사용하여 #LABEL# 태그에 제공된 모든 항목을 추가하고 필드 드롭다운의 옵션에 대해 표시하는 방법을 보여줍니다.

차트 구성 요소는 React Chart와 함께 표시되는 Chart.js에서 제공하는 다축 기능을 활용합니다. 데이터 세트와 차트 유형(선 또는 막대)을 추가할 수 있는 사용자 기능으로 UI를 통해 확장했습니다.

이 경우 전역 구성을 사용하는 핵심은 각 키가 문자열 | 부울 | 번호 | 널 | 글로벌 구성 배열 | GlobalConfigObject(글로벌 구성 값 참조 참조).

차트당 유지 관리할 다음 항목이 있습니다.

  • 자동 생성되고 사용자가 이름을 변경할 수 있는 chartTitle
  • 각 항목이 있는 필드 배열:
    • Airtable에서 fieldId로 필드
    • 한 줄로 chartOption | Chart.js 문서가 나타내는 바와 같이 막대
    • colorUtils에서 Airtable 색상 으로 색상
    • 16진수 는 Airtable 색상과 관련된 16진수 코드입니다.

이를 관리하기 위해 전역 구성 키와 값을 맨 아래로 설정하는 대신 이 데이터를 개체로 문자열화하는 것이 가장 편리하다는 것을 알았습니다. 환자별로 기록을 필터링하기 위한 전역 구성 값과 자동 완성 필터링 구성 요소를 지원하는 데 사용되는 일부 관련 변수가 포함된 아래 예(요점의 globalConfig.json)를 참조하세요(react-bootstrap-typeahead 덕분에).

 { "xCharts": { "chart-1605425876029": "{\"fields\":[{\"field\":\"fldxLfpjdmYeDOhXT\",\"chartOption\":\"line\",\"color\":\"blueBright\",\"hex\":\"#2d7ff9\"},{\"field\":\"fldqwG8iFazZD5CLH\",\"chartOption\":\"line\",\"color\":\"blueLight1\",\"hex\":\"#9cc7ff\"}],\"chartTitle\":\"Grafico criado em 11/15/2020, 2:37:56 AM\"}", "chart-1605425876288": "{\"fields\":[{\"field\":\"fldGJZIdRlq3V3cKu\",\"chartOption\":\"line\",\"color\":\"blue\",\"hex\":\"#1283da\"}],\"chartTitle\":\"Grafico criado em 11/15/2020, 2:37:56 AM\"}", "chart-1605425876615": "{\"fields\":[{\"field\":\"fld1AnNcfvXm8DiNs\",\"chartOption\":\"line\",\"color\":\"blueLight1\",\"hex\":\"#9cc7ff\"},{\"field\":\"fldryX5N6vUYWbdzy\",\"chartOption\":\"line\",\"color\":\"blueDark1\",\"hex\":\"#2750ae\"}],\"chartTitle\":\"Grafico criado em 11/15/2020, 2:37:56 AM\"}", "chart-1605425994036": "{\"fields\":[{\"field\":\"fld9ak8Ja6DPweMdJ\",\"chartOption\":\"line\",\"color\":\"blueLight2\",\"hex\":\"#cfdfff\"},{\"field\":\"fldxVgXdZSECMVEj6\",\"chartOption\":\"line\",\"color\":\"blue\",\"hex\":\"#1283da\"}],\"chartTitle\":\"Grafico criado em 11/15/2020, 2:39:54 AM\"}", "chart-1605430015978": "{\"fields\":[{\"field\":\"fldwdMJkmEGFFSqMy\",\"chartOption\":\"line\",\"color\":\"blue\",\"hex\":\"#1283da\"},{\"field\":\"fldqwG8iFazZD5CLH\",\"chartOption\":\"line\",\"color\":\"blueLight1\",\"hex\":\"#9cc7ff\"}],\"chartTitle\":\"New Chart\"}", "chart-1605430916029": "{\"fields\":[{\"field\":\"fldCuf3I2V027YAWL\",\"chartOption\":\"line\",\"color\":\"blueLight1\",\"hex\":\"#9cc7ff\"},{\"field\":\"fldBJjtRkWUTuUf60\",\"chartOption\":\"line\",\"color\":\"blueDark1\",\"hex\":\"#2750ae\"}],\"chartTitle\":\"Grafico criado em 11/15/2020, 4:01:56 AM\"}", "chart-1605431704374": "{\"fields\":[{\"field\":\"fld7oBtl3iiHNHqoJ\",\"chartOption\":\"line\",\"color\":\"blue\",\"hex\":\"#1283da\"}],\"chartTitle\":\"Grafico criado em 11/15/2020, 4:15:04 AM\"}" }, "xPatientEmail": "[email protected]", "xTypeaheadValue": "Elle Gold ([email protected])", "xSelectedValue": "[{\"label\":\"Elle Gold ([email protected])\",\"id\":\"[email protected]\",\"name\":\"Elle Gold\",\"email\":\"[email protected]\"}]" }

참고: 위에 포함된 모든 데이터와 아래 애니메이션에 포함된 데이터는 실제 환자 데이터가 아닙니다.

최종 결과는 다음과 같습니다.

Airtable 대시보드 UI의 애니메이션 표시.

Typeahead는 어떻습니까?

환자별로 필터링하려면 환자를 선택한 다음 이 환자를 기준으로 기록을 필터링하는 방법이 필요했습니다. 이 섹션에서는 이것이 어떻게 달성되었는지 검토합니다.

typeahead의 경우 react-bootstrap-typeahead가 쉬운 선택이었습니다. 남은 단계는 typeahead 옵션을 준비하고, 스타일 지정 및 로드 부트스트랩을 위한 Airtable 입력과 혼합하고, 메뉴에 대한 몇 가지 다른 스타일을 사용하는 것뿐이었습니다. 즐겨 사용하는 구성 요소 라이브러리에서 Airtable 앱으로 구성 요소를 드롭하는 것은 일반적인 React 웹 개발처럼 간단하지 않습니다. 그러나 모든 것이 예상대로 보이도록 하는 몇 가지 추가 단계만 있습니다.

최종 결과는 다음과 같습니다.

환자별 필터 기능을 보여주는 애니메이션 GIF.

Airtable 입력을 렌더링하고 모든 스타일을 일관되게 유지하기 위해 react-bootstrap-typeahead는 renderInput 소품과 함께 제공됩니다. 여기에서 구성 요소의 렌더링을 수정하는 방법에 대해 자세히 알아보세요.

부트스트랩 스타일의 경우 메뉴 항목을 재정의하기 위해 Airtable에서 다음 두 가지 유틸리티를 사용했습니다.

  • loadCSSFromString
  • loadCSSFromURLAsync

자동 완성 구현의 발췌문은 요지에서 frontend.js를 참조하십시오.

이 줄은 부트스트랩을 전역적으로 로드하는 데 사용되었습니다.

 // frontend/index.js loadCSSFromURLAsync('https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css');

친숙한 부트스트랩 모양과 느낌을 얻기 위해 호버 또는 스타일 변경 링크( <a></a> )에서 스타일 변경을 처리하는 것과 같은 몇 가지 추가된 논리를 확인할 수 있습니다. 여기에는 사용자가 대시보드를 떠나거나 페이지를 새로 고치거나 이 대시보드를 다른 사람과 공유하려는 경우 앱이 대시보드에서 선택한 환자를 유지하도록 자동 완성 및 레코드 필터링에 대한 글로벌 구성 값 설정 처리도 포함됩니다. 앱. 이것은 또한 사용자가 다른 환자를 선택하거나 다른 차트를 사용하여 동일한 Airtable 대시보드에 이 동일한 앱의 여러 복사본을 나란히 설치할 수 있도록 합니다.

Airtable의 대시보드는 Base의 모든 사용자도 사용할 수 있으므로 대시보드의 이러한 사용자 지정 앱 설치는 동시에 대시보드를 보고 있는 사용자와 상관없이 동일한 환자 및 차트로 필터링됩니다.

지금까지 다룬 내용을 요약해 보겠습니다.

  1. Airtable을 사용하면 비기술 사용자와 기술 사용자가 Airtable에서 협업할 수 있습니다.
  2. Typeform은 비기술적 사용자가 Typeform 결과를 Airtable에 매핑할 수 있도록 하는 Airtable 통합과 함께 제공됩니다.
  3. Airtable 앱은 시장에서 선택하거나 맞춤형 앱을 구축할 때 Airtable Base를 강화하는 강력한 방법을 제공합니다.
  4. 개발자는 이러한 앱으로 상상할 수 있는 거의 모든 방식으로 Airtable을 빠르게 확장할 수 있습니다. 위의 예제는 설계하고 구현하는 데 단 3주가 걸렸습니다(물론 기존 라이브러리의 엄청난 도움으로).
  5. #TAG# 시스템을 사용하면 개발자가 코드를 변경할 필요 없이 대시보드를 수정할 수 있습니다. 이에 대한 더 나은 사용 사례와 더 나쁜 사용 사례가 있습니다. 이 전략을 사용하는 경우 작성자 역할에 대한 권한을 제한해야 합니다.
  6. 전역 구성을 사용하면 개발자가 앱 설치 내에서 데이터를 유지할 수 있습니다. 이것을 상태 관리 전략에 혼합하여 구성 요소에 대한 데이터를 시드하십시오.
  7. 다른 라이브러리 및 프로젝트의 구성 요소를 Airtable 앱으로 직접 끌어다 놓기를 기대하지 마십시오. 스타일은 Airtable에서 제공하는 loadCSSFromStringloadCSSFromURLAsync 유틸리티를 사용하여 로드할 수 있습니다.

미래 경쟁력

보다 정교한 미들웨어 사용

Typeform 및 Airtable을 사용하면 열에 대한 질문 매핑을 구성하는 것이 쉽고 비용 효율적입니다.

그러나 한 가지 큰 단점이 있습니다. Airtable에 매핑된 100개 이상의 질문에 대한 설문조사가 있고 매핑을 수정해야 하는 경우 전체 매핑을 삭제하고 다시 시작해야 합니다. 이것은 분명히 이상적이지 않지만 무료 통합의 경우 이를 처리할 수 있습니다.

다른 옵션은 Zapier(또는 이와 유사한) 통합이 Typeform과 Airtable 간의 데이터를 관리하도록 하는 것입니다. 그러면 처음부터 시작하지 않고도 모든 열에 대한 질문 매핑을 수정할 수 있습니다. 여기에는 자체 비용 고려 사항도 포함됩니다.

여기에서 배우고 전달한 일부 교훈이 Airtable로 솔루션을 구축하려는 다른 사람들에게 도움이 되기를 바랍니다.

마지막으로 이 기사에서 논의된 파일의 요지를 확인할 수 있습니다.