All
8 posts
Implementing CI/CD with Github Actions CI + AWS Code Deploy

Realtime data streaming with Apache Kafka, Druid, Superset

Base 이번에 한이음의 일환으로 클라우드 환경에서 실시간 따릉이 대시보드를 만들게 되었다. 다만 내 역할이 데이터 엔지니어링 및 인프라에 국한되어 있어 개인적으로 오픈소스를 활용하여 로컬에서 하나를 더 만들어 보려고 한다. 때문에 레퍼런스를 찾던 도중 다음과 같은 글을 발견했다. https://medium.com/@emergeit/realtime-data-streaming-with-apache-kafka-apache-pinot-apache-druid-and-apache-superset-e67161eb9666 2년이 넘은 자료이기는 하지만 내 요구사항을 모두 만족했기에 아주 적합한 래퍼런스였다. 그럼 이제 시작해보자 시작해보자 Ddareungi real-time Dashboard architecture Dashboard architecture 위는 내가 수정한 아키텍처다. 신경 쓴 부분은 아래와 같다. Docker는 Superset을 올릴때만 사용하고자 한다. 레퍼런스에서는 모든…

Apache Kafka에 대해 전반적으로 알아보자

사진카프카 로고 이번에 카프카를 로컬에서도 돌려보고 클라우드 환경에서도 다뤄보게 되었다. 그래서 카프카의 구조나 기본 개념에 대해 정리를 하고 가야할 필요성을 느꼈다. 물론 실제 구축을 할때는 인프라적인 측면에서 더 애를 먹는다. 방화벽 설정이라던지.. 그래서 기본적인 개념에 대해서는 약간 소홀해 지는 경향이 있었다. 아래 토픽 생성할 때의 shell 명령어를 보자 사실 이 문구를 그냥 copy/paste 한다면야 생성 가능하겠지만 라는 명령어가 어떤 의미인지 잘 모른다면 사실상 kafka를 사용하는 의미가 없다. 때문에 이번 기회에 깊이있게는 아니더라도 대략적으로 정리를 해보려고 한다. Back ground of Kafka Kafka는 왜 Kafka일까? 카프카의 창시자인 Jay Kreps는 kafka는 쓰기에 최적화된 시스템이기에 작가의 이름을 붙이는게 낫다고 생각하여 본인이 좋아하는 작가인 프란츠 카프카의 이름을 오픈소스 프로젝트 이름으로 명명했다. Before Kafka &…

AWS - jammy InRelease & 101 Network is unreachable 해결하기

AWS - jammy InRelease & 101: Network is unreachable jammy InRelease 오류 카프카 브로커 Ubuntu 서버에 java를 설치하려고 하는데 아래와 같은 문구가 뜨면서 동작이 되지 않았다. 무슨 jammy가 inrelease된 것 같은데 재미 하나도 없고 머리 아프다 다행히도 해당 에러에 대해서는 AWS측에서 답변 달아준 부분 있다. 공식 해결 방법 대충 해석을 보면 아래의 포인트들을 다시 체크해봐라 같은데 해석해보면 다음과 같다. 현재 EC2가 제대로 작동하는 다른 EC2들과 동일한 VPC 및 서브넷에 배포되었는가? 그게 아니라면 VPC가 인터넷 게이트웨이로 인터넷에 접근이 허용되어 있는가? 서브넷이 public이라면 인터넷 바운드 트레픽을 인터넷 게이트 웨이로 라우팅하는 라우팅 테이블이 있는가? 서브넷이 private이라면 인터넷 바운드 트래픽을 공용 서브넷의 NAT 게이트 위에이로 라우팅하는 라우팅 테이블이 있는가? 체크리스트…

AWS NAT instance를 활용한 비용절약

NAT 인프라 이번에 실시간 따릉이 대시보드 제작 프로젝트에 데이터 엔지니어 및 인프라로 참여하게 되었다. 협업 및 배포의 용이성 때문에 클라우드를 이용하기로 결정이 났고 AWS에 EC2에 카프카 클러스터를 구축하고 프로듀서를 개발하기로 하였다. AWS를 이용한 협업은 처음이기에 세세하게 사전조사를 했는데 첫째로 알게 된 사실은 AWS에서 네트워크를 설계할때 NAT의 사용은 필수적이라는 것이다. 보안상 카프카 클러스터 서버들을 외부에서 접근할 수 없게 해야하기 때문이다. 때문에 VPC 인프라를 구축할때 Public 서브넷과 Private 서브넷을 만들어 그안에 EC2 인스턴스를 두고, Bastion Host를 통해 Public 서브넷에서 Priavate 서브넷으로 접속한 후, NAT Gateway를 통해서 외부 인터넷 소스를 사설망에서 받는 식으로 운용된다. 그만큼 중요한 것으로 당연히 AWS에도 관련 서비스인 NAT Gateway가 존재하고 그것을 이용해서 손쉽게 사설망 …

DataOptimizations - Speed up your pipeline

데이터 파이프라인 최적화의 필요성 대 빅데이터 시대인 만큼 데이터 파이프라인을 최적화하는 것은 굉장히 중요하다. 특히 MLOps 분야에서는 훨씬 더 중요하다. 왜냐하면 AI 성능이 기하급수적으로 발전하면서 그만큼 추론속도나 학습 속도 또한 굉장히 중요해지고 있기 때문이다. 사진 보편적인 최적화 방안이 존재할까? 그렇다면 데이터 파이프라인을 최적화하는 보편적인 정답이 존재할까? 내 대답은 No!다. 구축하는 파이프라인마다 도메인과 요구사항들이 모두 다르기 때문에 보편적인 요구사항이란 존재할 수 없다. 사진 보편적인 컴포넌트는 존재할까? 그렇다면 보편적인 컴포넌트는 중요할까? 내 대답은 Yes다. 보편적인 컴포넌트는 존재한다. 바로 DataLake다. 데이터 파이프라인은 “수집 -> 적재 -> 처리 -> 활용”의 단계를 거치는데 이때 적재 부분에서 실제 데이터를 운영용으로쓰는 경우에는 Datalake를 사용할 수밖에 없다. 따라서 datalake를 최적화 하는것이 결국 데이터 파이프라…

뭐? Mongo DB가 가용성을 보장하지 않는다고?

제목을 보면 이게 무슨 소리인가 싶을 수 있다. 나도 처음 듣고 띠요옹? 했었다. 내가 알고 있는 MongoDB는 BASE(BA: Basically Avaliable) 즉, 가용성과 성능을 중시한 분산 시스템의 특성을 가지고 있고 또한 이 점이 기존에 ACID 특성을 가진 RDBMS와의 차이점이라고 알고 있었다. 더군다나 Mongo DB가 탄생하게 된 배경이 아래와 같은 고민 끝에 탄생한 것을 알았기에 더욱 의아했었다. 대규모 데이터를 처리해야 하는데 RDBMS는 성장 한계가 있구나 일관성과 무결성을 버리고 더 빠른 읽기 성능과 수평확장이 가능한 DB가 필요해! 그럼 어쩌다 제목과 같이 눈이 크게 떠지는 질문을 스스로에서 던졌을까 이번에 대규모 시스템 설계 기초 도서를 공부하면서 CAP이론이라는 것을 처음 접하며 이 의문이 시작되었다. CAP이론 이란? CAP 이론은 2000년에 에릭 브류어가 최초로 소개한 이론이며 어떤 분산 시스템이더라도 Consistency (일관성), Ava…

행복에 대해서 고민해 보았다.

행복에 대해서 오늘은 내가 짧게나마 ‘행복’이란 무엇일까에 대해 고민한 내용을 공유할까 한다. 최근에 인문학을 공부하면서 나에게 적용하는 등 여러가지 생각을 하고 있다. 예전에 ‘불안’(아직 글은 안썼음)에 대해서 정의를 해봤는데 이제는 행복에 대해서도 깊게 생각해보고 싶어서 “최근에는 행복이란 무엇일까”에 대해서 고민을 해보았다. 나는 언제 행복할까 그렇다면 나는 언제 행복할까, 궁극적으로 행복에 대해서 정의하기 이전에 단순하게 나는 언제 행복한지에 대해 고민해봤다. 나는 아래와 같은 상황일때 행복을 느꼈던 것 같다. 하루를 다 마치고 친구들이랑 게임할때 평일에 늦잠잘때 사람 많이 없을때 맛집 가서 맛있는거 먹을때 분위기 좋은 카페가서 여유롭게 책을 읽을때 새로운 사람을 만나서 이야기를 공유할때 아주 평범하고 누구나 특별히 게임을 안좋아한다거나 하는게 아닌 이상 대부분 행복을 느낄 것이라고 생각한다. 때문에 일반화하고 정의하기가 막막했는데 내가 예전에 불안에 대해서 생각했던 것…