[MON] 2021-12-27 TIL

MINBOKยท2021๋…„ 12์›” 27์ผ
0

๋ฉ‹์Ÿ์ด์‚ฌ์ž์ฒ˜๋Ÿผ

๋ชฉ๋ก ๋ณด๊ธฐ
17/19
post-thumbnail

12์›” 25์ผ ์•„์นจ์— ์„œ์šธ ๊ธฐ์ˆ™์‚ฌ์— ์ž…์‚ฌํ–ˆ๋‹ค.
25-26 ์ดํ‹€ ๋™์•ˆ ์•„๋น ๋ž‘ ํ™๋Œ€ ์Šฌ๋กœ์šฐํƒ€์ฝ”์—์„œ ํ”Œ๋ž˜ํ„ฐ๋„ ๋จน๊ณ 
DDP์—์„œ ์‚ด๋ฐ”๋„๋ฅด ๋‹ฌ๋ฆฌ์ „๋„ ๋ดค๋‹ค.
์‹ ๋‹น๋™ ๋งˆ๋ณต๋ฆผ ๋ง‰๋‚ด์•„๋“ค์ง‘์—์„œ ๋–ก๋ณถ์ด๋„ ๋จน์—ˆ๋‹ค.
์•„๋น ๊ฐ€ ์ง‘์œผ๋กœ ๋Œ์•„๊ฐ„์ง€ ํ•˜๋ฃจ ๋ฐ–์— ์•ˆ๋๋Š”๋ฐ ๋ฒŒ์จ ๋ณด๊ณ ์‹ถ๋‹ค.
์ง‘์— ๊ฐ€๊ณ ์‹ถ๋‹ค. ์—„๋งˆ ์•„๋น  ๋ณด๊ณ ์‹ถ๋‹ค.

Node.js๋Š” javascript ๋Ÿฐํƒ€์ž„ ์ž…๋‹ˆ๋‹ค.
Node.js๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜, ๋…ผ ๋ธ”๋กœํ‚น I/O๋ชจ๋ธ์„ ์‚ฌ์šฉํ•ด ๊ฐ€๋ณ๊ณ  ํšจ์œจ์ ์ž…๋‹ˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„?

๋Ÿฐํƒ€์ž„: ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๊ฐ€ ๊ตฌ๋™๋˜๋Š” ๋ฐฉ์‹
Node.js์˜ ๋“ฑ์žฅ์œผ๋กœ js์˜ ๊ตฌ๋™ ๋ฒ”์œ„๊ฐ€ ๋ธŒ๋ผ์šฐ์ €์—์„œ ์„œ๋ฒ„, ๋จธ์‹ ๋Ÿฌ๋‹, ๋ฐ์Šคํฌํƒ‘ ์•ฑ๋“ฑ๊นŒ์ง€ ํ™•์žฅ๋˜์—ˆ๋‹ค.

=> Node.js๋Š” js๋ฅผ ์ด์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋ถ„์•ผ๋ฅผ ๋„“ํ˜”๋‹ค.

์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜

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

  1. ์‹คํ–‰ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœ์Šคํƒ์— ์Œ“๊ธฐ
  2. ๋ฐฑ๊ทธ๋ผ์šด๋“œ ํ•„์š”์ž‘์—…์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ๋กœ ์ด๋™
  3. ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ํƒœํฌ์Šค ํ๋กœ ์ด๋™
  4. ํ˜ธ์ถœ์Šคํƒ๋“ค์ด ๋‹ค ์™„๋ฃŒ๋˜๋ฉด ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ํ…Œ์Šคํ ์ž‘์—…์„ ํ˜ธ์ถœ์Šคํƒ์œผ๋กœ ์ด๋™

๋…ผ ๋ธ”๋กœํ‚น I/O๋ชจ๋ธ

: ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ณ , ์ฒ˜๋ฆฌํ•˜๋Š” ๋™์•ˆ์—๋„ ํด๋ผ์ด์–ธํŠธ๋Š” ์š”์ฒญ์„ ๋ณด๋‚ผ ์ˆ˜ ์žˆ๋‹ค.
์„œ๋ฒ„์—์„œ ์ด์ „์˜ ์š”์ฒญ์ด ๋๋‚˜๋Š” ์ฆ‰์‹œ ์‘๋‹ตํ•œ๋‹ค.
๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ์‘๋‹ต๊ณผ ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด ์žฅ์ 

  1. ์ด์ „ ์ž‘์—…์ด ์™„๋ฃŒ๋  ๋•Œ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€์•Š๊ณ , ๋‹ค์Œ ์ž‘์—…๋“ค์„ ์ˆ˜ํ–‰
  2. ์˜ค๋ž˜๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์€ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์—์„œ ์ฒ˜๋ฆฌ

<=> ๋ธ”๋กœํ‚น I/O๋ชจ๋ธ

์„œ๋ฒ„๊ฐ€ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ์š”์ฒญํ•œ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ๋™์•ˆ ํด๋ผ์ด์–ธํŠธ๋Š” ๋Œ€๊ธฐ, ์ž‘์—… ์ˆ˜ํ–‰ ๋„์ค‘ ํด๋ผ์ด์–ธํŠธ๊ฐ€ ๋˜ ๋‹ค๋ฅธ ์š”์ฒญ์„ ๋ณด๋‚ด๋„ ์„œ๋ฒ„๋Š” ์ด๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์—†์Œ

์Šค๋ ˆ๋“œ

: ์ž‘์—…์„ ์‹คํ–‰ํ•˜๋Š” ๋‹จ์œ„, ๋ชจ๋“  ์š”์ฒญ๋“ค์„ ์‹คํ–‰ํ•˜๋Š” ๋‹จ์œ„

์‹ฑ๊ธ€์Šค๋ ˆ๋“œ

: ์ฃผ์–ด์ง„ ์ž‘์—…์„ ํ•œ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹
๋ธŒ๋ผ์šฐ์ €์—์„œ ์Šค๋ ˆ๋“œ์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ณ  ์Šค๋ ˆ๋“œ๋Š” ๋ธŒ๋ผ์šฐ์ €์— ์‘๋‹ตํ•จ, ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค์ˆ˜์˜ ์š”์ฒญ์— ์‘๋‹ต

  1. ์ฃผ์–ด์ง„ ์ž‘์—…์„ ํ˜ผ์ž ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹
  2. ์Šค๋ ˆ๋“œ์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ์‹œ ์ „์ฒด์— ๋ฌธ์ œ๊ฐ€ ์ƒ๊ธธ ๊ฐ€๋Šฅ์„ฑ ์žˆ์Œ
  3. ๋ฉ”๋ชจ๋ฆฌ๋‚˜ ๊ธฐํƒ€ ์ž์›์„ ํšจ์œจ์ ์œผ๋กœ ์‚ฌ์šฉ ๊ฐ€๋Šฅ

<=> ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ

: ํ•˜๋‚˜์˜ ์š”์ฒญ์—๋Š” ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ, ์š”์ฒญ๊ณผ ์‘๋‹ต์ด ๋งŽ์•„์ง€๋ฉด ์Šค๋ ˆ๋“œ ๊ฐฏ์ˆ˜๊ฐ€ ๋Š˜์–ด๋‚จ

  1. ์—ฌ๋Ÿฌ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์ผ์„ ๋‚˜๋ˆ  ์ฒ˜๋ฆฌ
  2. ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฌธ์ œ๊ฐ€ ์ƒ๊ฒจ๋„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋กœ ๋Œ€์ฒด ๊ฐ€๋Šฅ(์•ˆ์ •์ ์ธ ์„œ๋ฒ„ ์šด์˜ ๊ฐ€๋Šฅ)
  3. ์Šค๋ ˆ๋“œ๊ฐ„์˜ ์ž‘์—… ์ „ํ™˜ ๋น„์šฉ, ๋†€๊ณ  ์žˆ๋Š” ์Šค๋ ˆ๋“œ ๋ฌธ์ œ ๋ฐœ์ƒ

Node.js์˜ ์žฅ์ 

  1. ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ, ๋…ผ๋ธ”๋กœํ‚น I/O์— ๋”ฐ๋ฅธ ๋น ๋ฅธ ์†๋„
  2. ์ปดํ“จํ„ฐ ์ž์›์„ ๋œ ์‚ฌ์šฉ
  3. I/O์ž‘์—…์ด ๋งŽ์€ ์„œ๋ฒ„๋กœ ์ ํ•ฉ(์ฑ„ํŒ…, ์ŠคํŠธ๋ฆฌ๋ฐ)
  4. Javascript๋ฅผ ์‚ฌ์šฉํ•˜๊ธฐ์— ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์‚ฌ์šฉ ์šฉ์ด
  5. ์ƒ์‚ฐ์„ฑ์ด ๋†’์Œ(๋น ๋ฅธ ๊ฐœ๋ฐœ ๊ฐ€๋Šฅ)

Node.js์˜ ๋‹จ์ 

  1. ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์ด๋ผ ์ž์›์„ ๋งŽ์ด ๋จน๋Š” ์ž‘์—…์ด ์˜ค๋ฉด ๋ถ€ํ•˜๊ฐ€ ํฌ๊ฒŒ ๊ฑธ๋ฆผ
  2. ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋Š” CPU์ฝ”์–ด ํ•œ๊ฐœ๋งŒ ์‚ฌ์šฉ => CPU ์ž‘์—… ๋งŽ์€ ์„œ๋ฒ„๋กœ ๋ถ€์ ํ•ฉ(๊ฒŒ์ž„์„œ๋ฒ„ ๋“ฑ)
  3. ๋กœ์ง์ด ๋ณต์žกํ•œ ๊ฒฝ์šฐ ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ๋Šช์— ๋น ์งˆ ์ˆ˜ ์žˆ์Œ
  4. ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•˜๋Š” ํ”„๋กœ์„ธ์Šค ์ž์ฒด๊ฐ€ ์ฃฝ์–ด๋ฒ„๋ฆผ

Node.js์— ์–ด์šธ๋ฆฌ๋Š” ์„œ๋น„์Šค

  1. ๊ฐ„๋‹จํ•œ ๋กœ์ง์œผ๋กœ ๊ตฌ์„ฑ๋œ ์„œ๋น„์Šค
  2. ๋น ๋ฅธ ์‘๋‹ต์‹œ๊ฐ„์ด ์š”๊ตฌ๋˜๋Š” ์„œ๋น„์Šค
  3. ๋น ๋ฅธ ๊ฐœ๋ฐœ์ด ์š”๊ตฌ๋˜๋Š” ์„œ๋น„์Šค
  4. ๋น„๋™๊ธฐ๋ฐฉ์‹์— ์–ด์šธ๋ฆฌ๋Š” ์„œ๋น„์Šค(์ฑ„ํŒ…, ์ŠคํŠธ๋ฆฌ๋ฐ ์„œ๋น„์Šค)
    ๋„ทํ”Œ๋ฆญ์Šค, ํŽ˜์ดํŒ”, ๋งํฌ๋“œ์ธ, ํŽ˜์ด์Šค๋ถ ๋“ฑ์—์„œ ์‚ฌ์šฉ๋จ

Node.js๋ฅผ ์œ„ํ•œ ES6

1. var, let, const

var

  • function scope๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋ณ€์ˆ˜์„ ์–ธ๋ฐฉ์‹,
    ย (ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์œ ํšจํ•œ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง)
  • ์ตœ๊ทผ์—๋Š” ์‚ฌ์šฉํ•˜์ง€์•Š๋Š” ์ถ”์„ธ
    *scope: ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๋Š” ๋ฒ”์œ„
var hello = "hello";

function sayHello๋Š” () {
    var hello = "hello hello"
    console.log(hello);
}
console.log(hello);

// hello
// function sayHello๋Š” sayHello();์—์„œ ์‹คํ–‰๋จ
var hello = "hello";

if(true) {
    var hello = "hello hello";
}

console.log(hello);

// hello hello
// if๋ฌธ์•ˆ์— ์„ ์–ธ๋œ hello๊ฐ€ ์ด์ „์˜ ๋ณ€์ˆ˜๋ฅผ ๋ฎ์–ด์”€

let (๋ณ€์ˆ˜)

  • ๊ฐ’์„ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹
let hello = 'first hello';
hello = 'second hello';

console.log(hello);

// ํ•œ ๋ฒˆ ์ •์˜ํ•œ ๋ณ€์ˆ˜๋ฅผ ์žฌ์ •์˜ ํ•  ์ˆ˜ ์žˆ์Œ
  • var์™€ ๋‹ฌ๋ฆฌ let hello๋ฅผ ์ค‘๋ณต์œผ๋กœ ์„ ์–ธํ•  ์ˆ˜ ์—†๋‹ค.
let hello = 'first hello';
let hello = 'second hello';

console.log(hello);

//SyntaxError: Identifier 'hello' has already been declared
  • ์ค‘๊ด„ํ˜ธ{ } scope๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    : ์ค‘๊ด„ํ˜ธ ์•ˆ์—์„œ๋งŒ ์œ ํšจํ•œ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง
let hello = 'first hello';

if (true){
    let hello = 'second hello';
    console.log(hello);
}

console.log(hello);

// second hello
// first hello

const (์ƒ์ˆ˜)

  • ๊ฐ’์„ ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†๋Š” ๋ณ€์ˆ˜ ์„ ์–ธ ๋ฐฉ์‹
const hello = 'first hello';
hello = 'second hello';

console.log(hello);

// TypeError: Assignment to constant variable.
// ํ•œ๋ฒˆ ์ •์˜๋˜๋ฉด ์žฌ์ •์˜ํ•  ์ˆ˜ ์—†์Œ
  • ์ค‘๊ด„ํ˜ธ{ } scope๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.
    : ์ค‘๊ด„ํ˜ธ ์•ˆ์—์„œ๋งŒ ์œ ํšจํ•œ ๋ฒ”์œ„๋ฅผ ๊ฐ€์ง
const hello = 'first hello';

if(true) {
    const hello = 'second hello';
    console.log(hello);
}

console.log(hello);

// second hello
// first hello
// ๋ฐ–์˜ hello์™€ if์•ˆ์˜ hello๋Š” ๋‹ค๋ฅธ hello์ž„

2. Arrow function (ํ™”์‚ดํ‘œํ•จ์ˆ˜)

  • ES6 ์ดํ›„์— ์ƒˆ๋กœ ๋‚˜์˜จ ๋ฌธ๋ฒ•
  • function ํ‚ค์›Œ๋“œ ๋ณด๋‹ค ๊ฐ„๋‹จํžˆ ํ•จ์ˆ˜ ํ‘œํ˜„ ๊ฐ€๋Šฅ
const foo = () => {
    console.log('arrow function');
};

foo();

// arrow function

์œ„์˜ ํ™”์‚ดํ‘œ ํ•จ์ˆ˜๋Š” ์•„๋ž˜์˜ ํ•จ์ˆ˜์™€ ๋™์ผํ•˜๋‹ค.

 function foo() {
     console.log('arrow function');
 };
const foo = (x) => {
    return x;
};

console.log(foo('arrow'));

// arrow
// x๋Š” ๋งค๊ฐœ ๋ณ€์ˆ˜
  • ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜ ์ผ ๋•Œ
// ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ํ•˜๋‚˜๋ผ๋ฉด ์†Œ๊ด„ํ˜ธ ( ) ์ƒ๋žต๊ฐ€๋Šฅ
// ํ•จ์ˆ˜๊ฐ€ ๋ฐ”๋กœ return๋œ๋‹ค๋ฉด ์ค‘๊ด„ํ˜ธ { } ์ƒ๋žต๊ฐ€๋Šฅ
const foo = x => x;

console.log(foo('arrow'));
  • ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ๋‘ ๊ฐœ ์ผ ๋•Œ
const foo = (x, y) => x + y;

console.log(foo(1, 5)); // 6
  • ๋ฐ”๋กœ returnํ•˜์ง€ ์•Š๋Š” ๊ฒฝ์šฐ๋Š” ์ค‘๊ด„ํ˜ธ ์ƒ๋žต๋ถˆ๊ฐ€
const foo = (x, y) => {
    console.log('๋‘ ์ค„ ์ด์ƒ');
    return x + y;
};

console.log(foo(1, 5));

// ๋‘ ์ค„ ์ด์ƒ
// 6

3. ๋น„๊ตฌ์กฐํ™” ํ• ๋‹น

: ๊ฐ์ฒด, ๋ฐฐ์—ด์•ˆ์˜ ๊ฐ’์„ ์ถ”์ถœํ•ด์„œ ๋ณ€์ˆ˜, ์ƒ์ˆ˜์— ๋ฐ”๋กœ ์„ ์–ธํ•˜๋Š” ๋ฌธ๋ฒ•

const object = {a: 1, 
                b: 2};

 const a = object.a;
 const b = object.b;

console.log(a);
console.log(b);

์œ„์˜ ์ฝ”๋“œ์™€ ์•„๋ž˜์˜ ์ฝ”๋“œ๋Š” ๊ฐ™์Œ

const object = {a: 1, 
                b: 2};

const {a, b} = object;

console.log(a);
console.log(b);
  • ๋ฐฐ์—ด์—์„œ๋„ ์‚ฌ์šฉ๊ฐ€๋Šฅ
const array = [1, 2];
const [one, two] = array;

console.log(one);
console.log(two);

4. Promise, Async, Await

Javascript์˜ ๊ฐ€์žฅ ํฐ ํŠน์ง• => ๋น„๋™๊ธฐ

๋น„๋™๊ธฐ?

: Task, ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ๊ธฐ๋‹ค๋ฆฌ์ง€์•Š๊ณ  ๊ฐ์ž ์ˆ˜ํ–‰ํ•œ ๋‹ค์Œ์—
ย ย ๋จผ์ € ๋๋‚˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ๊ฒฐ๊ณผ๊ฐ’์„ ์ถœ๋ ฅ

๋”ฐ๋ผ์„œ js์—์„œ๋Š” ์ˆœ์ฐจ์  ์ž‘์—…์„ ์œ„ํ•ด callback๋ฐฉ์‹์„ ์ทจํ•จ

callback?

$("#button").click(() => {
  alert("btn clicked!!")
});

// ํด๋ฆญ์ด ์‹คํ–‰๋œ ํ›„ ์•Œ๋ฆผ์ฐฝ์ด ์‹คํ–‰๋˜๋„๋ก ์ฝœ๋ฐฑํ•จ์ˆ˜๋กœ ์ผ๋ จ์ ์ธ ํ๋ฆ„์„ ๋งŒ๋“ฆ

์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๋‚จ๋ฐœํ•  ๊ฒฝ์šฐ callback hell(์ฝœ๋ฐฑ์ง€์˜ฅ)์ด ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ์Œ

callback hell?

: ์ฝœ๋ฐฑํ•จ์ˆ˜์˜ ์ค‘์ฒฉ์œผ๋กœ ํ•œ ๋ฒˆ์— ์•Œ์•„๋ณด๊ธฐ ํž˜๋“  ์ฝ”๋“œ

์ฝœ๋ฐฑ์ง€์˜ฅ์„ ํƒˆ์ถœํ•˜๊ธฐ ์œ„ํ•ด promise๋ผ๋Š” ๋ฌธ๋ฒ•์ด ๋“ฑ์žฅํ•จ

Promise

promise์˜ 3๊ฐ€์ง€ ์ƒํƒœ

  1. pending (๋Œ€๊ธฐ์ƒํƒœ)
    : promise๋ฅผ ํ˜ธ์ถœํ•˜๊ฒŒ๋˜๋ฉด ๋‚˜์˜ค๋Š” ์ƒํƒœ
  2. pullfilled (์ดํ–‰์ƒํƒœ)
  3. rejected (์‹คํŒจ์ƒํƒœ) ย for.์—๋Ÿฌ ํ•ธ๋“ค๋ง
  • promise๋Š” ํ•˜๋‚˜์˜ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•˜๊ณ  then์„ ํ†ตํ•ด์„œ
    ์ผ๋ จ์˜ ํ๋ฆ„์„ ์ œ์–ดํ•จ
  • then: promise๋ฅผ ํ˜ธ์ถœ
  • ์—ฌ๋Ÿฌ๊ฐœ์˜ then์„ ์‚ฌ์šฉํ•ด์„œ ํ๋ฆ„์„ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Œ,
    ์•ž์„  then์˜ return๊ฐ’์„ ์ดํ›„ then์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋กœ ๋ฐ›์•„์˜ด
// ์„ฑ๊ณต
function sayHello() {
    return new Promise((resolve, reject) => {
        const hello = 'hello hello';
        resolve(hello);
    });
}

sayHello().then((resolvedData) => {
    console.log(resolvedData)
}); // hello hello

// resolve : ์„ฑ๊ณต ์‹œ ํ˜ธ์ถœ๋จ
// reject : ์‹คํŒจ ์‹œ ํ˜ธ์ถœ๋จ
  • catch๋ฅผ ํ†ตํ•ด ์–ด๋–ค ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋Š”์ง€ ์ฝ˜์†”์— ๊ธฐ๋กํ•จ
// ์‹คํŒจ
function sayHello() {
    return new Promise((resolve, reject) => {
        reject(new Error());
    });
}

sayHello()
    .then((resolvedData) => {
        console.log(resolvedData);
    })
    .catch((error) => {
    console.log(error);
});

์ฝœ๋ฐฑ์ง€์˜ฅ ํ•ด๊ฒฐ์„ ์œ„ํ•ด promise์˜ then์„ ์‚ฌ์šฉํ•˜์˜€๋Š”๋ฐ,
then์ด ๋งŽ์•„์ง€๋ฉด ์ด ๋˜ํ•œ ๋ณต์žกํ•ด๋ณด์ด๋Š” ๋ฌธ์ œ๋ฅผ ํ•ด๊ฒฐํ•˜๊ธฐ ์œ„ํ•ด ๋งŒ๋“ค์–ด์ง„๊ฒƒ์ด Async์™€ Awaits

Async, Await

function sayHello() {
    return new Promise((resolve, reject) => {
        const hello = 'hello hello';
        resolve("hello!!!");
    });
}

async function test() {
    const hello1 = await sayHello();
    console.log(hello1);
}

test(); 

// hello!!!
// sayHello์˜ return ๊ฐ’์„ hello1์— ์ €์žฅํ•จ

0๊ฐœ์˜ ๋Œ“๊ธ€