๋ชจ๋(Module)
ํน์ ๊ธฐ๋ฅ์ ์บก์ํํ ์ฝ๋์ ๋ธ๋ก ๋๋ ํ์ผ. ์ฌ์ฌ์ฉ์ฑ๊ณผ ์ฝ๋์ ์กฐ์งํ๋ฅผ ๋๋๋ค.
1. ๊ธฐ๋ณธ ๋ด์ฅ๋ ๊ฒ
- Node.js์๋ ๋ค์ํ ๊ธฐ๋ณธ ๋ด์ฅ ๋ชจ๋์ด ํฌํจ๋์ด ์๋ค.
- setTimeout()
- fs, http, path ๋ฑ.
2. ์ธ๋ถ ๋ชจ๋
- Node.js ํจํค์ง ๊ด๋ฆฌ์์ธ NPM(Node Package Manager)์ ํตํด ์ค์นํ ์ ์๋ค.
- ์ค์น ํ ํ๋ก์ ํธ์์ ์ธ๋ถ ๋ชจ๋์ ์ฌ์ฉํ ์ ์๋ค.
Node.js์์ exports๋ ๋ชจ๋์ ์ ์ํ๊ณ ์ธ๋ถ๋ก ๋ด๋ณด๋ด๊ธฐ ์ํด ์ฌ์ฉ๋๋ค.
๋ค๋ฅธ ํ์ผ์ด๋ ๋ชจ๋์์ ์ ์๋ ๋ชจ๋์ require๋ก ๋ถ๋ฌ์ ์ฌ์ฉํ ์ ์๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ vs ํ๋ ์์ํฌ
- ๋ผ์ด๋ธ๋ฌ๋ฆฌ
- ํน์ ๊ธฐ๋ฅ์ ์ํํ๋ ๋๊ตฌ์ ์งํฉ. ๊ฐ๋ฐ์๊ฐ ํ์ํ ๋ ํธ์ถํด์ ์ฌ์ฉ.
- ์ ์ด๊ถ์ ๊ฐ๋ฐ์์๊ฒ ์๋ค! ํ์ํ ๊ธฐ๋ฅ์ ์ง์ ํธ์ถํ์ฌ ์ฌ์ฉํ๋ ํํ.
- ํ๋ ์์ํฌ
- ํน์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋ ์๋น์ค ๊ตฌ์กฐ๋ฅผ ์ ์. ๊ฐ๋ฐ์๊ฐ ๊ทธ ํ ์์์ ์ฝ๋๋ฅผ ์์ฑํ๋๋ก ๋๋๋ค.
- ์ ์ด๊ถ์ ํ๋ ์์ํฌ์ ์๋ค! (IoC) ๊ฐ๋ฐ์๋ ํ๋ ์์ํฌ์ ๊ท์น๊ณผ ๊ตฌ์กฐ์ ๋ง์ถฐ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ๋๋ค.
๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ ์ฌ๋ฌ ๋ชจ๋๋ก ๊ตฌ์ฑ๋ ์ ์์ผ๋ฉฐ, ๋ชจ๋์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๊ธฐ๋ฅ์ ์ ๊ณตํ๋ ๊ธฐ๋ณธ ๋จ์์ด๋ค.
ํ๋ ์์ํฌ๋ ์ฌ๋ฌ ๋ชจ๋๊ณผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ํฌํจํ์ฌ ์ ์ฒด ์ ํ๋ฆฌ์ผ์ด์ ์ ๊ตฌ์กฐ๋ฅผ ์ ๊ณตํ๋ค.
(๋ฆฌ์กํธ๊ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ์ง ํ๋ ์์ํฌ์ธ์ง๋ ์ค์ํ ๋ด์ฉ์ด๊ธฐ ๋๋ฌธ์ ์๋์ ๊ธ์์ ๋ฐ๋ก ๋ค๋ฃจ์๋ค!)
ํจํค์ง ๊ด๋ฆฌ์ NPM
npm์ node๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด ํ์ํ ํจํค์ง ๊ด๋ฆฌ์
npm install ๋ชจ๋๋ช
npm uninstall ๋ชจ๋๋ช
** npm i ๋ชจ๋๋ช - g : ๋ด ์ปดํจํฐ์ ์๋ ๋ชจ๋ ํ๋ก์ ํธ์ ํด๋น ๋ชจ๋์ ์ค์นํ๋ ๊ฒ // ๋น์ถ !
์ฝ๋ฐฑ ํจ์
npm i figlet ์ผ๋ก ์์กด์ฑ ์ค์น ํ.
require๋ก figlet ๋ณ์์๋ค, "figlet"์ด๋ผ๋ ๋ชจ๋์ ๊ฐ์ง๊ณ ์จ๋ค.
require - ๋ด์ฅ ๋ชจ๋, ์ธ๋ถ ๋ชจ๋์ ๊ฐ์ ธ์ฌ ๋ ์ฐ๋ ํจ์.
var figlet = require("figlet");
figlet("yesolz", function (err, data) {
if (err) {
console.log("Something went wrong...");
console.dir(err);
return;
}
console.log(data);
});
figlet ์ ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์๋ก ํจ์๋ฅผ ๋ฐ๋๋ค.
๊ตฌํ๋์ด ์๋ ํจ์๋ฅผ ์ ๋ฌํ๋ ๊ฒ ์๋๋ผ, ํจ์์ ์ด๋ฆ ์์ด ์ต๋ช ํจ์๋ฅผ ๋งค๊ฐ ๋ณ์๋ก ์ ๋ฌํ๊ณ ์๋ค.
- ์ต๋ช ์ ํจ์๋ฅผ ์ฐ๋ ์ด์ = ์ด ํจ์๋ฅผ ์ธ ์ผ์ด ๋ค๋ฅธ ๋ฐ๋ ์์ด์
- figlet ๋ง๋ ์ฌ๋์ด ๋งค๊ฐ๋ณ์๋ก ํจ์๋ฅผ ๋ฐ๊ธฐ๋ก ํ๊ธฐ ๋๋ฌธ
- ์ฒซ๋ฒ์งธ ๋งค๊ฐ๋ณ์ ๋ฌธ์์ด์ ๋ฐ์์, ์์คํค ์ํธ๋ฅผ ๋ง๋ ๋ค์์
- ๋๋ฒ์งธ ๋งค๊ฐ๋ณ์ ํจ์๋ฅผ ์คํ = ์ฝ๋ฐฑ
http ๋ชจ๋์ ์ฝ๋ฐฑ ํจ์
let http = require("http");
function onRequest(request, response) {
response.writeHead(200, { "Content-Type": "text/plain" });
response.write("Hello Node.js");
response.end();
}
http.createServer(onRequest).listen(8888);
http๋ ๋ณ๋์ ์ค์น ์์ด ์ฌ์ฉ ๊ฐ๋ฅ -> ๋ด์ฅ ๋ชจ๋
http.createServer(onRequest)
createServer ํจ์๋ฅผ ํธ์ถํ ๋, ์๋ฒ๊ฐ ์์ฒญ์ ๋ฐ์ ์ค๋น๋ฅผ ๋ง์น ํ์(HTTP ์๋ฒ ์์ฑ) ์ง์ ๋ ์ฝ๋ฐฑ ํจ์(onRequest)๋ฅผ ํธ์ถํ์ฌ ์์ฒญ์ ์ฒ๋ฆฌํ๋ค.
๋ณ์ ์ ์ธ ๋ฐฉ์ 3๊ฐ์ง
if (true) {
var num1 = 7;
const num2 = 3;
let num3 = 5;
}
console.log(num1);
console.log(num2); // num2 is not defined
console.log(num3); // num3 is not defined
const๊ณผ let์ ๋ธ๋ก ์ค์ฝํ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. (์ค๊ดํธ ์ค์ฝํ)
{}๋ฅผ ๊ธฐ์ค์ผ๋ก ์ ์ธ๋๋ฉด, ๊ทธ ๋ฐ์์๋ ์ฌ์ฉํ ์ ์๋ค.
ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด
์๋์ ๋ ์ฝ๋ ๋ผ์ธ์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ ๋์ผํ์ง๋ง, ๋ฌธ๋ฒ์ ์ฐจ์ด๊ฐ ์๋ค.
console.log(num1 + " X " + num2 + " = " + num1 * num2);
console.log(`${num1} X ${num2} = ${num1 * num2}`); // ํ
ํ๋ฆฟ ๋ฆฌํฐ๋ด (ES6)
์ฒซ๋ฒ์งธ ๋ฐฉ์์ ์๋ฐ์คํฌ๋ฆฝํธ ์ด๊ธฐ ๋ฒ์ ๋ถํฐ ์ฌ์ฉ๋ ๊ฒ์ด๋ค. ๋จ์ํ ๋ฌธ์์ด์ ์ฐ๊ฒฐํ๋ค. (concatenation)
๋๋ฒ์งธ ๋ฐฉ์์ ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ ๊ฒ์ด๋ค. ๋ฐฑํฑ์ ์ฌ์ฉํ์ฌ ๋ฌธ์์ด์ ๊ฐ์ธ๊ณ , ${} ๊ตฌ๋ฌธ์ ์ฌ์ฉํด ๋ฌธ์์ด ๋ด์์ ๋ณ์๋ฅผ ์ฝ์ ํ๊ฑฐ๋ ํํ์์ ํ๊ฐํ์ฌ ์ฝ์ ํ ์ ์๋ค. ES6์์ ๋์ ๋์๋ค.
package.json๊ณผ package-lock.json ์ฐจ์ด์
package.json : ํ๋ก์ ํธ์ ์์กด์ฑ์ ์ ์ํ๊ณ ๊ด๋ฆฌํ๋ ํ์ผ
package-lock.json : ์ค์ ๋ก ์ค์น๋ ์์กด์ฑ์ ์ ํํ ๋ฒ์ ์ ๊ธฐ๋กํ์ฌ ์ผ๊ด์ฑ์ ์ ์ง.
npm install <๋ชจ๋๋ช > ์ ์ฌ์ฉํ์ฌ ํ๋ก์ ํธ์ ์ธ๋ถ ๋ชจ๋์ ์ค์นํ๋ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํ๋ฉด,
์ด ๊ณผ์ ์์ package.json์ dependencies์ ์ค์นํ ๋ชจ๋์ด ์ถ๊ฐ๋๊ณ , package-lock.json์ ์ ํํ ๋ฒ์ ์ ๋ณด๊ฐ ๊ธฐ๋ก๋๋ค.
package-lock.json ํ์ผ์์ "resolved" ํ๋๋ NPM์ด ํน์ ํจํค์ง๋ฅผ ์ด๋์ ๋ค์ด๋ก๋ ํ๋์ง๋ฅผ ๋ํ๋ธ๋ค.
NPM์ ๋์ ์๋ฆฌ
NPM์ด package.json ํ์ผ์ ๋ช ์๋ ์์กด์ฑ์ ์ค์นํ ๋,
NPM์ ์ค์ ์ ์ฅ์์ธ npmjs.org(NPM ๋ ์ง์คํธ๋ฆฌ)์์ ํด๋น ๋ชจ๋์ ์ฐพ์ resolved ํ๋์ ๋ช ์๋ URL๋ก๋ถํฐ ํจํค์ง๋ฅผ ๋ค์ด๋ก๋ ํ๋ค.
์ด URL์ .tgz ํ์์ ์์ถํ์ผ(Tarball)์ด๋ค. NPM์ ์ด ํ์ผ์ ๋ค์ด๋ก๋ํ ํ, ์๋์ผ๋ก ์์ถ์ ํ๊ณ , ๋ชจ๋์ ํ๋ก์ ํธ์ node_modules ํด๋์ ์ ์ฅํ๋ค.
์ด ๊ณผ์ ์์ NPM์ package-lock.json ํ์ผ์ ์ ๋ฐ์ดํธํ์ฌ ๋ค์ด๋ก๋๋ ํจํค์ง์ ์ ํํ ๋ฒ์ ๊ณผ ๋ค์ด๋ก๋ ์์น๋ฅผ ๊ธฐ๋กํ๋ค.
ํจ๊ป ๋ณด๋ฉด ์ข์ ๊ธ