[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