์ธํŒŒ

You Can Become A

Progr

๋Šฆ๊ฒŒ ์‹œ์ž‘ํ•ด๋„ ๋ˆ„๊ตฌ๋“ ์ง€ ๋…ธ๋ ฅํ•˜๋ฉด ๊ฐœ๋ฐœ์ž๊ฐ€ ๋ ์ˆ˜ ์žˆ์–ด์š” !

Node

๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ์ •๋ฆฌํ•ฉ๋‹ˆ๋‹ค
Node

๐Ÿ“š require vs import ๋ฌธ๋ฒ• ๋น„๊ต (CommonJS vs ES6)

require vs import ๋ฌธ๋ฒ• ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœ์„ ํ•˜๋‹ค๋ณด๋ฉด ๋ชจ๋“ˆ์„ ๋ถˆ๋Ÿฌ์˜ค๋Š” ๋ฌธ๋ฒ• ๋‘๊ฐ€์ง€ ( require / exports ) ์™€ ( import / export ) ํ‚ค์›Œ๋“œ๋ฅผ ์ ‘ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ด ๋‘˜์€ ๋น„์Šทํ•˜๋ฉด์„œ๋„ ๋‹ฌ๋ผ ๊ฐ€๋” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐœ๋ฐœํ•˜๋Š”๋ฐ ์žˆ์–ด ํ˜ผ๋™์„ ์ค€๋‹ค. ๋‘˜๋‹ค ์™ธ๋ถ€์˜ ํŒŒ์ผ์ด๋‚˜ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ฝ”๋“œ๋ฅผ ๋ถˆ๋Ÿฌ์˜จ๋‹ค๋Š” ๊ฐ™์€ ๋ชฉ์ ์„ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ, ์ „ํ˜€ ๋‹ค๋ฅธ ๋ฌธ๋ฒ• ๊ตฌ์กฐ๋ฅผ ์ง€๋‹ˆ๊ณ  ์žˆ๋‹ค. ( require / exports ) ๋Š” NodeJS์—์„œ ์‚ฌ์šฉ๋˜๊ณ  ์žˆ๋Š” CommonJS ํ‚ค์›Œ๋“œ์ด๊ณ  Ruby ์–ธ์–ด ์Šคํƒ€์ผ๊ณผ ๋น„์Šทํ•˜๋‹ค๋ผ๊ณ  ๋ณผ์ˆ˜ ์žˆ๋‹ค. ( import / export ) ๋Š” ES6(ES2015)์—์„œ ์ƒˆ๋กญ๊ฒŒ ๋„์ž…๋œ ํ‚ค์›Œ๋“œ๋กœ์„œ Java๋‚˜ Python ์–ธ์–ด ๋ฐฉ์‹๊ณผ ๋น„์Šทํ•˜๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ์•„๋ž˜ 2์ค„์˜ ์ฝ”๋“œ๋Š” ๊ธฐ๋ณธ..

category_image
์ธํŒŒ_
2022.08.10
8
Node

[NODE] ๐Ÿ“š express-rate-limit ๋ชจ๋“ˆ - API ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œํ•˜๊ธฐ

API ์‚ฌ์šฉ๋Ÿ‰ ์ œํ•œํ•˜๊ธฐ ๋งŒ์ผ ์ธ์ฆ๋œ ์‚ฌ์šฉ์ž๊ฐ€ ๊ณผ๋„ํ•œ API ์‚ฌ์šฉ์„ ํ•˜๊ฒŒ ๋˜๋ฉด API ์„œ๋ฒ„์— ๋ฌด๋ฆฌ๊ฐ€ ๊ฐˆ ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ DOS๊ณต๊ฒฉ์—๋„ ๋Œ€๋น„ํ•ด์•ผ ๋˜๋Š”๋ฐ, DOS๋ž€ ์ง€์†์ ์œผ๋กœ ์„œ๋ฒ„์— ์š”์ฒญ์„ ๊ณผ๋„ํ•˜๊ฒŒ ํ•ด์„œ ์„œ๋ฒ„๋ฅผ ๋ง๊ฐ€๋œจ๋ฆฌ๋Š” ๊ฑธ ์˜๋ฏธํ•œ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, api์š”์ฒญ์„ ๊ณ„์† ์ƒˆ๋กœ๊ณ ์นจํ•ด์„œ ๋งˆ๊ตฌ๋งˆ๊ตฌ ์š”์ฒญํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ๊ฒŒ DOS๊ณต๊ฒฉ์ธ ์…ˆ์ด๋‹ค. ์ด๋ฅผ ๊ฐœ์ธ์ด ํ•˜์ง€์•Š๊ณ  ์ง‘๋‹จ์ด ๋‹จ์ฒด๋กœ ํ•˜๊ฒŒ๋˜๋ฉด, ํ•œ๋ฒˆ ์ฏค ๋“ค์–ด๋ณธ ๋””๋„์Šค ๊ณต๊ฒฉ์ด ๋ฐ”๋กœ ์ด๊ฑธ ์˜๋ฏธํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์ผ์ • ๊ธฐ๊ฐ„ ๋‚ด์— API๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ํšŸ์ˆ˜๋ฅผ ์ œํ•œํ•˜์—ฌ ์„œ๋ฒ„์˜ ํŠธ๋ž˜ํ”ฝ์„ ์ค„์ด๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ๊ฑฐ๊ธฐ๋‹ค ์œ ๋ฃŒ/๋ฌด๋ฃŒ ์„œ๋น„์Šค๋ฅผ ์šด์˜ํ•œ๋‹ค๊ณ  ํ•˜๋ฉด, ๊ณผ๊ธˆ ์ฒด๊ณ„๋ณ„๋กœ ํšŸ์ˆ˜์— ์ฐจ์ด๋ฅผ ๋‘˜ ์ˆ˜๋„ ์žˆ์„ ๊ฒƒ์ด๋‹ค. (๋ฌด๋ฃŒ ํšŒ์›์€ 100๋ฒˆ๋งŒ, ์œ ๋ฃŒ ํšŒ์›์€ 1000๋ฒˆ ์ด์šฉ๊ฐ€๋Šฅํ•˜๊ฒŒ ์„ค์ •) ์ด๋Ÿฌํ•œ ๊ธฐ๋Šฅ์€ expre..

category_image
์ธํŒŒ_
2022.01.15
4
Node

[NODE] ๐Ÿ“š API ์„œ๋ฒ„ ๋ฒ„์ „ ๊ด€๋ฆฌ ํ•˜๋Š” ๋ฐฉ๋ฒ•

API ์„œ๋ฒ„ ๋ฒ„์ ผ ๊ด€๋ฆฌ ๋ณดํ†ต API ์„œ๋ฒ„ ์†Œ์Šค์˜ ๋ผ์šฐํ„ฐ ๋ถ€๋ถ„์„ ๋ณด๋ฉด ํŒŒ์ผ์ด V1, V2 ์ด๋Ÿฐ์‹์œผ๋กœ ๋˜์–ด ์žˆ์„ ๊ฒƒ์ด๋‹ค. ๋ผ์šฐํ„ฐ์˜ ์ด๋ฆ„์ธ v1์€ ๋ฒ„์ „ 1์ด๋ผ๋Š” ๋œป์ด๋‹ค. ๋ผ์šฐํ„ฐ ํŒŒ์ผ ๋งˆ๋‹ค ๋ฒ„์ „์„ ๋ถ™์ด๋Š” ์ด์œ ๋Š” ํ•œ ๋ฒˆ ๋ฒ„์ „์ด ์ •ํ•ด์ง„ ์ดํ›„์—๋Š” ๋ผ์šฐํ„ฐ๋ฅผ ํ•จ๋ถ€๋กœ ์ˆ˜์ •ํ•˜๋ฉด ์•ˆ ๋˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์™œ๋ƒํ•˜๋ฉด ๋‹ค๋ฅธ ์‚ฌ๋žŒ์ด๋‚˜ ์„œ๋น„์Šค๊ฐ€ ๊ธฐ์กด API๋ฅผ ์“ฐ๊ณ  ์žˆ์Œ์„ ํ•ญ์ƒ ์—ผ๋‘์— ๋‘์–ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋”ฐ๋ผ์„œ ๊ธฐ์กด์˜ API ์„œ๋ฒ„์˜ ์ฝ”๋“œ๋ฅผ ๋ฐ”๊พธ๋ฉด, ์ด์ „ API๋ฅผ ์‚ฌ์šฉ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ๋“ค์ด ์˜ค์ž‘๋™ํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์—, ๊ธฐ์กด ์‚ฌ์šฉ์ž์—๊ฒŒ ์˜ํ–ฅ์„ ๋ฏธ์น  ์ •๋„๋กœ ์ˆ˜์ •ํ•ด์•ผ ํ•œ๋‹ค๋ฉด ๋ฒ„์ „์„ ์˜ฌ๋ฆฐ ๋ผ์šฐํ„ฐ๋ฅผ ์ƒˆ๋กœ ์ถ”๊ฐ€ํ•˜๊ณ , ์ด์ „ API๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ƒˆ๋กœ์šด API๊ฐ€ ๋‚˜์™”์Œ์„ ์•Œ๋ฆฌ๋Š” ๊ฒƒ์ด ์ข‹๋‹ค. ์ด๋ฅผ Deprecated ์ฒ˜๋ฆฌ ๋ผ๊ณ  ํ•œ๋‹ค. ๋˜ํ•œ ์ด์ „ API๋ฅผ..

category_image
์ธํŒŒ_
2022.01.15
1
Node

[NODE] ๐Ÿ“š API ์„œ๋ฒ„ ํ†ต์‹  ์ดํ•ดํ•˜๊ธฐ (JWT ํ† ํฐ ์‹ ์ฒญ/๋ฐœ๊ธ‰ ์ ˆ์ฐจ)

API(Application Programming Interface) : ๋‹ค๋ฅธ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์—์„œ ํ˜„์žฌ ํ”„๋กœ๊ทธ๋žจ์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ—ˆ์šฉํ•˜๋Š” ์ ‘์  ์ด ์žฅ์—์„œ๋Š” NodeBird ์•ฑ์˜ REST API ์„œ๋ฒ„๋ฅผ ๋งŒ๋“ ๋‹ค. API ์„œ๋ฒ„๋Š” ํ”„๋ŸฐํŠธ์—”๋“œ์™€ ๋ถ„๋ฆฌ๋˜์–ด ์šด์˜๋˜๋ฏ€๋กœ ๋ชจ๋ฐ”์ผ ์„œ๋ฒ„๋กœ๋„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค. ํŠนํžˆ JWT ํ† ํฐ์€ ๋ชจ๋ฐ”์ผ ์•ฑ๊ณผ ๋…ธ๋“œ ์„œ๋ฒ„ ๊ฐ„์— ์‚ฌ์šฉ์ž ์ธ์ฆ์„ ๊ตฌํ˜„ํ•  ๋•Œ ์ž์ฃผ ์‚ฌ์šฉ๋œ๋‹ค. ์›น API๋Š” ๋‹ค๋ฅธ ์›น ์„œ๋น„์Šค์˜ ๊ธฐ๋Šฅ์„ ์‚ฌ์šฉํ•˜๊ฑฐ๋‚˜ ์ž์›์„ ๊ฐ€์ ธ์˜ฌ ์ˆ˜ ์žˆ๋Š” ์ฐฝ๊ตฌ. ์œ„์™€ ๊ฐ™์€ ์„œ๋ฒ„์— API๋ฅผ ์˜ฌ๋ ค์„œ URL์„ ํ†ตํ•ด ์ ‘๊ทผํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋งŒ๋“  ๊ฒƒ์„ ์›น API ์„œ๋ฒ„๋ผ๊ณ  ํ•œ๋‹ค. ํ•„์š” ๋ชจ๋“ˆ UUID ๋ชจ๋“ˆ # npm npm install uuid # v4 ๋งŒ ์„ค์น˜ npm install uuid4 [NODE] ๐Ÿ“š UUID ๋ชจ๋“ˆ ..

category_image
์ธํŒŒ_
2022.01.15
3
Node

[NODE] ๐Ÿ“š crypto ๋ชจ๋“ˆ (๋‹จ๋ฐฉํ–ฅ / ์–‘๋ฐฉํ–ฅ) ์•”ํ˜ธํ™” ์›๋ฆฌ & ์‚ฌ์šฉ๋ฒ•

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

category_image
์ธํŒŒ_
2021.11.03
1
Node

[NODE] ๐Ÿ“š ๋…ธ๋“œ ํ™˜๊ฒฝ๋ณ€์ˆ˜(env) ๋‹ค๋ฃจ๊ธฐ

ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ž€? ์ผ๋ฐ˜์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์ฝ”๋“œ ๋ฒ ์ด์Šค๋Š” ํ•˜๋‚˜๋งŒ ๊ด€๋ฆฌํ•˜๊ณ , ๊ฐœ๋ฐœ, ํ…Œ์ŠคํŠธ, ์šด์˜ ๋“ฑ ์—ฌ๋Ÿฌ ํ™˜๊ฒฝ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ๋ฐฐํฌํ•˜๋Š”๋ฐ์š”. ์–ด๋Š ํ™˜๊ฒฝ์— ๋ฐฐํฌํ•˜๋Š๋ƒ์— ๋”ฐ๋ผ์„œ ๋‹ค๋ฅด๊ฒŒ ์„ค์ •ํ•ด์•ผํ•˜๋Š” ํ•ญ๋ชฉ์€ ๋ณดํ†ต ์šด์˜ ์ฒด์ œ ๋ ˆ๋ฒจ์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋ฅผ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๊ฒŒ ๋ฉ๋‹ˆ๋‹ค. ๋Œ€ํ‘œ์ ์ธ ์˜ˆ๋กœ, ๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋Š” ๋กœ์ปฌ DB๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š”๋ฐ, ์šด์˜ ํ™˜๊ฒฝ์—์„œ๋Š” ์›๊ฒฉ DB๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๊ฒฝ์šฐ๋ฅผ ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฟ๋งŒ ์•„๋‹ˆ๋ผ DB password๋‚˜ API key์™€ ๊ฐ™์€ ์ธ์ฆ ์ •๋ณด๋Š” ๊ณต๊ฐœ๋œ ์ฝ”๋“œ ์ €์žฅ์†Œ์— ์˜ฌ๋ฆฌ๋ฉด ์•ˆ ๋˜๊ธฐ ๋•Œ๋ฌธ์— ํ™˜๊ฒฝ ๋ณ€์ˆ˜๋กœ ์ €์žฅํ•ด๋†“๊ณ  ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž…๋‹ˆ๋‹ค. ํ™˜๊ฒฝ ๋ณ€์ˆ˜ ์ ‘๊ทผ Node.js์—์„œ ํ™˜๊ฒฝ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•  ๋•Œ๋Š” process.env๋ผ๋Š” ๋‚ด์žฅ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๊ฐ์ฒด๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. process๋Š” ์ „์—ญ ๊ฐ์ฒด์—ฌ์„œ ๋ณ„๋„๋กœ ์ž„ํฌํŠธํ•ด์•ผ..

category_image
์ธํŒŒ_
2021.11.03
(0)
Node

[NODE] ๐Ÿ“š ์ด๋ฒคํŠธ ๋ฃจํ”„ ๐Ÿ” setTimeout / setImmediate / process.nextTick ์ฐจ์ด์ 

Event loop ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” Node.js์˜ Main thread๋กœ, ๋‚ด๋ถ€์˜ ๊ฐ Phase๋ฅผ ๋Œ๋ฉด์„œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ ํ•ฉ๋‹ˆ๋‹ค. ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๊ฐ Phase๋Š” Queue๋กœ ์ด๋ฃจ์–ด์ ธ์žˆ์Šต๋‹ˆ๋‹ค. Queue์— ์šฐ๋ฆฌ๊ฐ€ ๋“ฑ๋กํ•œ Callback๋“ค์ด ์•Œ๋งž๊ฒŒ ๋‹ด๊ฒจ์„œ ์ž์‹ ์˜ ์‹คํ–‰์„ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋˜๋Š”๋ฐ์š”. ๊ฐ Phase๋Š” ์ž์‹  Queue์˜ ๋ชจ๋“  Job์„ ์ˆ˜ํ–‰ํ•˜๊ฑฐ๋‚˜, ์ œํ•œ ๊ฐฏ์ˆ˜๊นŒ์ง€ ์‹คํ–‰ํ•œ ํ›„์— ๋‹ค์Œ Phase๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. ์ด ์ค‘์—์„œ ์šฐ๋ฆฌ๋Š” timers, poll, check ๋‹จ๊ณ„๋งŒ ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. Phase ๋Œ€์ƒ ์ฒ˜๋ฆฌ ์ž‘์—… timer setTimeout(func, delay) setInterval(func, delay) delay๊ฐ€ ์ง€๋‚ฌ์œผ๋ฉด, ๋“ฑ๋ก๋œ Callback ์‹คํ–‰ poll I/O ๋Œ€๋ถ€๋ถ„์˜ Callback ์‹คํ–‰ ch..

category_image
์ธํŒŒ_
2021.11.01
3
Node

[NODE] ๐Ÿ“š ํด๋Ÿฌ์Šคํ„ฐ(cluster) ๋ชจ๋“ˆ - ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์„œ

Cluster ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ธ ๋…ธ๋“œ๊ฐ€ CPU ์ฝ”์–ด๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ๋ชจ๋“ˆ ํฌํŠธ๋ฅผ ๊ณต์œ ํ•˜๋Š” ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ ๊ฐœ ๋‘˜ ์ˆ˜ ์žˆ์Œ ์š”์ฒญ์ด ๋งŽ์ด ๋“ค์–ด์™”์„ ๋•Œ ๋ณ‘๋ ฌ๋กœ ์‹คํ–‰๋œ ์„œ๋ฒ„์˜ ๊ฐœ์ˆ˜๋งŒํผ ์š”์ฒญ์ด ๋ถ„์‚ฐ๋จ ์„œ๋ฒ„์— ๋ฌด๋ฆฌ๊ฐ€ ๋œ ๊ฐ ์ฝ”์–ด๊ฐ€ 8๊ฐœ์ธ ์„œ๋ฒ„๊ฐ€ ์žˆ์„ ๋•Œ: ๋ณดํ†ต์€ ์ฝ”์–ด ํ•˜๋‚˜๋งŒ ํ™œ์šฉ cluster๋กœ ์ฝ”์–ด ํ•˜๋‚˜๋‹น ๋…ธ๋“œ ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜๋ฅผ ๋ฐฐ์ • ๊ฐ€๋Šฅ ์„ฑ๋Šฅ์ด 8๋ฐฐ๊ฐ€ ๋˜๋Š” ๊ฒƒ์€ ์•„๋‹ˆ์ง€๋งŒ ๊ฐœ์„ ๋จ ๋‹จ์ : ์ปดํ“จํ„ฐ ์ž์›(๋ฉ”๋ชจ๋ฆฌ, ์„ธ์…˜ ๋“ฑ) ๊ณต์œ  ๋ชป ํ•จ. ๊ฐ๊ฐ ๋…๋ฆฝ์ ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋„์šฐ๋Š”๊ฑฐ๋ผ, ์„œ๋กœ ๊ณต์œ ๊ฐ€ ์•ˆ๋จ. -> Redis ๋“ฑ ๋ณ„๋„ ์„œ๋ฒ„๋กœ ํ•ด๊ฒฐ - ์›Œ์ปค ์“ฐ๋ ˆ๋“œ๋Š” ์“ฐ๋ ˆ๋“œ๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“œ๋Š” ๊ฑฐ๋ผ๋ฉด, (cpu์ž‘์—…์„ ๋ถ„๋‹ด) - ํด๋Ÿฌ์Šคํ„ฐ๋Š” ํ”„๋กœ์„ธ์Šค๋ฅผ ์—ฌ๋Ÿฌ๊ฐœ ๋งŒ๋“œ๋Š” ๊ฒƒ. (์„œ๋ฒ„๋ฅผ ์ฃผ๋กœ ์—ฌ๋Ÿฌ๊ฐœ ์‹คํ–‰) ๋งˆ์Šคํ„ฐ ํ”„๋กœ์„ธ์Šค๋Š” C..

category_image
์ธํŒŒ_
2021.11.01
(0)
Node

[NODE] ๐Ÿ“š child_process ๋ชจ๋“ˆ (๋‹ค๋ฅธ ์–ธ์–ดํ™˜๊ฒฝ ์ด์šฉ)

child_process ์•ž์„œ ๋ฐฐ์šด ์›Œ์ปค ์Šค๋ ˆ๋“œ๋Š” ๊ตฌํ˜„์ด ํž˜๋“ญ๋‹ˆ๋‹ค. ํ•˜์ง€๋งŒ, ๋…ธ๋“œ์—์„œ ๋‹ค๋ฅธ ์–ธ์–ด๋กœ ๋งŒ๋“  ์„œ๋ฒ„๋ฅผ ํ˜ธ์ถœ ํ•  ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค. ์‹ฑ๊ธ€์Šค๋ ˆ๋“œ์˜ ํ•œ๊ณ„์— ๋ด‰์ฐฉํ•˜์—ฌ, ๋…ธ๋“œ ์‚ฌ์šฉ์„ ์ฃผ์ €ํ• ๋•Œ ๋‹จ๋น„ ๊ฐ™์€ ๊ธฐ๋Šฅ์ž…๋‹ˆ๋‹ค. ์ฆ‰, ํ•˜๋“œํ•œ ์ž‘์—…์€ ๋‹ค๋ฅธ ์–ธ์–ด์—์„œ ์‹คํ–‰ํ•˜๋„๋กํ•˜๊ณ  ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋…ธ๋“œ ์„œ๋ฒ„๊ฐ€ ๋ฐ›์•„์„œ ๋‹ค์‹œ ๋ธŒ๋ผ์šฐ์ €๋กœ ์ „๋‹ฌํ•˜๋ฉด ์™„๋ฒฝํ•ฉ๋‹ˆ๋‹ค. const { exec } = require('child_process'); var process = exec('dir'); // ๋งˆ์น˜ ์šฐ๋ฆฌ๊ฐ€ ํ„ฐ๋ฏธ๋„์—์„œ dir๋ฅผ ์น˜๋Š” ๊ฑฐ์™€ ๊ฐ™์€ ์—ญํ• ์„ ํ•œ๋‹ค. // ๊ฒฐ๊ณผ๋ฌผ ์ถœ๋ ฅ์€ ๋ฐ˜๋“œ์‹œ ์šฐ๋ฆฌ๊ฐ€ ์ง์ ‘ ๊ตฌํ˜„ํ•ด์ค˜์•ผ ํ•œ๋‹ค. process.stdout.on('data', function (data) { console.log(data.toString()); }..

category_image
์ธํŒŒ_
2021.11.01
2
Node

[NODE] ๐Ÿ“š Worker_Threads ๋ชจ๋“ˆ (๋ฉ€ํ‹ฐ ์“ฐ๋ ˆ๋“œ ๊ตฌํ˜„)

Worker Thread ์ดํ•ดํ•˜๊ธฐ Node.js๊ฐ€ ์‹œ์ž‘๋˜๋ฉด, ๋‹ค์Œ์ด ์‹คํ–‰๋ฉ๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค : ์–ด๋””์„œ๋“  ์ ‘๊ทผ ๊ฐ€๋Šฅํ•œ ์ „์—ญ ๊ฐ์ฒด์ด์ž ๊ทธ ์ˆœ๊ฐ„ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ๊ฒƒ๋“ค์˜ ์ •๋ณด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํ”„๋กœ์„ธ์Šค ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ : ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋Š” ์ฃผ์–ด์ง„ ํ”„๋กœ์„ธ์Šค์—์„œ ์˜ค์ง ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ๋ช…๋ น๋งŒ์ด ์‹คํ–‰๋œ๋‹ค๋Š” ๋œป. ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ ๋ฃจํ”„ : ๋…ธ๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ๊ฐ€์žฅ ์ค‘์š”ํ•œ ๋ถ€๋ถ„ ์ค‘ ํ•˜๋‚˜์ž…๋‹ˆ๋‹ค. ์ด๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋‹จ์ผ ์Šค๋ ˆ๋“œ๋ผ๋Š” ์‚ฌ์‹ค์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ , ์–ธ์ œ๋“  ๊ฐ€๋Šฅํ•œ callback, promise, async/await ๋ฅผ ํ†ตํ•ด ์‹œ์Šคํ…œ ์ปค๋„์— ์ž‘์—…์„ offload ํ•˜๊ฒŒ ํ•ฉ๋‹ˆ๋‹ค. ์ด๋กœ์„œ ๋…ธ๋“œ๊ฐ€ ๋น„๋™๊ธฐ์‹, ๋น„์ฐจ๋‹จ I/O ์˜ ํŠน์„ฑ์„ ๊ฐ€์ง‘๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ js ์—”์ง„ ์ธ์Šคํ„ด์Šค : js ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ์ปดํ“จํ„ฐ ํ”„๋กœ๊ทธ๋žจ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ๋…ธ๋“œjs ์ธ์Šค..

category_image
์ธํŒŒ_
2021.11.01
5
Node

[NODE] ๐Ÿ“š ์˜ˆ์ธก ๋ถˆ๊ฐ€๋Šฅํ•œ ์—๋Ÿฌ ์ฒ˜๋ฆฌํ•˜๊ธฐ (uncaughtException)

๋…ธ๋“œ uncaughtException ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ try{} catch {} ๋กœ ๊ฐ์‹ธ๋Š” ๊ฒƒ์€ ๊ท€์ฐฎ์€ ์ผ์ด๋‹ค. ํ•˜์ง€๋งŒ ์ •๋ง ์–ด์ฉŒ๋‹ค๊ฐ€ ์˜ˆ๊ธฐ์น˜ ๋ชปํ•œ ์—๋Ÿฌ๊ฐ€ ๋‚˜์™€ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ธ ๋…ธ๋“œ๊ฐ€ ์ฃฝ์–ด๋ฒ„๋ ค ์„œ๋ฒ„๊ฐ€ ์•„์˜ˆ ๋‹ค์šด ๋˜๋Š” ํ˜„์ƒ์ด ์ƒ๊ธธ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Ÿฌํ•œ ์˜ˆ์ธกํ•˜์ง€ ๋ชปํ•œ ์—๋Ÿฌ๋ฅผ ๋ชจ์•„ catch๋กœ ํ•œ๋ฐฉ์— ์ฒ˜๋ฆฌํ• ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด ์žˆ๋‹ค. ๋‹จ, ์ตœํ›„์˜ ์ˆ˜๋‹จ์œผ๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๋™์ž‘์ด ๋ณด์žฅ๋˜์ง€ ์•Š์Œ ๋”ฐ๋ผ์„œ ๋ณต๊ตฌ ์ž‘์—…์šฉ์œผ๋กœ ์“ฐ๋Š” ๊ฒƒ์€ ๋ถ€์ ํ•ฉ ์—๋Ÿฌ ๋‚ด์šฉ ๊ธฐ๋ก ์šฉ์œผ๋กœ๋งŒ ์“ฐ๋Š” ๊ฒŒ ์ข‹์Œ // uncaughtException ์ด ๋ชจ๋“  ์—๋Ÿฌ๋ฅผ ์žก์•„์ฃผ์ง€๋Š” ์•Š์Œ. // ๋”ฐ๋ผ์„œ ์—ฌ๊ธฐ์— ๋ณต๊ตฌ ์ฝ”๋“œ๋ฅผ ๋„ฃ๋Š”๊ฑด ๋น„์ถ”์ฒœํ•จ. // ๋‹จ์ˆœํžˆ ์—๋Ÿฌ ๋ฐœ์ƒ ํ™•์ธ์šฉ์œผ๋กœ๋งŒ ์‚ฌ์šฉ process.on('uncaughtException', err => { conso..

category_image
์ธํŒŒ_
2021.11.01
(0)
Node

[NODE] ๐Ÿ“š https / http2 ๋ชจ๋“ˆ (๋ณด์•ˆ ๊ฐ•ํ™” ์„œ๋ฒ„)

๊ธฐ์กด http ์„œ๋ฒ„ const http = require('http'); http.createServer((req, res) => { res.writeHead(200, { 'Content-Type': 'text/html; charset=utf-8' }); res.write('Hello Node!'); res.end('Hello Server!'); }) .listen(8080, () => { // ์„œ๋ฒ„ ์—ฐ๊ฒฐ console.log('8080๋ฒˆ ํฌํŠธ์—์„œ ์„œ๋ฒ„ ๋Œ€๊ธฐ ์ค‘์ž…๋‹ˆ๋‹ค!'); }); http ssl ์„œ๋ฒ„ const https = require('https'); const fs = require('fs'); https.createServer({ // ์ธ์ฆ๊ธฐ๊ด€์œผ๋กœ๋ถ€ํ„ฐ ๋ฐœ๊ธ‰๋ฐ›์€ ์ธ์ฆ์„œ cert,key,caํŒŒ์ผ๋“ค..

category_image
์ธํŒŒ_
2021.11.01
(0)