-
Notifications
You must be signed in to change notification settings - Fork 35
Open
Description
작업 내용
무신사 입사 준비를 위해 이커머스 도메인 지식과 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 → 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 모듈 생성 및 부트스트랩 - 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 갱신
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
No labels