작업 내용
무신사 입사 준비를 위해 이커머스 도메인 지식과 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/
완료 조건
작업 내용
무신사 입사 준비를 위해 이커머스 도메인 지식과 MSA 경험을 쌓기 위한 리팩토링.
현재 모놀리스(commerce-api)에서 **order + cart 도메인을 별도 Spring Boot 서비스(order-api)**로 분리한다.
서비스 간 통신은 REST(Feign) only — Kafka는 미사용 (나중에 Kafka 도입 시 문제 인식을 명확히 하기 위함).
현재 상태
목표 상태
서비스 간 통신
order-api → commerce-api (Feign)
GET /internal/v1/users/{userId}POST /internal/v1/products/bulkPOST /internal/v1/coupons/calculate-discountPOST /internal/v1/payments/readycommerce-api → order-api (Feign)
GET /internal/v1/orders/{orderId}GET /internal/v1/orders/by-order-number/{orderNo}POST /internal/v1/orders/{orderId}/complete영향 범위
신규 생성 (order-api)
apps/order-api/모듈 전체수정 (commerce-api)
application/payment/PaymentFacade.java— OrderService → OrderApiClientapplication/payment/processor/CardPaymentProcessor.java— OrderService → OrderApiClientapplication/payment/processor/PointPaymentProcessor.java— OrderService → OrderApiClientinfrastructure/payment/event/PaymentEventPublisherImpl.java— Kafka → RESTdomain/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-apiGradle 모듈 생성 및 부트스트랩POST /api/v1/payments/session엔드포인트 PaymentV1Controller로 이동