Backend

๐Ÿ” console.log ์กธ์—…! ํ”„๋กœ ๊ฐœ๋ฐœ์ž์˜ ๋””๋ฒ„๊น… ๊ฟ€ํŒ 5๊ฐ€์ง€

๊ด€๋ฆฌ์ž

7์ผ ์ „

15600
#๊ฐœ๋ฐœ๋„๊ตฌ#๋ฐฑ์—”๋“œ#๋””๋ฒ„๊น…#DevTools

๐Ÿ” console.log ์กธ์—…! ํ”„๋กœ ๊ฐœ๋ฐœ์ž์˜ ๋””๋ฒ„๊น… ๊ฟ€ํŒ 5๊ฐ€์ง€

๐ŸŽฏ "์•„์ง๋„ console.log๋งŒ ์“ฐ์„ธ์š”?"

์•ˆ๋…•ํ•˜์„ธ์š”! ์˜ค๋Š˜์€ ์ œ๊ฐ€ 5๋…„๊ฐ„ console.log๋งŒ ์“ฐ๋‹ค๊ฐ€ ์ตœ๊ทผ์— ์•Œ๊ฒŒ ๋œ ์ถฉ๊ฒฉ์ ์ธ ๋””๋ฒ„๊น… ๋ฐฉ๋ฒ•๋“ค์„ ๊ณต์œ ํ•˜๋ ค๊ณ  ํ•ฉ๋‹ˆ๋‹ค.

์†”์งํžˆ ๊ณ ๋ฐฑํ•˜์ž๋ฉด, ์ €๋„ ์–ผ๋งˆ ์ „๊นŒ์ง€ ์ด๋žฌ์–ด์š”:

console.log("์—ฌ๊ธฐ1");
console.log("์—ฌ๊ธฐ2");
console.log("๊ฐ’ ํ™•์ธ:", data);
console.log("์ด๊ฑฐ ์‹คํ–‰๋จ?");
// ... 100๊ฐœ์˜ console.log

๊ทธ๋Ÿฐ๋ฐ ์‹œ๋‹ˆ์–ด ๊ฐœ๋ฐœ์ž๊ฐ€ ์ œ ์ฝ”๋“œ๋ฅผ ๋ณด๋”๋‹ˆ ํ•œ์ˆจ์„ ์‰ฌ๋ฉด์„œ...
"์ด๊ฑฐ 10์ดˆ๋ฉด ์ฐพ์„ ์ˆ˜ ์žˆ๋Š” ๋ฒ„๊ทธ์ธ๋ฐ์š”?" ๋ผ๊ณ  ํ•˜๋”๋ผ๊ณ ์š”. ๐Ÿ˜ฑ

์˜ค๋Š˜์€ ๊ทธ๋•Œ ๋ฐฐ์šด ์ง„์งœ ํ”„๋กœ๊ฐ€ ์“ฐ๋Š” ๋””๋ฒ„๊น… ๋น„๋ฒ• 5๊ฐ€์ง€๋ฅผ ์•Œ๋ ค๋“œ๋ฆด๊ฒŒ์š”!

๐Ÿš€ ๊ฟ€ํŒ 1: debugger ์ค‘๋‹จ์  - "console.log๋Š” ์ด์ œ ๊ทธ๋งŒ!"

๊ธฐ์กด ๋ฐฉ์‹ (์ฃผ๋‹ˆ์–ด์˜ ์‚ถ)

function calculatePrice(items) {
  console.log("ํ•จ์ˆ˜ ์‹œ์ž‘");
  console.log("items:", items);
  
  const total = items.reduce((sum, item) => {
    console.log("ํ˜„์žฌ item:", item);
    console.log("ํ˜„์žฌ sum:", sum);
    return sum + item.price * item.quantity;
  }, 0);
  
  console.log("total:", total);
  return total;
}

ํ”„๋กœ์˜ ๋ฐฉ์‹ (1์ดˆ ๋””๋ฒ„๊น…)

function calculatePrice(items) {
  debugger; // ์—ฌ๊ธฐ์„œ ๋ฉˆ์ถค! F10์œผ๋กœ ํ•œ ์ค„์”ฉ ์‹คํ–‰
  
  const total = items.reduce((sum, item) => {
    return sum + item.price * item.quantity;
  }, 0);
  
  return total;
}

๐ŸŽฏ ์‚ฌ์šฉ๋ฒ•:

  1. ์ฝ”๋“œ์— debugger; ์ถ”๊ฐ€
  2. ๊ฐœ๋ฐœ์ž ๋„๊ตฌ ์—ด๊ณ  ์‹คํ–‰
  3. F10 = ๋‹ค์Œ ์ค„, F11 = ํ•จ์ˆ˜ ์•ˆ์œผ๋กœ, F8 = ๊ณ„์† ์‹คํ–‰
  4. ๋ณ€์ˆ˜ ์œ„์— ๋งˆ์šฐ์Šค ์˜ฌ๋ฆฌ๋ฉด ๊ฐ’์ด ๋ณด์ž„!

๐Ÿ’ก ๊ฟ€ํŒ ์ค‘์˜ ๊ฟ€ํŒ: ์กฐ๊ฑด๋ถ€ ์ค‘๋‹จ์ 

// ํŠน์ • ์กฐ๊ฑด์ผ ๋•Œ๋งŒ ๋ฉˆ์ถ”๊ณ  ์‹ถ๋‹ค๋ฉด?
if (user.id === 'problem-user-123') {
  debugger; // ๋ฌธ์ œ ์žˆ๋Š” ์œ ์ €์ผ ๋•Œ๋งŒ ๋ฉˆ์ถค!
}

๐ŸŽจ ๊ฟ€ํŒ 2: Chrome DevTools์˜ ์ˆจ๊ฒจ์ง„ ๋ณด๋ฌผ๋“ค

2-1. Logpoints - "์ฝ”๋“œ ์ˆ˜์ • ์—†์ด ๋กœ๊ทธ ์ถ”๊ฐ€"

์ƒํ™ฉ: ํ”„๋กœ๋•์…˜ ์ฝ”๋“œ๋ผ console.log ์ถ”๊ฐ€ ๋ชปํ•จ

ํ•ด๊ฒฐ:

  1. Sources ํƒญ โ†’ ์ค„ ๋ฒˆํ˜ธ ์šฐํด๋ฆญ
  2. "Add logpoint" ์„ ํƒ
  3. "User ID:", user.id, "Action:", action ์ž…๋ ฅ
  4. ์ƒˆ๋กœ๊ณ ์นจ ์—†์ด ๋กœ๊ทธ ํ™•์ธ!

2-2. DOM ์ค‘๋‹จ์  - "๋ˆ„๊ฐ€ ๋‚ด DOM์„ ๊ฑด๋“œ๋ ธ๋‚˜?"

// ์ด๋Ÿฐ ๊ฒฝํ—˜ ์žˆ์œผ์‹œ์ฃ ?
// "๋ถ„๋ช… display: none ํ–ˆ๋Š”๋ฐ ์™œ ๋ณด์ด์ง€?"
// "๋ˆ„๊ฐ€ ์ด ํด๋ž˜์Šค๋ฅผ ์‚ญ์ œํ–ˆ์ง€?"

ํ•ด๊ฒฐ๋ฒ•:

  1. Elements ํƒญ์—์„œ ์š”์†Œ ์šฐํด๋ฆญ
  2. "Break on" โ†’ "attribute modifications" ์„ ํƒ
  3. ์ด์ œ ๋ˆ„๊ฐ€ ๊ฑด๋“œ๋ฆฌ๋ฉด ๋ฐ”๋กœ ์žกํž˜!

2-3. Copy as Fetch - "Postman ํ•„์š” ์—†์Œ"

๋„คํŠธ์›Œํฌ ํƒญ์—์„œ:

  1. API ์š”์ฒญ ์šฐํด๋ฆญ
  2. "Copy" โ†’ "Copy as fetch"
  3. ์ฝ˜์†”์— ๋ถ™์—ฌ๋„ฃ๊ธฐ
  4. ๋ฐ”๋กœ ํ…Œ์ŠคํŠธ!
// ์ž๋™์œผ๋กœ ์ด๋ ‡๊ฒŒ ๋ณต์‚ฌ๋จ
fetch("https://api.example.com/users", {
  headers: {
    "authorization": "Bearer token...",
    "content-type": "application/json"
  },
  body: JSON.stringify({name: "test"}),
  method: "POST"
});

๐Ÿ’ป ๊ฟ€ํŒ 3: VS Code ๋””๋ฒ„๊ฑฐ - "ํ„ฐ๋ฏธ๋„์€ ์ด์ œ ์•ˆ๋…•"

Node.js ๋””๋ฒ„๊น… (๊ฐ“์„ธํŒ…)

๊ธฐ์กด ๋ฐฉ์‹:

node app.js
# console.log ์ง€์˜ฅ...

ํ”„๋กœ ๋ฐฉ์‹:

  1. VS Code์—์„œ F5 ๋ˆ„๋ฅด๊ธฐ
  2. "Node.js" ์„ ํƒ
  3. ๋!

๋” ํ”„๋กœ ๋ฐฉ์‹ (์ž๋™ ์—ฐ๊ฒฐ):

// package.json
{
  "scripts": {
    "dev": "node --inspect index.js"
  }
}

VS Code ์„ค์ •:

  1. Ctrl+Shift+P โ†’ "Debug: Toggle Auto Attach"
  2. "Always" ์„ ํƒ
  3. ์ด์ œ npm run dev๋งŒ ํ•˜๋ฉด ์ž๋™ ๋””๋ฒ„๊ฑฐ ์—ฐ๊ฒฐ!

React ๋””๋ฒ„๊น… (๋ฆฌ์•กํŠธ ๊ฐœ๋ฐœ์ž ํ•„๋…!)

// .vscode/launch.json
{
  "type": "chrome",
  "request": "launch",
  "name": "React ๋””๋ฒ„๊น…",
  "url": "http://localhost:3000",
  "webRoot": "${workspaceFolder}/src",
  "sourceMaps": true
}

์ด์ œ VS Code์—์„œ React ์ปดํฌ๋„ŒํŠธ์— ์ค‘๋‹จ์  ์„ค์ • ๊ฐ€๋Šฅ! ๐ŸŽ‰

๐ŸŽฏ ๊ฟ€ํŒ 4: ๋กœ๊ทธ ๋ ˆ๋ฒจ ํ™œ์šฉ - "console.log ๋Œ€์‹  ์ด๊ฒƒ!"

์ฃผ๋‹ˆ์–ด ์Šคํƒ€์ผ

console.log("๋ฐ์ดํ„ฐ:", data);
console.log("์—๋Ÿฌ!!!:", error);
console.log("๊ฒฝ๊ณ :", warning);

์‹œ๋‹ˆ์–ด ์Šคํƒ€์ผ

// ๋ ˆ๋ฒจ๋ณ„๋กœ ๋‹ค๋ฅด๊ฒŒ!
console.debug("๊ฐœ๋ฐœ ์ค‘์—๋งŒ ํ•„์š”ํ•œ ์ •๋ณด", data);
console.info("์ผ๋ฐ˜ ์ •๋ณด: ์„œ๋ฒ„ ์‹œ์ž‘๋จ");
console.warn("โš ๏ธ ๊ฒฝ๊ณ : API ์‘๋‹ต ๋А๋ฆผ", responseTime);
console.error("โŒ ์—๋Ÿฌ ๋ฐœ์ƒ:", error);

// ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ๊ธฐ
console.group("์‚ฌ์šฉ์ž ์ธ์ฆ ํ”„๋กœ์„ธ์Šค");
console.log("1. ํ† ํฐ ํ™•์ธ");
console.log("2. ๊ถŒํ•œ ๊ฒ€์ฆ");
console.log("3. ์„ธ์…˜ ์ƒ์„ฑ");
console.groupEnd();

// ํ…Œ์ด๋ธ”๋กœ ๋ณด๊ธฐ (์ด๊ฑฐ ์ง„์งœ ์‹ ๊ธฐํ•จ!)
const users = [
  {id: 1, name: "๊น€๊ฐœ๋ฐœ", age: 25},
  {id: 2, name: "๋ฐ•์ฝ”๋”ฉ", age: 30}
];
console.table(users); // ํ‘œ๋กœ ์˜ˆ์˜๊ฒŒ ์ถœ๋ ฅ๋จ!

// ์‹œ๊ฐ„ ์ธก์ •
console.time("API ํ˜ธ์ถœ");
await fetch('/api/users');
console.timeEnd("API ํ˜ธ์ถœ"); // API ํ˜ธ์ถœ: 234.5ms

// ์Šคํƒ ์ถ”์ 
console.trace("์—ฌ๊ธฐ์„œ ํ˜ธ์ถœ๋จ");

ํ”„๋กœ๋•์…˜์šฉ ๋กœ๊ฑฐ ์„ค์ •

// ํ™˜๊ฒฝ๋ณ„ ๋กœ๊ทธ ๋ ˆ๋ฒจ ์„ค์ •
const LOG_LEVEL = process.env.NODE_ENV === 'production' ? 'error' : 'debug';

const logger = {
  debug: (...args) => LOG_LEVEL === 'debug' && console.debug(...args),
  info: (...args) => ['debug', 'info'].includes(LOG_LEVEL) && console.info(...args),
  warn: (...args) => ['debug', 'info', 'warn'].includes(LOG_LEVEL) && console.warn(...args),
  error: (...args) => console.error(...args) // ์—๋Ÿฌ๋Š” ํ•ญ์ƒ ์ถœ๋ ฅ
};

// ์‚ฌ์šฉ
logger.debug("๊ฐœ๋ฐœ ํ™˜๊ฒฝ์—์„œ๋งŒ ๋ณด์ž„");
logger.error("๋ชจ๋“  ํ™˜๊ฒฝ์—์„œ ๋ณด์ž„");

๐Ÿ”ฅ ๊ฟ€ํŒ 5: ์„ฑ๋Šฅ & ๋ฉ”๋ชจ๋ฆฌ ๋””๋ฒ„๊น… - "์™œ ๋А๋ฆฐ์ง€ ์ด์ œ ์•Œ ์ˆ˜ ์žˆ๋‹ค!"

5-1. Performance ์ธก์ •

// ์„ฑ๋Šฅ ์ธก์ • ๋งˆํฌ
performance.mark('myFunction-start');

// ๋ฌด๊ฑฐ์šด ์ž‘์—…
for(let i = 0; i < 1000000; i++) {
  // ๋ญ”๊ฐ€ ์ฒ˜๋ฆฌ
}

performance.mark('myFunction-end');
performance.measure('myFunction', 'myFunction-start', 'myFunction-end');

// ๊ฒฐ๊ณผ ํ™•์ธ
const measure = performance.getEntriesByName('myFunction')[0];
console.log(`์‹คํ–‰ ์‹œ๊ฐ„: ${measure.duration}ms`);

5-2. ๋ฉ”๋ชจ๋ฆฌ ๋ˆ„์ˆ˜ ์ฐพ๊ธฐ

์ฆ์ƒ:

  • ์•ฑ์ด ์ ์  ๋А๋ ค์ง
  • ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰์ด ๊ณ„์† ์ฆ๊ฐ€

์ง„๋‹จ๋ฒ•:

// ๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ๋Ÿ‰ ์ฒดํฌ
console.log("๋ฉ”๋ชจ๋ฆฌ ์‚ฌ์šฉ:", performance.memory);

// ์ฃผ๊ธฐ์ ์œผ๋กœ ์ฒดํฌ
setInterval(() => {
  const used = performance.memory.usedJSHeapSize / 1048576;
  console.log(`ํ˜„์žฌ ๋ฉ”๋ชจ๋ฆฌ: ${used.toFixed(2)} MB`);
}, 5000);

Chrome DevTools๋กœ ์ฐพ๊ธฐ:

  1. Memory ํƒญ โ†’ Heap Snapshot
  2. ์ž‘์—… ์ˆ˜ํ–‰
  3. ๋‹ค์‹œ Snapshot
  4. Comparison ๋ณด๊ธฐ
  5. "Detached DOM" ์ฐพ๊ธฐ โ† ์ด๊ฒŒ ์ฃผ๋ฒ”!

5-3. React ์„ฑ๋Šฅ ๋””๋ฒ„๊น…

// React DevTools Profiler ์‚ฌ์šฉ
// 1. React DevTools ์„ค์น˜
// 2. Profiler ํƒญ ํด๋ฆญ
// 3. ๋…นํ™” ์‹œ์ž‘ โ†’ ์•ก์…˜ ์ˆ˜ํ–‰ โ†’ ์ค‘์ง€
// 4. ์–ด๋А ์ปดํฌ๋„ŒํŠธ๊ฐ€ ์˜ค๋ž˜ ๊ฑธ๋ฆฌ๋Š”์ง€ ๋ฐ”๋กœ ๋ณด์ž„!

// ์ปดํฌ๋„ŒํŠธ ๋ Œ๋”๋ง ์ถ”์ 
function MyComponent() {
  console.log("MyComponent ๋ Œ๋”๋ง๋จ");
  
  // ์™œ ๋ฆฌ๋ Œ๋”๋ง๋˜๋Š”์ง€ ํ™•์ธ
  useEffect(() => {
    console.log("Props ๋ณ€๊ฒฝ๋จ:", props);
  });
  
  return <div>...</div>;
}

๐ŸŽช ๋ณด๋„ˆ์Šค: 2025๋…„ ์ตœ์‹  ๋””๋ฒ„๊น… ๋„๊ตฌ๋“ค

AI ๋””๋ฒ„๊น… (์ด์ œ๋Š” AI๊ฐ€ ๋””๋ฒ„๊น…๋„ ํ•ด์คŒ!)

Chrome DevTools AI Assistant:

  1. DevTools ์„ค์ • โ†’ AI Innovations ํ™œ์„ฑํ™”
  2. ์—๋Ÿฌ ๋ฐœ์ƒ ์‹œ "Ask AI" ๋ฒ„ํŠผ ํด๋ฆญ
  3. AI๊ฐ€ ์›์ธ๊ณผ ํ•ด๊ฒฐ๋ฒ• ์ œ์‹œ!

์‹ค์ œ ์˜ˆ์‹œ:

// ์—๋Ÿฌ: Cannot read property 'name' of undefined
// AI ๋‹ต๋ณ€: "user ๊ฐ์ฒด๊ฐ€ undefined์ž…๋‹ˆ๋‹ค. 
// API ์‘๋‹ต์„ ํ™•์ธํ•˜๊ฑฐ๋‚˜ ์˜ต์…”๋„ ์ฒด์ด๋‹(?.)์„ ์‚ฌ์šฉํ•˜์„ธ์š”"

// ์ˆ˜์ • ์ฝ”๋“œ ์ œ์•ˆ
const userName = user?.name || 'Guest';

์›๊ฒฉ ๋””๋ฒ„๊น… (์žฌํƒ๊ทผ๋ฌด ํ•„์ˆ˜!)

# ์„œ๋ฒ„์—์„œ Node.js ์•ฑ ์‹คํ–‰
node --inspect=0.0.0.0:9229 app.js

# ๋กœ์ปฌ์—์„œ Chrome ์—ด๊ณ 
chrome://inspect

# "Configure" โ†’ IP ์ฃผ์†Œ ์ถ”๊ฐ€
# ์ด์ œ ์„œ๋ฒ„ ์•ฑ์„ ๋กœ์ปฌ์—์„œ ๋””๋ฒ„๊น…!

๐Ÿ“Š ์‹ค์ „ ๋””๋ฒ„๊น… ์ฒดํฌ๋ฆฌ์ŠคํŠธ

๋ฒ„๊ทธ ๋ฐœ์ƒ ์‹œ ์ˆœ์„œ:

  1. ์—๋Ÿฌ ๋ฉ”์‹œ์ง€ ์ฝ๊ธฐ (50%๋Š” ์—ฌ๊ธฐ์„œ ํ•ด๊ฒฐ)
  2. debugger๋กœ ์ค‘๋‹จ์  ์„ค์ •
  3. ๋ณ€์ˆ˜ ๊ฐ’ ํ™•์ธ (๋งˆ์šฐ์Šค ํ˜ธ๋ฒ„)
  4. ์ฝœ ์Šคํƒ ํ™•์ธ (์–ด๋””์„œ ํ˜ธ์ถœ๋๋‚˜)
  5. ๋„คํŠธ์›Œํฌ ํƒญ ํ™•์ธ (API ๋ฌธ์ œ?)
  6. ์ฝ˜์†” ์—๋Ÿฌ ํ™•์ธ
  7. AI์—๊ฒŒ ๋ฌผ์–ด๋ณด๊ธฐ (๋งˆ์ง€๋ง‰ ์ˆ˜๋‹จ)

๐Ÿ’ฌ ์‹ค์ œ ๊ฐœ๋ฐœ์ž๋“ค์˜ ๋ฐ˜์‘

๊น€์ฃผ๋‹ˆ์–ด (๊ฒฝ๋ ฅ 1๋…„):

"debugger ํ•˜๋‚˜๋งŒ ์•Œ์•˜์–ด๋„ ์•ผ๊ทผ ๋ฐ˜์€ ์ค„์—ˆ์„ ๊ฒƒ ๊ฐ™์•„์š”... console.log 100๊ฐœ ์“ฐ๋ฉด์„œ 3์‹œ๊ฐ„ ๋””๋ฒ„๊น…ํ•œ ์ ๋„ ์žˆ๋Š”๋ฐ ใ… ใ… "

๋ฐ•์‹œ๋‹ˆ์–ด (๊ฒฝ๋ ฅ 7๋…„):

"์‹ ์ž… ๋•Œ console.log๋งŒ ์“ฐ๋‹ค๊ฐ€ ์„ ๋ฐฐ๊ฐ€ debugger ์•Œ๋ ค์คฌ์„ ๋•Œ์˜ ์ถฉ๊ฒฉ... ์‹ ์„ธ๊ณ„์˜€์ฃ "

์ดํ’€์Šคํƒ (๊ฒฝ๋ ฅ 4๋…„):

"Chrome DevTools Logpoint๋Š” ์ง„์งœ ํ˜๋ช…์ž…๋‹ˆ๋‹ค. ํ”„๋กœ๋•์…˜ ๋””๋ฒ„๊น…์ด ์ด๋ ‡๊ฒŒ ์‰ฌ์›Œ์ง€๋‹ค๋‹ˆ!"

๐ŸŽฏ ์˜ค๋Š˜๋ถ€ํ„ฐ ์‹ค์ฒœํ•˜๊ธฐ

Level 1: ์ดˆ๊ธ‰ (์˜ค๋Š˜ ๋‹น์žฅ!)

  • debugger; ์‚ฌ์šฉํ•ด๋ณด๊ธฐ
  • console.table() ์จ๋ณด๊ธฐ
  • console.time() / timeEnd() ์‚ฌ์šฉ

Level 2: ์ค‘๊ธ‰ (์ด๋ฒˆ ์ฃผ)

  • VS Code ๋””๋ฒ„๊ฑฐ ์„ค์ •
  • Chrome DevTools Logpoint
  • Performance ํƒญ ์‚ฌ์šฉํ•ด๋ณด๊ธฐ

Level 3: ๊ณ ๊ธ‰ (์ด๋ฒˆ ๋‹ฌ)

  • Memory ํ”„๋กœํŒŒ์ผ๋ง
  • ์›๊ฒฉ ๋””๋ฒ„๊น… ์„ค์ •
  • React/Vue DevTools ๋งˆ์Šคํ„ฐ

๐Ÿ’ญ ๋งˆ๋ฌด๋ฆฌ: console.log ์กธ์—…์‹

์ด์ œ console.log ์ง€์˜ฅ์—์„œ ๋ฒ—์–ด๋‚  ์‹œ๊ฐ„์ž…๋‹ˆ๋‹ค!

์ฒ˜์Œ์—” ๋‚ฏ์„ค๊ฒ ์ง€๋งŒ, ํ•œ ๋ฒˆ๋งŒ ์จ๋ณด๋ฉด "๋‚ด๊ฐ€ ์™œ ์ด๊ฑธ ๋ชฐ๋ž์ง€?" ํ•˜์‹ค ๊ฑฐ์˜ˆ์š”.

ํŠนํžˆ debugger; ํ•˜๋‚˜๋งŒ ์ œ๋Œ€๋กœ ์จ๋„ ๋””๋ฒ„๊น… ์‹œ๊ฐ„์ด 70%๋Š” ์ค„์–ด๋“ญ๋‹ˆ๋‹ค. ์ง„์งœ๋กœ์š”!

๋งˆ์ง€๋ง‰์œผ๋กœ ์ œ๊ฐ€ ๊ฐ€์žฅ ์ข‹์•„ํ•˜๋Š” ๋””๋ฒ„๊น… ๋ช…์–ธ ํ•˜๋‚˜ ๋‚จ๊ธฐ๊ณ  ๊ฐˆ๊ฒŒ์š”:

"The best debugger is a good night's sleep."
"์ตœ๊ณ ์˜ ๋””๋ฒ„๊ฑฐ๋Š” ์ถฉ๋ถ„ํ•œ ์ˆ˜๋ฉด์ด๋‹ค."

๋ฒ„๊ทธ๊ฐ€ ์•ˆ ์žกํžˆ๋ฉด... ์ผ๋‹จ ์ž๊ณ  ๋‚ด์ผ ๋‹ค์‹œ ๋ด…์‹œ๋‹ค! ๐Ÿ˜ด


์—ฌ๋Ÿฌ๋ถ„๋งŒ์˜ ๋””๋ฒ„๊น… ๊ฟ€ํŒ์ด ์žˆ๋‹ค๋ฉด ๋Œ“๊ธ€๋กœ ๊ณต์œ ํ•ด์ฃผ์„ธ์š”! console.log ์กธ์—… ํ›„๊ธฐ๋„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค! ๐ŸŽ“

๋Œ“๊ธ€ 0๊ฐœ

์•„์ง ๋Œ“๊ธ€์ด ์—†์Šต๋‹ˆ๋‹ค

์ฒซ ๋ฒˆ์งธ ๋Œ“๊ธ€์„ ์ž‘์„ฑํ•ด๋ณด์„ธ์š”!