javascript engines - Lee-hyuna/33-js-concepts-kr GitHub Wiki

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„๋“ค - ๊ฐœ๋ฐœ์ž๋ฅผ ์œ„ํ•œ ์ง€์นจ์„œ

์›๋ฌธ Javascript Engines

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

Javascript ์—”์ง„์€ ๋ณต์žกํ•œ ๊ธฐ์ˆ ์ด๋‹ค. ๊ฐ€๋Šฅํ•œํ•œ ์ตœ๋‹จ ์‹œ๊ฐ„์— ์ตœ์ ํ™” ๋œ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๋ ค๋Š” ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์„œ๋กœ ๋‹ค๋ฅธ ํ”Œ๋žซํผ์ด ์„œ๋กœ ๋‹ค๋ฅธ ์—”์ง„์„ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ ๋ฅผ ์•„๋Š” ๊ฒƒ์ด ํ•„์ˆ˜์ ์ด๋‹ค.

๊ฐ€์ƒ ๋จธ์‹ 

Javascript ์—”์ง„์€ ์ฃผ์–ด์ง„ ์ปดํ“จํ„ฐ ์‹œ์Šคํ…œ์˜ ๊ฐ€์ƒ ๋จธ์‹  ๋˜๋Š” ์†Œํ”„ํŠธ์›จ์–ด ๊ตฌ๋™ ์—๋ฎฌ๋ ˆ์ด์…˜ ์œ ํ˜•์œผ๋กœ ์ •์˜๋˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค. ๊ฐ€์ƒ ์ปดํ“จํ„ฐ์—๋Š” ๋‹ค์–‘ํ•œ ์œ ํ˜•์ด ์žˆ์œผ๋ฉฐ ์‹ค์ œ ์‹ค์ œ ์ปดํ“จํ„ฐ๋ฅผ ์—๋ฎฌ๋ ˆ์ด์…˜ํ•˜๊ฑฐ๋‚˜ ๋Œ€์ฒด ํ•  ์ˆ˜์žˆ๋Š” ๋ฐฉ๋ฒ•์— ๋”ฐ๋ผ ๋ถ„๋ฅ˜ ๋œ๋‹ค.

์˜ˆ๋ฅผ ๋“ค์–ด, ๊ฐ€์ƒ ๋จธ์‹  ์‹œ์Šคํ…œ์€ ์šด์˜ ์ฒด์ œ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๋Š” ํ”Œ๋žซํผ์˜ ์™„์ „ํ•œ ์—๋ฎฌ๋ ˆ์ด์…˜์„ ์ œ๊ณตํ•œ๋‹ค. Mac ์‚ฌ์šฉ์ž๋Š” Windows๋ฅผ Mac์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€์ƒ ๋จธ์‹  ์‹œ์Šคํ…œ์ธ Parallels๋ฅผ ๋“ค์–ด ๋ดค์„ ๊ฒƒ์ด๋‹ค.

๋ฐ˜๋ฉด์— ํ”„๋กœ์„ธ์Šค ๊ฐ€์ƒ ๋จธ์‹ ์€ ๋œ ๊ธฐ๋Šฅ์ ์ด๋ฉฐ ํ•˜๋‚˜์˜ ํ”„๋กœ๊ทธ๋žจ์ด๋‚˜ ํ”„๋กœ์„ธ์Šค๋งŒ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. Wine์€ Windows ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ Linux ์ปดํ“จํ„ฐ์—์„œ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” ํ”„๋กœ์„ธ์Šค ๊ฐ€์ƒ ๋จธ์‹ ์ด์ง€๋งŒ ์ „์ฒด Windows OS๋ฅผ Linux์—์„œ ์‹คํ–‰ํ•  ์ˆœ ์—†๋‹ค.

Javascript ์—”์ง„์€ Javascript ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋„๋ก ํŠน๋ณ„ํžˆ ์„ค๊ณ„๋œ ํ”„๋กœ์„ธ์Šค ๊ฐ€์ƒ ๋จธ์‹ ์˜ ์ผ์ข…์ด๋‹ค. ์›น ํŽ˜์ด์ง€๋ฅผ ๊ตฌ์„ฑํ•˜์—ฌ ๋ธŒ๋ผ์šฐ์ €์˜ ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋Š” ๋ ˆ์ด์•„์›ƒ ์—”์ง„๊ณผ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์‹คํ–‰ํ•˜๋Š”* ๋‚ฎ์€ ์ˆ˜์ค€์˜ Javascript ์—”์ง„*์„ ๊ตฌ๋ณ„ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด๋ž€ ๋ฌด์—‡์ธ๊ฐ€?

Javascript ์—”์ง„์˜ ๊ธฐ๋ณธ ์ž‘์—…์€ ๊ฐœ๋ฐœ์ž๊ฐ€ ์ž‘์„ฑํ•œ Javascript ์ฝ”๋“œ๋ฅผ ๋น ๋ฅด๊ฒŒ ๋ณ€ํ™˜ํ•˜๊ณ , ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋‚ด์žฅํ™” ํ•˜๊ฑฐ๋‚˜ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ํ•ด์„ ๊ฐ€๋Šฅํ•˜๋„๋ก ์ตœ์ ํ™” ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋ณด๋‹ค ์ •ํ™•ํ•˜๊ฒŒ, ๊ฐ Javascript ์—”์ง„์€ ECMAScript ๋ฒ„์ „์„ ๊ตฌํ˜„ํ•œ๋‹ค.์ด ๋ฒ„์ „์˜ Javascript๋Š” ๋ฐฉ์–ธ(?)์ด๋‹ค. ECMAScript๊ฐ€ ์ง„ํ™”ํ•˜๋ฉด Javascript ์—”์ง„๋„ ๋ฐœ์ „ํ•œ๋‹ค. ๊ฐ๊ธฐ ๋‹ค๋ฅธ ์›น ๋ธŒ๋ผ์šฐ์ €, ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” Node.js์™€ ๊ฐ™์€ ๋Ÿฐํƒ€์ž„์—์„œ ์ž‘๋™ํ•˜๋„๋ก ์„ค๊ณ„๋˜์—ˆ์œผ๋ฏ€๋กœ ๋งค์šฐ ๋‹ค์–‘ํ•œ ์—”์ง„์ด ์žˆ๋‹ค. ํ—ค๋“œ๋ฆฌ์Šค ๋ธŒ๋ผ์šฐ์ €๋Š” ๊ทธ๋ž˜ํ”ฝ ์‚ฌ์šฉ์ž ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€์—†๋Š” ์›น ๋ธŒ๋ผ์šฐ์ €๋กœ, ์›น ์ œํ’ˆ์— ๋Œ€ํ•œ ์ž๋™ ํ…Œ์ŠคํŠธ๋ฅผ ์‹คํ–‰ํ•˜๋Š” ๋ฐ ์œ ์šฉํ•˜๋‹ค. ์ข‹์€ ์˜ˆ๊ฐ€ PhantomJS์ด๋‹ค. Node.js๋Š” Javascript๋ฅผ ์„œ๋ฒ„ ์ธก์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜์žˆ๋Š” ๋น„๋™๊ธฐ์‹ ์ด๋ฒคํŠธ ๊ธฐ๋ฐ˜ ํ”„๋ ˆ์ž„์›Œํฌ์ด๋‹ค. ์ด๊ฒƒ๋“ค์€ Javascript๋กœ ๊ตฌ๋™๋˜๋Š” ๋„๊ตฌ์ด๊ธฐ ๋•Œ๋ฌธ์— Javascript ์—”์ง„์— ์˜ํ•ด ๊ตฌ๋™๋œ๋‹ค.

๋‹ค์–‘ํ•œ Javascript ์—”์ง„์„ ์‚ฌ์šฉํ•˜์—ฌ ํด๋ผ์ด์–ธํŠธ ์ธก ์ฝ”๋“œ๋ฅผ ํ•ด์„, ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ๋‹ค. ๋ธŒ๋ผ์šฐ์ € ๋ฒ„์ „์ด ์ƒˆ๋กœ์ด ์ถœ์‹œ๋˜๋ฉด Javascript ์—”์ง„์ด ์ตœ์ฒจ๋‹จ Javascript ์ฝ”๋“œ ์‹คํ–‰์„ ๋”ฐ๋ผ๊ฐˆ ์ˆ˜ ์žˆ๋„๋ก ๋ณ€๊ฒฝ๋˜๊ฑฐ๋‚˜ ์ตœ์ ํ™” ๋  ์ˆ˜ ์žˆ๋‹ค.

Javascript ์—”์ง„์€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ๊นŒ?

๊ฐ€์ƒ ๋จธ์‹ ์˜ ์ •์˜๋ฅผ ๊ฐ์•ˆํ•  ๋•Œ Javascript ์—”์ง„์„ ํ”„๋กœ์„ธ์Šค ๊ฐ€์ƒ ๋จธ์‹ ์ด๋ผ๊ณ  ๋ถ€๋ฅด๋Š” ๊ฒƒ์€ Javascript ์ฝ”๋“œ๋ฅผ ์ฝ๊ณ  ์ปดํŒŒ์ผํ•˜๋Š” ๊ฒƒ์ด ๋ชฉ์ ์ด๊ธฐ ๋•Œ๋ฌธ์— ์˜๋ฏธ๊ฐ€ ์žˆ๋‹ค. ์ด๊ฒƒ์€ Javascript ์—”์ง„์ด ๋‹จ์ˆœํ•œ ๊ฒƒ์„ ์˜๋ฏธํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, JavaScriptCore์—๋Š” Javascript ์ฝ”๋“œ๋ฅผ ๋ถ„์„, ํ•ด์„, ์ตœ์ ํ™” ๋ฐ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘(garbage collect)๋“ฑ 6 ๊ฐœ์˜ ๋นŒ๋”ฉ ๋ธ”๋ก์ด ์žˆ๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ• ๊นŒ? ๋ฌผ๋ก  ์—”์ง„์— ๋”ฐ๋ผ ๋™์ž‘ํ•œ๋‹ค. WebKit์˜ JavascriptCore์™€ Google์˜ V8 ์—”์ง„์ด ์ฃผ์š” ์—”์ง„์ด๋‹ค. NativeScript๊ฐ€ ์ด๊ฒƒ๋“ค์„ ํ™œ์šฉํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ์ด ๋‘ ์—”์ง„์€ ์ฝ”๋“œ ์ฒ˜๋ฆฌ๋ฅผ ๋‹ค๋ฅด๊ฒŒ ์ฒ˜๋ฆฌํ•œ๋‹ค.

JavaScriptCore๋Š” ์Šคํฌ๋ฆฝํŠธ๋ฅผ ํ•ด์„ํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ์ผ๋ จ์˜ ๋‹จ๊ณ„๋ฅผ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์–ดํœ˜ ๋ถ„์„์„ ์ˆ˜ํ–‰ํ•˜์—ฌ ์†Œ์Šค๋ฅผ ์ผ๋ จ์˜ ํ† ํฐ ๋˜๋Š” ์‹๋ณ„ ๋œ ์˜๋ฏธ์˜ ๋ฌธ์ž์—ด๋กœ ๋‚˜๋ˆ•๋‹ˆ๋‹ค. ๊ทธ๋Ÿฐ ๋‹ค์Œ ๊ตฌ๋ฌธ ๋ถ„์„๊ธฐ์—์„œ ํ† ํฐ์„ ๋ถ„์„ํ•˜๊ณ  ๊ตฌ๋ฌธ ํŠธ๋ฆฌ๋กœ ์ž‘์„ฑํ•œ๋‹ค. 4 ๊ฐœ์˜ JIT (just-in-time) ํ”„๋กœ์„ธ์Šค๊ฐ€ ํŒŒ์„œ์— ์˜ํ•ด ์ƒ์„ฑ ๋œ ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋ฅผ ๋ถ„์„, ์‹คํ–‰ํ•œ๋‹ค. ๊ฐ„๋‹จํžˆ ๋งํ•ด์„œ, JavaScriptCore๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ฐ€์ ธ ์™€์„œ ๋ฌธ์ž์—ด๋กœ ๋ถ„ํ•ดํ•œ๋‹ค. (๋ณ„๋ช…์€ ๋ ‰์Šค).์ด ๋ฌธ์ž์—ด์€ ์ปดํŒŒ์ผ๋Ÿฌ๊ฐ€ ์ดํ•ดํ•  ์ˆ˜์žˆ๋Š” ๋ฐ”์ดํŠธ ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ ํ•œ ๋‹ค์Œ ์‹คํ–‰ํ•œ๋‹ค.

C ++๋กœ ์ž‘์„ฑ๋œ Google์˜ V8 ์—”์ง„์€ ๋˜ํ•œ Javascript ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ์ปดํŒŒ์ผ ๋ฐ ์‹คํ–‰ํ•˜๊ณ , ๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น์„ ์ฒ˜๋ฆฌํ•˜๋ฉฐ, ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์‹œ ๋‚จ์€ ๋ถ€๋ถ„์„ ์ˆ˜์ง‘ํ•œ๋‹ค. ๊ทธ ์„ค๊ณ„๋Š” ์†Œ์Šค ์ฝ”๋“œ๋ฅผ ๊ธฐ๊ณ„์–ด ์ฝ”๋“œ๋กœ ์ง์ ‘ ์กฐ๋ฆฝํ•˜๋Š” ๋‘ ๊ฐœ์˜ ์ปดํŒŒ์ผ๋Ÿฌ๋กœ ๊ตฌ์„ฑ๋œ๋‹ค.

๊ตฌ์„ฑ๋˜๋Š” ๋‘๊ฐ€์ง€ ์ปดํŒŒ์ผ๋Ÿฌ๋Š” ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ณ ์† ์ปดํŒŒ์ผ๋Ÿฌ ์ธ Full-codegen๊ณผ ๋น ๋ฅด๊ณ  ์ตœ์ ํ™” ๋œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋Š๋ฆฐ ์ปดํŒŒ์ผ๋Ÿฌ ์ธ Crankshaf์ด๋‹ค.

Crankshaft๊ฐ€ Full-codegen์— ์˜ํ•ด ์ƒ์„ฑ ๋œ ์ตœ์ ํ™”๋˜์ง€ ์•Š์€ ์ฝ”๋“œ๊ฐ€ ์ตœ์ ํ™”๊ฐ€ ํ•„์š”ํ•œ ๊ฒƒ์œผ๋กœ ํŒ๋‹จํ•˜๋ฉด,์ด๋ฅผ 'crankshafting'์ด๋ผ๊ณ ํ•˜๋Š” ํ”„๋กœ์„ธ์Šค๋กœ ๋Œ€์ฒดํ•œ๋‹ค.

์ปดํŒŒ์ผ ๊ณผ์ •์—์„œ ๊ธฐ๊ณ„ ์ฝ”๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๋ฉด ์—”์ง„์€ NativeScript์ฒ˜๋Ÿผ ECMA ํ‘œ์ค€์— ์ง€์ •๋œ ๋ชจ๋“  ๋ฐ์ดํ„ฐ ์œ ํ˜•, ์—ฐ์‚ฐ์ž, ๊ฐ์ฒด ๋ฐ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ € ๋˜๋Š” ๋Ÿฐํƒ€์ž„์— ๋…ธ์ถœํ•œ๋‹ค.

์ด๊ฒƒ์€ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ๋ฌด์—‡์„ ์˜๋ฏธํ•˜๋‚˜?

Javascript ์—”์ง„์˜ ์ฝ”๋“œ ๊ตฌ๋ฌธ ๋ถ„์„ ๋ฐ ์‹คํ–‰ ํ”„๋กœ์„ธ์Šค์˜ ๋ชฉํ‘œ๋Š” ์ตœ๋Œ€ํ•œ ์งง์€ ์‹œ๊ฐ„ ๋‚ด์— ์ตœ์ ํ™” ๋œ ์ฝ”๋“œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๊ฒฐ๋ก ์€ ์ด๋Ÿฌํ•œ ์—”์ง„์˜ ์ง„ํ™”๋Š” ์›น๊ณผ ๋ชจ๋ฐ”์ผ ์˜์—ญ์„ ์ง„ํ™”์‹œ์ผœ ๊ฐ€๋Šฅํ•œ ํ•œ ์ž˜ ์ž‘๋™ํ•˜๋„๋ก ํ•˜๋ ค๋Š” ํƒ๊ตฌ์™€ ๋ณ‘ํ–‰๋œ๋‹ค. ์ด ์ง„ํ™”๋ฅผ ์ถ”์ ํ•˜๊ธฐ ์œ„ํ•ด arewefastyet.com๊ณผ ๊ฐ™์€ ์‚ฌ์ดํŠธ์—์„œ ์ƒ์„ฑ๋œ ๋ฒค์น˜๋งˆํ‚น ๊ทธ๋ž˜ํ”„๋Š” ๋‹ค์–‘ํ•œ ์—”์ง„์˜ ์ƒํ˜ธ ๋น„๊ต ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ค€๋‹ค.

๋ชจ๋“  ์›น ๊ฐœ๋ฐœ์ž๋Š” ์ƒ์„ฑ, ๋””๋ฒ„๊ทธ ๋ฐ ์œ ์ง€ ๊ด€๋ฆฌ๋˜๋Š” ์ฝ”๋“œ๋ฅผ ํ‘œ์‹œํ•˜๋Š” ๋ธŒ๋ผ์šฐ์ €์˜ ๊ณ ์œ ํ•œ ์ฐจ์ด์ ์„ ์ธ์‹ํ•ด์•ผํ•œ๋‹ค. ๋” ๊ตฌ์ฒด์ ์œผ๋กœ ๋งํ•˜์ž๋ฉด ํŠน์ • ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ํ•œ ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋‹ค๋ฅธ ์Šคํฌ๋ฆฝํŠธ๋ณด๋‹ค ๋” ๋นจ๋ฆฌ ์ž‘๋™ํ•˜๋Š” ์ด์œ ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ์ž, ํŠนํžˆ ์›น ๋ธŒ๋ผ์šฐ์ €๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜์ด๋ธŒ๋ฆฌ๋“œ ๋ชจ๋ฐ”์ผ ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์„ ์ž‘์„ฑํ•˜์—ฌ NativeScript์™€ ๊ฐ™์€ ๋Ÿฐํƒ€์ž„์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฐœ๋ฐœ์ž๋Š” Javascript ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๋Š” ์—”์ง„์„ ์•Œ๊ณ  ์‹ถ์–ดํ•œ๋‹ค. ๋ชจ๋ฐ”์ผ ์›น ๊ฐœ๋ฐœ์ž๋Š” ์ž‘์€ ์žฅ์น˜์—์„œ ๋‹ค์–‘ํ•œ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ณ ์œ  ํ•œ ํ•œ๊ณ„์™€ ๊ฐ€๋Šฅ์„ฑ์„ ์ดํ•ดํ•ด์•ผํ•œ๋‹ค. Javascript์—”์ง„์˜ ๋ณ€ํ™”๋ฅผ ๋”ฐ๋ผ ์žก๋Š” ๊ฒƒ์€ ์›น, ๋ชจ๋ฐ”์ผ ๋˜๋Š” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๊ฐœ๋ฐœ์ž๋กœ์„œ ์ง„ํ™”ํ•˜๋ ค๋Š” ์‚ฌ๋žŒ๋“ค์—๊ฒŒ ์ •๋ง ํšจ๊ณผ์ ์ด๋‹ค.

๋ณ€์—ญ์„ ํ•˜๋ฉฐ ๋Š๋‚€์ 

  • ์›๋ก ์ ์ธ ์„ค๋ช…์ด๋ผ์„œ ๋„์›€์ด ๋˜๋Š”์ง€๋Š” ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.