
정산 데이터, 이제 스트리밍으로 즐기세요! (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개 이상의 서버로 구성하여 스트림즈 애플리케이션..

Java to KotlinKotlin version먼저 코틀린 설정을 위해 아무 .java 파일 우클릭 후 Convert Java File to Kotlin File 기능을 사용하면 OK, Configure Kotlin In the Project로 코틀린 설정이 가능합니다.JDK 21을 사용할 예정이라서 Kotlin 버전은 2.1.0으로 설정하였습니다.※ Which versions of Kotlin are compatible with which versions of Java?IDE의 도움으로 kotlin 설정을 마치면 build.gradle, settings.gradle 파일에 코틀린 설정이 추가됩니다.Kotlin 설정 및 gradle.kts로 변환䷿AS-IS) build.gradleplugins { ..

Prometheus & Grafana모니터링에 대한 부분을 다시 정리해 보려고 한다.서비스를 운영하며 어디에 어떤 문제가 발생했는지 사전 대응하고, 실제 문제 발생 시에도 원인을 빠르게 파악하고 대처하기 위해애플리케이션의 CPU, Memory, Connection, Request 같은 수많은 지표들을 확인하는 것이 필요Spring Actuator애플리케이션이 살아있는지, 로그 정보는 정상 설정 되었는지, 커넥션 풀은 얼마나 사용되고 있는지 등 확인Production-ready Features지표(metric): CPU 사용량추적(trace): 이슈 코드 추적감사(auditing): 고객 로그인, 로그아웃 이력 추적모니터링: 시스템 상태Dependencyimplementation 'org.springfra..

📊 동시성 제어 방식 비교SeriesJava Concurrency ControlDatabase Concurrency ControlRedis Concurrency ControlKafka Concurrency ControlCompare Concurrency Control⚠️ 로컬에서 테스트한 결과이고,서버 환경과 여러 요인들에 의해 결과가 달라질 수 있고, 정확하지 않을 수 있습니다.Case 01한정수량 : 50,000Total User : 296Processes : 8Threads : 37(DB Named 방식은 제외).시간 내에 모든 트래픽을 성공적으로 처리한 방식DB PessimisticRedis IncrKafka + Redis.일부 성공을 하긴 하였지만, 트래픽을 버티지 못하고 성능 문제가 발생한 ..