처음 쿠폰 발급 서비스를 생각했을 때 동시성을 막아주려면 synchronized를 사용해서 하면 동시성에서 문제가 일어나지 않고 잘 작동하겠지라는 생각으로 synchronized로 구현했었다.서버가 1대일 때는 synchronized 키워드로 발급 동시성을 막을 수 있
오늘은 Redis 기반 선착순 쿠폰 발급 시스템의 RedisQueueWorker를 리팩토링할 필요성을 고민했다.초기에는 큐 처리를 위해 processQueue() 메서드 안에서 재귀적으로 blockingPop을 호출하고 데이터를 가져오지 못하면 while 루프를 통해
※ 이 포스팅은 쿠팡 파트너스 활동의 일환으로 이에 따른 일정액의 수수료를 제공받습니다. ❓쿠팡파트너스 API란? 쿠팡파트너스 API는 쿠팡에서 제공하는 제휴 마케팅용 상품 검색 API로 파트너스 등록을 완료한 사용자가 자신의 사이트나 앱에 상품 링크를 생성해 수익을
2PC(Two-Phase Commit, 2단계 커밋)는 분산 시스템에서 여러 데이터베이스나 서비스가 하나의 작업을 동시에 수행할 때 사용하는 트랜잭션 처리 방식이다.쉽게 말해서 "여러 개의 시스템에서 동시에 작업을 진행할 때, 이 작업이 전체적으로 성공하거나 전체적으로
❓3PC(Three-Phase Commit, 3단계 커밋)란? 3PC는 분산 시스템에서 데이터 일관성을 유지하기 위한 트랜잭션 처리 방식 중 하나다. 기존에 존재하던 2PC의 단점을 보완하기 위해 만들어졌고 Coordinator(조정자)가 갑자기 장애가 발생해도 각 시
트랜잭션 아웃박스 패턴은 데이터베이스의 상태 변경과 메시지 브로커로의 이벤트 발행을 분리하지만 정합성을 유지하기 위한 아키텍처 패턴이다. 마이크로서비스 환경에서 이벤트 기반 통신을 안정적으로 구현하고자 할 때 사용된다.이 패턴은 데이터(예: 주문 정보)를 DB에 저장하
Redis 기반 쿠폰 발급 시스템의 RedisQueueWorker 구조를 리팩토링했다. 멀티 서버 환경에서도 중복 워커 실행 없이 안전하게 단일 워커만 실행되도록 개선했다. Redis SETNX를 활용한 분산 락(setIfAbsent)과 cleanKey 구조를 적용했다
오늘은 분산 시스템에서 자주 사용되는 일관성 모델인 Eventual Consistency (최종적 일관성) 에 대해 자세히 공부했다. 실제 대규모 글로벌 서비스에선 이 개념이 성능, 확장성, 사용자 경험을 좌우하는 핵심이라는 걸 느꼈다. 특히 Eventual Consi
서버리스(Serverless)는 개발자가 서버 관리에 대한 걱정 없이 비즈니스 로직과 코드 작성에만 집중할 수 있도록 클라우드 제공자가 인프라를 자동으로 관리해주는 클라우드 컴퓨팅 모델이다.서버리스라는 용어는 "서버가 전혀 없다"는 의미가 아니라 실제 서버는 존재하지만
서비스를 운영하다 보면 "에러가 나면 에러 메시지만 보면 되지 않나?", "사용자가 불편하다고 하면 그냥 다시 테스트하면 되지 않을까?" 같은 생각이 들 수도 있다. 나도 그랬다. 하지만 실제 실서비스를 운영하면서 로그는 단순한 디버깅 도구가 아니라 서비스의 품질과 신
내가 만든 선물추천 서비스는 비회원 기반이다. 사용자는 로그인 없이 추천을 요청하기 때문에 특정 유저의 행동 흐름을 추적하려면 별도의 식별자가 필요하다. 그래서 모든 요청에 대해 traceId를 발급하고 이 값을 로그에 기록해두면 추후 요청-응답의 흐름을 정밀하게 추적
클린 아키텍처(Clean Architecture)는 소프트웨어 시스템의 유지보수성, 확장성, 독립성을 극대화하기 위해 설계된 구조적 아키텍처다. 로버트 C. 마틴(일명 ‘아저씨’)이 제안한 개념으로 모든 시스템의 핵심은 의존성 방향과 책임의 분리에 있다고 강조한다. 핵
결제 시스템(Payment System)은 사용자의 지불 요청을 받아 신용카드, 계좌이체, 간편결제 등 다양한 방식으로 거래를 처리하고 그에 대한 정산 및 회계 처리까지 포함하는 복합적인 시스템이다. 실시간으로 수많은 요청을 처리해야 하고 금전이 직접적으로 오가기 때문
Kafka를 사용하는 이유는 비동기 메시지 처리, 처리량 증가, 서비스 간 결합도 감소 등을 통해 시스템의 안정성과 확장성을 확보하기 위함이다. 하지만 Kafka가 죽으면 데이터는 어떻게 되나?라는 질문을 받았을 때 “Kafka가 안정적이니까 괜찮다”는 식의 답변은 치
네이버 기프트샵과 텐바이텐의 상품 데이터를 크롤링해 검색/추천용 통합 DB를 구축하는 것을 목표로 한다. 그러나 두 사이트의 데이터 제공 방식과 스키마는 크게 다르다.네이버 기프트샵공식 검색 API 또는 HTML에서 JSON 형태의 응답 제공상품 ID, 가격, 옵션,
목표 다양한 쇼핑몰(텐바이텐, 네이버 등)에서 상품 정보를 자동 수집 관리자가 직접 점수를 부여하여 추천 상품을 우선 노출 성별/연령대/취미 정보를 활용해 맞춤형 추천 관리자용 대시보드와 서비스용 API를 제공 수집할 정보 크롤링 시 확보할 상품 정보는 다음과 같다.
모놀리식 아키텍처는 애플리케이션 전체가 하나의 코드베이스와 하나의 배포 단위로 구성되는 구조다. 회원, 주문, 결제 같은 다양한 기능이 하나의 프로젝트 안에 모두 포함되고 보통 하나의 데이터베이스를 공유한다. 단일 애플리케이션으로 동작하기 때문에 개발과 배포 과정이 단
PUT: 리소스를 “통째로 대체”하는 메서드이다. 요청 바디에 해당 리소스의 완전한 표현(representation)을 담아야 하며, 서버는 이를 기존 리소스와 교체한다. 즉, 기존 리소스를 날려버리고 새로운 리소스로 갈아끼운다고 생각하면 된다.PATCH: 리소스를 “