RDP 세션 혼동 방지: Remote Desktop Windows 자동 라벨

발행: (2025년 12월 12일 오후 04:57 GMT+9)
7 min read
원문: Dev.to

Source: Dev.to

모든 시스템 관리자가 너무 잘 아는 문제

원격 데스크톱 창 8개가 열려 있습니다. 하나는 PROD-DB, 하나는 TEST-APP, 또 하나는 로컬 개발 박스입니다. 모두 모양이 똑같습니다. 서비스를 재시작해야 하는데… 잘못된 창을 클릭합니다.

프로덕션이 다운되었습니다.

익숙한가요? 기본 Windows MSTSC 클라이언트는 시각적 힌트를 제공하지 않습니다. 작업 표시줄 위에 마우스를 올려 호스트명을 확인할 수는 있지만, 빠르게 움직일 때 실수가 발생합니다.

“구식” 해결 방법 (그리고 왜 별로인지)

  • 원격 머신의 호스트명을 [PROD] 또는 [TEST]와 같이 편집하기
  • mRemoteNGRD Tabs와 같은 서드파티 RDP 관리자를 사용하기
  • 정말, 정말 조심하기 (스포일러: 효과 없음)

하지만 기본 MSTSC 클라이언트를 계속 사용하면서 즉각적인 시각적 피드백을 받을 수 있다면 어떨까요?

소개: RDP Title Master

RDP Title Master는 작은 백그라운드 유틸리티로:

  • 모든 RDP 창을 실시간으로 모니터링합니다
  • 창 제목을 사용자 정의 규칙(IP 주소, 호스트명)과 매칭합니다
  • MSTSC 툴바에 색상 코드 배지를 직접 오버레이합니다

참고: 이 도구를 만든 직후 macOS로 전환했기 때문에 공유할 스크린샷이 없습니다. 사용해 보신다면 댓글에 스크린샷을 올려 주세요—작동 모습을 보고 싶어요! 😅

Example Config (settings.json)

[
  {
    "Pattern": "prod",
    "Label": "🔥 PRODUCTION",
    "ColorHex": "#e74c3c"
  },
  {
    "Pattern": "192.168",
    "Label": "🏠 LOCAL",
    "ColorHex": "#2ecc71"
  },
  {
    "Pattern": "test",
    "Label": "🧪 TEST",
    "ColorHex": "#3498db"
  }
]

prod-db-01.company.com에 연결하면 툴바에 즉시 빨간색 배지가 표시되어 “PRODUCTION”이라고 나타납니다. 더 이상 추측할 필요가 없습니다.

작동 원리 (기술 상세)

1. 창 감지

The tool uses EnumWindows to scan all top‑level windows, looking for the RDP window class:

private static bool IsRdpWindow(IntPtr hwnd)
{
    string className = GetClassName(hwnd);
    return className == "TscShellContainerClass";
}

2. 제목 매칭

Once an RDP window is found, we grab its title (which usually contains the hostname or IP) and match it against the configured patterns:

string title = GetWindowTitle(hwnd);
var rule = _configs.FirstOrDefault(c =>
    title.Contains(c.Pattern, StringComparison.OrdinalIgnoreCase)
);

3. GDI+ 오버레이

We create a transparent bitmap with anti‑aliased text and a rounded badge background, then apply it using UpdateLayeredWindow:

using (Graphics g = Graphics.FromImage(bmp))
{
    g.SmoothingMode = SmoothingMode.AntiAlias;
    g.TextRenderingHint = TextRenderingHint.AntiAliasGridFit;

    // Draw rounded rectangle badge
    FillRoundedRectangle(g, bgBrush, badgeRect, 10);

    // Draw text on top
    g.DrawString(text, font, textBrush, x, y);
}

4. 데몬 모드

앱은 무한 루프(3초마다)로 실행되어 새로운 RDP 창을 확인합니다. 즉, 아침에 한 번 실행해 두면 신경 쓸 필요가 없습니다.

왜 C#이고 Python/PowerShell가 아닌가?

짧은 답변: 성능과 배포.

  • 단일 .exe – 런타임 의존성이 없습니다. 다운로드 후 바로 실행합니다.
  • GDI+ 품질 – 부드러운 렌더링을 위한 Windows 그래픽 API에 네이티브 접근.
  • 크기 – 트리밍을 활성화하면 최종 바이너리가 약 50 MB(자체 포함 .NET 8)입니다.

원래 프로토타입은 Python으로 작성했으며(legacy_python/ 폴더에 아직 존재), C# 덕분에 프로덕션 수준이 되었습니다.

설치 및 사용법

빠른 시작

  1. 최신 릴리스를 GitHub에서 다운로드합니다.
  2. settings.json을 열어 서버 패턴을 편집합니다.
  3. MstscTitleBar.exe를 실행합니다.
  4. RDP 세션을 열면 마법이 발생하는 것을 확인합니다.

소스에서 빌드하기

git clone https://github.com/mlanies/mstsc_title_bar.git
cd mstsc_title_bar/MstscTitleBar
dotnet run

To create a portable executable:

dotnet publish -c Release -r win-x64 --self-contained -p:PublishSingleFile=true

실제 사용 사례

1. 다중 환경 관리

DEV/STAGE/PROD 환경을 관리한다면, 색상으로 구분하세요:

  • 🔴 빨강 = Production (위험 구역)
  • 🟡 노랑 = Staging (주의해서 진행)
  • 🟢 초록 = Dev (자유롭게 깨뜨려도 됨)

2. 클라이언트 구분

Consultants managing multiple clients can use patterns like:

{ "Pattern": "client-a", "Label": "Client A", "ColorHex": "#9b59b6" }
{ "Pattern": "client-b", "Label": "Client B", "ColorHex": "#f39c12" }

3. 데이터센터 식별

Label servers by location:

{ "Pattern": "us-east", "Label": "🇺🇸 Virginia", "ColorHex": "#3498db" }
{ "Pattern": "eu-west", "Label": "🇪🇺 Ireland", "ColorHex": "#2ecc71" }

알려진 제한 사항

  • 윈도우 모드 전용 – 전체 화면 RDP는 툴바를 숨깁니다(디자인상).
  • Windows 10/11 – 최신 Windows 전용 WinAPI 호출을 사용합니다.
  • 갱신 지연 – 3초 간격 폴링(코드에서 설정 가능).

기여하고 싶으신가요? PR을 환영합니다!

결론

잘못된 터미널에 rm -rf /를 입력하거나 잘못된 서버를 재시작한 적이 있다면, 시각적 힌트의 가치를 알게 됩니다. RDP Title Master는 간단하고 설정이 필요 없는 도구로, 일상 작업을 더 안전하게 만들어 줍니다.

한 번 사용해 보고 댓글로 의견을 알려 주세요!

GitHub:

Back to Blog

관련 글

더 보기 »

그냥 코딩을 계속해

소개 우리는 모두 쉬운 변경이라고 생각하고 버그를 고치러 갔지만, 결국 하루의 대부분을 그 문제를 해결하려고 보내는 날이 있습니다. 만약...