Session 16_0A. Synchronous/Asynchronous Intro

๊น€๋ฏผ์žฌยท2021๋…„ 9์›” 12์ผ
0

TIL, WeCode, Courseย 

๋ชฉ๋ก ๋ณด๊ธฐ
32/48
post-thumbnail

*๐Ÿ”Study Keyword :

1>์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ โœ…๋™๊ธฐ/๋น„๋™๊ธฐ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•˜๊ณ  2>Node.Js์˜ ์ •์˜์ธ '๋น„๋™๊ธฐ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜์— ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋Ÿฐํƒ€์ž„'์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•ด๋ณด์ž

<์ด๋ฒˆ ์„น์…˜์—์„œ ๋‹ค๋ฃฐ ๋ชฉ์ฐจ>

  • ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ & Node.Js์˜ ์ •์˜
  • Callback
  • Promise
  • async/await
  • Event Loop
  • Web API
  • Task Queue
  • Call Stack

1. ๋™๊ธฐ์™€ ๋น„๋™๊ธฐ

1_1. ๋™๊ธฐ์ ์œผ๋กœ ๊ณต๋ถ€ํ•˜๋Š” ๊ณผ์ •์„ ๋‹ด์€ ์ฝ”๋“œ

<script>
const myStudy = {
    //1> ๋…ธ์…˜ ์ฝ๊ธฐ
    readNotion: () => {
        console.log('๋…ธ๋“œ ๋ถ€๋ถ„ ๋…ธ์…˜ ์ฝ๊ธฐ๋กœ ๊ณต๋ถ€ ์‹œ์ž‘')
        let goalOfStudySum = 25;
        while (goalOfStudySum !== 100) {
            console.log(`${goalOfStudySum}% ํ•™์Šต ์™„๋ฃŒ`)
            goalOfStudySum += 25
        }
        console.log(`${goalOfStudySum}% ๋…ธ์…˜ ์ฝ๊ธฐ ์™„๋ฃŒ... ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋ผ...`)
    },
    //2> ์—˜๋ฆฌ๋‹˜ ์˜์ƒ๋ณด๊ธฐ
    watchElleVideo: () => console.log('์˜์ƒ ๋ณด๊ธฐ'),
    //3> ์บกํ‹ด ํŒ๊ต๋‹˜ ๋ธ”๋กœ๊ทธ ๊ธ€ ์ฝ๊ธฐ
    readBlog: () => console.log('๋ธ”๋กœ๊ทธ ๊ธ€ ์ฝ๊ธฐ')
    //4> ๋ธ”๋กœ๊ทธ๋กœ ์ •๋ฆฌํ•˜๊ธฐ
    writeBlogging: () => console.log('๋ธ”๋กœ๊ทธ ์ •๋ฆฌํ•˜์—ฌ ๊ธ€ ์˜ฌ๋ฆฌ๊ธฐ')
}
const doStudySync = () => {
    myStudy.readNotion()
    myStudy.watchElleVideo()
    myStudy.writeBlogging()
}
/**
<๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๊ณต๋ถ€ ์ˆœ์„œ>
1> ๋…ธ์…˜์„ ๋จผ์ € ๋‹ค ์ฝ์€ ๋’ค์— 2> ์˜์ƒ์„ ๋ณด๊ณ  3> ๋ธ”๋กœ๊ทธ ๊ธ€๋„ ์ฝ๊ณ  4> ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ž‘์„ฑํ•˜์ง€๋งŒ ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋œ๋‹ค..ใ… 
'๋…ธ๋“œ ๋ถ€๋ถ„ ๋…ธ์…˜ ์ฝ๊ธฐ๋กœ ๊ณต๋ถ€ ์‹œ์ž‘'
'25% ํ•™์Šต ์™„๋ฃŒ'
'50% ํ•™์Šต ์™„๋ฃŒ'
'75% ํ•™์Šต ์™„๋ฃŒ'
'๋…ธ์…˜ ์ฝ๊ธฐ ์™„๋ฃŒ... ์ดํ•ด๊ฐ€ ์ž˜ ์•ˆ๋ผ...'
'์˜์ƒ๋ณด๊ธฐ'
'๋ธ”๋กœ๊ทธ ๊ธ€ ์ฝ๊ธฐ'
'๋ธ”๋กœ๊ทธ ์ •๋ฆฌํ•˜์—ฌ ๊ธ€ ์˜ฌ๋ฆฌ๊ธฐ'
**/
</script>

-์ด๋ ‡๊ฒŒ ๋™๊ธฐ์ ์œผ๋กœ ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ๊ฑด ์ด์ „์˜ ์ž‘์—…์ด(1> ๋…ธ์…˜์„ ๋ชจ๋‘ ์ฝ์€ ๋’ค์—์•ผ) ๋งˆ๋ฌด๋ฆฌ ๋˜์–ด์•ผ ๋‹ค์Œ ์ผ(2> ์˜์ƒ ์‹ ์ฒญ, 3> ๋ธ”๋กœ๊ทธ ๊ธ€ ์ฝ๊ธฐ 4> ๋ธ”๋กœ๊ทธ ๊ธ€ ์ž‘์„ฑ)๋กœ ๋„˜์–ด๊ฐˆ ์ˆ˜ ์žˆ์Œ์„ ์˜๋ฏธํ•œ๋‹ค.

1_2A. ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ณต๋ถ€ํ•˜๋Š” ๊ณผ์ •์„ ๋‹ด์€ ์ฝ”๋“œ

<script>
const myStudy = {
    //1> ๋…ธ์…˜ ์ฝ๊ธฐ
  readNotion : () => {
  new Promise((resolve, reject) => {
    console.log('๋…ธ๋“œ ๋ถ€๋ถ„ ๋…ธ์…˜ ์ฝ๊ธฐ๋กœ ๊ณต๋ถ€ ์‹œ์ž‘')
    let goalOfStudySum = 25;  
    const intervalId = setInterval(()=>{
      console.log(`${goalOfStudySum}% ํ•™์Šต ์™„๋ฃŒ`);
       goalOfStudySum +=25;                             
      if(goalOfStudySum === 100){
        clearInterval(intervalId)
    console.log(`${goalOfStudySum}% ์˜์ƒ๋„ ๋ณด๊ณ  ๋ธ”๋กœ๊ทธ ๊ธ€๋„ ์ฝ๊ณ ์„œ์•ผ ๋…ธ์…˜ ์ดํ•ดํ•˜๊ธฐ ์™„๋ฃŒ!`)
        resolve()
      }
    }, 100)
  }),
  //2> ์—˜๋ฆฌ๋‹˜ ์˜์ƒ๋ณด๊ธฐ
  watchElleVideo: () => console.log('์˜์ƒ ๋ณด๊ธฐ'),
  //3> ์บกํ‹ด ํŒ๊ต๋‹˜ ๋ธ”๋กœ๊ทธ ๊ธ€ ์ฝ๊ธฐ
  readBlog: () => console.log('๋ธ”๋กœ๊ทธ ๊ธ€ ์ฝ๊ธฐ')
  //4> ๋ธ”๋กœ๊ทธ๋กœ ์ •๋ฆฌํ•˜๊ธฐ
  writeBlogging: () => console.log('๋ธ”๋กœ๊ทธ ์ •๋ฆฌํ•˜์—ฌ ๊ธ€ ์˜ฌ๋ฆฌ๊ธฐ')
}
const doStudyAsync =()=>{
  myStudy.readNotion()
  myStudy.watchElleVideo()
  myStudy.writeBlogging()
}
doStudyAsync()
/**
<๋น„๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰ํ•œ ๊ณต๋ถ€ ์ˆœ์„œ>
1> ๋…ธ์…˜์„ ์ฝ์œผ๋ฉด์„œ ๋™์‹œ์— 2> ์˜์ƒ๋„ ๋ณด๊ณ  3> ๋ธ”๋กœ๊ทธ ๊ธ€๋„ ์ฝ๊ณ  4> ๋งˆ์ง€๋ง‰์œผ๋กœ ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์ž‘์„ฑํ•˜๊ธฐ์— ๋…ธ์…˜์— ๋‚˜์˜จ ๋‚ด์šฉ์„ ๋‹ค ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค!
'๋…ธ๋“œ ๋ถ€๋ถ„ ๋…ธ์…˜ ์ฝ๊ธฐ๋กœ ๊ณต๋ถ€ ์‹œ์ž‘'
'์˜์ƒ๋ณด๊ธฐ'
'๋ธ”๋กœ๊ทธ ๊ธ€ ์ฝ๊ธฐ'
'๋ธ”๋กœ๊ทธ ์ •๋ฆฌํ•˜์—ฌ ๊ธ€ ์˜ฌ๋ฆฌ๊ธฐ'
'25% ํ•™์Šต ์™„๋ฃŒ'
'50% ํ•™์Šต ์™„๋ฃŒ'
'75% ํ•™์Šต ์™„๋ฃŒ'
'์˜์ƒ๋„ ๋ณด๊ณ  ๋ธ”๋กœ๊ทธ ๊ธ€๋„ ์ฝ๊ณ ์„œ์•ผ ๋…ธ์…˜ ์ดํ•ดํ•˜๊ธฐ ์™„๋ฃŒ!'
**/
</script>

1_2B. ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ณต๋ถ€ํ•˜๋Š” ์ฝ”๋“œ๋ฅผ ๋‹ค์‹œ ๋™๊ธฐ์ ์œผ๋กœ ์ˆ˜ํ–‰

  • async/await ํ‚ค์›Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋น„๋™๊ธฐ์ ์ธ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋‹ค.
<script>
// ๋น„๋™๊ธฐ์ ์œผ๋กœ ์‹คํ–‰ํ•œ ์ฝ”๋“œ๋ฅผ ๋™๊ธฐ์ ์œผ๋กœ  ์ˆ˜ํ–‰ํ•˜๊ฒŒ ํ•˜๊ธฐ
const doStudyAsync = async()=> {
  await  myStudy.readNotion()
  myStudy.watchElleVideo()
  myStudy.readBlog()
  myStudy.writeBlogging()
}
doStudyAsync()
/**
'๋…ธ๋“œ ๋ถ€๋ถ„ ๋…ธ์…˜ ์ฝ๊ธฐ๋กœ ๊ณต๋ถ€ ์‹œ์ž‘'
'25% ํ•™์Šต ์™„๋ฃŒ'
'50% ํ•™์Šต ์™„๋ฃŒ'
'75% ํ•™์Šต ์™„๋ฃŒ'
'100% ๋…ธ์…˜ ์ฝ๊ธฐ ์™„๋ฃŒ'
'์˜์ƒ๋ณด๊ธฐ'
'๋ธ”๋กœ๊ทธ ๊ธ€ ์ฝ๊ธฐ'
'๋ธ”๋กœ๊ทธ ์ •๋ฆฌํ•˜์—ฌ ๊ธ€ ์˜ฌ๋ฆฌ๊ธฐ'
**/
</script>
  • ์ด๋ ‡๊ฒŒ ๋™๊ธฐ์ ์œผ๋กœ ๊ณต๋ถ€ํ•˜๋˜ ๋ฐฉ์‹์—์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ๊ณต๋ถ€ ๋ฐฉ์‹์„ ๋ฐ”๊พธ๋ฉด ๋” ์ด์ƒ ๋…ธ์…˜์„ ๋‹ค ์ฝ๊ณ  ์ดํ•ดํ•  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ด ์•„๋‹Œ
    1> ๋…ธ์…˜์„ ์ฝ์œผ๋ฉด์„œ ๋™์‹œ์— 2> ์—˜๋ฆฌ๋‹˜์˜ ์˜์ƒ๋„ ๋ณด๊ณ , 3> ์บกํ‹ด ํŒ๊ต๋‹˜์˜ ๋ธ”๋กœ๊ทธ ๊ธ€๋„ ์ฝ์„ ์ˆ˜ ์žˆ๊ณ  4> ๋ธ”๋กœ๊ทธ ๊ธ€์„ ์“ฐ๋Š” ๊ฒƒ์œผ๋กœ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉด์„œ
    ๋…ธ์…˜์„ ์ฝ๊ณ  ์ดํ•ดํ•˜๋ฉด์„œ ๋™์‹œ์— ๋‚˜๋จธ์ง€ ํ•™์Šต ์ž๋ฃŒ๋“ค๋„ ํ•™์Šตํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.
  • ๋”ฐ๋ผ์„œ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ผ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค๋Š” ๊ฑด ์ด์ „ ์ž‘์—…์˜ ๋งˆ๋ฌด๋ฆฌ ์—ฌ๋ถ€(๋…ธ์…˜์„ ๋‹ค ์ฝ์„ ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆด ํ•„์š”์—†์ด)์— ์ƒ๊ด€์—†์ด ๊ทธ ๋‹ค์Œ ์ผ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ์ž‘์—… ๋ฐฉ์‹์„ ์˜๋ฏธํ•œ๋‹ค.

2. Node.js

  • Node.js๋ž€ ๋น„๋™๊ธฐ(Asynchronous) ์ด๋ฒคํŠธ-๊ธฐ๋ฐ˜(event-driven) JavaScript ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋‹ค.

์ง€๊ธˆ๋ถ€ํ„ฐ ์ด Node.js์˜ ์ •์˜์— ๋Œ€ํ•ด์„œ ์ดํ•ดํ•ด๋ณด๋„๋ก ํ•ด๋ณด์ž.

2_1. Node.js์˜ ํƒ„์ƒ ๋ฐฐ๊ฒฝ

JavaScript ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ์ด๋ž€ JavaScript๋กœ ์งœ์—ฌ์ง„ ์†Œ์Šค์ฝ”๋“œ๋ฅผ CPU๊ฐ€ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๊ณ„์–ด(ex. 0๊ณผ 1๋กœ ์ด๋ฃจ์–ด์ง„ bytecode)๋กœ ๋ณ€ํ™˜์‹œํ‚ค๊ณ  ๋˜ํ•œ ํ”„๋กœ๊ทธ๋žจ์˜ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ด€๋ฆฌํ•˜๋Š” ์‹œ์Šคํ…œ์ด๋‹ค.

  • ์›น ๋ธŒ๋ผ์šฐ์ €์—” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ†ต์—ญ๊ธฐ, ์ฆ‰ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์กด์žฌํ•˜์—ฌ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์–ธ์–ด๋ฅผ ๋จธ์‹  ์ฝ”๋“œ(๊ธฐ๊ณ„์–ด)๋กœ ๋ณ€ํ™˜ํ•ด์ค€๋‹ค.
  • ์ด๋ ‡๊ฒŒ ์›น๋ธŒ๋ผ์šฐ์ € ๋‚ด์—์„œ JS๋ฅผ ์“ธ ์ˆ˜ ์žˆ๋Š” ์ด์œ ๊ฐ€ ๋ฐ”๋กœ ๋ธŒ๋ผ์šฐ์ € ๋‚ด์— JS ์—”์ง„(=ํ†ต์—ญ๊ธฐ) ์กด์žฌํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋ฉฐ ์ด๋กœ์„œ ์ปดํ“จํ„ฐ๋Š” 1> ๋จธ์‹ ์ฝ”๋“œ๋ฅผ ์ดํ•ดํ•  ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ 2> ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋ฅผ HTML์„ ๋ณ€ํ˜•ํ•˜๊ธฐ์œ„ํ•œ ๋ฐฉ์‹์œผ๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

2_2 Chrome V8 ์—”์ง„(= ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„)

  • ํ•œ ๊ฐœ๋ฐœ์ž๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ € ๋ฐ”๊นฅ์—์„œ JS ๊ธฐ๋ฐ˜์˜ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์œผ๋ฉด ์ •๋ง ํŽธ๋ฆฌํ•˜๊ฒ ๋‹ค๋Š” ์ƒ๊ฐ์„ ์‹œ์ž‘์œผ๋กœ Chrome V8, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์„ ๋–ผ์–ด๋‹ค๊ฐ€ ์™ธ๋ถ€ ํ”„๋กœ๊ทธ๋žจ์—๊ฒŒ ์ด์‹ํ•˜๊ฒŒ ๋˜์–ด ํƒ„์ƒํ•œ ํ˜•ํƒœ๊ฐ€ ๋ฐ”๋กœ Node.js์ด๋‹ค.
  • ์ฆ‰, Chrome V8 ์—”์ง„์€ ๊ตฌ๊ธ€์˜ ํฌ๋กฌ ์›น๋ธŒ๋ผ์šฐ์ €์—์„œ ์ž‘๋™ํ•˜๋Š” ์—”์ง„์œผ๋กœ Chrome V8 ์—”์ง„์ด ๋ธŒ๋ผ์šฐ์ € ์—†์ด(๋ธŒ๋ผ์šฐ์ € ๋ฐ–์—์„œ๋„) JS๋ฅผ ์‚ฌ์šฉ(์ž‘๋™)ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋งŒ๋“  ํ™˜๊ฒฝ์ด ๋ฐ”๋กœ Node.js**์ด๋‹ค.
  • Chrome V8 ์—”์ง„์ด **๋น„๋™๊ธฐ ์ด๋ฒคํŠธ-๊ธฐ๋ฐ˜์˜ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ด๋‹นํ•˜์—ฌ
    ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ, ์Šค์ผ€์ฅด ๊ด€๋ฆฌ ๋“ฑ์˜ ์ผ๋“ค์„ ๋‹ด๋‹นํ•œ๋‹ค.
  • ์ฆ‰, ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ๊ธฐ๋ฐ˜์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๊ณ  JavaScript๋กœ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ฉด ๋’ท๋‹จ์˜ ์ผ(Heavy Load)๋“ค์„ Chrome V8 ์—”์ง„์ด ์•Œ์•„์„œ ์ฒ˜๋ฆฌํ•ด์ฃผ์–ด ์•ˆ์ •์„ฑ ์žˆ๋Š” ์•ฑ์„ ์„ค๊ณ„ํ•  ์ˆ˜ ์žˆ๋‹ค.

2_3. ๋…ธ๋“œ ํ™˜๊ฒฝ์—์„œ ์ด๋ฒคํŠธ๋Š” ํ•˜๋‚˜์˜ ์š”์ฒญ์ด๋‹ค.

  • ํ•œ๊ฐœ์˜ ์š”์ฒญ= ๋ฐฑ์—”๋“œ ์„œ๋ฒ„๋ฅผ ๊ตฌํ˜„ํ•  ๋•Œ ์“ฐ๋Š” ํ•œ๊ฐœ์˜ HTTP Request
  • ์ฆ‰, ๋…ธ๋“œ์—๊ฒŒ ์ด๋ฒคํŠธ๋ž€ ํ”„๋ก ํŠธ์—”๋“œ(ํด๋ผ์ด์–ธํŠธ)์—๊ฒŒ ๋ฐ›๋Š” ์š”์ฒญ
  • ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ ‡๊ฒŒ ํ•œ ์‹œ์ ์— ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๋„๋ก ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋งŒ๋“ ๊ฑด ๋ฌด์—‡ ๋•Œ๋ฌธ์ผ๊นŒ๐Ÿค” ?

2_4. Node.js๋Š” ๋น„๋™๊ธฐ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌ์กฐ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค.

  • ์„œ๋ฒ„๋ฅผ ํ•˜๋‚˜์˜ ์Œ์‹์ ์ด๋ผ๊ณ  ๋น„์œ ํ•ด๋ณด์ž. ์ด ์Œ์‹์ ์—๋Š” ์„œ๋น™์„ ํ•˜๋Š” ์•Œ๋ฐ”์ƒ๊ณผ ์š”๋ฆฌํ•˜๋Š” ์š”๋ฆฌ์‚ฌ๊ฐ€ ํ•œ ๋ช…์”ฉ ์กด์žฌํ•œ๋‹ค.

1> ๋™๊ธฐ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌ์กฐ์—์„œ๋Š” 1) ์†๋‹˜์ด ๋“ค์–ด์™€์„œ ์ฃผ๋ฌธ์„ ํ•˜๊ฒŒ๋˜๋ฉด(์š”์ฒญ) 2) ์ฃผ๋ฌธ์„ ๋ฐ›๋Š” ์•Œ๋ฐ”์ƒ์€ ์†๋‹˜์˜ ์ฃผ๋ฌธ์„ ๋ฐ›๊ณ  ์ฃผ๋ฐฉ์žฅ์—๊ฒŒ ๋Œ์•„๊ฐ€ ์ฃผ๋ฌธํ•œ ๋‚ด์šฉ์„ ์ „๋‹ฌํ•˜๊ณ  ์š”๋ฆฌ์‚ฌ๊ฐ€ ์š”๋ฆฌ๋ฅผ ์™„์„ฑํ•˜์—ฌ ์•Œ๋ฐ”์ƒ์ด ์Œ์‹์„ ๋ฐ›์•„ ์†๋‹˜์—๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์ „(์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต)๊นŒ์ง€ ๋‹ค๋ฅธ ์†๋‹˜๋“ค์€ ๋ฌด์ž‘์ • ๊ธฐ๋‹ค๋ ค์•ผํ•˜๋งŒ ํ•˜๋Š” ๊ตฌ์กฐ์ด๋‹ค.
=> ์ฆ‰, ์†๋‹˜์ด ์ฃผ๋ฌธ(์š”์ฒญ)์„ ํ•˜๋ฉด ์ด ์š”์ฒญ์— ๋Œ€ํ•œ ์‘๋‹ต์ด ๋๋‚  ๋•Œ๊นŒ์ง€ ์•„๋ฌด๊ฒƒ๋„ ํ•  ์ˆ˜ ์—†๋Š” ์ƒํ™ฉ์ด๋‹ค.
2> ๋ฐ˜๋ฉด Node.js๋Š” ๋น„๋™๊ธฐ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๊ตฌ์กฐ๋กœ 1) ์†๋‹˜์ด ๋“ค์–ด์™€ ์ฃผ๋ฌธํ•˜๊ฒŒ(์š”์ฒญ)๋˜๋ฉด 2) ์•Œ๋ฐ”์ƒ์€ ์†๋‹˜์˜ ์ฃผ๋ฌธ์„ ๋ฐ›์•„ ์ฃผ๋ฐฉ์žฅ์—๊ฒŒ ์•Œ๋ ค์ฃผ๊ณ  ์ฃผ๋ฐฉ์žฅ์ด ์—ด์‹ฌํžˆ ์š”๋ฆฌ๋ฅผ ํ•˜๋Š” ๋™์•ˆ 3) ๋‹ค๋ฅธ ์†๋‹˜์ด ์™€์„œ ์ฃผ๋ฌธ(์š”์ฒญ)์„ ํ•ด๋„ ์•Œ๋ฐ”์ƒ์€ ๋‹ค๋ฅธ ์†๋‹˜์—๊ฒŒ ๊ฐ€์„œ ์ฃผ๋ฌธ์„(์š”์ฒญ)์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋Š” ๊ตฌ์กฐ์ด๋‹ค.
=> ์ฆ‰, Node.js์—์„œ ์•Œ๋ฐ”์ƒ์ด ์ด๋ ‡๊ฒŒ ๋น„๋™๊ธฐ์ ์œผ๋กœ ์ฃผ๋ฌธ(์š”์ฒญ=์ด๋ฒคํŠธ)์„ ์ฒ˜๋ฆฌํ•œ๋‹ค๋Š”๊ฑด ์•ž์„  ์†๋‹˜(ํด๋ผ์ด์–ธํŠธ)์˜ ์ฃผ๋ฌธ(์š”์ฒญ)์ด ๋๋‚˜๊ธฐ ์ „์— ๋‹ค์Œ ์†๋‹˜(ํด๋ผ์ด์–ธํŠธ) ์š”์ฒญ์„ ๋ฐ›์„ ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.

2_5. Node.js๋กœ ์ธ์Šคํƒ€๊ทธ๋žจ์˜ ๋ฐฑ์—”๋“œ API๋ฅผ ๊ตฌํ˜„ํ•ด๋ณด์ž

1> ํด๋ผ์ด์–ธํŠธ(์œ ์ €)๊ฐ€ ์ธ์Šคํƒ€๊ทธ๋žจ ์•ฑ์— ์ ‘์†ํ•˜๋ฉด, ๊ฒŒ์‹œ๋ฌผ์„ ์กฐํšŒํ•˜๋Š” API๋ฅผ ํ†ตํ•ด ๋…ธ๋“œ ์„œ๋ฒ„์— ์š”์ฒญํ•ฉ๋‹ˆ๋‹ค.
2> ์ธ์Šคํƒ€๊ทธ๋žจ ์•ฑ์„ ์ผœ๋Š” ๋ชจ๋“  ์œ ์ €๋“ค์€ ๊ฐ™์€ API์— ์š”์ฒญ์„ ๋ณด๋‚ด๊ฒŒ ๋˜๊ณ  Node.js ์ด ์š”์ฒญ๋“ค์„ ํ•ธ๋“ค๋งํ•œ๋‹ค.
3> ํ•˜๋‚˜์˜ ์š”์ฒญ์ด ๋“ค์–ด์™€ ์‘๋‹ต์„ ํด๋ผ์ด์–ธํŠธ์—๊ฒŒ ์ „ํ•ด์ง€๋Š” ๊ณผ์ •์—๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์€ ๋งŽ์€ ์ผ๋“ค์ด ์ผ์–ด๋‚œ๋‹ค.
3-1> ์š”์ฒญ๊ณผ ์‘๋‹ต์‚ฌ์ด์—์„œ ๊ฐ€๋ น ๋ฐ์ดํ„ฐ๋ฒ ์ด์Šค์— ์ €์žฅ๋˜์–ด ์žˆ๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ๊บผ๋‚ด ๊ฒŒ์‹œ๋ฌผ์„ ์กฐํšŒํ•˜๊ธฐ ์œ„ํ•ด ๋ฐ์ดํ„ฐ ๋ฒ ์ด์Šค์—์„œ 1> ๊ฒŒ์‹œ๊ธ€์— ๋‹ด๊ธด ์‚ฌ์ง„, 2> ์œ ์ €์˜ ์ •๋ณด, 3> ๋Œ“๊ธ€ ์ •๋ณด๋ฅผ ์กฐํšŒํ•˜๋ฉฐ ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ 4> ํ•˜๋‚˜์˜ ๊ฒŒ์‹œ๋ฌผ์ด ์•„๋‹Œ ์—ฌ๋Ÿฌ ๊ฒŒ์‹œ๋ฌผ ๋ชจ๋‘ ์ด๋Ÿฌํ•œ ๊ณผ์ •์„ ๊ฑฐ์ณ ์กฐํšŒํ•œ๋‹ค.
์ด๋ ‡๊ฒŒ ์ปดํ“จํ„ฐ์˜ ์ž์›์ด ๋งŽ์ด ๋“ค๊ณ  ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” Heavy Load ํ•œ ์ผ์€ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•˜์ง€ ์•Š๋Š”๋‹ค.

  • ๋…ธ๋“œ์˜ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋Š” C++๋กœ ์งœ์—ฌ์ง„ ์“ฐ๋ ˆ๋“œ ํ’€์— Heavy Load ํ•œ ์ผ์„ ๋งก๊ธฐ๊ณ  ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋Š” ๊ทธ์ € ์ด๋ฒคํŠธ(์š”์ฒญ)๋ฅผ ์ฒ˜๋ฆฌ(์‘๋‹ต)ํ•ด ์ฃผ๋Š” ์—ญํ• ๋งŒ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.
    => ์ด๋Ÿฌํ•œ ์ด์œ ๋กœ ์•ž์„œ ๋“  ์‹๋‹น์˜ ์˜ˆ์ฒ˜๋Ÿผ ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š๊ณ  ๋‹ค์Œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ Heavy Load ํ•œ ์ผ๋“ค์„ ๋’ท ๋‹จ์˜ ๋‚ด๋ถ€ C++ ์“ฐ๋ ˆ๋“œ ํ’€์ด ๋‹ด๋‹นํ•˜๊ณ  ์žˆ๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.
    => ๋”ฐ๋ผ์„œ ๋…ธ๋“œ์˜ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋Š” ์—ฌ๋Ÿฌ ์š”์ฒญ์„ ํ•œ ์‹œ์ ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
    => C++ ์“ฐ๋ ˆ๋“œ ํ’€์ด Heavy Load๋ฅผ ๊ฐ๋‹นํ•˜์—ฌ ๋…ธ๋“œ์˜ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋Š” ๋ฐฉํ•ด ๋ฐ›์ง€ ์•Š๊ณ  ํด๋ผ์ด์–ธํŠธ์˜ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” ๊ฒƒ

*๐Ÿ’กconclusion

  • ๋น„๋™๊ธฐ: ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Œ
  • ์ด๋ฒคํŠธ-๊ธฐ๋ฐ˜: ์‹ฑ๊ธ€-์Šค๋ ˆ๋“œ
  • JavaScript ๋Ÿฐํƒ€์ž„ ํ™˜๊ฒฝ: C++ Chrome V8 ์—”์ง„
  • ์ด ์„ธ ๊ฐ€์ง€๊ฐ€ ์ดํ•ด๋˜๋ฉด ์ด๋ฒˆ ์ฃผ๋ง ์ž์•„์•Œ ๋ณด๋‚ธ ๊ฒƒ!

#๐Ÿ“‘Study Source

profile
์ž๊ธฐ ์‹ ๋ขฐ์˜ ํž˜์„ ๋ฏฟ๊ณ  ์‹ค์ฒœํ•˜๋Š” ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๊ณ ์žํ•ฉ๋‹ˆ๋‹ค.

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