[Node.js] Single Executable Applications (SEA)
Single executable applications, SEA๋ Node.js์์ ์ ๊ณตํ๋ ์คํ์ ๊ธฐ๋ฅ์ด๋ค.
js ์ฝ๋๋ ์ข
์์ฑ, config๋ฅผ ์ง์ ๋ถํ๊ฒ ์ฃผ๋ ์ฃผ๋ ๋ฌ๊ณ ๋ค๋ ํ์ ์์ด ๋จ์ผ ๋ฐ์ด๋๋ฆฌ๋ก ์์ถํด์ ์๋นํ ์ ์๊ฒ ํด์ฃผ๋ ๊ธฐ๋ฅ์ด๋ผ๊ณ ํ ์ ์๋ค.
https://dev.to/this-is-learning/building-single-executable-applications-with-nodejs-16k3
์ด๊ฑธ ์ง์ง ๋ฐ์ด๋๋ฆฌ๋ก ์ปดํ์ผํด์ ์ต์ ํ๋ฅผ ํด์ฃผ๋ ๊ฒ์ ์๋๊ณ , ์ปจํ
์ด๋๋ก ๋ง๋ฏ์ด ์คํ ๋จ์๋ฅผ ๊ฒฉ๋ฆฌํด์ฃผ๋ ๊ฒ์ ๋ถ๊ณผํ๋ค.
๊ทธ๋ฌ๋๊น, node.exe ์คํํ์ผ์๋ค๊ฐ ์์ค์ฝ๋ ๋ฑ์ ์ต์ง๋ก ์ฐ๊ฒจ๋ฃ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฆฌ๊ณ ํ์ผ์์คํ
๋ ๊ฐ์์ผ๋ก ๋ชจ์ฌํด์ ๋ฃ์ด์ฃผ๋ ๊ฒ์ผ๋ก ๊ฒฝ๋ก๋ก ์ธํ ๋ฌธ์ ๋ ์๋๋ก ํด์ค๋ค.
์ฌ์ค, ์๋ฒ ํ๊ฒฝ์๋ผ๋ฉด ์ด๋ฐ๊ฑธ ์ธ ํ์๋ ์๊ณ ๊ทธ๋ฅ ์ปจํ
์ด๋๋ก ๋ง๋ฉด ๋๋ค.
ํ์ง๋ง ํด๋ผ์ด์ธํธ ํ๊ฒฝ์ด๋ผ๋ฉด ๋ฐฐํฌ๊ฐ ์ฉ์ดํด์ง๋ ๋ฉด์ ํ์คํ ์์ ๊ฒ์ด๋ค.
์ ์ฝ
์์ง ๊ธฐ๋ฅ์ ์ธ ์ ํ์ด ์ข ์๋ค.
๋ชจ๋์์คํ
์ CommonJS๋ง ์ฌ์ฉํ ์ ์๋ค. ๊ทธ๋์ ESM์ ์ด๋ค๋ฉด ๋ณํ ๊ณผ์ ์ด ํ์ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ธํ ํ๋๊ฒ ์ข ๋ถํธํ ํธ์ด๋ค.
์ฌ์ฉํด๋ณด๊ธฐ (in Linux)
๋ฆฌ๋ ์ค๋ฅผ ๊ธฐ์ค์ผ๋ก๋ง ์ ๋ฆฌํ๋ค. ์ด๊ฑด ํ๋ซํผ๋ง๋ค ์ฒ๋ฆฌ ๋ฐฉ์์ด ๋ค ๋ค๋ฅด๋ค.
node.js 22๋ถํฐ ์คํ์ ์ผ๋ก ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ด๋ค. ๊ทธ ์ด์ ๋ฒ์ ์์๋ ์ฌ์ฉํ ์ ์๋ค.
๋ฒ์ ๋ถํฐ ํ์ธํด๋ณด์.

์ด๋ ๊ฒ ์์ค์ฝ๋๊ฐ ์๋ค๊ณ ํ๋ฉด
{ "main": "main.js", "output": "test.blob" }
์ด๋ ๊ฒ ๋น๋๋ฅผ ์ํ json ์ค์ ํ์ผ์ด ์์ด์ผ ํ๋ค.
๊ทธ๋ฆฌ๊ณ ์ ์ฉ ํ๋๊ทธ๋ฅผ ์ค์ ์ฝ๋๋ฅผ blob ํ์ผ๋ก ๋ณํํ๋ค.
node --experimental-sea-config compile.json
์ ๋ ๊ฒ ์๊ธด blob ํ์ผ์ ๊ทธ ์์ฒด๋ก๋ ์ธ๋ชจ๊ฐ ์๋ค.
์ด๊ฑธ ์ด์ node ์คํํ์ผ์ ์ฐ๊ฒจ๋ฃ์ด์ผ ํ๋ค.
๊ธฐ๋ณธ์ผ๋ก ์ฐ๋ ์คํํ์ผ์ ๋ณ์กฐํ ์๋ ์์ผ๋, ๋ณต์ฌํด์ ๋ณต์ ๋ณธ์ ํ๋ ๋ง๋ค์ด๋๊ณ
cp $(which node) node-app

๋ค์ ๋ช ๋ น์ ์ฌ์ฉํด์ ์ฐ๊ฒจ๋ฃ๋๋ค.
npx postject node-app NODE_SEA_BLOB test.blob --sentinel-fuse NODE_SEA_FUSE_fce680ab2cc467b6e072b8b5df1996b2
๊ทธ๋ฌ๊ณ ๋์ ์คํํ์ผ์ธ node-app๋ฅผ ๊ทธ๋๋ก ์คํํ๋ฉด ๋๋ ๊ฒ์ด๋ค.
์ฐธ์กฐ
https://nodejs.org/api/single-executable-applications.html
https://nodejs.org/api/single-executable-applications.html#generating-single-executable-preparation-blobs