1>์๋ฐ์คํฌ๋ฆฝํธ์ โ ๋๊ธฐ/๋น๋๊ธฐ์ ๋ํด์ ๊ณต๋ถํ๊ณ 2>Node.Js์ ์ ์์ธ '๋น๋๊ธฐ ์ด๋ฒคํธ ๊ธฐ๋ฐ์ ์๋ฐ์คํฌ๋ฆฝํธ ๋ฐํ์'์ ๋ํด์ ์ดํดํด๋ณด์
<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> ๋ธ๋ก๊ทธ ๊ธ ์์ฑ)๋ก ๋์ด๊ฐ ์ ์์์ ์๋ฏธํ๋ค.
<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>
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> ๋ธ๋ก๊ทธ ๊ธ์ ์ฐ๋ ๊ฒ์ผ๋ก ๋ง๋ฌด๋ฆฌํ๋ฉด์
๋ ธ์ ์ ์ฝ๊ณ ์ดํดํ๋ฉด์ ๋์์ ๋๋จธ์ง ํ์ต ์๋ฃ๋ค๋ ํ์ตํ ์ ์๊ฒ ๋๋ค.- ๋ฐ๋ผ์
๋น๋๊ธฐ์
์ผ๋ก ์ผ์ ์ํํ๋ค๋ ๊ฑด ์ด์ ์์ ์ ๋ง๋ฌด๋ฆฌ ์ฌ๋ถ(๋ ธ์ ์ ๋ค ์ฝ์ ๋๊น์ง ๊ธฐ๋ค๋ฆด ํ์์์ด)์ ์๊ด์์ด ๊ทธ ๋ค์ ์ผ์ ์ฒ๋ฆฌํ ์ ์๋ ์์ ๋ฐฉ์์ ์๋ฏธํ๋ค.
Node.js
๋ ๋น๋๊ธฐ(Asynchronous) ์ด๋ฒคํธ-๊ธฐ๋ฐ(event-driven) JavaScript ๋ฐํ์ ํ๊ฒฝ์ด๋ค.
์ง๊ธ๋ถํฐ ์ด Node.js์ ์ ์์ ๋ํด์ ์ดํดํด๋ณด๋๋ก ํด๋ณด์.
JavaScript ๋ฐํ์ ํ๊ฒฝ
์ด๋ JavaScript๋ก ์ง์ฌ์ง ์์ค์ฝ๋๋ฅผ CPU๊ฐ ์ดํดํ ์ ์๋ ๊ธฐ๊ณ์ด(ex. 0๊ณผ 1๋ก ์ด๋ฃจ์ด์ง bytecode)๋ก ๋ณํ์ํค๊ณ ๋ํ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๊ด๋ฆฌํ๋ ์์คํ ์ด๋ค.
์น ๋ธ๋ผ์ฐ์
์ ์๋ฐ์คํฌ๋ฆฝํธ ํต์ญ๊ธฐ, ์ฆ์๋ฐ์คํฌ๋ฆฝํธ ์์ง
์ด ์กด์ฌํ์ฌ ์๋ฐ์คํฌ๋ฆฝํธ ์ธ์ด๋ฅผ ๋จธ์ ์ฝ๋(๊ธฐ๊ณ์ด)๋ก ๋ณํํด์ค๋ค.- ์ด๋ ๊ฒ ์น๋ธ๋ผ์ฐ์ ๋ด์์ JS๋ฅผ ์ธ ์ ์๋ ์ด์ ๊ฐ ๋ฐ๋ก ๋ธ๋ผ์ฐ์ ๋ด์ JS ์์ง(=ํต์ญ๊ธฐ) ์กด์ฌํ๊ธฐ ๋๋ฌธ์ด๋ฉฐ ์ด๋ก์ ์ปดํจํฐ๋ 1> ๋จธ์ ์ฝ๋๋ฅผ ์ดํดํ ๋ฟ๋ง ์๋๋ผ 2> ์๋ฐ์คํฌ๋ฆฝํธ๋ฅผ HTML์ ๋ณํํ๊ธฐ์ํ ๋ฐฉ์์ผ๋ก๋ ์ฌ์ฉํ ์ ์๋ค.
Chrome V8 ์์ง
(= ์๋ฐ์คํฌ๋ฆฝํธ ์์ง)
- ํ ๊ฐ๋ฐ์๊ฐ ์น ๋ธ๋ผ์ฐ์ ๋ฐ๊นฅ์์ JS ๊ธฐ๋ฐ์ ์ธ์ด๋ฅผ ์ฌ์ฉํ ์ ์์ผ๋ฉด ์ ๋ง ํธ๋ฆฌํ๊ฒ ๋ค๋ ์๊ฐ์ ์์์ผ๋ก
Chrome V8, ์๋ฐ์คํฌ๋ฆฝํธ ์์ง
์ ๋ผ์ด๋ค๊ฐ ์ธ๋ถ ํ๋ก๊ทธ๋จ์๊ฒ ์ด์ํ๊ฒ ๋์ด ํ์ํ ํํ๊ฐ ๋ฐ๋กNode.js
์ด๋ค.- ์ฆ,
Chrome V8 ์์ง
์ ๊ตฌ๊ธ์ ํฌ๋กฌ ์น๋ธ๋ผ์ฐ์ ์์ ์๋ํ๋ ์์ง์ผ๋กChrome V8 ์์ง
์ด ๋ธ๋ผ์ฐ์ ์์ด(๋ธ๋ผ์ฐ์ ๋ฐ์์๋) JS๋ฅผ ์ฌ์ฉ(์๋)ํ ์ ์๋๋ก ๋ง๋ ํ๊ฒฝ์ด ๋ฐ๋กNode.js
**์ด๋ค.
Chrome V8 ์์ง
์ด **๋น๋๊ธฐ ์ด๋ฒคํธ-๊ธฐ๋ฐ์ ์ฒ๋ฆฌ๋ฅผ ๋ด๋นํ์ฌ
๋ฉ๋ชจ๋ฆฌ ๊ด๋ฆฌ, ์ค์ผ์ฅด ๊ด๋ฆฌ ๋ฑ์ ์ผ๋ค์ ๋ด๋นํ๋ค.- ์ฆ,
์ฑ๊ธ ์ค๋ ๋
๊ธฐ๋ฐ์ ๋์ ์๋ฆฌ๋ฅผ ์ดํดํ๊ณ JavaScript๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ท๋จ์ ์ผ(Heavy Load)
๋ค์Chrome V8
์์ง์ด ์์์ ์ฒ๋ฆฌํด์ฃผ์ด ์์ ์ฑ ์๋ ์ฑ์ ์ค๊ณํ ์ ์๋ค.
์ด๋ฒคํธ
๋ ํ๋์ ์์ฒญ
์ด๋ค.
- ํ๊ฐ์
์์ฒญ
= ๋ฐฑ์๋ ์๋ฒ๋ฅผ ๊ตฌํํ ๋ ์ฐ๋ ํ๊ฐ์HTTP Request
- ์ฆ,
๋ ธ๋
์๊ฒ์ด๋ฒคํธ
๋ ํ๋ก ํธ์๋(ํด๋ผ์ด์ธํธ)์๊ฒ ๋ฐ๋ ์์ฒญ
์์ฒญ
์ ์ํํ ์ ์๋๋ก ๊ฐ๋ฅํ๊ฒ ๋ง๋ ๊ฑด ๋ฌด์ ๋๋ฌธ์ผ๊น๐ค ?1>
๋๊ธฐ์ฑ ํ๋ก๊ทธ๋๋ฐ ๊ตฌ์กฐ
์์๋ 1) ์๋์ด ๋ค์ด์์ ์ฃผ๋ฌธ์ ํ๊ฒ๋๋ฉด(์์ฒญ) 2) ์ฃผ๋ฌธ์ ๋ฐ๋ ์๋ฐ์์ ์๋์ ์ฃผ๋ฌธ์ ๋ฐ๊ณ ์ฃผ๋ฐฉ์ฅ์๊ฒ ๋์๊ฐ ์ฃผ๋ฌธํ ๋ด์ฉ์ ์ ๋ฌํ๊ณ ์๋ฆฌ์ฌ๊ฐ ์๋ฆฌ๋ฅผ ์์ฑํ์ฌ ์๋ฐ์์ด ์์์ ๋ฐ์ ์๋์๊ฒ ์ ๋ฌํ๊ธฐ ์ (์์ฒญ์ ๋ํ ์๋ต)๊น์ง ๋ค๋ฅธ ์๋๋ค์ ๋ฌด์์ ๊ธฐ๋ค๋ ค์ผํ๋ง ํ๋ ๊ตฌ์กฐ์ด๋ค.
=> ์ฆ, ์๋์ด ์ฃผ๋ฌธ(์์ฒญ)์ ํ๋ฉด ์ด ์์ฒญ์ ๋ํ ์๋ต์ด ๋๋ ๋๊น์ง ์๋ฌด๊ฒ๋ ํ ์ ์๋ ์ํฉ์ด๋ค.
2> ๋ฐ๋ฉดNode.js๋ ๋น๋๊ธฐ์ฑ ํ๋ก๊ทธ๋๋ฐ ๊ตฌ์กฐ
๋ก 1) ์๋์ด ๋ค์ด์ ์ฃผ๋ฌธํ๊ฒ(์์ฒญ)๋๋ฉด 2) ์๋ฐ์์ ์๋์ ์ฃผ๋ฌธ์ ๋ฐ์ ์ฃผ๋ฐฉ์ฅ์๊ฒ ์๋ ค์ฃผ๊ณ ์ฃผ๋ฐฉ์ฅ์ด ์ด์ฌํ ์๋ฆฌ๋ฅผ ํ๋ ๋์ 3) ๋ค๋ฅธ ์๋์ด ์์ ์ฃผ๋ฌธ(์์ฒญ)์ ํด๋ ์๋ฐ์์ ๋ค๋ฅธ ์๋์๊ฒ ๊ฐ์ ์ฃผ๋ฌธ์(์์ฒญ)์ ๋ฐ์ ์ ์๋ ๊ตฌ์กฐ์ด๋ค.
=> ์ฆ,Node.js
์์ ์๋ฐ์์ด ์ด๋ ๊ฒ๋น๋๊ธฐ์
์ผ๋ก์ฃผ๋ฌธ(์์ฒญ=์ด๋ฒคํธ)
์ ์ฒ๋ฆฌํ๋ค๋๊ฑด ์์ ์๋(ํด๋ผ์ด์ธํธ)์ ์ฃผ๋ฌธ(์์ฒญ)์ด ๋๋๊ธฐ ์ ์ ๋ค์ ์๋(ํด๋ผ์ด์ธํธ)์์ฒญ
์ ๋ฐ์ ์ ์๋ค๋ ๊ฒ์ด๋ค.
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
๋ฅผ ๊ฐ๋นํ์ฌ ๋ ธ๋์์ฑ๊ธ ์ค๋ ๋
๋ ๋ฐฉํด ๋ฐ์ง ์๊ณ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ ์ฒ๋ฆฌํ ์ ์๋ ๊ฒ
- ๋น๋๊ธฐ: ๊ธฐ๋ค๋ฆฌ์ง ์์
- ์ด๋ฒคํธ-๊ธฐ๋ฐ: ์ฑ๊ธ-์ค๋ ๋
- JavaScript ๋ฐํ์ ํ๊ฒฝ: C++ Chrome V8 ์์ง
- ์ด ์ธ ๊ฐ์ง๊ฐ ์ดํด๋๋ฉด ์ด๋ฒ ์ฃผ๋ง ์์์ ๋ณด๋ธ ๊ฒ!
- ์์ฝ๋ ๋ ธ์ ์ ์๋ 4์ฃผ์ฐจ ๋ ธ๋ JS ๋ด์ฉ ์ค
- ์ ํ๋ธ Programming with Mosh ์์ ์จ ๊ฐ์ ์ค -https://www.youtube.com/channel/UCWv7vMbMWH4-V0ZXdmDpPBA