๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ“‚ Language/JavaScript

์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop)์˜ ๋™์ž‘ ์›๋ฆฌ

by Dev. Ella 2023. 9. 2.
์•„๋ž˜ ๋‚ด์šฉ์€ ์šฐ์•„ํ•œํ…Œํฌ: [10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐Ÿ— ํ”ผํ„ฐ์˜ ์ด๋ฒคํŠธ๋ฃจํ”„ ์˜์ƒ์„ ์ฐธ๊ณ ํ•œ ๊ธ€์ž…๋‹ˆ๋‹ค. ์œ ์ตํ•œ ๋‚ด์šฉ ๋ฐœํ‘œํ•ด์ฃผ์‹  ํ”ผํ„ฐ ๋‹˜๊ป˜ ๊ฐ์‚ฌ๋ฅผ ํ‘œํ•˜๋ฉฐ, ์˜์ƒ์„ ํ†ตํ•ด ํ•™์Šตํ•œ ๋‚ด์šฉ์„ ์•„๋ž˜์— ์ •๋ฆฌํ•ด ๋ณด์•˜์Šต๋‹ˆ๋‹ค.

 

 

0. ์‹œ์ž‘ํ•˜๋ฉฐ,

์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ๋“ค์–ด๋ดค์ง€๋งŒ, ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์ž˜ ๋ชจ๋ฅผ ์ˆ˜ ์žˆ๋‹ค. ์ดํ•ดํ•˜๊ธฐ ์‰ฌ์šด ์˜ˆ์‹œ ์ฝ”๋“œ์™€ ๊ทธ๋ฆผ์„ ํ†ตํ•ด ์›๋ฆฌ๋ฅผ ์ƒ…์ƒ…์ด ํŒŒํ—ค์ณ๋ณด์ž.

 

 

1. ๋น„๋™๊ธฐ ์ฝ”๋“œ ์˜ˆ์‹œ

๋จผ์ €, ์•„๋ž˜์˜ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ๋ณด์ž. 

 

console.log('์ž˜ ๋“ค์–ด๊ฐ”์–ด?');

setTimeout(function() {
	console.log('๋˜‘๋˜‘');
}, 1000);

console.log('๋“ค์–ด๊ฐ„๊ฑฐ ๋งž์•„?');

 

์ค‘๊ฐ„์— ์žˆ๋Š” setTimeout์€ ๋‘ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ„ ์‹œ๊ฐ„(๋‹จ์œ„: ms)๋งŒํผ ๊ธฐ๋‹ค๋ฆฐ ํ›„์—, ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ„ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰์‹œํ‚ค๋Š” ๋ฉ”์†Œ๋“œ๋‹ค. ์ด์™€ ๊ฐ™์ด ํŠน์ • ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ€๋Š” ํ•จ์ˆ˜๋ฅผ '์ฝœ๋ฐฑ ํ•จ์ˆ˜'๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

2. ์ฝœ๋ฐฑํ•จ์ˆ˜

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ๋‹ค๋ฅธ ํ•จ์ˆ˜์˜ ์ธ์ž๋กœ ์ „๋‹ฌ๋˜๊ณ , ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ๊ฐ์‹ธ๊ณ  ์žˆ๋Š” ์ˆ˜์‹ ํ•จ์ˆ˜์— ์˜ํ•ด ํŠน์ • ์‹œ์ ์— ์‹คํ–‰๋œ๋‹ค. ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ์ธ์ง€, ๋™๊ธฐ ์ฝœ๋ฐฑ์ธ์ง€์— ๋”ฐ๋ผ ์‹คํ–‰ ํƒ€์ด๋ฐ์ด ๋‹ฌ๋ผ์ง€๊ฑฐ๋‚˜, ์ฆ‰์‹œ ์‹คํ–‰๋  ์ˆ˜๋„ ์žˆ๋‹ค.

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

 

function greeting(name) {
	console.log('์•ˆ๋…•ํ•˜์„ธ์š”' + name);
}

function processUserInput(callback) {
	const name prompt('์ด๋ฆ„์„ ์ž…๋ ฅํ•ด ์ฃผ์„ธ์š”');
callback(name);
}

processUserInput(greeting);

 

์œ„์˜ ์˜ˆ์ œ์—์„œ processUserInput ํ•จ์ˆ˜๋Š” greeting ํ•จ์ˆ˜๋ฅผ ๋„ฃ์–ด์„œ ํ˜ธ์ถœํ•˜๊ณ  ์žˆ๋‹ค. processUserInput ํ•จ์ˆ˜์—์„œ ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด๋ฆ„์„ ์ž…๋ ฅ๋ฐ›์œผ๋ฉด, ํ•ด๋‹น ์ด๋ฆ„์„ ์ธ์‚ฌ๋ง๊ณผ ํ•จ๊ป˜ ์ถœ๋ ฅํ•˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

 

console.log('์ž˜ ๋“ค์–ด๊ฐ”์–ด?');

setTimeout(function() {
	console.log('๋˜‘๋˜‘');
}, 1000);

console.log('๋“ค์–ด๊ฐ„๊ฑฐ ๋งž์•„?');

 

์กฐ๊ธˆ ์ „์— ๋ณด์•˜๋˜ ์œ„ ์ฝ”๋“œ๊ฐ€ ๋™๊ธฐ์ ์œผ๋กœ ์ฆ‰, ์ฝ”๋“œ๊ฐ€ ์ ํ˜€์žˆ๋Š” ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰์ด ๋œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ๊ทธ๋ ‡๋‹ค๋ฉด ‘์ž˜ ๋“ค์–ด๊ฐ”์–ด?’ → (10์ดˆ ๋Œ€๊ธฐ) → ‘๋˜‘๋˜‘’ → ‘๋“ค์–ด๊ฐ„๊ฑฐ ๋งž์•„?’ ์ˆœ์œผ๋กœ ์ถœ๋ ฅ๋  ๊ฒƒ์ด๋‹ค. ์‚ฌ์‹ค ์ด ์ฝ”๋“œ๋งŒ ๋ด์„œ๋Š” ์ค‘๊ฐ„์— 10์ดˆ๋ฅผ ๊ธฐ๋‹ค๋ฆฐ๋‹ค๋Š” ๊ฒƒ์ด ์‹ฌ๊ฐํ•˜๊ฒŒ ๋Š๊ปด์ง€์ง€ ์•Š์„ ์ˆ˜๊ฐ€ ์žˆ๋Š”๋ฐ, JavaScript ์ฝ”๋“œ๊ฐ€ ์›น ๋ธŒ๋ผ์šฐ์ € ํ™˜๊ฒฝ์—์„œ ์‹คํ–‰๋œ๋‹ค๋Š” ์ ์—์„œ๋Š” ์ด์•ผ๊ธฐ๊ฐ€ ๋‹ฌ๋ผ์ง„๋‹ค.

 

btn.addEventListener('click', () => {
	while(true);
});

 

์œ„์™€ ๊ฐ™์ด ๋ฌดํ•œ๋ฃจํ”„๋ฅผ ๋Œ๊ฒŒ๋” ๋ฒ„ํŠผ์„ ๋งŒ๋“ค์—ˆ๋‹ค. ์•ฝ๊ฐ„์˜ ์ƒ์ƒ๋ ฅ์„ ๋ณดํƒœ์„œ, ์ด ๋ฒ„ํŠผ์„ ๋ˆŒ๋ €์„ ๋•Œ ์˜ค๋žœ ์‹œ๊ฐ„์„ ์†Œ์š”ํ•˜๋Š” ์ž‘์—…์„ ์‹คํ–‰ํ•œ๋‹ค๊ณ  ์ƒ๊ฐํ•ด๋ณด์ž. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด ๋ฒ„ํŠผ์„ ๋ˆ„๋ฅด๊ณ , ์ž‘์—…์„ ์‹คํ–‰ ์ค‘์ผ ๋•Œ๋Š” ํ…์ŠคํŠธ๋ฅผ ํด๋ฆญํ•ด๋„, ๋ฒ„ํŠผ์„ ํด๋ฆญํ•ด๋„ ์•„๋ฌด ๋ฐ˜์‘์ด ์ผ์–ด๋‚˜์ง€ ์•Š๋Š”๋‹ค. ์ด๋Ÿฐ ์ƒํƒœ๋กœ ๊ณ„์†ํ•ด์„œ ์ž‘์—…์ด ๋๋‚˜๊ธฐ๋ฅผ ๊ณ„์† ๊ธฐ๋‹ค๋ ค์•ผ ๋˜๋Š” ์•„์ฃผ ์‹ฌ๊ฐํ•œ ์ƒํ™ฉ์ด ๋ฐœ์ƒํ•œ๋‹ค.

 

 

3. ๋น„๋™๊ธฐ์  ์‹คํ–‰

๋‹คํ–‰ํžˆ๋„ ์•„๊นŒ ๋ณด์•˜๋˜ ์•„๋ž˜ ์ฝ”๋“œ๋Š” ์‹ค์ œ๋กœ๋Š” ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ฝ”๋“œ์˜ ์ˆœ์„œ๋ฅผ ๊ทธ๋Œ€๋กœ ๋”ฐ๋ฅด์ง€ ์•Š๊ณ  ๋™์ž‘ํ•œ๋‹ค.

 

console.log('์ž˜ ๋“ค์–ด๊ฐ”์–ด?');

// ์—ฌ๊ธฐ์„œ๋ถ€ํ„ฐ -----------------
setTimeout(function() {
	console.log('๋˜‘๋˜‘');
}, 1000);
// ์—ฌ๊ธฐ๊นŒ์ง€ JS backstage์—์„œ ์‹คํ–‰๋จ

console.log('๋“ค์–ด๊ฐ„๊ฑฐ ๋งž์•„?');

 

์ฒ˜์Œ์— '์ž˜ ๋“ค์–ด๊ฐ”์–ด?'๊ฐ€ ์ถœ๋ ฅ์ด ๋˜๊ณ  → ‘๋“ค์–ด๊ฐ„๊ฑฐ ๋งž์•„?’ ์ถœ๋ ฅ → (10์ดˆ ๋Œ€๊ธฐ) → ‘๋˜‘๋˜‘’ ์ˆœ์œผ๋กœ ์ถœ๋ ฅ์ด ๋œ๋‹ค. 

 

์ผ๋‹จ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์ด ์ฝ”๋“œ๋ฅผ ์ง„ํ–‰ํ•˜๋‹ค๊ฐ€ ์ค‘๊ฐ„์— setTimeout๊ณผ ๊ฐ™์€ ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ๋งŒ๋‚˜๋ฉด, (์œ„ ์ฝ”๋“œ์˜ ์ฃผ์„์„ ๋ณด๋‹ค์‹œํ”ผ) ์ด ์ฝ”๋“œ๋ฅผ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋’ทํŽธ์—์„œ ์‹คํ–‰์„ ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ ๋‹ค์Œ์— ๋‚˜๋จธ์ง€ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์ง„ํ–‰ํ•˜์—ฌ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ๋‚˜๋จธ์ง€ ์ฝ”๋“œ๋ฅผ ๋ฐ”๋กœ ์ง„ํ–‰ํ•˜๊ณ , ์ด ๋น„๋™๊ธฐ ์ฝ”๋“œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋’คํŽธ์—์„œ ์‹คํ–‰์ด ๋˜๋„๋ก ๋†”๋‘๋Š” ๊ฒƒ์ด๋‹ค.

 

 

4. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„

๊ฒฐ๋ก ๋ถ€ํ„ฐ ์ด์•ผ๊ธฐํ•˜์ž๋ฉด, ์ด์•ผ๊ธฐํ•˜๊ณ ์ž ํ•˜๋Š” '์ด๋ฒคํŠธ ๋ฃจํ”„'๋Š” ์•„๋ž˜์™€ ๊ฐ™์ด ์„ค๋ช…ํ•  ์ˆ˜ ์žˆ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ๊ฐ€ ์‹คํ–‰๋˜๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ๋’ทํŽธ์—์„œ ๋™์ž‘ํ•˜๋Š”, ์–ด๋– ํ•œ ๋ฌธ๋ฐฑ์˜ ์ผ๋ถ€๋กœ์„œ ๋™์ž‘ํ•˜๋Š” ํ•˜๋‚˜์˜ ์žฅ์น˜

 

์ด์ œ๋ถ€ํ„ฐ๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„์— ๋Œ€ํ•ด ์ž์„ธํžˆ ์•Œ์•„๋ณด๊ฒ ๋‹ค. ์ด๋ฏธ ์•Œ๊ณ  ์žˆ๊ฒ ์ง€๋งŒ, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ฝ”๋“œ๋ฅผ ํ•ด์„ํ•˜๊ณ , ์‹คํ–‰ํ•˜๊ธฐ ์œ„ํ•œ ์ธํ„ฐํ”„๋ฆฌํ„ฐ๋‹ค.

 

์—ฌ๋Ÿฌ๊ฐ€์ง€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ ์žˆ์ง€๋งŒ, ๋Œ€ํ‘œ์ ์œผ๋กœ ํฌ๋กฌ์—์„œ ์‚ฌ์šฉ๋˜๋Š” V8 ์—”์ง„ ๊ธฐ์ค€์œผ๋กœ ํฌ๊ฒŒ Heap๊ณผ ํ˜ธ์ถœ Stack์œผ๋กœ ๊ตฌ๋ถ„๋˜๋Š”๋ฐ, Heap์€ ๊ฐ„๋‹จํ•˜๊ฒŒ ๋งํ•˜๋ฉด ‘๋ฉ”๋ชจ๋ฆฌ ํ• ๋‹น’์ด ์ผ์–ด๋‚˜๋Š” ๋ถ€๋ถ„ ์ฆ‰, ๋ณ€์ˆ˜๋‚˜ ๊ฐ์ฒด๋“ค์ด ์ €์žฅ๋˜๋Š” ์ฐฝ๊ณ ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๋‹ค. 

 

๊ทธ๋ฆฌ๊ณ  ํ˜ธ์ถœ Stack์€ ‘ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋Š” ์ˆœ์„œ๋Œ€๋กœ ์Œ“์ด๋Š” ์Šคํƒ’ ์ด๋‹ค. ๊ทธ๋ž˜์„œ ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์—ˆ๋‹ค๋Š” ๋ง์€ ๊ณง, ์‹คํ–‰ํ•  ํ•จ์ˆ˜(์˜ ์‹คํ–‰ ๋ฌธ๋งฅ)๊ฐ€ ๋‚จ์•„์žˆ์ง€ ์•Š๋‹ค ๋ผ๋Š” ๋ง๊ณผ๋„ ๊ฐ™๋‹ค๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.

 

 

5. ํ˜ธ์ถœ ์Šคํƒ์˜ ๋™์ž‘ ๋ฐฉ์‹

๋˜ ๋‹ค๋ฅธ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ํ˜ธ์ถœ ์Šคํƒ์ด ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ์‚ดํŽด๋ณด๊ฒ ๋‹ค.

 

function second() {
	setTimeout(function() {
		console.log('๊ณ ๋…ํ•˜๋„ค');
	}, 2000);
}

function first() {
	console.log('์™œ ์—ฐ๋ฝ์ด ์—†์ง€');
	second();
	console.log('์ฝ”๋”ฉ์ด๋‚˜ ํ•ด์•ผ์ง€');
}

first();

 

์ฒ˜์Œ์— first ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด first()๊ฐ€ ํ˜ธ์ถœ ์Šคํƒ์— ๋“ค์–ด๊ฐ„๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  first ํ•จ์ˆ˜ ๋‚ด๋ถ€์—์„œ ์ฒซ ๋ฒˆ์งธ console.log ๊ฐ€ ์‹คํ–‰ ๋œ๋‹ค. '์™œ ์—ฐ๋ฝ์ด ์—†์ง€..' ํ•˜๊ณ  ๋กœ๊ทธ๋ฌธ์ด ์ถœ๋ ฅ๋˜๋ฉด ์ด์ œ console.log ๋Š” ์‹คํ–‰์ด ๋๋‚˜๊ธฐ ๋•Œ๋ฌธ์— ๋ฆฌํ„ดํ•˜๊ณ  ํ˜ธ์ถœ ์Šคํƒ์—์„œ ๋น ์ ธ๋‚˜์˜จ๋‹ค.

๋‹ค์Œ์— second () ๊ฐ€ ๋“ค์–ด์˜จ๋‹ค.

 

๊ทธ ๋‹ค์Œ, ์ด ์•ˆ์—์„œ setTimeout (fn, 2000) ๊ฐ€ ์‹คํ–‰ → setTimeout์ด ์‹คํ–‰๋˜๋ฉด ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์˜ ๋’ทํŽธ์—์„œ ํƒ€์ด๋จธ๊ฐ€ ์ž‘๋™ ํ•˜๋Š”๋ฐ, ํƒ€์ด๋จธ๋ฅผ ์ž‘๋™์‹œํ‚ค๊ณ  setTimeout์€ ์ž๊ธฐ ์—ญํ• ์„ ๋๋ƒˆ๊ธฐ ๋•Œ๋ฌธ์— return → ๊ทธ๋ฆฌ๊ณ  second ํ•จ์ˆ˜์—๋Š” setTimeout ํ•จ์ˆ˜ ๋ฐ–์— ์—†์œผ๋‹ˆ, setTimeout์ด ๋๋‚˜๋ฉด second ํ•จ์ˆ˜๋„ ๋ฆฌํ„ด → ๊ทธ ๋‹ค์Œ์— ๋‘ ๋ฒˆ์งธ console.log๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ '์ฝ”๋”ฉ์ด๋‚˜ ํ•ด์•ผ์ง€' ํ•˜๋ฉฐ ๋ฆฌํ„ด → first ํ•จ์ˆ˜๋„ return์„ ํ•  ๊ฒƒ์ด๋‹ค.

์—ฌ๊ธฐ์„œ, ํƒ€์ด๋จธ๊ฐ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋’ทํŽธ์—์„œ ์ง€์ •๋œ ์‹œ๊ฐ„์„ ๋ชจ๋‘ ์นด์šดํŠธ ํ•˜๋ฉด, ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด ์žˆ์„ ๋•Œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด์„œ console.log('๊ณ ๋…ํ•˜๋„ค')๊ฐ€ ์ถœ๋ ฅ์ด ๋œ๋‹ค. 

 

 

6. ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ ์–ธ์–ด

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

ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ํ˜ธ์ถœ ์Šคํƒ์ด ํ•˜๋‚˜๋ฟ์ด๋ฉด์„œ,
๋น„๋™๊ธฐ์š”์ฒญ ์ง€์›๊ณผ ๋™์‹œ์„ฑ์— ๋Œ€ํ•œ ์ฒ˜๋ฆฌ๋Š” ๋ˆ„๊ฐ€ ํ•˜๋Š” ๊ฑธ๊นŒ?

 

์ด๊ฒƒ์„ ์กฐ๊ธˆ ๋” ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์—์„œ ์‹œ์•ผ๋ฅผ ์‚ด์ง ๋” ๋„“ํ˜€, ์›น ๋ธŒ๋ผ์šฐ์ € ์ „์ฒด๋ฅผ ๋ณผ ํ•„์š”๊ฐ€ ์žˆ๋‹ค.

 

 

7. ๋ธŒ๋ผ์šฐ์ €์˜ ๊ตฌ์กฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์€ ์ด๋ฏธ ๋งํ–ˆ๋“ฏ์ด ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ž‘์—… ๋ฐ–์— ์ฒ˜๋ฆฌํ•˜์ง€ ๋ชปํ•˜์ง€๋งŒ, ์›น ๋ธŒ๋ผ์šฐ์ €๋Š” ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ๋ง๊ณ ๋„ Web API, ์ด๋ฒคํŠธ ๋ฃจํ”„, ์ฝœ๋ฐฑ ํ ๋“ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

 

์ฐธ๊ณ ๋กœ, ์•„๊นŒ ๋ดค๋˜ setTimeout์„ ํฌํ•จํ•ด์„œ DOM ๋ฉ”์„œ๋“œ, HTTP ์š”์ฒญ ๊ฐ™์€ ๊ฒƒ๋“ค์€ ์ „๋ถ€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„์˜ ๋ฐ”๊นฅ์— ์žˆ๋Š” Web API์—์„œ ์ œ๊ณตํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋“ค์ด๋‹ค.

 

 

Web API ๋ฉ”์„œ๋“œ๋“ค์€ ์ž‘๋™์„ ๋งˆ์น˜๋ฉด ์ด๋“ค์€ ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ๋“ค์ด๊ธฐ ๋•Œ๋ฌธ์—, ์ž‘๋™์„ ๋งˆ์น˜๊ณ  ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ฝœ๋ฐฑ ํ(= ํ…Œ์Šคํฌ ํ)์— ์ง‘์–ด๋„ฃ๋Š”๋‹ค. ์—ฌ๊ธฐ์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋“ค์ด ์‹คํ–‰์„ ๋Œ€๊ธฐํ•˜๊ฒŒ ๋œ๋‹ค.

์ฆ‰, ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์—”์ง„ ์ž์ฒด๋Š” ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ์ด์ง€๋งŒ, ์‹ค์ œ๋กœ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๊ฐ€ ๋™์ž‘๋˜๋Š” ํ™˜๊ฒฝ์ธ ์›น ๋ธŒ๋ผ์šฐ์ €์—๋Š” ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ์‚ฌ์šฉ๋œ๋‹ค. 

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

 

 

8. ๋ธŒ๋ผ์šฐ์ € ๊ด€์ ์—์„œ ๋ณด๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„ ๋™์ž‘ ๋ฐฉ์‹

์ด์ œ ์•„๊นŒ ๋ดค๋˜ ์˜ˆ์‹œ ์ฝ”๋“œ๋ฅผ ๋ณด๋ฉด์„œ ๋ธŒ๋ผ์šฐ์ € ์ „์ฒด์ ์ธ ๊ด€์ ์—์„œ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ•œ๋ฒˆ ์‚ดํŽด๋ณด๋„๋ก ํ•˜์ž. 

 

function second() {
	setTimeout(function() {
		console.log('๊ณ ๋…ํ•˜๋„ค');
	}, 2000);
}

function first() {
	console.log('์™œ ์—ฐ๋ฝ์ด ์—†์ง€');
	second();
	console.log('์ฝ”๋”ฉ์ด๋‚˜ ํ•ด์•ผ์ง€');
}

first();

 

 

์ฒ˜์Œ์— first ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๊ณ , '์™œ ์—ฐ๋ฝ์ด ์—†์ง€..' ๋ผ๊ณ  second ์‹คํ–‰ → setTImeout ๊นŒ์ง€๋Š” ์ด์ „๊ณผ ๋˜‘๊ฐ™๋‹ค. ์—ฌ๊ธฐ์„œ ์•„๊นŒ ์ „์— setTimeout()์€ Web API์—์„œ ์‹คํ–‰์ด ๋œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋ž˜์„œ ์ฒซ ๋ฒˆ์งธ ์ธ์ž๋กœ ๋“ค์–ด๊ฐ„ ์ฝœ๋ฐฑํ•จ์ˆ˜๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ํƒ€์ด๋จธ๋ฅผ Web API์—์„œ ์ƒ์„ฑํ•˜๊ฒŒ ๋œ๋‹ค.

 

ํƒ€์ด๋จธ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๊ฒƒ์œผ๋กœ setTimeout์˜ ์—ญํ• ์€ ๋์ด ๋‚˜๊ณ  setTimeout์€ return → second ํ•จ์ˆ˜๋„ return → ๊ทธ ๋‹ค์Œ์— '์ฝ”๋”ฉ์ด๋‚˜ ํ•ด์•ผ์ง€’๋ผ๋Š” console.log ๋ฌธ์ด ์ถœ๋ ฅ → ์ดํ›„ first ํ•จ์ˆ˜๋„ returnํ•œ๋‹ค. (console.log๋ฅผ ์ „๋ถ€ ์ถœ๋ ฅ์„ ํ–ˆ์œผ๋‹ˆ)


์ด์ œ Web API์—์„œ ์‹คํ–‰ ์ค‘์ธ ํƒ€์ด๋จธ๋งŒ ๋‚จ์€ ์ƒํƒœ์ธ๋ฐ, ํƒ€์ด๋จธ๊ฐ€ ์ •ํ•ด์ง„ ์‹œ๊ฐ„์„ ๋ชจ๋‘ ์„ธ๊ณ ๋‚˜๋ฉด ์–ด๋–ค ์ผ์ด ์ผ์–ด๋‚ ๊นŒ? ํƒ€์ด๋จธ ๊ฐ์ฒด๋Š” ์ •ํ•ด์ง„ ์‹œ๊ฐ„ ๋‚˜๋ฉด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ์ฝœ๋ฐฑ ํ์— ๋„ฃ๊ณ  ์ž๊ธฐ๋Š” ์‚ฌ๋ผ์ง„๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์ด๋Š” ์ฝœ๋ฐฑ ํ์—์„œ ์‹คํ–‰๋˜๊ธฐ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๊ฒŒ ๋œ๋‹ค. ์ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋„ ๊ฒฐ๊ตญ์—๋Š” ํ•จ์ˆ˜์ด๊ธฐ ๋•Œ๋ฌธ์— ์‹คํ–‰๋˜๋ ค๋ฉด ํ˜ธ์ถœ ์Šคํƒ์— ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค.

 

์ด๋•Œ ์ด์ œ ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์—ฌ๊ธฐ์„œ ๋™์ž‘์„ ํ•˜๊ฒŒ ๋˜๋Š”๋ฐ, ์ž ์‹œ ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ์—ญํ• ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๊ณ  ๊ฐ€๊ฒ ๋‹ค.

 

 

9. ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ์—ญํ• 

์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ํ˜ธ์ถœ ์Šคํƒ๊ณผ ์ฝœ๋ฐฑ ํ๋ฅผ ๊ณ„์†ํ•ด์„œ ์ฃผ์‹œํ•˜๊ณ  ์žˆ๋‹ค. ๊ทธ๋Ÿฌ๋‹ค๊ฐ€ ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด์žˆ๋‹ค๊ณ  ํ•˜๋ฉด, ์ฝœ๋ฐฑ ํ์— ๋จผ์ € ๋“ค์–ด์˜จ ์ˆœ์„œ๋Œ€๋กœ ์ฝœ๋ฐฑ ํ ์žˆ๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ๋“ค์„ ํ˜ธ์ถœ ์Šคํƒ์œผ๋กœ ์ฐจ๋ก€์ฐจ๋ก€ ์ง‘์–ด๋„ฃ๋Š” ์—ญํ• ์„ ํ•˜๊ณ  ์žˆ๋‹ค. 

 

์ฝœ๋ฐฑ ํ๋ฅผ ์ง€์ผœ๋ณด๋‹ค๊ฐ€ '์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์™”๋„ค?' & 'ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด์žˆ๋„ค?' → ์•„๋ž˜ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœ ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ์ฃผ๋Š” ๊ฒƒ์ด ๋ฐ”๋กœ ์ด๋ฒคํŠธ ๋ฃจํ”„์˜ ์—ญํ• ์ด๋‹ค. ์ด๋•Œ ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด์žˆ์–ด์•ผ๋งŒ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ์Šคํƒ์œผ๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์‚ฌ์‹ค๋„ ์žŠ์ง€ ๋ง์ž.

 

function second() {
	setTimeout(function() {
		console.log('๊ณ ๋…ํ•˜๋„ค');
	}, 2000);
}

function first() {
	console.log('์™œ ์—ฐ๋ฝ์ด ์—†์ง€');
	second();
	console.log('์ฝ”๋”ฉ์ด๋‚˜ ํ•ด์•ผ์ง€');
}

first();

 

์•„๋ž˜ ์™ผ์ชฝ ๊ทธ๋ฆผ์—์„œ๋„ ์ฝœ๋ฐฑ ํ์— ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ๋Œ€๊ธฐ์ค‘์ด๋‹ค. ๊ทผ๋ฐ first ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰์„ ๋งˆ์ณค๊ธฐ ๋•Œ๋ฌธ์— ์ง€๊ธˆ ์ง€๊ธˆ ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด์žˆ๋Š” ์ƒํ™ฉ์ด๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด, ์ด๋ฒคํŠธ๋ฅผ ๋‘˜๋Ÿฌ๋ณด๊ณ  ์žˆ๋‹ค๊ฐ€ ์ฝœ๋ฐฑ ํ๊ฐ€ '์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ์™”์–ด' & 'ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด์žˆ์–ด' ํ•˜๋ฉด ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ์˜ฎ๊ฒจ์ค€๋‹ค.

 

๊ทธ๋Ÿฌ๊ณ ๋‚˜์„œ ์•„๊นŒ ๋ดค๋˜ '๊ณ ๋…ํ•˜๋„ค'๋ฅผ ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด console.log๊ฐ€ ์ถœ๋ ฅ์ด ๋˜๊ณ  return๋œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ์ „์ฒด์ ์ธ ์ฝ”๋“œ๊ฐ€ ์ข…๋ฃŒ๊ฐ€ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

10. ์‘์šฉ ์˜ˆ์‹œ : ๋น„๋™๊ธฐ์™€ try-catch

์ด์ œ ์ด๋ฒคํŠธ ๋ฃจํ”„ ๊ฐ€ ์–ด๋–ป๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€๋ฅผ ๋Œ€๋žต์ ์œผ๋กœ ํ•œ๋ฒˆ ์‚ดํŽด ๋ณด์•˜์œผ๋‹ˆ, ๋‚˜๋จธ์ง€ ์ผ€์ด์Šค๋ฅผ ํ†ตํ•ด ๋” ์‘์šฉ์„ ํ•ด ๋ณด๊ฒ ๋‹ค. ๋น„๋™๊ธฐ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•˜๋‹ค ๋ณด๋ฉด try-catch๊ฐ€ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์—๋Ÿฌ๋ฅผ ์žก์ง€ ๋ชปํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.

 

$('.btn').click(function() { // (A)
	try {
		$.getJSON('/์ด๋Ÿฐ์ €๋Ÿฐ ์ฃผ์†Œ', function(res) { // (B)
			// ์—ฌ๊ธฐ์„œ Error ๋ฐœ์ƒ
		});
	} catch (e) {
		console.log('์†๋ณด! ์—๋Ÿฌ ๋ฐœ์ƒ:' + e.message);
	}
});

 

์œ„ ์ฝ”๋“œ์—์„œ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๋ฉด ์ฝœ๋ฐฑ ํ•จ์ˆ˜ A๋ฅผ ์‹คํ–‰ํ•˜๋„๋ก ํด๋ฆญ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๋ฅผ ๋“ฑ๋กํ•ด ๋†“๊ณ , A ์•ˆ์— try-catch ๋ฌธ์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๊ธฐ๋„ ํ•˜๋‹ค. ๊ทธ๋ฆฌ๊ณ  try๋ฌธ ์•ˆ์—์„œ getJSON ์ด๋ผ๋Š”, HTTP ์š”์ฒญ์„ ๋ณด๋‚ด์„œ JSON ๋ฐ์ดํ„ฐ๋ฅผ ๋ฐ›์•„์˜ค๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋Š”๋ฐ, getJSON์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜์ธ (B) ์•ˆ์—์„œ ์—๋Ÿฌ ๋ฐœ์ƒ ํ•˜๊ณ  ์žˆ๋‹ค.

์–ธ๋œป ๋ณด๊ธฐ์—๋Š” ์ฝœ๋ฐฑํ•จ์ˆ˜ (A) ๋‚ด๋ถ€์—์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ (B)๊ฐ€ ์žˆ๋Š” ๋ชจ์–‘์ด๋‹ˆ, ์ฝœ๋ฐฑํ•จ์ˆ˜ (A)์˜ try-catch ๋ฌธ์ด ์ฝœ๋ฐฑ ํ•จ์ˆ˜ (B)์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋ฅผ ์žก์„ ์ˆ˜ ์žˆ์ง€ ์•Š์„๊นŒ ์ƒ๊ฐํ•  ์ˆ˜ ๋„ ์žˆ๊ฒ ๋‹ค.

 

ํ•˜์ง€๋งŒ ์‚ฌ์‹ค ์ด try-catch๋ฌธ์€ B์—์„œ ๋ฐœ์ƒํ•œ ์—๋Ÿฌ๋ฅผ ๋ชปํ•œ๋‹ค. ์™œ ๊ทธ๋Ÿฐ์ง€ ๋‚ด๋ถ€ ๋™์ž‘์„ ์‚ดํŽด๋ณด๋ฉด์„œ ํ•จ๊ป˜ ์•Œ์•„๋ณด๋„๋ก ํ•˜์ž.

 

 

11. try-catch๋ฌธ ๋‚ด๋ถ€ ๋™์ž‘ ์‚ดํŽด๋ณด๊ธฐ

์šฐ์„  ์•„๋ž˜์™€ ๊ฐ™์ด ๋ฒ„ํŠผ ํด๋ฆญ ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ๊ฐ€ ๋“ฑ๋ก๋ผ ์žˆ๋Š” ์ƒํ™ฉ์—์„œ ํด๋ฆญ ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์˜ ์ฝœ๋ฐฑํ•จ์ˆ˜ A๊ฐ€ ์ฝœ๋ฐฑ ํ๋กœ ๋“ค์–ด๊ฐ„๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด ์žˆ์œผ๋‹ˆ, ์•„๋ž˜์™€ ๊ฐ™์ด A๊ฐ€ ์ด๋ฒคํŠธ๋ฃจํ”„์— ์˜ํ•ด ํ˜ธ์ถœ ์Šคํƒ์œผ๋กœ ์ด๋™ํ•œ๋‹ค. A์˜ ๋‚ด๋ถ€์—์„œ getJSON ๋ฉ”์„œ๋“œ๊ฐ€ ์‹คํ–‰๋˜๋ฉด

 

HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” XMLHTTPRequest ๊ฐ์ฒด๊ฐ€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์™€ ํ•จ๊ป˜ webAPI ์ƒ์„ฑ์ด ๋œ๋‹ค. ๊ทธ๋Ÿผ getJSON ๋ฉ”์„œ๋“œ๋Š” HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์œผ๋กœ ์ž๊ธฐ ํ•  ์ผ์„ ๋งˆ์ณค์œผ๋‹ˆ ๋ฆฌํ„ด์„ ํ•œ๋‹ค.

 

๊ทธ๋ฆฌ๊ณ  A ํ•จ์ˆ˜ ์—ญ์‹œ ๋‚ด๋ถ€์— getJSON๋งŒ ์žˆ์—ˆ์œผ๋‹ˆ getJSON์ด ์ž๊ธฐ์˜ ์‹คํ–‰์„ ๋งˆ์น˜๊ณ  return ํ•˜๋ฉด, A๋„ returnํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์ด์ œ Web API์— XMLHTTPRequest ๊ฐ์ฒด๋งŒ ๋‚จ์€ ์ƒํ™ฉ์ด๋‹ค. 

 

์•„๋ž˜์˜ ์™ผ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด, XMLHTTPRequest ๊ฐ์ฒด๋„ HTTP ์š”์ฒญ์„ ๋ณด๋‚ด๋ฉด ์ž๊ธฐ๋Š” ์‚ฌ๋ผ์ง€๊ณ , ์ฝœ๋ฐฑ ํ•จ์ˆ˜ B๊ฐ€ ์ฝœ๋ฐฑ ํ์— ์•„๋ž˜์™€ ๊ฐ™์ด ๋“ค์–ด๊ฐ€๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด, ์—ญ์‹œ๋‚˜ ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด ์žˆ์„ ๋•Œ B๊ฐ€ ์ด๋ฒคํŠธ ๋ฃจํ”„์— ์˜ํ•ด ํ˜ธ์ถœ์Šคํƒ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ์—ฌ๊ธฐ์„œ B๊ฐ€ ํ˜ธ์ถœ์Šคํƒ์œผ๋กœ ์˜ฎ๊ฒจ์ง€๋Š” ์œ„ ์‹œ์ ์—์„œ๋Š” A๊ฐ€ ์ด๋ฏธ ์‹คํ–‰์„ ๋งˆ์น˜๊ณ  return์„ ํ•œ ์ƒํ™ฉ์ด๋‹ค.

์ฆ‰, A์™€ B๋Š” ์™„์ „ํžˆ ๋‹ค๋ฅธ ๋ฌธ๋งฅ ์†์—์„œ ๊ฐ๊ฐ ๋™์ž‘์„ ํ•˜๊ณ  ์žˆ๋‹ค ๋ผ๊ณ  ๋ณด๋ฉด ๋œ๋‹ค.
๊ทธ๋ž˜์„œ A ๋‚ด๋ถ€์— ์žˆ๋Š” try-catch ๋ฌธ์ด B์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋ฅผ ์žก์•„๋‚ด์ง€ ๋ชปํ•˜๋Š” ๊ฒฐ๋ก ์ด ๋‚˜์˜ค๋Š” ๊ฒƒ์ด๋‹ค.

 

 

12. try-catch๋ฌธ ์—๋Ÿฌ๋ฅผ ์žก๊ณ  ์‹ถ๋‹ค๋ฉด

๋งŒ์•ฝ, B์—์„œ ๋ฐœ์ƒํ•˜๋Š” ์—๋Ÿฌ๋ฅผ try-catch๋กœ ์žก์•„๋‚ด๊ณ  ์‹ถ๋‹ค๋ฉด ํ•ด๋‹ต์€ ๊ฐ„๋‹จํ•˜๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์ด B ์•ˆ์— try-catch๋ฌธ์„ ์ง‘์–ด ๋„ฃ์–ด ์ฃผ๋ฉด ๋œ๋‹ค.

 

$('.btn').click(function() { // (A)
	$.getJSON('/์ด๋Ÿฐ์ €๋Ÿฐ ์ฃผ์†Œ', function(res) { // (B)
		try {

		} catch (e) {
			console.log('์†๋ณด! ์—๋Ÿฌ ๋ฐœ์ƒ:' + e.message);
		}
	});
});

 

 

13. setTimeout(callback, 0)

๋งˆ์ง€๋ง‰์œผ๋กœ setTimeout 0์ดˆ์— ๋Œ€ํ•ด ์•Œ์•„๋ณด๊ฒ ๋‹ค. setTimeout 0์ดˆ๋Š” ํ”„๋ก ํŠธ์—”๋“œ ํ™˜๊ฒฝ์˜ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ์ฝ”๋“œ์—์„œ ์ข…์ข… ๋ณผ ์ˆ˜ ์žˆ๋Š” ์ฝ”๋“œ๋‹ค. 0์ดˆ ํ›„์— ์‹คํ–‰๋œ๋‹ค๋Š” ๋ง์€ ๋ฌธ๋งฅ์ƒ์œผ๋กœ ์ฆ‰์‹œ ์‹คํ–‰ ๋œ๋‹ค๋Š” ๋ง ๊ฐ™๋‹ค. ๊ทธ๋ž˜์„œ ์ฝ”๋“œ๊ฐ€ ์ ํ˜€์žˆ๋Š” ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰ ๋˜์ง€ ์•Š์„๊นŒ? ๋ผ๊ณ  ์ƒ๊ฐํ•  ์ˆ˜ ์žˆ๊ฒ ์ง€๋งŒ, ์‚ฌ์‹ค์€ ๊ทธ๋ ‡์ง€ ์•Š๋‹ค.

 

์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ํ†ตํ•ด ์‚ดํŽด๋ณด์ž.

 

console.log('ํ˜ธ๋ž‘์ด');

setTimeout(function() {
	console.log('์–ดํฅ!');
}, 0);

console.log('๋–ก ํ•˜๋‚˜๋งŒ ์ค˜!');

 

์ผ๋‹จ ์ฒ˜์Œ์— 'ํ˜ธ๋ž‘์ด'๊ฐ€ ์ถœ๋ ฅ์ด ๋œ๋‹ค. ๊ทธ ๋‹ค์Œ์— returnํ•˜๊ณ  setTimeout์ด ์‹คํ–‰์ด ๋œ๋‹ค. ๊ทธ ๋‹ค์Œ์— return์„ ํ•˜๊ณ  setTimeout์ด ์‹คํ–‰์ด ๋œ๋‹ค.

 

์—ฌ๊ธฐ์„œ setTimeout์€ 0์ดˆ์ด๋‹ˆ, 0์ดˆ๋ฅผ ์นด์šดํŠธํ•˜๋Š” ํƒ€์ด๋จธ ๊ฐ์ฒด๋ฅผ Web API์— ์ƒ์„ฑ์„ ํ•œ๋‹ค. ์ด๋•Œ, ํƒ€์ด๋จธ๋Š” 0์ดˆ๋ฅผ ์นด์šดํŠธ ํ•˜๋‹ˆ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ๋ฐ”๋กœ ์ฝœ๋ฐฑ ํ์— ๋“ค์–ด๊ฐ€์•ผ ํ•œ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์ด๋•Œ, ํ˜ธ์ถœ ์Šคํƒ์ด ๋น„์–ด์žˆ์„๊นŒ?

 

์˜ค๋ฅธ์ชฝ ๊ทธ๋ฆผ๊ณผ ๊ฐ™์ด ๋น„์–ด์žˆ์ง€ ์•Š๋‹ค. ์™œ๋ƒํ•˜๋ฉด console.log('๋–ก ํ•˜๋‚˜๋งŒ ์ค˜!’)๊ฐ€ ๋‚จ์€ ์ƒํ™ฉ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๊ทธ๋ž˜์„œ '๋–ก ํ•˜๋‚˜๋งŒ ์ค˜!' ๊ฐ€ ๋จผ์ € ์ถœ๋ ฅ์ด ๋˜๊ณ , ์ฝœ๋ฐฑ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ ์Šคํƒ์œผ๋กœ ์ด๋™ํ•˜๊ฒŒ ๋œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์—ฌ๊ธฐ์„œ ์ด์ œ '์–ดํฅ!' ์„ ์ถœ๋ ฅํ•˜๊ณ , ์‹คํ–‰์„ ๋งˆ์น˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

 

 

14. ๋งˆ์น˜๋ฉฐ,

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

 

 

 

๐Ÿ“Ž ๋‚ด์šฉ ์ฐธ์กฐ

- Youtube ์šฐ์•„ํ•œํ…Œํฌ: [10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐Ÿ— ํ”ผํ„ฐ์˜ ์ด๋ฒคํŠธ๋ฃจํ”„

๋Œ“๊ธ€