이번 글에서는 Express 기반으로 NodeJS Health Check 엔드포인트 만드는 법에 대해 알아보도록 하겠습니다. NodeJS Health Check 관련해서는 이전에도 한 번 다루었던 적이 있으니 참고하시길 바랍니다.
고객 기반이 성장함에 따라 항상 작동하는 서비스를 제공해야 하는 책임도 커집니다. 몇 줄의 코드를 추가하고 마음의 평화를 얻을 수 있는 방법을 살펴보겠습니다.
상태 확인 엔드포인트가 필요한 이유
첫째, 만드는 것이 매우 간단하고 많은 기술이 필요하지 않습니다. API/애플리케이션에 문제가 발생하면 이 엔드포인트를 모니터링하여 알림을 받을 수 있습니다. 주요 이유는 다음과 같습니다.
- SLA — 약속해야 하는 가동 시간을 지정하는 서비스 수준 계약(SLA)을 따라야 하는 경우가 많습니다.
- 금전적 손실 — 일부 산업에서는 1분의 가동 중단으로 인해 수만 달러의 비용이 발생할 수 있습니다. 1분, 1시간 또는 하루 종일 다운타임 동안 얼마나 많은 돈과 비즈니스를 잃게 될까요?
- 평판 — 반복적인 다운타임은 단순히 비즈니스 평판을 손상시킵니다.
여기서는 가장 인기 있는 프레임워크인 Express를 사용하여 가동 시간 모니터링 서비스를 모니터링할 상태 경로를 생성하는 방법에 대해 알아보겠습니다.
const express = require('express'); const http = require('http'); const app = express(); const router = express.Router(); router.use((req, res, next) => { res.header('Access-Control-Allow-Methods', 'GET'); next(); }); router.get('/health', (req, res) => { res.status(200).send('Ok'); }); app.use('/api/v1', router); const server = http.createServer(app); server.listen(3000);
이것은 단순히 본문 응답에 Ok 메시지와 함께 200 상태 코드를 반환합니다. 약간의 코드을 추가하고 몇 가지 추가 정보를 제공하겠습니다.
router.get('/health', (req, res) => { const data = { uptime: process.uptime(), message: 'Ok', date: new Date() } res.status(200).send(data); });
process.uptime() 메서드는 Node.js 프로세스가 실행된 시간(초)을 가져오는 데 사용되는 프로세스 모듈의 내장 API입니다. 데이터베이스 또는 redis와 같은 다른 연결 검사를 추가로 추가할 수 있습니다. 또한 실행 중인 각 마이크로 서비스에 대해 하나의 상태 확인이 있어야 합니다.
확인 자동화
이제 앱의 상태를 확인할 수 있는 새로운 엔드포인트가 있으므로 가동 시간 및 응답 시간과 같은 기타 메트릭을 수집하고 버그가 팬을 때렸을 때 제 시간에 알림을 받도록 하겠습니다. 웹 사이트 및 API의 가용성을 지속적으로 모니터링하는 Hyperping과 같은 전용 서비스를 사용할 수 있습니다. 첫 번째 모니터를 만들기 위해 리디렉션되는 계정을 만듭니다.
추가 설정 없이 새 엔드포인트를 Hyperping의 앱에 추가하기만 하면 가용성이 지속적으로 모니터링됩니다. 몇 분 후, 선택 가능한 지역 집합(런던, 암스테르담, 토론토, 샌프란시스코 등)에서 선택한 날짜 범위에 대한 가동 시간 및 응답 시간이 표시되고 기록 데이터가 표시됩니다.
또한 Slack, OpsGenie와 같은 알림 도구와 쉽게 통합하거나 팀원에게 SMS를 보낼 수 있습니다.