๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
์นดํ…Œ๊ณ ๋ฆฌ ์—†์Œ

JavaScript ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ตœ์ ํ™” ๊ธฐ๋ฒ• ์ดˆ๋ณด๋ถ€ํ„ฐ ์ „๋ฌธ๊ฐ€๊นŒ์ง€

by ์—์ด์—์Šค๋น„ํƒ€ 2025. 4. 27.
๋ฐ˜์‘ํ˜•

๐Ÿง‘‍๐Ÿ’ป JavaScript ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ตœ์ ํ™” ๊ธฐ๋ฒ• ์ดˆ๋ณด๋ถ€ํ„ฐ ์ „๋ฌธ๊ฐ€๊นŒ์ง€ ๐Ÿš€


โœจ ์—ฌ๋Ÿฌ๋ถ„์€ JavaScript ๊ฐœ๋ฐœ์ž์ด์‹ ๊ฐ€์š”? ์•„๋‹ˆ๋ฉด ์ด์ œ ๋ง‰ ์‹œ์ž‘ํ–ˆ๊ฑฐ๋‚˜ ์–ด๋А ์ •๋„ ๊ฒฝํ—˜์€ ์žˆ๋Š”๋ฐ ์„ฑ๋Šฅ ํ–ฅ์ƒ์— ๊ณ ๋ฏผ์ด์‹ ๊ฐ€์š”? ๐Ÿค” ์˜ค๋Š˜์€ ‘JavaScript ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ตœ์ ํ™”’์— ๋Œ€ํ•ด ์นœ๊ทผํ•˜๋ฉด์„œ๋„ ์ „๋ฌธ๊ฐ€ ์ˆ˜์ค€์˜ ๊นŠ์ด ์žˆ๊ณ  ์‹ค์šฉ์ ์ธ ์ •๋ณด๋ฅผ ํ•จ๊ป˜ ๋‚˜๋ˆ ๋ณด๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค! ๐Ÿ’ช๐Ÿ’ป

๋ชจ๋‘๊ฐ€ ์•Œ๊ณ  ์‹ถ์–ดํ•˜๋Š” ‘๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ๋น„๋ฐ€’, ์ œ๋Œ€๋กœ ์ดํ•ดํ•˜๊ณ  ์ตœ์ ํ™”ํ•˜๋Š” ๋ฐฉ๋ฒ•, ๊ทธ๋ฆฌ๊ณ  ์—ฌ๋Ÿฌ๋ถ„์˜ ์ฝ”๋“œ๊ฐ€ ‘๋น ๋ฅด๊ณ  ๊น”๋”ํ•˜๊ฒŒ’ ๋Œ์•„๊ฐ€๊ฒŒ ๋งŒ๋“ค์–ด์ค„ ํ•ต์‹ฌ ๋…ธํ•˜์šฐ๋ฅผ ๋‹จ๊ณ„๋ณ„๋กœ ์•ˆ๋‚ดํ• ๊ฒŒ์š”! ๐ŸŽฏ๐ŸŒˆ


๐Ÿ” ์™œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ตœ์ ํ™”์— ์‹ ๊ฒฝ ์“ธ๊นŒ? ๐ŸŽฏ

  • โœ… ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ: ๋А๋ฆฐ ํŽ˜์ด์ง€, ๋กœ๋”ฉ ๋Œ€๊ธฐ ์‹œ๊ฐ„ ์ค„์ด๊ธฐ โšก
  • โœ… ์„ฑ๋Šฅ ๊ทน๋Œ€ํ™”: CPU, ๋„คํŠธ์›Œํฌ ์ž์› ํšจ์œจ์  ํ™œ์šฉ ๐Ÿ’ป
  • โœ… ์ฝ”๋“œ ์œ ์ง€๋ณด์ˆ˜ ์šฉ์ด: ๊ฐ€๋…์„ฑ ๋†’๊ณ  ๊น”๋”ํ•œ ๋น„๋™๊ธฐ ์ฝ”๋“œ โœ๏ธ

ํ†ต๊ณ„๋กœ ๋ณด๋Š” ํ˜„์‹ค
๐ŸŒ ๋Œ€ํ˜• ์„œ๋น„์Šค์˜ 70% ์ด์ƒ์ด ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ตœ์ ํ™” ์‹คํŒจ๋กœ ์ธํ•œ ๋ณ‘๋ชฉ ๋ฌธ์ œ๋ฅผ ๊ฒช๊ณ  ์žˆ๊ณ , ์ด๋ฅผ ๊ฐœ์„ ํ•œ ์‚ฌ๋ก€๋Š” ์„œ๋ฒ„ ๋น„์šฉ ์ ˆ๊ฐ๊ณผ ์‚ฌ์šฉ์ž ๋งŒ์กฑ๋„ ํ–ฅ์ƒ์— ํฐ ๋„์›€์„ ์ฃผ๊ณ  ์žˆ์–ด์š”! ๐Ÿ“ˆ


๐Ÿ› ๏ธ JavaScript ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๊ธฐ์ดˆ๋ถ€ํ„ฐ ์ตœ์ ํ™”๊นŒ์ง€


1๏ธโƒฃ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ๊ธฐ์ดˆ ์ดํ•ด ๐Ÿ“

  • ๐Ÿ”ธ ์ฝœ๋ฐฑ ํ•จ์ˆ˜: ๊ฐ€์žฅ ๊ธฐ๋ณธ์ ์ธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ• โญ
    ๐Ÿ‘‰ ์˜ˆ: setTimeout(), ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ
    ๐Ÿ‘‰ ๋‹จ์ : ์ฝœ๋ฐฑ ํ—ฌ(์ฝœ๋ฐฑ ์ง€์˜ฅ, callback hell), ๊ฐ€๋…์„ฑ ๋‚ฎ์Œ ๐Ÿ˜ต
  • ๐Ÿ”ธ Promises (ํ”„๋กœ๋ฏธ์Šค): ์ฝœ๋ฐฑ ๋ฌธ์ œ ํ•ด๊ฒฐ, ์ฒด์ด๋‹ ๊ฐ€๋Šฅ โœจ
    ๐Ÿ‘‰ ์˜ˆ: fetch(), new Promise() ์‚ฌ์šฉ
    ๐Ÿ‘‰ ์žฅ์ : ๋ช…ํ™•ํ•œ ์„ฑ๊ณต/์‹คํŒจ ์ฒ˜๋ฆฌ, ์—ฐ์† ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ
  • ๐Ÿ”ธ async/await: ์ฝ๊ธฐ๋„ ์‰ฝ๊ณ , ๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ณด์—ฌ ํ›Œ๋ฅญํ•œ ์ตœ์ ํ™” ๋„๊ตฌ ๐Ÿ…
    ๐Ÿ‘‰ ์˜ˆ: const data = await fetchData()

2๏ธโƒฃ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ํ•ต์‹ฌ ๊ธฐ๋ฒ• ๐Ÿ’ก

  • ๐Ÿ”น ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ๋Œ€๋น„ ์ง๋ ฌ ์ฒ˜๋ฆฌ
    โœ… ํ•„์š”ํ•œ ๊ฒฝ์šฐ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ(Promise.all())๋กœ ๋ณ‘๋ ฌ๋กœ ์š”์ฒญ/์ž‘์—… ์ˆ˜ํ–‰
    โœ… ์ˆœ์ฐจ์ฒ˜๋ฆฌ๋ณด๋‹ค 2๋ฐฐ-10๋ฐฐ ๋น ๋ฅด๊ฒŒ ๋๋‚ผ ์ˆ˜ ์žˆ์–ด์š”! ๐Ÿš€
  • ๐Ÿ”น ์ ์ ˆํ•œ ์—๋Ÿฌ ํ•ธ๋“ค๋ง ๊ตฌํ˜„
    โœ… try/catch ๋˜๋Š” .catch() ํ™œ์šฉ
    โœ… ์‚ฌ์šฉ์ž์—๊ฒŒ ์นœ์ ˆํ•œ ์‹คํŒจ ๋ฉ”์‹œ์ง€ ์ œ๊ณต, ์žฌ์‹œ๋„ ๋กœ์ง ๋„ฃ๊ธฐ
  • ๐Ÿ”น ๋กœ๋”ฉ ์ƒํƒœ ๊ด€๋ฆฌ
    โœ… UI์— ๋กœ๋”ฉ ์ธ๋””์ผ€์ดํ„ฐ ํ‘œ์‹œ, ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ํ–ฅ์ƒ
    โœ… ์˜ˆ๋ฅผ ๋“ค๋ฉด, isLoading ์ƒํƒœ ๋ณ€์ˆ˜ ๋„์ž…

  • ๐Ÿ”น ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง ๋ฐฉ์ง€
    โœ… ์ƒํƒœ ๋ณ€ํ™” ๊ฐ์ง€ ์ตœ์ ํ™” (React์˜ ๊ฒฝ์šฐ useCallback, useMemo)
    โœ… ์ด๋ฒคํŠธ ๋ฆฌ์Šค๋„ˆ์™€ ๋น„๋™๊ธฐ ๋ฐ์ดํ„ฐ fetch ์ตœ์ ํ™”
  • ๐Ÿ”น ๋„คํŠธ์›Œํฌ ์š”์ฒญ ์ตœ์†Œํ™”
    โœ… ์บ์‹ฑ ์ „๋žต ์ ์šฉ (Service Worker, LocalStorage ํ™œ์šฉ)
    โœ… ์š”์ฒญ ์ค‘๋ณต ๋ฐฉ์ง€ ์„ค๊ณ„

3๏ธโƒฃ ์‹ค์ „ ์˜ˆ์ œ & ์ตœ์ ํ™” ํŒ ๐Ÿ†

๐Ÿ“ ์˜ˆ์ œ 1: ์—ฌ๋Ÿฌ API ์š”์ฒญ ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ

javascript
// ๋ณ‘๋ ฌ๋กœ ์—ฌ๋Ÿฌ ์š”์ฒญ ๋ณด๋‚ด๊ธฐ
async function fetchMultipleData() {
try {
const [userData, productData, commentData] = await Promise.all([
fetch('/api/user'),
fetch('/api/products'),
fetch('/api/comments')
])
// ๋ฐ์ดํ„ฐ ์ฒ˜๋ฆฌ
console.log(userData, productData, commentData)
} catch (error) {
console.error('์š”์ฒญ ์‹คํŒจ!', error)
}
}

โญ Tip!
๐Ÿ”ธ ๋ณ‘๋ ฌ ์š”์ฒญ์€ Promise.all()์ด ํ•ต์‹ฌ!
๐Ÿ”ธ ์š”์ฒญ ์„ฑ๊ณต, ์‹คํŒจ๋ฅผ ๋™์‹œ์— ๊ด€๋ฆฌํ•˜๋Š” ๋Œ€์‹  ์‹คํŒจ ์‹œ ์ „์ฒด ์‹คํŒจ ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ!


๐Ÿ“ ์˜ˆ์ œ 2: ๋น„๋™๊ธฐ ๋ Œ๋”๋ง ์ตœ์ ํ™”

React์—์„œ useMemo, useCallback ์‚ฌ์šฉ์œผ๋กœ ๋ถˆํ•„์š”ํ•œ ์žฌ๋ Œ๋”๋ง ๋ฐฉ์ง€์™€ ์„ฑ๋ŠฅUP! ๐Ÿ’ฅ

javascript
const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b])
const handleClick = useCallback(() => { /* ์ด๋ฒคํŠธ ์ฒ˜๋ฆฌ */ }, [deps])

โญ Tip!
๐Ÿ”ธ ์ปดํฌ๋„ŒํŠธ ์•ˆ์— ์—ฐ์‚ฐ์ด๋‚˜ ํ•จ์ˆ˜๊ฐ€ ๋งŽ๋‹ค๋ฉด useMemo, useCallback ํ•„์ˆ˜!
๐Ÿ”ธ ์„ฑ๋Šฅ ํ–ฅ์ƒ๋ฟ ์•„๋‹ˆ๋ผ ๊ฐ€๋…์„ฑ๋„ ์ข‹์•„์ง‘๋‹ˆ๋‹ค ๐Ÿ˜Š


๐Ÿ”ฅ ๋น„๋™๊ธฐ ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ ์‹ค์ „ ๊ฟ€ํŒ! ๐Ÿฅ‡

  • โœ… ๋Œ€๊ธฐ์‹œ๊ฐ„ ์ตœ์†Œํ™”: Promise.race() ๋˜๋Š” ํƒ€์ž„์•„์›ƒ ์„ค์ •์œผ๋กœ ๋ฌดํ•œ ๋Œ€๊ธฐ ๋ฐฉ์ง€
  • โœ… Rate Limiting (์š”์ฒญ ์ œํ•œ) ๊ด€๋ฆฌ: API ํ˜ธ์ถœ๋Ÿ‰ ์กฐ์ ˆ, ์„œ๋ฒ„ ๋ถ€ํ•˜ ๋ฐฉ์ง€
  • โœ… ์บ์‹œ ํ™œ์šฉ: ์ตœ๊ทผ ์š”์ฒญ ๋ฐ์ดํ„ฐ ์ €์žฅ, ์žฌ์‚ฌ์šฉ
  • โœ… ์ฆ‰์‹œ ์‹คํ–‰ ํ•จ์ˆ˜ ํ™œ์šฉ: ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์‹œ์ž‘ ์‹œ์  ์ œ์–ด!
  • โœ… ๋ชจ๋ฐ”์ผ ์„ฑ๋Šฅ ๊ณ ๋ ค: ์ ์€ ๋ฐ์ดํ„ฐ, ๋ฐฐํ„ฐ๋ฆฌ ์†Œ๋ชจ ์ตœ์†Œํ™”! ๐Ÿ”‹

๐ŸŽฏ ๊ฒฐ๋ก : ๋งˆ์Šคํ„ฐํ•˜๊ธฐ ์œ„ํ•œ ์ตœ์ข… ํŒ โœจ

โœ… ๊ณ„ํš๋ถ€ํ„ฐ ์‹œ์ž‘! ์–ด๋–ค ์š”์ฒญ์ด ๋ณ‘๋ ฌ, ์ง๋ ฌ๋กœ ์ฒ˜๋ฆฌํ• ์ง€ ๋ช…ํ™•ํžˆ ํ•˜์„ธ์š”
โœ… ์ ๊ทน์ ์œผ๋กœ Promise.all() ํ™œ์šฉ! ์—ฌ๋Ÿฌ ์ž‘์—… ๋™์‹œ์— ํ•˜๋„๋ก ์„ค๊ณ„ํ•˜์„ธ์š” โœŒ๏ธ
โœ… async/await ๋ฌธ๋ฒ•์œผ๋กœ ๊ฐ€๋…์„ฑ ๋†’์ด๊ธฐ – ํ›„ํ›„, ์ฝ๊ธฐ ์‰ฝ๊ณ  ๋””๋ฒ„๊น…๋„ ์‰ฌ์›Œ์š”!
โœ… ์„ฑ๋Šฅ ์ธก์ •! ๊ฐœ๋ฐœ์ž ๋„๊ตฌ(DevTools)์™€ ๋ชจ๋‹ˆํ„ฐ๋ง ํˆด ํ™œ์šฉ์œผ๋กœ ๋ณ‘๋ชฉ ์ฐพ๊ธฐ ๐Ÿ’ป
โœ… ๋Š์ž„์—†์ด ์—ฐ์Šต! ๋‹ค์–‘ํ•œ ํ”„๋กœ์ ํŠธ์— ๋„์ „ํ•˜๋ฉฐ ๊ฒฝํ—˜ ์Œ“๊ธฐ ๐Ÿ’ช


๐Ÿ”œ ์•ž์œผ๋กœ์˜ ๋‹จ๊ณ„? ๊ณ„์†ํ•ด์„œ ์„ฑ์žฅํ•˜๋ ค๋ฉด… ๐Ÿš€

๐Ÿ“š ์ถ”์ฒœ ์ž๋ฃŒ

  • "JavaScript and JQuery" by Jon Duckett ๐Ÿ“–
  • MDN Web Docs – Promises, async/await
  • ์˜จ๋ผ์ธ ๊ฐ•์ขŒ: Udemy, Inflearn์˜ ์‹ค์ „ ๋น„๋™๊ธฐ ๊ฐ•์˜

๐ŸŽ‰ ์ง€๊ธˆ ๋ฐ”๋กœ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์ตœ์ ํ™” ๊ธฐ์ˆ ์„ ์ตํžˆ๊ณ , ๋‚˜๋งŒ์˜ ๋น ๋ฅธ JavaScript ์ฝ”๋“œ๋ฅผ ๋งŒ๋“ค์–ด๋ณด์„ธ์š”! ๐Ÿš€


โœ… ํ•ต์‹ฌ ์ฒดํฌ๋ฆฌ์ŠคํŠธ ์ •๋ฆฌ

  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ๊ฐ„๋‹จํ•œ ์ดํ•ด์™€ Promise, async/await ํ™œ์šฉ๋ฒ• ์ˆ™์ง€
  • ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ์™€ ์ง๋ ฌ ์ฒ˜๋ฆฌ์˜ ์ฐจ์ด์ ๊ณผ ์ ์ ˆํ•œ ์‚ฌ์šฉ ์‹œ์  ํŒŒ์•…
  • ์—๋Ÿฌ ํ•ธ๋“ค๋ง๊ณผ ๋กœ๋”ฉ ์ƒํƒœ ๊ด€๋ฆฌ ์ˆ™๋‹ฌ
  • Promise.all()๊ณผ Promise.race() ํ™œ์šฉ๋ฒ• ์ตํžˆ๊ธฐ
  • UI ์ตœ์ ํ™”๋ฅผ ์œ„ํ•œ React Hook ํ™œ์šฉ
  • ์„ฑ๋Šฅ ์ธก์ • ๋ฐ ๊ฐœ์„  ๋ฐ˜๋ณต

โš ๏ธ ๋์œผ๋กœ, JavaScript ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ์„ธ๊ณ„๋Š” ๋์ด ์—†์–ด์š”! ๐Ÿค— ๋Š์ž„์—†์ด ์‹ค์Šตํ•˜๊ณ , ์ตœ์ ํ™” ๊ธฐ๋ฒ•์„ ์Šต๋“ํ•˜๋ฉฐ, ์—ฌ๋Ÿฌ๋ถ„ ์ฝ”๋“œ๊ฐ€ ‘๋ฒˆ๊ฐœ์ฒ˜๋Ÿผ ๋น ๋ฅธ’ ๋ชจ์Šต์œผ๋กœ ๋ฐœ์ „ํ•˜๋Š” ๊ทธ๋‚ ๊นŒ์ง€ ํ•จ๊ป˜ ๋‹ฌ๋ ค๋ด…์‹œ๋‹ค!๐Ÿ’ฅ๐Ÿ”ฅ


๐ŸŽ‰ ๊ถ๊ธˆํ•œ ์ ์ด๋‚˜ ๊ณต์œ ํ•˜๊ณ  ์‹ถ์€ ๋…ธํ•˜์šฐ๊ฐ€ ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๋‚จ๊ฒจ์ฃผ์„ธ์š”! ๋ชจ๋‘ ํ•จ๊ป˜ ์„ฑ์žฅํ•˜๋Š” JS ์ปค๋ฎค๋‹ˆํ‹ฐ, ์ง€๊ธˆ ๋ฐ”๋กœ ์‹œ์ž‘ํ•ฉ์‹œ๋‹ค! ๐Ÿš€๐ŸŽฏ

์ด์ „ ๊ธ€ ๋ณด๊ธฐ!!

๋ฐ˜์‘ํ˜•