배움을 멈추지 마세요
Source: Dev.to
Introduction
개발자는 풍부한 도구, 문서, 그리고 인공지능 덕분에 지금 같은 시기가 정말 멋진 시기입니다. 하지만 현재와 당분간은, AI 도구가 완벽하지 않고 기존 코드베이스에 통합하기 어려운 코드를 생성할 수 있기 때문에 개발자는 여전히 코드를 작성하는 법을 배워야 합니다.
- 개발을 막 시작한 사람 – 기본을 배우고, 그 다음에 OOP와 데이터베이스 작업을 학습하세요.
- 경험이 있는 개발자 – 풀타임 직장을 얻고 유지하기 위해 실력을 갈고닦으세요. 예를 들어, C# .NET Core에 새로운 기능이 추가되었다면 즉시 사용할 일이 없더라도 시간을 내어 학습하세요. 또 다른 방법은 개발자 포럼을 탐색하면서 질문의 모든 측면을 분석하고, 무엇을 배울 수 있는지 혹은 피해야 할지를 판단하는 것입니다.
다음 가이드는 Microsoft Visual Studio, C#, 그리고 .NET 8 이상을 사용하는 개발자에게 적용됩니다.
- 학습용 Visual Studio 솔루션을 만들고 솔루션 폴더를 사용해 주제를 구분하세요.
- 여러 프로젝트에서 유용하게 사용될 수 있는 코드는 클래스 라이브러리에 넣으세요 (아래 스크린샷의 클래스 프로젝트 폴더를 참고).
콘솔 프로젝트용 로그인 요청
먼저 전체 스레드를 확인하세요 – AI가 응답을 형성하는 데 사용할 수 있는 전체 내용입니다.
이제 Spectre.Console NuGet 패키지를 사용한 더 나은 방법을 살펴보겠습니다.
Spectre.ConsoleTextPrompt는 검증, 기본값 및 비밀 입력 마스킹을 포함한 텍스트 입력을 사용자에게 요청합니다.- 빈 문자열이 아닌 값을 반환하도록 보장하는 데 사용됩니다.
- 비밀번호 텍스트는 마스킹됩니다.
- 사용자 이름과 비밀번호 모두 동일한 색상을 사용합니다.
- 샘플에는 테스트 목적을 위한 충분한 검증(하드코딩)이 포함되어 있습니다.
using Spectre.Console;
using SpectreLoginSample.Classes.Core;
namespace SpectreLoginSample.Classes;
internal class Prompts
{
public static string PromptStyleColor { get; set; } = "cyan";
public static string PromptColor { get; set; } = "bold";
public static bool TryLogin(int maxAttempts = 3)
{
for (int attempt = 1; attempt
username == "admin" && password == "password";
public static string GetUserName(bool allowEmpty) =>
allowEmpty
? AnsiConsole.Prompt(
new TextPrompt($"[{PromptColor}]User name[/]")
.PromptStyle(PromptStyleColor)
.AllowEmpty())
: AnsiConsole.Prompt(
new TextPrompt($"[{PromptColor}]User name[/]:")
.PromptStyle(PromptStyleColor));
public static string GetPassword() =>
AnsiConsole.Prompt(
new TextPrompt($"[{PromptColor}]Password[/]:")
.PromptStyle("grey50")
.Secret()
.DefaultValueStyle(new Style(Color.Aqua)));
}
이것이 좋은 학습 경험인 이유
로그인 코드를 완성하면 Spectre.Console 라이브러리에서 탐색할 내용이 훨씬 더 많습니다. 이 라이브러리는 다음 분야에서 뛰어납니다:
- .NET 도구
- 콘솔 프로젝트 유틸리티
파일 글로빙이 구원한다
파일 글로빙은 모든 개발자가 알아야 할 주제입니다. 글로브는 와일드카드를 사용하여 파일 및 디렉터리 이름을 매칭하는 패턴을 정의합니다. 글로빙은 하나 이상의 글로브 패턴을 정의하고 포함 또는 제외 매칭을 통해 파일을 찾아내는 행위입니다.
시나리오 – 개발자가 OneDrive를 백업 용도로 사용합니다. 백업이 완료된 후 모든 로컬 파일이 삭제됩니다. 백업을 복원하면 수많은 중복 파일이 나타납니다(5,000개 이상의 복사본). 수동으로 삭제하는 것은 비현실적입니다. 파일‑글로빙에 대한 지식을 활용하면 개발자는 중복 파일을 자동으로 제거하는 간단한 콘솔 앱을 작성할 수 있습니다.
중복 파일 목록을 생성하는 코드
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.FileSystemGlobbing;
using Spectre.Console;
public static class Globbing
{
///
/// Returns a list of files that match typical “Copy” naming patterns.
///
public static async Task> GetDuplicatesTask(string parentFolder)
{
var list = new List();
var matcher = new Matcher();
// Include typical copy‑file patterns
matcher.AddIncludePatterns(new[]
{
"**/* - Copy .*",
"**/* - Copy (*.*"
});
// Exclude folders that may need special permissions
matcher.AddExcludePatterns(new[]
{
"**/My Music/**",
"**/My Pictures/**",
"**/My Videos/**"
});
await Task.Run(() =>
{
foreach (var file in matcher.GetResultsInFullPath(parentFolder))
{
list.Add(new FileMatchItem(file));
}
});
// Persist the list for later inspection
await File.WriteAllLinesAsync(
Path.Combine(parentFolder, "Duplicates.txt"),
list.Select(item => item.ToString()));
return list;
}
}
중복 파일을 삭제하는 코드
using System;
using System.Threading.Tasks;
using Spectre.Console;
public static class DuplicateProcessor
{
public static async Task ProcessOneDriveDuplicates()
{
var folder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
var list = await Globbing.GetDuplicatesTask(folder);
if (list.Count > 0)
{
AnsiConsole.MarkupLine($"[bold green]Found {list.Count} duplicate files.[/]");
foreach (var item in list)
{
try
{
System.IO.File.Delete(item.FullPath);
}
catch (Exception ex)
{
AnsiConsole.MarkupLine(
$"[red]Failed to delete {item.FullPath}: {ex.Message}[/]");
}
}
AnsiConsole.MarkupLine("[bold green]Deletion complete.[/]");
}
else
{
AnsiConsole.MarkupLine("[green]No duplicate files were found.[/]");
}
SpectreConsoleHelpers.ContinuePrompt();
}
}
💡 팁 –
AddExcludePatterns는 권한이 상승된 디렉터리이거나 건드리고 싶지 않은 디렉터리를 건너뛸 때 유용합니다.
요약
- Spectre.Console를 사용하여 깔끔하고 인터랙티브한 콘솔 프롬프트(로그인, 메뉴 등)를 구현합니다.
- file‑globbing(
Microsoft.Extensions.FileSystemGlobbing)을 활용하여 패턴에 따라 파일 그룹을 찾고 조작합니다. - Visual Studio 솔루션 내의 클래스‑라이브러리 프로젝트에 재사용 가능한 코드를 정리하여 깔끔하게 유지하고 여러 콘솔 앱 간에 공유할 수 있도록 합니다.
행복한 코딩 되세요!
Source code
files.[/]");
} else
{
AnsiConsole.MarkupLine($"[bold green]No duplicate files found in {folder}.[/]");
return;
}
foreach (var (index, item) in list.Index())
{
try
{
if (File.Exists(item.FullName))
{
File.Delete(item.FullName);
}
else
{
AnsiConsole.MarkupLine($"[yellow bold]{item.FullName}[/]");
}
}
catch (Exception e)
{
AnsiConsole.MarkupLine($"[red bold]Failed to delete " +
$"{index} {item.FullName}[/]");
}
}
요약
개발자가 코드를 다루든, 막히는 부분을 해결하기 위해 인공지능을 사용하든, 혹은 AI를 사용하지 않든, 최소 주에 한 번은 새로운 것을 배우려고 노력하세요. 카렌은 일주일에 여러 번 새로운 것을 배우려고 합니다.