Linux, Windows, MacOS, FreeBSD, NetBSD ๋ฐ OpenBSD์์ ์คํํ ์ ์๋ ๋ฒ์ฉ ์คํ ํ์ผ ํ์์ผ๋ก ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ ๊ณตํ ์ ์๋ ์น ์๋ฒ๋ฅผ ์ ๊ณตํ๋ Redbean 2.0 ํ๋ก์ ํธ ๋ฆด๋ฆฌ์ค๊ฐ ๋ฐํ๋์์ต๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ฐ ์๋ฒ์ ๊ด๋ จ๋ ๋ชจ๋ ๋ฆฌ์์ค๋ ZIP ์์นด์ด๋ธ ํ์๊ณผ ํธํ๋๋ฉฐ zip ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ ์ถ๊ฐ ํ์ผ์ ์ถ๊ฐํ ์ ์๋ ๋จ์ผ ์คํ ํ์ผ๋ก ์ปดํ์ผ๋ฉ๋๋ค. ์๋ก ๋ค๋ฅธ OS์์ ํ๋์ ํ์ผ์ ์คํํ๊ณ ZIP ์์นด์ด๋ธ๋ก ์ธ์ํ๋ ๊ธฐ๋ฅ์ ์คํ ํ์ผ ํค๋๋ฅผ ์กฐ์ํ๊ณ ๋ค์ค ํ๋ซํผ ํ์ค C ๋ผ์ด๋ธ๋ฌ๋ฆฌ Cosmopolitan๊ณผ ์ฐ๊ฒฐํ์ฌ ๋ฌ์ฑ๋ฉ๋๋ค. ํ๋ก์ ํธ ์ฝ๋๋ ISC ๋ผ์ด์ผ์ค์ ๋ฐ๋ผ ๋ฐฐํฌ๋ฉ๋๋ค.
์ด ํ๋ก์ ํธ์ ์์ด๋์ด๋ ๋ด์ฅ๋ ์น ์๋ฒ์ ํจ๊ป ํ๋์ ์คํ ํ์ผ "redbean.com"์ ์ ๊ณตํ๋ ๊ฒ์ ๋๋ค. ์น ์ ํ๋ฆฌ์ผ์ด์ ๊ฐ๋ฐ์๋ zip ์ ํธ๋ฆฌํฐ๋ฅผ ์ฌ์ฉํ์ฌ HTML ๋ฐ Lua ํ์ผ์ ์ด ํ์ผ์ ์ถ๊ฐํ๊ณ ๋๋ฆฌ ์ฌ์ฉ๋๋ ๋ชจ๋ ์ด์ ์ฒด์ ์์ ์คํ๋๋ฉฐ ์์คํ ์์ ์คํํ๊ธฐ ์ํด ๋ณ๋์ ์น ์๋ฒ๊ฐ ํ์ํ์ง ์์ ์์ฒด ํฌํจ ์น ์ ํ๋ฆฌ์ผ์ด์ ์ ์ป์ ์ ์์ต๋๋ค.
์์ฑ๋ ์คํ ํ์ผ์ ์คํํ ํ ๋ด์ฅ๋ ์น ์๋ฒ๋ฅผ ์ฌ์ฉํ์ฌ ํ์ผ์ ์ ์ฅ๋ ์น ์์ฉ ํ๋ก๊ทธ๋จ์ ์ก์ธ์คํฉ๋๋ค. ๊ธฐ๋ณธ์ ์ผ๋ก ํธ๋ค๋ฌ๋ localhost์ ์ฐ๊ฒฐ๋์ง๋ง ์๋ฒ๋ ์ผ๋ฐ ๊ณต๊ฐ ์น ์๋ฒ๋ก ์ฌ์ฉ๋ ์๋ ์์ต๋๋ค(์: ์ด ์๋ฒ๋ ํ๋ก์ ํธ ์น ์ฌ์ดํธ๋ฅผ ์ ๊ณตํฉ๋๋ค). ๋ด์ฅ๋ ์น ์๋ฒ๋ HTTPS ์ก์ธ์ค๋ฅผ ์ง์ํ๋ฉฐ ์๋๋ฐ์ค ๊ฒฉ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ์คํ๋ ์ ์์ต๋๋ค. ์ด๋ฅผ ํตํด ์ก์ธ์ค๋๋ ์์คํ ์ธํฐํ์ด์ค๋ฅผ ์ ์ดํ ์ ์์ต๋๋ค. ์คํ ์ค ์๋ฒ ์๋์ ์ ์ดํ๊ธฐ ์ํด ๋ํํ REPL ์ธํฐํ์ด์ค๊ฐ ์ ๊ณต๋ฉ๋๋ค(Lua REPL ๋ฐ GNU Readline๊ณผ ์ ์ฌํ bestline ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๊ธฐ๋ฐ). ์ด๋ฅผ ํตํด ํ๋ก์ธ์ค ์ํ๋ฅผ ๋ํํ์ผ๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
์น ์๋ฒ๋ gzip์ผ๋ก ์์ถ๋ ์ฝํ ์ธ ๋ฅผ ์ ๊ณตํ๋ฉด์ ์ผ๋ฐ PC์์ ์ด๋น ๋ฐฑ๋ง ๊ฐ๊ฐ ๋๋ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ค๊ณ ์ฃผ์ฅ๋ฉ๋๋ค. ์ฑ๋ฅ์ ๋์์ด ๋๋ ์ ์ zip๊ณผ gzip์ด ๊ณตํต ํ์์ ์ฌ์ฉํ๋ฏ๋ก ๋ฐ์ดํฐ๊ฐ zip ํ์ผ์ ์ด๋ฏธ ์์ถ๋ ์์ญ์์ ๋ค์ ์์ถ๋์ง ์๊ณ ์ ๊ณต๋๋ค๋ ๊ฒ์ ๋๋ค. ๋ํ ์คํ ํ์ผ์ ์ ์ ๋งํฌ๋ฅผ ์ฌ์ฉํ์ฌ ์์ฑ๋๊ณ ํฌ๊ธฐ๊ฐ ์๊ธฐ ๋๋ฌธ์ ํด๋น ์คํ ํ์ผ์ ๋ํด fork๋ฅผ ํธ์ถํ๋ฉด ๋ฉ๋ชจ๋ฆฌ ์ค๋ฒํค๋๊ฐ ๊ฑฐ์ ๋๋ ์ ํ ๋ฐ์ํ์ง ์์ต๋๋ค.
์ ์ ์น ์ฝํ ์ธ ๋ฅผ ์ฒ๋ฆฌํ๊ณ ๋ธ๋ผ์ฐ์ ์์ JavaScript๋ฅผ ์คํํ๋ ๊ฒ ์ธ์๋ Lua, Fullmoon ์น ํ๋ ์์ํฌ ๋ฐ SQLite DBMS์ ์คํฌ๋ฆฝํธ๋ฅผ ์ฌ์ฉํ์ฌ ์น ์ ํ๋ฆฌ์ผ์ด์ ๋ ผ๋ฆฌ๋ฅผ ํ์ฅํ ์ ์์ต๋๋ค. ์ถ๊ฐ ๊ธฐ๋ฅ์๋ argon2 ๋น๋ฐ๋ฒํธ ํด์ฑ ์ฒด๊ณ ์ง์, MaxMind ๋ฐ์ดํฐ๋ฒ ์ด์ค๋ฅผ ์ฌ์ฉํ์ฌ IP ์์ญ์ ๊ฒฐ์ ํ๋ ๊ธฐ๋ฅ, Cosmopolitan ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ Unix API์ ๋ํ ์ก์ธ์ค๊ฐ ํฌํจ๋ฉ๋๋ค. ์น ์๋ฒ, MbedTLS, Cosmopolitan, Lua ๋ฐ SQLite๋ฅผ ํฌํจํ๋ ๊ธฐ๋ณธ ์คํ์ ํฌ๊ธฐ๋ 1.9MB์ ๋ถ๊ณผํฉ๋๋ค.
๋ฒ์ฉ ์คํ ํ์ผ์ ๋ค์ํ ์ด์ ์ฒด์ (PE, ELF, MACHO, OPENBSD, ZIP)๋ณ ์ธ๊ทธ๋จผํธ์ ํค๋๋ฅผ ํ๋์ ํ์ผ๋ก ๊ฒฐํฉํ์ฌ ๊ตฌ์ฑ๋ฉ๋๋ค. ๋จ์ผ ์คํ ํ์ผ์ด Windows ๋ฐ Unix ์์คํ ์์ ์คํ๋๋๋ก ํ๋ ค๋ฉด Thompson Shell์ด โโ"#!" ์คํฌ๋ฆฝํธ ๋ง์ปค๋ฅผ ์ฌ์ฉํ์ง ์๋๋ค๋ ์ฌ์ค์ ํ์ฉํ์ฌ Windows PE ํ์ผ์ ์ ์คํฌ๋ฆฝํธ๋ก ์ธ์ฝ๋ฉํ๋ ๊ฒ์ด ์ข์ต๋๋ค. ๊ทธ ๊ฒฐ๊ณผ Linux, BSD, Windows ๋ฐ macOS์์ ์ฌ์ฉ๋๋ ์ฌ๋ฌ ๊ฐ์ง ํ์์ ๊ฒฐํฉํ ์คํ ํ์ผ์ด ํ์ํ์ต๋๋ค. $ ์ปฌ https://redbean.dev/redbean-demo-2.0.7.com >redbean.com $ chmod +x redbean.com $ zip redbean.com hello.html $ zip redbean.com hello.lua $ ./redbean .com -vv I2022-06-23T08:27:14+000767:redbean] (srvr) ์์ http://127.0.0.1:8080 >: ๋ช ๋ น ๋๊ธฐ ์คโฆ $ ์ปฌ https://127.0.0.1:8080/hello .html hello $ printf 'GET /hello.lua\n\n' | NC 127.0.0.1 8080 ์๋ ํ์ธ์
์ถ์ฒ : opennet.ru