2025/01 15

[CodeChef - 기술적 의사 결정] Redis Sentinel 도입이 필요한 이유

문제 상황단일 Redis 인스턴스 사용 시 다음과 같은 문제가 발생할 위험이 있었습니다:Redis 장애 시 데이터 유실 위험단일 Redis 인스턴스가 장애를 겪으면 캐시 데이터가 모두 유실될 위험이 있었습니다.조회수나 포인트 랭킹 같은 실시간 데이터가 손실되면, 시스템 신뢰도가 크게 떨어질 가능성이 있었습니다.고가용성 부족단일 Redis는 장애 복구 기능이 없어, 서비스 중단이 발생할 수 있었습니다.실시간 처리가 중요한 우리 프로젝트 특성상, Redis 장애 시에도 서비스가 안정적으로 유지되어야 했습니다.도입 이유 및 해결 방안Redis Sentinel은 Redis의 고가용성을 보장하며, 장애 발생 시에도 데이터 유실을 방지하고 서비스의 연속성을 유지할 수 있었습니다.자동 장애 조치Redis Sentin..

[CodeChef - 기술적 의사 결정] Redis 도입이 필요한 이유

문제 상황게시물 조회수와 포인트 랭킹 등과 같은, 데이터를 실시간으로 정확하게 처리해야 하는 것이 중요한 상황에서, 기존 시스템은 다음과 같은 문제(한계)를 가지고 있었습니다:DB 부하 및 응답 지연게시물 조회수와 포인트 랭킹(예: 실시간 유저 랭킹, 지난달 유저 랭킹 등) 등을 조회할 때 데이터베이스 조회가 느려졌습니다. 조회수가 많은 인기 게시물에서는 동시 조회 요청이 많이 쏟아지면서 DB에 과도한 부하가 발생했습니다.실시간 데이터 처리의 한계조회수를 DB에 저장하는 방식으로는 비정상적인 조회수 증가(어뷰징)를 실시간으로 확인하거나 조치하는 것이 어려웠습니다.Refresh Token 관리의 비효율성DB로 관리할 경우, 불필요한 부하와 비효율성이 발생하는, 사용자 인증을 위한 Refresh Token을..

[CodeChef - 기술적 의사 결정] Docker Hub? AWS ECR?

문제 상황프로젝트에서 Docker 이미지를 효율적으로 저장하고 배포할 레지스트리가 필요했습니다. 이를 통해 배포 프로세스를 표준화하고 관리 편의성을 확보하고자 했습니다. 레지스트리를 선택하는 과정에서, AWS ECR과 Docker Hub 중 어떤 것을 사용할지를 검토하게 되었습니다.도입 이유 및 해결 방안선택지Docker Hub: Docker의 기본 이미지 저장소로, 다양한 환경에서 접근이 가능하고 설정이 간단합니다.AWS ECR: AWS 전용의 Docker 이미지 레지스트리로, AWS 서비스와 긴밀히 통합된 보안 및 관리 기능을 제공합니다.Docker Hub를 선택한 이유Docker Hub를 이미지 레지스트리로 선택한 이유는 다음과 같습니다:사용성과 접근성: Docker Hub는 Docker 커뮤니티의..

[CodeChef - 기술적 의사 결정] CI/CD 툴, Jenkins? Github Actions?

문제 상황기존의 수동 배포 과정은 속도 저하와 반복적인 작업으로 인한 비효율성을 초래했습니다. 이를 개선하기 위해 자동화된 CI/CD 프로세스를 도입하여 배포 과정을 최적화할 필요가 있었습니다.도입 이유 및 해결 방안선택지JenkinsGitHub Actions배경 당시 EC2 프리 티어 인스턴스(메모리 1GB)를 사용 중이며, Docker와 Jenkins를 동시에 구동하려 했으나 메모리 부족으로 성능이 크게 저하되는 문제가 발생했습니다. Jenkins는 일반적으로 2GB 이상의 메모리를 요구하며 Docker로 실행할 때에도 메모리가 더 필요하여, 현재 인스턴스에서는 Docker와 Jenkins를 동시에 운영하기 어려웠습니다. 결과적으로 CI/CD 작업을 안정적으로 수행하려면 최소 4GB 이상의 메모리가 ..

[CodeChef - 기술적 의사 결정]이벤트 동시성 제어

문제 상황포인트 이벤트 진행 시 많은 사용자가 몰려 동시성 문제가 발생하였고, 이로 인해 데이터 불일치 및 성능 저하가 확인되었습니다. 이를 해결하기 위해 다양한 동시성 제어 방법(낙관락, 비관락, 분산락)을 검토한 결과, 분산 락을 도입하게 되었습니다.시스템 내에서 데이터베이스 접근이 빈번하게 발생하면서 동시성 문제, DB 부하 증가, 그리고 데이터 일관성 저하 문제가 나타났습니다. 특히, 다수의 사용자가 동시에 데이터를 갱신하거나 조회하는 경우 트랜잭션 충돌이 빈번하게 발생해 응답 지연과 데이터 오류가 발생했습니다. 이러한 문제를 해결하기 위해 동시성 제어 방식을 단계적으로 개선하여 최적의 솔루션을 찾았습니다.동시성 제어 방식 발전 과정 및 선택 이유1. DB 바로 저장특징: 별도의 동시성 제어 없이..