메인 콘텐츠로 건너뛰기
대부분의 CRM은 설정 패널을 제공합니다. Twenty는 플랫폼을 제공합니다. 앱은 개발자가 UI가 제공하는 것 이상으로 Twenty를 확장하는 방법입니다. 데이터 모델, 서버 측 로직, UI 컴포넌트, AI 기능을 코드로 정의하고, 이를 하나 이상의 워크스페이스에 배포합니다.

앱이 존재하는 이유

워크플로우는 노코드 자동화를 다룹니다. 하지만 어떤 것들은 코드가 필요합니다. 예를 들어, 커스텀 가격 책정 엔진, 독점 보강 파이프라인, 모든 레코드 업데이트 시 실행되는 규정 준수 검사, 내부 도구에서 데이터를 가져오는 커스텀 UI 패널 등이 있습니다. 앱을 통해 이러한 것들을 일급 확장 기능으로 구축할 수 있습니다. 플랫폼 외부에서 API에만 의존하는 불안정한 스크립트가 아니라, 타입 시스템, 권한 모델, UI에 완전하게 접근할 수 있는 플랫폼 위에서 실행되는 코드로 만들 수 있습니다.

앱이 정의할 수 있는 것

앱은 twenty-sdk를 사용해 엔티티를 선언하는 TypeScript 패키지입니다.
엔티티하는 일
객체 & 필드새 데이터 테이블과 기존 객체의 필드 — 기본 제공 항목과 동일하게 처리됩니다.
로직 함수HTTP 라우트, cron 스케줄 또는 데이터베이스 이벤트로 트리거되는 서버 측 TypeScript 코드
프런트 컴포넌트Twenty의 UI(사이드 패널, 위젯, 명령 메뉴) 안에 샌드박싱된 React 컴포넌트가 렌더링됩니다.
스킬 & 에이전트AI 기능 — 재사용 가능한 지침과 자율형 어시스턴트
뷰 & 내비게이션사전 구성된 목록 뷰와 사이드바 메뉴 항목
모든 것은 빌드 시점에 AST 분석을 통해 감지되며, 설정 파일이나 등록용 상용구 코드는 필요 없습니다. 어떤 .ts 파일에든 export default defineObject(...)를 추가하면 SDK가 이를 인식합니다.

실행 방식

  • 로직 함수는 호스트와 분리된 격리된 Node.js 프로세스에서 실행됩니다. 이들은 앱의 역할 권한 범위로 제한된 타입이 지정된 API 클라이언트를 통해 데이터에 접근합니다.
  • 프런트 컴포넌트는 Remote DOM을 사용하는 Web Worker에서 실행됩니다 — 메인 페이지와는 샌드박스로 격리되어 있지만 네이티브 DOM 요소를 렌더링합니다(iframe이 아님).
  • 권한은 API 수준에서 강제 적용됩니다. 앱은 자신의 역할이 허용하는 것만 볼 수 있습니다.

개발자 경험

여러분은 로컬 머신에서 TypeScript 프로젝트로 앱을 작성합니다. CLI가 소스 파일을 감시하며 실행 중인 Twenty 서버와 실시간으로 동기화합니다. 파일을 수정하면 1초 안에 UI에서 변경 사항을 확인할 수 있습니다. 스키마가 변경되면 타입이 지정된 API 클라이언트가 자동으로 재생성됩니다. 준비가 되면 yarn twenty app:publish --private로 프로덕션 서버에 배포하거나, yarn twenty app:publish로 앱을 npm과 Twenty 마켓플레이스에 게시할 수 있습니다.

첫 번째 앱 빌드하기

3단계 워크스루 — 스캐폴딩, 로컬 서버 실행, 변경 사항 동기화.