---
title: CSV를 통해 객체 간 관계 가져오기
description: CSV 가져오기 중 레코드 연결에 대한 완전한 단계별 가이드.
---

## 개요

이 가이드는 객체 간 관계를 가져오는 방법을 안내합니다—예를 들어, 사람을 회사에 연결하거나 기회를 사람에게 연결하는 방법.

<Note>**가져올 수 있는 항목:** 단일 객체 유형을 가리키는 일대다 관계만 가능합니다. 여러 객체 유형을 가리키는 관계(예: 노트가 사람과 회사 모두에 연결)는 아직 가져오기를 지원하지 않습니다.</Note>

## 관계 이해하기

### "일대다" 관계란?

일대다 관계에서는:

* **하나의** 회사에는 **여러** 사람(직원)이 있습니다
* **하나의** 회사에는 **여러** 기회가 있습니다
* **한** 사람에게는 **여러** 작업이 있습니다

"one" 쪽은 **상위**입니다. "many" 쪽은 **하위**입니다.

### Twenty에서 흔한 관계

| 관계      | "One" 쪽(상위) | "Many" 쪽(하위) |
| ------- | ----------- | ------------ |
| 회사 → 사람 | 회사          | 사람들          |
| 회사 → 기회 | 회사          | 기회           |
| 사람 → 작업 | 사람          | 작업           |
| 사람 → 노트 | 사람          | 노트           |

## 1단계: "One"과 "Many" 쪽 식별하기

가져오기 전에 어떤 객체가 상위이고 어떤 객체가 하위인지 결정하세요.

**스스로에게 물어보세요:** "하나의 [객체 A]가 여러 [객체 B]를 가지는가?"

* 하나의 회사 → 여러 사람 ✓ (회사가 상위)
* 한 사람 → 여러 회사 ✗ (잘못된 예—사람은 한 회사에 소속됩니다)

## 2단계: 상위 레코드를 먼저 가져오기

참조하려면 상위("one" 쪽) 레코드가 Twenty에 먼저 존재해야 합니다.

**가져오기 순서:**

1. **회사** 먼저(종속성 없음)
2. 그다음 **사람**(회사에 연결)
3. 세 번째로 **기회**(회사 및/또는 사람에 연결)
4. **작업/노트**(위 항목 중 하나에 연결)

<Warning>
**상위 레코드가 존재하지 않으면 가져오기는 실패합니다.**

회사 참조가 있는 사람을 가져오기 전에 항상 회사를 먼저 가져왔는지 확인하세요.
</Warning>

## 3단계: 상위의 고유 식별자 확인

**고유 식별자**를 사용해 상위 레코드를 참조해야 합니다. 사용 가능한 옵션:

| 상위 객체          | 사용 가능한 고유 식별자                             |
| -------------- | ----------------------------------------- |
| **회사**         | `id`(UUID), `domain`(권장), 또는 사용자 지정 고유 필드 |
| **사람들**        | `id`(UUID), `email`, 또는 사용자 지정 고유 필드      |
| **워크스페이스 멤버들** | `id`(UUID), `email`(이름 아님)                |
| **사용자 지정 개체**  | `id`(UUID), 또는 고유로 표시된 모든 필드              |

<Note>**권장:** 회사에는 `domain`, 사람에는 `email`을 사용하세요. 이들은 사람이 읽기 쉬우며 스프레드시트에서 확인하기도 쉽습니다.</Note>

### 식별자 찾기

`id`가 필요하다면:

1. Twenty에서 상위 레코드를 내보내세요
2. 내보내기에는 `id` 열이 포함됩니다
3. 이 ID를 하위 레코드 파일에서 사용하세요

## 4단계: 관계 필드가 존재하는지 확인

가져오기 전에 객체 간에 관계 필드가 존재하는지 확인하세요.

**확인 또는 생성 방법:**

1. **설정 → 데이터 모델**로 이동
2. 하위 객체를 선택하세요(예: 사람)
3. 상위를 가리키는 관계 필드를 찾으세요(예: 회사)
4. 없다면 다음과 같이 생성하세요:
   * **+ 필드 추가**를 클릭하세요
   * 필드 유형으로 **관계**를 선택하세요
   * 상위 객체를 선택하세요

## 5단계: CSV 파일 준비

하위 CSV에 상위의 고유 식별자를 사용해 상위를 참조하는 열을 추가하세요.

### 예: 사람 → 회사 연결

**사람 CSV:**

```csv
firstName,lastName,email,jobTitle,companyDomain
John,Smith,john@acme.com,CEO,https://acme.com
Jane,Doe,jane@widgets.co,CTO,https://widgets.co
Bob,Johnson,bob@techstart.io,Developer,https://techstart.io
```

`companyDomain` 열은 회사의 도메인을 참조합니다.

### 형식 요구 사항

| 식별자 | 형식     | 예시                                     |
| --- | ------ | -------------------------------------- |
| 도메인 | URL 형식 | `https://acme.com`                     |
| 이메일 | 표준 이메일 | `john@acme.com`                        |
| ID  | UUID   | `c776ee49-f608-4a77-8cc8-6fe96ae1e43f` |

<Warning>
**도메인 형식이 중요합니다!**

`https://domain.com`을 사용하세요(`domain.com`만 사용하지 마세요). 이는 Twenty가 회사 도메인을 저장하는 방식과 일치하며, 매칭 오류를 방지합니다.
</Warning>

### 중요 규칙

1. **정확히 일치해야 함** — 값이 상위 레코드와 정확히 일치해야 합니다
2. **고유 식별자는 하나만 매핑** — `companyId`와 `companyDomain`을 모두 포함하지 마세요
3. **대소문자 구분** — `Acme.com` ≠ `acme.com`

## 6단계: 업로드하고 관계 매핑하기

1. 하위 객체로 이동하세요(예: 사람)
2. **⋮** → **레코드 가져오기**를 클릭
3. CSV 파일을 업로드하세요
4. 필드 매핑 단계에서:
   * 관계 열을 찾으세요(예: `companyDomain`)
   * 이를 **회사** 관계 필드에 매핑하세요
5. 나머지 매핑을 완료하세요
6. 오류를 검토하고 확인하세요

Twenty가 각 하위 레코드를 일치하는 상위에 자동으로 연결합니다.

## 7단계: 가져오기 확인

가져온 후:

1. 하위 레코드 몇 개를 엽니다(예: 사람)
2. 관계 필드에 올바른 상위(예: 회사)가 표시되는지 확인하세요
3. 상위 레코드를 열고 관련 레코드 섹션을 확인하세요

## 피해야 할 일반적인 실수

| 실수              | 문제                                    | 해결책                              |
| --------------- | ------------------------------------- | -------------------------------- |
| **잘못된 가져오기 순서** | 회사보다 사람을 먼저 가져오기                      | 항상 상위를 먼저, 그다음 하위를 가져오세요         |
| **잘못된 도메인 형식**  | `https://acme.com` 대신 `acme.com`을 사용함 | `https://`가 포함된 전체 URL 형식을 사용하세요 |
| **여러 개의 고유 필드** | `companyId`와 `companyDomain`을 둘 다 매핑함 | 고유 식별자를 하나만 매핑하세요                |
| **관계 필드 누락**    | 데이터 모델에 관계 필드가 존재하지 않음                | 가져오기 전에 **설정 → 데이터 모델**에서 생성하세요  |
| **존재하지 않는 레코드** | 상위 레코드가 Twenty에 존재하지 않음               | 상위 레코드를 먼저 가져오거나, 오타를 확인하세요      |
| **대소문자 불일치**    | 파일에는 `Acme.com`, Twenty에는 `acme.com`  | 대소문자가 정확히 일치하는지 확인하세요            |

## 워크스페이스 구성원에 연결하기

워크스페이스 구성원(팀원)에 연결할 때:

* 이름이 아니라 **이메일 주소**를 사용하세요
* 예: `owner@yourcompany.com`, "John Smith"가 아님

```csv
taskName,assignedTo
Follow up with client,john@yourcompany.com
Review proposal,jane@yourcompany.com
```

## FAQ

<AccordionGroup>
  <Accordion title="상위 레코드에 도메인이나 이메일이 없으면 어떻게 하나요?">
    다음 두 가지 옵션이 있습니다:
    1. Twenty의 `id`를 사용하세요(상위 레코드를 내보내 ID를 가져오세요)
    2. 데이터 모델에 사용자 지정 고유 필드를 만들어 이전 시스템의 외부 ID를 저장하세요
  </Accordion>

  <Accordion title="기존 레코드의 관계를 업데이트할 수 있나요?">
    예! 하위 레코드의 고유 식별자(예: 사람의 경우 `email`)와 새로운 관계 값을 포함하세요. 가져오기가 관계를 업데이트합니다.
  </Accordion>

  <Accordion title="다대다 관계를 가져올 수 있나요?">
    다대다 관계는 아직 가져오기를 지원하지 않습니다. 이는 2026년 상반기에 계획되어 있습니다.
  </Accordion>

  <Accordion title="여러 객체 유형(예: 노트를 사람과 회사 모두)에 연결할 수 있나요?">
    여러 객체 유형을 가리키는 관계는 아직 가져오기/내보내기를 지원하지 않습니다. 이는 로드맵에 포함되어 있습니다.
  </Accordion>

  <Accordion title="상위 레코드가 존재하지 않으면 어떻게 되나요?">
    해당 행에 대해 가져오기가 오류를 표시합니다. 다음 두 가지 방법 중 하나로 가능합니다:
    * 상위 레코드를 먼저 가져온 뒤 다시 가져오세요
    * 참조 값을 수정하세요
    * 가져오기에서 해당 행을 제거하세요
  </Accordion>

  <Accordion title="관계가 올바르게 연결되지 않는 이유는 무엇인가요?">
    일반적인 원인:
    * 잘못된 형식(도메인은 `https://domain.com`을 사용)
    * 대소문자 불일치(정확한 철자 확인)
    * 상위가 존재하지 않음(상위를 먼저 가져오기)
    * 여러 식별자 매핑(하나만 사용)
  </Accordion>
</AccordionGroup>

<Warning>
**기억하세요: 소프트 삭제된 레코드도 고유성에 포함됩니다.**

레코드가 존재하는 것처럼 보이는데도 "not found" 오류가 발생한다면, Command Menu → See deleted records를 확인하세요. 상위가 소프트 삭제되었을 수 있습니다.
</Warning>

## 문제 해결

문제가 있으신가요? 확인하세요:

* [가져오기 오류 수정](/l/ko/user-guide/data-migration/how-tos/fix-import-errors)
* [관계 가져오기 기능](/l/ko/user-guide/data-migration/capabilities/import-relations)
* [고유성 제약 조건](/l/ko/user-guide/data-migration/capabilities/uniqueness-constraints)
