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

다른 카테고리

예외 디스플레이 포맷팅 - Spectre 콘솔 시리즈

Tim Corey
8분 51초

.NET 콘솔 애플리케이션을 개발할 때 개발자와 사용자 모두에게 이해하기 쉬운 방식으로 예외를 처리해야 하는 경우가 많습니다. 일반 콘솔 출력에서는 예외가 길고 읽기 어려운 데이터 문자열처럼 보일 수 있습니다. 특히 스택 추적이나 리플렉션을 많이 사용하는 라이브러리를 다룰 때 더욱 그렇습니다. Tim Corey는 그의 비디오 " 예외 표시 형식 지정 - Spectre 콘솔 시리즈 "에서 Spectre.Console 라이브러리를 사용하여 예외를 더 쉽게 읽고, 분석하고, 이해하는 방법을 안내합니다.

이 글에서는 Tim이 예외를 처리하는 방법, Spectre.Console의 명령 및 메서드를 사용하는 방법, 그리고 예외 표시에 다양한 설정과 스타일을 적용하는 방법을 살펴보겠습니다.

소개: 형식 예외를 사용하는 이유는 무엇일까요?

영상 초반에 팀 코리는 Spectre.Console을 소개하며, 개발자들이 평범한 콘솔 앱을 "시각적으로 매력적이고 유용한 애플리케이션"으로 바꿔주는 라이브러리라고 설명합니다. 이 강의에서는 예외 처리를 통해 더욱 명확하고 읽기 쉬운 메시지를 표시하는 방법에 대해 중점적으로 다룹니다.

Tim은 콘솔 앱에서 예외가 발생하면 기본적으로 Console.WriteLine(ex)에서 출력되는 내용은 단순히 텍스트 덩어리라고 설명합니다. 여기에는 경로, 스택 추적 및 형식 이름이 모두 연속된 문자열로 포함됩니다. 기능은 제대로 하지만, 사용하기에는 불편합니다.

이를 설명하기 위해 팀은 간단한 예시를 만듭니다.

try
{
    throw new Exception("You forgot to give me the data.");
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}
try
{
    throw new Exception("You forgot to give me the data.");
}
catch (Exception ex)
{
    Console.WriteLine(ex);
}

그는 터미널에서 이 명령어를 실행했고, 예상대로 출력 결과는 엉망이었다. 모든 것이 하나로 어우러진다. 팀은 메시지, 방법, 파일 위치 중 무엇이 중요한지 짚어내기가 어렵다고 말합니다. 그래서 그는 Spectre.Console 예외 서식 지정을 사용하여 이 문제를 해결하려고 합니다.

AnsiConsole.WriteException 사용하기 - 첫 번째 단계

화면 표시를 개선하기 위해 Tim은 다음 줄을 바꿉니다.

Console.WriteLine(ex);
Console.WriteLine(ex);

Spectre 명령어를 사용하면 다음과 같습니다.

AnsiConsole.WriteException(ex);
AnsiConsole.WriteException(ex);

이 단 하나의 메서드 호출이 모든 것을 바꿉니다.

그가 앱을 다시 실행하면 터미널 출력에 색상이 표시됩니다. 메시지는 명확하게 표시되고, 스택 추적 부분의 스타일도 다릅니다. 텍스트를 분석하기가 더 쉽고 핵심 값이 두드러집니다.

Tim은 AnsiConsole 클래스가 스타일이 적용된 출력을 렌더링하기 위한 Spectre.Console의 중앙 액세스 포인트 역할을 한다고 지적합니다. WriteException() 메서드는 예외를 처리하고 자동으로 형식을 지정하도록 특별히 설계되었습니다.

그는 "이것만으로도 이미 한 단계 발전한 겁니다."라고 말합니다. 이제 콘솔에 메시지, 파일 경로, 메서드 이름이 강조 표시되어 한눈에 훨씬 쉽게 읽을 수 있습니다.

ExceptionFormats를 사용하여 서식 옵션 추가하기

기본 예시를 보여준 후, 팀은 예외 메시지의 어떤 부분을 표시할지, 그리고 어떻게 축약할지를 제어하는 ​​서식 매개변수를 추가하여 한 단계 더 나아갑니다.

그는 ShortenPaths, ShortenTypes, ShortenMethods 및 ShowLinks와 같은 여러 옵션을 제공하는 ExceptionFormats 열거형을 소개합니다. 이것들을 개별적으로 사용하거나 파이프를 이용하여 결합할 수 있습니다.|) 성격.

팀은 다음과 같은 코드를 작성합니다.

AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything);

그가 이 명령어를 실행하면 콘솔 출력은 더 짧고 간결해집니다.

그는 다음과 같이 설명합니다.

  • 경로가 축약됩니다. 전체 디렉터리 경로 대신 Program.cs와 같이 파일 이름만 표시됩니다.

  • 형식이 축약되었습니다. System.IO.InvalidDataException 대신 InvalidDataException이 표시됩니다.

  • 메서드 이름이 축약되었습니다. 길고 일반적인 메서드 이름은 가독성을 높이기 위해 간소화되었습니다.

이 예시는 Spectre.Console의 예외 서식 지정 옵션을 사용하여 필수 정보를 손실하지 않고 결과를 더욱 간결하게 만드는 방법을 보여줍니다.

팀은 첫 번째 버전(전체 경로 및 네임스페이스 포함)에는 "대부분 불필요한 정보"가 포함되어 있는 반면, 이처럼 형식화된 버전은 문제의 원인을 빠르게 파악하고 싶을 때 더 이해하기 쉽다고 강조합니다.

더욱 세밀한 제어를 위해 여러 형식을 결합합니다.

팀은 거기서 멈추지 않습니다. 그는 파이프 연산자를 사용하여 여러 서식 설정을 결합하는 방법을 보여줍니다.

AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);
AnsiConsole.WriteException(ex, ExceptionFormats.ShortenEverything | ExceptionFormats.ShowLinks);

3분 54 초에 Tim은 ShowLinks 옵션에 대해 설명합니다. 이를 통해 Spectre.Console은 호환되는 터미널에서 클릭 가능하거나 마우스 오버 시 반응하는 파일 링크를 표시할 수 있습니다. 그의 예시에서, 파일 이름 Program.cs는 이제 밑줄이 그어져 있습니다. 마우스 커서를 해당 파일 위에 올리면 터미널에 전체 파일 경로가 포함된 툴팁이 표시됩니다.

그는 이러한 동작이 환경에 따라 달라진다고 지적하며, 클릭 가능한 링크를 지원하는 터미널(예: 일부 bash 또는 VS Code 터미널)에서 더 잘 작동한다고 설명합니다.

형식을 조합하면 예외 출력에 표시할 정보의 양을 정확하게 결정할 수 있습니다. 예를 들어 경로는 축약하고 형식 이름은 전체로 표시하거나 메서드 세부 정보를 완전히 숨길 수도 있습니다. Spectre.Console은 그러한 유연성을 제공합니다.

ExceptionSettings에 대해 더 자세히 알아보기

이 시점에서 Tim은 ExceptionSettings라는 새로운 객체를 소개합니다. 이를 통해 예외의 서식과 스타일을 보다 고급스러운 방식으로 함께 사용자 지정할 수 있습니다.

그는 단일 형식 값을 전달하는 대신 전체 설정 객체를 전달할 수 있다고 설명합니다.

var settings = new ExceptionSettings
{
    Format = ExceptionFormats.ShortenEverything,
    Style = new ExceptionStyle
    {
        Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
    }
};
AnsiConsole.WriteException(ex, settings);
var settings = new ExceptionSettings
{
    Format = ExceptionFormats.ShortenEverything,
    Style = new ExceptionStyle
    {
        Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
    }
};
AnsiConsole.WriteException(ex, settings);

여기서 Tim은 두 가지 속성을 구성합니다.

  • 형식 – 예외 정보를 어떻게 간략하게 표시할지 지정합니다.

  • 스타일 – 다양한 예외 요소(예: 메서드 이름, 경로 또는 메시지)의 모양을 정의합니다.

Spectre.Console은 전경색, 배경색, 장식(밑줄, 깜빡임, 굵게 등)과 같은 풍부한 스타일링 옵션을 제공합니다.

Tim은 예외 메시지뿐만 아니라 매개변수 이름, 메서드 호출 또는 괄호와 같은 예외 표시의 다른 부분도 스타일을 지정할 수 있다고 언급합니다. 이를 통해 CLI에서 예외 출력 형식을 매우 세밀하게 제어할 수 있습니다.

예외 메시지 스타일링

스타일링이 실제로 어떻게 작동하는지 보여주기 위해 Tim은 예외 메시지 부분에만 스타일을 적용합니다. 그는 메시지 색상을 빨간색으로 설정하고 느리게 깜빡이는 효과를 추가하여 더욱 눈에 띄게 만듭니다.

Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)
Message = new Style(foreground: Color.Red, decoration: Decoration.SlowBlink)

그가 앱을 실행하면 터미널 창 안에 "이봐요, 데이터를 제공하는 걸 잊으셨네요."라는 메시지가 빨간색으로 깜빡입니다.

팀은 이것이 예외 출력에서 ​​가장 중요한 정보, 즉 메시지 자체를 강조하는 데 도움이 된다고 지적합니다. 나머지 텍스트(파일 이름 및 줄 번호 등)는 아래에 그대로 표시되지만, 시선은 곧바로 무엇이 잘못되었는지에 집중하게 됩니다.

그는 "이것은 가장 중요한 것, 즉 메시지 자체에 시선을 집중시키도록 설계되었습니다."라고 설명합니다. 그러면 그들은 "아, Program.cs 파일의 main 함수 256번째 줄에 있구나"라고 알아낼 수 있을 겁니다.

이는 Spectre.Console이 데이터를 읽기 쉽게 만들 뿐만 아니라 강조 표시와 시각적 계층 구조를 추가하여 결과를 더 빠르게 해석할 수 있도록 돕는 방법을 보여줍니다.

스펙터 콘솔 시리즈 마무리

영상 말미에서 팀은 이것이 자신의 스펙터 콘솔 시리즈의 마지막 편이라고 언급합니다. 적어도 지금으로서는 말이죠. 그는 시청자들에게 suggestions.iamtimcorey.com 에 피드백이나 더 많은 주제에 대한 제안을 남겨달라고 권장합니다.

그는 시리즈 전반에 걸쳐 테이블 렌더링, CLI 명령 및 인수 처리, 구조화된 텍스트 작업, 그리고 이제는 서식 예외 처리까지 Spectre의 다양한 기능을 다뤘다고 언급합니다.

Tim은 이 강의를 통해 개발자들이 간단한 .NET 콘솔 앱 내에서 예외를 명확하고 시각적인 피드백과 함께 깔끔하게 처리할 수 있는 도구를 얻게 된다고 말하며 강의를 마무리합니다.

마지막으로

이 튜토리얼을 통해 Tim Corey는 Spectre.Console 예외를 더 읽기 쉽고, 유익하며, 시각적으로 매력적으로 만드는 방법을 명확하게 보여줍니다. 개발자는 단 몇 줄의 코드로 다음과 같은 작업을 수행할 수 있습니다.

  • 예외 처리를 더욱 효과적으로 수행합니다.

  • 콘솔 출력 형식을 단축된 경로와 더 깔끔한 텍스트로 지정합니다.

  • ExceptionSettings 객체를 사용하여 형식과 스타일을 세밀하게 조정할 수 있습니다.

  • 색상과 장식을 추가하여 중요한 정보를 강조하세요.

  • 파일 경로를 클릭 가능하거나 마우스 오버 시 반응하는 링크로 표시합니다.

이러한 접근 방식은 디버깅을 개선할 뿐만 아니라 CLI 기반 애플리케이션을 세련되고 전문적으로 보이게 합니다. AnsiConsole.WriteException()과 같은 강력한 메서드, 사용자 지정 가능한 설정 및 풍부한 스타일링 옵션을 결합하면 개발자는 Tim Corey가 훌륭한 예제에서 보여주는 것처럼 구문 분석 및 이해하기 쉬운 의미 있고 잘 구성된 예외 출력을 제공하는 .NET 콘솔 앱을 구축할 수 있습니다.

Hero Worlddot related to 예외 디스플레이 포맷팅 - Spectre 콘솔 시리즈
Hero Affiliate related to 예외 디스플레이 포맷팅 - Spectre 콘솔 시리즈

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

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

아이언 서포트 팀

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