---
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 컨테이너가 배포됩니다

## 2. NIFI 워크플로 생성
### 2.1 URL 링크 열기
```
http://localhost:8080/nifi/
```
### 2.2 워크플로 생성
- 캔버스에 `GetFile` 프로세서를 끌어다 놓다

- Processors가 추가함: getFile, PutDatabaseRecord, LogAttribute

### 2.3 Config `getFile`
이 프로세서를 구성하여 원하는 디렉토리에서 CSV 파일을 읽도록 합니다. 프로세서를 두 번 클릭합니다.
1. 파일의 위지 (Input Directory): 파일을 가져올 디렉토리 경로를 지정합니다.
2. 파일 필터 (File Filter): 파일 이름 패턴 또는 정규 표현식을 사용하여 파일을 필터링하는 기능을 제공합니다.
3. 소스 파일 유지 (Keep Source file): 파일을 가져온 후에 소스 파일을 유지할지 삭제할지 여부를 결정합니다.

### 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: 테이터를 삽입할 데이터 레코드의 개수를 지정합니다

- Click 1

- jar file (Postgres Driver)를 Docker에 북사
```shell
docker cp ./postgresql-42.2.23.jar nifi:/opt/nifi/nifi-current/lib
```

```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
```

- Enable "Active"

### 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
