Terminus 기반 Health Check 방법 NestJS
이번 글에서는 Terminus 기반 Health Check 방법 NestJS에 대해 심도 있게 알아보겠습니다. NestJS 애플리케이션에서 건강 상태를 점검하는 것은 애플리케이션의 신뢰성과 가용성을 보장하는 데 필수적입니다. 하지만 Health Check를 설정하는 것이 복잡하게 느껴질 수도 있습니다. 본문을 통해 Terminus를 사용하여 효율적으로 Health Check를 구현하는 방법을 단계별로 안내하겠습니다.
Terminus 시작하기
Terminus는 NestJS에서 Health Check를 구현하기 위한 강력한 도구입니다. 이 모듈은 애플리케이션의 상태를 점검할 수 있는 여러 기능을 제공합니다. Terminus 기반 Health Check 방법 NestJS를 시작하기 위해서는 처음에 필요한 의존성을 설치해야 합니다. 다음 코드를 사용하여 필요한 패키지를 설치할 수 있습니다:
bash
npm install –save @nestjs/terminus
이제 Terminus 모듈을 설치했으므로, 상태 점검을 위한 기본적인 설정을 진행해야 합니다. Terminus를 통합하려면, 먼저 HealthModule을 생성하고, TerminusModule을 가져오는 것으로 시작할 수 있습니다:
typescript
import { Module } from @nestjs/common;
import { TerminusModule } from @nestjs/terminus;
@Module({
imports: [TerminusModule],
})
export class HealthModule {}
여기서 HealthModule을 정의해주면 됩니다. 이후 우리는 상태 점검을 위한 컨트롤러를 생성할 것입니다. Nest CLI를 사용하여 HealthController를 생성할 수 있습니다:
bash
nest g controller health
위의 명령어를 통해 컨트롤러가 생성된 후, HTTPHealthIndicator를 사용하여 외부 URL의 건강 상태를 점검하는 로직을 추가할 수 있습니다.
| 단계 | 설명 |
|---|---|
| 1. 의존성 설치 | @nestjs/terminus 패키지를 설치합니다. |
| 2. HealthModule 정의 | TerminusModule을 임포트하는 모듈을 정의합니다. |
| 3. HealthController 생성 | Nest CLI로 컨트롤러를 생성합니다. |
| 4. 건강 점검 로직 추가 | HTTPHealthIndicator 로직을 컨트롤러에 추가합니다. |
이렇게 초기 설정이 완료되면, 건강 점검을 위한 기본적인 구조가 마련됩니다.
Health Controller 구현
Health Controller는 HTTP GET 요청을 통해 외부 서비스의 상태를 점검하는 기능을 갖습니다. 아래의 코드는 HealthController의 기본 구조입니다:
typescript
import { Controller, Get } from @nestjs/common;
import { HealthCheckService, HttpHealthIndicator, HealthCheck } from @nestjs/terminus;
@Controller(health)
export class HealthController {
constructor(
private health: HealthCheckService,
private http: HttpHealthIndicator,
) {}
@Get()
@HealthCheck()
check() {
return this.health.check([
() => this.http.pingCheck(nestjs-docs, https://docs.nestjs.com),
]);
}
}
위 코드는 @nestjs/terminus 모듈을 사용하여 특정 주소에 대한 HTTP GET 요청을 실행하고 그 응답을 검사하여 결과를 반환합니다. 여기서 pingCheck 메소드는 해당 URL의 상태를 확인하여 up 또는 down을 반환합니다.
만약 성공적으로 응답을 받았다면, 상태 코드 200과 함께 다음과 같은 JSON 응답을 받을 수 있습니다:
json
{
status: ok,
info: {
nestjs-docs: {
status: up
}
},
error: {},
details: {
nestjs-docs: {
status: up
}
}
}
이처럼 HealthController를 통해 간단하게 외부 서비스의 상태를 체크할 수 있게 됩니다. 다양한 상태 점검을 위해 추가적인 Health Check Endpoint를 생성할 수 있으며, 이는 여러분의 서비스가 의존하는 여러 다른 외부 서비스의 건강 상태를 동시에 체크하는 데 유용합니다.
| 상태 점검종류 | 설명 |
|---|---|
| Ping Check | 특정 URL에 Ping 요청을 보내서 응답 확인 |
| Response Check | 특정 응답 코드 체크 |
| Database Check | 데이터베이스 연결여부 체크 |
데이터베이스 상태 점검
Terminus의 또 하나의 주요 기능은 데이터베이스 상태 점검입니다. TypeORM 같은 ORM을 사용하는 경우, 데이터베이스의 연결 상태를 점검하여 애플리케이션의 신뢰성을 높일 수 있습니다. 다음은 TypeORM을 이용한 상태 점검 로직 예시입니다:
typescript
import { Controller, Get } from @nestjs/common;
import { HealthCheckService, TypeOrmHealthIndicator, HealthCheck } from @nestjs/terminus;
@Controller(health)
export class HealthController {
constructor(
private health: HealthCheckService,
private db: TypeOrmHealthIndicator,
) {}
@Get(database)
@HealthCheck()
checkDatabase() {
return this.health.check([
() => this.db.pingCheck(database),
]);
}
}
이 코드는 /health/database로 요청이 들어오면 데이터베이스에 대해 ping 요청을 보내어 연결 여부를 점검합니다. 성공적으로 연결되면 다음과 같은 JSON 응답을 받을 수 있습니다:
json
{
status: ok,
info: {
database: {
status: up
}
},
error: {},
details: {
database: {
status: up
}
}
}
이렇게 하면 데이터베이스의 상태 체크가 완료되어, 사용자가 Health Check를 통해 애플리케이션의 상태를 보다 세밀하게 알 수 있게 됩니다.
| 기능 | 설명 |
|---|---|
| pingCheck | 데이터베이스 연결을 점검 |
| 인수 | 연결명 |
| 응답 | 상태 코드와 함께 JSON 응답 |
결론
이번 포스트에서는 Terminus 기반 Health Check 방법 NestJS에 대해 알아보았습니다. NestJS의 강력한 기능을 활용하여 애플리케이션의 상태를 체계적으로 점검할 수 있었습니다. 다양한 Health Indicator를 사용하여 외부 서비스 및 데이터베이스의 상태를 모니터링함으로써 애플리케이션의 안정성을 높일 수 있습니다. 이는 실시간 운영 중 문제가 발생할 경우 즉각적으로 대처할 수 있는 기회를 제공합니다.
이제 여러분의 NestJS 애플리케이션에도 Health Check를 도입하여 안정성을 높여보세요. 아직 시작하지 않았다면, 이 기회를 통해 여러분도 Terminus를 사용하여 애플리케이션의 건강 상태를 확인하는 재미를 느껴보시기 바랍니다!
자주 묻는 질문과 답변
질문1: Terminus는 어떤 종류의 Health Check를 지원하나요?
A: Terminus는 HTTP 상태 확인, 데이터베이스 확인, 메모리 및 디스크 사용량 확인을 포함한 다양한 상태 점검 기능을 지원합니다.
질문2: Health Check 결과는 어떻게 활용할 수 있나요?
A: Health Check의 결과는 모니터링 도구와 통합하여 서비스의 가용성을 파악하고, 문제가 발생시 사전 예방 조치를 취하는 데 활용될 수 있습니다.
질문3: NestJS에서 Health Check를 설정하는 과정은 복잡한가요?
A: 아니요, Terminus를 사용하면 Health Check 설정이 비교적 간단하며, 기본적인 설정 후에는 추가적인 설정도 쉽게 할 수 있습니다.
질문4: Health Check를 통해 언제 어떤 정보를 확인할 수 있나요?
A: Health Check를 통해 서비스의 정상 상태, 데이터베이스 연결 여부, 외부 서비스에 대한 연결 상태 등을 확인할 수 있습니다. 이 정보는 서비스 운영 시 유용합니다.
질문5: Health Check를 사용할 때 주의할 점은 무엇인가요?
A: Health Check 설정 시, 실제 사용하는 서비스와 데이터베이스의 상태를 정확히 반영하도록 주의해야 합니다. 잘못된 상태 응답은 문제를 간과하게 만들 수 있습니다.
Terminus 기반 Health Check 방법 NestJS: 효율적인 구현 노하우!
Terminus 기반 Health Check 방법 NestJS: 효율적인 구현 노하우!
Terminus 기반 Health Check 방법 NestJS: 효율적인 구현 노하우!