본문 바로가기

전체 글

(9)
AI 협업 기반 백엔드 개발 표준화 Case Study 1. 개요1.1 프로젝트 배경기간: 2025년 10월~11월목표: AI(Claude)와의 협업을 통해 백엔드 개발 생산성 향상 및 코드 품질 표준화핵심 산출물: DEVELOPMENT_GUIDE.md, PROMPT_GUIDE.md - AI가 프로젝트 구조를 자동으로 이해하고 개발을 수행할 수 있는 가이드 문서1.2 달성 성과 항목BeforeAtter신규 API 개발 시간2-4시간10-20분프로젝트 초기 구조 세팅1-2일30분코드 리뷰 필요 범위전체 코드핵심 로직만신규 인력 온보딩1-2주즉시 (가이드 문서 제공)2. 진행 과정 Phase 1: 아키텍처 설계 및 AI 학습목표: AI가 이해할 수 있는 명확한 4계층 구조 정립┌───────────────────────────────────┐│Presentati..
Avro 활용한 Consume Kafka Event 매뉴얼 보호되어 있는 글입니다.
[MSA] Event-Driven Saga Pattern 기반 분산 트랜잭션 처리 배경MSA 환경에서 데이터 정합성을 유지하면서도 서비스 간 결합도를 낮추기 위한 방식이다.기존에는 한 트랜잭션 내에서 처리되던 작업을 MSA 환경에 맞춰 비동기 이벤트 기반으로 전환 처리 아키텍처이벤트 브로커(Kafka)를 활용하여 비동기 이벤트 흐름으로 구성성공 / 실패 이벤트를 통해 각 참여 서비스에서 이벤트를 발행 → Orchestrator에서 수신 및 상태 집계 성공 카운팅 전략 > 모든 도메인 완료 시 최종 상태 성공으로 처리모든 도메인의 성공 이벤트 수신 시 최종 성공 처리 / 한개의 도메인이라도 실패 이벤트 발생 시 보상 트랜잭션 실행장애 대응 → 실패 이벤트 감지 시 보상 트랜잭션 트리거성공 / 실패 이벤트는 순서를 보장하기 위해 Kafka에서 작업당 partition을 지정하여 사용이벤트..
[MSA, Kafka] 공통 데이터 셀프컨테이닝? MSA에서 공통 데이터를 어떻게 다뤄야 할까?MSA(Microservice Architecture)를 도입하면 각 도메인의 독립성과 확장성이 강화되는 장점이 있지만, 공통 데이터(예: 코드 테이블, 공통 설정 등)를 어떤 식으로 관리할지에 대한 고민이 생긴다.특히 대용량 트래픽이 들어오는 서비스(예: support, display)가 공통 데이터를 실시간으로 조회하거나 수정해야 한다면?중앙 집중형 공통 테이블을 호출하면 성능 병목이 발생할 수 있고, 공통 서비스가 죽으면 전체 장애로 이어질 수도 있다.그래서 우리가 선택한 전략은 "셀프컨테이닝 + 캐싱 + 이벤트 동기화" 였다.셀프컨테이닝 방식이란?각 도메인이 자신이 필요한 공통 데이터만 갖고 있는 방식이다.다시 말해, 모든 공통 데이터를 하나의 서비스..
[MSA, Spring] Multi-Redis? MSA에서 Multi-Redis?MSA를 하다보면 다양한 아키텍쳐를 사용하여 데이터를 분리하게 된다.그 중 Redis는 주로 세션, 캐시 관리 측면에서 사용하게 된다.데이터 분리가 목적이기 때문에 1개의 Application에 Redis를 다중으로 연결하여 사용하게 되는 경우도 생길 수 있다.Spring Application에서 여러 개의 Redis를 연결하는 방식에 대해 알아보자.Redis 란?NoSQL 데이터를 인메모리(In-memory) 형태로 저장- NoSQL 데이터인 'Key-Value' 형태로 데이터를 저장함- Value로는 문자열 뿐 아닌 List, Set, Hash, Object 등 다양한 형태를 지원- 주로 캐시, 메시지 브로커 등의 용도로 사용- 인메모리 형태이므로 데이터를 저장하므로 ..
[MSA] 이벤트기반 아키텍처(Event-Driven Architecture) 이벤트(Event)란? 이벤트는 서비스 내 발생하는 모든 동작을 의미한다. 이미 일어난 일에 대하여 발생되므로 이벤트는 변경되지 않는다. 이벤트기반 아키텍처(Event-Driven Architecture) 이벤트기반 아키텍쳐는 이벤트를 생성하는 이벤트 생성자와 이벤트를 수신 대기하고 있는 이벤트 소비자로 구성된다. 생산자는 이벤트를 발행하고 소비자는 해당 이벤트를 수신하여 그에 따라 반응한다. 이벤트는 거의 실시간으로 전달되므로 이벤트가 발생하는 즉시 소비자가 이벤트에 응답할 수 있다. 이벤트를 적절한 소비자에게 전달하도록 보장하는 대기열(Queue)에 게시하거나 이벤트를 게시하고 모든 이해 당사자에게 액세스를 허용하는 "발행-구독"(Pub-Sub) 메시지 모델에 게시할 수 있다. 생산자와 소비자가 분리..
[MSA] DDD(도메인 주도 설계, Domain Driven Design) 도메인이란? 도메인은 유사한 업무의 집합이다. 우리가 온라인 A제품을 구매하는 프로세스를 예를 들어보면, 먼저 A제품을 구매하기 위해서는 검색을 하게 된다. 원하는 A제품을 찾은 후 장바구니에 담을 수도 있고, 바로 구매할 수도 있다. 구매를 클릭했을 때 회원가입이나 비회원 구매 중 선택하고 배송 정보를 입력하게 된다. 구매 전 A제품에 대한 리워드나 할인 쿠폰을 적용할 수 있으며 구매 시 결제 방법을 선택하게 된다. 구매가 완료한 뒤에 가입된 회원인 경우 구매한 A상품에 대한 적립이 가능할 수 있으며 배송 추적 기능도 가능할 수 있다. 이 프로세스에서 서비스가 제공해야할 부분은 상품 조회, 회원, 결제, 장바구니, 구매, 배송 추적, 적립, 쿠폰으로 나눌 수 있다. 이러한 해결하고자 하는 문제 영역을 ..
[MSA] Saga 패턴 관리 Saga 패턴의 등장 마이크로 아키텍처(Microserive Architecture)를 구성하면서 가장 신경써야할 부분 중 하나는 트랜잭션(transaction) 관리이다. 데이터베이스 시스템은 각각의 트랜잭션에 대해 원자성(Atomicity), 일관성(Consistency), 독립성(Isolation), 영구성(Durability)을 보장한다.(ACID) 모놀로식 아키텍처(Monolithic Architecture)에서는 DBMS에서 기본적으로 제공하는 트랜잭션(transaction)을 통해 commit, rollback을 통해 데이터 일관성이 관리되지만 Microserive에서는 애플리케이션과 데이터베이스가 분산됨에 따라 트랜잭션을 간의 데이터 일관성을 관리하기 어려워질 수 있다. 이러한 부분을 개선..