IT

๐Ÿš€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ ์™„์ „ ์ •๋ณต! (Promise์™€ async/await ๋™์ž‘ ์›๋ฆฌ ์‰ฝ๊ฒŒ ๋”ฅํ•˜๊ฒŒ) ๐Ÿ–ฅ๏ธ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ์—์„œ ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋Š” ํ•„์ˆ˜ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ํŠนํžˆ ๋„คํŠธ์›Œํฌ ์š”์ฒญ, ํŒŒ์ผ ์ฝ๊ธฐ ๋“ฑ ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” ์ž‘์—…์„ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ๋ฉˆ์ถ”์ง€ ์•Š๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋˜์ฃ . ์ด ๊ธ€์—์„œ๋Š” ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ์˜ ํ•ต์‹ฌ์ธ Promise์™€ async/await์˜ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ๋ˆ„๊ตฌ๋‚˜ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋„๋ก ์‰ฝ๊ฒŒ, ํ•˜์ง€๋งŒ ๊นŠ์ด ์žˆ๊ฒŒ ์„ค๋ช…ํ•ด ๋“œ๋ฆด๊ฒŒ์š”!


โณ 1. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ : ๋™๊ธฐ vs. ๋น„๋™๊ธฐ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ๊ธฐ๋ณธ์ ์œผ๋กœ ์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ(Single Thread) ์–ธ์–ด์ž…๋‹ˆ๋‹ค. ์ฆ‰, ์ž‘์—…์„ ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์”ฉ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•˜์ฃ  (๋™๊ธฐ ์ฒ˜๋ฆฌ).

  • ๋™๊ธฐ ์ฒ˜๋ฆฌ (Synchronous): A ์ž‘์—…์ด ์™„๋ฃŒ๋˜์–ด์•ผ B ์ž‘์—…์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค. ๋งŒ์•ฝ A ์ž‘์—…์ด 10์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๋ฉด, B ์ž‘์—…์€ 10์ดˆ ๋™์•ˆ ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋ฏ€๋กœ ํ™”๋ฉด์ด ๋ฉˆ์ถ”๋Š” ๋ธ”๋กœํ‚น(Blocking) ํ˜„์ƒ์ด ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค.
  • ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ (Asynchronous): ์‹œ๊ฐ„์ด ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š” A ์ž‘์—…์„ ๋ฐฑ๊ทธ๋ผ์šด๋“œ์— ๋งก๊ธฐ๊ณ , ๋‹ค์Œ ์ž‘์—…์ธ B๋ฅผ ์ฆ‰์‹œ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค. A ์ž‘์—…์ด ์™„๋ฃŒ๋˜๋ฉด ๊ฒฐ๊ณผ๋งŒ ์ „๋‹ฌ๋ฐ›์•„ ์ฒ˜๋ฆฌํ•˜์ฃ . ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฉˆ์ถ”์ง€ ์•Š์•„ ๋…ผ๋ธ”๋กœํ‚น(Non-Blocking) ๋ฐฉ์‹์ด ๊ฐ€๋Šฅํ•ด์ง‘๋‹ˆ๋‹ค.

๐Ÿ  ๋น„์œ :

  • ๋™๊ธฐ: ์‹๋‹น์—์„œ ์ฃผ๋ฌธํ•˜๊ณ  ์Œ์‹์ด ๋‚˜์˜ฌ ๋•Œ๊นŒ์ง€ ์นด์šดํ„ฐ ์•ž์—์„œ ๊ผผ์ง ์•Š๊ณ  ์„œ์„œ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋‹ค๋ฅธ ์†๋‹˜ ์ฃผ๋ฌธ ๋ถˆ๊ฐ€)
  • ๋น„๋™๊ธฐ: ์‹๋‹น์—์„œ ์ฃผ๋ฌธํ•˜๊ณ  ์ž๋ฆฌ์— ์•‰์•„ ๋‹ค๋ฅธ ์ผ์„ ํ•˜๊ฑฐ๋‚˜ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. (๋‹ค๋ฅธ ์†๋‹˜ ์ฃผ๋ฌธ ๊ฐ€๋Šฅ)

๐Ÿ“œ 2. ๋น„๋™๊ธฐ ์ฒ˜๋ฆฌ๋ฅผ ์œ„ํ•œ ์•ฝ์†, Promise์˜ ์›๋ฆฌ

Promise๋Š” ๋น„๋™๊ธฐ ์ž‘์—…์˜ ์ตœ์ข… ์™„๋ฃŒ(์„ฑ๊ณต) ๋˜๋Š” ์‹คํŒจ(์˜ค๋ฅ˜)๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ๊ฐ์ฒด์ž…๋‹ˆ๋‹ค. ๋น„๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ๋ฅผ ๋งˆ์น˜ ๋™๊ธฐ ์ž‘์—…์˜ ๊ฒฐ๊ณผ์ฒ˜๋Ÿผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๋Š” โ€˜๋ฏธ๋ž˜์˜ ๊ฐ’์— ๋Œ€ํ•œ ์•ฝ์†โ€™์ด์ฃ .

1) Promise์˜ 3๊ฐ€์ง€ ์ƒํƒœ (State)

Promise ๊ฐ์ฒด๋Š” ์ƒ์„ฑ ์ˆœ๊ฐ„๋ถ€ํ„ฐ ๊ฒฐ๊ณผ๊ฐ€ ํ™•์ •๋  ๋•Œ๊นŒ์ง€ ๋‹ค์Œ 3๊ฐ€์ง€ ์ƒํƒœ ์ค‘ ํ•˜๋‚˜๋ฅผ ๊ฐ€์ง‘๋‹ˆ๋‹ค.

์ƒํƒœ (State)์˜๋ฏธ
Pending (๋Œ€๊ธฐ)๋น„๋™๊ธฐ ์ž‘์—…์ด ์ง„ํ–‰ ์ค‘์ธ ์ดˆ๊ธฐ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.
Fulfilled (์ดํ–‰/์„ฑ๊ณต)๋น„๋™๊ธฐ ์ž‘์—…์ด ์„ฑ๊ณต์ ์œผ๋กœ ๋๋‚ฌ๊ณ , ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
Rejected (๊ฑฐ๋ถ€/์‹คํŒจ)๋น„๋™๊ธฐ ์ž‘์—…์ด ์‹คํŒจํ–ˆ๊ณ , ์˜ค๋ฅ˜(์—๋Ÿฌ)๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2) ๋™์ž‘ ํ๋ฆ„

  1. Promise ์ƒ์„ฑ (Pending): new Promise()๋กœ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด ๋Œ€๊ธฐ ์ƒํƒœ๊ฐ€ ๋ฉ๋‹ˆ๋‹ค.
  2. ๋น„๋™๊ธฐ ์ž‘์—… ์‹คํ–‰: ๋‚ด๋ถ€์˜ executor ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉฐ, ๋น„๋™๊ธฐ ์ž‘์—…์ด ์‹œ์ž‘๋ฉ๋‹ˆ๋‹ค.
  3. ๊ฒฐ๊ณผ ์ฒ˜๋ฆฌ:
    • ์„ฑ๊ณต ์‹œ: resolve ํ•จ์ˆ˜ ํ˜ธ์ถœ $\rightarrow$ Fulfilled ์ƒํƒœ๋กœ ์ „ํ™˜. ๊ฒฐ๊ณผ ๊ฐ’์€ .then()์œผ๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.
    • ์‹คํŒจ ์‹œ: reject ํ•จ์ˆ˜ ํ˜ธ์ถœ $\rightarrow$ Rejected ์ƒํƒœ๋กœ ์ „ํ™˜. ์˜ค๋ฅ˜๋Š” .catch()๋กœ ๋ฐ›์Šต๋‹ˆ๋‹ค.

3) Promise ์ฒด์ด๋‹ (.then(), .catch())

.then() ๋ฉ”์„œ๋“œ๋ฅผ ํ†ตํ•ด ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋น„๋™๊ธฐ ์ž‘์—…์„ ์ˆœ์ฐจ์ ์œผ๋กœ ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋ฅผ Promise ์ฒด์ด๋‹(Chaining)์ด๋ผ๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

JavaScript

// A ์ž‘์—… -> B ์ž‘์—… -> C ์ž‘์—… ์ˆœ์œผ๋กœ ์‹คํ–‰
fetchUser()
  .then(getUserData) // A ์„ฑ๊ณต -> B ์‹คํ–‰
  .then(formatData)  // B ์„ฑ๊ณต -> C ์‹คํ–‰
  .catch(handleError); // ์ค‘๊ฐ„์— ์‹คํŒจํ•˜๋ฉด catch๋กœ ์ด๋™

โœจ 3. Promise๋ฅผ ๋”์šฑ ์‰ฝ๊ฒŒ, async/await์˜ ์›๋ฆฌ

async/await๋Š” ES8(ECMAScript 2017)์— ๋„์ž…๋œ ๋ฌธ๋ฒ•์œผ๋กœ, Promise๋ฅผ ๋”์šฑ ๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ณด์ด๊ฒŒ ๋งŒ๋“ค์–ด ๊ฐ€๋…์„ฑ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.

1) async ํ•จ์ˆ˜

ํ•จ์ˆ˜ ์•ž์— async ํ‚ค์›Œ๋“œ๋ฅผ ๋ถ™์ด๋ฉด, ์ด ํ•จ์ˆ˜๋Š” ํ•ญ์ƒ Promise๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋„๋ก ๋งŒ๋“ญ๋‹ˆ๋‹ค.

  • async function fetchData() { return '๊ฒฐ๊ณผ'; }
  • ์ด ํ•จ์ˆ˜๋Š” ์ž๋™์œผ๋กœ Promise.resolve('๊ฒฐ๊ณผ')๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

2) await ํ‚ค์›Œ๋“œ

await ํ‚ค์›Œ๋“œ๋Š” ๋ฐ˜๋“œ์‹œ async ํ•จ์ˆ˜ ์•ˆ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  • await์€ Promise ์•ž์— ๋ถ™์—ฌ์„œ ์‚ฌ์šฉํ•˜๋ฉฐ, ํ•ด๋‹น Promise๊ฐ€ Fulfilled ๋˜๋Š” Rejected ์ƒํƒœ๊ฐ€ ๋  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  • Promise๊ฐ€ ์„ฑ๊ณต์ ์œผ๋กœ ์ดํ–‰๋˜๋ฉด, await์€ Promise์˜ ๊ฒฐ๊ณผ ๊ฐ’(resolve ๊ฐ’)์„ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.

3) ๋™์ž‘ ์›๋ฆฌ (์ œ๋„ˆ๋ ˆ์ดํ„ฐ์™€ ์ด๋ฒคํŠธ ๋ฃจํ”„)

async/await๊ฐ€ ๋™๊ธฐ์ฒ˜๋Ÿผ ๋ณด์ด์ง€๋งŒ ๋น„๋™๊ธฐ๋กœ ๋™์ž‘ํ•˜๋Š” ํ•ต์‹ฌ์€ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ๋‚ด๋ถ€์˜ ์ด๋ฒคํŠธ ๋ฃจํ”„(Event Loop)์™€ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ(Generator) ํ•จ์ˆ˜ ์›๋ฆฌ์— ๊ธฐ๋ฐ˜ํ•ฉ๋‹ˆ๋‹ค.

  1. async ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋ฉด, ๋‚ด๋ถ€์ ์œผ๋กœ ์ œ๋„ˆ๋ ˆ์ดํ„ฐ์ฒ˜๋Ÿผ ๋™์ž‘ํ•˜๋Š” ํ•จ์ˆ˜๋กœ ๋ณ€ํ™˜๋ฉ๋‹ˆ๋‹ค.
  2. await somePromise()๋ฅผ ๋งŒ๋‚˜๋ฉด, ํ•ด๋‹น Promise์˜ ์ฒ˜๋ฆฌ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฝ๋‹ˆ๋‹ค.
  3. ์ด๋•Œ, async ํ•จ์ˆ˜๋Š” ์ž ์‹œ ์‹คํ–‰์„ ์ผ์‹œ ์ค‘์ง€(Yield)ํ•˜๊ณ , ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋ฅผ ๋ง‰์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
  4. Promise๊ฐ€ Fulfilled ์ƒํƒœ๊ฐ€ ๋˜์–ด ๊ฒฐ๊ณผ๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋ฉด, ์ด๋ฒคํŠธ ๋ฃจํ”„๋ฅผ ํ†ตํ•ด ํƒœ์Šคํฌ ํ(Task Queue)์— ์ฝœ๋ฐฑ์ด ๋“ฑ๋ก๋˜๊ณ , ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๊ฐ€ ๋น„์–ด์žˆ์„ ๋•Œ ์žฌ๊ฐœ(Resume)๋˜์–ด ๋‹ค์Œ ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.

JavaScript

async function process() {
  const resultA = await taskA(); // 1. taskA ์‹œ์ž‘, async ํ•จ์ˆ˜ ์ผ์‹œ ์ค‘์ง€
  // (์ค‘์ง€๋˜๋Š” ๋™์•ˆ ๋ฉ”์ธ ์Šค๋ ˆ๋“œ๋Š” ๋‹ค๋ฅธ ์ž‘์—… ์ฒ˜๋ฆฌ ๊ฐ€๋Šฅ)
  const resultB = await taskB(resultA); // 2. taskA ์™„๋ฃŒ ํ›„ ์žฌ๊ฐœ, taskB ์‹œ์ž‘
  return resultB;
}

๐Ÿ› ๏ธ 4. ๊ฒฐ๋ก : ์–ธ์ œ ๋ฌด์—‡์„ ์‚ฌ์šฉํ•ด์•ผ ํ• ๊นŒ?

๊ตฌ๋ถ„Promiseasync/await
๋ฌธ๋ฒ•.then(), .catch() ์ฒด์ด๋‹ ๋ฐฉ์‹try...catch๋ฅผ ์‚ฌ์šฉํ•œ ๋™๊ธฐ ์ฝ”๋“œ ํ˜•ํƒœ
๊ฐ€๋…์„ฑ๋‹ค์†Œ ๋ณต์žกํ•ด์งˆ ์ˆ˜ ์žˆ์Œ (์ฝœ๋ฐฑ ์ง€์˜ฅ ๋ฐฉ์ง€)์••๋„์ ์œผ๋กœ ๋†’์Œ (๋™๊ธฐ ์ฝ”๋“œ์ฒ˜๋Ÿผ ๋ณด์ž„)
์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ.catch() ์‚ฌ์šฉtry...catch ๋ธ”๋ก ์‚ฌ์šฉ
์‚ฌ์šฉ์ฒ˜Promise ๊ธฐ๋ฐ˜ API๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ, ์ €์ˆ˜์ค€(Low-level) ์ฒ˜๋ฆฌ ์‹œ๋Œ€๋ถ€๋ถ„์˜ ๋น„๋™๊ธฐ ์ฝ”๋“œ (๊ฐ€๋…์„ฑ ์ตœ์šฐ์„ )

โœ… ์ถ”์ฒœ ๊ฐ€์ด๋“œ

  • ํ˜„์žฌ๋Š”: async/await๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์••๋„์ ์œผ๋กœ ๊ถŒ์žฅ๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ์˜ ํ๋ฆ„์„ ์ดํ•ดํ•˜๊ธฐ ๊ฐ€์žฅ ์‰ฝ๊ณ  ์˜ค๋ฅ˜ ์ฒ˜๋ฆฌ(try...catch)๋„ ๊ฐ„ํŽธํ•ฉ๋‹ˆ๋‹ค.
  • Promise์˜ ์ดํ•ด๋Š” ํ•„์ˆ˜: async/await๋Š” Promise ์œ„์— ๋ง์”Œ์›Œ์ง„ ๋ฌธ๋ฒ•์  ์„คํƒ•(Syntactic Sugar)์ผ ๋ฟ์ด๋ฏ€๋กœ, ๊ทผ๋ณธ ์›๋ฆฌ์ธ Promise์˜ ์ƒํƒœ์™€ ๋™์ž‘ ์›๋ฆฌ๋ฅผ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.
infodori1234

Recent Posts

๐Ÿ–ฅ NetBIOS over TCP IP NBT ์™„์ „ ๊ฐ€์ด๋“œ

๋กœ์ปฌ ๋„คํŠธ์›Œํฌ ํ™˜๊ฒฝ์„ ์กฐ๊ธˆ์ด๋ผ๋„ ๋‹ค๋ค„๋ณธ ์‚ฌ๋žŒ์ด๋ผ๋ฉด ํ•œ ๋ฒˆ์ฏค์€ ๋งˆ์ฃผ์น˜๋Š” ์ต์ˆ™ํ•œ ๋‹จ์–ด๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. ๋ฐ”๋กœ NetBIOS์™€ NBT์ž…๋‹ˆ๋‹ค.…

2๊ฐœ์›” ago

๐Ÿ  JSON Schema: ๋ฐ์ดํ„ฐ ์œ ํšจ์„ฑ ๊ฒ€์ฆ์˜ ํ‘œ์ค€ ์„ค๊ณ„๋„ ๐Ÿ–ฅ

์•ˆ๋…•ํ•˜์„ธ์š”! ํ˜„๋Œ€ ์›น ๊ฐœ๋ฐœ์—์„œ ๋ฐ์ดํ„ฐ ๊ตํ™˜์˜ ํ•ต์‹ฌ์ธ JSON(JavaScript Object Notation)์„ ๋”์šฑ ๊ฐ•๋ ฅํ•˜๊ณ  ์•ˆ์ •์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ฃผ๋Š” ๋„๊ตฌ,…

2๊ฐœ์›” ago

๐Ÿ  ECMAScript 3 ํ˜ธํ™˜์„ฑ ์™„์ „ ์ •๋ฆฌ ๊ฐ€์ด๋“œ

โŒ ECMAScript 3(E3)๋ž€ ๋ฌด์—‡์ผ๊นŒ ECMAScript 3๋Š” 1999๋…„์— ๊ณต์‹ํ™”๋œ ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํ‘œ์ค€์ด๋‹ค. ์ง€๊ธˆ ๋ณด๋ฉด ์˜ค๋ž˜๋œ ๊ธฐ์ˆ  ๊ฐ™์ง€๋งŒ,…

2๊ฐœ์›” ago

๐Ÿ–ฅ CoffeeScript ์™„์ „ ๊ฐ€์ด๋“œ

CoffeeScript๋Š” ํ•œ๋•Œ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ ์ƒํƒœ๊ณ„์—์„œ ๋งค์šฐ ์ธ๊ธฐ ์žˆ์—ˆ๋˜ ์–ธ์–ด์˜€๊ณ , ์ง€๊ธˆ๋„ ํŠน์ • ํ”„๋กœ์ ํŠธ๋‚˜ ๋ ˆ๊ฑฐ์‹œ ์‹œ์Šคํ…œ, ๊ฐ„๊ฒฐํ•œ…

2๊ฐœ์›” ago

๐Ÿ  ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak) ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ธฐ: ๐Ÿ–ฅ ๋‚ญ๋น„๋˜๋Š” ์ปดํ“จํ„ฐ์˜ ๊ธฐ์–ต๋ ฅ โŒ

ํ˜„๋Œ€์ ์ธ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ํ™˜๊ฒฝ์—์„œ ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜(Memory Leak)๋Š” ์—ฌ์ „ํžˆ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์„ฑ๋Šฅ ์ €ํ•˜์™€ ์ถฉ๋Œ์„ ์ผ์œผํ‚ค๋Š” ์ฃผ์š” ์›์ธ ์ค‘…

2๊ฐœ์›” ago

๐Ÿ–ฅ๏ธ ๋ธŒ๋ผ์šฐ์ € ๋ Œ๋”๋ง ๊ณผ์ • (CRP) : ์›นํŽ˜์ด์ง€๊ฐ€ ๋ˆˆ์•ž์— ๋‚˜ํƒ€๋‚˜๊ธฐ๊นŒ์ง€์˜ ๋งˆ๋ฒ•

(Critical Rendering Path, ํ•ต์‹ฌ ๋ Œ๋”๋ง ๊ฒฝ๋กœ ์™„๋ฒฝ ์ดํ•ด) ์›น ๋ธŒ๋ผ์šฐ์ €์— ์ฃผ์†Œ๋ฅผ ์ž…๋ ฅํ•˜๊ณ  ์—”ํ„ฐ๋ฅผ ๋ˆ„๋ฅด๋Š” ์ˆœ๊ฐ„,…

3๊ฐœ์›” ago