앱이 존재하는 이유
워크플로우는 노코드 자동화를 다룹니다. 하지만 어떤 것들은 코드가 필요합니다. 예를 들어, 커스텀 가격 책정 엔진, 독점 보강 파이프라인, 모든 레코드 업데이트 시 실행되는 규정 준수 검사, 내부 도구에서 데이터를 가져오는 커스텀 UI 패널 등이 있습니다. 앱을 통해 이러한 것들을 일급 확장 기능으로 구축할 수 있습니다. 플랫폼 외부에서 API에만 의존하는 불안정한 스크립트가 아니라, 타입 시스템, 권한 모델, UI에 완전하게 접근할 수 있는 플랫폼 위에서 실행되는 코드로 만들 수 있습니다.앱이 정의할 수 있는 것
앱은twenty-sdk를 사용해 엔티티를 선언하는 TypeScript 패키지입니다.
| 엔티티 | 하는 일 |
|---|---|
| 객체 & 필드 | 새 데이터 테이블과 기존 객체의 필드 — 기본 제공 항목과 동일하게 처리됩니다. |
| 로직 함수 | HTTP 라우트, cron 스케줄 또는 데이터베이스 이벤트로 트리거되는 서버 측 TypeScript 코드 |
| 프런트 컴포넌트 | Twenty의 UI(사이드 패널, 위젯, 명령 메뉴) 안에 샌드박싱된 React 컴포넌트가 렌더링됩니다. |
| 스킬 & 에이전트 | AI 기능 — 재사용 가능한 지침과 자율형 어시스턴트 |
| 뷰 & 내비게이션 | 사전 구성된 목록 뷰와 사이드바 메뉴 항목 |
.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단계 워크스루 — 스캐폴딩, 로컬 서버 실행, 변경 사항 동기화.