클러스터 모드 구축하기 ## Redis Cluster Node (Master 3, Replica 3) redis-7000: image: redis:7.2 hostname: redis-7000 command: ["redis-server", "/usr/local/etc/redis/redis.conf"] volumes...
Redis 운영 관점에서 알아보기 (2)
Redis 운영 관점에서 알아보기
면접들을 보고 Redis에 대해 추가적으로 학습하면서 이론적으로는 클러스터가 뭔지, 장애 복구는 어떻게 이루어지는 구조인지를 알 수 있었다. 하지만 직접 해보거나 유의미한 차이를 직접 보지는 못했기 때문에 이번 기회에 로컬에 간단하게나마 환경을 구축해보고, 기존에 Redis로 성능 향상을 이루어냈던 선착순 응모 프로젝트를 이용하여 테스트를 해보려고 한...
Redis vs MySQL
기본적으로 Redis는 메모리 기반 동작, MySQL은 디스크 동작 이에 따른 속도 차이, 비관계형 DB와 관계형 DB라는 차이 등등의 내용은 대표적인 둘의 차이이다. Redis: 메모리 기반 Key - Value 저장소, 다양한 자료구조 제공 MySQL: 디스크 기반 RDBMS, ACID 트랜잭션 보장 메모리 기반이어서 Redis가 기...
ReentrantLock
멀티스레드 환경에서는 공유 자원에 대해 경쟁 상태를 관리해주어야 한다. 대표적인 방법으로 Java에서 synchronized 키워드를 예시로 들 수 있다. 관련해서 찾아보다가 ReentrantLock 이라는 것을 알게 되었고 정리해보려고 한다. ReentrantLock java.util.concurrent.locks 패키지에 포함된 락 클래스이다....
Kafka at-least-once 메시지 보장 중복 처리
이번 내용은 부하 테스트를 하면서 발견한 내용은 아니다. 실무에서 많이 문제가 된다는데, Kafka의 at-least-once 특성 상 발생할 수 있는 문제이다. Kafka의 메시지 전달 보장 수준 at-most-once: 메시지를 한 번 이하로 보낸다. (유실 가능) at-least-once: 메시지를 한 번 이상 보낸다. (중복 가능)...
채팅 시스템 roomId 기반 파티셔닝
Kafka는 기본적으로 병렬성과 확장성을 제공한다. 하지만 파티션을 어떻게 나누냐에 따라 메시지의 순서 보장, 병렬 처리 방식이 완전하게 달라지게 된다. 채팅 시스템 기준에서는 roomId라는 파티셔닝의 기준이 존재한다. 꼭 그래야만 하는 것은 아니지만 순서 보장의 측면에서 유의미하다. 기존 구현에서는 파티션 키 없이 메시지를 전송했다. 트래픽이 ...
GC는 단순한 자동 관리 도구가 아니다. (Java GC)
GC에 대해 흔히 알려진 개념들은 어느정도 알고 있지만, 얘기를 해보면서, 그리고 조금 더 알아가보면서 아직 모르는 부분들이 많다고 느껴져 GC에 대해 더 자세히 정리해보려고 한다. GC란? GC는 더 이상 사용되지 않는 객체를 자동으로 메모리에서 해제해주는 Java의 메모리 관리 메커니즘이라고 보면 된다. GC 덕분에 Java는 개발자가 직접 ...
채팅 시스템 Kafka Consumer 실패 처리 및 DLQ, Replay 설계 (+ Trace)
기존 채팅 시스템에서 카프카를 통해 메시지를 수신하고, Consumer에서 메시지 생성 및 키 수정 후 DB에 저장하고 브로드캐스트하는 방식을 채택했다. 이를 통해 서버가 여러 대로 분산되어 있어도, Kafka가 메시지를 브로드캐스트해주기 때문에 WebSocket 세션과 무관하게 안정적으로 메시지를 수신할 수 있다. 기존 구조 문제점 예외 ...
Docker를 이용한 로컬 개발 환경 구축
면접들을 보면서, 내가 기존에 진행했던 프로젝트들에서 더 깊게 하지 못했던 아쉬운 부분들이 보였다. 무작정 지금 상태로 계속 지원하기보다는 기존 프로젝트에서 모자랐던 부분들을 채우고 포트폴리오의 양식도 블로그 글까지 가지 않아도 문제 해결과정이 잘 드러날 수 있도록 바꿔보려고 한다. 우선 아쉬웠던 부분들을 채우기 위해 기존 프로젝트를 개선해야 하는데...
배치 성능 개선기
이번에는 기존에 작성했던 배치 작업에 대해 개선을 해보려고 한다. 좋아요 누른 도서에 따라 자녀 프로필의 자녀 성향이 바뀌는 작업이다. 나머지 배치 작업은 이번에 도서 조회 쿼리를 개선하면서 생긴 search_text 컬럼을 update 해주는 부분과 성향 히스토리가 논리적으로 1달 전에 삭제되었을 때 물리적 삭제를 진행하는 작업이 있는데 비교적 ...