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

다른 카테고리

실시간 상태 메시지 및 스피너 - Spectre Console 시리즈

Tim Corey
9분 31초

Spectre Console은 C#을 벗어나지 않고도 멋진 콘솔 애플리케이션을 만들 수 있게 해주는 강력한 .NET 라이브러리입니다. 팀 코리는 자신의 비디오 시리즈에서 해당 제품의 기능을 하나씩 자세히 설명합니다. " 실시간 상태 메시지 및 스피너 - 스펙터 콘솔 시리즈 " 영상에서 Tim은 콘솔 애플리케이션이 장시간 실행되는 작업을 수행하는 동안 실시간 상태 메시지와 애니메이션 스피너를 표시하는 도구인 스펙터 콘솔 상태에 대해 자세히 설명합니다.

이 글에서는 Tim의 설명을 따라가면서 Spectre Console의 상태 기능을 자세히 살펴보겠습니다. 이 영상에서는 팀이 먼저 간단한 로딩 스피너를 설정하고, 이를 사용자 정의한 다음, 마지막으로 실제 비동기 데이터 다운로드 예제에서 사용하는 방법을 보여줍니다. 데모가 끝나면 Spectre Console을 통해 사용자가 백그라운드에서 무슨 일이 일어나고 있는지 명확하게 파악할 수 있는 방법을 확인할 수 있습니다.

보다 간단한 상태 예시부터 시작하겠습니다(0:31)

팀은 상태 메시지의 가장 간단한 예시를 보여주는 것으로 시작합니다. 그는 이렇게 부릅니다:

AnsiConsole.Status()
    .Start("로딩 중...", ctx =>
    {
        스레드.슬립(3000);
    });

콘솔 프로젝트에 상태 표시기를 추가하는 가장 간단한 방법입니다. 그는 중괄호 안에서 시간이 걸리는 모든 명령이나 코드를 실행할 수 있다고 설명합니다. 데모에서 팀은 느린 작업을 시뮬레이션하기 위해 3초 동안 대기하는 코드를 사용했습니다.

이 콘솔 애플리케이션을 실행하면 기본 스피너와 함께 "로딩 중..."이라는 문자열이 바로 표시됩니다. 이 간단한 데모는 Spectre Console을 사용하면 평범한 프롬프트도 더욱 역동적인 형태로 바꿀 수 있음을 보여줍니다.

Spectre Console Live Status Spinners 1 related to 보다 간단한 상태 예시부터 시작하겠습니다(0:31)

스피너 사용자 지정 - 지원되는 유형 (1:54)

1분 54초에 팀은 맞춤 설정으로 넘어갑니다. Spectre Console에는 다양한 종류의 스피너가 내장되어 있으며, 다음 명령어를 사용하여 변경할 수 있습니다.

ctx.Spinner = Spinner.Known.Aesthetic;

그는 사용 가능한 유형을 훑어보다가 "미적"을 선택하여 스피너의 형식을 쉽게 변경할 수 있음을 보여줍니다. 이처럼 작은 변화만으로도 콘솔 애플리케이션이 훨씬 더 세련되어 보입니다.

Spectre Console Live Status Spinners 2 related to 스피너 사용자 지정 - 지원되는 유형 (1:54)

팀은 2분 39초에 모든 터미널이 모든 스피너를 완벽하게 지원하는 것은 아니라고 지적합니다. Visual Studio 내에서 실행하는 경우 대체 애니메이션이 표시될 수 있습니다. 이는 Spectre Console이 오류를 적절하게 처리하는 방식입니다. 사용자의 환경에 맞는 더 간단한 스피너를 자동으로 선택하여 사용자에게 피드백을 제공합니다.

이것이 콘솔 애플리케이션 사용을 더 쉽게 만드는 이유 (3:07)

3분 7초에 팀은 이 기능이 왜 중요한지 설명하기 위해 잠시 멈춥니다. 앱이 파일을 생성하거나 다운로드하거나, 데이터를 처리하거나, 또는 시간이 오래 걸리는 작업을 수행하는 경우, 스피너가 포함된 상태 메시지를 표시하면 사용자에게 "작업이 진행 중임을 알려줍니다." 이러한 메시지가 없으면 콘솔 화면이 비어 있어 마치 멈춘 것처럼 보일 수 있습니다.

팀은 작업이 완료되면 상태 정보가 사라지고 결과 정보만 남는다고 강조합니다. 이렇게 하면 콘솔 애플리케이션을 깔끔하게 유지하면서 동시에 유용한 정보를 제공할 수 있습니다.

비동기 작업을 위해 AnsiConsole 대기 모드로 전환(3:24)

지금까지 Tim은 Start() 함수를 사용해 왔습니다. 하지만 실제 앱에서는 아마도 작업을 기다리고 있을 겁니다. 3시 34분에 그는 다음으로 전환합니다.

AnsiConsole.Status()를 기다립니다.
    .StartAsync("로딩 중...", async ctx =>
    {
        // 비동기 작업
    });

await AnsiConsole.StartAsync()를 사용하는 이 작은 변경을 통해 상태 블록 내에서 비동기 코드를 실행할 수 있습니다. Tim은 4분 2초에 내부 컨텍스트가 UI 업데이트에 대해 스레드 안전하지 않다고 경고합니다. 스피너나 상태 텍스트를 변경하려면 항상 "UI 스레드로 돌아오세요". 이 검사는 다른 스레드에서 업데이트를 시도할 때 발생하는 이상한 오류를 방지합니다.

반복적인 데이터 다운로드 - 보다 현실적인 데모 (4:26)

다음으로 Tim은 실제 작업인 API에서 20개의 강좌를 다운로드하는 작업을 시뮬레이션하기 위해 반복문을 만듭니다. 그는 코드를 다음과 같이 다시 작성합니다.

(정수 i = 1; i < 21; i++)
{
    ctx.Status($"코스 {i} 다운로드...");
    var jsonResponse = await Helpers.Fetch($"https://sample.com/courses/{i}");
    AnsiConsole.MarkupLine($"[red]코스 {i} 다운로드됨[/]");
}

여기서 그는 Spectre Console의 세 가지 중요한 기능이 함께 작동하는 모습을 보여줍니다.

  • Context.Status()는 스피너 옆에 표시되는 상태 문자열을 동적으로 변경합니다.

  • await Helpers.Fetch(...)는 콘솔 애플리케이션 내부의 실제 비동기 작업을 나타냅니다.

  • AnsiConsole.MarkupLine()은 Spectre의 마크업을 사용하여 색상을 추가합니다. 팀은 그저 "재미있는 일을 하고 싶어서" [빨간색]을 골랐습니다.

이 예시는 복잡한 코드 없이도 프로젝트 진행 상황 피드백을 얼마나 쉽게 추가할 수 있는지 보여줍니다.

실행 중인 애플리케이션 보기 (7:21)

Tim이 새 코드를 실행하면 녹색 스피너(그의 테마에서 사용하는 Aesthetic 스타일)가 나타나고 상태 텍스트가 "코스 1 다운로드 중…", "코스 2 다운로드 중…" 등으로 변경됩니다. 각 다운로드가 완료되면 빨간색 줄이 나타나 "코스 1 다운로드 완료", "코스 2 다운로드 완료"라고 표시됩니다.

Spectre Console Live Status Spinners 3 related to 실행 중인 애플리케이션 보기 (7:21)

팀은 이것이 데이터 업로드나 파일 처리와 같은 작업을 추적하는 데 매우 유용한 방법이라고 언급합니다. "결과 메시지는 남지만, 다운로드 중이라는 대기 메시지는 더 이상 표시되지 않습니다."라고 그는 7분 27초에 설명합니다.

Spectre Console Live Status Spinners 4 related to 실행 중인 애플리케이션 보기 (7:21)

동기식 vs. 비동기식 – 성능 차이 없음 (8:00)

8시에 팀이 성과에 대해 이야기합니다. Start()와 StartAsync()를 사용하는 것은 스피너 애니메이션 속도에 영향을 미치지 않습니다. 중요한 것은 내부 코드가 비동기식인지 여부입니다. await를 사용하는 경우 .StartAsync()를 호출해야 합니다. 그렇지 않으면 .Start()를 사용해도 괜찮습니다.

즉, 콘솔 애플리케이션에 상태 피드백을 추가하더라도 애플리케이션 속도 저하를 걱정할 필요가 없습니다. 이는 여러분이 이미 하고 있는 작업을 단순히 감싸주는 것입니다.

내장형 및 맞춤형 스피너 - 확인해야 할 긴 목록 (8:45)

팀은 마지막으로 스펙터 콘솔에 내장된 스피너가 "엄청나게 많다"고 강조했습니다. 목록을 스크롤하면서 점 모양부터 화살표, "미적" 스타일까지 마음에 드는 것을 고를 수 있습니다. 시리즈 후반부에서는 Tim이 앱의 브랜딩이나 색상에 완벽하게 맞는 맞춤형 스피너를 만드는 방법을 보여줄 예정입니다.

이러한 유연성은 Spectre Console이 아름다운 콘솔 애플리케이션을 구축하는 데 훌륭한 도구인 이유 중 하나입니다. 이 방법은 바퀴를 새로 발명할 필요 없이 진행 상황에 대한 피드백, 즉각적인 결과 출력 및 역동적인 시각화를 제공합니다.

결론 – Spectre 콘솔 상태 작동 방식 (9:07)

Tim Corey의 비디오를 따라가면서 Spectre 콘솔 상태를 사용하여 .NET 콘솔 애플리케이션을 개선하는 방법을 살펴보았습니다.

  • 작업 실행 중에 스피너와 상태 텍스트를 표시하려면 AnsiConsole.Status().Start() 또는 AnsiConsole.Status()를 기다립니다..StartAsync()를 사용하십시오.

  • 루프 내부에서 context.Status()를 동적으로 업데이트하세요.

  • AnsiConsole.MarkupLine()과 Spectre 마크업을 사용하여 빨강, 초록 또는 기타 색상에 대한 결과를 출력합니다.

  • 내장된 스피너 목록에서 선택하거나 나중에 직접 만들 수 있습니다.

  • 콘솔 출력을 깔끔하게 유지하면서 사용자에게 명확한 정보를 제공합니다.

이러한 작은 디테일들이 평범한 콘솔 프로젝트를 아름다운 콘솔 애플리케이션으로 탈바꿈시킬 수 있습니다. Spectre Console의 상태 기능은 진행 상황을 공유하고, 결과를 확인하고, 앱의 프롬프트를 더욱 사용자 친화적이고 상호작용적으로 만드는 것을 간소화합니다.

Hero Worlddot related to 실시간 상태 메시지 및 스피너 - Spectre Console 시리즈
Hero Affiliate related to 실시간 상태 메시지 및 스피너 - Spectre Console 시리즈

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

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

아이언 서포트 팀

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