[Javascript] ์ด๋ฒคํŠธ ์ „ํŒŒ & ์ด๋ฒคํŠธ ์œ„์ž„

2025. 9. 8. 17:09ยท๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)
728x90

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก ๋ฐฉ๋ฒ•

์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•˜๋ฉด ๋ธŒ๋ผ์šฐ์ €์— ์˜ํ•ด ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ๋“ฑ๋ก๋œ ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•˜๋Š” ๋ฐฉ๋ฒ•์€ ํฌ๊ฒŒ 3๊ฐ€์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค.


1. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋ฐฉ์‹

HTML ์š”์†Œ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์œผ๋กœ ํ•จ์ˆ˜ ํ˜ธ์ถœ๋ฌธ์„ ํ• ๋‹นํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

<button onclick="sayHi('Lee')">Click me!</button>

<script>
  function sayHi(name) {
    console.log(`Hi! ${name}.`);
  }
</script>

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๊ฐ’์€ ์‚ฌ์‹ค ์•”๋ฌต์ ์œผ๋กœ ์ƒ์„ฑ๋  ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์˜ ํ•จ์ˆ˜ ๋ชธ์ฒด๋ฅผ ์˜๋ฏธํ•ฉ๋‹ˆ๋‹ค.

function onclick(event) {
  sayHi('Lee')
}
// ์ด๋Ÿฐ ํ•จ์ˆ˜๊ฐ€ ์•”๋ฌต์ ์œผ๋กœ ์ƒ์„ฑ๋˜์–ด ์š”์†Œ์˜ onclick ํ”„๋กœํผํ‹ฐ์— ๋ฐ”์ธ๋”ฉ๋ฉ๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋ฐฉ์‹์€ HTML๊ณผ JS๊ฐ€ ํ˜ผ์žฌํ•˜๋ฏ€๋กœ ๊ถŒ์žฅ๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.
๋Œ€๋ถ€๋ถ„์˜ ํ”„๋ ˆ์ž„์›Œํฌ/๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(React, Vue, Angular, Svelte ๋“ฑ)๋Š” ์ปดํฌ๋„ŒํŠธ ๊ธฐ๋ฐ˜ ๊ฐœ๋ฐœ(CBD)์—์„œ ์ด๋ฅผ ํ”ผํ•˜๊ณ , ๊ตฌ์กฐ์ ์œผ๋กœ HTML๊ณผ JS๋ฅผ ๋ถ„๋ฆฌํ•˜์—ฌ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.


2. ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ”„๋กœํผํ‹ฐ ๋ฐฉ์‹

DOM ์š”์†Œ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ”„๋กœํผํ‹ฐ์— ์ง์ ‘ ํ•จ์ˆ˜๋ฅผ ๋ฐ”์ธ๋”ฉํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

const $button = document.querySelector('button');
$button.onclick = function() {
  console.log('button click');
};

์ด ๋ฐฉ์‹์€ HTML๊ณผ JS๋ฅผ ๋ถ„๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์žฅ์ ์ด ์žˆ์Šต๋‹ˆ๋‹ค.
ํ•˜์ง€๋งŒ ๋‹จ์ ์€ ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋งŒ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์ž…๋‹ˆ๋‹ค.


3. addEventListener ๋ฉ”์„œ๋“œ ๋ฐฉ์‹

addEventListener ๋ฉ”์„œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ํ•˜๋‚˜ ์ด์ƒ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

EventTarget.addEventListener('eventType', handler, [, useCapture]);

$button.addEventListener('click', function() {
  console.log('button click');
});

ํŠน์ง•์€ ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.

  • ํ•˜๋‚˜ ์ด์ƒ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๋“ฑ๋ก๋œ ์ˆœ์„œ๋Œ€๋กœ ํ˜ธ์ถœ๋ฉ๋‹ˆ๋‹ค.
  • ๋™์ผํ•œ ์ฐธ์กฐ์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ์ค‘๋ณต ๋“ฑ๋กํ•˜๋ฉด ํ•˜๋‚˜๋งŒ ๋“ฑ๋ก๋ฉ๋‹ˆ๋‹ค.
  • useCapture ์˜ต์…˜์„ ํ†ตํ•ด ์บก์ฒ˜๋ง ๋‹จ๊ณ„์—์„œ๋„ ์ด๋ฒคํŠธ๋ฅผ ์žก์•„๋‚ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์ด๋ฒคํŠธ ์ „ํŒŒ

ํŠน์ • DOM ๋…ธ๋“œ์—์„œ ๋ฐœ์ƒํ•œ ์ด๋ฒคํŠธ๋Š” DOM ํŠธ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ „ํŒŒ๋ฉ๋‹ˆ๋‹ค.
์ด๋ฒคํŠธ ์ „ํŒŒ๋Š” ์ด๋ฒคํŠธ ๊ฐ์ฒด๊ฐ€ ์ „๋‹ฌ๋˜๋Š” ๋ฐฉํ–ฅ์— ๋”ฐ๋ผ 3๋‹จ๊ณ„๋กœ ๋‚˜๋ˆŒ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

  1. ์บก์ฒ˜๋ง ๋‹จ๊ณ„ : ์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ ์š”์†Œ์—์„œ ํ•˜์œ„ ์š”์†Œ๋กœ ์ „ํŒŒ๋ฉ๋‹ˆ๋‹ค.
  2. ํƒ€๊นƒ ๋‹จ๊ณ„ : ์ด๋ฒคํŠธ๊ฐ€ ์‹ค์ œ ํƒ€๊นƒ ์š”์†Œ์— ๋„๋‹ฌํ•ฉ๋‹ˆ๋‹ค.
  3. ๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„ : ์ด๋ฒคํŠธ๊ฐ€ ํ•˜์œ„ ์š”์†Œ์—์„œ ์ƒ์œ„ ์š”์†Œ๋กœ ์ „ํŒŒ๋ฉ๋‹ˆ๋‹ค.

 

์ด๋ฒคํŠธ ๋ฒ„๋ธ”๋ง ๋•๋ถ„์— ์ด๋ฒคํŠธ๋ฅผ ๋ฐœ์ƒ์‹œํ‚จ ํƒ€๊นƒ๋ฟ ์•„๋‹ˆ๋ผ ์ƒ์œ„ DOM ์š”์†Œ์—์„œ๋„ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
์ด๋ฅผ ํ™œ์šฉํ•œ ๊ฒƒ์ด ๋ฐ”๋กœ ์ด๋ฒคํŠธ ์œ„์ž„์ž…๋‹ˆ๋‹ค.

๋‹จ, focus/blur, mouseenter/mouseleave์™€ ๊ฐ™์€ ๋ช‡๋ช‡ ์ด๋ฒคํŠธ๋Š” ๋ฒ„๋ธ”๋ง๋˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค.


์ด๋ฒคํŠธ ์บก์ฒ˜๋ง๊ณผ ๋ฒ„๋ธ”๋ง ์˜ˆ์‹œ

<body>
  <p><button>๋ฒ„ํŠผ</button></p>

  <script>
    document.body.addEventListener('click', () => {
      console.log("handler for body");
    }); // ๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„

    const p = document.querySelector('p');
    p.addEventListener('click', () => {
      console.log("handler for p");
    }, true); // ์บก์ฒ˜๋ง ๋‹จ๊ณ„

    const button = document.querySelector('button');
    button.addEventListener('click', () => {
      console.log("handler for button");
    }); // ํƒ€๊นƒ ๋‹จ๊ณ„
  </script>
</body>

์‹คํ–‰ ๊ฒฐ๊ณผ ์ˆœ์„œ

  1. "handler for p" (์บก์ฒ˜๋ง ๋‹จ๊ณ„)
  2. "handler for button" (ํƒ€๊นƒ ๋‹จ๊ณ„)
  3. "handler for body" (๋ฒ„๋ธ”๋ง ๋‹จ๊ณ„)

์ด๋ฒคํŠธ ์ „ํŒŒ ๋ฐฉ์ง€

์ด๋ฒคํŠธ๊ฐ€ ์ƒ์œ„ ์š”์†Œ๋กœ ์ „ํŒŒ๋˜๋Š” ๊ฒƒ์„ ๋ง‰๊ณ  ์‹ถ์„ ๋•Œ๋Š” stopPropagation()์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

e.stopPropagation();

์ด๋ฒคํŠธ ์œ„์ž„

์ด๋ฒคํŠธ ์œ„์ž„์ด๋ž€, ์—ฌ๋Ÿฌ ํ•˜์œ„ DOM ์š”์†Œ์— ๊ฐ๊ฐ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•˜์ง€ ์•Š๊ณ , ์ƒ์œ„ ์š”์†Œ์— ํ•˜๋‚˜์˜ ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ๋ฅผ ๋“ฑ๋กํ•˜์—ฌ ํšจ์œจ์ ์œผ๋กœ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฐฉ์‹์ž…๋‹ˆ๋‹ค.

  • ์ด๋ฒคํŠธ๋Š” ๋ฒ„๋ธ”๋ง์„ ํ†ตํ•ด ์ƒ์œ„ ์š”์†Œ๋กœ ์ „ํŒŒ๋˜๋ฏ€๋กœ, ์ƒ์œ„ ์š”์†Œ์—์„œ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ํ•˜์ง€๋งŒ ์ด๋•Œ ์ฃผ์˜ํ•  ์ ์€, ์ด๋ฒคํŠธ ํƒ€๊นƒ์ด ํ•ญ์ƒ ๊ธฐ๋Œ€ํ•œ DOM ์š”์†Œ์ผ ํ•„์š”๋Š” ์—†๋‹ค๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค. ๋”ฐ๋ผ์„œ event.target์„ ๊ฒ€์‚ฌํ•˜๊ฑฐ๋‚˜ closest()๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

์˜ˆ์‹œ:

document.addEventListener('click', (e) => {
  const li = e.target.closest('li');
  if (!li) return;
  console.log('ํด๋ฆญ๋œ ์š”์†Œ:', li.textContent);
});

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋‚ด๋ถ€์˜ this

  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ๋ฐฉ์‹
    • ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this๋Š” ์ „์—ญ ๊ฐ์ฒด(window)๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
    • ๋Œ€์‹  this๋ฅผ ์ธ์ˆ˜๋กœ ์ „๋‹ฌํ•˜๋ฉด ํ•ด๋‹น DOM ์š”์†Œ๋ฅผ ์ง์ ‘ ์ฐธ์กฐํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
<button onclick="handleClick(this)">๋ฒ„ํŠผ</button>
<script>
  function handleClick(that){
    console.log(this); // window
    console.log(that); // <button>
  }
</script>
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ํ”„๋กœํผํ‹ฐ ๋ฐฉ์‹๊ณผ addEventListener ๋ฐฉ์‹
    • ํ•จ์ˆ˜ ๋‚ด๋ถ€์˜ this๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐ”์ธ๋”ฉ๋œ ์š”์†Œ๋ฅผ ๊ฐ€๋ฆฌํ‚ต๋‹ˆ๋‹ค.
    • ์ด๋Š” event.currentTarget๊ณผ ๋™์ผํ•ฉ๋‹ˆ๋‹ค.
$button.onclick = function(e) {
  console.log(this);            // $button
  console.log(e.currentTarget); // $button
};

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ์ธ์ˆ˜ ์ „๋‹ฌ

์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ์— ์ง์ ‘ ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•˜๊ณ  ์‹ถ์„ ๋•Œ๋Š”, ๋ณดํ†ต ๋ž˜ํผ ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

const checkUserNameLength = min => {...};

$input.onblur = () => { checkUserNameLength(5); };

ํ˜น์€ ํ•จ์ˆ˜๋ฅผ ๋ฐ˜ํ™˜ํ•˜๋Š” ํ•จ์ˆ˜๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋ฐ”์ธ๋”ฉํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.


๋งˆ๋ฌด๋ฆฌ

์ด๋ฒคํŠธ ์‹œ์Šคํ…œ์€ ๋ธŒ๋ผ์šฐ์ €๊ฐ€ DOM ํŠธ๋ฆฌ ๊ตฌ์กฐ๋ฅผ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๊ณ , ์„ฑ๋Šฅ์„ ์ตœ์ ํ™”ํ•˜๊ธฐ ์œ„ํ•ด ์„ค๊ณ„๋œ ์ค‘์š”ํ•œ ๋ฉ”์ปค๋‹ˆ์ฆ˜์ž…๋‹ˆ๋‹ค.

  • ์ด๋ฒคํŠธ ์ „ํŒŒ(์บก์ฒ˜๋ง/๋ฒ„๋ธ”๋ง) ๋ฅผ ํ†ตํ•ด ์ƒ์œ„ ์š”์†Œ์™€ ํ•˜์œ„ ์š”์†Œ ๋ชจ๋‘ ์ด๋ฒคํŠธ๋ฅผ ๊ฐ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ์ด๋ฅผ ์‘์šฉํ•œ ์ด๋ฒคํŠธ ์œ„์ž„์€ ์„ฑ๋Šฅ๊ณผ ์œ ์ง€๋ณด์ˆ˜์„ฑ์„ ๋†’์—ฌ์ค๋‹ˆ๋‹ค.
  • ์ด๋ฒคํŠธ ํ•ธ๋“ค๋Ÿฌ ๋“ฑ๋ก ๋ฐฉ์‹์—๋Š” ์–ดํŠธ๋ฆฌ๋ทฐํŠธ, ํ”„๋กœํผํ‹ฐ, addEventListener ๋ฐฉ์‹์ด ์žˆ์œผ๋ฉฐ, ์‹ค๋ฌด์—์„œ๋Š” addEventListener๋ฅผ ๊ถŒ์žฅํ•ฉ๋‹ˆ๋‹ค.

 

'๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€

Webpack + Babel + TypeScript ์„ค์ • ๊ฐ€์ด๋“œ  (0) 2025.09.16
MVC ๊ตฌ์กฐ - ์˜ต์ €๋ฒ„ ํŒจํ„ด ( Observer Pattern )  (0) 2025.09.08
[CoderPad] ๋ฆฌ์•กํŠธ ๊ฐ€์ƒ ์Šคํฌ๋กค (Virtualized List)  (5) 2025.06.22
Next.js 12 ์—์„œ React Query v4 + SSR ํ™œ์šฉํ•˜๊ธฐ  (0) 2025.05.01
์›น ํ”„๋ก ํŠธ์—”๋“œ ํด๋ฆฐ ์•„ํ‚คํ…์ณ(Clean Architecture) ์˜ ์—ญ์‚ฌ  (0) 2025.04.29
'๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE)' ์นดํ…Œ๊ณ ๋ฆฌ์˜ ๋‹ค๋ฅธ ๊ธ€
  • Webpack + Babel + TypeScript ์„ค์ • ๊ฐ€์ด๋“œ
  • MVC ๊ตฌ์กฐ - ์˜ต์ €๋ฒ„ ํŒจํ„ด ( Observer Pattern )
  • [CoderPad] ๋ฆฌ์•กํŠธ ๊ฐ€์ƒ ์Šคํฌ๋กค (Virtualized List)
  • Next.js 12 ์—์„œ React Query v4 + SSR ํ™œ์šฉํ•˜๊ธฐ
์—ฐ์žŽ(lotus leaf)
์—ฐ์žŽ(lotus leaf)
  • ์—ฐ์žŽ(lotus leaf)
    lotus' s develog ๐Ÿƒ
    ์—ฐ์žŽ(lotus leaf)
  • ์ „์ฒด
    ์˜ค๋Š˜
    ์–ด์ œ
    • ๋ถ„๋ฅ˜ ์ „์ฒด๋ณด๊ธฐ (79)
      • โœ๏ธ ๊ฐœ๋ฐœํšŒ๊ณ ๋ก (5)
      • ๐Ÿงฎ ์•Œ๊ณ ๋ฆฌ์ฆ˜ (3)
      • ๐Ÿ’™ ํ”„๋ก ํŠธ์—”๋“œ(FE) (19)
        • HTML (0)
        • CSS (0)
        • Javascript (0)
        • React (0)
        • Next.js (0)
        • webpack & babel (0)
      • ๐Ÿ’ป ๋ฐฑ์—”๋“œ(BE) (2)
        • Nest.js (0)
        • Express.js (0)
        • MySQL (1)
      • โš™๏ธ ์ธํ”„๋ผ(Devops) (2)
      • ๐Ÿค– AI (1)
      • ๐ŸŒ WEB (8)
      • ๐Ÿ’ป CS (16)
        • ์ž๋ฃŒ๊ตฌ์กฐ (0)
        • ์ปดํ“จํ„ฐ ๋„คํŠธ์›Œํฌ (1)
        • ์šด์˜์ฒด์ œ (0)
        • ์ธ๊ณต์ง€๋Šฅ (8)
        • ์›น ๋ณด์•ˆ (1)
        • ํด๋ผ์šฐ๋“œ ์ปดํ“จํŒ… (6)
      • ๐Ÿ–‹๏ธ DevLog (1)
      • ๐Ÿฆพ ๋กœ๋ณดํ‹ฑ์Šค (4)
      • ๐Ÿ“— ๋„ค์ด๋ฒ„๋ถ€์ŠคํŠธ์บ ํ”„ ์›น ๋ชจ๋ฐ”์ผ (0)
      • ๐ŸŽฎ Unity(C#) (10)
      • ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด (4)
        • C (4)
        • C++ (0)
        • Java (0)
        • Python (0)
      • MSA (1)
  • ๋ธ”๋กœ๊ทธ ๋ฉ”๋‰ด

    • ํ™ˆ
    • ํƒœ๊ทธ
    • ๋ฐฉ๋ช…๋ก
  • ๋งํฌ

  • ๊ณต์ง€์‚ฌํ•ญ

  • ์ธ๊ธฐ ๊ธ€

  • ํƒœ๊ทธ

    soft margin svm
    ๊ธฐ์ดˆ์•Œ๊ณ ๋ฆฌ์ฆ˜
    ์ดํ™”์—ฌ์ž๋Œ€ํ•™๊ต #๋„์ „ํ•™๊ธฐ์ œ
    client-streaming
    nav2
    AWS
    ์ˆœ์—ด
    c์–ธ์–ด
    ์กฐํ•ฉ
    ์ฝ”๋”ํŒจ๋“œ
    hard margin svm
    ์•Œ๊ณ ๋ฆฌ์ฆ˜
    advaned detail
    Devops #๋Œ€๊ทœ๋ชจํŠธ๋ž˜ํ”ฝ์ฒ˜๋ฆฌ
    C#
    next.js12
    ros workspace
    isaac automator
    deploy-aws
    ํŒŒ์ผํŠธ๋ฆฌ
    ros bridge
    auto-scaling
    c++
    ์ŠคํŒธ๋ถ„๋ฅ˜๊ธฐ
    turtlebot
    ๋ฆฌ์•กํŠธ
    gaussian rbf svm
    ๋ฐฑ์ค€
    ์ŠคํŒธ๋ฉ”์ผ๋ถ„๋ฅ˜๊ธฐ
    C
  • ์ตœ๊ทผ ๋Œ“๊ธ€

  • ์ตœ๊ทผ ๊ธ€

  • hELLOยท Designed By์ •์ƒ์šฐ.v4.10.6
์—ฐ์žŽ(lotus leaf)
[Javascript] ์ด๋ฒคํŠธ ์ „ํŒŒ & ์ด๋ฒคํŠธ ์œ„์ž„
์ƒ๋‹จ์œผ๋กœ

ํ‹ฐ์Šคํ† ๋ฆฌํˆด๋ฐ”