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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions