snapshot of https://github.com/twentyhq/twenty.git (main, 2026-09-17; blobs > 131072B omitted)
Some checks failed
App Prod-Parity E2E Dispatch / dispatch (push) Failing after 10s
CD Storybook UI / build (push) Failing after 3m25s
CD Storybook UI / dispatch (push) Has been skipped
CD deploy main / website-changed-files (push) Successful in 18m8s
CI Agent Skills / changed-files-check (push) Successful in 18m9s
CI Create App E2E minimal / changed-files-check (push) Successful in 24s
CI Create App / changed-files-check (push) Successful in 26s
CI Docs / changed-files-check (push) Successful in 26s
CI Emails / changed-files-check (push) Successful in 28s
CI Example App Hello World / changed-files-check (push) Successful in 23s
CI Front / changed-files-check (push) Has been skipped
CI Example App Postcard / changed-files-check (push) Successful in 27s
CI UI / changed-files-check (push) Has been skipped
CI Utils Test / changed-files-check (push) Successful in 45s
CI Twenty Apps / discover (push) Successful in 1m3s
CD deploy main / deploy-main (push) Failing after 3s
CI Agent Skills / agent-skills-validate (push) Has been skipped
CI Create App / create-app-test (lint) (push) Has been skipped
CI Emails / emails-test (push) Has been skipped
CI Front / front-task (lingui:compile) (push) Has been skipped
CI Front / front-task (lint) (push) Has been skipped
CI Example App Postcard / example-app-postcard (push) Has been skipped
CI UI / ui-task (lint) (push) Has been skipped
CI UI / ui-task (pack-size) (push) Has been skipped
CI UI / ui-task (size) (push) Has been skipped
CI UI / ui-task (test) (push) Has been skipped
CI UI / ui-task (typecheck) (push) Has been skipped
CI Utils Test / utils-test (push) Has been skipped
CI Twenty Apps / ${{ matrix.app.name }} (push) Has been skipped
CI Emails / ci-emails-status-check (push) Successful in 2s
CI Example App Hello World / ci-example-app-hello-world-status-check (push) Successful in 2s
CI Example App Postcard / ci-example-app-postcard-status-check (push) Successful in 3s
CI UI / ui-sb-test (push) Has been skipped
CI Utils Test / ci-utils-test-status-check (push) Successful in 2s
CI Twenty Apps / ci-twenty-apps-status-check (push) Successful in 2s
CI UI / ci-ui-status-check (push) Successful in 2s
CI Desktop / desktop (push) Failing after 1m8s
Push docs to Crowdin / Push documentation to Crowdin (push) Failing after 55s
Push translations to Crowdin / Extract and upload translations (push) Failing after 5s
Push website translations to Crowdin / Extract and upload website translations (push) Failing after 5s
CI Create App / create-app-test (test) (push) Has been skipped
CI Create App / create-app-test (typecheck) (push) Has been skipped
CI Docs / docs-lint (push) Has been skipped
CI Example App Hello World / example-app-hello-world (push) Has been skipped
CI Front / front-task (lingui:extract) (push) Has been skipped
CI Front / front-task (test) (push) Has been skipped
CI Front / front-task (typecheck) (push) Has been skipped
CI UI / ui-sb-build (push) Failing after 1m32s
CI Twenty Apps / ${{ matrix.app.name }} (${{ matrix.server-source }}) (push) Has been skipped
CI Agent Skills / agent-skills-publish (push) Has been skipped
CI Create App / ci-create-app-status-check (push) Successful in 2s
CI Agent Skills / agent-skills-remote-source (push) Has been skipped
CI Create App E2E minimal / create-app-e2e-minimal (push) Has been cancelled
CI E2E Main / e2e-test (push) Has been cancelled
CI Front / front-sb-build (push) Has been cancelled
CI Front / front-build (push) Has been cancelled
CI Create App E2E minimal / ci-create-app-e2e-minimal-status-check (push) Has been cancelled
CI E2E Main / ci-e2e-main-status-check (push) Has been cancelled
CI E2E Main / notify-main-ci-failure (push) Has been cancelled
CI E2E Main / qa-scout-comment (push) Has been cancelled
CI Front / front-sb-test (push) Has been cancelled
CI Front / front-sb-screenshots (push) Has been cancelled
CI Front / ci-front-status-check (push) Has been cancelled
DPA Sub-Processor Sync / sync-subprocessors (push) Failing after 3s
AI Catalog Sync / sync-catalog (push) Failing after 2s

This commit is contained in:
upstream-mirror
2026-09-17 23:28:13 +05:00
commit e7da97194a
32688 changed files with 4208681 additions and 0 deletions

View File

@@ -0,0 +1,122 @@
---
title: 필드
description: 필드의 역할을 이해하고 관리 방법을 알아보세요.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 필드 정보
필드는 스프레드시트의 열과 같습니다. 텍스트, 숫자 또는 날짜와 같은 다양한 유형의 데이터를 저장합니다. 필드는 기본 제공 표준 필드 또는 사용자 정의 필드(사용자가 생성한 필드)일 수 있습니다.
### 표준 필드
표준 필드는 일반적인 비즈니스 요구를 처리할 수 있도록 Twenty에 기본 제공됩니다.
예를 들어, `이름` 및 `성`은 `사람` 객체의 표준 필드입니다. 이는 개인 이름에 대한 텍스트 데이터를 저장합니다.
표준 필드를 삭제할 수는 없지만 필요하지 않을 경우 비활성화할 수 있습니다.
또한 표준 `SELECT` 유형 필드의 옵션을 사용자 지정할 수 있습니다. 예를 들어 기회(Opportunities)에서 `Stage` 옵션을 설정할 수 있습니다.
<img src="/images/user-guide/fields/standard-fields.png" style={{width:'100%'}} />
### 사용자 정의 필드
사용자 정의 필드는 모든 객체에 추가할 수 있습니다. 텍스트, 숫자, 날짜, 드롭다운 선택 항목 등을 저장할 수 있습니다. 비즈니스에 특화된 정보를 추적하기 위해 사용자 정의 필드를 사용하세요.
예를 들어, SpaceX의 경우 `로켓 활성 상태`가 사용자 정의 필드가 될 수 있으며, 이는 로켓이 작동 중인지 여부를 나타냅니다.
<img src="/images/user-guide/fields/custom-fields.png" style={{width:'100%'}} />
## 필드 유형
Twenty는 다양한 필드 유형을 지원합니다:
| 유형 | 설명 | 예시 |
| ------- | ---------------------------------- | -------------- |
| 주소 | 거리, 도시, 주/도, 국가, 우편번호가 포함된 구조화된 주소 | 사무실 주소 |
| 배열 | 텍스트 값 목록 | 태그 |
| 부울 | 참/거짓 체크박스 | 활성 여부 |
| 통화 | 통화 코드가 포함된 금액 | 거래 금액(USD) |
| 날짜 | 날짜 값 | 마감일 |
| 날짜 및 시간 | 시간이 포함된 날짜 | 회의 시간 |
| 도메인 | 웹사이트 도메인(회사에 사용) | acme.com |
| 이메일 | 이메일 주소(기본 + 추가) | 연락처 이메일 |
| JSON | 구조화된 JSON 데이터 | 사용자 지정 메타데이터 |
| 링크 | 레이블이 있는 URL(기본 + 보조) | 웹사이트, LinkedIn |
| 긴 텍스트 | 여러 줄 텍스트 | 설명, 메모 |
| 다중 선택 | 미리 정의된 목록에서 여러 항목 선택 | 태그, 카테고리 |
| 숫자 | 숫자 값(정수 또는 소수) | 수량, 점수 |
| 전화 | 국가 코드가 포함된 전화번호 | 업무용 전화 |
| 평점 | 별점(1~5) | 우선순위, 점수 |
| 관계 | 다른 객체의 레코드 링크 | 회사 → 사람 |
| 선택 | 미리 정의된 목록에서 단일 항목 선택 | 단계, 상태 |
| 텍스트 | 한 줄 텍스트 | 이름, 직함 |
## 사용자 정의 필드 생성
모든 객체에 사용자 정의 필드를 추가하려면 다음 단계를 따르세요:
1. 왼쪽 사이드바에서 `설정`으로 이동합니다.
2. `데이터 모델`로 이동한 다음 사용자 지정하려는 객체를 선택합니다.
3. `+ 새 필드`를 클릭하여 계속 진행합니다.
4. 요구 사항에 맞는 필드 이름과 유형을 선택합니다. 더 나은 이해를 위해 필드 설명을 추가하는 것을 고려하세요.
새로 생성된 필드는 애플리케이션의 필드 내에서 사용 가능합니다. 특정 보기에서 표시하려면 옵션 메뉴를 클릭한 다음 `필드`를 선택하세요.
<VimeoEmbed videoId="927628219" title="동영상 시연" />
**빠른 방법:** 모든 객체 테이블의 오른쪽 상단의 **+** 버튼을 클릭한 다음 `필드 사용자 지정`을 선택합니다. 이렇게 하면 바로 데이터 모델 설정으로 이동합니다.
<img src="/images/user-guide/fields/quick-new-field.png" style={{width:'100%'}} />
## 필드 비활성화
데이터를 잃지 않고 앱에서 필드를 숨기려면 필드를 비활성화할 수 있습니다. 삭제 대신 필드를 숨기는 것으로 생각하세요.
다음은 비활성화 방법입니다:
1. 객체 설정에서 비활성화하려는 필드를 찾습니다.
2. 필드 옆에 있는 세 점 `⋮`을 클릭하여 메뉴를 엽니다.
3. 드롭다운에서 `비활성화`를 선택합니다.
<img src="/images/user-guide/fields/deactivate-field.png" style={{width:'100%'}} />
필드를 비활성화하면 어떻게 되나요?
1. **앱 안에서:** 필드가 사라지며 더 이상 새로운 값을 추가할 수 없습니다.
2. **기존 관계:** 관계 필드인 경우 기존 연결은 유지되지만 새 연결을 만들 수 없습니다.
3. **API 액세스:** 여전히 API를 통해 필드와 그 데이터를 액세스할 수 있습니다.
표준 및 사용자 정의 필드를 다시 활성화하거나 영구적으로 삭제할 수 있는 옵션이 있습니다.
## 필드를 고유하게 만들기
동일한 값을 가진 레코드가 없도록 필드를 고유하게 만드세요. 예를 들어, 이메일 주소는 각 사람마다 고유합니다.
고유성을 설정할 때 오류가 발생하면 데이터(삭제된 레코드를 포함하여)에서 중복 값을 확인하세요.
## 인덱스 (고급)
데이터베이스 인덱스는 자동으로 관리되며, 직접 추가해야 하는 경우는 드물고 실수하기 쉽습니다. 고급 모드를 켜면, 필요한 경우를 대비해 각 오브젝트의 `Settings → Data Model → <object>` 아래에 **Indexes** 섹션이 생깁니다.
## 필드 구성 모범 사례
### 명명 규칙 및 제한 사항
* **단수형 및 복수형 이름은 서로 달라야 합니다**: GraphQL API에는 변이를 위한 서로 다른 이름이 필요합니다.
* **보호된 필드 이름**: 일부 이름은 시스템 용도로 예약되어 있습니다(예: `Type`, `Application`)
### 통화 및 전화 필드
* **기본 통화:** 데이터 모델을 통해 구성할 수 있습니다.
* **기본 국가 코드:** 전화 필드를 위해 데이터 모델을 통해 구성할 수 있습니다.
### 선택 필드
* **각 선택 필드에는 기본 옵션을 선택할 수 있습니다**.
### 레코드 텍스트 필드
* **각 객체에는 하나의 메인 디스플레이 필드가 있습니다:** 이 필드는 가장 왼쪽 열에 나타나며 다른 객체와 링크될 때 레코드를 나타냅니다. 텍스트 필드여야 합니다. 예를 들어, 사람은 `이름`을 주요 필드로 사용하기 때문에 사람을 회사에 연결할 때 회사의 보기에서 이름을 볼 수 있습니다.

View File

@@ -0,0 +1,92 @@
---
title: 개체
description: Twenty에서 표준 및 사용자 지정 객체에 대해 알아보세요.
---
import { VimeoEmbed } from '/snippets/vimeo-embed.mdx';
## 표준 개체
표준 객체는 시작을 돕기 위해 워크스페이스에 미리 정의되어 있습니다. Twenty의 모든 사용자가 접근할 수 있는 공유 데이터 모델의 일부입니다. 기본 상태로 사용하거나 사용자 정의하거나 비활성화할 수 있습니다.
<img src="/images/user-guide/objects/standard-objects.png" style={{width:'100%'}} />
### 사람들
`People` 객체는 연락처를 저장합니다. 연락처 정보 및 상호 작용 기록이 포함되어 있어 모든 고객 상호 작용을 한 곳에서 볼 수 있습니다.
### 회사
`Companies` 객체는 비즈니스 계정을 저장합니다. 업종, 규모 및 위치와 같은 세부정보가 포함됩니다. Companies는 `People` 및 `Opportunities` 객체와 연결됩니다.
### 기회
`Opportunities` 객체는 거래 관련 데이터를 저장합니다. 잠재 매출의 진행 상황을 발굴부터 성사까지 추적하며, 단계, 거래 규모, 연결된 계정, 예상 마감일을 기록합니다. 캔반 레이아웃에서 판매 파이프라인을 볼 수 있습니다.
### 노트
`Notes` 객체는 사람, 회사, 영업 기회 및 기타 레코드에 첨부할 수 있는 자유 형식의 메모를 저장합니다. 메모를 사용해 회의 요약, 중요한 세부정보, 기타 맥락 정보를 기록하세요.
### 작업
`Tasks` 객체는 할 일과 실행 항목을 저장합니다. 작업은 사람, 회사, 영업 기회 및 기타 레코드에 연결할 수 있습니다. 마감일, 담당자, 완료 상태를 추적하여 후속 조치를 철저히 관리하세요.
## 사용자 지정 개체
사용자 지정 객체를 사용하면 조직에 고유하며 표준 객체로는 처리할 수 없는 정보를 저장할 수 있습니다. 예를 들어, SpaceX의 경우 로켓 및 발사에 대한 사용자 정의 개체를 만들 수 있습니다.
<img src="/images/user-guide/objects/custom-objects.png" style={{width:'100%'}} />
### 새 사용자 지정 객체 생성
새 사용자 지정 객체를 만들려면:
1. 왼쪽 사이드바에서 설정으로 이동하세요.
2. 워크스페이스에서 데이터 모델로 이동하세요. 여기에서 기존 표준 및 사용자 정의 개체(활성 및 비활성 포함)의 개요를 볼 수 있습니다.
<VimeoEmbed videoId="926288174" title="동영상 시연" />
3. 상단에서 `+ New object`를 클릭하세요. 단수 및 복수 이름을 입력하고 아이콘을 선택한 다음 사용자 정의 객체에 대한 설명을 추가하고 저장(오른쪽 상단)을 누릅니다. 사용자 지정 객체의 예로 Listing을 사용할 경우, 단수형은 "listing", 복수형은 "listings"이며, 설명은 "호스트가 숙소를 홍보하기 위해 생성한 목록"처럼 작성할 수 있습니다.
4. 이제 사용자 지정 객체가 생성되어 사이드바에 표시됩니다. 바로 레코드를 추가할 수 있습니다.
## 객체 관리
### 객체 비활성화
표준 또는 사용자 지정 객체가 필요하지 않은 경우:
1. 설정 → 데이터 모델로 이동하세요
2. 비활성화하려는 객체를 찾아 클릭하세요
3. 객체의 **Settings** 탭으로 이동하세요
4. `Deactivate` 버튼을 클릭하세요
5. 객체는 워크스페이스에서 숨겨지지만 데이터는 유지됩니다
### 객체 재활성화
비활성화된 객체를 다시 사용하려면:
1. 설정 → 데이터 모델로 이동하세요
2. `Deactivated` 필터를 활성화하세요
3. 비활성화된 객체를 찾으세요(이름 옆에 `Deactivated`가 표시됩니다)
4. `⋮`를 클릭한 다음 `Activate`를 클릭해 다시 활성화하세요
5. 객체와 해당 모든 데이터가 복원됩니다
## 모범 사례
### 사용자 지정 객체를 생성해야 할 때
* **고유한 비즈니스 엔터티**: 업계나 프로세스에 특화된 항목
* **복잡한 관계**: 여러 엔터티 간의 연결을 추적해야 할 때
* **확장 가능한 데이터**: 매우 많은 인스턴스가 생길 수 있을 때
### 대신 필드를 사용해야 할 때
* **단순 속성**: 기존 객체를 설명하는 속성
* **카테고리 또는 레이블**: 기존 레코드를 분류하는 방법
* **단일 값**: 별도의 라이프사이클이 필요하지 않은 정보
### 객체 이름
* **명확하고 설명적인 이름을 사용하세요**: 객체가 무엇을 나타내는지 분명하게 하세요
* **규칙을 따르세요**: 객체 이름에는 단수를, 컬렉션에는 복수를 사용하세요
* **팀을 고려하세요**: 모두가 이해할 수 있는 이름을 선택하세요

View File

@@ -0,0 +1,94 @@
---
title: 관계 필드
description: 관계 필드를 사용하여 서로 다른 객체의 레코드를 연결하세요.
---
## 관계 유형
### 일대다
객체 A의 하나의 레코드는 객체 B의 여러 레코드에 연결될 수 있습니다.
**예:** 하나의 회사에는 여러 사람(직원)이 있을 수 있습니다.
### 다대일
객체 A의 여러 레코드는 객체 B의 하나의 레코드에 연결될 수 있습니다.
**예:** 여러 사람이 하나의 회사에 속할 수 있습니다.
### 여러 객체 유형으로의 관계
일부 객체는 관계의 한쪽에서 여러 객체 유형에 연결될 수 있습니다.
**예:** 노트는 동시에 한 사람, 한 회사, 한 기회에 첨부될 수 있습니다. 노트는 "다수" 쪽에 있으며 여러 "하나" 쪽과 연결됩니다.
<img src="/images/user-guide/fields/many-to-one-morph.png" style={{width:'100%'}} />
마찬가지로, 프로젝트("하나" 쪽)는 여러 사람, 여러 회사, 여러 노트로부터 연결을 받을 수 있습니다.
<img src="/images/user-guide/fields/one-to-many-morph.png" style={{width:'100%'}} />
<Warning>
**가져오기/내보내기 제한 사항**: 여러 객체 유형을 가리키는 관계는 CSV 가져오기/내보내기에서 아직 지원되지 않습니다. 이는 로드맵에 포함되어 있습니다.
</Warning>
### 다대다
객체 A의 여러 레코드는 객체 B의 여러 레코드에 연결될 수 있습니다.
**예:** 여러 사람은 여러 프로젝트에 연결될 수 있으며, 그 반대도 가능합니다.
다대다 관계는 **연결 객체** 패턴을 사용합니다: 양쪽을 연결하는 중간 객체. 연결 관계 기능을 사용하면 Twenty는 중간 객체를 UI에서 숨기고 최종 연결된 레코드를 직접 표시합니다.
<Warning>
**베타 기능**: 사용하려면 **Settings → Community → Features**에서 연결 관계를 활성화해야 합니다.
</Warning>
자세한 단계별 가이드는 [다대다 관계 생성 방법](/l/ko/user-guide/data-model/how-tos/create-many-to-many-relations)을 참조하세요.
## 관계 필드 만들기
1. **설정 → 데이터 모델**로 이동
2. 관계를 추가하려는 객체를 선택합니다.
3. **+ 새 필드**를 클릭합니다
4. 필드 유형으로 **관계**를 선택합니다.
5. 연결할 대상 객체를 선택합니다.
6. 관계 설정을 구성합니다:
* **원본 객체의 필드 이름**: 현재 편집 중인 객체에 있는 관계 필드의 이름
* **대상 객체의 필드 이름**: 대상 객체에 표시될 관계 필드의 이름
* 관계 유형(일대다, 다대일)
7. **저장** 클릭
## 표준 관계
Twenty에는 표준 객체 간에 사전 구성된 관계가 제공됩니다:
| 원본 객체 | 대상 객체 | 관계 유형 |
| ----- | ----- | ----- |
| 사람들 | 회사 | 다대일 |
| 기회 | 회사 | 다대일 |
| 기회 | 사람들 | 다대일 |
## 모범 사례
### 관계 계획
* **데이터 모델을 매핑하세요**: 생성하기 전에 관계를 계획합니다
* **방향을 고려하세요**: 어느 객체가 관계를 "소유"하는지 생각하세요
* **순환 의존성을 피하세요**: 데이터 모델을 깔끔하게 유지하세요
### 관계 이름 지정
* **명확한 이름을 사용하세요**: 관계가 무엇을 나타내는지 분명하게 하세요
* **일관성을 유지하세요**: 관계 전반에서 유사한 명명 패턴을 사용하세요
* **양쪽을 고려하세요**: 관계의 양쪽에 적절한 이름을 지정하세요
### 성능
* **과도한 관계 설정은 피하세요**: 관계가 너무 많으면 워크스페이스가 느려질 수 있습니다
## 제한 사항
* **관계를 삭제**하면 링크는 제거되지만 관련 레코드는 삭제되지 않습니다
* **순환 관계**는 데이터 무결성을 위해 피해야 합니다