Observables를 활용한 NestJS 마이크로서비스 활용 전략
카테고리
프로그래밍/소프트웨어 개발
서브카테고리
앱 개발
대상자
- 대상자: NestJS 미들웨어 및 마이크로서비스 개발자
- 난이도: 중급 이상 (RxJS 및 NestJS 마이크로서비스 기초 지식 필수)
핵심 요약
- Observables 활용 목적:
@nestjs/microservices
에서 비동기 통신(예: Redis, Kafka) 및 스트리밍 데이터 처리Observable
으로 장기 실행 작업 (예: 백그라운드 작업) 관리- 핵심 기술:
ClientProxy.send()
를 통해Observable
기반 요청-응답 패턴 구현@MessagePattern
으로 이벤트 리스닝 및 비동기 응답 처리- 장점:
map()
,filter()
등 RxJS 연산자 활용으로 비동기 변환 효율화- 실시간 웹소켓 (
WebSocketGateway
) 및 gRPC와의 호환성
섹션별 세부 요약
1. 마이크로서비스 간 통신 구현
OrdersService
와InventoryService
예제:client.send()
로Observable
반환 (비동기 응답 처리)@MessagePattern('order_created')
로 이벤트 리스닝 및Observable
응답 생성- 코드 예시:
```ts
return this.client.send('order_created', { productId: 1, quantity: 2 });
```
```ts
@MessagePattern('order_created')
handleOrderCreated(data): Observable
```
2. REST API에서 Observables 사용
HttpService
를Observable
로 변환:from()
으로Promise
→Observable
변환map()
으로 HTTP 응답 데이터 변환- 코드 예시:
```ts
return this.httpService.get(``).pipe(map(res => res.data));
```
3. WebSockets 및 gRPC 통합
- WebSocket Gateway 구현:
@WebSocketGateway()
로 서버 생성interval()
연산자로 실시간 데이터 스트리밍 (예: 주식 가격 업데이트)- 클라이언트 예시:
```ts
socket.emit('stock_updates');
socket.on('stock_updates', data => console.log('Live Stock:', data));
```
4. 대규모 데이터 처리
interval()
+take()
로 비동기 처리 스트리밍:generateReport()
에서 5개의 청크를 1초 간격으로 처리- 출력 예시:
```text
Processing chunk 1...
Processing chunk 2...
```
결론
- 핵심 팁:
Observable
을 통해 비동기 작업 (예: 마이크로서비스 통신, 스트리밍)을 효율적으로 처리RxJS
연산자 (map
,filter
,mergeMap
)를 활용해 비동기 로직을 간결하게 구현@nestjs/websockets
로 실시간 웹소켓 통신 및gRPC
와의 호환성 확보- 실무 적용 요약:
Observables
는 NestJS 마이크로서비스에서 비동기성, 확장성, 반응형 프로그래밍을 실현하는 데 필수적입니다.