2020.3.13
javascript๊ฐ ์๋ฒ ์ฌ์ด๋์์๋ ์ฌ์ฉํ ์ ์๋ ์ธ์ด๋ผ๊ณ ํ์ฌ, ํ์คํ์ด๋ผ๋ ๋ถํผ ๊ฟ์ ์๊ณ node.js๋ ์ฐ๋ ๊ณต๋ถํด๋ณด์๋ค. ๊ฒฐ๋ก ์ ์ผ๋ก ... ๋ฐ๋ผํ ์๋ ์์ง๋ง ์ด์ง์ธ ๋์๊ฒ๋ ๋๋ฌด ์ด๋ ต๋ค ๐ฅบ ... ๊ทธ๋์ ์ง๊ธ๊น์ง ์๊ฒ๋ ๊ฐ๋ ๋ง ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค. ์๋ ๋ด์ฉ์ ์ฝ๋์นด๋ฐ๋ฏธ, ์ํ์ฝ๋ฉ ๋ฑ ๊ฐ์๋ฅผ ๋ฐํ์ผ๋ก ํ๋ค.
2020.7.1
4๊ฐ์ ์ ์ ๋ญฃ๋ ๋ชจ๋ฅด๊ณ ์ ๋ฆฌํ node๊ฐ๋
๋ค์ ๋ค์ ๋ณด๋๊น ๋ญ ๋ง์ธ์ง ์ ๊ฒ ๊ฐ์์ ๋๋ฌด ์ ๊ธฐํ๋ค. ๊ทธ ๋ ์ ๋ฆฌํด๋์ ๋ ์์ ์นญ์ฐฌํด
node.js๋ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์์ด๋ค. ๋ฐํ์์ ํ๋ก๊ทธ๋จ์ ์คํํ ์ ์๋ ํ๊ฒฝ์ ๋ปํ๊ณ , ๋ค์ ๋งํ๋ฉด ๋ ธ๋๋ ์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋จ์ด ์คํ๋ ์ ์๋๋ก ํด์ฃผ๋ ํ๊ฒฝ์ด๋ค. ๋ธ๋ผ์ฐ์ ์ ์ข ์๋์ด ์๋ Javascript๊ฐ ๋ ธ๋๋ฅผ ํตํด ์น์๋ฒ ๊ธฐ๋ฅ ์คํํ ์ ์๋ ์ธ์ด๊ฐ ๋ ๊ฒ์ด๋ค.
์ธ์ด๋ฅผ ๋ฐฐ์ฐ๊ธฐ ์ ์ ๋ช ๊ฐ์ง ๊ฐ๋ ๋ง ๊ฐ๋จํ๊ฒ ์ ๋ฆฌํด๋ณด๊ณ ์ ํ๋ค.
๋ชจ๋์ ๊ฐ๋จํ ๋งํด ํ์ผ์ ์์นํ ์ฝ๋์ ์งํฉ์ด๋ค. ํ๋ก๊ทธ๋จ์ ๋ด์ฉ์ ๋ฐ๋ผ ์ฝ๋๋ฅผ ์ฌ๋ฌ ๊ฐ์ ์งํฉ์ผ๋ก ๋ถ๋ฆฌํ๊ณ , ํ์๋ก ํ ๋ ๋ถ๋ฌ ์ฌ์ฉํ๊ธฐ ์ํด ์ฐ์ธ๋ค.
ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๋ ๋ชจ๋ ์ฝ๋๋ฅผ ํ๋์ ํ์ผ์ ๋ฃ๋๋ค๊ณ ์๊ฐํด๋ณด์. ์์ ํ ์ผ์ด ์๊ธฐ๊ฑฐ๋, ํน์ ๋ถ๋ถ์ ์ฐพ์ ๋ ๋งค์ฐ ๊ท์ฐฎ์ ๊ฒ์ด๋ค. ํ๋ก๊ทธ๋จ์ ๊ด๋ฆฌ ๊ฐ๋ฅํ ๋ฉ์ด๋ฆฌ๋ก ๋๋๊ธฐ ๋๋ฌธ์ ๋ชจ๋์ ์ค์ํ๋ค.
๊ธฐ๋ณธ์ ์ผ๋ก ์ค์น๋์ด ์๋ ๋ชจ๋๋ก, Node.js์ ์์ค ์์์ ์ ์๋๊ณ lib.folder์ ์์นํ๋ค. ์๋์ ๊ฐ์ด ์๊ดํธ ์ฌ์ด์ string์ ๋ฃ์ด ์ฌ์ฉํ๋ค.
let events = require('http');
*** Require()ํจ์๋ฅผ ์ฐ๋๋ผ๋ ํด๋น ๋ชจ๋ ์์ ๋ณ์๋ฅผ ๋ฐ๋ก ์ฌ์ฉํ๋ ๊ฒ์ ๋ถ๊ฐํ๋ค. exports์ key, value chain์ ๋ค์ด๊ฐ์ผ ๊ฐ์ด ์ ์ฅ๋์ด Return์ด ๊ฐ๋ฅํ๋ค.
core module ์ค ํ๋๋ก, http ์น์๋ฒ๋ฅผ ์์ฑํ๋ ๊ฒ๊ณผ ๊ด๋ จ๋ ๋ชจ๋ ๊ธฐ๋ฅ์ ํ๋ค. ์น์๋ฒ ๋ชจ๋๋ก๋ express(๋ผ์ฐํ , ํ์ฑ, ๋ก๊ทธ ๋ฑ)๋ผ๊ณ ๋ ๋ง์ ๊ธฐ๋ฅ์ ํฌํจํ๋ ๊ฐ๋ ฅํ ๋ชจ๋์ด ์๋ค.
var http = require('http');
http.createserver(function (req, res) {
res.writeHead(200, {'content-Type': 'text/html'});
res.write('hello world!') // ํด๋ผ์ด์ธํธ๊ฐ ์ ์ํ์ ๋์ ๋ํ ๋ฐ์
res.end(); // ๋ฐ์ ์ข
๋ฃ
}).listen(8080); // ์๋ฒ๋ฅผ ์คํํ๋ค
url ๋ชจ๋์ ์น ์ฃผ์๋ฅผ ์ฝ์ ์ ์๋๋ก ์ชผ๊ฐ์ฃผ๋ ๊ธฐ๋ฅ์ ํ๋ค.
ํ์ฑ(parsing): ์ด๋ค ๋ฐ์ดํฐ๋ฅผ ๋ค๋ฅธ ๋ชจ์์ผ๋ก ๊ฐ๊ณตํ๋ ๊ฒ์ ๋งํ๋ค.
w3school์ ์์๐ฝ
var url = require('url');
var adr = 'http://localhost:8080/default.htm?year=2017&month=february';
var q = url.parse(adr, true);
console.log(q.host); //returns 'localhost:8080'
console.log(q.pathname); //returns '/default.htm'
console.log(q.search); //returns '?year=2017&month=february'
var qdata = q.query; //returns an object: { year: 2017, month: 'february' }
console.log(qdata.month); //returns 'february'
url ๋ชจ๋์ ์ฌ์ฉ๋๋ url์ ๊ตฌ์ฑ ์์๋ฅผ ์ดํดํ๊ธฐ ์ํด, ์ด๊ณ ์๋์ ์ํ์ฝ๋ฉ ๊ฐ์๋ฅผ ์ฐธ๊ณ ํ๋ค. ์๋ ์ด๋ฏธ์ง์ ์ํ์ฝ๋ฉ ์น ์๋ฒ์ ๋ธ๋ผ์ฐ์ ์ ์ ๋ณด ์ฒ๋ฆฌ ๋ฐฉ๋ฒ ๊ฐ์ ํ๋ฉด์ด๋ค.
- protocol: ์ ์ผ ์์๋ ์์์ ์ ๊ทผํ ๋ฐฉ๋ฒ์ ์ ์ํด๋ ํ๋กํ ์ฝ์ ์ ๋๋ค. http๋ ์น๋ธ๋ผ์ฐ์ ์ ์น์๋ฒ๊ฐ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํด ๋ง๋ ํต์ ๊ท์น ์ค ํ๋์ด๋ค.
- host(domain): ์ธํฐ๋ท์ ์ ์ํด์๋ ์ปดํจํฐ๋ฅผ ๊ฐ๋ฆฌํค๋ ์ฃผ์์ด๋ค.
- port: ํ ์ปดํจํฐ ์์ ์ฌ๋ฌ ์๋ฒ๊ฐ ์๊ธฐ ๋๋ฌธ์, ์๋ฒ ๋ด ์ด๋ค ํฌํธ์ธ์ง๋ฅผ ๋ํ๋ด๋ ๊ฒ (์น์๋ฒ๋ ๊ธฐ๋ณธ๊ฐ์ด 80์ด๋ค)
- path: ์ปดํจํฐ ์์ ๊ฒฝ๋ก๋ฅผ ๋ํ๋ด๋ ๊ฒ์ผ๋ก /๋ก ๊ตฌ๋ถ๋๋ค. ์ด๋ค ๋๋ ํ ๋ฆฌ์ ์ด๋ค ํ์ผ์ธ์ง ์ฐพ๊ธฐ ์ํด ์กด์ฌํ๋ ๊ฒ์ด๋ค.
- query string: database์์ ํน์ ํ ์ ๋ณด๋ฅผ ์ฐพ๊ธฐ ์ํด ์ปดํจํฐ๋ ์น๋ธ๋ผ์ฐ์ ์์ ์ ๋ ฅ๋๋ ๊ฐ๋ค. ๋ฌผ์ํ๋ก ์์ํ๊ณ , key๋ผ๋ฆฌ๋ &๋ก ๊ตฌ๋ถ, key์ value๋ =๋ก ๊ตฌ๋ถํ๋ค. ex. ?id=html&page=12
file system์ ์ฝ์๋ก, ์๋ฒ์ ์กด์ฌํ๋ ํ์ผ์ ์ฐพ์ ํด๋ผ์ด์ธํธ์ ์ ๊ณตํ๋ ๊ธฐ๋ฅ์ ํ๋ค.
fs.readFile('/etc/passwd', (err, data) => {
if (err) throw err;
console.log(data);
});
์ ํจ์์ ์ธ์์ ๊ฒฝ์ฐ ์ฒซ ๋ฒ์งธ err๋ ์๋ฌ๊ฐ ์์ ๊ฒฝ์ฐ ์๋ฌ๋ฅผ ์ฃผ๋ผ๋ ๋ป, ๋ ๋ฒ์งธ ์ธ์๋ ํ์ผ์ ๋ด์ฉ์ ์ธ์๋ก์ ๊ณต๊ธํ๋ผ๋ ๋ป์ด๋ค.
ํ๋ก๊ทธ๋จ์ ๋ง๋ค ๋, ์ ์ ๊ฐ ์ธ์ ํด๋ฆญํ ์ง ๋ชจ๋ฅธ๋ค๋ ์ ์ ๋ก ํ๋ก๊ทธ๋๋ฐ์ ํ๊ธฐ ๋๋ฌธ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ด๋ฒคํธ ๋๋ฆฌ๋ธ ๊ตฌ์กฐ๋ฅผ ๊ฐ์ง๊ณ ์๋ค. (์๋ฅผ ๋ค์ด ํด๋ฆญ ์ด๋ฒคํธ๋ฅผ ๋ง๋ค ๋, ํด๋ฆญ ์์ ์ ์์ธกํ ์ ์์ผ๋ฏ๋ก)
// Require in the 'events' core module
let events = require('events');
// Create an instance of the EventEmitter class
let myEmitter = new events.EventEmitter();
๊ธฐ๋ณธ ์ ์ฅ๋ ๋ชจ๋์ด ์๋๋ผ ๋ด๊ฐ ๋ง๋ค์ด ์ฌ์ฉํ ์ ์๋ ๊ฒ์ผ๋ก, ๋ชจ๋์ ์๋์ ๊ฒฝ๋ก๋ฅผ ๋ฃ์ด์ ๋ถ๋ฌ์จ๋ค.
// app.js
let Dog = require('./dog.js');
const tadpole = new Dog('Tadpole');
console.log(tadpole.praise());
์๋ฐ์คํฌ๋ฆฝํธ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด๋ฅผ ์ํ ํจํค์ง ๊ด๋ฆฌ์ & node.js์ ๊ธฐ๋ณธ ํจํค์ง ๊ด๋ฆฌ์์ด๋ค. ์ํํธ์จ์ด๋ฅผ ์์ฑํ๊ณ ์ค์น, ์ ๋ฐ์ดํธ ๋ฐ ์ญ์ ๋ฅผ ๊ด๋ฆฌํด์ฃผ๋ ํ๋ก๊ทธ๋จ์ด๋ค.
node.js์ ํ๋ก์ธ์ค ๊ด๋ฆฌ์. ์๋ ํ์ผ์ ์์ ํ๋ฉด ํฐ๋ฏธ๋์์ ctr+c ๋ฒํผ์ ๋๋ฌ ๊ป๋ค ์ผ์ค์ผ ํ๋๋ฐ, pm2๋ฅผ ์ฌ์ฉํ๋ฉด ์๊ฑฐ๋ฅผ ์๋์ผ๋ก ํด์ฃผ๊ธฐ ๋๋ฌธ์ ๋ถํ์ํ ์์ ์ด ๋ค์ง ์๋๋ค.
ํ์ง๋ง ์ผ๋ ์ํ์์ node filename.js ๋ช
๋ น์ด๋ก ์คํ์ ํ๊ฒ ๋๋ฉด ์ค๋ฅ๊ฐ ๋ฐ ์ ์์ผ๋ฏ๋ก(ํฌํธ๊ฐ ์ฌ์ฉ์ค์ด๋ผ๋ ์๋ฌ), ์๋ ์๋์ ์ํ๋ก ๋์์ค๋ ค๋ฉด pm2 stop filename.js
๋ฅผ ์
๋ ฅํด์ฃผ์ด์ผ ํ๋ค.