1. try-catch
블록 사용하기
비동기 함수에서 오류가 발생할 가능성이 있는 코드를 try-catch
로 감싸면, 오류가 나도 앱이 죽지 않고 오류를 처리할 수 있다.
import { Injectable } from '@nestjs/common';
@Injectable()
export class ExampleService {
async someAsyncFunction() {
try {
// 비동기 작업 수행
const result = await this.someOtherAsyncFunction();
return result;
} catch (error) {
// 오류 발생 시 처리
console.error('오류 발생:', error);
// 필요에 따라 추가 처리 로직 작성
}
}
private async someOtherAsyncFunction() {
// 실제 비동기 작업 수행
}
}
2. Global Exception Filter 사용하기
NestJS에서 글로벌 예외 필터를 사용하면, 앱 전체에서 발생하는 예외를 중앙에서 처리할 수 있다. 이렇게 하면 예외가 발생해도 한 곳에서 모두 처리 가능하다.
import { ExceptionFilter, Catch, ArgumentsHost, HttpException } from '@nestjs/common';
import { Request, Response } from 'express';
@Catch()
export class AllExceptionsFilter implements ExceptionFilter {
catch(exception: any, host: ArgumentsHost) {
const ctx = host.switchToHttp();
const response = ctx.getResponse<Response>();
const request = ctx.getRequest<Request>();
const status = exception instanceof HttpException ? exception.getStatus() : 500;
response
.status(status)
.json({
statusCode: status,
timestamp: new Date().toISOString(),
path: request.url,
message: exception.message || 'Internal server error',
});
}
}
// 이 필터를 글로벌로 적용하려면 main.ts에서 설정해준다.
import { NestFactory } from '@nestjs/core';
import { AppModule } from './app.module';
import { AllExceptionsFilter } from './common/filters/all-exceptions.filter';
async function bootstrap() {
const app = await NestFactory.create(AppModule);
app.useGlobalFilters(new AllExceptionsFilter());
await app.listen(3000);
}
bootstrap();
3. 비동기 오류의 글로벌 처리
비동기 함수에서 발생하는 오류도 글로벌 예외 필터로 처리할 수 있다. 비동기 코드를 작성할 때 try-catch
블록을 사용하거나, 예외 필터 내에서 비동기 함수를 사용하는 식으로 처리하면 된다.
4. Promise Rejection 처리하기
비동기 함수에서 처리되지 않은 Promise 거부를 막으려면, process.on('unhandledRejection')
이벤트 리스너를 설정할 수 있다. 이걸 설정해두면 오류가 나도 앱이 죽지 않는다.
process.on('unhandledRejection', (reason, promise) => {
console.error('Unhandled Rejection:', reason);
// 필요하다면 여기서 오류를 복구하는 로직을 추가할 수도 있다.
});
5. 비동기 함수의 반환된 Promise 처리
NestJS에서 비동기 함수를 호출할 때 반환된 Promise를 .catch()
로 처리하는 것도 중요하다. 이 방법으로 예기치 않은 오류로 인해 앱이 중단되는 일을 막을 수 있다.
async function bootstrap() {
const app = await NestFactory.create(AppModule);
await app.listen(3000);
}
bootstrap().catch(err => {
console.error('Error during bootstrap:', err);
// 오류 처리 로직 추가
});
이렇게 하면 비동기 함수에서 발생하는 오류로 인해 앱이 죽는 일을 막을 수 있다. 적절한 예외 처리를 통해 애플리케이션의 안정성을 높이는 것이 중요하다.
'⚙️ Node.js' 카테고리의 다른 글
[NodeJS] 아주 쉽게 타입스크립트 적용하기 (1) | 2024.09.05 |
---|---|
[DiscordJS] 10분만에 디스코드 봇 제작하기 (4) | 2024.09.05 |
[Javascript 심화] 함수 1 (0) | 2024.01.28 |
[Javascript 심화] 배열 (0) | 2024.01.28 |
[Javascript 심화] 객체와 참조 (2) | 2024.01.27 |