본문 바로가기

이슈와해결30

대기열 기반 예약 시스템에서 MSA와 EDA를 이용해 느슨한 결합 추구하기 이 글에 대해서항해 플러스 백엔드 5기 과정을 수료하며 대기열 기반의 예약 시스템을 구현했습니다. 프로젝트를 진행하며 마이크로서비스 아키텍처와 이벤트 드리븐 프로세스를 활용해 느슨한 결합을 추구한 고민과 결정을 다룹니다. 소스 코드는 여기에서 보실 수 있습니다.  개요이 글에서는 MSA 기반의 아키텍처에서 느슨한 결합을 추구하는 방법을 살펴본다.그 방법론 중 하나인 이벤트 드리븐 아키텍처(EDA)를 중심으로 현 프로젝트에서 어떻게 적용하였는지를 주로 다룬다.또한 트랜잭션이 분리된 서비스 간의 논리적인 일관성을 보장하기 위한 방법론도 함께 다룬다. 먼저 EDA가 무엇인지 설명하고, 현재의 대기열 기반 예약 시스템에 EDA를 적용하여 느슨한 결합을 구현하는 방법을 살펴보자. 이벤트 드리븐 아키텍처(EDA)란.. 2024. 8. 11.
대기열 시스템 다양한 설계 방법 탐구 (feat. 레디스와 카프카를 이용한 O(1) 최적화) 이 글에 대해서항해 플러스 백엔드 5기 과정을 수료하며 대기열 기반의 예약 시스템을 구현했습니다. 본 글은 해당 프로젝트를 진행하며 고민하고 결정했던 내용을 다룹니다. 주요 내용으로는 은행 창구 방식과 놀이 공원 방식을 포함한 대기열 처리 메커니즘의 비교, 대기 토큰 관리 방법, 활성 토큰을 관리하는 다양한 방식(상태 기반, HashSet 기반, Counter 기반, Kafka 기반), 그리고 이를 개선하기 위한 방법을 다룹니다. 각 방식의 아키텍처, 처리 로직, 장단점을 상세히 설명하며, 최종적으로 Kafka, Redis를 활용한 개선 방안을 제시합니다. 소스 코드는 여기에서 보실 수 있습니다. 개요대기열 큐를 구현하는 방식으로 두 가지 메커니즘을 고려해볼 수 있다. 첫 번째는 은행 창구 방식이고 두 .. 2024. 8. 10.
백엔드 응답 속도 500ms 줄이고 7배 개선한 썰 목차사전 이해를 위한 구조 설명문제 상황1차 개선: 캐시 도입2차 개선: mesh 방식으로의 전환추가 개선 포인트: ForkJoinPool을 이용한 병렬 처리 & ConnectionPool 조정최종 테스트도대체 왜?! - 답은 늘 쉬운 곳에결론번외편 - 데드락 만들기본 글에 대해서주차 도메인 업무를 하면서 정기권 서비스를 개발했습니다. 해당 서비스의 성능을 개선하면서 시도한 방법과 시행착오들을 다룹니다. 실제 코드는 컨셉 코드로 대체하였고 일부 로직은 간소화하거나 대체하였음을 밝힙니다.  사전 이해를 위한 구조 및 테스트 환경 설명스프링 MSA 환경에서 API 오케스트레이션과 사가(도메인)를 구분하는 패턴을 사용한다.엔드포인트는 오케스트레이션에서 받고, 오케스트레이션에서 도메인 서비스를 호출하여 필요한 .. 2024. 4. 12.
자바에서 동시성 문제를 다루는 n가지 방법들(feat. 주식 매수) 이 글에 대해서 자바에서 동시성 문제를 다루는 n가지 방법을 소개합니다. 동시성 이슈가 많이 발생하면서도 중요하기도 한 주식 거래 시스템을 예로 들어, 매수와 매도 상황에서 발생할 수 있는 동시성 문제를 정의하고, 이를 해결하는 다양한 해법들 및 테스트 결과를 소개합니다. 예제로 사용한 소스코드는 다음 링크에서 보실 수 있습니다. https://github.com/renechoi/study/tree/main/java-concurrency-problem/src 전제 기술적 범위 먼저, 본 글에서 다루는 기술적 범위의 한계는 다음과 같다. 서버 인스턴스는 한 대로 가정한다. 분산 환경의 동시성 문제는 더 포괄적인 주제로 분리된 지면을 통해 소개하고자 한다. 해결 아이디어에서 데이터베이스를 이용한 해결 방법은.. 2024. 3. 28.
티켓 서비스 백엔드 시스템에서 중복 요청 이슈를 멱등하게 처리하기 이 글에 대해서 회사에서 담당하는 티켓 한 티켓 서비스의 QA(품질 보증) 과정에서 중복 등록 이슈가 보고되었습니다. 사용자가 등록 버튼을 연속으로 빠르게 클릭할 경우 티켓이 중복으로 등록되는 현상입니다. 본 글은 이 문제를 접하며 문제를 정의하고 해결하는 과정을 기록하고 사내에 공유한 글을 재편집한 글입니다. 여러 가지 고민과 결론, 그리고 서버 개발을 하며 만나는 멱등성과 동시성에 있어서 추가로 생각해볼 거리들을 다뤘습니다. 업무의 특성상 구체적인 용어나 코드는 컨셉으로 대체하였습니다. 요약 티켓 서비스의 QA 과정 중 발견된 중복 등록 이슈에 대해 다룹니다. 사용자가 등록 버튼을 연속으로 빠르게 클릭할 때 발생하는 중복 등록 현상에 대한 해결 방안 모색 과정을 기술합니다. 어플리케이션 수준의 검증과.. 2024. 3. 1.