๋กœ์ผ“๐Ÿพ
article thumbnail
๋ฐ˜์‘ํ˜•

 

์šฐ๋ฆฌ๋Š” ๋ญ‰์น˜์—๊ฒŒ ๊ธฐ๋‹ค๋ ค!  ๋จน์–ด! ํ›ˆ๋ จ์„ ๊ต์œก์‹œํ‚ค๊ณ  ์‹ถ์Šต๋‹ˆ๋‹ค.

๋ญ‰์น˜์˜ ๋‹ค๋ฆฌ์— ๊ฐ„์‹์„ ์˜ฌ๋ ค๋†“๊ณ  ๋จน์–ด!๋ผ๊ณ  ํ–ˆ์„ ๊ฒฝ์šฐ ๋ญ‰์น˜๊ฐ€ ๊ฐ„์‹์„ ๋จน์—ˆ์œผ๋ฉด ํ•˜๋Š”๋ฐ ๋ญ‰์น˜๋Š” ์ฃผ์ธ์˜ ๋ช…๋ น์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ (๋น„๋™๊ธฐ ๋ฐฉ์‹ ๋ฌธ์ œ) ์ œ๋ฉ‹๋Œ€๋กœ ๊ฐ„์‹์„ ๋จน์–ด๋ฒ„๋ ธ์Šต๋‹ˆ๋‹ค...๋ญ‰์น˜์—๊ฒŒ ํ›ˆ๋ จ(์ผ๋ฐ˜ ์ฝœ๋ฐฑํ•จ์ˆ˜)์„ ์‹œ์ผœ๋ณด์•˜์ง€๋งŒ ์—ฌ์ „ํžˆ ๋ญ‰์น˜๋Š” ๋ง์„ ๋“ฃ์ง€ ์•Š์Šต๋‹ˆ๋‹ค.  ๋ญ‰์น˜๋Š” ๋ง๋ชปํ•˜๋Š” ๊ฐ•์•„์ง€๋ผ ํ˜ผ๋‚ผ ์ˆ˜๋„ ์—†๊ณ   ์šฐ๋ฆฌ๋Š” ๋‚œ์ฒ˜ํ•œ ์ƒํ™ฉ์— ๋น ์ ธ๋ฒ„๋ ธ์Šต๋‹ˆ๋‹คใ… ใ…   ๊ทธ๋ž˜์„œ ์šฐ๋ฆฌ๋Š” ๋” ์‰ฌ์šด ํ›ˆ๋ จ๋ฐฉ๋ฒ•(async/await)์œผ๋กœ ๋ญ‰์น˜๋ฅผ ๊ต์œก์‹œํ‚ค๊ณ ์ž ํ•ฉ๋‹ˆ๋‹ค!! 

 

์ถœ์ฒ˜ : https://www.youtube.com/watch?v=PFXQ4YMW_Yo ๋ญ‰์น˜

 


# ๋น„๋™๊ธฐ์™€ ๋™๊ธฐ

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ ๊ฐ€์žฅ ์‹ ๊ฒฝ์จ์•ผ ํ•˜๋Š” ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜๊ฐ€ ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์ž…๋‹ˆ๋‹ค.  ๋ถ„๋ช… ๋กœ์ง์€ ๋งž๊ฒŒ ์ง ๊ฑฐ ๊ฐ™์€๋ฐ ๊ฒฐ๊ณผ๊ฐ’์ด undefined ์ด๊ฑฐ๋‚˜ ์•Œ์ˆ˜ ์—†๋Š” ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ์‹ญ์ค‘ํŒ”๊ตฌ ๋น„๋™๊ธฐ ๋ฌธ์ œ๋ฅผ ์˜์‹ฌํ•ด๋ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

 

์•„๋ž˜ ์ฝ”๋“œ๋Š” Node.js ์ค‘ ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ ‘๊ทผํ•ด ์ฟผ๋ฆฌ๋ฌธ์„ ์กฐํšŒํ•˜๋Š” ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. 

 

router.get('/', function (req, res, next) {
  let query_result = "init"

  connection.connect();
  connection.query('SELECT * FROM bjgg.champions LIMIT 1', function(err, result, fields){
    query_result = result;
  });
  connection.end();
  
  res.json(query_result);
});

 

**๊ฐ„๋‹จํ•œ ์ฝ”๋“œ ์„ค๋ช…

connection.query๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋กœ ์ฟผ๋ฆฌ๋ฌธ์˜ ๊ฒฐ๊ณผ ๊ฐ’์„ ๋ฐ›๋Š” ํ•จ์ˆ˜์ž…๋‹ˆ๋‹ค. ์ฝœ๋ฐฑํ•จ์ˆ˜ result์— ๊ฒฐ๊ณผ๊ฐ’์ด ๋‹ด๊น๋‹ˆ๋‹ค.

res.json(query_result)๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €์— json ๊ฐ’์„ ๋ณด์—ฌ์ค๋‹ˆ๋‹ค.

connection.connect()์™€ .end()๋Š” ์‹ ๊ฒฝ์“ฐ์‹œ์ง€ ์•Š์•„๋„ ๋ฉ๋‹ˆ๋‹ค.

 

๊ณผ์—ฐ query_result ๋Š” ์–ด๋–ค ๊ฐ’์„ ์ถœ๋ ฅํ• ๊นŒ์š”? "init" ์•„๋‹ˆ๋ฉด "SELECT ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ’"? 

~

~

~

์ •๋‹ต์€ ๋ฐ”๋กœ "init" ์ž…๋‹ˆ๋‹ค.

 

 

 

 

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๋น„๋™๊ธฐ ๋ฐฉ์‹์œผ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— connection.query์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์•„ ์˜ค๊ธฐ๋„ ์ „์— ์ด๋ฏธ ๋‹ค์Œ ํ•จ์ˆ˜์ธ res.json(query_result)๋กœ ๋„˜์–ด๊ฐ€๊ฒŒ ๋˜์–ด ์ฟผ๋ฆฌ๋ฌธ์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.

 

router.get('/', function (req, res, next) {
  let query_result = "init"

  connection.connect();
  connection.query('SELECT * FROM bjgg.champions LIMIT 1', function(err, result, fields){
    query_result = result;

    connection.end();
    res.json(query_result);
  });
});

 

๋งŽ์€ ๋ถ„๋“ค์ด ์œ„์™€ ๊ฐ™์ด ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ์‰ฝ๊ฒŒ ํ•ด๊ฒฐ๋˜์ง€ ์•Š์„๊นŒ? ๋ผ๊ณ  ์ƒ๊ฐํ•˜์‹ค ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ๋งž์Šต๋‹ˆ๋‹ค. ์œ„์™€ ๊ฐ™์ด ํ•ด๋„ ๋ฌธ์ œ์—†์ด ์ž˜๋Œ์•„๊ฐ‘๋‹ˆ๋‹ค.

 

 

๊ฒฐ๊ณผ ๊ฐ’์„ ์ž˜ ๊ฐ€์ ธ์˜จ ๊ฒƒ์„ ๋ณด์‹ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ "SELECT ์ฟผ๋ฆฌ ๊ฒฐ๊ณผ๊ฐ’"์„ ๋‹ค๋ฅธ ์ฝœ๋ฐฑํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค๋ฉด ์–ด๋–จ๊นŒ์š”?

 

router.get('/', function (req, res, next) {
  let query_result = "init"

  connection.connect();
  connection.query('SELECT * FROM bjgg.champions LIMIT 1', function(err, result, fields){
    query_result = result;
    
    myFunc_01(query_result, function(result_01){
      myFunc_02(result_01, function(result_02){
        myFunc_03(result_02, function(result_03){
          //์ฝœ๋ฐฑ ์ง€์˜ฅ...
          console.log(result_03);
        });
      });
    })

    connection.end();
    res.json(query_result);
  });
});

 

query_result๋ฅผ ์ด์šฉํ•˜์—ฌ 3๊ฐœ์˜ ํ•จ์ˆ˜(myFunc_01, 02, 03)๋ฅผ ๊ฑฐ์นœ ๋’ค result_03์„ ๊ตฌํ•œ๋‹ค๊ณ  ํ•œ๋‹ค๋ฉด,

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

 


# async/await

 

์ฝœ๋ฐฑ์ง€์˜ฅ์„ ํ•ด๊ฒฐํ•˜๊ณ ์ž ๋‚˜์˜จ ๊ฒƒ์ด ๋ฐ”๋กœ async/await ์ž…๋‹ˆ๋‹ค. async/await๊ฐ€ ๋‚˜์˜ค๊ธฐ ์•ž์„œ promise๋ผ๋Š” ๊ฒƒ์ด ๋จผ์ € ๋‚˜์™”๋Š”๋ฐ promise์— ๋Œ€ํ•ด์„  ๋‹ค๋ฃจ์ง€ ์•Š๊ฒ ์Šต๋‹ˆ๋‹ค.

(๊ฐœ๋ฐœ์ž์˜ ์š•์‹ฌ์€ ๋์ด ์—†๋‹ค๊ณ  promise  ๋˜ํ•œ ๊ฐ€๋…์„ฑ์ด ์ข‹์ง€ ์•Š๋‹ค ์ƒ๊ฐํ•ด ์ด๋ฅผ ๋”์šฑ ๊ฐœ์„ ํ•œ ๊ฒƒ์ด async/await์ž…๋‹ˆ๋‹ค.)

 

async/await ๋ฌธ๋ฒ•์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ŠคํŽ™์€ ES2017์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ ์ตœ์‹  ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์•„๋‹ˆ๋ผ๋ฉด ํ•ด๋‹น ์Šคํฌ๋ฆฝํŠธ๋Š” ๋™์ž‘ํ•˜์ง€ ์•Š์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. 

 

router.get('/',async function (req, res, next) {
  let query_result = "init"
  
  query_result = await connection('SELECT * FROM bjgg.champions LIMIT 1');

  res.json(query_result);
});

 

์œ„ ์ฝ”๋“œ๋Š” async/await ๋ฌธ๋ฒ•์„ ์‚ฌ์šฉํ•œ ์ฝ”๋“œ์ž…๋‹ˆ๋‹ค. ์–ผํ•๋ด๋„ ๊ฐ€๋…์„ฑ์ด ์ข‹์•„์กŒ๋‹ค๋Š” ๊ฑธ ์•Œ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

async/await ๋ฌธ๋ฒ• ์‚ฌ์šฉ๋ฒ•์€ await๋ฅผ ์“ฐ๊ณ ์‹ถ์€ ํ•จ์ˆ˜ ์•ž์— async๋ฅผ ์จ์ฃผ๊ณ , ๋น„๋™๊ธฐ๋ฅผ ๋™๊ธฐ๋กœ ์ฒ˜๋ฆฌํ•˜๊ณ  ์‹ถ์€ ํ•จ์ˆ˜ ์•ž์— await๋ฅผ ๋ถ™์—ฌ์ฃผ๊ธฐ๋งŒ ํ•˜๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

๊ฒฐ๊ณผ๊ฐ’์„ ์ž˜ ๊ฐ€์ ธ์˜จ ๊ฑธ ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

router.get('/',async function (req, res, next) {
  let query_result = "init"

  query_result = await connection('SELECT * FROM bjgg.champions LIMIT 1');
  result_01 = await myFunc_01(query_result);
  result_02 = await myFunc_02(result_01);
  result_03 = await myFunc_03(result_02);

  res.json(query_result);
});


 

์ฝœ๋ฐฑ์ง€์˜ฅ์— ๋น ์กŒ๋˜ ์ฝ”๋“œ๋“ค๋„ ์œ„์™€ ๊ฐ™์ด ๊ฐ€๋…์„ฑ ์ข‹๊ฒŒ ๋ฐ”๊ฟ€ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ›จ์”ฌ ๋ณด๊ธฐ๊ฐ€ ์ข‹์Šต๋‹ˆ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  try~catch  ๋ฌธ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์˜ˆ์™ธ์ฒ˜๋ฆฌ ๋˜ํ•œ ์‰ฝ๊ฒŒ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

router.get('/',async function (req, res, next) {
  try{
    let query_result = "init"

    query_result = await connection('SELECT * FROM bjgg.champions LIMIT 1');
    result_01 = await myFunc_01(query_result);
    result_02 = await myFunc_02(result_01);
    result_03 = await myFunc_03(result_02);
  
    res.json(query_result);
  }catch(error){
    console.log(error);
  }

});

 

 


# ๊ธฐํŠนํ•œ ๋ญ‰์น˜

 

์ถœ์ฒ˜ : https://www.youtube.com/watch?v=PFXQ4YMW_Yo ๋ญ‰์น˜

์šฐ๋ฆฌ๋Š” ์ด์ œ ์ƒˆ๋กœ์šด ํ›ˆ๋ จ๋ฐฉ๋ฒ•(async/await)์„ ์•Œ์•˜๊ธฐ ๋•Œ๋ฌธ์—  ๊ธฐ์กด์— ํ–ˆ๋˜ ํ›ˆ๋ จ๋ฐฉ๋ฒ•(์ผ๋ฐ˜ ์ฝœ๋ฐฑํ•จ์ˆ˜)๋ณด๋‹ค ๋”์šฑ ์‰ฝ๊ฒŒ ๋ญ‰์น˜๋ฅผ ๊ต์œก์‹œํ‚ฌ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ญ‰์น˜๋Š” ๋” ์ด์ƒ ๊ฐ„์‹์„ ์ œ๋ฉ‹๋Œ€๋กœ ๋จน์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๋ญ‰์น˜์—๊ฒŒ ๊ธฐ๋‹ค๋ ค!(await)๋ผ๊ณ  ๋งํ•œ ํ›„ ๋จน์–ด!(await์˜ ๊ฒฐ๊ณผ๊ฐ’์„ ๋ฐ›์•˜์„ ๋•Œ)๋ผ๊ณ  ์™ธ์น ๋•Œ ๋งŒ ๋ญ‰์น˜๋Š” ๊ฐ„์‹์„ ๋จน์Šต๋‹ˆ๋‹ค. 

 

์ฝ์–ด์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

 

๋ฐ˜์‘ํ˜•
profile on loading

Loading...