2020/09 4

๋ณ„ ์ฐ๊ธฐ

์ฒ˜์Œ๋ถ€ํ„ฐ ์‹œ์ž‘ํ•˜๋Š” ์•Œ๊ณ ๋ฆฌ์ฆ˜ ํ•™์›์„ ์ˆ˜๋ฃŒํ–ˆ์ง€๋งŒ ์•Œ๊ณ ๋ฆฌ์ฆ˜์ด๋‚˜ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ๋‚ด ์ž…์œผ๋กœ ๋งํ•  ์ˆ˜ ์—†๋Š”๋ฐ ๊ฐœ๋ฐœ์ž๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์„๊นŒ? ํ•™์›์„ ๋‹ค๋‹ˆ๋ฉด์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉฐ ๊ธฐ๋Šฅ์„ ๋งŒ๋“ค ๋•Œ ๊ฐ€์žฅ ํž˜๋“ค์—ˆ๋˜ ์ ์€ ๋‚ด๊ฐ€ ์ง  ์ฝ”๋“œ์ด์ง€๋งŒ ํŒ€์›๋“ค์—๊ฒŒ ๋ช…ํ™•ํ•˜๊ฒŒ ์„ค๋ช…ํ•  ์ˆ˜ ์—†์„ ๋•Œ ์ •๋ง ๋‹ต๋‹ตํ•จ์„ ๋งŽ์ด ๋Š๊ผˆ๋‹ค. ํŠนํžˆ๋‚˜ ์ฝ”๋“œ์— ๋Œ€ํ•ด ์„ค๋ช…ํ•˜๋ฉด์„œ๋„ ๋‚ด ๋ง์ด ๋‚˜ ์กฐ์ฐจ๋„ ์ดํ•ด๊ฐ€ ์•ˆ ๋  ๋•Œ๋Š” ์ •๋ง ๋ฏธ์ณ๋ฒ„๋ฆฌ๋Š” ์ค„ ์•Œ์•˜๋‹ค. ๊ทธ๋ž˜์„œ ๊ตญ๋น„ ํ•™์›์„ ๋‹ค๋‹ˆ๋Š” ์•ฝ 6๊ฐœ์›”์ด๋ผ๋Š” ์‹œ๊ฐ„ ๋‚ด๋‚ด ์•Œ๊ณ ๋ฆฌ์ฆ˜, ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•œ ๋ฐฐ์›€์˜ ๊ฐˆ๋ง์ด ์ •๋ง ์ปธ๋‹ค. ๋˜ํ•œ ๋‚ด๊ฐ€ ๋‚ด ์ž…์œผ๋กœ "์ € ๊ฐœ๋ฐœ์ž์˜ˆ์š”!"๋ผ๊ณ  ๋งํ•  ์ˆ˜ ์žˆ์œผ๋ ค๋ฉด ์•Œ๊ณ ๋ฆฌ์ฆ˜๊ณผ ์ž๋ฃŒ๊ตฌ์กฐ์— ๋Œ€ํ•ด ํŒŒ์•…ํ•˜๊ณ  ์žˆ์–ด์•ผ ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ–ˆ๊ณ , ๋‚ด๊ฐ€ ๋” ์ข‹์€ ๊ณณ์œผ๋กœ ์ทจ์—…ํ•˜๊ณ  ์—„์ฒญ๋‚œ ์˜ํ–ฅ๋ ฅ์„ ๊ฐ€์ง„ ๊ฐœ๋ฐœ์ž๊ฐ€ ๋˜๋ ค๋ฉด ๋‹น์—ฐ ํ•„์ˆ˜๋ผ๊ณ  ์ƒ๊ฐํ–ˆ๋‹ค. ..

Algorithm 2020.09.29

Node.js ์ดํ•ดํ•˜๊ธฐ - ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ

๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ Javascript ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ด๋‹ค. Node.js ๊ณต๋ถ€๋ฅผ ์‹œ์ž‘ํ•œ ์ง€ 3์ผ ์ฐจ์ด๋‹ค. ์•ž์„œ ๊ณต๋ถ€ํ•œ ๋น„๋™๊ธฐ ๋…ผ ๋ธ”๋กœํ‚น I/O ๋ชจ๋ธ๊ณผ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์„ ํ†ตํ•ด Node.js ๊ฐ€ ์–ด๋–ค ์‹œ์Šคํ…œ์„ ๊ฐ€์ง€๊ณ  ์ž‘๋™ํ•˜๋Š”์ง€ ๊ฐ์„ ์žก์„ ์ˆ˜ ์žˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์•„์ง ๋ถ€์กฑํ•œ ๋ถ€๋ถ„์ด ์žˆ๋Š”๋ฐ, ์œ„์˜ ๋‘ ๋ถ€๋ถ„์„ ๊ณต๋ถ€ํ•˜๋ฉด์„œ Javascript ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋ผ๋Š” ๋ง์ด ๊ต‰์žฅํžˆ ๋งŽ์ด ๋‚˜์™”๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ๋Š” ๋ญ๊ณ , ๋” ๊นŠ์ด ๋“ค์–ด๊ฐ€์„œ ์Šค๋ ˆ๋“œ์˜ ์ •์˜๋Š” ๋ฌด์—‡์ผ๊นŒ? ์˜ค๋Š˜์€ ๊ทธ ์Šค๋ ˆ๋“œ์— ๋Œ€ํ•ด์„œ ๊ณต๋ถ€ํ•˜๋Š” ์‹œ๊ฐ„์„ ๊ฐ€์ง€๋ ค๊ณ  ํ•œ๋‹ค. ์Šค๋ ˆ๋“œ? ์š”์ฆ˜ ์ธํ„ฐ๋„ท ๋ฐˆ์œผ๋กœ ๋– ๋„๋Š” ์‚ฌ์ง„ ํ•œ ์žฅ์ด ์žˆ๋‹ค. ์œ„์˜ ์‚ฌ์ง„์—์„œ ๋…ธ์˜ˆ๋ผ๋Š” ์˜ˆ๊ฐ€ ์ข€ ๋งž์ง€๋Š” ์•Š๊ฒ ์ง€๋งŒ ์Šค๋ ˆ๋“œ๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ํ”„๋กœ์„ธ์Šค๋ผ๋Š” ๊ฒƒ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ํ”„๋กœ์„ธ์Šค? ํ”„๋กœ์„ธ์Šค๋ผ๋Š” ๊ฒƒ์€..

Programming/Node.js 2020.09.27

Node.js ์ดํ•ดํ•˜๊ธฐ - ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ

๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ ํ”„๋กœ์ ํŠธ๋ฅผ ์ง„ํ–‰ํ•˜๋ฉด์„œ ๋งŽ์€ ๋น„๋™๊ธฐ๋“ค์„ ์–ด๋– ํ•œ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ตฌํ˜„ํ•˜์˜€๋Š”๋ฐ, ์™œ ๋น„๋™๊ธฐ ์‹œ์Šคํ…œ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์‚ฌ์šฉํ•ด์•ผ๋งŒ ํ• ๊นŒ? ๊ทธ๋ ‡๋‹ค๋ฉด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๊ฐ€ ๋Œ์•„๊ฐ€๋Š” ๊ณผ์ •์€ ์–ด๋–ป๊ฒŒ ๊ตฌ์„ฑ๋˜์–ด ์žˆ์„๊นŒ? ์–ด์ œ ๊ณต๋ถ€ํ•œ ๋‚ด์šฉ์„ ๋‹ค์‹œ ์‚ดํŽด๋ณด๋ฉด, Node.js ๋Š” V8 ์—”์ง„๊ณผ libuv๋กœ ๊ตฌ์„ฑ๋˜์–ด ์žˆ๊ณ , libuv๋Š” ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ, ๋น„๋™๊ธฐ ๋…ผ ๋ธ”๋กœํ‚น I/O ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ์˜ค๋Š˜์€ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ์‹œ์Šคํ…œ์— ๋Œ€ํ•ด ๊ณต๋ถ€ํ•ด๋ณด๋ ค๊ณ  ใ„ดใ„ดใ…ˆํ•œ๋‹ค. ์ด๋ฒคํŠธ? ์ด๋ฒคํŠธ๋Š” ์‹œ์Šคํ…œ ํ•˜๋“œ์›จ์–ด๋‚˜ ์†Œํ”„ํŠธ์›จ์–ด ์ƒํƒœ์˜ ๋ณ€ํ™”๋ผ๋Š” ์˜๋ฏธ๋ฅผ ๊ฐ€์ง„๋‹ค. ์ด๋ฒคํŠธ๋Š” ์‚ฌ์šฉ์ž์˜ ํด๋ฆญ, ๋งˆ์šฐ์Šค์˜ ์›€์ง์ž„, ํ‚ค๋ณด๋“œ ์ž…๋ ฅ์ด๋‚˜ ์›น ํŽ˜์ด์ง€์˜ ํŠน์ • ์˜์—ญ์œผ๋กœ์˜ ์ด๋™ ๋“ฑ ์™ธ๋ถ€์˜ ํ™˜๊ฒฝ์— ์˜ํ•ด ์ƒ์„ฑ๋˜๊ฑฐ๋‚˜ ํ”„๋กœ๊ทธ๋žจ ๋กœ๋”ฉ๊ณผ ๊ฐ™์€ ์‹œ์Šคํ…œ์— ์˜ํ•ด ๋ฐœ..

Programming/Node.js 2020.09.26

Node.js ์ดํ•ดํ•˜๊ธฐ - ๋น„๋™๊ธฐ ๋…ผ ๋ธ”๋กœํ‚น I/O ๋ชจ๋ธ์— ๋Œ€ํ•ด

๋“ค์–ด๊ฐ€๊ธฐ์— ์•ž์„œ RESTful API? ๋น„๋™๊ธฐ? ์–˜๋„ค๋“ค์ด ๋„๋Œ€์ฒด ๋ญ์ง€ ? ์–ผ๋งˆ ์ „ ๊ตญ๋น„ ์ง€์› ํ•™์›์„ ์ˆ˜๋ฃŒํ–ˆ๋‹ค. ์šฐ๋ฆฌ ์กฐ๋Š” LMS์„ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•œ ํ€ด์ฆˆ ํ”Œ๋žซํผ์„ ๊ฐœ๋ฐœํ–ˆ๋Š”๋ฐ, ์œ ํ˜• ๋ณ„ ํ€ด์ฆˆ์— ๋Œ€ํ•œ CRUD๋ฅผ ์–ด๋–ป๊ฒŒ ์ฒ˜๋ฆฌํ•ด์•ผํ• ๊นŒ ๊ณ ๋ฏผ์„ ๋งŽ์ด ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌ๋ฉด์„œ ์ž์˜์ , ํƒ€์˜์ ์œผ๋กœ Ajax ๋ฅผ ์ด์šฉํ•ด์„œ ๋น„๋™๊ธฐ๋กœ ํ€ด์ฆˆ CRUD ๋ฅผ ๊ตฌํ˜„ํ•  ์ˆ˜๋ฐ–์— ์—†์—ˆ๋Š”๋ฐ JSON์ด๋‚˜ RestController์—์„œ JSON ๊ฐ์ฒด๋ฅผ RequestBody๋กœ ๋ฐ›์•„์•ผ ํ•˜๋Š” ์ด์œ ์— ๋Œ€ํ•œ ์ดํ•ด๊ฐ€ ๋ถ€์กฑํ•œ ์ƒํƒœ๋กœ ์–ต์ง€๋กœ ๊ตฌํ˜„ํ–ˆ๋‹ค. ๊ทธ๋Ÿฌํ•œ ์ด์œ ๋กœ ์ด๋ฒˆ ํ•™์›์—์„œ์˜ ๋งˆ์ง€๋ง‰ ํ”„๋กœ์ ํŠธ ๋•Œ๋ฌธ์— ์‹œ์ž‘ํ•œ Node.js ๊ณต๋ถ€ํ•˜๋ ค๊ณ  ํ•œ๋‹ค. Node.js ๋ž€ ๋ฌด์—‡์ธ๊ฐ€? Node.js ๋Š” ํ•ด๋‹น ๋ฌธ์„œ์—์„œ Chrome V8 Javascript ์—”์ง„์œผ๋กœ ๋นŒ๋“œ๋œ Javascrip..

Programming/Node.js 2020.09.26