Skip to content

Order + Cart 도메인 MSA 분리 (order-api 신규 서비스) #248

@connieya

Description

@connieya

작업 내용

무신사 입사 준비를 위해 이커머스 도메인 지식과 MSA 경험을 쌓기 위한 리팩토링.
현재 모놀리스(commerce-api)에서 **order + cart 도메인을 별도 Spring Boot 서비스(order-api)**로 분리한다.
서비스 간 통신은 REST(Feign) only — Kafka는 미사용 (나중에 Kafka 도입 시 문제 인식을 명확히 하기 위함).

현재 상태

  • order, cart 도메인이 commerce-api 모놀리스에 포함되어 있음
  • OrderFacade에서 UserService, ProductService, CouponService, PaymentService를 직접 호출
  • CartService에서 ProductRepository를 직접 조회
  • PaymentFacade/PaymentProcessor에서 OrderService를 직접 호출
  • 모든 도메인이 단일 서비스에 강결합

목표 상태

서비스 도메인 포트
order-api (신규) order, cart 8081
commerce-api (기존) payment, product, brand, user, coupon, point, likes, stock, rank, activity 등 8080
  • DB는 동일 MySQL 인스턴스·동일 DB(loopers) 공유 (초기 단계)
  • 서비스 간 통신: Feign Client (REST)
  • commerce-api에서 order/cart 코드 완전 제거

서비스 간 통신

order-api → commerce-api (Feign)

호출 목적 Internal API
사용자 조회 GET /internal/v1/users/{userId}
상품 목록 조회 POST /internal/v1/products/bulk
쿠폰 할인 계산 POST /internal/v1/coupons/calculate-discount
결제 준비 POST /internal/v1/payments/ready

commerce-api → order-api (Feign)

호출 목적 Internal API
주문 조회 (ID) GET /internal/v1/orders/{orderId}
주문 조회 (번호) GET /internal/v1/orders/by-order-number/{orderNo}
주문 완료 처리 POST /internal/v1/orders/{orderId}/complete

영향 범위

신규 생성 (order-api)

  • apps/order-api/ 모듈 전체
  • domain/order, domain/cart
  • infrastructure/order, infrastructure/cart, infrastructure/feign
  • application/order (OrderFacade 수정)
  • interfaces/api/order, interfaces/api/cart, interfaces/api/internal

수정 (commerce-api)

  • application/payment/PaymentFacade.java — OrderService → OrderApiClient
  • application/payment/processor/CardPaymentProcessor.java — OrderService → OrderApiClient
  • application/payment/processor/PointPaymentProcessor.java — OrderService → OrderApiClient
  • infrastructure/payment/event/PaymentEventPublisherImpl.java — Kafka → REST
  • domain/payment/event/PaymentEvent.java — OrderLine 의존 제거
  • interfaces/api/payment/PaymentV1Controller.java — session 엔드포인트 추가

삭제 (commerce-api)

  • domain/order/, domain/cart/
  • application/order/
  • infrastructure/order/, infrastructure/cart/
  • interfaces/api/order/, interfaces/api/cart/

완료 조건

  • apps/order-api Gradle 모듈 생성 및 부트스트랩
  • order, cart 도메인/인프라 order-api로 이동
  • Feign 클라이언트 구축 (양방향)
  • Internal API 컨트롤러 구축 (양쪽)
  • OrderFacade 수정 (직접 호출 → Feign)
  • CartService 수정 (ProductRepository → Feign)
  • PaymentFacade/Processor 수정 (OrderService → OrderApiClient)
  • PaymentEvent에서 OrderLine 의존 제거
  • commerce-api에서 order/cart 코드 완전 삭제
  • POST /api/v1/payments/session 엔드포인트 PaymentV1Controller로 이동
  • order-api 컴파일 성공
  • commerce-api 컴파일 성공 (order 의존 제거 확인)
  • 테스트 이동 및 수정
  • README.md 갱신

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions