건강 체크 추가하기 - C# 코스에서 샘플 API 구축
ASP.NET Core 사용하여 C#으로 RESTful API를 개발하고 테스트하는 것은 모든 현대 백엔드 개발자에게 필수적인 기술입니다. Tim Corey는 " C#에서 상태 검사 추가하기 - 샘플 API 구축 강좌 "라는 제목의 튜토리얼 영상에서 상태 검사 기능이 통합된 샘플 API를 구축하는 과정을 설명합니다. 이 글은 오로지 Tim의 녹취록을 바탕으로 작성되었으며, 공개 비동기 작업, 정수 ID, 변수 앱 및 기타 HTTP 요청 메서드 사용법과 같은 핵심 사항을 다루면서 전체 과정을 단계별로 설명합니다.
Tim Corey가 Visual Studio Code를 사용하여 C# API 프로젝트에서 상태 확인을 설정하는 방법을 자세히 살펴보겠습니다.
샘플 API 및 상태 점검 소개
팀은 샘플 API가 웹 개발을 배우는 데 있어 강력한 도구라고 설명합니다. 이를 통해 개발자는 적절한 요청 데이터와 상태 코드를 사용하여 GET, POST, PUT 및 DELETE 메서드를 이용한 API 호출을 시뮬레이션할 수 있습니다. Tim이 개발한 API는 다음을 지원합니다.
데이터 모델을 사용한 샘플 데이터
API 요청에 대한 RESTful 동작
JSON 형식 응답
건강 검진
- Docker 컨테이너와 웹 애플리케이션 모두로 배포 가능
상태 점검 Install-Package 중
Tim은 Visual Studio Code에서 프로젝트를 열고 NuGet 패키지를 관리하기 위해 종속성을 마우스 오른쪽 버튼으로 클릭합니다. 그는 AspNetCore.HealthChecks.UI.Client 패키지를 검색하여 설치합니다. 이를 통해 앱은 두 가지 유형의 건강 검진을 지원할 수 있습니다.
건강 상태 점검 클래스 생성
Tim은 API 프로젝트 폴더 안에 HealthChecks라는 새 폴더를 추가합니다. 여기서 그는 IHealthCheck 인터페이스를 구현하는 여러 클래스를 생성하는데, 각 클래스는 정상, 저하, 비정상 및 임의 상태와 같은 서로 다른 상태를 나타냅니다.
HealthyHealthCheck.cs
이 클래스는 공개 비동기 작업을 사용하여 HealthCheckResult.Healthy를 반환합니다.
return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."));return Task.FromResult(HealthCheckResult.Healthy("This is a test healthy service."));이는 정상적인 상태를 시뮬레이션하는 것으로, 프런트엔드가 안정적인 서비스를 어떻게 처리하는지 테스트하는 데 유용합니다.
DegradedHealthCheck.cs
return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."));return Task.FromResult(HealthCheckResult.Degraded("This is a test degraded service."));이 검사는 서비스 품질 저하 응답을 반환합니다. 부분적인 오류나 성능 문제를 시뮬레이션하는 간단한 방법입니다.
건강하지 않은 건강 검진.cs
return Task.FromResult(HealthCheckResult.Unhealthy("This is a test unhealthy service."));return Task.FromResult(HealthCheckResult.Unhealthy("This is a test unhealthy service."));이는 서비스 실패를 모방하여 500 HTTP 상태 코드가 발생하거나 NotFound()를 반환할 것으로 예상되는 경우를 시뮬레이션합니다.
랜덤헬스체크.cs
이 상태 점검은 임의의 정수를 사용하여 세 가지 상태 중 하나를 시뮬레이션합니다.
int randomResult = Random.Shared.Next(1, 4);
return randomResult switch
{
1 => Task.FromResult(HealthCheckResult.Healthy("This is a test random service.")),
2 => Task.FromResult(HealthCheckResult.Degraded("This is a test random service.")),
3 => Task.FromResult(HealthCheckResult.Unhealthy("This is a test random service.")),
_ => Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
};int randomResult = Random.Shared.Next(1, 4);
return randomResult switch
{
1 => Task.FromResult(HealthCheckResult.Healthy("This is a test random service.")),
2 => Task.FromResult(HealthCheckResult.Degraded("This is a test random service.")),
3 => Task.FromResult(HealthCheckResult.Unhealthy("This is a test random service.")),
_ => Task.FromResult(HealthCheckResult.Healthy("This is a test random service."))
};팀은 이것이 다양한 조건에서 동작을 테스트하는 데 유용하다고 강조합니다.
시작 구성에 상태 점검 등록하기
Tim은 시작 또는 구성 폴더에 HealthChecksConfig.cs라는 새로운 정적 클래스를 추가합니다. 이 클래스에는 두 개의 정적 메서드가 포함되어 있습니다.
AddAllHealthChecks()
services.AddHealthChecks()
.AddCheck<RandomHealthCheck>("random", tags: new[] { "random" })
.AddCheck<HealthyHealthCheck>("healthy", tags: new[] { "healthy" })
.AddCheck<DegradedHealthCheck>("degraded", tags: new[] { "degraded" })
.AddCheck<UnhealthyHealthCheck>("unhealthy", tags: new[] { "unhealthy" });services.AddHealthChecks()
.AddCheck<RandomHealthCheck>("random", tags: new[] { "random" })
.AddCheck<HealthyHealthCheck>("healthy", tags: new[] { "healthy" })
.AddCheck<DegradedHealthCheck>("degraded", tags: new[] { "degraded" })
.AddCheck<UnhealthyHealthCheck>("unhealthy", tags: new[] { "unhealthy" });이 코드는 ASP.NET Core의 서비스 컨테이너에 있는 의존성 주입에 대한 모든 상태 검사를 등록합니다.
MapAllHealthChecks()
app.MapHealthChecks("/health");app.MapHealthChecks("/health");이렇게 하면 모든 서비스를 함께 평가하는 단일 엔드포인트 /health가 생성됩니다. 하나라도 건강에 이상이 있으면 전체 검사 결과가 불량으로 나옵니다.
구체적인 건강 지표 생성
개별 구성 요소를 테스트하기 위해 Tim은 각 상태 점검 항목을 태그별로 매핑합니다.
app.MapHealthChecks("/health/healthy", new HealthCheckOptions {
Predicate = x => x.Tags.Contains("healthy")
});app.MapHealthChecks("/health/healthy", new HealthCheckOptions {
Predicate = x => x.Tags.Contains("healthy")
});그는 /health/graded, /health/unhealthy, /health/random에 대해서도 이 과정을 반복합니다. 각각의 기능을 통해 개발자는 특정 동작과 프런트엔드가 해당 동작에 어떻게 반응하는지 테스트할 수 있습니다.
/health/random에 접속하면 무작위 결과에 따라 출력되는 내용이 "healthy", "degraded", "unhealthy"로 바뀝니다.
상태 점검을 위한 UI 지원 추가
Tim은 각 상태 확인 경로에 대한 UI 응답을 활성화하여 엔드포인트를 개선합니다. 이것은 JSON 형식의 출력을 제공합니다.
app.MapHealthChecks("/healthui", new HealthCheckOptions
{
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});app.MapHealthChecks("/healthui", new HealthCheckOptions
{
ResponseWriter = UIResponseWriter.WriteHealthCheckUIResponse
});이를 통해 지속 시간, 태그 및 상태와 같은 데이터를 사용하여 각 상태 점검을 검사할 수 있습니다. 그런 다음 Tim은 각 상태 엔드포인트에 대한 UI 버전을 생성합니다.
/healthui/healthy
/healthui/degraded
/healthui/건강하지 않음
- /healthui/random
각 응답은 상세한 JSON 형식으로 제공되며, 이는 RESTful API에 적합하고 모바일 기기나 웹 페이지에서 테스트하기에 이상적입니다.
API 프로젝트 마무리
팀은 이러한 기능들을 포함하더라도 Program.cs 파일의 길이는 여전히 21줄에 불과하다고 강조합니다. 그는 그 이유를 다음과 같이 설명합니다:
프로젝트 폴더 구조가 잘 갖춰져 있음
- 모델 파일을 Models 폴더에 보관합니다.
엔드포인트와 컨트롤러를 각각 별도의 폴더에 배치합니다.
- 각 상태 점검 클래스에 대해 비동기 작업 메서드 사용
그는 또한 이 샘플 API가 배포 전에 지연 시간이나 오류를 시뮬레이션하는 데 있어 실제 운영 환경에서 얼마나 유용한지 강조합니다.
"이 API를 사용하면 단순히 GET 호출만 하는 것 외에도 훨씬 더 많은 테스트를 할 수 있습니다."라고 팀은 결론지었습니다.
다음에는 무엇이 올까요?
팀은 다음 수업에서 API 동작을 더욱 자세히 테스트하기 위해 시뮬레이션된 속도 저하(예: 5초 지연)와 NotFound() 또는 BadRequest() 반환과 같은 오류를 추가할 것이라고 미리 알려줍니다.
결론
이 비디오 튜토리얼에서 Tim Corey는 ASP.NET Core 사용하여 상태 확인 기능이 통합된 최소한의 API를 구축하는 과정을 체계적으로 설명합니다. 주요 구성 요소는 다음과 같습니다.
건강 상태 등급 (정상, 저하됨, 불량, 무작위)
AddHealthChecks()를 통한 의존성 주입
MapHealthChecks()를 사용하여 엔드포인트 매핑
- 구조화된 JSON 응답 지원
이러한 접근 방식을 통해 REST API를 검증하고, 오류를 시뮬레이션하고, 개발 및 운영 환경 모두에서 웹 애플리케이션을 강화하는 것이 더 쉬워집니다.

