수요일, 5월 23, 2018

[B급 프로그래머] 5월 3주 소식(빅데이터/인공지능, 암호화폐/블록체인, 읽을거리 부문)

(오늘의 짤방: 볼때마다 감탄하고 바로 까먹는다 via @hotel_gecko)
  1. 빅데이터/인공지능
  2. 암호화폐/블록체인
  3. 읽을거리
보너스: 구글 I/O 2018 키노트
EOB

월요일, 5월 07, 2018

[독서광] 카프카, 데이터 플랫폼의 최강자

오늘은 간만에 기술서적 관련 독후감을 올려드리겠다. 오늘의 주인공은 검토를 위해 출간에 앞서 미리 읽기는 했지만, 그래도 다시 한 번 시간을 투자해 정독한 <카프카, 데이터 플랫폼의 최강자 - 실시간 비동기 스트리밍 솔루션 Kafka의 기본부터 확장 응용까지>라는 책이다. 카프카는 방대한 데이터를 다뤄야하는 기업 환경에서 중추적인 역할을 맡은 고가용성/고성능/실시간 데이터 버스를 구축하기 위해 사용하는 오픈소스 소프트웨어로서 데이터 수집, 처리, 분석 파이프라인을 단순하게 만들어주는 일등 공신이다.

일반적인 엔터프라이즈 환경에서는 관계형 데이터베이스를 중심으로 데이터 파이프라인이 구축되었다. 여러 가지 다양한 경로로 들어온 데이터는 일단 관계형 데이터베이스에 저장한 다음에 상호대화식 질의(SQL) 실행이나 분석을 위한 배치 작업(stored procedure) 실행 방식으로 비즈니스 논리를 구현했다. 실시간 처리가 필요하면 데이터베이스에 다소 부담을 주는 트리거를 걸거나 폴링 방식으로 특정 기간 윈도우 내의 데이터를 조건에 맞춰 뽑아내는 방식을 사용했고, 별도의 전문 검색 엔진으로 데이터베이스 레코드를 피딩한 다음에 비정형 검색을 수행하기도 했다. 하지만 이러다보니까 점점 데이터베이스에 부담이 늘어나게 되었고 뭔가 새로운 기능을 추가할 때마다 주먹구구식으로 연결해야 하는 어려움이 생겼다. 하지만 최근에는 데이터 버스를 구축해 들어오는/생성되는 방대한 데이터를 흘리고, 필요할 때마다 데이터 버스에서 가져와서 처리하는 방식으로 아키텍처가 바뀌고 있다. 처음부터 데이터 파이프라인을 잘 구축해놓으면 수평 확장 방식으로 성능을 높이는 동시에 기능이 추가될 때마다 얼기설기 위태위태 저글링을 하는 대신에 데이터 버스에서 선을 하나 끌어오면 끝난다. 처리한 데이터 역시 다시 데이터 버스로 흘리면 다른 곳에서 사용이 가능해지므로 표준화된 데이터의 고속도로를 구축할 수 있다.

아파치 카프카는 위에서 설명한 멋진 아키텍처 설계가 가능하도록 도와주는 훌륭한 도구지만, 일반적인 큐와는 달리 성능과 확장성이라는 두 마리 토끼를 모두 잡으려다 보니 개념을 잡기도 어려울 뿐더러 설치하고 설정하기는 더욱 복잡한 문제가 있다. <카프카, 데이터 플랫폼의 최강자>는 바로 이런 어려움을 해소하기 위해 카프카 기초 개념과 설치 방법부터 시작해 카프카의 설계 원칙과 프로듀서/컨슈머 예제에 이어 운영에 필요한 기초적인 지침을 제공한다. 그리고 실제 데이터 버스를 구축하고 나서 응용하기 위한 몇 가지 방안을 제시한다. ELK 스택을 사용해 카프카로부터 받은 데이터를 검색하고 시각화하는 방법을 시작으로, 최근 뜨고 있는 스트리밍 처리를 위한 카프카 스트림즈 프로그래밍 방식에 이어 카파 아키텍처를 위한 KSQL 예제를 소개한다. 마지막으로 클라우드(GCP, AWS) 환경에서 제공하는 카프카와 유사한 서비스인 펍/섭과 키네시스를 비교하면서 카프카와 비교한 장단점을 일목요연하게 정리하고 있다.

이 책을 읽고 나면 처음부터 새롭게 설계하는 시스템에만 카프카를 적용할 수 있는지 아니면 현재 운영 중인 시스템에도 카프카를 도입해서 고도화가 가능한지 궁금해질 것이다. 물론 새로 아키텍처를 설계하면서 카프카를 도입하는 방식이 효율성과 확장성을 높일 수 있지만, 기존 레거시 시스템의 아키텍처를 데이터 파이프라인 방식으로 변경할 경우에도 카프카는 아주 멋진 해법을 제시한다. 일단 들어오는 데이터를 OLTP 방식으로 직접 관계형 데이터베이스에 INSERT하는 대신 카프카에 밀어넣고 나서 커넥터를 사용해 관계형 데이터베이스로 넣는 방법을 생각해보자. 검색 기능이 필요하면 관계형 데이터베이스가 아니라 카프카에서 커넥터를 연결해 검색 엔진으로 넣으면 되고, 빅데이터 분석이 필요하면 커넥터를 연결해 하둡으로 보내면 된다. 이런 식으로 하나둘씩 관계형 데이터베이스를 중심으로 연결된 구조를 데이터 버스를 중심으로 분리된 파이프라인 구조로 변경해나가면 어느 순간 고도화가 완료된 전체 시스템을 목격할 수 있을 것이다. Confluent와 협력사, 오픈소스 공동체들이 만든 다양한 Kafka Connect 목록을 보면 카프카를 활용해 만들 수 있는 엔터프라이즈 아키텍처가 머리 속에 그려지지 않을까?

결론: 데이터를 중심으로 돌아가는 아키텍처를 구축하기 위해 노력하는 아키텍트와 개발자라면 이 책을 읽어보면 속이 시원해질 것이다.

보너스: 카프카에 대해 잘 정리된 자료 두 가지를 소개한다.

EOB

토요일, 5월 05, 2018

[B급 프로그래머] 5월 1주 소식(개발/관리도구, 고성능 서버/데이터베이스 부문)

(오늘의 짤방: version control via @bleroy)
  1. 개발/관리도구
  2. 고성능 서버/데이터베이스
(보너스: i feel *extremely* seen via @hatwell)
EOB