# 파이썬, # 스파크, # 카프카, # 연동
얼마전, 친구를 통해 알게된 사실!
실시간 트레이딩 시스템에서 초당, 분당 거래 데이터를 가공 / 처리하는 부분에서 어떻게 손을 써야 할 지
물음을 받았다.
AWS 를 쓰더라도, 이러한 부분은 분명 생각하기 쉽지 않을 것이라고 생각이 든다.
왜냐하면 너무나도 많은 데이터를 Polling 으로 처리한다 하더라도 서비스로 데이터를 보여주기까지
Real-time 적용이 힘들기 때문이다.
그래서 나는 이러한 데이터 가공을 빠르게 할 수 있는 방안으로 Kafka-Spark 를 추천하였다.
이전에도 글을 통해서 간략하게 소개를 하였다.
하나의 예를 들어보자.
내가 비트코인을 사고, 파는 모든 기록이 있다. 나와 같은 사람이 약... 1만명 정도라고 가정한다.
언제, 얼만큼, 어떤 코인을 사고 / 팔고 하였는가?
이를 통해서 실시간으로 데이터를 가공 / 처리하여 ML 에 적용시켜 볼 수 있다.
데이터를 가져오는 부분은 API 를 통해서 가져올 수 있다.
나는 지금부터 이 데이터를 어디로 옮기고 어떻게 가공해야 할지에 대해서 설명하려고 한다.
데이터의 성격은 다를 수 있지만, 나는 내가 일하고 있는 분야의 Network Traffic 데이터를 가지고 설명한다.
먼저, 데이터를 만들어 내는 Application Service 가 있다.
초당 수백, 수천의 로그 데이터가 쏟아져 나오고 있다.
이 데이터를 Kafka 시스템으로 보낸다.
Kafka 는 Queue System 이다. 차곡차곡 쌓이는 구조라고 생각하면 쉽다.
Kafka 사용법은 공식 홈페이지에서 자세히 확인 할 수 있다. (ref. https://kafka.apache.org/quickstart)
간단히 구조를 보면 지금 데이터가 생성이 되고 있고,
그 데이터는 kafka 의 큐 시스템에 쌓이고 있다.
나는 여기서 Spark 를 통해서 데이터를 스트리밍 받아 가공 / 처리 하려고 한다.
Spark 에서는 Job 을 생성한다. 이 Job 은 해야 할 일을 하는 일련의 과정이다.
Network Traffic 데이터를 받아보았으니, 그에 맞는 일을 하면 된다.
Network Traffic 데이터에서 DNS 관련 정보를 가지고 이상징후를 탐지하려고 한다.
Spark 에서는 map, filter, reduceByKey, updateStateBykey 등의 변형자 함수를 통해서
데이터를 알맞게 가공한다.
나는 이곳을 참조한다. (ref. https://spark.apache.org/examples.html)
Spark 를 사용해야 하는 이유가 무엇인가?
속도? 안정성? 유지보수? 나는 이런거 신경쓰기 싫다? 그럼 Spark 를 고민하지 말고 사용하자.
한 번 만든 Job 은 전원이 꺼진다거나, 용량이 꽉 차서 예외가 발생하는 경우를 제외하고
매우 안정적으로 수행된다. 확인은 내가 했다.
왜 빠른지, 왜 좋은지... 이런 질문은 이제 더이상 현 개발상황에서는 불필요하다.
더 좋은 알고리즘을 만들어 내는 시대는 추억으로 접어두고,
잘 만들어진 좋은 FrameWork 를 배우고 원리만 파악하면 된다. 지극히 개인적인 견해다.
실제로 React를 통해서 데이터가 실시간으로 변화되는 모습을 보여주려고 한다.
사내 프로젝트로 진행하는 부분으로 자세한 코드나 구성도를 보여줄 수 없어,
안타깝다.
나는 한국외국어대학교에서 첫 직장을 시작하면서
이런 개발 Architec 관련 공부에 관심이 많았다. 특히, CI/CD 와 RDBMS/NoSQL 구조적 특성과 융합에 무게를 두었다.
실제로 최근에 Machine Learning 분야를 공부하면서
Python의 여러 모듈(Numpy, Scipy, pandas 등)을 잘 사용하는 부분도 물론 중요하지만
이러한 구성과 구조를 기반으로 프로젝트를 진행하는 것이 좀 더 중요도에 있어서
무게감이 있다는 생각을 하게 되었다.
이제 모든 준비가 끝났다.
Time Aggregation 과 Spark 의 Window Frame 이라는 키워드를 통해서
원하는 데이터 가공과 만족할 수준의 퍼포먼스, 그리고 결과를 직접 받아 볼 수 있었다.