Next.js에서 로깅과 오류 처리 방법

Next.js에서 로깅(logging)과 오류 처리(error handling)는 웹 애플리케이션의 안정성과 유지 보수성을 위해 매우 중요합니다. 로깅은 애플리케이션의 동작에 대한 정보를 기록하는 것을 의미하며, 오류 처리는 발생하는 오류를 처리하고 예외 상황을 다루는 것을 의미합니다.

로깅

로깅은 Next.js 애플리케이션에서 발생하는 이슈를 식별하고 디버깅하는 데 도움을 줍니다. Next.js는 기본적으로 로깅을 지원하며, 일반적으로 console.log()를 사용하여 로그를 출력할 수 있습니다. 하지만 프로덕션 환경에서는 더욱 효율적인 로깅 방법을 사용해야 합니다.

일반적으로 Next.js에서는 서드파티 로깅 라이브러리를 사용하는 것이 좋습니다. 대표적인 예로 winston, pino, bunyan 등이 있습니다. 이러한 라이브러리는 로그 수준, 로그 저장 위치, 로그 형식 등 다양한 설정을 제공하여 로그를 효과적으로 관리할 수 있게 해줍니다. 로그를 파일로 저장하거나, 원격 서버에 전송하는 등 여러 가지 옵션을 사용할 수 있습니다.

아래는 winston 로깅 라이브러리를 사용하는 Next.js 애플리케이션에서의 예시입니다.

// 로깅 라이브러리 불러오기
import winston from 'winston';

// 로거 생성
const logger = winston.createLogger({
  level: 'info',
  format: winston.format.json(),
  defaultMeta: { service: 'your-service-name' },
  transports: [
    new winston.transports.Console(),
    new winston.transports.File({ filename: 'logs/error.log', level: 'error' }),
  ],
});

// 로그 출력
logger.info('This is an informational log message');
logger.error('This is an error log message');

위의 예시에서는 winston을 사용하여 로깅을 구현하였습니다. 로그 레벨을 설정하고, 형식을 지정할 수 있으며, 로그를 콘솔에 출력하고 파일에 저장하는 설정을 추가하였습니다.

오류 처리

Next.js 애플리케이션에서 오류 처리는 예외 상황을 다루고 적절한 조치를 취하는 것을 의미합니다. 일반적으로 try-catch 구문을 사용하여 예외를 처리할 수 있습니다.

다음은 Next.js에서 try-catch 구문을 사용하여 오류를 처리하는 예시입니다.

export default function HomePage() {
  try {
    // 오류가 발생할 수 있는 로직
    throw new Error('Custom error message');
  } catch (error) {
    // 오류 처리
    console.error('Error occurred:', error);
    // 오류 페이지로 리다이렉션 또는 오류 메시지를 보여줄 수 있음
    return <div>An error occurred: {error.message}</div>;
  }
}

위의 예시에서는 오류가 발생할 수 있는 로직을 try 블록 안에 작성하고, catch 블록에서 오류를 처리합니다. catch 블록에서는 오류를 콘솔에 출력하거나, 오류 페이지로 리다이렉션하거나, 오류 메시지를 보여줄 수 있습니다.

더 복잡한 오류 처리를 위해서는 Express.js의 에러 핸들링 미들웨어와 같은 방식을 적용할 수도 있습니다. Next.js에서는 커스텀 에러 페이지를 작성하여 전체 애플리케이션에서 오류를 처리할 수 있습니다.

마무리

Next.js에서 로깅과 오류 처리는 애플리케이션의 안정성과 유지 보수성을 높이기 위해 필수적인 요소입니다. 로깅과 오류 처리를 효과적으로 구현하여 웹 애플리케이션을 안정적으로 운영할 수 있도록 노력해야 합니다.

[참고 자료]