[PlantiFy/v3] MSA 환경에서 결제 시스템 리팩토링 - 리팩토링 개요 / 구조 재설계와 정합성 문제 해결
·
💻/프로젝트
리팩토링 개요 및 상황(문제의 시작) 내부 결제 수단(Pay)를 먼저 구현하면서 Pay가 결제 요청의 진입점이자 오케스트레이터라고 판단-> Pay가 결제 요청 수신, 흐름 조율 담당 (발생한 의문) 그런데 Pay가 금전 원장 관리하면서 결제 확정까지 직접 수행하는 건 책임 분리에 맞지 않다고 판단-> 결제 성공 판단을 별도의 Payment 서비스로 분리 1) Pay를 도메인 기준으로 다시 분리해보니 기존 구조에서 PG + Pay 역할이 명확히 분리되지 않았음 2) 도메인 별로 분산 락 적용했지만, 락 기준이 요청 단위가 아닌 서비스 단위로 분산 -> 동일 자원에 대한 동시성 제어 일관 X= Pay, Transaction, Payment 각각에서 서로 다른 락 사용 -> 동일 유저의 결제 요청이라도 서로..
[PlantiFy] 숲 꾸미기 & 캐시 서비스 - 아이템 구매 시 캐시 차감 동시성 처리
·
💻/프로젝트
아이템 구매시퀀스 다이어그램Item Service: 구매 로직과 도메인 흐름 관리Cash Service: 캐시 생성 및 차감에 대한 정합성 관리Client) 아이템 구매 위해 `Authorization: Bearer JWT` 헤더 함께 Item Serivce에 요청을 보냄Item Service) `JwtFilter` 통해 JWT 검증하고, 인증 정보를 `SecurityContext`에 저장해 `userId` 식별Item Service) Item DB에 접근해 구매 대상 아이템 조회하고 이 정보 기반으로 구매에 필요한 총 금액 계산Item Service) `FeignAtuhInterceptor` 통해 기존 `Authorization` 헤더 그대로 유지한 채 Cash Service에 캐시 차감 요청 보냄Ca..
[PlantiFy] 숲 꾸미기 서비스 - UI 행위 단위 GraphQL 설계
·
💻/프로젝트
상황: 빈번한 상태 변경이 발생하는 도메인 구조MyItem은 아이템 보관 정보 담당하고, 그중 현재 사용 중인 아이템은 UsingItem 테이블(MyItem UsingItem은 1:1 관계) *숲 꾸미기 서비스 개요 참고 보유 -> 실제 공간에 배치ex. 싸이월드 미니룸ERD 설계Item (상점 아이템) └─ MyItem (사용자가 보유한 아이템) └─ UsingItem (공간에 배치된 아이템)Ite" data-og-host="debug.tistory.com" data-og-source-url="https://debug.tistory.com/317" data-og-url="https://debug.tistory.com/317" data-og-image="https://scrap.kakaocdn.net/..
[PlantiFy/v2] MSA 환경에서 결제 시스템 구축하기 2 - Redis 분산 락과 멱등성 설계로 동시성 리팩토링
·
💻/프로젝트
결제 시스템에서 가장 어려운 부분은 결제 확정(Confirm Payment) 단계Pay 잔액 차감 / 포인트 사용 or 적립 / 트랜잭션 상태 확정 / 정산 데이터 기록 등 여러 상태가 동시에 변경됨IF. MSA 환경에서 네트워크 장애, 중복 요청, 다중 인스턴스 환경, 서비스 간 호출 실패-> 상태만 성공이고 금액은 차감되지 않은 불일치 문제가 발생할 수 있음=> 원장(Ledger) 정합성 문제 -> 결제 확정 = Ledger 변경이 성공했을 때만 상태를 성공으로 전이 *결제 시스템 개요 확인 [PlantiFy/v2] MSA 환경에서 결제 시스템 구축하기 1 - 서비스 개요 / 책임 분리 기반 상태 전이 결제결제 서비스 개요자체 결제 수단을 운영하고, 이를 기반으로 결제, 환불, 정산까지 처리하는 전..
[PlantiFy] MSA 환경에서 Kakao Social Login 구현하기 - 서비스 개요 / Auth 병목 문제와 JWKS 기반 분산 인증 구조 개선
·
💻/프로젝트
서비스 개요 및 상황Gateway 병목 피하려고 Auth 서버 분리Gateway 중앙화: 모든 트래픽 물리적으로 한 곳 통과 -> 처리량 병목, latency 직접 추가Auth 중앙화: 인증 로직만 위임 -> 각 서비스 독립 실행, Auth는 검증 시에만 호출여러 인스턴스로 스케일 아웃하면 부하 분산 가능 Gateway 중앙 인증 구조Gateway 죽으면 전체 다운모든 인증 트래픽 Gateway 집중Client → Gateway (인증) → 모든 서비스 현재 구조모든 서비스가 Auth 서버의 `/validation-token` 호출하는 구조Client → Service → Auth (검증: /validate-token 호출)@PostMapping("/v1/auth/validate-t..
모델 컨텍스트 프로토콜(MCP; Model Context Protocol)
·
💻/BE
모델 컨텍스트 프로토콜(MCP; Model Context Protocol)AI 애플리케이션을 외부 시스템에 연결하기 위한 오픈 소스 표준AI 애플리케이션을 위한 USB-C 포트USB-C) 전자 기기 연결하는 표준화된 방식 제공MCP) AI 애플리케이션 외부 시스템에 연결하는 표준화된 방식 제공AI 애플리케이션(ex. GPT/Claude) MCP 데이터 소스(ex. 로컬 파일, DB), 도구(검색 엔진) 등 Architecture클라이언트-서버 아키텍처MCP 호스트: 하나 이상의 MCP 클라이언트 조정하고 관리하는 AI 애플리케이션MCP 클라이언트: MCP 서버와 전용 일대일 연결 유지/ MCP 호스트가 사용할 수 있도록 MCP 서버에서 컨텍스트 가져오는 구성 요소MCP 서버: 실행 위치 관계 X MC..
aeongg
'💻' 카테고리의 글 목록