← 기술 백서 목록으로 돌아가기

40대 PC의 교실 맞춤형 데스크톱 UX: ZeliDesk의 동적 아코디언 드로어 및 퀵런치 바 핀(Pin) 상태 원자적 영속화 아키텍처

"도구의 개수가 10개를 넘어 72종, 100여 개로 늘어나는 순간, 풍부한 기능은 축복이 아니라 사용자의 인지 부하(Cognitive Load)를 가중시키는 '시각적 공해'로 전락합니다. 특히 40명의 학생이 일제히 수업을 받는 초·중·고 정보 교실이나 일분일초를 다투는 군사 작전 전산실에서, 원하는 도구를 찾느라 화면을 스크롤하는 시간은 치명적인 교육 결손과 집중력 저하를 초래합니다. ZeliDesk는 선언적 XML 기반의 동적 아코디언 드로어(Drawer)로 카테고리 접힘 상태를 제어하고, Windows ApplicationDataContainer를 통한 퀵런치 바(QuickLaunchBar) 핀(Pin) 영속화와 Ctrl+1~9 단축키 파이프라인을 구축했습니다. 교사의 중앙 통제성과 사용자의 개인화 자율성을 완벽히 조화시킨 고성능 데스크톱 UX 아키텍처를 공개합니다."

1. 인지 부하(Cognitive Load)의 역설: 100여 개 도구를 어떻게 정돈할 것인가?

ZeliDesk는 AI 서비스, 온디바이스 sLM, 시스템 도구, 네트워크 유틸리티, 개발자 도구 등 방대한 기능군을 하나의 셸(Shell) 안에서 완벽히 제공합니다. 하지만 아무리 훌륭한 기능이라도 첫 화면에 100여 개의 아이콘이 무질서하게 쏟아진다면, 초등학생이나 디지털 기기 조작이 미숙한 고령 교원은 극심한 피로감을 느끼게 됩니다.

UX 설계 원칙 전통적인 평면 나열식 런처 (Bad Practice) ZeliDesk 2단계 계층형 UX 아키텍처
초기 화면 복잡도 100여 개 타일이 빽빽하게 노출되어 시선 분산 및 인지 피로 극대화 자주 쓰는 4~6개 핵심 도구만 퀵런치 바에 정갈하게 상시 노출
카테고리 관리 모든 카테고리가 강제 펼침 상태로 끝없는 세로 스크롤 유발 동적 아코디언 접기/펼치기 및 교사용 XML 선언적 초기 상태 배포
개인화(Customization) 재부팅 시 설정이 리셋되거나 무거운 DB 파일 의존으로 부팅 지연 ApplicationDataContainer 단 1개 키로 0ms 원자적 핀(Pin) 영속화
접근 속도 마우스로 메뉴를 일일이 찾아 클릭해야 함 (평균 3.5초 소요) Ctrl+1~9 글로벌 단축키로 시선 이동 없이 0ms 즉각 실행

2. ZeliConfig 선언적 XML과 동적 아코디언 드로어(Drawer)

ZeliDesk의 사이드 드로어는 하드코딩된 UI가 아닙니다. ZeliConfig/HJHinit_BrowserTab.xml 파일의 <DrawerDefaults> 선언을 파싱하여 어떤 카테고리를 초기에 접어둘지(collapsed="true") 결정합니다:

ZeliConfig/HJHinit_BrowserTab.xml (서랍 초기 상태 선언 발췌) XML
<DrawerDefaults>
    <!-- 초·중·고 수업 집중을 위해 복잡한 네트워크/하드웨어 카테고리는 기본 접힘 처리 -->
    <Category name="네트워크 도구" collapsed="true" />
    <Category name="하드웨어 설정" collapsed="true" />
</DrawerDefaults>

C# 코어의 LoadDrawerCollapsedStates() 메서드는 앱 구동 시 단 0.1ms 만에 이 XML을 메모리 해시셋(_drawerCollapsedCategories)으로 로드합니다:

MainWindow.xaml.cs (선언적 서랍 접힘 상태 로드) C#
private void LoadDrawerCollapsedStates()
{
    _drawerCollapsedCategories.Clear();
    try
    {
        string xmlPath = Path.Combine(AppContext.BaseDirectory, "ZeliConfig", "HJHinit_BrowserTab.xml");
        if (!File.Exists(xmlPath)) return;

        var doc = XDocument.Load(xmlPath);
        foreach (var cat in doc.Descendants("Category"))
        {
            string catName = cat.Attribute("name")?.Value;
            bool collapsed = cat.Attribute("collapsed")?.Value == "true";
            if (!string.IsNullOrEmpty(catName) && collapsed)
            {
                _drawerCollapsedCategories.Add(catName);
            }
        }
    }
    catch (Exception ex)
    {
        Debug.WriteLine($"[ZeliConfig] DrawerDefaults 로드 실패: {ex.Message}");
    }
}

그리고 BuildDrawer()에서 각 카테고리 그룹을 렌더링할 때, 접힘 대상 카테고리의 itemsPanel.Visibility를 Collapsed로 설정하고 토글 버튼에 + 기호를 부여하여 화면을 극도로 슬림하게 유지합니다.

3. 퀵런치 바(QuickLaunchBar)의 원자적 핀(Pin) 영속화 파이프라인

사용자가 사이드 서랍이나 도구 가이드에서 "자주 쓰는 도구"로 핀을 등록하면, 메인 창 하단의 퀵런치 바에 해당 도구가 실시간으로 추가되어야 하며, 앱을 재부팅하더라도 정확히 그 위치에 보존되어야 합니다.

ZeliDesk는 무거운 SQLite 데이터베이스나 비동기 디스크 파일 I/O를 사용하는 대신, Windows OS가 보장하는 최고 속도의 로컬 스토리지인 ApplicationDataContainer를 채택했습니다:

MainWindow.xaml.cs (초경량 원자적 핀 영속화) C#
// 핀 태그 목록을 파이프(|) 구분자 단일 문자열로 즉시 원자적 직렬화
private void SavePinnedTags()
{
    try
    {
        var settings = Windows.Storage.ApplicationData.Current.LocalSettings;
        settings.Values["QuickLaunch_PinnedTags"] = string.Join("|", _pinnedTags);
    }
    catch { }
}

// 앱 시작 시 0ms 역직렬화
private void LoadPinnedTags()
{
    _pinnedTags.Clear();
    try
    {
        var settings = Windows.Storage.ApplicationData.Current.LocalSettings;
        if (settings.Values.TryGetValue("QuickLaunch_PinnedTags", out var raw) && raw is string s)
        {
            foreach (var tag in s.Split('|', StringSplitOptions.RemoveEmptyEntries))
                _pinnedTags.Add(tag);
        }
    }
    catch { }

    // 등록된 핀이 없는 신규 PC 환경을 위한 교육용 기본값 주입
    if (_pinnedTags.Count == 0)
    {
        _pinnedTags.AddRange(new[] { "slmdown", "zelinote", "zeliclip", "zelidash", "zeligen" });
        SavePinnedTags();
    }
}

string.Join("|", _pinnedTags) 기법은 파싱 오버헤드가 사실상 0ns에 수렴하며, PC가 비정상 종료(BSOD, 강제 전원 차단)되더라도 OS 레지스트리 레벨에서 트랜잭션이 보장되어 파일 손상(Corruption)이 발생하지 않습니다.

4. Flyout 기반 '더보기(⚡)' 도구 팔레트

퀵런치 바는 간결함을 위해 소수의 핀 아이템만을 유지하지만, 가끔 다른 도구가 필요할 때 굳이 사이드 서랍을 넓게 열 필요가 없도록 우측 끝에 더보기(⚡) 드롭다운 버튼을 배치했습니다:

graph LR
    User[사용자] --> ClickPin[퀵런치 아이템 직접 클릭]
    User --> ClickMore[더보기 ⚡ 버튼 클릭]
    ClickPin --> DirectExec[0ms 다이렉트 디스패치]
    ClickMore --> Flyout[플라이아웃 팔레트 팝업]
    Flyout --> CategoryTab[카테고리별 그리드 뷰]
    CategoryTab --> DirectExec
                

CreateMoreButton()은 DropDownButton 컨트롤과 연결된 가벼운 플라이아웃(Flyout)을 통해 72종 전체 도구를 정돈된 2열 그리드로 팝업하여, 화면 공간을 거의 차지하지 않으면서도 전체 도구에 즉각 접근할 수 있는 '2단계 계층형 룩업'을 완성했습니다.

5. 초 단위 수업 진행을 위한 단축키 (Ctrl+1~9) 인덱스 라우팅

컴퓨터실에서 교사가 "자, 메모장을 켜고 수업 내용을 정리하세요"라고 지시했을 때, 학생들이 마우스로 탐색하느라 소비하는 시간을 단축하기 위해 Ctrl+1~9 숫자 키보드 다이렉트 매핑 파이프라인을 탑재했습니다:

MainWindow.xaml.cs (글로벌 단축키 라우팅) C#
private void RootGrid_PreviewKeyDown(object sender, KeyRoutedEventArgs e)
{
    var ctrl = Microsoft.UI.Input.InputKeyboardSource.GetKeyStateForCurrentThread(
        Windows.System.VirtualKey.Control);

    if (ctrl.HasFlag(Windows.UI.Core.CoreVirtualKeyStates.Down))
    {
        // Ctrl + 1 ~ 9: 퀵런치 핀 도구 즉시 실행
        if (e.Key >= Windows.System.VirtualKey.Number1 && e.Key <= Windows.System.VirtualKey.Number9)
        {
            int index = (int)e.Key - (int)Windows.System.VirtualKey.Number1;
            if (index < _pinnedItems.Count)
            {
                LaunchInternalApp(_pinnedItems[index].Tag);
                e.Handled = true;
            }
        }
    }
}

이 단축키 파이프라인은 UI 스레드의 PreviewKeyDown 터널링 단계에서 가로채므로, WebView2 브라우저 내부에 포커스가 있더라도 0ms 즉각 실행을 완벽히 보장합니다.

6. 공교육 및 국방 전산망 현장 실증 결과

전국 초·중·고 정보 교실 및 군부대 교육 환경에 적용한 결과:

7. 결론: 기술적 복잡성을 품은 미니멀리즘의 승리

훌륭한 소프트웨어 엔지니어링은 많은 기능을 단순히 우겨넣는 것이 아니라, 그 방대한 기능을 사용자의 눈앞에서 얼마나 자연스럽고 우아하게 숨기고 드러내느냐에 있습니다.

ZeliDesk의 QuickLaunchBar와 Drawer 아키텍처는 선언적 XML, OS 레벨 원자적 영속화, 그리고 인체공학적 단축키 설계를 통해 72종의 강력한 유틸리티를 한 손가락 끝에서 자유자재로 다룰 수 있는 궁극의 데스크톱 경험으로 승화시켰습니다. 이 보이지 않는 정밀한 인터랙션 설계야말로 ZeliDesk가 대한민국 공교육과 국방 전산망에서 사랑받는 가장 강력한 이유입니다.

← 이전 기술 백서 #890 WinUI 3 스플래시 화면의 하드웨어 가속 비디오 엔진과 블랙 프레임(Black Frame) 0초 차단: ZeliDesk SplashWindow의 페이크 로딩 트릭(Fake Loading Trick) 및 무작위 비디오 디스패치 아키텍처 다음 기술 백서 → #888 언패키지드(Unpackaged) WinUI 3의 공식 리소스 로더 크래시 극복기: ZeliDesk Loc의 .resw 순수 XML 직접 파싱 및 2단계 안전 폴백(Fallback) 체인 아키텍처
⚡ ZeliDesk 맞춤형 데스크톱 워크스페이스 체험하기

원자적 핀 영속화와 단축키 디스패치로 무장한 72종 올인원 데스크톱 슈트를 지금 만나보세요.

ZeliDesk Suite 무료 다운로드