회사 구조의 에이전트 조직: 16개 부서, 172개 스킬, 개별 설치 가능
한국어는 runchr 제공 번역입니다. 원문 README는 English tool page.
algernon
Lua, Teal, Markdown, Pongo2, JSX/TSX, SQLite, PostgreSQL, Redis, Ollama LLM 지원을 하나의 실행 파일로 묶은 작은 순수 Go 웹 서버
- Kind
- web server
- Platform
- cross-platform
- Models
- Ollama
프로젝트 README (번역)
GitHub ↗Written by the project's own authors, not by runchr. Snapshot taken 2026-10-31.
HTTP/2, HTTP/3(QUIC), Lua, Teal, Markdown, Pongo2, HyperApp, Amber, Sass(SCSS), GCSS, JSX, TypeScript, Ollama(LLM), BoltDB(SQLite처럼 데이터베이스를 파일에 저장하는 내장형), Redis, Valkey, PostgreSQL, SQLite, MariaDB, MySQL, MSSQL, IPv6, npm 없는 React 19, 속도 제한, 정상 종료, 플러그인, 사용자 및 권한을 기본 지원하는 웹 서버입니다.
모두 하나의 작은 자체 포함 실행 파일에 담겨 있습니다.
배포판 패키지
빠른 설치
Go 1.26 이상이 필요합니다.
go install github.com/xyproto/algernon@latest
또는 수동으로(개발 버전):
git clone https://github.com/xyproto/algernon
cd algernon
go build -mod=vendor
./welcome.sh
릴리스 및 사전 빌드된 이미지
다양한 플랫폼과 아키텍처용 릴리스는 릴리스 페이지를 참고하세요.
시작하기
TUTORIAL.md 를 참고하세요.
Docker
Docker 이미지는 17MB 미만이며 (x86_64 에서) 다음과 같이 사용해 볼 수 있습니다:
mkdir localhost
echo 'hi!' > localhost/index.md
docker run -it -p4000:4000 -v .:/srv/algernon xyproto/algernon
그런 다음 브라우저에서 http://localhost:4000 을 방문하세요.
기술
Go 로 작성되었습니다. 데이터베이스 백엔드로 Bolt(내장), MySQL , PostgreSQL , SQLite 또는 Valkey/ Redis (권장)를 사용하며, 사용자와 권한 처리를 위해 permissions2, Lua 해석 및 실행을 위해 gopher-lua, 타입 안전한 Lua 스크립팅을 위한 선택적 Teal, HTTP/2 서빙을 위한 http2, QUIC 서빙을 위한 quic-go, Markdown 렌더링을 위한 gomarkdown/markdown, Amber 템플릿을 위한 amber, Pongo2 템플릿을 위한 Pongo2, CSS 전처리를 위한 Sass (SCSS) 및 GCSS를 사용합니다. 로깅에는 logrus, JSX/TSX를 JavaScript로 번들링 및 변환하는 데는 esbuild, 속도 제한에는 tollbooth, 플러그인에는 pie를 사용합니다.
설계 결정 사항
인증서와 키가 주어지면 기본적으로 HTTP/2 over SSL/TLS(https)가 사용됩니다.
그렇지 않으면 일반 HTTP가 사용됩니다.
HTTP/3(QUIC)은 플래그로 활성화할 수 있습니다.
/data 와 /repos 는 사용자 권한을, /admin 은 관리자 권한을 가지며 / 는 기본적으로 공개입니다. 이는 구성 가능합니다.
다음 파일 이름은 우선순위 순서대로 특별하게 처리됩니다:
index.lua 는 현재 디렉터리에 대한 핸들러 함수로 해석되는 Lua 코드입니다.
index.html 은 올바른 Content-Type으로 출력되는 HTML입니다.
index.md 는 HTML로 렌더링되는 Markdown 코드입니다.
index.txt 는 올바른 Content-Type으로 출력되는 일반 텍스트입니다.
index.pongo2, index.po2 또는 index.tmpl 은 HTML로 렌더링되는 Pongo2 코드입니다.
index.amber 는 HTML로 렌더링되는 Amber 코드입니다.
index.hyper.js, index.hyper.jsx 또는 index.happ 은 HTML로 렌더링되는 JSX+HyperApp 코드입니다.
index.jsx 는 번들링된 JavaScript와 함께 HTML로 렌더링되는 React JSX/JavaScript 파일입니다.
index.tsx 는 번들링된 JavaScript와 함께 HTML로 렌더링되는 React TSX/TypeScript 파일입니다.
index.tl 은 현재 디렉터리에 대한 핸들러 함수로 해석되는 Teal 코드입니다.
index.prompt 는 LLM으로 콘텐츠를 생성하기 위한 content-type, Ollama 모델, 빈 줄, 프롬프트입니다.
data.lua 는 Lua 코드로, 함수와 변수가 같은 디렉터리의 Pongo2, Amber, Markdown 페이지에서 사용 가능하게 됩니다.
단일 Lua 스크립트가 명령줄 인수로 주어지면 독립 실행형 서버로 사용됩니다. 핸들러를 설정하거나 특정 URL 접두사에 대해 파일 및 디렉터리를 서빙하는 데 사용할 수 있습니다.
style.gcss 는 같은 디렉터리의 모든 Pongo2, Amber, Markdown 페이지의 스타일로 사용되는 GCSS 코드입니다.
다음 파일 확장자는 Algernon이 처리합니다:
Markdown: .md (HTML로 렌더링)
Pongo2: .po2, .pongo2 또는 .tpl (모든 텍스트로 렌더링, 일반적으로 HTML)
Amber: .amber (HTML로 렌더링)
Sass: .scss (CSS로 렌더링)
GCSS: .gcss (CSS로 렌더링)
JSX: .jsx (JavaScript/ECMAScript로 렌더링)
TypeScript: .ts, .tsx (JavaScript/ECMAScript로 렌더링)
Lua: .lua (자체 출력과 content type을 제공하는 스크립트)
Teal: .tl (.lua와 동일하지만 타입 안전성 포함)
HyperApp: .hyper.js 또는 .hyper.jsx (HTML로 렌더링)
다른 파일은 확장자에 따라 mimetype이 지정됩니다.
인덱스 파일이 없는 디렉터리는 디렉터리 목록으로 표시되며, 디자인은 하드 코딩되어 있습니다.
가능한 경우 항상 UTF-8이 사용됩니다.
서버는 명령줄 플래그나 lua 스크립트로 구성할 수 있지만, 시작하는 데 구성은 필요하지 않습니다.
기능 및 제한 사항
HTTP/2를 지원하며, HTTPS 유무와 관계없이 사용 가능합니다(브라우저는 HTTP/2 사용 시 HTTPS를 요구할 수 있음).
HTTP/3(QUIC)과 일반 HTTP도 지원합니다.
Lua 스크립트를 HTTP 요청 핸들러로 사용할 수 있습니다.
Algernon 실행 파일은 네이티브로 컴파일되며 상당히 빠릅니다.
Linux, macOS, 64비트 Windows에서 동작합니다.
Lua 인터프리터가 실행 파일에 컴파일되어 있습니다.
Teal 타입체커가 Lua VM에 로드됩니다.
자동 새로고침 기능 사용 시 라이브 편집/미리보기가 가능합니다.
Lua를 사용하면 페이지를 새로고침할 때(또는 자동 새로고침 사용 시 Lua 파일이 수정될 때) 코드가 해석되는 짧은 개발 주기가 가능합니다.
자체 포함 Algernon 애플리케이션은 아카이브(.zip 또는 .alg 로 끝남)로 압축하여 시작 시 로드할 수 있습니다.
Markdown , Pongo2 , Amber , Sass (SCSS), GCSS, JSX/TSX 기본 지원.
기본적으로 데이터베이스 백엔드로 Redis가 사용됩니다.
Redis 서버를 사용할 수 없으면 Algernon은 내장 Bolt 데이터베이스로 폴백합니다.
렌더링된 Markdown 페이지의 HTML 제목은 첫 줄에 title: Title goes here 처럼 제목을 지정하여 제공할 수 있습니다. 이는 MultiMarkdown의 하위 집합입니다.
백그라운드에서 실행되는 파일 변환기(SASS 등)가 필요하지 않습니다. 파일은 즉석에서 변환됩니다.
-autorefresh 가 활성화되면 소스 파일이 변경될 때 브라우저가 페이지를 자동으로 새로고침합니다. Markdown, Lua 오류 페이지, Amber(Sass, GCSS, data.lua 포함)에서 동작합니다. 현재는 Linux와 macOS에서만 동작합니다. 너무 많은 파일의 변경을 감시하면 OS의 열린 파일 수 제한에 도달할 수 있습니다.
대화형 REPL이 포함되어 있습니다.
첫 번째 인수로 Markdown 파일 이름만 주어지면 데이터베이스를 사용하지 않고 일반 HTTP로 포트 3000에서 서빙됩니다. README.md 파일을 로컬에서 보는 데 유용합니다. -m 을 사용하면 브라우저에 표시하고 한 번만 서빙합니다.
완전한 멀티스레딩. 사용 가능한 모든 CPU가 사용됩니다.
tollbooth 를 사용한 속도 제한을 지원합니다.
Lua REPL에서 help 명령을 사용할 수 있으며, 사용 가능한 Lua 함수를 빠르게 살펴볼 수 있습니다.
어떤 언어로든 작성된 플러그인을 로드할 수 있습니다. 플러그인은 Lua.Code 와 Lua.Help 함수를 제공하고 stderr+stdin을 통해 JSON-RPC로 통신해야 합니다. 자세한 내용은 pie 를 참고하세요. Go와 Python용 샘플 플러그인이 plugins 디렉터리에 있습니다.
스레드 안전한 파일 캐싱이 내장되어 있으며, 여러 캐시 모드(예: 이미지만 캐싱)를 사용할 수 있습니다.
JSON 문서를 읽고 저장할 수 있습니다. 간단한 JSON 경로 표현식(XPath의 간단한 버전이지만 JSON용)을 지원합니다.
캐시 압축이 활성화되면 캐시에 저장된 파일을 압축 해제 없이 캐시에서 클라이언트로 직접 전송할 수 있습니다.
클라이언트로 전송되는 파일은 4096바이트 미만이 아닌 한 gzip 으로 압축됩니다.
PostgreSQL 사용 시 HSTORE 키/값 타입이 사용됩니다(PostgreSQL 9.1 이상에서 사용 가능).
외부 의존성 없음, 순수 Go만 사용.
Go >= 1.26 또는 Go 1.26을 지원하는 GCC/ gccgo 버전이 필요합니다.
Algernon에서 사용하는 Lua 구현(gopherlua)은 package.loadlib 를 지원하지 않습니다.
IPv6 완전 지원.
Q&A
Q:
이걸 사용하면 어떤 이점이 있나요? 어떤 시나리오에서 뛰어난가요? 감사합니다. -- mtw@HN .
A:
좋은 질문입니다. 어떤 시나리오에서 뛰어난지 잘 모르겠습니다. 캐싱이나 원시 성능에 뛰어난 특화 웹 서버가 있습니다. Vue나 React 같은 인기 프런트엔드 툴킷을 위한 전용 백엔드가 있습니다. Markdown이나 HTML 편집 및 미리보기에 뛰어난 전용 편집기가 있습니다.
주요 이점은 Algernon이 최소한의 구성으로 많은 영역을 커버하면서도 플러그인 시스템과 Lua 프로그래밍 지원을 갖출 만큼 강력하다는 점이라고 생각합니다. Markdown이나 웹 페이지를 편집할 때 Server Sent Events를 사용하는 자동 새로고침 기능이 있습니다. HTTP/2, QUIC, TLS 1.3 같은 최신 웹 기술도 지원합니다. 캐싱 시스템도 괜찮습니다. 그리고 Go를 사용하기 때문에 NetBSD나 Raspberry Pi 같은 소규모 플랫폼도 커버됩니다. 외부 의존성이 없으므로 Go가 지원하는 모든 시스템에서 Algernon을 실행할 수 있습니다.
주요 이점은 다재다능하고 신선하며 많은 플랫폼과 사용 사례를 커버한다는 것입니다.
잠재적 이점에 대한 더 구체적인 설명을 위해서는 더 구체적인 사용 사례가 필요합니다.
설치
macOS
필요하면 Homebrew 를 설치하세요.
brew install algernon
Arch Linux
pacman -S algernon
Go를 사용할 수 있는 모든 시스템
이 방법은 main 브랜치의 최신 커밋을 사용합니다:
go install github.com/xyproto/algernon@main
필요하면 ~/go/bin 을 경로에 추가하세요. 예: export PATH=$PATH:$HOME/go/bin .
유틸리티
Algernon 웹 애플리케이션( .alg 파일)으로부터 Docker 이미지를 생성하기 위한 alg2docker 유틸리티( containers/alg2docker 에 있음)가 함께 제공됩니다.
http2check 는 웹 서버가 HTTP/2 를 제공하는지 확인하는 데 사용할 수 있습니다.
개요
Algernon 실행:
이전 버전의 스크린샷:
아이디어는 필요에 따라 웹 페이지를 Markdown, Pongo2, Amber, HTML 또는 JSX(+React 또는 HyperApp)로 작성하고, CSS, Sass(SCSS) 또는 GCSS로 스타일링하며, 데이터는 Redis, BoltDB, PostgreSQL, MSQL 또는 MariaDB/MySQL과 통신하는 Lua 또는 Teal 스크립트로 제공할 수 있다는 것입니다.
Amber와 GCSS는 정적 페이지에 좋은 조합으로, HTML과 CSS보다 더 명확하고 반복이 적습니다. Amber 템플릿에 데이터를 제공하기 위해 Lua를 사용하는 것도 쉬우며, 이는 모델, 컨트롤러, 뷰를 분리하는 데 도움이 됩니다.
Pongo2, Sass, Lua 또는 Teal도 잘 조합됩니다. Pongo2는 Amber보다 유연합니다.
자동 새로고침 기능은 Markdown, Pongo2 또는 Amber 사용 시 지원되며, 개발 중 즉각적인 미리보기를 얻는 데 유용합니다.
JSX에서 JavaScript(ECMAscript)로의 트랜스파일러가 내장되어 있습니다.
Redis는 빠르고 확장 가능하며 좋은 데이터 지속성을 제공합니다 . 선호되는 백엔드여야 합니다.
Bolt는 Go로 작성된 순수 키/값 저장소 입니다. 데이터베이스 호스트를 먼저 설정하지 않고도 Algernon을 쉽게 실행할 수 있게 해줍니다.
MariaDB/MySQL 지원은 널리 사용 가능하기 때문에 포함되어 있습니다.
PostgreSQL은 견고하고 빠른 데이터베이스로 역시 지원됩니다.
스크린샷
Markdown은 Sass나 GCSS로 쉽게 스타일링할 수 있습니다.
Debug 모드가 활성화된 경우 Lua 스크립트의 오류가 처리되는 방식입니다.
Algernon Charles Swinburne의 시 중 하나로, 배경에 세 개의 회전하는 원환체가 있습니다.
가우시안 블러에는 CSS3를, 3D 그래픽에는 three.js를 사용합니다.
prettify 샘플의 스크린샷. 단일 Lua 스크립트에서 서빙됩니다.
JSX 변환이 내장되어 있습니다. Algernon과 함께 React를 사용하는 것은 쉽습니다.
샘플
샘플 모음은 이 저장소의 samples 디렉터리 또는 여기(samplepack.zip)에서 다운로드할 수 있습니다.
시작하기
"dev" 모드로 Algernon 실행
이 모드는 디버그 모드를 활성화하고, 내부 Bolt 데이터베이스를 사용하며, HTTPS+HTTP/2 대신 일반 HTTP를 사용하고, Pongo2, Amber, Lua, Teal, Sass, GCSS, Markdown, JSX를 제외한 모든 파일에 대해 캐싱을 활성화합니다.
algernon -e
그런 다음 print("Hello, World!") 가 담긴 index.lua 파일을 만들고 브라우저에서 서빙되는 웹 페이지를 방문해 보세요.
로컬 사용을 위한 필수 포트 구성
샘플을 탐색하기 위해 기본 포트를 사용하려면 방화벽 설정에서 포트 3000을 변경해야 할 수 있습니다.
자동 새로고침 기능이 동작하려면 포트 5553을 사용할 수 있어야 합니다(또는 다르게 구성한 경우 선택한 다른 호스트/포트).
샘플 실행 준비
git clone https://github.com/xyproto/algernon
cd algernon
make
"welcome" 페이지 실행
./welcome.sh 를 실행하여 "welcome" 샘플 서빙을 시작하세요.
http://localhost:3000/ 을 방문하세요.
일반 HTTP용 나만의 Algernon 애플리케이션 만들기
mkdir mypage
cd mypage
다음 내용으로 index.lua 라는 파일을 만드세요:
print("Hello, Algernon")
algernon --httponly --autorefresh . 실행
http://localhost:3000/ 을 방문하세요.
index.l…
No comments yet.
to comment.