최근 터미널 기반 사용자 인터페이스(TUI) 개발에 대한 관심이 높아지고 있습니다. 특히 다양한 플랫폼에서 호환이 가능하고, 사용자 경험을 향상시킬 수 있는 라이브러리에 대한 수요가 증가하고 있는 가운데, Zig 언어로 작성된 libvaxis가 많은 개발자들의 주목을 받고 있습니다. 이 라이브러리는 개발자들이 TUI 애플리케이션을 효율적으로 만들 수 있도록 돕는 강력한 도구입니다. 이번 블로그 글에서는 libvaxis의 주요 기능, 설치 방법, 기본 사용법, 그리고 실무에서의 활용 시나리오에 대해 자세히 살펴보겠습니다.

libvaxis란?

libvaxis는 Zig 언어로 작성된 현대적인 TUI 라이브러리로, 다양한 터미널 기능을 지원합니다. 다른 TUI 라이브러리와의 큰 차별점은 terminfo를 사용하지 않고, 터미널 쿼리를 통해 VT 기능을 자동으로 감지한다는 점입니다. 이를 통해 개발자는 각종 플랫폼에서 일관된 사용자 경험을 제공할 수 있습니다.

![libvaxis Demo](vaxis.gif)

주요 기능 및 특징

libvaxis는 다음과 같은 여러 가지 기능을 지원합니다:
  • RGB 색상 지원: 다양한 색상을 지원하여 다채로운 UI를 구현할 수 있습니다.
  • 하이퍼링크 지원: OSC 8을 통해 터미널에서 하이퍼링크를 사용할 수 있습니다.
  • 브래킷된 붙여넣기: 사용자 입력을 보다 안전하게 처리할 수 있습니다.
  • 마우스 모양 지원: OSC 22를 통해 마우스와의 상호작용을 향상시킬 수 있습니다.
  • 시스템 클립보드 및 알림 기능: OSC 52와 OSC 9, OSC 777을 통해 클립보드와 시스템 알림을 쉽게 사용할 수 있습니다.
  • 이미지 표시: Kitty 그래픽 프로토콜을 통해 터미널 내에서 이미지를 표시할 수 있습니다.
  • 이 외에도 다양한 모드와 기능을 통해 개발자는 더 풍부한 사용자 인터페이스를 제공할 수 있습니다.

    설치 및 기본 사용법

    이제 libvaxis를 어떻게 설치하고 사용할 수 있는지 알아보겠습니다.

    1. 라이브러리 설치

    libvaxis를 프로젝트에 추가하려면 다음 명령어를 사용합니다:
    zig fetch --save git+https://github.com/rockorager/libvaxis.git

    이후 build.zig 파일에 다음 코드를 추가합니다:

    const vaxis = b.dependency("vaxis", .{
        .target = target,
        .optimize = optimize,
    });
    
    exe.root_module.addImport("vaxis", vaxis.module("vaxis"));

    또는 ZLS 지원을 위해 다음과 같은 방법도 가능합니다:

    const exe_mod = b.createModule(.{
        .root_source_file = b.path("src/main.zig"),
        .target = target,
        .optimize = optimize,
    });
    
    const vaxis = b.dependency("vaxis", .{
        .target = target,
        .optimize = optimize,
    });
    exe_mod.addImport("vaxis", vaxis.module("vaxis"));
    
    const exe = b.addExecutable(.{
        .name = "project_foo",
        .root_module = exe_mod,
    });

    2. 기본 사용 예제

    libvaxis를 활용한 간단한 TUI 애플리케이션을 만들어 보겠습니다. 아래 코드는 libvaxis를 사용하여 간단한 버튼을 생성하는 예제입니다.
    const std = @import("std");
    const vaxis = @import("vaxis");
    
    pub fn main() !void {
        var stdout = std.io.getStdOut().writer();
        const app = vaxis.Application.init();
        
        const button = vaxis.Button.init("Click Me", onClick);
        app.addWidget(&button);
        app.run();
    }
    
    fn onClick() void {
        std.debug.print("Button clicked!\n", .{});
    }

    이 코드는 간단한 버튼을 생성하고, 클릭 시 메시지를 출력합니다. libvaxis의 높은 수준의 API인 vxfw를 통해 쉽게 TUI 애플리케이션을 구성할 수 있습니다.

    실무에서의 활용 시나리오

    libvaxis는 다양한 실무 환경에서 활용될 수 있습니다. 예를 들어, 서버 관리 도구, CLI 기반의 게임, 또는 데이터 시각화 도구 등에서 유용하게 사용할 수 있습니다.
    1. 서버 관리 도구: 여러 서버의 상태를 실시간으로 모니터링하고 관리할 수 있는 TUI 대시보드를 쉽게 개발할 수 있습니다.
    2. CLI 게임: 재미있는 텍스트 기반의 게임을 만들어 사용자와의 상호작용을 증대시킬 수 있습니다.
    3. 데이터 시각화: 로그 파일 분석기나 데이터 시각화 도구를 만들 때, 다양한 터미널 기능을 활용하여 사용자 경험을 향상시킬 수 있습니다.
    4. 이처럼 libvaxis는 다양한 분야에서 유용하게 사용할 수 있는 도구입니다.

      비슷한 도구와의 비교

      TUI 라이브러리로는 blessed, ncurses, tview 등 여러 가지가 있습니다. 이들과 비교했을 때 libvaxis는 Zig 언어로 작성되어 있어 성능이 뛰어나고, 다양한 최신 터미널 기능을 지원하는 점에서 많은 장점을 가지고 있습니다. 특히, Zig의 안전성과 성능은 큰 매력 요소입니다.

      추천 대상

    5. Zig 언어를 사용하는 개발자
    6. TUI 애플리케이션을 개발하고자 하는 개발자
    7. 다양한 플랫폼에서 일관된 사용자 경험을 제공하고자 하는 개발자

마무리

libvaxis는 현대적인 TUI 애플리케이션을 개발하는 데 매우 유용한 라이브러리입니다. 다양한 기능과 높은 수준의 API를 제공하여, 개발자들이 더욱 효율적으로 작업할 수 있도록 돕습니다. 관심 있는 분들은 GitHub 페이지에서 더 많은 정보를 확인하시기 바랍니다.