--- title: 'Docker NiFi와 PostgreSQL을 함께 실행' tags: NIFI --- [TOC] ## 1. Docker-compose ### 1.1 파일(docker-compose.yml)을 생성함 Docker Compose 파일(docker-compose.yml)을 생성합니다. 이 파일은 NiFi와 PostgreSQL 컨테이너를 정의하고 구성하는 데 사용됩니다. Docker Compose 파일에 다음 내용을 추가하여 NiFi와 PostgreSQL 서비스를 정의합니다. ```yaml version: '3' services: nifi: image: apache/nifi:1.18.0 container_name: nifi restart: always ports: - "8080:8080" environment: - NIFI_WEB_HTTP_PORT=8080 links: - postgres:postgres depends_on: - postgres postgres: image: postgres:13.4 container_name: postgresql restart: always environment: POSTGRES_USER: root POSTGRES_PASSWORD: postgres POSTGRES_DB: postgres ``` ### 1.2 container를 시작함 Docker Compose 파일을 저장한 후, 해당 디렉토리로 이동하여 다음 명령을 실행하여 NiFi와 PostgreSQL 컨테이너를 시작합니다: ```shell docker-compose up -d ``` 명령이 실행되면 NiFi와 PostgreSQL 컨테이너가 배포됩니다 ![](https://hackmd.io/_uploads/ByaMK5IPh.png) ## 2. NIFI 워크플로 생성 ### 2.1 URL 링크 열기 ``` http://localhost:8080/nifi/ ``` ### 2.2 워크플로 생성 - 캔버스에 `GetFile` 프로세서를 끌어다 놓다 ![](https://hackmd.io/_uploads/H110098Pn.png) - Processors가 추가함: getFile, PutDatabaseRecord, LogAttribute ![](https://hackmd.io/_uploads/HJ02RqLD3.png) ### 2.3 Config `getFile` 이 프로세서를 구성하여 원하는 디렉토리에서 CSV 파일을 읽도록 합니다. 프로세서를 두 번 클릭합니다. 1. 파일의 위지 (Input Directory): 파일을 가져올 디렉토리 경로를 지정합니다. 2. 파일 필터 (File Filter): 파일 이름 패턴 또는 정규 표현식을 사용하여 파일을 필터링하는 기능을 제공합니다. 3. 소스 파일 유지 (Keep Source file): 파일을 가져온 후에 소스 파일을 유지할지 삭제할지 여부를 결정합니다. ![](https://hackmd.io/_uploads/SJaD4CLDn.png) ### 2.4 Config `PutDatabaseRecord` - **Record Reader**: 들어오는 데이터 레코드를 읽고 데이테베이스에 쓰기 위해 사용되는 구성 요소입니다. 특정 형식: CSV,JSON,Avro 등. - Database Type: 데이터를 쓸 데이터베이스의 유형을 지정하는 속성입니다. PostgresSQL, MySQL, Oracel, Microsoft SQL Server, Apache Cassandra, MongoDB. - Statement Type: 데이터를 어떻게 처리할지를 선택합니다. Insert, Update, Delete. - Database Connection Pooling Service: 테이터베이스 연결에 사용할 커넥션 풀링 서비스를 선택합니다. - Table Name: 테이터를 삽입할 데이터 레코드의 개수를 지정합니다 ![](https://hackmd.io/_uploads/rkLFXJDDn.png) - Click 1 ![](https://hackmd.io/_uploads/SyucE1vD3.png) - jar file (Postgres Driver)를 Docker에 북사 ```shell docker cp ./postgresql-42.2.23.jar nifi:/opt/nifi/nifi-current/lib ``` ![](https://hackmd.io/_uploads/BJwEXyDvn.png) ```shell docker exec -it postgresql psql postgres -U postgres ``` - Database Connection URL: 데이터베이스에 연결하기 위한 URL을 지정합니다. - Database Driver Class Name: 사용할 데이터베이스 드라이버의 클래스 이름을 지정합니다. - Database Driver Location: 사용할 데이터베이스 드라이버의 JAR 팔일의 위치. - [Download Driver](https://jdbc.postgresql.org/download/) - Database User: 데이터베이스에 연결할 사용자 이름을 지정함. - Password: 데이터베이스 사용자의 비밀헌호를 입력합니다. ``` jdbc:postgresql://postgres:5432/postgres org.postgresql.Driver ``` ``` /opt/nifi/nifi-current/lib ``` ![](https://hackmd.io/_uploads/r1QitywP2.png) - Enable "Active" ![](https://hackmd.io/_uploads/rJXMPtKv2.png) ### Postgresql에 Table를 생성 ```sql CREATE TABLE packages ( id SERIAL PRIMARY KEY, name VARCHAR(50), items VARCHAR(50), detail VARCHAR(100) ); ``` ## Workflow를 시작함 - click to start the workflow ![](https://hackmd.io/_uploads/HJ0IOKFwn.png)