본문 바로가기
Portfolio

AIS Analytics & AIS Analytics Web DashBoard

by Awesome-SH 2020. 7. 2.

AIS Analytics

: AIS 수신메세지 데이터를 분석하고 대량의 데이터를 DB로 Insert하기 위한 목적

 

구축환경

- NodeJS v12.16.1

라이브러리

- Ais Parser : v0.0.13
- Async : v3.2.0
- Cli-progress : v3.8.2
- Moment : v2.26.0
- Pg(PostgreSQL) : v8.2.1
- Prompt-confirm: v2.0.4

 

AIS 수신메세지 전체 건수

1. 약 100억 건


기능

1. AIS 수신 원문데이터 Header, Sentence 분리
2. Sentence Parsing
3. Message Type 1~24 분류 및 Message Type Count
4. 년별, 월별, 일별 수신채널(A or B)에 따른 Message Count
5. CSV File Write
6. AIS 수신 기지국코드_일자로 테이블 존재 유무 확인 후
   없다면 해당 테이블 생성 후, Message Insert
   있으면 해당 테이블에 Message Insert


이슈

1. NodeJS의 비동기 특징을 거슬러 동기식으로 로직을 짜는 과정에서 고난(?)을 겪었다.
Promise를 사용해서 동기처리 로직을 만들었지만 클린한 코드가 나오지 않아
Async 라이브러리의 waterfall(폭포수) 를 알게 되었고
적용한 결과 깔끔한 동기식 코드를 만들 수 있었다.

2. 데이터량의 워낙 많다보니 분석 전 데이터, 분석 후 데이터, 가공한 데이터를 모두
메모리의 보관한 상태로 DB Insert 로직까지 끌고가다 보니 Memory Leak이 발생하였다.
1년치 데이터도 아니고 하루 데이터만 프로그램을 돌렸는데도 데이터가 워낙 많아 이런경험은 처음이었다.
자료구조부터 로직까지 프로그램을 재구축하고 데이터리스트에 일정 카운팅을 걸어 힙영역을 최소화 할 수 있었다. 

 


 

 

AIS Analytics Web DashBoard

: 메세지의 통계와 분석현황을 시각적으로 볼 수 있도록 하기 위한 목적

구축환경

- NodeJS v12.16.1
- React v16.13.1

라이브러리

- React-Chart v2.9.0
- Styled-components v5.1.1

 

댓글