console 심화 — table, group, time, assert 활용법
console.log만 쓰고 계신다면, 디버깅 효율의 절반을 놓치고 있는 것입니다.console객체에는 데이터를 보기 좋게 표시하고, 성능을 측정하고, 조건부로 경고를 띄우는 다양한 메서드가 있습니다.
console.table — 데이터를 표로 보기
배열이나 객체를 표 형태로 보여줍니다. API 응답이나 배열 데이터를 확인할 때 매우 유용합니다.
const users = [
{ name: "정훈", age: 25, role: "개발자" },
{ name: "길동", age: 30, role: "디자이너" },
{ name: "순신", age: 28, role: "PM" },
];
// 전체 표시
console.table(users);
// ┌─────────┬────────┬─────┬──────────┐
// │ (index) │ name │ age │ role │
// ├─────────┼────────┼─────┼──────────┤
// │ 0 │ "정훈" │ 25 │ "개발자" │
// │ 1 │ "길동" │ 30 │ "디자이너"│
// │ 2 │ "순신" │ 28 │ "PM" │
// └─────────┴────────┴─────┴──────────┘
// 특정 열만 표시
console.table(users, ["name", "role"]);
console.group / groupEnd — 로그 그룹핑
관련 로그를 접을 수 있는 그룹으로 묶습니다.
console.group("사용자 정보");
console.log("이름: 정훈");
console.log("나이: 25");
console.group("주소"); // 중첩 그룹
console.log("도시: 서울");
console.log("구: 강남구");
console.groupEnd();
console.groupEnd();
// 기본 접힌 상태로 표시
console.groupCollapsed("상세 디버그 정보");
console.log("이 내용은 접혀 있음");
console.groupEnd();
실전 활용 — API 요청 로깅
function logRequest(method, url, response) {
console.groupCollapsed(`${method} ${url} — ${response.status}`);
console.log("Headers:", response.headers);
console.log("Body:", response.body);
console.log("Duration:", response.duration + "ms");
console.groupEnd();
}
console.time / timeEnd — 실행 시간 측정
console.time("배열 정렬");
const arr = Array.from({ length: 100000 }, () => Math.random());
arr.sort();
console.timeEnd("배열 정렬");
// 배열 정렬: 42.123ms
// 중간 지점 측정
console.time("전체 작업");
console.time("데이터 로딩");
// ... 데이터 로딩
console.timeEnd("데이터 로딩");
console.time("데이터 가공");
// ... 데이터 가공
console.timeEnd("데이터 가공");
console.timeEnd("전체 작업");
// timeLog — 종료하지 않고 중간 시간 확인
console.time("프로세스");
// ... 작업 1
console.timeLog("프로세스", "1단계 완료");
// ... 작업 2
console.timeLog("프로세스", "2단계 완료");
console.timeEnd("프로세스");
console.assert — 조건부 에러 표시
조건이 false일 때만 에러 메시지를 표시합니다.
const age = 15;
console.assert(age >= 18, "미성년자입니다!", { age });
// Assertion failed: 미성년자입니다! { age: 15 }
console.assert(age >= 0, "나이가 음수입니다!");
// (조건이 true이므로 아무것도 출력 안 됨)
// 데이터 검증에 활용
function processUser(user) {
console.assert(user != null, "user가 null입니다");
console.assert(user?.name, "name이 없습니다", user);
console.assert(user?.age > 0, "age가 유효하지 않습니다", user);
}
console.count / countReset — 호출 횟수
function handleClick(button) {
console.count(button);
}
handleClick("좋아요"); // 좋아요: 1
handleClick("좋아요"); // 좋아요: 2
handleClick("싫어요"); // 싫어요: 1
handleClick("좋아요"); // 좋아요: 3
console.countReset("좋아요");
handleClick("좋아요"); // 좋아요: 1
console.trace — 호출 스택 추적
function c() {
console.trace("호출 경로 추적");
}
function b() {
c();
}
function a() {
b();
}
a();
// 호출 경로 추적
// at c (script.js:2)
// at b (script.js:6)
// at a (script.js:10)
어떤 경로로 함수가 호출되었는지 추적할 때 유용합니다.
console.dir — 객체 속성 탐색
// DOM 요소의 속성을 보고 싶을 때
console.log(document.body); // HTML로 표시
console.dir(document.body); // 객체 속성으로 표시
// 깊이 제한 (Node.js)
const nested = { a: { b: { c: { d: 1 } } } };
console.dir(nested, { depth: 2 }); // 2단계까지만 표시
스타일링 — %c
console.log(
"%c성공!%c 데이터가 저장되었습니다.",
"color: green; font-weight: bold; font-size: 16px;",
"color: inherit;"
);
// 여러 스타일
console.log(
"%c[INFO]%c 서버 시작 %c포트: 3000",
"background: #007bff; color: white; padding: 2px 6px; border-radius: 3px;",
"",
"color: #007bff; font-weight: bold;"
);
console.warn과 console.error
// 경고 — 노란색 배경
console.warn("이 API는 곧 폐기됩니다.");
// 에러 — 빨간색 배경 + 스택 트레이스
console.error("데이터 로딩 실패:", error);
// info — 파란색 아이콘 (브라우저마다 다름)
console.info("현재 버전: 2.0.0");
// debug — 기본적으로 숨겨져 있음 (로그 레벨 설정 필요)
console.debug("디버그 정보:", { state });
프로덕션에서 console 제거
// 방법 1: 조건부 로깅
const isDev = process.env.NODE_ENV === "development";
const logger = {
log: (...args) => isDev && console.log(...args),
warn: (...args) => isDev && console.warn(...args),
error: (...args) => console.error(...args), // 에러는 항상 표시
};
// 방법 2: 빌드 시 제거 (terser 플러그인)
// webpack/vite 설정에서 console.log를 자동 제거
메서드 요약
| 메서드 | 용도 | 활용 시점 |
|---|---|---|
table | 데이터를 표로 표시 | 배열/객체 확인 |
group | 로그 그룹핑 | 관련 로그 묶기 |
time | 실행 시간 측정 | 성능 디버깅 |
assert | 조건부 에러 | 데이터 검증 |
count | 호출 횟수 | 실행 빈도 확인 |
trace | 호출 스택 | 호출 경로 추적 |
dir | 객체 속성 | DOM 요소 탐색 |
**기억하기 **:
console.log만으로 디버깅하면 로그가 금방 난잡해집니다.table로 데이터를 보기 좋게,group으로 묶고,time으로 성능을 측정하면 디버깅 효율이 크게 올라갑니다.
댓글 로딩 중...