Study_Develop/ํฌ์Šค์ฝ” X ์ฝ”๋”ฉ์˜จ ๋ถ€ํŠธ์บ ํ”„

[ํฌ์Šค์ฝ” X ์ฝ”๋”ฉ์˜จ ํ’€์Šคํƒ ์›น๊ฐœ๋ฐœ์ž ๋ถ€ํŠธ์บ ํ”„ 7๊ธฐ] 4์ฃผ์ฐจ ํšŒ๊ณ ๋ก ch. 1 Node.js, ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ, ๋ถ„ํ•ด ํ• ๋‹น, ...์—ฐ์‚ฐ์ž, rest

hiijihyun 2023. 5. 21. 21:27
๋ฐ˜์‘ํ˜•

[ํฌ์Šค์ฝ” X ์ฝ”๋”ฉ์˜จ ํ’€์Šคํƒ ์›น๊ฐœ๋ฐœ์ž ๋ถ€ํŠธ์บ ํ”„ 7๊ธฐ]
4์ฃผ์ฐจ ํšŒ๊ณ ๋ก

 

์„œ์šธ ๊ธฐ์ˆ™์‚ฌ์— ์ž…์ฃผํ•œ ๋‚ ์ด ์—Š๊ทธ์ œ ๊ฐ™์€๋ฐ

๋ฒ„ํ‹ฐ๊ณ  ๋ฒ„ํ‹ฐ๋‹ค๋ณด๋‹ˆ

๋ฒŒ์จ 4์ฃผ์งธ ํšŒ๊ณ ๋ก์ž…๋‹ˆ๋‹ค!!

 

์•„์ง 8์ฃผ๊ฐ€ ๋” ๋‚จ์•˜์ง€๋งŒ..

์ธ์ƒ์€ ~ ๋ฒ„ํ‹ฐ๋Š” ๊ฑฐ์•ผ~~

8์ฃผ ๋’ค์— ์ด ๊ธ€์„ ๋‹ค์‹œ๋ณธ๋‹ค๋ฉด

์ฐธ์œผ๋กœ ๋ฟŒ๋“ฏ ํ•˜๊ฒ ์ง€ ? 

์•„์ž์ž ์ง€ํ˜„์•„ ~

 

 

๊ทธ๋ ‡๋‹ค๋ฉด ๋ณธ๊ฒฉ์ ์ธ

์ˆ˜์—… ํšŒ๊ณ ๋ก!

์ด๋ฒˆ ์ฃผ์— Node.js ๋ฅผ ๋ณธ๊ฒฉ์ ์œผ๋กœ ์‹œ์ž‘ํ–ˆ๋‹ค

์‹œ์ž‘๋ถ€ํ„ฐ ๋จธ๋ฆฌ๊ฐ€ ์‚ด์ง ์•„ํ”ˆ~

ํœด..

๋˜ ํ•œ๋ฒˆ ๋ฒ„ํ…จ๋ณด์ž~~

 

 

Node.js๋ž€?

ํŠน์ง• 1. javascript์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

 

ํŠน์ง• 2. Single Thread

 

ํ”„๋กœ์„ธ์Šค 

- ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ

- ์šด์˜์ฒด์ œ์—์„œ ํ• ๋‹นํ•˜๋Š” ์ž‘์—… ๋‹จ์œ„

 

Thread(์Šค๋ ˆ๋“œ)

- ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์‹คํ–‰๋˜๋Š” ํ๋ฆ„์˜ ๋‹จ์œ„

- ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์—๋Š” n๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์กด์žฌํ•˜๋ฉฐ ๋™์‹œ์— ์ž‘๋™ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

-> ์˜ˆ์™ธ๋ฅผ ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜๋ฉด 

ํ”„๋กœ๊ทธ๋žจ์ด ์•„์˜ˆ ์ค‘๋‹จ ๋จ

 

ํŠน์ง•3. Non - Blocking I/O

 

๋™๊ธฐ (Synchronous)

- ๋ฐ์ดํ„ฐ ์š”์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ€ ํ•œ์ž๋ฆฌ์—์„œ ๋™์‹œ์— ์ผ์–ด๋‚˜๋Š” ๊ฒƒ
- ํ•œ ์š”์ฒญ์— ์„œ๋ฒ„์˜ ์‘๋‹ต์ด ์ด๋ฃจ์–ด์งˆ ๋–„๊นŒ์ง€ ๊ณ„์† ๋Œ€๊ธฐ

 

๋น„๋™๊ธฐ(Asynchronous)

 ๋™์‹œ์— ์ผ์–ด๋‚˜์ง€ ์•Š๋Š” ๊ฒƒ
- ์š”์ฒญํ•œ ํ›„ ์‘๋‹ต์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค๋ฅธ ํ™œ๋™์„ ํ•จ

 

I/O์ž‘์—… : ํŒŒ์ผ ์‹œ์Šคํ…œ ์ ‘๊ทผ (์ฝ๊ธฐ, ์“ฐ๊ธฐ, ๋งŒ๋“ค๊ธฐ ๋“ฑ),

๋„คํŠธ์›Œํฌ ์š”์ฒญ

 

Node.js ๋Š” ํ‘œ์ค€ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ๋ชจ๋“  i/o๋ฉ”์„œ๋“œ๋ฅผ 

๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ์ œ๊ณตํ•œ๋‹ค.

 

 

ํŠน์ง• 4. Event - driven

- Event - Driven :์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ๋ฏธ๋ฆฌ ์ง€์ •ํ•ด๋‘” ์ž‘์—…์„ ์ˆ˜ํ–‰

ex. ํด๋ฆญ, ๋„คํŠธ์›Œํฌ ์š”์ฒญ, ํƒ€์ด๋จธ ๋“ฑ

 

- ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ

: ์ด๋ฒคํŠธ ๋“ฑ๋ก ํ•จ์ˆ˜

 

-์ฝœ๋ฐฑ ํ•จ์ˆ˜

: ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜

 

 

๋ชจ๋“ˆ(Module)

 

- ํŠน์ •ํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ํ•จ์ˆ˜๋‚˜ ๋ณ€์ˆ˜๋“ค์˜ ์ง‘ํ•ฉ

 - ์žฌ์‚ฌ์šฉ ๊ฐ€๋Šฅํ•œ ์ฝ”๋“œ ์กฐ๊ฐ

 

์žฅ์  :

์ฝ”๋“œ ์ถ”์ƒํ™”, ์ฝ”๋“œ ์บก์Аํ™”,

์ฝ”๋“œ ์žฌ์‚ฌ์šฉ, ์˜์กด์„ฑ ๊ด€๋ฆฌ

 

 

๋ชจ๋“ˆ ๋งŒ๋“ค๊ธฐ 

1. ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ ํŒŒ์ผ์— ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“ค๊ธฐ

const a="a๋ณ€์ˆ˜";
const b="b๋ณ€์ˆ˜";

module.exports={
  a,
  b
 };

 

2. ํ•˜๋‚˜์˜ ๋ชจ๋“ˆ ํŒŒ์ผ์— ํ•˜๋‚˜ ๋งŒ๋“ค๊ธฐ

function connect() {
   return a+b;
  }
  
  module.exports=connect;

 

 

 

 

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ

 

 

setTimeout()

setTimeout(code, delay);

// delay๋™์•ˆ ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€ code ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰

 

 

์ฝœ๋ฐฑ ์ง€์˜ฅ ์ •๋ฆฌํ•˜๊ธฐ

 

Promise

- ๋น„๋™๊ธฐ ํ•จ์ˆ˜๋ฅผ ๋™๊ธฐ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„ ๊ฐ์ฒด

- ์„ฑ๊ณต๊ณผ ์‹คํŒจ๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ๋ฐ˜ํ™˜

- ๋น„๋™๊ธฐ ์ž‘์—…์ด ์™„๋ฃŒ๋œ ์ดํ›„์— 

๋‹ค์Œ ์ž‘์—…์„ ์—ฐ๊ฒฐ์‹œ์ผœ ์ง„ํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ์„ ๊ฐ€์ง

 

 

promise ์‚ฌ์šฉ๋ฒ•

 

function promise1(flag){
            return new Promise(function(resolve, reject){
                if(flag){
                    resolve( `promise์ƒํƒœ๋Š” fullfilled! tnen์œผ๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค \n ์ด๋•Œ์˜ flag๊ฐ€ ${flag}์ž…๋‹ˆ๋‹ค. `)
                }else{
                    reject(`promise์ƒํƒœ๋Š” rejected! catch๋กœ ์—ฐ๊ฒฐ๋ฉ๋‹ˆ๋‹ค.\n ์ด๋•Œ์˜ flag๋Š” ${flag}์ž…๋‹ˆ๋‹ค.`)
                }
            })
        }

 

- resolve(value) : ์ž‘์—…์ด ์„ฑ๊ณตํ•œ ๊ฒฝ์šฐ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ value์™€ ํ•จ๊ป˜ ํ˜ธ์ถœ

 

- reject(error) : ์—๋Ÿฌ(rejected) ๋ฐœ์ƒ ์‹œ ์—๋Ÿฌ ๊ฐ์ฒด๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” error์™€ ํ•จ๊ป˜ ํ˜ธ์ถœ

 

 

- resolve( ) : then ๋ฉ”์„œ๋“œ ์‹คํ–‰

 

-reject( ) : catch ๋ฉ”์„œ๋“œ ์‹คํ–‰

 

 function goMart(){
            console.log('๋งˆํŠธ์— ๊ฐ€์„œ ์–ด๋–ค ์Œ๋ฃŒ๋ฅผ ์‚ด์ง€ ๊ณ ๋ฏผํ•œ๋‹ค.');
        }
        function pickDrink(){
            return new Promise(function(resolve, reject){
                setTimeout(function(){
                    console.log('๊ณ ๋ฏผ ๋!!');
                    product ='์ œ๋กœ ์ฝœ๋ผ';
                    price = 2000;
                    resolve();
                }, 3000);
            })
        }
        let product;
        let price;
        goMart();
        pickDrink().then(function (){
            console.log(`์ƒํ’ˆ๋ช… : ${product}, ๊ฐ€๊ฒฉ: ${price}`);
        });

 

Promise ์ฒด์ด๋‹ ์‚ฌ์šฉ ์•ˆํ•œ ๊ฒฝ์šฐ

function add(n1, n2, cb){
            setTimeout(function(){
                let result = n1 + n2;
                cb(result);
            }, 1000);
        }
        function mul(n, cb){
            setTimeout(function(){
                let result = n * 2;
                cb(result);
            }, 700);
        }
        function sub(n, cb){
            setTimeout(function(){
                let result = n - 1;
                cb(result);
            }, 500);
        }

 

 add(4, 3, function(x){
            console.log('1: ', x);
            mul(x, function(y){
                console.log('2: ', y);
                sub(y, function(z){
                    console.log('2: ', z);
                });
            });
        });

-> ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์‚ฌ์šฉ ์‹œ, ์ฝœ๋ฐฑ ์ง€์˜ฅ์ด ์ƒ๊น€

 

 

Promise ์ฒด์ด๋‹ ์‚ฌ์šฉํ•œ ๊ฒฝ์šฐ

 

function add(n1, n2){
            return new Promise(function(resolve, reject){
                setTimeout(function(){
                    let result = n1+ n2;
                    resolve(result);
                }, 1000);
            });
        }
        function mul(n){
            return new Promise(function(resolve, reject){
                setTimeout(function(){
                    let result = n * 2;
                    resolve(result);
                }, 700);
            });
        }
        function sub(n){
            return new Promise(function(resolve, reject){
                setTimeout(function(){
                    let result = n - 1;
                    // resolve(result);
                    reject(new Error('์˜๋„์ ์œผ๋กœ ์—๋Ÿฌ๋ฅผ ์ผ์œผ์ผœ ๋ดค์Œ!'));
                }, 500);
            });
        }
add(4, 3)
         .then(function(result){
            console.log('1: ', result);
            return mul(result);
         })
         .then(function(result){
            console.log('2: ', result);
            return sub(result);
         })
         .then(function(result){
            console.log('3: ', result);
         })
         .catch(function(err){
            console.log('์‹คํŒจ!');
            console.log(err);
         });

 

Promise ์ฒด์ด๋‹ ์‚ฌ์šฉ ์‹œ

์žฅ์  1. 

then ๋ฉ”์„œ๋“œ ์—ฐ์† ์‚ฌ์šฉ -> ์ˆœ์ฐจ์ ์ธ ์ž‘์—…์ด ๊ฐ€๋Šฅํ•˜๋‹ค

์ฝœ๋ฐฑ ์ง€์˜ฅ์—์„œ ํƒˆ์ถœ ๊ฐ€๋Šฅํ•˜๋‹ค.

 

์žฅ์ 2.

 

์˜ˆ์™ธ์ฒ˜๋ฆฌ ๊ฐ„ํŽธ

๋งˆ์ง€๋ง‰ catch ๊ตฌ๋ฌธ์—์„œ ํ•œ ๋ฒˆ์— ์˜ˆ์™ธ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅํ•˜๋‹ค

 

 

Promise -> async / await

 

ํ”„๋กœ๋ฏธ์Šค ๊ธฐ๋ฐ˜ ์ฝ”๋“œ๋ฅผ ์ข€ ๋” ์“ฐ๊ธฐ ์‰ฝ๊ณ  ์ฝ๊ธฐ ์‰ฝ๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด ๋“ฑ์žฅ

๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ํŒจํ„ด ์ค‘ ๊ฐ€์žฅ ์ตœ๊ทผ์— ๋‚˜์˜จ ๋ฌธ๋ฒ•

 

 

 

๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด

 ์ˆœ์„œ๊ฐ€ ์ค‘์š”ํ•˜๋‹ค!

//๋ฐฐ์—ด ๊ตฌ์กฐ ๋ถ„ํ•ด
//ํŠน์ง• : ๊ตฌ์กฐ ๋ถ„ํ•ด ๋‹น์‹œ ์ˆœ์„œ๊ฐ€ ์ค‘์š” !
const lists = ["apple", "grape"];
console.log(lists[0]);
[item1, item2, item3 = "peach"] = lists;
console.log(item1, item2, item3);

function test() {
  return ["one", "two", "three"];
}

const [one, two, three, four] = ["one", "two", "three"];
console.log(one, two, three, four);
//swap
let a = 10;
let b = 20;
console.log(a, b);
[a, b] = [b, a];
console.log(a, b);

๊ฒฐ๊ณผ>

 

 

๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด

-> ํ‚ค ๊ฐ’์ด ์ค‘์š”ํ•˜๋‹ค!

// ๊ฐ์ฒด ๊ตฌ์กฐ ๋ถ„ํ•ด
// ํŠน์ง• : ํ‚ค ๊ฐ’์ด ์ค‘์š”ํ•˜๋‹ค!
const obj = {
  key1: "one",
  key2: "two",
};
console.log(obj.key1);
console.log(obj["key1"]);
const { key1: newKey1, key2, key3 = "three" } = obj;
obj.key3 = "three";
console.log(obj);

const { key2: newKey2, key1, obj3 = "three" } = obj;
console.log(newKey2, key1, obj3);

 

๊ฒฐ๊ณผ>

 

 

... ์—ฐ์‚ฐ์ž

...spread ๋ฌธ๋ฒ•์ด๋ž€?

 

 

const a = [1, 2, 3];
        const b = [4, 5];
        const spread = [...a, ...b];
        console.log(spread);

        const c = [..."Hello"];
        console.log(c);

๊ฒฐ๊ณผ>

 

Rest ํŒŒ๋ผ๋ฏธํ„ฐ

RestํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋งค๊ฐœ๋ณ€์ˆ˜ ์ด๋ฆ„ ์•ž์— ์„ธ๊ฐœ์˜ ์ (...) ์„ ๋ถ™์—ฌ์„œ

์ •์˜ํ•œ ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

RestํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ํ•จ์ˆ˜์— ์ „๋‹ฌ ๋œ ์ธ์ˆ˜๋“ค์˜ ๋ชฉ๋ก์„

๋ฐฐ์—ด๋กœ ์ „๋‹ฌ ๋ฐ›๋Š”๋‹ค.

 

 const values = [10, 20, 30];
        function get(a, ...rest) {
            console.log(rest); //[20, 30]
        }
        get(...values);

 

Rest ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ์ด๋ฆ„ ๊ทธ๋Œ€๋กœ 

๋จผ์ € ์„ ์–ธ๋œ ํŒŒ๋ผ๋ฏธํ„ฐ์— ํ• ๋‹น ๋œ ์ธ์ˆ˜๋ฅผ ์ œ์™ธํ•œ 

๋‚˜๋จธ์ง€ ์ธ์ˆ˜๋“ค์ด ๋ชจ๋‘ ๋ฐฐ์—ด๋ฐ ๋‹ด๊ฒจ ํ• ๋‹น๋œ๋‹ค.

 

๋”ฐ๋ผ์„œ Rest ํŒŒ๋ผ๋ฏธํ„ฐ๋Š” ๋ฐ˜๋“œ์‹œ ๋งˆ์ง€๋ง‰ ํŒŒ๋ผ๋ฏธํ„ฐ ์ด์–ด์•ผ ํ•œ๋‹ค.