본문으로 건너뛰기
로그인 둘러보기
개발·코딩·데이터베이스 · 윈도우즈 유틸

greymd

0

greymd는 의존성이 없는 로컬 마크다운 렌더러 서버로, Windows 플랫폼에서 동작하도록 설계되었습니다.

Windows렌더러로컬 서버마크다운무의존성

소개

greymd는 의존성이 없는 로컬 마크다운 렌더러 서버로, Windows 플랫폼에서 동작하도록 설계되었습니다. 단일 바이너리로 제공되며, Node.js나 Python 같은 런타임 없이 실행됩니다. 마크다운 파일을 실시간으로 HTML로 변환하여 웹 브라우저에서 미리볼 수 있도록 지원합니다.

상세정보

마크다운 렌더링

헤딩, 단락, 굵게/기울임, 인라인 코드, 펜스 코드 블록, 작업 목록, 블록인용, 링크, 이미지, GFM 스타일 테이블, 수평선을 지원합니다. 경로 자동 링크 기능을 통해 .md 파일이나 디렉터리 경로가 텍스트 내에서 클릭 가능한 링크로 변환됩니다.

디렉터리 탐색 및 탐색 기능

디렉터리 목록을 제공하며, 폴더와 파일을 아이콘(📁 📄)과 함께 정렬하여 표시합니다. 단일 마크다운 파일이 있는 디렉터리는 해당 파일을 직접 제공하고, index.md가 존재하면 우선적으로 제공합니다. 두 개 이상의 헤딩이 있는 페이지에 대해 자동으로 사이드바 목차를 생성합니다.

구문 하이라이팅 및 사용자 편의 기능

내장된 highlight.js를 통해 펜스 코드 블록에 구문 하이라이팅을 적용하며, 각 코드 블록에 클립보드 복사 버튼을 제공합니다. 비마크다운 파일(HTML, CSS, JS, JSON, 이미지, PDF, SVG, WASM 등)은 올바른 MIME 유형으로 원본 그대로 제공됩니다.

사용자 정의 및 테마 지원

~/.config/greymd/css에 맞춤 스타일시트를, ~/.config/greymd/js에 맞춤 자바스크립트를 배치하여 외관과 동작을 커스터마이징할 수 있습니다. 이러한 파일은 매 요청 시마다 다시 읽혀지므로, 서버 재시작 없이도 변경 사항을 반영할 수 있습니다. 기본 제공 테마(default, catppuccin-*, tokyo-night) 중 하나를 --theme 플래그로 활성화할 수 있습니다.

수식 렌더링 (옵션 기능)

--features math 플래그를 활성화하여 빌드 시, LaTeX 수식을 MathML로 변환하여 렌더링할 수 있습니다. 인라인 수식($x^2$)과 디스플레이 수식($$int_0^1 f(x),dx$$)을 지원하며, 기능이 비활성화된 경우 수식은 그대로 전달됩니다.

서빙 및 보안

서버는 localhost의 127.0.0.1에서 HTTP로 실행되며, 경로 traversal 보호를 통해 제공 디렉터리 외부의 경로 접근을 차단합니다. 퍼센트 인코딩된 URL을 올바르게 처리하고, 스레드당 요청 모델을 통해 동시 연결을 지원합니다.

설치 및 시작 방법

윙겟을 통해 winget install --id greymd.greymd --exact 명령으로 설치할 수 있습니다. 공식 저장소의 릴리스 페이지에서 .zip 또는 .tar.gz 아카이브를 다운로드하여 압축 해제 후, greymd 실행 파일을 원하는 위치에 배치할 수 있습니다. 기본적으로 현재 디렉터리를 서비스하며, 포트 8080을 먼저 시도하고 사용 중이면 임의의 사용 가능한 포트로 폴백합니다. 서버 시작 시 실제 주소가 콘솔에 출력되며, 기본 웹 브라우저가 자동으로 실행됩니다. --no-browser 플래그를 사용하면 브라우저 자동 실행을 방지할 수 있습니다.

활용 예시

마크다운 문서가 저장된 폴더에서 greymd를 실행하면, 해당 폴더의 내용을 위키처럼 탐색할 수 있습니다. 사용자는 디렉터리 목록을 통해 파일을 이동하고, 마크다운은 실시간으로 HTML로 변환되어 브라우저에 표시됩니다. 코드 블록은 구문 하이라이팅과 함께 표시되며, 한 번의 클릭으로 복사할 수 있습니다. 수식 기능이 활성화된 버전에서는 기술 문서나 학습 자료 내의 LaTeX 수식도 올바르게 렌더링됩니다.

시스템 요구사항

Rust 1.85+ (edition 2024)가 필요하며, 소스 코드로부터 빌드할 때 사용됩니다. 사전 빌드된 릴리스는 추가적인 의존성 없이 바로 실행 가능합니다.