이벤트를 활용한 실시간 데이터 전송 및 MSA 설계이번 주차에서 얻어가고 싶은 것이번 주는 MSA 환경에서 실시간 데이터 흐름을 어떻게 처리할 수 있을지에 대한 이해를 넓히는 데 초점을 맞추고자 한다.기존에는 마이크로서비스 간 데이터 전달을 동기 호출이나 폴링 방식에 의존했는데, 이번엔 이벤트 기반 아키텍처를 적용하면서 관심사 분리, 실시간 처리, 트랜잭션 연계라는 세 가지 키워드를 중심으로 설계를 고민해보자.또한, 이벤트를 활용하면서 발생할 수 있는 데이터 정합성 이슈와 보상 트랜잭션 처리에 대해 많이 고민해보자. 과제 요구사항주문 완료 시 외부 플랫폼으로 주문 정보를 전송하는 로직을 이벤트를 활용하여 개선MSA 기반 구조에서 서비스 간 의존성을 최소화하면서도 실시간성을 확보하는 아키텍처 설계 문제 상..
Redis 기반 랭킹 및 동시성 처리 시스템 구축이번 주차에서 얻어가고 싶은 것실시간 데이터 처리와 동시성 제어가 동시에 요구되는 환경에서 Redis가 얼마나 유용하게 사용될 수 있는지를 체험해보고자 한다.특히 Sorted Set 자료구조를 활용해 랭킹 시스템과 선착순 쿠폰 시스템을 구성하면서, 동시에 발생하는 업데이트 요청을 어떻게 안정적으로 처리할 수 있을지를 고민하고 싶다.또한, 기존의 DB 기반 락 처리 방식에서 Redis로 개선했을 때 성능과 구조적 이점이 어떻게 달라지는지도 꼭 확인해보고 싶다. 과제 요구사항실시간 판매량 기반 상품 랭킹 시스템 구축Sorted Set을 활용한 랭킹 갱신 및 조회 로직 설계기존의 낙관적 락 + 분산락 쿠폰 발급 로직을 Redis 기반으로 개선Redis 기반 동..
Redis 기반 분산락 적용 및 캐싱이번 주차에서 얻어가고 싶은 것분산 환경에서의 동시성 문제를 어떻게 다뤄야 할지에 대한 감을 잡고 싶었다.특히, 단일 인스턴스가 아닌 멀티 인스턴스 환경에서 데이터 정합성을 보장하려면 어떻게 해야 하는지 실제 적용을 통해 체득해보고 싶었다.또한, 데이터 조회 성능 개선을 위해 Redis를 활용한 캐싱 전략을 실험하고, 실제로 성능이 얼마나 향상되는지도 확인하고 싶었다. 과제 요구사항분산락 구간 식별 및 분산락 적용캐싱이 필요한 부분 식별 및 캐싱 적용동시성 테스트 및 캐시 성능 비교 테스트 문제 상황(1) 베스트셀러 데이터를 매번 DB에서 조회하면서 트래픽이 증가할수록 응답 지연이 발생했고, 특정 시점에서는 DB 부하가 급격히 올라가는 문제가 있었다.(2) 인기 도서..
데이터베이스 락 기반 동시성 제어이번 주차에서 얻어가고 싶은 것동시성 문제가 발생하는 원인을 깊이 이해하고, 그에 대한 효과적인 대응 전략으로서의 DB 락 기반 제어 방식을 익히고 싶다.단순히 "동시성 제어가 필요하다"는 수준을 넘어서, 어떤 방식이 언제 적절한지 구체적으로 판단하고 설계할 수 있는 능력을 키우고 싶다. 과제 요구사항동시성 문제 식별(포인트 충전/사용, 쿠폰 발급, 주문 재고 처리 등)DB 락 전략(낙관적 락, 비관적 락)의 적용 비교테스트 환경에서 동시 요청을 시뮬레이션하여 실제 문제 재현 및 해결 문제 상황(1) 선착순 쿠폰 발급 과정에서 동시성 문제가 발생했다. 재고가 남아 있음에도 불구하고 중복 발급되거나, 재고보다 많은 쿠폰이 발급되는 문제가 발생했다. 주문 시 상품 재고 차감에..
데이터베이스 설계이번 주차에서 얻어가고 싶은 것데이터베이스를 어떻게 활용해야 '잘' 활용하는 것인지 알고싶다.여태는 단순히 DB를 사용해왔다면 이제는 효율적인 방안을 활용하고, 다양한 상황에서의 대응 전략을 유연하게 가져갈 수 있는 방법들을 배우고 싶다. 과제 요구사항Infrastructure Layer 작성기능별 통합 테스트 작성(Testcontainers 활용)쿠폰 발급 경쟁 조건 테스트외부 메시지 전송 실패 시 fallback 처리 검증) 문제 상황(1) testcontainers 활용 시 DB 생성 오류가 발생했다. 테스트 DB의 특정 테이블이 올바르게 생성되고 삭제되지 않는 문제다.(2) 선착순 쿠폰 발급 시 race condition으로 인해 올바르게 재고 처리가 되지 않는 문제가 발생했다.(..
클린 아키텍처이번 주차에서 얻어가고 싶은 것가장 흔하고 장벽이 낮은 레이어드 아키텍처에서 벗어나 다차원 채널, 복잡한 구조에서 빛을 발할 수 있는 헥사고날 아키텍처, 클린코드 아키텍처에 대해 알아보고 모두 적용할 수는 없겠지만 개념을 조금씩 적용해보는 것을 목표로 한다. 과제 요구사항이번 주차 과제 요구사항은 다음과 같았다. 일부 기능에 대한 비즈니스 로직과 단위 테스트를 구현한다.이때, 이커머스 서비스의 핵심인 주문/결제 기능은 클린 아키텍처를 적용한다. 문제 상황여태 레이어드 아키텍처만 고려하고 적용해온 입장에서 클린 아키텍처를 적용하라니, 어디서부터 시작해야할 지 막막했다. 또 차라리 전부 클린 아키텍처를 적용하는 것이 목표였다면 BP를 참고해 구조를 설계했겠지만, 핵심 기능 외에 레이어드 아키텍처..
서버 설계이번 주차에서 얻어가고 싶은 것"많이 고민하기"설계 단계에서 중요한 것은 얼마나 고민해보느냐인 것 같다. 엣지 케이스들을 최대한 많이 고려하고 대응 방법을 고려해두어야 나중에 구현 단계가 편해진다.물론 그렇다고 해서 강박을 가지거나 과도한 고민을 할 필요는 없다. 설계는 구현 단계에서도 언제든지 수정될 수 있다. 아무리 좋은 설계여도 그럴 수 밖에 없는 상황이 생긴다고 생각한다. 현 단계에서 할 수 있는 것들을 하고 나중에 프로젝트를 진행하며 어떻게 달라지는지 직접 깨달으며 그 안에서 많은 것들을 깨닫는 것이 이번 주차의 목표다. 과제 요구사항프로젝트 시나리오 선택나의 경우 가장 흔하지만 많은 것들을 다뤄볼 수 있는 이커머스 서비스를 하기로 결심했다. 특히 쿠폰을 선착순으로 발급 받는 시스템, ..
TDD (Test Driven Development)테스트 주도 개발, 테스트 작성 후 구현 코드를 작성하는 방식이다. TDD는 학생때부터 계속해서 들어오고 이론은 알고 있지만, 실천해보진 못한 개발 방법론 중 하나였다. 1주차 과제를 통해 TDD로 개발을 진행했고, 왜 TDD를 사용하는지 조금이나마 알게 되었다. 배운 개념들과 기록들은 차차 블로그로 남길 예정이다. 그리고 테스트 더블, TDD의 원칙 등을 알 수 있던 소중한 시간이었다. 과제 요구사항핵심 요구사항을 간단하게 적자면 아래와 같다. 포인트 충전 서비스를 개발한다.기본 기능을 구현한다. (포인트 충전, 포인트 사용, 포인트 조회, 포인트 내역 조회)단위 테스트를 먼저 작성해야 한다. (TDD)동시에 여러 건의 포인트 충전, 이용 요청이 들어..