@Get('followers')
async getFollowers() {
try {
const _id = '~~~~';
const result = await this.userService.getRelatedUsers(_id, 'followers');
return responseForm(200, { followers: result });
} catch (error) {
this.logger.error(JSON.stringify(error.response));
// 여기에서 보내면 되지 않을까?
return error.response ?? error;
}
}
해당 포스팅을 주로 참고하며 만들었고 코드에서 궁금한 점을 추가로 알아보았다.
https://overcome-the-limits.tistory.com/716?category=1006727
app.useGlobalInterceptors(new MyInterceptor());
@Controller('board')
//특정 Controller에 Interceoptor 적용
@UseInterceptors(LoggingInterceptor)
export class BoardController {
constructor(private readonly boardService: BoardService) {}
}
다 만들고 패기롭게 에러가 발생하는 요청을 보냈는데.. 슬랙 메시지가 안온다..
여러 에러들을 다 보내보니, Controller layer에서 에러 핸들링을 해둔 에러는 메시지가 안오고 Validation pipe에서 발생한 에러만 메시지가 갔다.
원인은 인터셉터가 에러 자체만 캐치하고 내가 catch에서 error를 다시 가공해서 Client에 전달하기 때문에, Response는 Error라고 알지 못했다.
@Get('followers')
async getFollowers() {
try {
const _id = '~~~~';
const result = await this.userService.getRelatedUsers(_id, 'followers');
return responseForm(200, { followers: result });
} catch (error) {
this.logger.error(JSON.stringify(error.response));
return error.response ?? error; // 이부분!
}
}
해결 방법
가장 간편한 1번 방식으로 일단 해두고 팀원들과 논의해서 align 하는게 좋을 것 같다.
내 작고 귀여운 봇..
개선사항
지금은 내 로컬에서 Test를 했는데, Scale-out 관점에서 에러 발생 Server의 정보도 알려주면 좋을 것 같아, IP도 추가했다.
팀원들에게 어떻게 적용했는지 공유를 해줬을 때 반응이 좋았고,
마침 금요일에 진행하는 기술 공유시간에 내가 발표자가 되어서 해당 내용을 공유했는데, 많은 분들이 관심을 많이 가져주셨다!
반응을 캡쳐해뒀어야했는데 아쉽다..
일을 하면서 불편함을 느끼고 이를 개선 했을 때 보람을 많이 느끼는 것 같다.
이런 점이 나를 다시 개발자로 회귀하게 했고 내가 추구하는 개발자의 모습이 아닐까 싶다. 🙃
참고
NestJS sentry + slack error로그 수집