Nodejs

 

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. 주문 처리 프로세스

  1. 클라이언트 → OrderMicroservice: create_order 요청.

  2. OrderController: 요청 DTO 처리 → OrderService.createOrder().

  3. OrderService:

    • MongoDB에 주문 데이터 저장.

    • User 서비스: 사용자 확인.

    • Product 서비스: 재고 확인.

    • Payment 서비스: 결제 처리.

  4. 배송 서비스: 배송 시작 시 이벤트 전송 → deliveryStarted() 실행.


 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

about author

PHRASE

Level 60  라이트

항아리 속에 든 한 개의 동전은 시끄럽게 소리를 내나, 동전이 가득 찬 항아리는 조용하다. -탈무드

댓글 ( 0)

댓글 남기기

작성