algernon

LLM FrameworksCLIJavaScript

★ 3,028주당 +2조회 5

무엇인가

Algernon은 디렉터리 구조 자체를 라우팅 테이블로 삼는 HTTP 서버다. 요청 URL에 대응하는 디렉터리에서 우선순위가 정해진 index 파일을 찾아 실행하거나 렌더링하고 그 결과를 응답으로 돌려준다. 애플리케이션 코드, 정적 자산, 데이터베이스 접속, 사용자 권한 검사를 하나의 프로세스 안에서 처리하는 계열에 속한다.

어떻게 동작하나

파일명이 처리 방식을 결정한다. index.lua는 현재 디렉터리의 핸들러 함수로 해석되고, index.md는 HTML로 렌더링되며, index.pongo2·index.po2·index.tmpl은 Pongo2, index.amber는 Amber, index.jsx·index.tsx는 esbuild로 번들된 JavaScript와 함께 HTML로 출력된다. index.tl은 Teal 핸들러이고, index.prompt는 콘텐츠 타입·Ollama 모델·프롬프트를 적어 LLM으로 본문을 생성한다. 같은 디렉터리의 data.lua는 함수와 변수를 Pongo2·Amber·Markdown 페이지에 노출하고, style.gcss는 그 디렉터리 페이지들의 스타일이 된다. .scss와 .gcss는 요청 시점에 CSS로 변환된다. 데이터베이스는 기본적으로 Redis/Valkey를 쓰고 서버가 없으면 파일 하나에 저장하는 내장 BoltDB로 폴백하며, PostgreSQL·SQLite·MariaDB·MySQL·MSSQL도 백엔드로 지정할 수 있다. 인증과 권한은 permissions2가 담당하고 /data와 /repos는 사용자 권한, /admin은 관리자 권한, /는 공개가 기본값이다. 인증서와 키가 주어지면 SSL/TLS 위의 HTTP/2를 기본으로 쓰고 플래그로 HTTP/3(QUIC)을 켠다. 속도 제한은 tollbooth, 플러그인은 pie, 로깅은 logrus가 맡는다.

무엇과 다른가

일반적인 구성에서는 nginx가 정적 파일을 서빙하고 PHP·Node·Python 런타임이 동적 요청을 처리하며 Sass나 TypeScript 컴파일러가 백그라운드에서 자산을 빌드한다. Algernon은 이 세 역할을 하나의 네이티브 실행 파일로 합친다. Lua 인터프리터와 Teal 타입체커가 바이너리에 컴파일되어 들어가고 파일 변환은 요청이 들어올 때 그 자리에서 일어난다. npm이나 node_modules 없이 React 19 JSX/TSX를 다루며 별도 프로세스를 띄우지 않는다. 애플리케이션 전체를 .zip 또는 .alg 아카이브로 묶어 시작 시 로드할 수도 있다.

어떻게 쓰나

Go 1.26 이상이 있으면 go install github.com/xyproto/algernon@latest로 설치한다. 인자 없이 실행하면 현재 디렉터리를 문서 루트로 삼는 서버가 뜨고, 17MB 미만인 Docker 이미지로 실행하면 http://localhost:4000에서 확인할 수 있다. 설정은 커맨드라인 플래그로 하거나 Lua 스크립트로 작성한다. Lua 스크립트 하나를 커맨드라인 인자로 넘기면 그 스크립트가 독립 서버가 되어 URL 접두사별 핸들러와 파일·디렉터리 서빙을 직접 정의한다. -autorefresh를 켜면 소스 파일이 바뀔 때 브라우저가 페이지를 다시 불러온다.

전제와 한계

Go 1.26 이상이 필요하다. HTTP/2는 브라우저에 따라 HTTPS를 요구하므로 인증서와 키를 지정해야 동작한다. -autorefresh는 현재 Linux와 macOS에서만 동작하고 감시 대상 파일이 많으면 OS의 열린 파일 수 제한에 걸린다. 디렉터리 목록 페이지의 디자인은 코드에 고정되어 있다. 실행 플랫폼은 Linux, macOS, 64비트 Windows이며 텍스트는 가능한 한 UTF-8로 처리한다.