메인 콘텐츠로 건너뛰기
앱이 작동합니다. 마지막 단계는 마켓플레이스를 위한 설명을 추가하고 게시하는 것입니다.

마켓플레이스 메타데이터 추가

application config는 마켓플레이스에 표시되는 식별 정보를 포함합니다. 작성자, 카테고리, 로고, 지원 링크 등이 여기에 포함됩니다. public/에 로고를 넣고 logoUrl로 참조하세요.
import { defineApplication } from 'twenty-sdk/define';

export default defineApplication({
  universalIdentifier: APPLICATION_UNIVERSAL_IDENTIFIER,
  displayName: 'Document Generator',
  description:
    'Create reusable document templates and generate personalized documents from your CRM records.',
  logoUrl: 'public/document-generator.svg',
  author: 'Twenty',
  category: 'Productivity',
  websiteUrl: 'https://docs.twenty.com/l/ko/developers/extend/apps',
  termsUrl: 'https://www.twenty.com/terms',
  emailSupport: 'contact@twenty.com',
  issueReportUrl: 'https://github.com/twentyhq/twenty/issues',
});
기본 역할은 자체 파일에서 defineApplicationRole()로 선언합니다. 이제 여기에서는 defaultRoleUniversalIdentifier를 더 이상 전달하지 않습니다.
앱을 쉽게 찾을 수 있도록 package.jsontwenty-app 키워드도 추가하세요:
{ "keywords": ["twenty-app"] }

갤러리 스크린샷 추가

마켓플레이스 등록 정보는 스크린샷만으로도 충분히 어필됩니다. 몇 개의 PNG 파일을 public/gallery/에 넣고 screenshots로 참조하세요. 그러면 목록 페이지에서 갤러리로 렌더링됩니다.
export default defineApplication({
  // ...identity from above
  screenshots: [
    'public/gallery/01-generated-document.png',
    'public/gallery/02-command-menu.png',
    'public/gallery/03-template-editor.png',
    'public/gallery/04-documents.png',
  ],
});
핵심 효과부터 보여 주세요. 첫 번째 스크린샷은 최종 결과(생성된 문서)로 두고, 그다음에 어떻게 트리거되고 작성되는지를 보여 주세요. 선명한 고해상도 캡처를 사용하세요. 사용자가 가장 먼저 보게 되는 요소입니다.
README.md도 동일한 방식으로 다뤄 주세요. npm과 GitHub에서의 첫 페이지 역할을 합니다. 가치 제안과 스크린샷으로 시작하고 핵심 기능을 나열한 다음, 빌드 세부 정보는 접힌 영역 아래에 배치하세요.

출시 전 점검

CI에서 수행하는 것과 동일한 검증 단계를 실행하세요:
yarn lint          # oxlint
yarn typecheck     # tsgo
yarn test:unit     # unit tests
yarn twenty dev --once --dry-run   # preview the metadata diff
드라이 런은 서버에서 실제로 적용하지 않고 무엇이 변경될지를 그대로 출력합니다. 마지막으로 확인하기에 좋은 방법입니다. 테스트동기화 및 복구를 참조하세요.

게시

# Public app → npm (default)
yarn twenty app:publish

# Or deploy privately to a specific server's registry
yarn twenty app:publish --private -r <remote>
app:publish는 기본적으로 빌드하고 npm에 게시합니다. --private는 대신 Twenty 서버의 프라이빗 레지스트리에 tarball을 업로드합니다. 배포된 앱을 인스턴스의 마켓플레이스에 표시하려면 카탈로그 동기화를 트리거하세요:
yarn twenty dev:catalog-sync -r <remote>
자세한 내용과 릴리스 체크리스트는 게시를 참조하세요.

앱을 만들었습니다 🎉

여섯 개의 장에서 SDK의 대부분 기능 영역을 사용했습니다:
  • 데이터를 모델링하기 위한 객체, 필드, 그리고 관계
  • AI 도구, 워크플로 작업, HTTP 라우트로 노출되는 로직 함수
  • UI를 위한 뷰, 내비게이션, 커맨드, 프런트 컴포넌트
  • 자연어 생성을 위한 에이전트 + 스킬
  • 마켓플레이스 메타데이터와 게시 플로우
완성된 앱은 packages/twenty-apps/examples/document-generator에 있습니다.

다음 단계

데이터 참고

모든 필드 타입, 관계, 인덱스 옵션.

로직 참고

Cron 및 데이터베이스 이벤트 트리거, 키-값 저장소, OAuth 연결.

레이아웃 참고

페이지 레이아웃, 대시보드 위젯, 그 외 다양한 UI 영역.

작업

CLI, 테스트, 리모트, CI.