분류 전체보기 108

[TIL] DB Replication이란? 읽기 부하를 줄이고 고가용성을 확보해보자

팀프로젝트를 하면서 구현했던 Redis master-slave 구조를 회고하다가 DB Replication(데이터베이스 복제) 에 대해서도 이번 기회에 정리해보려고 한다.요즘 시스템 아키텍처를 고민하다보면 빠질 수 없는 주제 중 하나가 ‘데이터베이스의 고가용성과 확장성’인 것 같다. 이 두 가지를 동시에 잡으려고 할 때 꼭 등장하는 기술이 바로 Replication이다. 💡 DB Replication이란?Replication은 한 데이터베이스에서 다른 데이터베이스로 데이터가 동기화되는 것으로, DB를 다중화하는 것을 말한다. 즉, 한 데이터베이스의 데이터를 다른 데이터베이스로 실시간 또는 주기적으로 복제하는 기술이다. 다시 또 쉽게 말하면, Master(DB 원본)에서 Slave(DB 복제본)로 데이터..

Computer Science 2025.06.22

[programmers lv.3] '조건에 맞는 사용자 정보 조회하기' MySQL 2가지 풀이 방법 및 성능 비교

📌문제https://school.programmers.co.kr/learn/courses/30/lessons/164670 프로그래머스SW개발자를 위한 평가, 교육의 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr말 그대로 조건에 맞는 사용자 정보를 조회하는 쿼리를 짜면 된다.그러나 조회 포맷팅 조건이 다소 까다로웠음 중고거래 플랫폼의 사용자 중에서 중고 거래 게시물을 3건 이상 등록한 사용자만 추려, 유저 ID, 닉네임, 전체 주소, 전화번호를 조회하라는 문제이때, 전체 주소는 CITY, STREET_ADDRESS1, STREET_ADDRESS2을 공백으로 이어붙이고, 전화번호는 01012345678 형식을 010-1234-5678로 변환해야 한다. ..

[프로젝트/구현] Redis Replication 마스터-슬레이브 구조를 통한 분산 처리 적용 과정

이전 글2025.05.01 - [Project/대용량 트래픽 프로젝트] - [기술적 의사결정] MSA 환경에서 배송 정보 임시 저장소로 Redis를 사용한 이유 [기술적 의사결정] MSA 환경에서 배송 정보 임시 저장소로 Redis를 사용한 이유💡문제 상황우리 프로젝트에서는 주문을 생성할 때 배송 정보도 함께 입력받는 구조를 채택하고 있다. 현재 주문 처리 흐름은주문 ➡️ 재고 확인 ➡️ 결제 ➡️ 재고 차감 ➡️ 배송 ➡️ 주developer-jinnie.tistory.com 이전 글에서는 배송 데이터 임시 저장소로 Redis를 선택해 사용하게 된 기술적 의사결정 과정을 기술해보았다. 이번 글에서는 해당 구조에서 오는 문제점을 인지하고 해결하는 과정을 공유해보려 한다. 💡문제 상황현재 개발 중인 서..

[기술적 의사결정] MSA 환경에서 배송 정보 임시 저장소로 Redis를 사용한 이유

💡문제 상황우리 프로젝트에서는 주문을 생성할 때 배송 정보도 함께 입력받는 구조를 채택하고 있다. 현재 주문 처리 흐름은주문 ➡️ 재고 확인 ➡️ 결제 ➡️ 재고 차감 ➡️ 배송 ➡️ 주문 완료순으로 진행된다. 여기서 맞닥뜨렸던 고민이 있었다. "배송 정보는 결제가 완료되어야만 유효한데, 주문 생성 시점에서 이 정보를 어떻게 안전하게 처리할 수 있을까?" 예를 들어, 사용자가 주문을 시작하면서 배송지 정보를 함께 입력했다고 해보자. 그런데 결제를 하지 않고 중간에 이탈해버린다면? 결과적으로 결제가 완료되지 않은 주문과 배송지 정보가 DB에 불필요하게 영구 저장될 수 있다. 사용자 수가 많아질수록, 예컨대 100명이 결제 없이 이탈한다면 그만큼 불필요한 주문 데이터와 함께 민감한 개인정보(주소, 연락처 ..

[프로젝트/구현] Redis 분산락으로 재고 감소 동시성 이슈 해결하기 (2/2) (feat. Facade 패턴)

이전 글 [프로젝트/기술적 의사결정] Redis 분산락으로 재고 감소 동시성 이슈 해결하기 (1/2)필자는 MSA 기반 이커머스 프로젝트에서 상품/재고/예약구매 도메인을 맡아 진행중이다. 지난 프로젝트에서 쿠폰 도메인을 맡아 개발했을 때 Race condition 문제를 예상치 못하게 겪고 (..) 이번 프developer-jinnie.tistory.com 이전 글에서 redisson 라이브러리를 사용해 분산락을 구현하기로 결정했었다. 이번 글에선 분산락으로 재고 감소 동시성 이슈를 해결하는 과정을 기술해보려 한다. 1. Redis 및 Redisson 의존성 추가 // Redis implementation 'org.springframework.boot:spring-boot-starter-dat..

[programmers lv.4] '보호소에서 중성화한 동물' MySQL 풀이

문제https://school.programmers.co.kr/learn/courses/30/lessons/59045 프로그래머스SW개발자를 위한 평가, 교육, 채용까지 Total Solution을 제공하는 개발자 성장을 위한 베이스캠프programmers.co.kr ANIMAL_INS 테이블과 ANIMAL_OUTS 테이블이 주어지고, 여기서 보호소에 들어왔을 땐 중성화 되지 않았지만 나갈 땐 중성화 된 동물들의 아이디와 타입, 이름을 아이디 순으로 오름차순 정렬해서 조회하면 되는 문제였음 1차 풀이 ➡️실패SELECT I.ANIMAL_ID, I.ANIMAL_TYPE, I.NAMEFROM ANIMAL_INS IJOIN ( SELECT ANIMAL_ID FROM ANIMAL_OUTS WHE..