> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# ClickHouse에서 네이티브 형식과 바이너리 형식 사용하기

> ClickHouse에서 네이티브 형식과 바이너리 형식을 사용하는 방법을 설명하는 페이지

export const CloudNotSupportedBadge = () => {
  return <div className="cloudNotSupportedBadge">
            <div className="cloudNotSupportedIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path strokeWidth="1.5" d="M6.33366 12.6666L12.3739 12.6667C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00003 12.3739 8.00003C12.3739 8.00003 12.3337 7.66659 12.0003 7.33325M10.667 5.33322C8.00033 2.33325 4.45395 4.78537 4.14195 6.68203C2.55728 6.7627 1.29395 8.06203 1.29395 9.6667C1.29395 11.3234 2.66699 12.6666 4.00033 12.6666" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
                <path strokeWidth="1.5" d="M2.66699 14L12.0003 4.66663" stroke="currentColor" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

        </div>
            Not supported in ClickHouse Cloud
        </div>;
};

ClickHouse는 더 나은 성능과 공간 효율성을 제공하는 여러 바이너리 형식을 지원합니다. 바이너리 형식은 데이터가 바이너리 형태로 저장되므로 문자 인코딩 측면에서도 안전합니다.

예시를 위해 some\_data [테이블](/ko/assets/some_data.sql)과 [데이터](/ko/assets/some_data.tsv)를 사용하겠습니다. 사용 중인 ClickHouse 인스턴스에서 그대로 따라 해 보셔도 됩니다.

<div id="exporting-in-a-native-clickhouse-format">
  ## 네이티브 ClickHouse 포맷으로 내보내기
</div>

ClickHouse 노드 간에 데이터를 내보내고 가져올 때 가장 효율적인 데이터 포맷은 [네이티브](/ko/reference/formats/Native) 포맷입니다. 내보내기는 `INTO OUTFILE` 절을 사용하여 수행합니다:

```sql theme={null}
SELECT * FROM some_data
INTO OUTFILE 'data.clickhouse' FORMAT Native
```

그러면 [data.clickhouse](/ko/assets/data.clickhouse) 파일이 네이티브 형식으로 생성됩니다.

<div id="importing-from-a-native-format">
  ### 네이티브 형식에서 가져오기
</div>

데이터를 가져오려면, 작은 파일을 다루거나 탐색용으로는 [file()](/ko/reference/functions/table-functions/file)을 사용할 수 있습니다:

```sql theme={null}
DESCRIBE file('data.clickhouse', Native);
```

```response theme={null}
┌─name──┬─type───┬─default_type─┬─default_expression─┬─comment─┬─codec_expression─┬─ttl_expression─┐
│ path  │ String │              │                    │         │                  │                │
│ month │ Date   │              │                    │         │                  │                │
│ hits  │ UInt32 │              │                    │         │                  │                │
└───────┴────────┴──────────────┴────────────────────┴─────────┴──────────────────┴────────────────┘
```

<Tip>
  `file()` 함수를 사용할 때 ClickHouse Cloud에서는 파일이 있는 머신의 `clickhouse client`에서 명령을 실행해야 합니다. 다른 방법으로는 [`clickhouse-local`](/ko/concepts/features/tools-and-utilities/clickhouse-local)을 사용해 로컬에서 파일을 확인할 수 있습니다.
</Tip>

프로덕션 환경에서는 `FROM INFILE`을 사용해 데이터를 가져옵니다:

```sql theme={null}
INSERT INTO sometable
FROM INFILE 'data.clickhouse'
FORMAT Native
```

<div id="native-format-compression">
  ### 네이티브 형식 압축
</div>

`COMPRESSION` 절을 사용하면 데이터를 네이티브 형식으로 내보낼 때(대부분의 다른 포맷에서도 동일) 압축을 사용할 수도 있습니다:

```sql theme={null}
SELECT * FROM some_data
INTO OUTFILE 'data.clickhouse'
COMPRESSION 'lz4'
FORMAT Native
```

내보낼 때는 LZ4 압축을 사용했습니다. 데이터를 가져올 때도 이를 지정해야 합니다:

```sql theme={null}
INSERT INTO sometable
FROM INFILE 'data.clickhouse'
COMPRESSION 'lz4'
FORMAT Native
```

<div id="exporting-to-rowbinary">
  ## RowBinary로 내보내기
</div>

지원되는 또 다른 바이너리 형식은 [RowBinary](/ko/reference/formats/RowBinary/RowBinary)이며, 이를 사용하면 데이터를 바이너리로 표현된 행 형태로 가져오거나 내보낼 수 있습니다:

```sql theme={null}
SELECT * FROM some_data
INTO OUTFILE 'data.binary' FORMAT RowBinary
```

이렇게 하면 [data.binary](/ko/assets/data.binary) 파일이 바이너리 행 형식으로 생성됩니다.

<div id="exploring-rowbinary-files">
  ### RowBinary 파일 살펴보기
</div>

이 포맷은 자동 스키마 추론을 지원하지 않으므로, 로드 전에 내용을 살펴보려면 스키마를 명시적으로 정의해야 합니다:

```sql theme={null}
SELECT *
FROM file('data.binary', RowBinary, 'path String, month Date, hits UInt32')
LIMIT 5
```

```response theme={null}
┌─path───────────────────────────┬──────month─┬─hits─┐
│ Bangor_City_Forest             │ 2015-07-01 │   34 │
│ Alireza_Afzal                  │ 2017-02-01 │   24 │
│ Akhaura-Laksam-Chittagong_Line │ 2015-09-01 │   30 │
│ 1973_National_500              │ 2017-10-01 │   80 │
│ Attachment                     │ 2017-09-01 │ 1356 │
└────────────────────────────────┴────────────┴──────┘
```

컬럼 목록이 포함된 헤더 행도 추가하는 [RowBinaryWithNames](/ko/reference/formats/RowBinary/RowBinaryWithNames) 사용을 고려해 보십시오. [RowBinaryWithNamesAndTypes](/ko/reference/formats/RowBinary/RowBinaryWithNamesAndTypes)는 컬럼 타입이 포함된 헤더 행을 하나 더 추가합니다.

<div id="importing-from-rowbinary-files">
  ### RowBinary 파일에서 가져오기
</div>

RowBinary 파일에서 데이터를 불러오려면 `FROM INFILE` 절을 사용할 수 있습니다:

```sql theme={null}
INSERT INTO sometable
FROM INFILE 'data.binary'
FORMAT RowBinary
```

<div id="importing-single-binary-value-using-rawblob">
  ## RawBLOB를 사용한 단일 바이너리 값 가져오기
</div>

전체 바이너리 파일을 읽어 테이블의 한 필드에 저장하려는 경우를 가정해 보겠습니다.
이때 [RawBLOB 포맷](/ko/reference/formats/RawBLOB)을 사용할 수 있습니다. 이 포맷은 단일 컬럼 테이블에서만 직접 사용할 수 있습니다:

```sql theme={null}
CREATE TABLE images(data String) ENGINE = Memory
```

이미지 파일을 `images` 테이블에 저장하겠습니다:

```bash theme={null}
cat image.jpg | clickhouse-client -q "INSERT INTO images FORMAT RawBLOB"
```

원본 파일 크기와 같은 `data` 필드의 길이를 확인할 수 있습니다:

```sql theme={null}
SELECT length(data) FROM images
```

```response theme={null}
┌─length(data)─┐
│         6121 │
└──────────────┘
```

<div id="exporting-rawblob-data">
  ### RawBLOB 데이터 내보내기
</div>

이 포맷은 `INTO OUTFILE` 절을 사용해 데이터를 내보낼 때도 사용할 수 있습니다:

```sql theme={null}
SELECT * FROM images LIMIT 1
INTO OUTFILE 'out.jpg'
FORMAT RawBLOB
```

값을 2개 이상 내보내면 파일이 손상되므로 `LIMIT 1`을 사용해야 합니다.

<div id="messagepack">
  ## MessagePack
</div>

ClickHouse는 [MsgPack](/ko/reference/formats/MsgPack)을 사용해 [MessagePack](https://msgpack.org/)으로 데이터를 가져오고 내보낼 수 있습니다. MessagePack 포맷으로 내보내려면:

```sql theme={null}
SELECT *
FROM some_data
INTO OUTFILE 'data.msgpk'
FORMAT MsgPack
```

[MessagePack 파일](/ko/assets/data.msgpk)에서 데이터를 가져오려면:

```sql theme={null}
INSERT INTO sometable
FROM INFILE 'data.msgpk'
FORMAT MsgPack
```

<div id="protocol-buffers">
  ## Protocol Buffers
</div>

[Protocol Buffers](/ko/reference/formats/Protobuf/Protobuf)를 사용하려면 먼저 [스키마 파일](/ko/assets/schema.proto)을 정의해야 합니다.

```protobuf theme={null}
syntax = "proto3";

message MessageType {
  string path = 1;
  date month = 2;
  uint32 hits = 3;
};
```

이 스키마 파일(이 경우 `schema.proto`)의 경로는 [Protobuf](/ko/reference/formats/Protobuf/Protobuf) 포맷에서 `format_schema` 설정 옵션으로 지정합니다:

```sql theme={null}
SELECT * FROM some_data
INTO OUTFILE 'proto.bin'
FORMAT Protobuf
SETTINGS format_schema = 'schema:MessageType'
```

이렇게 하면 데이터가 [proto.bin](/ko/assets/proto.bin) 파일에 저장됩니다. ClickHouse는 Protobuf 데이터 가져오기와 중첩된 메시지도 지원합니다. 단일 Protocol Buffer 메시지를 처리하려면 [ProtobufSingle](/ko/reference/formats/Protobuf/ProtobufSingle) 사용을 고려하십시오(이 경우 길이 구분 기호는 생략됩니다).

<div id="capn-proto">
  ## Cap'n Proto
</div>

ClickHouse가 지원하는 또 다른 널리 쓰이는 바이너리 형식의 직렬화 포맷은 [Cap'n Proto](https://capnproto.org/)입니다. `Protobuf` format과 마찬가지로, 이 예시에서는 스키마 파일([`schema.capnp`](/ko/assets/schema.capnp))을 정의해야 합니다:

```response theme={null}
@0xec8ff1a10aa10dbe;

struct PathStats {
  path @0 :Text;
  month @1 :UInt32;
  hits @2 :UInt32;
}
```

이제 [CapnProto](/ko/reference/formats/CapnProto) 포맷과 이 스키마를 사용해 가져오고 내보낼 수 있습니다:

```sql theme={null}
SELECT
    path,
    CAST(month, 'UInt32') AS month,
    hits
FROM some_data
INTO OUTFILE 'capnp.bin'
FORMAT CapnProto
SETTINGS format_schema = 'schema:PathStats'
```

`Date` 컬럼을 [대응하는 타입과 일치시키기](/ko/reference/formats/CapnProto#data_types-matching-capnproto) 위해 `UInt32`로 형변환해야 했습니다.

<div id="other-formats">
  ## 기타 포맷
</div>

ClickHouse는 다양한 시나리오와 플랫폼을 지원하기 위해 텍스트와 바이너리 형식을 포함한 여러 포맷을 제공합니다. 다음 문서에서 더 많은 포맷과 활용 방법을 살펴보십시오.

* [CSV 및 TSV 포맷](/ko/guides/clickhouse/data-formats/csv-tsv)
* [Parquet](/ko/guides/clickhouse/data-formats/parquet)
* [JSON 포맷](/ko/guides/clickhouse/data-formats/json/intro)
* [Regex 및 Template](/ko/guides/clickhouse/data-formats/templates-regex)
* **네이티브 및 바이너리 형식**
* [SQL 포맷](/ko/guides/clickhouse/data-formats/sql)

또한 [clickhouse-local](https://clickhouse.com/blog/extracting-converting-querying-local-files-with-sql-clickhouse-local)도 확인해 보십시오. ClickHouse 서버를 시작하지 않고 로컬/원격 파일을 다룰 수 있는 이식 가능한 완전한 기능의 도구입니다.
