2025/06 9

전적 검색 서비스 배포 및 문제 해결 (feat. Redis 도입 논의, 이벤트 소싱에 대한 오해)

wargame 프로젝트 자체는 추가로 생각난 신기능 개발하는거 이외에 서버, 인프라적 기능은 대부분 완료된 상태다.전적 검색 서비스나 통계 지표 분석 관련 기능을 만들어 둔게 있어서 프론트엔드를 개발해봤다. react, vite.js를 이용해서 간단하게 프론트엔드를 구현하고, vercel을 통해 배포했다. https://wargamegg.vercel.app/ 메인 페이지에서 원래 인게임 소개 영상(youtube), 플레이 이미지를 넣어서 간단한 게임 소개를 가미할려고 했다.하지만 지금은 그딴거 없고 테스트 목적으로 올린거니 대충 느좋 플리 아무거나 집어넣었다. 백엔드는 클라우드 환경에서 테스트를 매번 생성하고자 해서, 서버가 안켜져있는 경우에는 더미를 생성하도록 처리했다. 추가된 게임 결과 데이터에..

project/wargame 2025.06.21

MySQL 8.0의 GTID 복제(Replication) 및 mode 변경 실습

GTID(Global Transaction ID)란?원본 서버에서 Commit된 트랜잭션과 연결된 식별자를 말한다.GTID = server_uuid:transaction_id복제의 일관성 - 모든 트랜잭션에 대해서 전역 고유 식별자를 부여자동 복구 - Slave 서버가 손실된 트랜잭션을 자동 감지 및 복구 가능Master-Slave 전환 용이성 - 복제 위치를 명시적으로 지정하지 않고 페일 오버 가능트랜잭션 기반 복제 - 트랜잭션 단위로 복제해서 복제간 충돌 방지 및 데이터 일관성 유지 GTID 기반 복제(Replication)gtid 브랜치에서 my.cnf 변경사항 확인하기 https://github.com/downfa11/mysql-replication/tree/gtid GitHub - downfa..

mysql 2025.06.18

Master-Slave 노드간 복제(Replication) 실습 (feat. MySQL 8.0)

MySQL 8.0 기반 데이터베이스 복제 실습레포지토리에서 제공하는 자동화 스크립트들도 꼭 한번 확인해보길 바란다. docker-entrypoint-initdb.d에서 User 생성, 권한 부여, 복제 구성 설정 등을 자동화하고 있다.01-init-user.sql : 복제를 담당할 User 생성 및 권한 부여 (Master Node)02-configure-replication.sql : Slave Node에서 실행될 복제 구성 실습한 내용은 Github Repository에서 확인할 수 있다.https://github.com/downfa11/mysql-replication GitHub - downfa11/mysql-replication: MySQL 8.0 기반 데이터베이스 복제와 GTID mode 실습M..

mysql 2025.06.18

이력서 주도 개발과 근황

블로그는 오랜만이다. 그동안 노느라 멈춘건 결단코 아니다. 5월에는 AWS SAA 땄다. 정보처리기사 합격 결과도 6월에 나왔다. 프로젝트를 여러 개 동시에 진행하면서 너무 정신이 없었다. 프로젝트 진행하면서 생긴 문제 해결이나 고민한 내용부터 공부한 내용까지 블로그에 글쓸거는 넘쳐서 쌓이고 있는데... 정작 퇴고할 시간이 없었다. 공모전이나 대회 참여도 꾸준히 하고 있고, CTF 문제풀이 서비스도 3월부터 진행해서 5월에 출시 배포했다. 게임은 아직 준비중인데 자꾸 재밌는 기능들이 떠올라서 여전히 컨텐츠 추가중이다. 부트캠프? 인턴? 그런거 안합니다.네 못했어요 24년 2월 소프트웨어 마에스트로 2차 코딩테스트 탈락24년 5월 BoB 최종면접 탈락24년 12월 우아한테크코스 프리코스 탈락25년 1..

카테고리 없음 2025.06.13

MySQL Full-text Search가 항상 LIKE보다 뛰어난 성능을 내는가?

부제 - 은탄환은 없다 알다시피, SQL문에서 LIKE 쿼리의 성능은 처참하다.%keyword% 형태의 문자열의 경우는 인덱스를 활용할 수 도 없어서 Full Table Scan을 해야한다. 당연히 결과값 데이터가 많을수록 성능이 더 떨어진다.아직 결과 수가 많지 않아서 LIKE 연산으로 괜찮지만 충분히 개선의 여지가 남아있다. 복잡한 텍스트 검색시 사용되는 ElasticSearch는 현재 서비스 성격상 맞지 않으며, 우리는 운영비 제로를 목표로 t2.micro를 쥐어짜내고 있는 상황이다. MySQL에서 Full-text Search라는 기능을 제공한다.Full-text Index를 사용해서 텍스트 기반 검색에 대해 더 빠르게 검색할 수 있다. Full-text Search 개요데이터베이스나 검색 시스템..

mysql 2025.06.13

Kubernetes에 도입된 네이티브 사이드카 컨테이너 Feature를 알아보자

CTF 문제풀이를 위한 'Hack Playgrond' 서비스의 핵심 기술을 설계하던 중, 사용자가 문제 컨테이너에 접속해서 Flag를 찾을 수 있도록 동적으로 Kubernetes 상에서 Pod 리소스를 관리하고 있었다. 리소스 최적화를 통해 운영비용을 획기적으로 절감하는게 1차적인 목표였기에 이를 위해서 사용자가 이용을 끝낸 컨테이너를 삭제하는 Pod Garbage Collection을 직접 구현하고 있었다. 어떻게 사용자가 이용을 끝냈는지 판단할 수 있는지 고민하던 중, 마침 2024년 쿠버에 네이티브 수준의 사이드카 컨테이너를 프로젝트에 추가했다는 사실을 알게 되어서 프로젝트에 적용 가능한지 확인차 공부해본 내용을 소개하고자 한다. 참고로 결국 기술 구현 자체는 Java 라이브러리에서 아직 Nativ..

kubernetes 2025.06.13

JVM 튜닝 목적으로 Heap 덤프 분석은 처음 해봐요 (feat. Eclipse MAT)

OOM 아닌 경우에 직접 힙 덤프 뜨는건 처음인거 같다. 겉핥기식을 넘어서 그래도 덤프 분석을 좀 진득하게 해볼 수 있었다. Heap 메모리는 JVM 내에서 임의로 생성된 객체들이 동적으로 할당되는 공간을 말한다.Heap의 덤프 파일은 운영중인 애플리케이션의 Heap 영역을 snapshot으로 기록한 파일을 일컫는다. GC Logs만 놓고 분석할때는 Eden 영역이 작은지 계속 꽉 차는 일이 잦았다.짧은 수명주기를 가지는 객체가 대부분이어서 GC시 비효율적인 메모리 사용이 생기는 것으로 보인다. ZGC같은 경우는 과도한 CPU 사용이나 TPS 저하문제를 바로잡기 위한 튜닝이 중요하다.Heap 영역을 넉넉하게 잡을수록 GC 주기가 길어진다. 반대로, 작으면 자주 GC를 돌려야해서 TPS가 저하하게 된다. ..

backend 2025.06.13

실시간 처리시 ReactiveKafka의 메시지 소비 지연 현상에 대해 알아보자

ReactiveKafkaSpring 환경에서 Kafka 사용이 편해졌다. 마치 WebMVC에서 Request 패턴처럼 사용하고, Partition을 나눠서 병렬 처리로 동시성 문제를 해결할 수 있다. Streaming 플랫폼의 본질Producer → stream 형태로 publish, subscribe → Consumer Reactive의 본질은 대상을 Async하게 다루는거고, 이를 Stream 형태(Flux)로 비동기 처리한다. ReactiveKafka 사용시 생기는 메시지 소비의 지연 현상을 알아보자ReactiveKafkaConsumerTemplate 자체가 Lazy하게 동작한다.Kafka 클라이언트 설계상, receive()가 호출되기 전까지 내부적으로 KafkaReceiver가 구동하지 않는다...

kafka 2025.06.13

k3d 실습으로 분산 클러스터의 고가용성(HA) 이해하기

k3s는 경량화된 Kubernetes 배포판으로, 테스트 목적으로 간단한 클러스터를 구축할때 주로 사용하고 etcd 대신 SQLite를 사용할 수 있다. 용어상 이해를 돕기 위해 첨언하자면 Control Plane을 Server 노드, Worker Node를 Agent 노드라고 부른다. k3d는 이 k3s을 Docker 위에서 클러스터 형태로 구동시켜주는 도구로, 우리는 이를 통해 간단하게 쿠버네티스 클러스터가 분산 환경에서 어떻게 고가용성을 유지하는지 알아볼 수 있다. Docker 위에서 동작하는 컨테이너 단위로 실행되는 k3d는 하드웨어 분산이 일어나지는 않는다.k3s를 직접 설치해서 etcd를 연동하고 HA를 구성하는게 낫긴 한데, 아무래도 귀찮다. 다만 논리적인 HA 시뮬레이션으로, 서버/에이전..

kubernetes 2025.06.12