status 504 GatewayTimeoutException 처리방법 문의입니다.
해당 강의를 보면서 회사에 새로운 NestJS & TypeORM 서버를 올려둔 상태입니다.
오늘 발생한 이슈인데 로그에서는 504에러가 발생하였지만 해당 코드를 제외하고 모두 실행되었고 DB 데이터 값까지 수정된 상태였습니다.
이슈가 발생했던 부분의 간단한 코드입니다.
async cancelReservation (body: Dto) {
...
await thirdPartyAPI1(); // 504 exception 발생, 해당 구문을 제외하고 모두 실행완료
await thirdPartyAPI2(); // 결제취소 알림
await thirdPartyAPI3(); // 결제취소 알림
...
return this.repository.save(body);
}
async thirdPartyAPI1() {
// 결제취소 API
try {
...
axios.post(...);
...
} catch (e) {
throw new BadRequestException(e);
}
}이슈 발생 이후 504 exception 개념에 대해 찾아보았지만 약간 이해만 했을뿐 현 상황에 대해 해결법이 떠오르지 않아 질문드립니다.
async / await 로 구성된 코드에서 await 코드가 완전히 종료되기전까지는 다음 코드를 실행하지 않는것으로 알고 있는데 아래의 코드들이 실행된 이유는 무엇인가요?
스스로 추측하기에는 nest js 자체에서 await 응답대기에 대한 제한시간이 있는것 같은데 정말 있다고 한다면 이 부분에 대해 수정이 가능한가요?
아직 개발경험이 많지않아 애매하게 질문드리는 점 죄송합니다. 단순히 코드의 논리적 오류가 아니라서 구체적인 질문을 하기도 힘드네요 ㅠㅠ 해당문제에 대해 접근을 어떻게해야될지부터가 막막합니다..
추가질문) axios나 nestjs/axios에서 timelimit을 설정할 수 있는것 같은데 이 부분을 설정해줬을때 시간이 초과되면 자동으로 코드실행을 중단하고 exception error를 발생시켜주는지 궁금합니다. 또한 HttpExceptionFilter나 SuccessInterceptor 처럼 글로벌하게 세팅이 되는지도 궁금합니다.
답변 1
1
찾아보니 nest js 공식문서에 time interceptor 코드가 있었고 해당 기능 추가했습니다.
응답시간 지연으로 인해 await를 무시하고 다음 코드가 진행되는 이유는 찾지못했습니다.
timeout exception 발생은 해당 api 서버측에서 오류가 있어 발생했었습니다.
import { Injectable, NestInterceptor, ExecutionContext, CallHandler, RequestTimeoutException } from '@nestjs/common';
import { Observable, throwError, TimeoutError } from 'rxjs';
import { catchError, timeout } from 'rxjs/operators';
@Injectable()
export class TimeoutInterceptor implements NestInterceptor {
intercept(context: ExecutionContext, next: CallHandler): Observable<any> {
return next.handle().pipe(
timeout(5000),
catchError(err => {
if (err instanceof TimeoutError) {
return throwError(() => new RequestTimeoutException());
}
return throwError(() => err);
}),
);
};
};
프로젝트 환경 세팅할 때 최신 노드 버젼을 사용하시는 분들은 참고하셔도 좋을 것 같아요~
2
81
1
DTO에 대한 질문
1
87
2
백엔드 MVC에서 View의 역할은 무엇인가요?
1
94
2
추가 업데이트 관련 건
0
90
2
nest js 버전문제
0
80
2
mongdb 스키마 공식 문서와 형태가 다른 이유 궁금합니다.
0
103
1
라인 끝에 에러 표시(eslint) 때문에 구글 찾아 보니.
0
75
1
전체 고양이 조회 라우터 중 error.message 오류
0
68
1
캡슐화 추가 설명 중 단일책임원칙 관련 질문
0
106
0
42강 고양이끼리 소통 댓글 구현 중 Schema hasn't been registered for model 'comments' 에러 해결
0
82
1
채팅 이슈
0
133
1
모듈이 더 이상 지원하지 않는답니다
0
206
1
오류가 있습니다
0
106
1
import 에서 오류가 납니다
0
127
1
이런 오류가 나옵니다
0
100
1
에러가 발생합니다
0
110
1
프론트 에러 뜨는데 수정 안해주시나요
0
158
1
emit() broadcast.emit() 질문있습니다
0
103
1
서버연결이 안됩니다.
1
403
1
[PM2][ERROR] Command not found
0
521
1
S3에 업로드까지는 성공했는데 사진이 나오지 않습니다.
0
248
1
error_code : Property 'user' does not exist on type 'Request<ParamsDictionary, any, any, ParsedQs, Record<string, any>>'.ts(2339)
0
601
1
jwt를 따로 연습하고 있는데 env를 못읽는 것 같습니다.
0
323
2
Ec2로 안하시는 이유가 있을까요?
0
343
1





