펜타시스템/입사 후 첫 프로젝트 공부 내용

첫 과제 완료

dev-lee 2026. 9. 16. 14:21

첫번째 과제를 완료했다.

CUBRID에서 NIFI로 HDFS에 떨어뜨리는 과제였는데 생각보다 할만했고 생각보다 이상한 곳에서 막혔다.

CUBRID에 쿼리를 통해 테이블을 생성하는 것까지는 괜찮았다.

문제는 트리거였는데 트리거에서 DDL안에 있는 DML문에 대한 이해가 부족해 삽질을 조금 했다.

DDL은 실행 시점에서 실행자의 권한과 해석으로 고정되기 때문에 그 안에 있는 DML문은 '스키마명.테이블명.컬럼명' 이런 문법이 먹히지 않았다. this., self.과 같은 동작을 하는 obj.을 사용해야 하기 때문이었다.

이를 통해 테이블을 만들고 트리거를 만들고 시퀀스를 만들어 CUBRID에서의 기본 골격은 완성할 수 있었다.

원본 테이블에서 더미 테이블로 데이터를 덤프하는 파이썬 코드가 필요했지만 이건 개발서버에 접속할 수 있을 때까지는 하지 못하는 문제였기 때문에 마지막으로 미뤘었다.

 

다음으로는 NIFI에서 GUI를 통해 CUBRID에서 데이터를 가져와서 HDFS에 Put하는 과정을 진행했다.

GenerateFlowFile을 Timedriven으로 10초마다 발생시켜서 ExecuteSQL로 데이터를 가져왔고 이것을 PutHDFS를 통해 HDFS에 넣었다.

중간중간 FlowFile uuid를 일정하게 붙이기 위해서 UpdateAttribute를 사용하고, 데이터가 없을 때는 거르기 위해 RouteOnAttribute를 사용하는 추가적인 작업이 있었다.

PutHDFS에서 재시도 로직을 설정할 수 있어서 3회 지수 재시도를 설정했으나 피드백을 통해 이런 재시도는 input과 output 속도가 비슷할 때는 백프레셔를 유발할 수 있어 차라리 Failure, Success 별로 바로바로 아래로 흐르게 만들고 재시도를 별도의 로직을 통해 진행하는 것이 안정성이 높다는 사실을 알게 되었다.

 

마지막으로 CUBRID의 더미 테이블에 더미 데이터를 쌓는 파이썬 코드를 작성하였는데, 버전이 안 맞고 권한을 잘못잡고 문법을 잘못 작성하는 등의 문제로 인해 하루종일 삽질을 하다가 마지막에 사수의 도움으로 pycubrid 라이브러리를 사용하여 해결할 수 있었다.

 

최종 결과는 개발서버에서 HDFS -get으로 HDFS만의 경로에 있는 Avro 파일을 로컬로 가져와서 cat으로 확인을 진행했다.

 

이번 과제는 기존 시스템의 CUBRID에서 NIFI를 통해 HDFS로 떨어뜨리는 배치 작업을 학습하는 것이 목적이었으며 성공적으로 완료할 수 있었다.