API 소요시간 계산

0

저번 포스트에서 express에서 api와 에러등에 대해 winston 라이브러리로 로깅을 하는 법을 작성하였다.

그 모든 api요청에 대해 소요시간을 계산하여 2초가 넘는 것들을 개선해주려고 한다. 그럴려면 api마다 모두 소요시간을 계산해서 로그에 찍어주어야 한다.

express의 문서를 찾아보다 express의 on() 메소드를 사용하기로 하였다. on()메소드는 특정 이벤트에 대한 리스너를 등록하는 방법이다. 'data', 'finish, 'end'등 여러가지 리스너를 등록할 수 있다. 몇가지 리스너에 대해 살펴보자.

 // 데이터가 도착할 때마다 호출됨
 res.on('data', (chunk) => {
    data += chunk;
  });

  // 응답이 보내질때 호출됨
  res.on('end', () => {
    console.log(data);
  });
  
  // 응답이 완료되면 호출됨
  res.on('end', () => {
    console.log(data);
  });

여기서 우리는 요청이 들어온 시점부터 응답이 보내질때까지의 시간을 계산하면 되므로 finish를 사용하기로 하였다.

app.use((req: Request, res: Response, next: NextFunction) => {
	const start = Date.now();
	res.on('finish', () => {
		const duration = Date.now() - start;
		logger.http(`[${req.method}] ${req.url} ${duration}ms`);
	});
	next();
});

모든 라우터 최상단에 모든 경로를 통과하는 app.use 미들웨어를 장착하여 요청이 도달한 순간의 시간을 기록하고 res.on('finish')로 응답이 보내질때의 순간을 빼서 로그에 기록해 주었다. 차후에 2000ms가 넘는 요청들은 디스코드에 보내주어서 핸들링할 예정이다.

profile
https://www.youtube.com/watch?v=__9qLP846JE

0개의 댓글