1. OrderMicroservice의 역할
주문(Order) 처리 전담 서비스.
User, Product, Payment 마이크로서비스와 gRPC 통신.
주문 생성, 상태 변경(예: 배송 시작)과 같은 핵심 비즈니스 로직 담당.
2. 환경 설정 (.env)
DB_URL=mongodb://mongo:mongo@mongo_order:27017/order?authSource=admin&retryWrites=true&w=majority HTTP_PORT=3000 TCP_PORT=3001 GRPC_URL=order:3001 USER_HOST=user USER_TCP_PORT=3001 USER_GRPC_URL=user:3001 PRODUCT_HOST=product PRODUCT_TCP_PORT=3001 PRODUCT_GRPC_URL=product:3001 PAYMENT_HOST=payment PAYMENT_TCP_PORT=3001 PAYMENT_GRPC_URL=payment:3001
DB_URL: MongoDB 접속 경로.
각 서비스(User/Product/Payment) gRPC URL 명시.
3. AppModule
ConfigModule: 환경 변수 관리 + Joi 검증.
MongooseModule: MongoDB 연결.
ClientsModule: User/Product/Payment 서비스 gRPC 클라이언트 등록.
OrderModule: 주문 관련 도메인 모듈.
@Module({
imports: [
ConfigModule.forRoot({ ... }),
MongooseModule.forRootAsync({ ... }),
ClientsModule.registerAsync({ clients: [ ... ] }),
OrderModule,
],
})
export class AppModule {}
4. main.ts
Nest 애플리케이션 생성 후 Order gRPC 서버 연결.
proto/order.proto 사용.
async function bootstrap() {
const app = await NestFactory.create(AppModule);
const configService = app.get(ConfigService);
app.connectMicroservice<MicroserviceOptions>({
options: {
package: OrderMicroservice.protobufPackage,
protoPath: join(process.cwd(), 'proto/order.proto'),
url: configService.getOrThrow('GRPC_URL'),
},
});
await app.startAllMicroservices();
}
5. OrderController
(1) 주문 생성
@MessagePattern({ cmd: 'create_order' })
async createOrder(request: OrderMicroservice.CreateOrderRequest) {
return this.orderService.createOrder({
...request,
payment: {
...request.payment,
paymentMethod: request.payment.paymentMethod as PaymentMethod,
},
});
}
create_order 메시지 수신.
결제 방식(paymentMethod) 변환 후 OrderService 호출.
(2) 배송 시작 이벤트 처리
async deliveryStarted(request: OrderMicroservice.DeliveryStartedRequest) {
this.orderService.changeOrderStatus(request.id, OrderStatus.deliveryStarted);
}
delivery_started 이벤트 발생 시 주문 상태를 배송 시작으로 변경.
6. 주문 처리 프로세스
클라이언트 → OrderMicroservice: create_order 요청.
OrderController: 요청 DTO 처리 → OrderService.createOrder().
OrderService:
MongoDB에 주문 데이터 저장.
User 서비스: 사용자 확인.
Product 서비스: 재고 확인.
Payment 서비스: 결제 처리.
배송 서비스: 배송 시작 시 이벤트 전송 → deliveryStarted() 실행.













댓글 ( 0)
댓글 남기기