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

> NiFi 데이터 파이프라인을 사용해 데이터를 ClickHouse로 스트리밍합니다

# Apache NiFi를 ClickHouse에 연결하기

export const CommunityMaintainedBadge = () => {
  return <div className="CommunityMaintainedBadge">
            <div className="CommunityMaintainedIcon">
            <svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" fill="currentColor" viewBox="0 0 256 256">
                <path d="M244.8,150.4a8,8,0,0,1-11.2-1.6A51.6,51.6,0,0,0,192,128a8,8,0,0,1-7.37-4.89,8,8,0,0,1,0-6.22A8,8,0,0,1,192,112a24,24,0,1,0-23.24-30,8,8,0,1,1-15.5-4A40,40,0,1,1,219,117.51a67.94,67.94,0,0,1,27.43,21.68A8,8,0,0,1,244.8,150.4ZM190.92,212a8,8,0,1,1-13.84,8,57,57,0,0,0-98.16,0,8,8,0,1,1-13.84-8,72.06,72.06,0,0,1,33.74-29.92,48,48,0,1,1,58.36,0A72.06,72.06,0,0,1,190.92,212ZM128,176a32,32,0,1,0-32-32A32,32,0,0,0,128,176ZM72,120a8,8,0,0,0-8-8A24,24,0,1,1,87.24,82a8,8,0,1,0,15.5-4A40,40,0,1,0,37,117.51,67.94,67.94,0,0,0,9.6,139.19a8,8,0,1,0,12.8,9.61A51.6,51.6,0,0,1,64,128,8,8,0,0,0,72,120Z"></path>
            </svg>
        </div>
            커뮤니티에서 관리
        </div>;
};

export const Image = ({img, alt, size = "lg"}) => {
  const normalizedSize = ["sm", "md", "lg"].includes(size) ? size : "lg";
  return <div className={`ch-image-${normalizedSize}`}>
      <Frame>
        <img src={img} alt={alt} />
      </Frame>
    </div>;
};

<CommunityMaintainedBadge />

<a href="https://nifi.apache.org/" target="_blank">Apache NiFi</a>는 소프트웨어 시스템 간 데이터 흐름을 자동화하도록 설계된 오픈 소스 워크플로 관리 소프트웨어입니다. ETL 데이터 파이프라인을 생성할 수 있으며, 300개가 넘는 데이터 프로세서가 함께 제공됩니다. 이 단계별 튜토리얼에서는 Apache NiFi를 ClickHouse의 소스와 대상으로 모두 연결하고, 샘플 데이터셋을 로드하는 방법을 설명합니다.

<Steps>
  <Step title="연결 정보 준비하기" id="1-gather-your-connection-details">
    HTTP(S)로 ClickHouse에 연결하려면 다음 정보가 필요합니다.

    | 매개변수                      | 설명                                                         |
    | ------------------------- | ---------------------------------------------------------- |
    | `HOST` and `PORT`         | 일반적으로 TLS를 사용하는 경우 포트는 8443, TLS를 사용하지 않는 경우 8123입니다.      |
    | `DATABASE NAME`           | 기본적으로 `default`라는 이름의 데이터베이스가 제공되며, 연결할 데이터베이스 이름을 사용하십시오. |
    | `USERNAME` and `PASSWORD` | 기본 사용자 이름은 `default`입니다. 사용 사례에 맞는 사용자 이름을 사용하십시오.         |

    ClickHouse Cloud 서비스의 연결 정보는 ClickHouse Cloud 콘솔에서 확인할 수 있습니다.
    서비스를 선택한 다음 **Connect**를 클릭하십시오.

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/cloud-connect-button.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=ec0a298a33ca841e947fa5e8bae47362" alt="ClickHouse Cloud 서비스 연결 버튼" width="998" height="932" data-path="images/_snippets/cloud-connect-button.webp" />
      </Frame>
    </div>

    **HTTPS**를 선택하십시오. 연결 정보가 예시 `curl` 명령으로 표시됩니다.

    <div className="ch-image-md">
      <Frame>
        <img src="https://mintcdn.com/private-7c7dfe99/CFFsa2agBPbviR4r/images/_snippets/connection-details-https.webp?fit=max&auto=format&n=CFFsa2agBPbviR4r&q=85&s=cb0fbd98aa2b5b7ca484c9f53395ee07" alt="ClickHouse Cloud HTTPS 연결 정보" width="1320" height="1184" data-path="images/_snippets/connection-details-https.webp" />
      </Frame>
    </div>

    자가 관리형 ClickHouse를 사용하는 경우 연결 정보는 ClickHouse 관리자가 설정합니다.
  </Step>

  <Step title="Apache NiFi 다운로드 및 실행" id="2-download-and-run-apache-nifi">
    새로 설정하는 경우 [https://nifi.apache.org/download.html](https://nifi.apache.org/download.html)에서 바이너리를 다운로드한 후 `./bin/nifi.sh start`를 실행해 시작하십시오.
  </Step>

  <Step title="ClickHouse JDBC 드라이버 다운로드" id="3-download-the-clickhouse-jdbc-driver">
    1. GitHub의 <a href="https://github.com/ClickHouse/clickhouse-java/releases" target="_blank">ClickHouse JDBC 드라이버 릴리스 페이지</a>로 이동하여 최신 JDBC 릴리스 버전을 확인하십시오
    2. 해당 릴리스에서 "Show all xx assets"를 클릭한 다음, 예를 들어 `clickhouse-jdbc-0.5.0-all.jar`처럼 "shaded" 또는 "all" 키워드가 포함된 JAR 파일을 찾으십시오
    3. Apache NiFi에서 접근할 수 있는 폴더에 JAR 파일을 두고 절대 경로를 기록해 두십시오
  </Step>

  <Step title={<> <code>DBCPConnectionPool</code> Controller Service를 추가하고 속성을 구성합니다</>} id="4-add-dbcpconnectionpool-controller-service-and-configure-its-properties">
    1. Apache NiFi에서 Controller Service를 구성하려면 "gear" 버튼을 클릭해 NiFi Flow Configuration 페이지로 이동하세요

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_01.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=3ecb50806baacf0177cdde10d0bea34c" size="sm" border alt="gear 버튼이 강조 표시된 NiFi Flow Configuration 페이지" width="564" height="409" data-path="images/integrations/data-ingestion/etl-tools/nifi_01.webp" />

    2. Controller Services 탭을 선택한 뒤, 오른쪽 상단의 `+` 버튼을 클릭해 새 Controller Service를 추가하세요

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_02.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=e49f17a3ccf81855ddf6f33ae71f8b2d" size="lg" border alt="추가 버튼이 강조 표시된 Controller Services 탭" width="1999" height="636" data-path="images/integrations/data-ingestion/etl-tools/nifi_02.webp" />

    3. `DBCPConnectionPool`을 검색한 다음 "Add" 버튼을 클릭하세요

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_03.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=a214a72eb65b893a71426c349c6851a4" size="lg" border alt="DBCPConnectionPool이 강조 표시된 Controller Service 선택 대화 상자" width="1999" height="1287" data-path="images/integrations/data-ingestion/etl-tools/nifi_03.webp" />

    4. 새로 추가한 `DBCPConnectionPool`은 기본적으로 Invalid 상태입니다. 구성을 시작하려면 "gear" 버튼을 클릭하세요

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_04.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=5bc4d67491b1e5958664762878c41a87" size="lg" border alt="gear 버튼이 강조 표시된 Invalid 상태의 DBCPConnectionPool이 표시된 Controller Services 목록" width="1893" height="607" data-path="images/integrations/data-ingestion/etl-tools/nifi_04.webp" />

    5. "Properties" 섹션에서 다음 값을 입력하세요

    | Property                   | Value                                                                                    | Remark                             |
    | -------------------------- | ---------------------------------------------------------------------------------------- | ---------------------------------- |
    | Database Connection URL    | jdbc[https://HOSTNAME:8443/default?ssl=true](https://HOSTNAME:8443/default?ssl=true)true | connection URL의 HOSTNAME을 적절히 바꾸세요 |
    | Database Driver Class Name | com.clickhouse.jdbc.ClickHouseDriver                                                     |                                    |
    | Database Driver Locations  | /etc/nifi/nifi-X.XX.X/lib/clickhouse-jdbc-0.X.X-patchXX-shaded.jar                       | ClickHouse JDBC 드라이버 JAR 파일의 절대 경로 |
    | Database User              | default                                                                                  | ClickHouse 사용자 이름                  |
    | Password                   | password                                                                                 | ClickHouse 비밀번호                    |

    6. "Settings" 섹션에서 나중에 쉽게 식별할 수 있도록 Controller Service 이름을 "ClickHouse JDBC"로 변경하세요

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_05.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=869cce96c0ee8ccd527695c8dea21af7" size="lg" border alt="속성이 입력된 DBCPConnectionPool 구성 대화 상자" width="1586" height="1184" data-path="images/integrations/data-ingestion/etl-tools/nifi_05.webp" />

    7. "lightning" 버튼을 클릭한 다음 "Enable" 버튼을 클릭해 `DBCPConnectionPool` Controller Service를 활성화하세요

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_06.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=2460399dc3113d995786c373f7df4d37" size="lg" border alt="lightning 버튼이 강조 표시된 Controller Services 목록" width="2878" height="812" data-path="images/integrations/data-ingestion/etl-tools/nifi_06.webp" />

           <br />

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_07.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=485f45409ead4ff9cfb316e8ee2bc8d9" size="lg" border alt="Controller Service 활성화 확인 대화 상자" width="1586" height="1172" data-path="images/integrations/data-ingestion/etl-tools/nifi_07.webp" />

    8. Controller Services 탭에서 해당 Controller Service가 활성화되었는지 확인하세요

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_08.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=b7d9e1ce84d3bbd46d913e940847a610" size="lg" border alt="활성화된 ClickHouse JDBC 서비스가 표시된 Controller Services 목록" width="1999" height="636" data-path="images/integrations/data-ingestion/etl-tools/nifi_08.webp" />
  </Step>

  <Step title={<><code>ExecuteSQL</code> 프로세서를 사용해 테이블에서 읽기</>} id="5-read-from-a-table-using-the-executesql-processor">
    1. 적절한 업스트림 및 다운스트림 프로세서와 함께 `ExecuteSQL` 프로세서를 추가합니다

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_09.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=abf11db5bb1dc248a233669a23aef33e" size="md" border alt="워크플로에 ExecuteSQL 프로세서가 표시된 NiFi 캔버스" width="768" height="316" data-path="images/integrations/data-ingestion/etl-tools/nifi_09.webp" />

    2. `ExecuteSQL` 프로세서의 "Properties" 섹션에서 다음 값을 입력합니다

       | 속성                                  | 값                             | 비고                                          |
       | ----------------------------------- | ----------------------------- | ------------------------------------------- |
       | Database Connection Pooling Service | ClickHouse JDBC               | ClickHouse용으로 구성된 Controller Service를 선택합니다 |
       | SQL select query                    | SELECT \* FROM system.metrics | 여기에 쿼리를 입력합니다                               |

    3. `ExecuteSQL` 프로세서를 시작합니다

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_10.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=81d02e73ee6ca1d543015bc0667eb442" size="lg" border alt="속성이 입력된 ExecuteSQL 프로세서 구성" width="858" height="220" data-path="images/integrations/data-ingestion/etl-tools/nifi_10.webp" />

    4. 쿼리가 성공적으로 처리되었는지 확인하려면 출력 큐에 있는 `FlowFile` 중 하나를 확인합니다

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_11.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=270caae3211e7b81b50d1e309aba8606" size="lg" border alt="검사할 준비가 된 FlowFile이 표시된 큐 목록 대화상자" width="1956" height="794" data-path="images/integrations/data-ingestion/etl-tools/nifi_11.webp" />

    5. 출력 `FlowFile`의 결과를 보려면 보기를 "formatted"로 전환합니다

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_12.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=1dc1c90d3bb71ab84465021653fddadf" size="lg" border alt="formatted 보기에서 쿼리 결과를 표시하는 FlowFile 콘텐츠 뷰어" width="1762" height="1500" data-path="images/integrations/data-ingestion/etl-tools/nifi_12.webp" />
  </Step>

  <Step title={<><code>MergeRecord</code> 및 <code>PutDatabaseRecord</code> 프로세서를 사용하여 테이블에 쓰기</>} id="6-write-to-a-table-using-mergerecord-and-putdatabaserecord-processor">
    1. 한 번의 삽입으로 여러 행을 쓰려면 먼저 여러 레코드를 하나의 레코드로 머지해야 합니다. 이는 `MergeRecord` 프로세서를 사용해 수행할 수 있습니다.

    2. `MergeRecord` 프로세서의 "속성" 섹션에서 다음 값을 입력합니다.

       | 속성                        | 값                   | 비고                                                         |
       | ------------------------- | ------------------- | ---------------------------------------------------------- |
       | Record Reader             | `JSONTreeReader`    | 적절한 record reader를 선택합니다.                                  |
       | Record Writer             | `JSONReadSetWriter` | 적절한 record writer를 선택합니다.                                  |
       | Minimum Number of Records | 1000                | 최소 개수의 행이 머지되어 하나의 레코드가 되도록 이 값을 더 큰 수로 변경합니다. 기본값은 1행입니다. |
       | Maximum Number of Records | 10000               | "Minimum Number of Records"보다 큰 수로 설정합니다. 기본값은 1,000행입니다.  |

    3. 여러 레코드가 하나로 머지되었는지 확인하려면 `MergeRecord` 프로세서의 입력과 출력을 확인합니다. 출력은 여러 입력 레코드로 이루어진 배열이라는 점에 유의하십시오.

       입력

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_13.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=2ccc4198a02b0b3b7402ee79e5ae12c8" size="sm" border alt="단일 레코드를 보여주는 MergeRecord 프로세서 입력" width="624" height="306" data-path="images/integrations/data-ingestion/etl-tools/nifi_13.webp" />

       출력

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_14.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=0b02a554dceeb6c594fd800d04dcfb89" size="sm" border alt="머지된 레코드 배열을 보여주는 MergeRecord 프로세서 출력" width="707" height="501" data-path="images/integrations/data-ingestion/etl-tools/nifi_14.webp" />

    4. `PutDatabaseRecord` 프로세서의 "속성" 섹션에서 다음 값을 입력합니다.

       | 속성                                  | 값                | 비고                                                                                     |
       | ----------------------------------- | ---------------- | -------------------------------------------------------------------------------------- |
       | Record Reader                       | `JSONTreeReader` | 적절한 record reader를 선택합니다.                                                              |
       | Database Type                       | Generic          | 기본값으로 둡니다.                                                                             |
       | Statement Type                      | INSERT           |                                                                                        |
       | Database Connection Pooling Service | ClickHouse JDBC  | ClickHouse controller service를 선택합니다.                                                  |
       | Table Name                          | tbl              | 여기에 테이블 이름을 입력합니다.                                                                     |
       | Translate Field Names               | false            | 삽입되는 필드 이름이 컬럼 이름과 일치하도록 "false"로 설정합니다.                                               |
       | Maximum Batch Size                  | 1000             | 삽입 1회당 최대 행 수입니다. 이 값은 `MergeRecord` 프로세서의 "Minimum Number of Records" 값보다 낮아서는 안 됩니다. |

    5. 각 삽입에 여러 행이 포함되는지 확인하려면 테이블의 행 수가 `MergeRecord`에서 정의한 "Minimum Number of Records" 값 이상씩 증가하는지 확인합니다.

           <Image img="https://mintcdn.com/private-7c7dfe99/pIetLsS_hOGHqoPJ/images/integrations/data-ingestion/etl-tools/nifi_15.webp?fit=max&auto=format&n=pIetLsS_hOGHqoPJ&q=85&s=36b01a981712543038b0c3f5d2f06679" size="sm" border alt="대상 테이블의 행 수를 보여주는 쿼리 결과" width="828" height="1306" data-path="images/integrations/data-ingestion/etl-tools/nifi_15.webp" />

    6. 축하합니다. Apache NiFi를 사용해 데이터를 ClickHouse에 성공적으로 로드했습니다!
  </Step>
</Steps>
