정산 데이터, 이제 스트리밍으로 즐기세요! (feat. Kafka streams) 1편에 이어 2편을 진행하겠습니다.5단계. 지급룰 조회 및 세팅이제 필터링된 정산 대상 데이터에 지급룰 정보를 설정할 차례입니다. 지급룰은 API 호출을 통해 조회하는데, 동일한 규칙을 사용하는 데이터에 대해 중복 API 호출을 방지하고 네트워크 통신 비용을 절감하기 위해 지급룰을 별도로 관리하고자 합니다.이러한 요구사항을 해결하기 위해 Redis를 사용할 수도 있지만, 여기서는 Kafka Streams의 상태 저장소를 활용해 보겠습니다. 상태 저장소는 RocksDB와 같은 로컬 저장소를 사용하여 KTable 형태로 키-값 데이터를 관리하며, 변경 로그 토픽을 통해 상태를 복원하여 내결함성을 보장합니다. 이렇게 구성된 상태..
정산 데이터, 이제 스트리밍으로 즐기세요! (feat. Kafka streams)정산 데이터는 실시간으로 처리되지 않고, 매일 새벽 채널별 데이터 양에 따라 비실시간으로 생성되어 처리되고 있는데, 최근 파이프라인 방식으로 데이터를 처리하기 위해 Kafka Streams를 적용하면서, 기존에 비실시간으로 생성되던 정산 데이터를 실시간 스트림으로 생성하는 방안을 고민하게 되었습니다.이 글에서는 기존 Kafka 인프라에서 별도의 클러스터 없이 스트림 처리 애플리케이션을 구축할 수 있는 Kafka Streams의 장점을 소개하고, 정산 데이터 생성 과정에 적용하는 과정을 공유하고자 합니다.Kafka Streams?kafka streams는 kafka 위에서 동작하는 클라이언트 라이브러리로, 실시간 데이터를 스트..
MongoDB ShardingMongoDB Sharding에 대한 빠른 이해를 위해 공식 문서를 간략하게 정리하고자 합니다.Sharding?데이터를 여러 머신에 분산하는 방법MongoDB는 샤딩을 통한 수평적 확장을 지원수평적 확장: 시스템 데이터 세트와 로드를 여러 서버로 나누고 필요에 따라 서버를 추가하여 용량을 늘리는 것Sharded Cluster컬렉션 수준에서 데이터를 샤딩하여 클러스터의 샤드 전체에 컬렉션 데이터를 분산구성 컴포넌트shard: 각 샤드에는 샤드 데이터의 하위 집합이 포함.각 샤드는 복제본 세트로 배포되어야 함Routing with mongos: mongos는 클라이언트 애플리케이션과 샤딩된 클러스터 간의 인터페이스를 제공하는 쿼리 라우터 역할config servers: confi..
⚠️ 본문에서는 각 개념에 대한 자세한 내용을 다루지 않고, 어느 정도의 이해도가 있다는 전제로 큰 진행 과정만을 다루고 있습니다.따라서 자세한 내용은 각 내용에 첨부된 글을 참고해 주세요.🙇🏻♂️부족한 내용은 댓글로 남겨주시면 보완하도록 하겠습니다.다루는 내용JIB를 활용한 컨테이너 이미지 빌드/푸시AWS EC2무중단 배포모니터링도메인 등록SSL 인증서이해가 필요한 개념JIBAWS EC2DockerNginxprometheusGrafanaJIB를 활용한 컨테이너 이미지 빌드/푸시일반적으로 도커 허브에 이미지를 빌드하기 위해 Docker, Dockerfile이 필요한데Gradle, Maven에서 Jib plugin을 활용해 간편하게 이미지를 빌드하고 푸시하는 방법을 알아 보려고 합니다.JIB 설정sp..
Kafka Streams아파치 카프카 애플리케이션 프로그래밍 with 자바 도서 내용을 바탕으로 간략하게 작성되었습니다.카프카 스트림즈카프카 스트림즈는 토픽에 적재된 데이터를 기반으로 상태기반 또는 비상태기반으로 실시간 변환하여 다른 토픽에 적재하는 라이브러리스트림즈 애플리케이션은 내부적으로 스레드를 1개 이상 생성할 수 있으며, 스레드는 1개 이상의 태스크를 가짐스트림즈의 task는 스트림즈 애플리케이션을 실행하면 생기는 데이터 처리 최소 단위병렬처리카프카 스트림즈는 컨슈머 스레드를 늘리는 방법과 동일하게 병렬처리를 위해 파티션과 스트림즈 스레드(또는 프로세스) 개수를 늘려 처리량 향상실제 운영 환경에서는 장애가 발생하더라도 안정적으로 운영할 수 있도록 2개 이상의 서버로 구성하여 스트림즈 애플리케이션..
대규모 시스템 설계 독서 후 링크드인 시스템 분석 대부분의 서비스 회사에서는 이미 어느 정도의 시스템이 구축되어 있다 보니 시스템 설계에 대한 관심이 크지 않았었는데, 사이드 프로젝트를 진행하며 시스템 설계에 대한 궁금증과 관심이 생기게 되었고 그 시기에 우연히 보게 된 책 제목에 흥미를 가지고 대규모 시스템 설계 기초 책을 읽게 되었습니다. 당시 링크드인을 막 시작할 무렵이다보니 문득 "링크드인 서비스는 대규모 트래픽을 감당하기 위해 시스템이 어떻게 설계되었고, 어떤 기술을 어디에 어떻게 적용하고 있을까?" 라는 궁금증을 가지고 읽게 되었습니다. 책에서는 다양한 시스템 설계 방법에 대하여 소개하고 있는데 링크드인 시스템 분석(사실 분석이라는 말은 거창하지만..)을 위해 적용해 볼 수 있는 몇 가지 주제..
AWS EC2 Amazon Linux 2023 SSL 사이드 프로젝트에 SSL 인증서를 적용하게 되었습니다. SSL 인증서 발급을 위해 여러 방법을 적용해 보면서 많이 사용되는 두 가지 방법을 적용하는 과정을 기록해 보려고 합니다. 도메인 도메인 구매, 인증, 네임서버 등록은 간략하게 넘어가도록 하겠습니다. 자세한 내용은 EC2 HTTPS로 연결하기 (1) - 도메인 구매하고 ACM 인증서 발급하기 글을 참고하였습니다. . 도메인 구매 먼저 도메인 구매는 gabia를 이용하였습니다. . 도메인 인증 서버로 AWS EC2를 이용하고 있기 때문에 도메인 인증은 AWS Route 53에서 하게 되었습니다. . 도메인 네임 서버 가비아의 도메인 네임서버가 있지만, AWS Route 53에서 도메인을 인증하였으니..
Redis로 Session 관리하기 사이드 프로젝트에서 JWT를 쿠키에 저장하는 방식으로 인가를 구현하게 되었습니다. 처음에 각각 명확한 장/단점이 존재하는 쿠키 방식과 세션 방식 중 고민을 많이 했었는데, JWT 정보가 클라이언트 측에 저장되다 보니 쿠키에 저장된 JWT 정보만 탈취하면 너무나도 쉽게 계정을 도용해서 접속할 수 있을 것 같다는 생각이 들었습니다. 사용자가 얼마나 될지 모르겠지만, 그래도 사용자에게 로그인에 대한 찝찝함을 제공하지 않으려면 그래도 안전한 세션 방식을 활용하는 것이 좋을 것 같아서 세션 방식으로 다시 적용하게 되었습니다. (찾다 보니 쿠키, 세션의 장점을 모두 활용하는 방식으로 함께 적용한다고도 합니다.) . 세션 저장소는 in-memory data store(redis)를..