Medium - Boost your JavaScript Debugging Skills With These Console Tricks

원문 - Indrek Lasn

Trend 파악을 Medium 기고문 요약 포스팅 - 콘솔 기법을 이용해서 자바스크립트 디버깅 능력을 향상시키세요;자바스크립트는 우리에게 디버깅을 위한 많은 도구를 제공해줍니다.

Photo by Tracy Adams on Unsplash

자바스크립트로 코드를 디버깅하는 틀에박힌 방식은 console.log의 결과를 보는 것입니다. 그렇게해서 할 수도 있지만 디버깅하는데 최상의 방법은 아니죠. 만약 디버깅에 더 좋은 방법이 있다면 한번 사용해 보는게 어떠신가요?

“Hello from the console”

콘솔 오브젝트는 브라우저 디버깅 콘솔에 접근하는 것을 제공합니다. 여러분은 자바스크립트 코드를 브라우저에서 실행시킬 때 콘솔 객체를 사용할 수 있죠.(서버 쪽말고 콘솔 쪽에 해당됩니다.) 브라우저마다 다양한 동작 방식이 있지만 일반적으로 제공되는 기능들이 있습니다. 가장 좋은 디버깅 문장은 모든 라이브러리와 프레임워크에서 동작하고 어떤 코어 언어를 사용해도 잘 동작하는 것이죠.

가장 기본적인 콘솔로그의 사용법은 코드의 결과를 보는 것입니다. 다음의 코드를 사용해보세요.

function sayHello(name) {
  console.log(name)
}

sayHello('Indrek')

이것은 이름을 sayHello 함수에 넘겨준 로그입니다.

Outputting the name passed to the function

만약 우리가 sayHello 함수가 몇 번 호출되었는지 알고 싶다면 어떻게 하면 될까요? 간단합니다. console.count()를 사용하세요.

console.count

count() 결과는 해당 라벨이 얼마나 호출되었는지 출력합니다. 만약 매개변수가 없다면 count()는 기본 라벨로 간주해서 동작하게 됩니다.


function sayHello(name) {
  console.count()
  console.log(name)
}

sayHello("Indrek")
sayHello("William")
sayHello("Kelly")

위의 코드의 로그는 다음과 같습니다.

Counting the times we called the sayHello function

이것은 우리에게 함수가 몇번이나 호출됬는지 알려주지만 만약 우리가 같은 이름에 대해서 몇 번 호출되었는지 확인하려면 어떻게 하면 될까요? 해답은 간단히 name을 count()의 매개변수로 넘겨주는 것입니다.


function sayHello(name) {
  console.count(name)
}

sayHello("Indrek")
sayHello("William")
sayHello("Kelly")
sayHello("Indrek")

그러면 count()함수는 매개변수로 넘겨준 name을 가지고 몇 번 호출되었는지 계속 추적할 것입니다.

Counting how many times we say each name

console.warn

다음은 콘솔에서 경고 메시지를 출력하는 방법입니다. 이것은 개발자 도구나 API로 작업할 때 유용합니다. console.warn은 사용자에게 무엇인가 올바르지 않다는 것을 알려주는데 사용됩니다. 예를 들면 매개변수 생략이나 개발자에게 API/패키지가 deprecated 된 버전이라고 알려주는 것이죠.

function sayHello(name) {
  if(!name) {
    console.warn("No name given")
  }
}

sayHello()

위의 코드는 name 매개변수가 함수에게 전달되었는지 아닌지 확인하는 것입니다. 만약 전달되지 않았다면 경고 매세지가 한번 더 생각하도록 로그에 표시됩니다.

Show the user a warning message when no name is passed.

console.table

만약 우리가 객체나 배열로 작업을 할 때 console.table은 데이터를 표시할 때 매우 유용합니다. 배열에 있는 각 요소들이 테이블 형태로 표시됩니다. 우리가 과일의 배열을 가지고 있다고 가정해봅시다. 우리가 console.table의 매개변수로 과일 배열을 넘겨주면 콘솔에 테이블 형태로 출력된 것을 볼 수 있을겁니다.

const fruits = ["kiwi", "banana", "strawberry"]

console.table(fruits)

이제 우리가 콘솔만 힐끗 봐도 우리는 배열의 데이터를 알 수 있을 것입니다.

Displaying our array in a tabular form

매우 큰 배열로 작업을 할 떄 이게 얼마나 유용한지 상상하실 수 있을겁니다. 아래의 예제는 배열에 값이 더욱 많을 경우입니다.

const fruits = [
  "Apple",
  "Watermelon",
  "Orange",
  "Pear",
  "Cherry",
  "Strawberry",
  "Nectarine",
  "Grape",
  "Mango",
  "Blueberry",
  "Pomegranate",
  "Carambola",
  "Plum",
  "Banana",
  "Raspberry",
  "Mandarin",
  "Jackfruit",
  "Papaya",
  "Kiwi",
  "Pineapple",
  "Lime",
  "Lemon",
  "Apricot",
  "Grapefruit",
  "Melon",
  "Coconut",
  "Avocado",
  "Peach"
];

console.table(fruits);

그리고 우리가 console.table에 과일 배열을 넘겨주면 다음과 같이 표시됩니다.

Displaying all fruits in a table

배열로 작업하는 건 꽤나 직관적이었습니다. 객체는 어떨까요?

const pets = {
  name: "Simon",
  type: "cat"
};

console.table(pets);

이제 배열대신에 객체를 가지고 있다는 것을 기억하세요. 객체는 두개의 키(애완동물의 이름과 타입)를 가지고 있습니다.

배열을 넣었을 때랑 달리 이번에는 테이블에서 키와 밸류의 형태로 표시됩니다. 만약에 우리가 한 개 이상의 객체를 가지고 있으면 어떻게 될까요?

const pets = {
  name: "Simon",
  type: "cat"
};

const person = {
  firstName: "Indrek",
  lastName: "Lasn"
}

console.table(pets, person);

예상되로 두 개의 분리된 객체가 다른 테이블에서 표시됩니다.

Two objects

우리가 하나의 테이블에서 보고 싶다면 객체를 배열의 형태로 감싸서 전달하면 됩니다.

const pets = {
  name: "Simon",
  type: "cat"
};

const person = {
  firstName: "Indrek",
  lastName: "Lasn"
}

console.table([pets, person]);

이제 하나의 테이블에 표시됩니다.

Grouping objects by wrapping them inside an array

console.group

집합이나 연결된 데이터로 작업할 때 중첩된 그룹을 사용하면 여러분의 출력물을 연관된 메시지와 연결하여 깔끔하게 표시하는데 도움이 됩니다. 중첩된 블록을 만들기 위해서는 console.group()를 사용하세요.

console.log("This is the first level");
console.group();
console.log("Level 2");
console.group();
console.log("Level 3");
console.warn("More of level 3");
console.groupEnd();
console.log("Back to level 2");
console.groupEnd();
console.log("Back to the first level");

다음워 코드는 블록 단위로 콘솔 문장들을 표시합니다. 관계 기반 데이터를 가지고 작업을 할 때 유용합니다.

console.groupCollapsed() 메소드는 비슷하지만 새로운 블록이 닫혀있고 읽으려면 버튼을 눌러야 합니다.

Synopsis

언어에서 제공하는 모든 도구를 사용하세요. 만약 사용법을 할게된다면 사용하세요. 간략히 언급하자면 디버거는 그 자체로 내용이 많기 때문에 여기서 우리는 debugger의 사용법을 생략했습니다. 만약 디버거가 궁급하다면 debugger를 클릭하세요.

Summary

  • 자바스크립트에서 로그를 남기는 기법에 대한 정리
  • 함수가 호출된 횟수, 테이블 형태, 그룹 형태로 로그를 표시하는 방법들.

© 2019. All rights reserved.

Powered by Hydejack v8.1.1