Terminus 기반 Health Check 방법 NestJS: 효율적인 구현 노하우!

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: 효율적인 구현 노하우!