๐Ÿ“•[์ฑ…] ์™์™ ๋“ค์–ด์˜ค๋Š” ํ•จ์ˆ˜ํ˜• ์ฝ”๋”ฉ - 35,36

rivolt0421ยท2023๋…„ 4์›” 30์ผ
0

๐Ÿ“•์ฑ…

๋ชฉ๋ก ๋ณด๊ธฐ
20/26

395p ~ 419p

์š”์•ฝ

ํƒ€์ž„๋ผ์ธ

  • ํƒ€์ž„๋ผ์ธ : "์•ก์…˜์„ ์ˆœ์„œ๋Œ€๋กœ ๋‚˜์—ดํ•œ ๊ฒƒ"
  • ํƒ€์ž„๋ผ์ธ ๋‹ค์ด์–ด๊ทธ๋žจ : "์‹œ๊ฐ„์— ๋”ฐ๋ฅธ ์•ก์…˜ ์ˆœ์„œ๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ํ‘œ์‹œํ•œ ๊ฒƒ"

ํƒ€์ž„๋ผ์ธ ๊ธฐ๋ณธ ๊ทœ์น™

  1. ํƒ€์ž„๋ผ์ธ์—๋Š” ์•ก์…˜๋งŒ ๊ทธ๋ฆฐ๋‹ค.

    • ๊ณ„์‚ฐ์€ ์‹คํ–‰์‹œ์ ์— ์˜ํ–ฅ์„ ๋ฐ›์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— ๊ทธ๋ฆฌ์ง€ ์•Š๋Š”๋‹ค.
  2. ๋‘ ์•ก์…˜์ด ์ˆœ์„œ๋Œ€๋กœ ๋‚˜ํƒ€๋‚˜๋ฉด ๊ฐ™์€ ํƒ€์ž„๋ผ์ธ์— ๋„ฃ๋Š”๋‹ค.

sendEmail1();
sendEmail2();
  1. ๋‘ ์•ก์…˜์ด ๋™์‹œ์— ์‹คํ–‰๋˜๊ฑฐ๋‚˜ ์ˆœ์„œ๋ฅผ ์˜ˆ์ƒํ•  ์ˆ˜ ์—†๋‹ค๋ฉด ๋ถ„๋ฆฌ๋œ ํƒ€์ž„๋ผ์ธ์— ๋„ฃ๋Š”๋‹ค.
setTimeout(sendEmail1, Math.random()*10000);
setTimeout(sendEmail2, Math.random()*10000);

โžก๏ธ ์•ก์…˜์ด ์„œ๋กœ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ, ํ”„๋กœ์„ธ์Šค, ๊ธฐ๊ณ„, ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ ์—์„œ ์‹คํ–‰๋˜๋ฉด ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž„๋ผ์ธ์— ํ‘œ์‹œํ•œ๋‹ค.

์•ก์…˜ ์ˆœ์„œ์—์„œ ์ฃผ์˜ํ•  ์ 

  1. ++์™€ += ๋Š” ์„ธ ๋‹จ๊ณ„์ด๋‹ค.

    total++
    
    // origin
    var temp = total;	// ์ฝ๊ธฐ (์•ก์…˜)
    temp = temp + 1;	// ๋”ํ•˜๊ธฐ (๊ณ„์‚ฐ)
    total = temp;		// ์“ฐ๊ธฐ (์•ก์…˜)

    โžก๏ธ ๋”ฐ๋ผ์„œ ๋‘ ๊ฐœ์˜ ์•ก์…˜์œผ๋กœ ๋‹ค์ด์–ด๊ทธ๋žจ์— ํ‘œ์‹œํ•ด์•ผ ํ•จ.

  2. ์ธ์ž๋Š” ํ•จ์ˆ˜๋ฅผ ๋ถ€๋ฅด๊ธฐ ์ „์— ์‹คํ–‰ํ•œ๋‹ค.

    console.log(total);
    
    // origin
    temp = total;
    console.log(temp);

    โžก๏ธ ์ „์—ญ ๋ณ€์ˆ˜๋ฅผ ์ฝ๋Š” ๊ฒƒ๋„ ์•ก์…˜์ž„์„ ๊ธฐ์–ต.

๋‹ค์ด์–ด๊ทธ๋žจ์„ ๊ทธ๋ฆฌ๊ธฐ ์œ„ํ•œ ์„ธ ๋‹จ๊ณ„

  1. ์•ก์…˜์„ ํ™•์ธํ•œ๋‹ค.
    • ๊ณ„์‚ฐ์€ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š์•„๋„ ๋œ๋‹ค.
function add_item_to_cart(name, price, quantity) {
  cart = add_item(cart, name, price, quantity);		// cart ์ฝ๊ธฐ, ์“ฐ๊ธฐ
  calc_cart_total();
}

function calc_cart_total() {
  total = 0;	// total ์“ฐ๊ธฐ
  cost_ajax(cart, function(cost) {	// cart ์ฝ๊ธฐ	// cost_ajax ํ˜ธ์ถœํ•˜๊ธฐ
    total += cost;	// total ์ฝ๊ธฐ, ์“ฐ๊ธฐ
    shipping_ajax(cart, function(shipping) {	// cart ์ฝ๊ธฐ	// shipping_ajax ํ˜ธ์ถœํ•˜๊ธฐ
      total += shipping;	// total ์ฝ๊ธฐ, ์“ฐ๊ธฐ
      update_total_dom(total);	// total ์ฝ๊ธฐ	// update_total_dom ํ˜ธ์ถœํ•˜๊ธฐ
    });
  });
}
  1. ๊ฐ ์•ก์…˜์„ ๊ทธ๋ฆฐ๋‹ค.

    • ๋น„๋™๊ธฐ ์ฝœ๋ฐฑ์€ ์ƒˆ๋กœ์šด ํƒ€์ž„๋ผ์ธ์— ํ‘œ์‹œํ•ด์•ผ ํ•œ๋‹ค.

    • ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ์ œํ•œํ•˜๊ธฐ ์œ„ํ•ด ์ ์„ ์„ ์‚ฌ์šฉํ•œ๋‹ค. (ajax ์ฝœ๋ฐฑ์€ ajax ์š”์ฒญ ์ „์— ์‹คํ–‰ํ•  ์ˆ˜ ์—†๋‹ค)

      ๋‹ค๋ฅธ ์˜ˆ์‹œ>

      saveUserAjax(user, function() {
        setUserLoadingDOM(false);	// ์ฝœ๋ฐฑ ๋‚ด์šฉ
      });
      
      setUserLoadingDOM(true);
      
      saveDocumentAjax(document, function() {
        setDocLoadingDOM(false);	// ์ฝœ๋ฐฑ ๋‚ด์šฉ
      });
      
      setDocLoadingDOM(true);

    • ์ฝœ๋ฐฑ์€ ๋น„๋™๊ธฐ๋กœ ์‹คํ–‰๋˜๊ธฐ ๋•Œ๋ฌธ์— ์š”์ฒญ์ด ๋๋‚˜๋Š” ์‹œ์ ์— ์–ธ์  ๊ฐ€ ์‹คํ–‰๋  ๊ฒƒ์ž„์„ ์œ ์˜.

  2. ๋‹จ์ˆœํ™”ํ•œ๋‹ค.

    • ์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ(ํ”Œ๋žซํผ)์—์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š” ๋‹จ์ˆœํ™” ๊ทœ์น™ 2๊ฐ€์ง€
      1. ํ•˜๋‚˜์˜ ํƒ€์ž„๋ผ์ธ์— ์žˆ๋Š” ๋ชจ๋“  ์•ก์…˜์„ ํ•˜๋‚˜๋กœ ํ†ตํ•ฉํ•œ๋‹ค / ์ ์„ ์„ ํƒ€์ž„๋ผ์ธ ๋์œผ๋กœ ์˜ฎ๊ธด๋‹ค.
        (์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ๋Š” ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์—์„œ ๋ชจ๋“  ์ฝ”๋“œ๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.)
      2. ํƒ€์ž„๋ผ์ธ์ด ๋๋‚˜๋Š” ๊ณณ์—์„œ ์ƒˆ๋กœ์šด ํƒ€์ž„๋ผ์ธ์ด ํ•˜๋‚˜๋งŒ ์ƒ๊ธด๋‹ค๋ฉด ํ†ตํ•ฉํ•œ๋‹ค.
        (๋‹จ, ํ†ตํ•ฉ ํ›„์—๋Š” ์ฒซ ๋ฒˆ์งธ ๊ทœ์น™์„ ๋‹ค์‹œ ์ ์šฉํ•  ์ˆ˜ ์—†๋‹ค. ๋งŒ์•ฝ ๋‹ค๋ฅธ ํƒ€์ž„๋ผ์ธ์— ์•ก์…˜์ด ์ƒ๊ธฐ๋ฉด ๊ฐ ๋ฐ•์Šค๋Š” ์ˆœ์„œ๊ฐ€ ์„ž์ผ ๊ฐ€๋Šฅ์„ฑ์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ.)

๋‹ค๋ฅธ ์˜ˆ์‹œ>
์•„๋ž˜๋Š” ์ƒˆ๋กœ์šด ํƒ€์ž„๋ผ์ธ์ด ๋‘ ๊ฐœ ์ƒ๊ฒผ๊ธฐ ๋•Œ๋ฌธ์— ํ†ตํ•ฉํ•  ์ˆ˜ ์—†๋‹ค.

์ข‹์€ ํƒ€์ž„๋ผ์ธ์˜ ์›์น™

  1. ์ „์ฒด ํƒ€์ž„๋ผ์ธ์˜ ๊ฐœ์ˆ˜๊ฐ€ ์ ์„์ˆ˜๋ก ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

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

    • ๋‹ค๋ฅธ ํƒ€์ž„๋ผ์ธ ๋‹จ๊ณ„์™€์˜ ์‹คํ–‰ ์ˆœ์„œ ๊ฒฝ์šฐ์˜ ์ˆ˜๋ฅผ ๋Œ€ํญ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.
  3. ๊ณต์œ ํ•˜๋Š” ์ž์›์ด ์ ์„์ˆ˜๋ก ์ดํ•ดํ•˜๊ธฐ ์‰ฝ๋‹ค.

  4. ์ž์›์„ ๊ณต์œ ํ•œ๋‹ค๋ฉด ์„œ๋กœ ์กฐ์œจํ•ด์•ผ ํ•œ๋‹ค.

  5. ์‹œ๊ฐ„์„ ์ผ๊ธ‰์œผ๋กœ ๋‹ค๋ฃฌ๋‹ค.

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธ ํŠน์„ฑ

  • ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ.
    • ๋‘ ์•ก์…˜์ด ๋™์‹œ์— ์‹คํ–‰๋  ์ผ์ด ์—†๋‹ค.
    • ๋‹จ ๋น„๋™๊ธฐ ํ˜ธ์ถœ์€, ๋ฏธ๋ž˜์— ์•Œ ์ˆ˜ ์—†๋Š” ์‹œ์ ์— ๋Ÿฐํƒ€์ž„์— ์˜ํ•ด ์‹คํ–‰๋˜๋ฏ€๋กœ ์ฃผ์˜ํ•ด์•ผ.
  • ์ด๋ฒคํŠธ ๋ฃจํ”„ (event loop) ์™€ ์ž‘์—… ํ (job queue)
    • ์ด๋ฒคํŠธ ๋ฃจํ”„๋Š” ์ž‘์—… ํ์—์„œ ์ž‘์—… ํ•˜๋‚˜๋ฅผ ๊บผ๋‚ด ์‹คํ–‰ ์™„๋ฃŒํ•˜๊ณ , ์™„๋ฃŒ๋˜๋ฉด ๋‹ค์Œ ์ž‘์—…์„ ๊บผ๋‚ด ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ์„ ๋ฌดํ•œํžˆ ๋ฐ˜๋ณต.
    • ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ์—์„œ ์ฒ˜๋ฆฌํ•˜๊ธฐ ๋•Œ๋ฌธ์—, ๋‘ ๊ฐœ์˜ ์ž‘์—…์ด ๋™์‹œ์— ์‹คํ–‰๋  ์ˆ˜ ์—†๋‹ค.
    • ์ž‘์—… = ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ + ์ฝœ๋ฐฑ
      • ์ด๋ฒคํŠธ : ๋งˆ์šฐ์Šค ํด๋ฆญ, ํ‚ค๋ณด๋“œ ์ž…๋ ฅ, AJAX ์ด๋ฒคํŠธ ๊ฐ™์€ ๊ฒƒ
      • ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ : ์ด๋ฒคํŠธ์— ๋Œ€ํ•œ ์ •๋ณด (e.g. ํด๋ฆญ์— ๋Œ€ํ•œ ์ •๋ณด)
      • ์ฝœ๋ฐฑ : ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜. ์ข€ ๋” ์ž์„ธํžˆ๋Š” ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์‹คํ–‰ํ•  ํ•จ์ˆ˜.
    • click ์ด๋ฒคํŠธ ๋™์ž‘ ๊ณผ์ • :
      ์ด๋ฒคํŠธ์— ์ฝœ๋ฐฑ์„ ๋“ฑ๋ก -> ์ด๋ฒคํŠธ ๋ฐœ์ƒ -> ์ž‘์—… ํ์— ์ž‘์—…( ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ(click) + ์ฝœ๋ฐฑ ) ์ถ”๊ฐ€ -> ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์ฝœ๋ฐฑ ์‹คํ–‰
    • AJAX ์š”์ฒญ ๋™์ž‘ ๊ณผ์ • :
      AJAX ์š”์ฒญ ํ˜ธ์ถœ -> ๋„คํŠธ์›Œํฌ ์—”์ง„์ด ๊ด€๋ฆฌํ•˜๋Š” ์š”์ฒญ ํ์— ์ถ”๊ฐ€ -> load ๋˜๋Š” error ์ด๋ฒคํŠธ์— ์ฝœ๋ฐฑ์ด ๋“ฑ๋ก ๋จ -> ์ด๋ฒคํŠธ ๋ฐœ์ƒ(์‘๋‹ต ๋„์ฐฉ or ์—๋Ÿฌ) -> ์ž‘์—… ํ์— ์ž‘์—…( ์ด๋ฒคํŠธ ๋ฐ์ดํ„ฐ(loadorerror) + ์ฝœ๋ฐฑ ) ์ถ”๊ฐ€ -> ์ด๋ฒคํŠธ ๋ฃจํ”„๊ฐ€ ์ฝœ๋ฐฑ ์‹คํ–‰

๋ฐœ์ทŒ

์–ธ์–ด๋ณ„ ์‚ฌ์šฉํ•˜๋Š” ์Šค๋ ˆ๋“œ ๋ชจ๋ธ

  1. ๋‹จ์ผ ์Šค๋ ˆ๋“œ, ๋™๊ธฐ
    • ๋ชจ๋“  ๊ฒƒ์ด ์ˆœ์„œ๋Œ€๋กœ ์‹คํ–‰๋˜๊ณ  ์ž…์ถœ๋ ฅ์„ ์‚ฌ์šฉํ•˜๋ฉด ๋๋‚  ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ•จ.
    • ์‹œ์Šคํ…œ์ด ๋‹จ์ˆœํ•˜๋‹ค๋Š” ์žฅ์  ์žˆ๊ธฐ๋„.
    • ์˜ˆ) PHP
  2. ๋‹จ์ผ ์Šค๋ ˆ๋“œ, ๋น„๋™๊ธฐ
    • ๋น„๋™๊ธฐ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•จ์œผ๋กœ์จ, ๋‹จ์ผ ์Šค๋ ˆ๋“œ ์ธ๋ฐ๋„ ์ž…์ถœ๋ ฅ ์ž‘์—…์„ ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์•„๋„ ๋จ.
    • ๋‹จ, ์ฝœ๋ฐฑ์ด ์–ธ์ œ ์‹คํ–‰๋  ์ง€ ๋ณด์žฅํ•  ์ˆ˜ ์—†์Œ. ๊ทธ๋ž˜์„œ ๋‹ค์ด์–ด๊ทธ๋žจ์—์„œ ๋‹ค๋ฅธ ํƒ€์ž„๋ผ์ธ์œผ๋กœ ํ‘œํ˜„.
    • ์˜ˆ) JavaScript
  3. ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ
    • ์‹คํ–‰ ์ˆœ์„œ๋ฅผ ๋ณด์žฅํ•˜์ง€ ์•Š์•„ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ๋งค์šฐ ์–ด๋ ค์›€
    • ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๋Š” ์ƒˆ๋กœ์šด ํƒ€์ž„๋ผ์ธ์„ ์˜๋ฏธ
    • ์˜ˆ) Java, Python, Ruby, C, C#
  4. ๋ฉ”์‹œ์ง€ ํŒจ์‹ฑ(message-passing) ํ”„๋กœ์„ธ์Šค
    • ์„œ๋กœ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋™์‹œ์— ์‹คํ–‰ ํ•  ์ˆ˜ ์žˆ๋Š” ์Šค๋ ˆ๋“œ ๋ชจ๋ธ ์ง€์›ํ•˜๋ฉด์„œ๋„,
    • ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š๊ณ  ๋ฉ”์‹œ์ง€๋กœ ํ†ต์‹ .
    • ์„œ๋กœ ๋‹ค๋ฅธ ํƒ€์ž„๋ผ์ธ์— ์žˆ๋Š” ์•ก์…˜์€ ์ˆœ์„œ๊ฐ€ ์„ž์—ฌ๋„ ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ ํ•˜์ง€ ์•Š์•„ ๋ฌธ์ œ๊ฐ€ ๋ณ„๋กœ ์•ˆ๋จ
    • ์˜ˆ) Elixir(์—˜๋ฆญ์„œ), Erlang(์–ผ๋žญ)

๋ฉ”๋ชจ

profile
I think I think too much.

0๊ฐœ์˜ ๋Œ“๊ธ€