본문 바로가기

전체 글7

랭킹 시스템 설계, 어떤 집계 방식을 선택할 것인가 들어가며랭킹 시스템을 구현할 때 고려해야할 부분이 있다.집계 기간 설계를 어떻게 할 것인가??실시간으로 랭킹 정보를 사용자에게 제공해 줄 것인지, 일간, 주간 등 여러 기간에 대한 랭킹을 제공해 줄 것인지... 기간을 정하고 데이터를 이용해 집계를 할 때 단순히 "오늘 하루치만 집계하면 되지 않나?" 라고 생각할 수 있지만,다음날이 되면 모든 점수가 리셋되어 랭킹 정보를 제대로 제공하지 못하는 상황이 벌어진다.그렇다고 이전 점수에 계속해서 누적하여 랭킹을 반영하면 상위 랭크의 변화는 쉽지 않을 것이다. 이러한 문제가 발생하는 이유와 해결하는 방법들을 알아보도록 하자.Fixed Window 방식먼저 Fixed Window 방식은 특정 기간을 딱 정해서 집계를 하는 방식이다.예를 들어, 1일 단위로 랭킹을 .. 2026. 4. 10.
몰려오는 트래픽을 대처하는 시스템 - 대기열 들어가며매년 명절 시즌이 되면 기차 예매를 위해 아침 7시 코레일 대기열에 올라탄다.1만번대의 대기표를 받고 기다리면서 항상 궁금했다.어떻게 시스템을 만들었을까?? 큐를 이용해 줄을 세우고 한 명씩 예매 페이지로 라우팅 시키는 방식일거라 추측만하고내부적으로 어떤 기술을 사용하고 어떻게 구현되었는지 자세하게 알지는 못했다. 그래서 이번에 그 궁금증을 풀어가는 시간을 가져보려고 한다.돌려보낼 것인가(RateLimiting), 줄 세울 것인가(Queueing)평소 100건의 주문 트래픽이 발생하던 시스템에 갑자기 10000건의 트래픽이 발생하면 어떻게 될까??서버는 정신을 못차리고 터져버릴 것이다. 서버는 동시에 처리할 수 있는 요청의 수가 정해져 있다. DB 커넥션 풀, 스레드 수, CPU 코어 등 모든 자.. 2026. 4. 3.
외부 서비스 장애, 어떻게 대응할 것인가... 들어가며서비스를 개발하다 보면 외부 API를 이용해 데이터를 받아오는 경우가 많다.이 때, 네트워크 오류나 외부 서버의 장애(서버 다운, 과부하 상태 등)로 인해 Connection Timeout이 발생하거나 에러 응답을 받게 되면 대응을 해줘야한다. 아주 잠깐 일시적으로 외부 서버 장애가 일어난 상황일 수도 있고, 외부 서버 장애로 인해 의미없는 요청을 계속해서 보내는 상황이 발생할 수도 있다. 이런 상황에서 대응할 수 있는 방법들에 대해 알아보고 그 방법들을 제공하는 Resilience4j 라이브러리에 대한 정리를 해보려고 한다.Resilience4j 란?Resilience4j는 Java/Kotlin 애플리케이션에서 외부 API 호출 시 장애를 대응하기 위한 경량 라이브러리이다.Resilience4j.. 2026. 3. 20.
인덱스 설계.. 어떻게 하는거죠??... 들어가며조회 성능을 높이려면 인덱스를 사용해야 한다는 것을 들어보기만 했지, 직접적으로 사용해보진 않았다.많은 트래픽을 경험해보지도 않았을 뿐더러, 조회 성능에 대한 고민을 해보질 않았다.그래서 이번에 인덱스에 대한 개념과 적용 방법을 정리해보려고 한다.그리고 이커머스 서비스의 상품 목록 조회 시 인덱스를 어떻게 적용하는게 좋을지에 대한 고민과 내용을 작성해보려고 한다.Index 란?Index(색인)는 많은 영역에서 사용되는 용어인데, 공통적으로 가지고 있는 의미는 어떤 내용에 대해 빨리 찾아보기 위해 먼저 보는 것이다. 예를 들어, 책을 볼 때 원하는 정보를 빨리 얻기 위해 우리는 목차를 보고, 해당 페이지로 바로 책장을 넘긴다.이 때 목차가 Index에 해당한다. 목차가 없다면 우리는 첫 페이지부터 .. 2026. 3. 13.
동시성 제어를 위한 락 전략.. 무엇을 골라 잡아야할까... 들어가며...동시성 제어에 대한 공부를 하면서 비관적 락, 낙관적 락에 대해 알게 되었다.이커머스 서비스를 개발하면서 여러 도메인에 락 전략을 적용하며 들었던 생각을 정리해보려고 한다.그리고 문득 들었던 생각이 비관적 락과 낙관적 락의 성능 차이가 있을까??어느 정도의 트래픽이 생겨야 성능 차이가 생길까?? 란 의문이 들었다.그래서 그 부분에 대한 테스트도 진행하였고 그 결과를 공유해보려고 한다. 락 전략 선택에 대한 고민현재까지 개발된 상황에서 동시성 제어를 해야 할 부분을 생각해 보았다.그중 재고 차감과 좋아요 처리에 대해 락 전략을 어떤 걸 사용해야 할지 고민했었다. 먼저 재고 차감의 경우 정합성이 중요하다 생각했다. 실제 재고보다 많은 주문이 들어왔지만 주문이 정상처리되고 이후에 사용자에게 상품이.. 2026. 3. 6.
누구를 위한 문서인가... 대부분 회사에서 혼자 일을 하다 보니 문서의 중요성을 깨닫기까지 오래 걸렸다.작년에 프론트엔드 작업을 하며 백엔드 개발자와 소통을 하는데 정리되지 않은 API 명세서로 인해 불필요한 소통을 하게 되는 경험을 하면서 문서의 중요성을 깨닫게 되었다. 전체 개발 프로세스의 작은 부분이지만 제대로 갖춰지지 않은 문서로 인해 생산성이 떨어지는 것을 경험하고 어떻게 하면 소통이 잘되는 문서를 작성할 수 있을까... 란 고민을 하기도 했다. 이번에 개발을 하기 전 작성되는 설계 문서를 알아가고 이커머스 도메인에 대한 문서를 작성하며 느낀 점을 공유하고자 한다.- 요구사항 정리 -요구사항 정리 문서를 작성하며 이 문서는 어느정도의 depth를 가지고 작성을 해야 할지 고민하게 됐다.상세하게 작성을 하려면 개발적인 내용.. 2026. 2. 13.