WooLam

포인트 결제 동시성은 어디서 막아야 할까: 조건부 UPDATE부터 Redis 분산 락까지

Coffee Order Service의 포인트 결제를 설계하면서 처음 떠올린 해법은 Redis 분산 락이었다. 결제처럼 정합성이 중요한 기능에 동시 요청이 들어온다면, 같은 사용자의 요청을 한 줄로 세워야 안전하다고 생각했다. 그런데 설계를 따라가다 보니 질문이 달라졌다. 정말 Redis가 있어야 포인트 잔액을 지킬 수 있을까? DB가 이미 ...

단일 Redis 장애에서 Sentinel까지: Primary-Replica와 자동 Failover 이해하기

Redis를 캐시나 분산 락에 사용하면서도 그동안은 Redis 프로세스가 정상적으로 동작한다는 전제를 당연하게 생각했다. 장애에 대비하려면 Replica를 두면 된다고 막연히 생각했고, Sentinel은 그 Replica를 관리하는 부가 기능 정도로 이해했다. 이번에 학습하며 생각이 달라졌다. Replica는 데이터를 복제하지만 스스로 장애를 판단해...

대용량 트래픽 처리는 서버를 늘리는 것부터 시작하지 않는다

대용량 트래픽을 처리해야 한다는 말을 들으면 먼저 서버 사양을 높이거나 인스턴스를 늘리는 방법을 떠올렸다. 캐시를 붙이고 비동기 처리를 적용하는 것도 빠지지 않았다. 하지만 Redis, Kafka, k6를 함께 학습하면서 질문이 조금 달라졌다. 대용량 트래픽을 처리한다는 것은 단순히 서버 성능을 높이는 일이 아니라, 데이터 처리 책임을 분리하...

기록을 저장하는 것에서 연결하는 것으로: 온톨로지와 AI 세컨드 브레인

온톨로지를 알아보게 된 이유 AI 세컨드 브레인이라는 개념을 알아보다가 온톨로지(Ontology)라는 낯선 용어를 만났다. 처음에는 AI 세컨드 브레인을 메모를 저장해 두었다가 자연어로 검색하는 시스템 정도로 생각했다. 그런데 내용을 따라가다 보니 단순히 기록을 찾는 것만으로는 충분하지 않은 경우가 있었다. 예를 들어 Redis라는 단어가 포함된 ...

Kafka 재처리와 DLT는 예외 처리가 아니라 운영 설계다

들어가며 Kafka를 처음 보면 Producer가 메시지를 보내고 Consumer가 메시지를 처리하는 구조가 먼저 보인다. 나도 처음에는 “주문 서비스가 이벤트를 발행하고, 결제나 포인트 서비스가 구독해서 처리하면 되겠구나” 정도로 이해했다. 하지만 공부할수록 더 중요한 질문은 메시지를 보내는 방법이 아니었다. Consumer가 처리하다 실패하면 ...

RAG의 핵심은 생성이 아니라 검색이다

오늘 정리한 이유 RAG를 처음 봤을 때는 단순히 “LLM 답변을 더 잘하게 만드는 기능” 정도로 생각했다. 사용자가 질문하면 관련 문서를 찾아서 답변에 넣어준다. 겉으로만 보면 그렇게 복잡해 보이지 않았다. 그런데 조금 더 정리해보니 핵심은 LLM보다 검색 파이프라인에 가까웠다. RAG는 LLM 자체를 더 똑똑하게 만드는 기술이 아니다. 답변 전...