푸터 콘텐츠로 바로가기
Iron Academy Logo
C# 애플리케이션
C# 애플리케이션

다른 카테고리

건강 체크 추가하기 - C# 코스에서 샘플 API 구축

Tim Corey
23분 30초

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를 검증하고, 오류를 시뮬레이션하고, 개발 및 운영 환경 모두에서 웹 애플리케이션을 강화하는 것이 더 쉬워집니다.

Hero Worlddot related to 건강 체크 추가하기 - C# 코스에서 샘플 API 구축
Hero Affiliate related to 건강 체크 추가하기 - C# 코스에서 샘플 API 구축

사랑하는 것을 공유하여 더 많은 수익을 얻으세요

당신은 .NET, C#, Java, Python, 또는 Node.js를 다루는 개발자를 위한 콘텐츠를 만드나요? 당신의 전문성을 추가 수입으로 전환하세요!

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해