2025/03 8

프로젝트에 Apache Kafka 도입이 오버 엔지니어링인지 판단해보자 (feat. Kafka Benchmark)

캡스톤 아이디어 회의때, 다른 학생이 지역 기반의 소개팅 만남 앱, 커뮤니티 등에서 kafka, redis, kubernetes.. 온갖 화려한 기술들로 점철된 계획서를 들고 왔다. 아이디어보단 백엔드 기술에 치중한 계획서를 인공지능 교수님께 내는게 맞는지는 차차하고, 써본적은 없어서 어떤 기술인지는 모르지만 대규모 트래픽 처리에 쓰이니 써보고 싶다고 한다.  기술은 도구일뿐, 비즈니스가 우선시되어야한다.  기술 도입시 가져야할 마음가짐은 '굳이?'라고 생각한다. 기존 방식에서 기교를 통해 해결하는 것도 실력이 아닐까 공부하고 도입해보려는 시도는 좋지만.. 남 일인데도 걱정이 앞선다. 이번 포스트를 작성한 이유다.  본인의 프로젝트에 Apache Kafka 도입을 고민하는 당신. 오버 엔지니어링은 염두해..

kafka 2025.03.21

NoSQL의 쓰기 성능이 좋은 이유를 뭐라고 설명해야할까?

면접 질문에서 나온 ‘NoSQL이 왜 쓰기 작업에 뛰어난 성능을 내는가요?’에서 답변을 만족스럽지 못하게 한게 찜찜했다. 좀 더 잘 말할 수 있지 않았을까?   수직적 확장(Scale-Up)보다 수평적 확장(Scale-out)에 최적화된 아키텍처대부분의 NoSQL은 분산 클러스터를 기반으로 설계되어서 쓰기 작업을 여러 노드에 분산시킬 수 있다.반면, RDB는 보통 단일 서버에 의존하는 경우가 많아서 쓰기 작업에 대해 확장성이 제한된다.스키마리스(Schema-less) 구조RDB같은 경우는 정형화된 스키마를 가지기 때문에 미리 테이블 구조를 정의한다.당연히 쓰기 작업시에도 스키마 검증을 거치면서 오버헤드가 발생한다.반면 NoSQL은 스키마가 존재하지 않기 때문에 필드값 변경에 제약이 없어 자유로운 쓰기 작..

tech 2025.03.20

ElasticSearch Completion을 이용한 검색어 자동완성 구현 (feat. 검색 엔진의 성능 개선)

검색 엔진의 성능 개선 (전적 통계 시스템)elasticsearch로 테스트 하고 있지만, 배포시 AWS Opensearch로 구동할려고 계획중 형태소 분석이나 동의어 설정같은 tokenizer가 필요 없다고 판단했다.사용자의 이름은 규칙성이 없으며 챔피언 종류별 통계는 리그오브레전드도 130개 남짓이다. 검색 쿼리 개선 minimum_should_match=100% match, term 함께 사용(term은 analyzer를 거치지 않아서 더 빠름) ElasticSearch Configuration 튜닝: thread_count 설정 인덱싱 설계 user_name : keyword champion : 자주 검색되면 keyword items : 어떤 아이..

project/wargame 2025.03.16

게임종료시 전적 갱신에 대한 트랜잭션 롤백 처리 (Saga 패턴, Axon Framework)

적어놓고 블로그 올릴까 말까 굉장히 고민했다. 어려운 내용이기도 하고.. 남들이 물어봐도 잘 설명할 수 있을까? 내가 아직 공부가 부족하다고 생각하는 파트라 조심스럽다.그래도 멀쩡히 구현해냈으니 숨길 필요는 없다고 생각해서 올려버렸다.  * 프로젝트의 Saga 도입과 트랜잭션 장애 상황에 대한 롤백 구현을 위한 포스트라, Axon Framework나 Saga 패턴에 대한 이론적인 내용은 생략하겠다.  잦은 쓰기 작업에 대한 이벤트 소싱(Event Sourcing)사용자의 실력 점수(Elo)와 현재 진행중인 게임 방의 Id(code)는 매 게임마다 변경된다.비즈니스상 데이터의 정합성이 매우 중요하며 장애 발생시 롤백이 구현되어야한다.게임 완료를 이벤트로 처리하여 이벤트 소싱 처리함  AxonFramewor..

project/wargame 2025.03.16

What Color is Your Function? (feat. 함수의 색 전염성)

본 블로그 글의 내용은 이전 글인 'Java도 한다 경량 쓰레드 (Virtual Thread)' 중에서 설명하는 함수의 색상 문제를 다룬다. Java도 한다 경량 쓰레드 (Virtual Thread)봄(Spring)은 왔는가?Java의 위대한 산물인 가상 쓰레드는 분명 JVM 생테계에 엄청난 열풍을 일으켰음에 의심할 여지가 없다.많은 개발자들이 그 패러다임에 발맞춰서 프레임워크를 개선하고 있듯downfa11.tistory.com   함수의 색 문제 (Function coloring Problem)아래의 포스트에서부터 시작한 논의로 Java, Kotlin, Go 등의 언어에 대해서 활발하게 이야기되고 있다.  What Color is Your Function? – journal.stuffwithstuff...

backend 2025.03.12

데이터에 기반한 사용자 행위 분석 - 어떤 데이터를 수집해야할까?

공격적인지 등의 플레이 스타일이나 성향 분석도 재밌을 거 같고, 인게임 데이터를 수집해서 사용자의 행위를 분석하면서 AFK나 탈주같은 트롤 행위를 검출하면 좋을 것같다. 추후 수집된 데이터들을 기반으로 다시 고민해보겠다. 일단 수집이 먼저다.  데이터 파이프라인(Data Pipeline) 구축e커머스 서비스들로 예시를 들자면, 구매나 배송같은 트랜잭션 작업 이외에 장바구니에 담거나 다시 꺼내고 쿠폰을 적용하는 모든 사용자 액션을 로그 데이터로 수집하고자 한다. 이런 사용자 행위를 수집하고 분석하는 데이터 파이프라인을 구축하는 것을 목표로 한다. 기존에 이미 사용하고 있던 Kafka를 통해서 데이터를 스트리밍할 생각이다. Case 1. Kafka Consumer가 이벤트를 받아서 구축한 ELK에서 분석Ca..

project/wargame 2025.03.12

데이터베이스 인덱스는 왜 B-tree를 사용하는가?

서론 - 인덱스에서 쓰이는 B tree가 뭔데? Tree 구조는 기본적으로 탐색시 시간복잡도 O(log N)을 가진다.  하지만 최악의 경우, 트리 노드가 한쪽 방향으로 쏠려서 O(N)을 가지게 된다.이런 경우를 방지하기 위해서 Balanced Tree를 이용한다.  balanced tree : 노드 삽입 및 삭제시 특정 규칙에 맞게 재정렬되어 양쪽 자식 수의 밸런스를 유지하는 트리최악의 경우에도 각 연산이 무조건 O(log N)를 보장하며 redblack-tree나 b-tree가 여기에 해당한다.   본론 - 각 자료구조간 비교를 통해 확인해보자데이터베이스의 인덱스에서는 위의 B tree와 B+tree 자료구조를 채택해서 사용하고 있다. 그렇다면 다른 자료구조도 많은데 왜 하필 저 녀석들을 사용할까? ..

mysql 2025.03.12

Service Mesh - Kubernetes가 있는데 왜 Istio가 필요한가요?

사실 wargame 프로젝트에서 운영하면서 도입해보고 싶었는데, 공부하면서 더욱 불필요하다고 느꼈다.일단 마이크로서비스의 수나 아키텍처 복잡도 수준이 Service Discovery나 API Gateway 정도로 관리하기 어려울 정도의 규모가 안된다. 좀 더 프로젝트가 확장되면서 양질의 서비스가 추가된다면 그때서야 다시 도입을 고민해보겠다.지금은 회사에서 쓰는 것도 아니고 '이런게 있다~' 정도만 이해하고 넘어가겠다.​ 대충 이런 궁금증Istio가 Kubernetes에서 실행되는 이유가 뭔가?클라우드 환경에서 배포되는 애플리케이션 아키텍처에서 Kubernetes와 Service Mesh의 역할이 무엇인가?Istio는 Kubernetes의 어떤 측면(aspect)를 확장하는가? 혹은 어떤 문제점을 해결해주..

kubernetes 2025.03.12