데이터이야기

DB 노하우, 데이터직무, 다양한 인터뷰를 만나보세요.

[기술13기] 기상 센서 데이터를 이용한 기후 정보 및 이상센서 알림 서비스

데이터 이야기
작성자
dataonair
작성일
2018-03-13 00:00
조회
4471


기상 센서 데이터를 이용한 기후 정보 및 이상센서 알림 서비스



THE CHALLENGES

빅데이터 기술 전문가 과정 강의를 들으며 학생 때 처음 배웠던 포트란이라는 프로그래밍 언어가 생각났다. 그 시절 낯설었던 느낌이 다시 떠올랐고, 어딘가 익숙한 모습에 반갑기도 했지만, 왜 우리는 각자의 도메인에서 빅데이터라는 영역에 대해 이 낯선 느낌을 극복하고 도입하려는지에 대한 의문이 생겼다. 빅데이터 관련 기술은 어느덧 신기술이 아닌 어찌 보면 우리들이 부르는 레거시 시스템의 단계로 넘어가고 있는 것은 아닐까. 신기술을 배우고자 한다 면 요즘 핫키워드인 인공지능(AI), 머신러닝, 자율주행 자동차 같은 것을 접해 야 했을 텐데 왜 빅데이터 기술을 선택했을까

기술 전문가 과정 13기 참가자 모두가 동일하지는 않았겠지만, 빅데이터 가 앞서 소개한 인공지능 등의 근본이 된다. 따라서 빅데이터의 기초를 제대로 다져야 인공지능 등으로 나아갈 채널이 열리지 않을까 하는 생각으로 빅데이 터 아카데미 기술 전문가 과정을 노크했다.

파일럿 프로젝트를 준비하면서 분석에 초점이 맞추어져 있다는 생각이 많 이 들었다. 상대적으로 데이터를 확보·정제·가공·시각화하는 부분은 가려져 있지 않나 싶었다. 이로부터 파일럿 프로젝트의 아이디어가 떠올랐다. 빅데이 터 분석을 하기 위한 일련의 과정에서 분석 파트의 중요성을 간과할 수 없지 만, 빅데이터 비즈니스가 분석 하나만으로 존재할 수 없다. 눈에 띄지 않지만 뒤에서 서포트하는 시스템을 알아보고 싶었다. 분석 플랫폼 구축과 데이터 수 집·정제·적재·가공·분석·시각화 등 빅데이터 분석을 구성하는 일련의 과정 에 대한 이해를 파일럿 프로젝트의 목표로 잡았다. 데이터 분석보다는 서비스 흐름 상의 관련된 기술을 다뤄보되, 조원 모두가 참여해야 한다고 조원들 간에 의견 일치를 보았다.

이 목표를 달성하기에 적합한 주제는 무엇일까 하고 고민하던 중 기술 이 해가 목적이라면 기상 데이터로도 문제가 없을 것이라는 의견도 나왔다. 이때 프로젝트 결과가 현실에 유용하게 활용될 수 있으면 좋겠다는 생각에 데이터 를 찾아 나섰다. 안전재난연구원에서 일하는 조원이 앞장서 공공데이터포털에 공개된 기상청의 센서 데이터를 확보했다. 데이터가 이미 공개된 점이 아쉬웠 다. 하지만 이것 또한 기회가 되지 않을까 싶었다. 선행 분석 결과와 우리 조의 분석 결과를 비교할 수 있겠다는 생각에 이르렀다.

파일럿 프로젝트 주제가 정해졌다. 남은 건 어떤 모습으로 만들지를 생각 해야 한다. 이에 필수 주제 3개와 부가 주제 3개를 도출해 직접 해보기로 했다.



column_img_3300.jpg

THE APPROACH

프로젝트를 시작하기 전에 미팅을 갖고 주제와 방향을 정했다. 역할을 구분하 고 조원별로 담당 업무를 배정하려 했다. 하지만 전반적인 이해만으로는 현업 에 돌아가서 실무에 적용할 수 있겠느냐 하는 의견이 나왔다. 이에 우리 조는 본 프로젝트가 진행되기 전에 K-ICT 빅데이터센터에 별도의 VM 서버를 팀원 별로 신청·발급 받았다. 1주차 멘토링 시간에 팀원별로 구성한 VM 서버에 빅 데이터 환경을 구축·테스트했다. 이 과정에서 지정 학습서를 참고해 2주 간의 집체교육 시간에 배웠던 내용들을 조금씩 내재화할 수 있었다.
멘토와 상의해 곁가지들을 좀 더 정리했다. 하지만 멘토링을 받으면서 우 리 조의 파일럿 프로젝트 범위가 만만찮다는 것을 알게 됐다. 그래도 할 수 있 는 한 많은 것을 기술적으로 진행해 보자는 생각은 변함이 없었다. 이에 따라 멘토링이 진행될 때마다 다양한 기술적 접근에 대한 의견을 멘토에게 제시해 검증 받으며 세부적으로 구현해 나갔다.

필수 주제 영역

빅데이터 에코 시스템의 다양한 기술 사용
빅데이터 분석 플랫폼을 구성하는 다양한 기술 습득이 목표였으므로 하둡 에 코 시스템의 구성 요소별 설치에 너무 많은 시간을 할당할 수 없었다. 그래서 분석 플랫폼 구축에 딱 적합한 클라우데라가 떠올랐다. 하둡 배포판인 클라우 데라를 이용해 기본적인 빅데이터 환경을 빠르게 구축할 수 있었다. 하지만 시 스템 설정이 간단하지 않았기에 관련 설정 정보들을 공유하며 설치를 완료할 수 있었다.

기상 데이터 수집·가공·적재
기상청의 데이터를 안전재난연구원을 통해 배치 또는 실시간으로 수집하려 했 다. 보안상의 이슈로 해당 방법이 지원되지 않아 기상청의 기상 센서 데이터의 분단위 데이터를 수집하되, 임의의 시점에 배치용 데이터로 2016년에서 2017 년까지 1년분의 데이터를 가져왔다. 실시간 데이터 처리를 위해 2017년 1~3 월까지 3개월분의 데이터를 미리 내려 받아 프로젝트 파일서버에 배치용 데이 터와 실시간용 데이터를 분리·저장했다.

배치 데이터 처리
저장된 파일서버에서 배치 데이터는 일일 배치 스크립트를 이용해 배치용 플 럼(FLUME)이 바라고 보고 있는 경로에 적재했다. 이때 플럼(FLUME)은 해 당 경로의 파일 생성 이벤트를 탐지해 파일을 읽어드린 후에 하둡파일시스템 (HDFS)에 저장한다. 파일의 양이 적지 않았으므로 하둡 적재 시 파티션돼 저 장될 수 있도록 플럼 인터셉터를 구현해 다음과 같은 구조로 파일이 저장될 수 있도록 했다.

폴더 구조의 예: /pilot-prj/log/year=2017/month=01/day=01/

실시간 데이터 처리
실시간 데이터 처리를 위해 TX, RX 실시간 전송 모듈을 개발했다. 실시간 데 이터 폴더에서 데이터를 읽어와 분 단위로 메시지를 플럼에 전달하도록 구현 했다. FLUME SINK로 카프카(Kafka)를 지정해 실시간 데이터가 상당량 이상 발생했을 때 버퍼링할 수 있도록 했다. 이를 다시 STORM spout에 전달해 실 시간 분석 과정을 수행하게 했다. Spout에서 Esper BOLT로 전달된 실시간 데이터는 Esper에 등록한 룰(5분간의 연속 데이터를 비교해 온도차가 1도 이상인 경 우)에서 벗어나는 데이터가 들어오면 이상치(Outlier)로 판정한다. 이를 REDIS BOLT로 전달해 REDIS DB에 저장한다. 정상인 경우에는 HBASE에 저장하 도록 했다.

분석 사전 작업
앞 과정으로 배치와 실시간 데이터는 HDFS, HBASE, REDIS에 저장됐다. 이 데이터들을 분석하기 위해 우리 조는 HUE라는 웹 인터페이스를 사용했다. HUE 웹 사용자 인터페이스는 하이브(HIVE), 임팔라(Impala) 등과 같이 빅데 이터를 일반 RDBMS처럼 보여주거나, 데이터를 일부 시각화해 보여주는 기능 을 제공한다. 하이브에서 데이터를 탐색하기 위한 메타 정의 작업을 하고, 해당 메타에 실제 HDFS 경로와 사상(MAPPING) 과정을 진행했다.

데이터 탐색과 분석
하이브에 정의된 메타 테이블로 데이터를 테이블 형태로 조회할 수 있다. 하지 만 이때 실제 하둡 맵리듀스가 수행돼 하이브 결과가 도출되기까지는 요청 범 위에 따라 수분 이상이 걸리는 경우가 대부분이다. 따라서 우리 조는 탐색 효 율을 높이 위해 임팔라를 사용했다. 임팔라로 기상 데이터를 일별 평균 온도· 강수량·풍속 정보와 각각의 최대값/최소값을 구했다. 마찬가지로 월별 데이터 에 대한 정보도 확인했다.

데이터 시각화
하이브와 임팔라에서 탐색한 데이터를 시각화하는 과정이다. 이때 제플린 (Zeppelin)을 사용했으며 일별·월별 평균 온도, 강수량, 풍속 데이터를 시각화 차트(라인차트, 바차트, 분포차트)로 표현했다. 추가로 스파크(Spark)로 HDFS에 적재된 데이터를 로딩해 분석한 정보를 메모리에 올려놓고, 필요 시 조회해 시 각화하는 방식으로도 결과를 도출했다.



column_img_3301.jpg

부가 주제 영역

필수 주제를 완료했지만, 눈과 손으로 확인하고 싶은 기술들을 그냥 둔 채 마무리 지을 수 없었 다. 지금까지의 기술보다 난이도가 높아져서 완 수하지 못하는 부분도 있을 거라는 두려움도 없 지 않았다. 그러나 결과 도출이 우리 조의 목표 가 아니었다. 따라서 완료하지 못해도 그 수행 기록을 나눔이 의미 있을 것이라는 생각으로 남 은 부가 주제를 향해 나아갔다.

머신러닝 기반 이상 센서 알림
집체교육 과정에서 배운 머신러닝을 파일럿 프로젝트에 꼭 접목해보고 싶었 다. 하지만 새로운 프로그래밍 언어와 수학 지식, 알고리즘 등 진입장벽이 만만 치 않았다. 멘토의 많은 조언으로 케이스 스터디 수준으로는 진행해 볼 수 있 겠다는 생각이 들었다.

1년치의 기상 데이터로 기본적인 조건은 갖추고 있었으므로 이상기후를 예측하는 서비스를 구축하기로 했다. 하지만 시계열 분석을 하기 위해서는 시 즌별 데이터도 있어야 했다. 1년치 데이터만으로는 데이터가 부족했다. 더불어 특정 기간의 이상기후 데이터를 라벨링할 수 있어야 했다. 하지만 현실적으로 관련 데이터를 입수해 기존 데이터에 사상한다는 것은 현실적으로 어려웠다.

1년치의 데이터와 라벨된 데이터 없이도 가능한 K평균값(K-Means) 클러 스터링 알고리즘 기반으로 이상 센서를 분류해내기로 했다. K 값을 정하기 위 해 2016년 12월 센서별 평균 데이터 분포도를 보면서 평균 온도 그룹이 정상 2개와 오류 1개로 나뉠 수 있다고 가정해 K값을 3으로 정했다. 정해진 K값으 로 머신러닝을 하기 위한 데이터 준비 차원에서 벡터화와 실수화 작업을 했다. 이 과정을 거쳐 센서 데이터를 가공한 후 판정에 불필요한 데이터(센서 ID, 수집 시간 등)를 벡터 내에서 제거하고, 이를 K평균값 모델로 수행했다.

도출된 모델값과 실제 데이터를 비교해 클러스터 중심 거리와의 노드 거리가 일정거리 이상(프로젝트에서는 거리 순위 200이 넘는 경우)이면, 오류 센서로 판정하게 했다. 해당 기술은 Spark ml과 스칼라(Scala)로 구현했다. 도출된 오 류센서 데이터는 HDFS에 저장해 하이브에서 확인할 수 있도록 했다.

column_img_3302.jpg

실시간 모니터링
초기 시작은 Spark Stream을 이용해 실시간 데이터가 들어오면 제플린에서 시각화하는 모습으로 가려고 했다. 하지만 Spark Stream과 제플린 연동 이슈 가 있었으므로 동일 기능을 제공하는 AWS 키네시스(Kinesis)를 사용해보기로 했다. AWS 키네시스로 데이터를 전달하기 위한 데이터 전송(delivery) 모듈을 구현했다. 이 모듈로서 실시간 데이터 파일 서버에서 AWS 키네시스로 실시간 데이터를 전달했다. AWS 키네시스에서 버퍼링되는 데이터를 수신하도록 제 플린에서 Spark interpreter를 사용해 데이터 수신부를 구현했다. 최종적으 로 제플린에서 데이터를 시각화하는 형태로 구현했다.

ELK를 이용한 시각화
빅데이터 시각화의 꽃이라고 할 수 있는 파워풀한 시각정보를 제공하는 ‘키바 나’. 이 존재가 우리 조에게도 무척 매력적이었다. 다만 일래스틱서치(Elastic search)라는 만만치 않은 산이 있음을 실감할 수 있었다. logstash를 이용해 시각화할 데이터를 수집한다. 이 데이터를 일래스틱 서치에 전달하면 데이터 를 인덱싱해 최종적으로 키바나로 전달해 시각화하도록 구현했다. 하지만 인 덱싱 처리 부분에 오류가 있어 넘겨진 데이터를 키바나가 처리하지 못해 시각 화를 마무리하지 못했다. 처음에 도커 이미지를 사용해 구축하려 했으나, 도커 이미지를 사용하기 위해서는 centos 7이상을 사용해야 한다. 프로젝트에서 사용한 VM은 6.9라서 사용할 수 없다는 걸 알았을 때는 많은 시간이 흘러간 후였다. 실제로 ELK를 각각 설치하고 프로젝트를 진행한 시간이 넉넉하지 못 했던 점이 아쉽다.



THE OUTCOME

필수 주제와 옵션 주제로 양분해 진행한 빅데이터 에코시스템에 대한 전반적 인 기술 탐구의 종착역에 도착했다. 기반 인프라 구성으로부터 시작해 수집· 실시간 분석·적재·탐색·분석·시각화까지 데이터의 흐름 상에 놓여 있는 기술 들을 두루두루 다루어 볼 수 있었다. 그 과정에서 도출된 문제들을 맨토와 조 원들이 함께 풀어간 경험이 좋은 기억으로 남아 있다. 옵션 주제를 수행하면서 상용 서비스 관점으로 접근해 머신러닝 기반으로 오류 센서를 검출하거나, 실 시간 데이터 흐름을 시각화하는 것, ELK를 도입해본 것은 기본 영역에서만 머 물지 않고 실제 서비스 영역으로 넘어가보고자 했던 즐거운 도전이었다.

기술 전문가 과정 13기 4조는 시작부터 일관되게 기술적인 접근을 했다. 그 영역을 점차 넓혀가는 방식으로 프로젝트를 진행했다. 요소별 욕심나는 부 분이 없지 않았다. 하지만 하나에 몰입해 전체적인 흐름을 잃어 버리기보다는 파트별로 적절하게 리소스를 배분해 진행한 점, 전 조원이 본인 영역뿐 아니라 주변 동료 영역에 관심을 갖고 진행한 점, 결과보다는 과정에 충실했던 점들은 짧은 시간에 빅데이터 에코 시스템의 역할과 흐름의 이해뿐 아니라 집체교육 중 들었던 내용의 이해를 가능하게 했다.



출처 : 한국데이터진흥원

제공 : 데이터 전문가 지식포털 DBguide.net