> ## Documentation Index
> Fetch the complete documentation index at: https://docs.twenty.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 6. 게시

> 마켓플레이스 메타데이터를 추가하고 앱을 게시하세요.

앱이 작동합니다. 마지막 단계는 마켓플레이스를 위한 설명을 추가하고 게시하는 것입니다.

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

[application config](/l/ko/developers/extend/apps/config/application)는 마켓플레이스에 표시되는 식별 정보를 포함합니다. 작성자, 카테고리, 로고, 지원 링크 등이 여기에 포함됩니다. `public/`에 로고를 넣고 `logoUrl`로 참조하세요.

```ts filename="src/application-config.ts" theme={null}
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',
});
```

<Tip>
  기본 역할은 자체 파일에서 `defineApplicationRole()`로 선언합니다. 이제 여기에서는 `defaultRoleUniversalIdentifier`를 더 이상 전달하지 않습니다.
</Tip>

앱을 쉽게 찾을 수 있도록 `package.json`에 `twenty-app` 키워드도 추가하세요:

```json filename="package.json" theme={null}
{ "keywords": ["twenty-app"] }
```

## 갤러리 스크린샷 추가

마켓플레이스 등록 정보는 스크린샷만으로도 충분히 어필됩니다. 몇 개의 PNG 파일을 `public/gallery/`에 넣고 `screenshots`로 참조하세요. 그러면 목록 페이지에서 갤러리로 렌더링됩니다.

```ts filename="src/application-config.ts" theme={null}
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',
  ],
});
```

<Tip>
  핵심 효과부터 보여 주세요. 첫 번째 스크린샷은 최종 결과(생성된 문서)로 두고, 그다음에 어떻게 트리거되고 작성되는지를 보여 주세요. 선명한 고해상도 캡처를 사용하세요. 사용자가 가장 먼저 보게 되는 요소입니다.
</Tip>

`README.md`도 동일한 방식으로 다뤄 주세요. npm과 GitHub에서의 첫 페이지 역할을 합니다.
가치 제안과 스크린샷으로 시작하고 핵심 기능을 나열한 다음, 빌드 세부 정보는 접힌 영역 아래에 배치하세요.

## 출시 전 점검

CI에서 수행하는 것과 동일한 검증 단계를 실행하세요:

```bash filename="Terminal" theme={null}
yarn lint          # oxlint
yarn typecheck     # tsgo
yarn test:unit     # unit tests
yarn twenty dev --once --dry-run   # preview the metadata diff
```

드라이 런은 서버에서 실제로 적용하지 않고 무엇이 변경될지를 그대로 출력합니다. 마지막으로 확인하기에 좋은 방법입니다. [테스트](/l/ko/developers/extend/apps/operations/testing)와
[동기화 및 복구](/l/ko/developers/extend/apps/operations/sync-and-recovery)를 참조하세요.

## 게시

```bash filename="Terminal" theme={null}
# 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을 업로드합니다. 배포된 앱을 인스턴스의 마켓플레이스에 표시하려면 카탈로그 동기화를 트리거하세요:

```bash filename="Terminal" theme={null}
yarn twenty dev:catalog-sync -r <remote>
```

자세한 내용과 릴리스 체크리스트는
[게시](/l/ko/developers/extend/apps/operations/publishing)를 참조하세요.

## 앱을 만들었습니다 🎉

여섯 개의 장에서 SDK의 대부분 기능 영역을 사용했습니다:

* 데이터를 모델링하기 위한 **객체, 필드, 그리고 관계**
* **AI 도구**, **워크플로 작업**, **HTTP 라우트**로 노출되는 **로직 함수**
* UI를 위한 **뷰, 내비게이션, 커맨드, 프런트 컴포넌트**
* 자연어 생성을 위한 **에이전트 + 스킬**
* **마켓플레이스 메타데이터**와 게시 플로우

완성된 앱은
[`packages/twenty-apps/examples/document-generator`](https://github.com/twentyhq/twenty/tree/main/packages/twenty-apps/examples/document-generator)에 있습니다.

## 다음 단계

<CardGroup cols={2}>
  <Card title="데이터 참고" icon="database" href="/l/ko/developers/extend/apps/data/overview">
    모든 필드 타입, 관계, 인덱스 옵션.
  </Card>

  <Card title="로직 참고" icon="bolt" href="/l/ko/developers/extend/apps/logic/overview">
    Cron 및 데이터베이스 이벤트 트리거, 키-값 저장소, OAuth 연결.
  </Card>

  <Card title="레이아웃 참고" icon="table-columns" href="/l/ko/developers/extend/apps/layout/overview">
    페이지 레이아웃, 대시보드 위젯, 그 외 다양한 UI 영역.
  </Card>

  <Card title="작업" icon="rocket" href="/l/ko/developers/extend/apps/operations/overview">
    CLI, 테스트, 리모트, CI.
  </Card>
</CardGroup>
