Redbean 2.0์€ ๋ฒ”์šฉ ์‹คํ–‰ ๊ฐ€๋Šฅํ•œ ZIP ์•„์นด์ด๋ธŒ๋กœ ํŒจํ‚ค์ง€๋œ ์›น ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์šฉ ํ”Œ๋žซํผ์ž…๋‹ˆ๋‹ค.

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

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€