2nd project
2nd project
.
공공기관 데이터 공유사업
프로젝트 개요
- 공공 기관이 저장하는 데이터를 중앙 데이터 허브로 전송
프로젝트 기간
2024.03 - 2024.05
역할
- 전체 레이아웃 및 디자인 초안 잡기
- 서버 간 비동기 통신을 위한 서비스 레이어 설계
- 통계 -> Chart 및 동적 테이블 렌더링 위한 js 작업
- 내부망 배포
아키텍쳐
어려웠던 점
- 2개의 역할이 다른 개별 회사, 행정안전부의 pm 과의 의사 소통 및 역할 분담이 매끄럽게 이루어지지 않았다.
- 한 화면에 차트 16개 분량의 통계 데이터를 뽑기 위한 쿼리 작업, 스크립트 작업이 순탄치 않았다. 데이터 양 자체가 너무 많아서 매번 화면에 방문할 때 마다 불편할 정도로 느렸다. 따라서 매번 계산하지 않도록 해당 페이지만 캐싱을 도입해 불필요한 api 호출을 막았다.
- 각기 다른 5개의 청에서 사용하는 파일의 포맷, 중앙 데이터 저장소에서 기대하는 포맷이 많이 달랐다. 맵핑해야 할 항목이 150개가 훌쩍 넘는 정리된 엑셀 파일을 전달 받았지만, 의미가 불분명하고 정보가 부족했다. 추가 설명을 요구했지만 기대만큼 원활한 소통이 되지 않았다.
- 마지막에 마지막까지 가서야 핵심 컬럼의 의미, 어떻게 변환해야 하는지에 대한 걸 알 수 있었다.
- 1개의 파일이 100번 이상의 변환 로직을 거치고, 12개의 테이블에 각기 나뉘어 저장되었다.
- 그런 파일이 수백, 수천개가 배치로 전송되어 해당 상황에 대한 대처가 필요했다.
회고
두번째 회사에서 첫 프로젝트였다. 5개 청에 설치된 모듈에서 비동기로 데이터를 받으면, rdf 파일을 json 형식으로 변환해 저장, 최종적으로는 csv 로 포맷팅 후 중앙 데이터 허브로 대량 전송을 하면 됐다. 모듈과 중앙 허브의 다리 역할 및 데이터 시각화를 하는 것이 목표였다. 여러 개의 모듈에서 주기적으로 데이터를 전송 받고, 엄청나게 긴 데이터 변환, 모듈에서의 데이터 정의와 중앙 허브가 기대하는 데이터 정의가 매우 달랐다.
데이터 형식의 불일치를 해결하기 위해서 아주 장황한 컨버팅 함수가 필요했다. 게다가 각각의 모듈들이 언제, 얼마나 전송을 할지 몰랐기 때문에 스프링부트 내장 기능인 CompletableFuture 스펙과 멀티 스레드로 순간적으로 통신량이 늘어나도 서버가 먹통이 되는 걸 방지하고자 했다. 백엔드 서버 간 비동기, 멀티 스레드 모두 직접 해본적이 없었기 때문에 구현을 위해선 일정 수준 이상의 노력이 필요했다. 초반에 전달받은 아키텍쳐를 위해서 서비스 레이어을 복잡하지만 추후 유지보수는 편하게 만들었다.
하지만 중간에 전체 아키텍쳐가 여러 번 변경되었고, 굳이 복잡하게 나눌 필요가 없는 것으로 되어버렸다. 다만, 프로젝트 중후반부에 프로젝트 구조를 바꾸자니 엄두가 안나서 불필요하게 복잡한 로직만 남긴 프로젝트로 남긴 건 아쉬움이 남는다.
This post is licensed under CC BY 4.0 by the author.