μλ¬Έ: Fun with console.log()πΏ
μ¬λ¬λΆμ΄ μΉ μ±μ κ°λ°ν μ μ΄ μλ€λ©΄, console.log(...)κ° μ΅μ νμ€κ²λλ€. μ΄ λ©μλλ κ°λ°μ μ½μμ λ°μ΄ν°λ₯Ό μΆλ ₯νλ©°, λλ²κΉ
κ³Ό λ‘κΉ
, κ·Έλ¦¬κ³ ν
μ€νΈμ μ μ©ν©λλ€.
console.log(console)μ μ€ννλ©΄, μ¬λ¬λΆμ console κ°μ²΄μ ν¨μ¬ λ λ§μ κ²μ΄ μμμ μ μ μμ΅λλ€.
μ΄ ν¬μ€νΈμμλ μ¬λ¬λΆμ λ‘κΉ κ²½νμ ν₯μν μ μλ 10κ°μ§ μ μ©ν μλ Ήμ κ°λ΅νκ² μ€λͺ ν©λλ€.
λͺ©μ°¨
- Tables
- Groups
- Styles
- Times
- Asserts
- Counts
- Traces
- Directory
- Debugs
- λ‘κ·Έ μμ€
- λ€μ€ κ° λ‘κ·Έ
- λ‘κ·Έ λ¬Έμμ΄ νμ
- Clear
- νΉλ³ν λΈλΌμ°μ λ©μλ
Tables#
console.table() λ©μλλ κ°μ²΄/λ°°μ΄μ κΉλν νμμ ν
μ΄λΈλ‘ μΆλ ₯ν©λλ€.
console.table({
'Time Stamp': new Date().getTime(),
OS: navigator['platform'],
Browser: navigator['appCodeName'],
Language: navigator['language'],
});
Groups#
console.group() μ¬μ©νμ¬ κ΄λ ¨λ μ½μ λ¬Έμ μ μ μ μλ μΉμ
κ³Ό ν¨κ» κ·Έλ£Ήνν μ μμ΅λλ€.
λ¬Έμμ΄μ λ§€κ° λ³μλ‘ μ λ¬νμ¬ μ νμ μΌλ‘ μΉμ
μ μ λͺ©μ μ§μ ν μ μμ΅λλ€. μ½μμμ μΉμ
μ μ κ³ νΌμΉ μ μμ§λ§, group λμ groupCollapsedλ₯Ό μ¬μ©νμ¬ κΈ°λ³Έμ μΌλ‘ μ ν μ±λ‘ νμν μλ μμ΅λλ€. μΉμ
λ΄μ νμ μΉμ
μ μ€μ²©νλ κ²λ κ°λ₯νμ§λ§ groupEndλ₯Ό μ¬μ©νμ¬ κ° κ·Έλ£Ήμ λ«μμΌ νλ κ²μ κΈ°μ΅νμΈμ.
λ€μ μμμλ μΌλΆ μ λ³΄κ° ν¬ν¨λ μ΄λ¦° μΉμ μ μΆλ ₯ν©λλ€.
console.group('URL Info');
console.log('Protocol', window.location.protocol);
console.log('Host', window.origin);
console.log('Path', window.location.pathname);
console.groupCollapsed('Meta Info');
console.log('Date Fetched', new Date().getTime());
console.log('OS', navigator['platform']);
console.log('Browser', navigator['appCodeName']);
console.log('Language', navigator['language']);
console.groupEnd();
console.groupEnd();
Styled Logs#
μμ, κΈκΌ΄, ν μ€νΈ μ€νμΌ λ° ν¬κΈ°μ κ°μ κΈ°λ³Έ CSSλ‘ λ‘κ·Έ μΆλ ₯μ μ€νμΌλ§ν μ μμ΅λλ€. μ΄μ λν λΈλΌμ°μ μ§μμ κ½€ λ€μν©λλ€.
μλ₯Ό λ€μ΄ λ€μ μ½λλ₯Ό μ€νν΄λ³΄μΈμ.
console.log(
'%cHello World!',
'color: #f709bb; font-family: sans-serif; text-decoration: underline;'
);μλμ κ°μ κ²°κ³Όκ° μΆλ ₯λ κ²μ λ³Ό μ μμ΅λλ€.

κ½€ λ©μ§μ§ μλμ? μ¬λ¬λΆμ΄ ν μ μλ κ²μ΄ ν¨μ¬ λ§μ΅λλ€!
κΈκΌ΄, μ€νμΌ, λ°°κ²½μμ λ³κ²½νκ±°λ κ·Έλ¦Όμλ 곑μ μ μΆκ°ν μλ μμ΅λλ€.

μ¬κΈ° μ κ° κ°λ°μ λμ보λμμ μ¬μ©νλ κ²κ³Ό μ μ¬ν κ²μ΄ μμ΅λλ€. μ½λλ μ¬κΈ° μμ΅λλ€.

Time#
λ λ€λ₯Έ μΌλ°μ μΈ λλ²κΉ
κΈ°λ²μ μ€ν μκ°μ μΈ‘μ νμ¬ μμ
μ 걸리λ μκ°μ μΆμ νλ κ²μ
λλ€. μ΄λ console.time()μ μ¬μ©νμ¬ νμ΄λ¨Έλ₯Ό μμνκ³ λ§€κ°λ³μλ‘ λ μ΄λΈμ μ λ¬ν λ€μ, λμΌν λ μ΄λΈμ λ§€κ°λ³μλ‘ console.timeEnd()λ₯Ό μ¬μ©νμ¬ νμ΄λ¨Έλ₯Ό μ’
λ£ν μ μμ΅λλ€. λν console.timeLog()λ₯Ό μ¬μ©νμ¬ μ₯κΈ° μ€ν μμ
λ΄μ λ§μ»€λ₯Ό μΆκ°ν μλ μμ΅λλ€.
console.time('concatenation');
let output = '';
for (var i = 1; i <= 1e6; i++) {
output += i;
}
console.timeEnd('concatenation');concatenation: 1206ms - timer ended
μ±λ₯ ν λ΄μ λ§μ»€λ₯Ό μΆκ°νλ λΉνμ€ λ©μλμΈ console.timeStamp()λ μμ΅λλ€. μ΄ λ©μλλ νμΈνΈ λ° λ μ΄μμ μ΄λ²€νΈμ κ°μ΄ νμλΌμΈμ κΈ°λ‘λ λ€λ₯Έ μ΄λ²€νΈλ€κ³Ό μ½λμ νΉμ μ§μ μ ν¨κ» μ°κ΄μν¬ μ μμ΅λλ€.
Assert#
μ€λ₯κ° λ°μνκ±°λ νΉμ μ‘°κ±΄μ΄ μ°Έ λλ κ±°μ§μΈ κ²½μ°μλ§ μ½μμ κΈ°λ‘ν μ μμ΅λλ€. μ΄ μμ
μ console.assert()λ₯Ό μ¬μ©νμ¬ μνν μ μμΌλ©°, 첫 λ²μ§Έ λ§€κ° λ³μκ° falseκ° μλλ©΄ μ½μμ μ무κ²λ κΈ°λ‘νμ§ μμ΅λλ€.
첫 λ²μ§Έ λ§€κ° λ³μλ 체ν¬ν λΆμΈ 쑰건μ΄λ©°, κ·Έλ€μ λ§€κ° λ³μλ μΆλ ₯νκ³ μ νλ 0κ° νΉμ λ§μ λ°μ΄ν° μ§μ λ€μ
λλ€. κ·Έλ¦¬κ³ λ§μ§λ§ λ§€κ° λ³μλ μΆλ ₯ν λ©μμ§μ
λλ€. λ°λΌμ console.assert(false, 'Value was false') 첫 λ²μ§Έ λ§€κ° λ³μκ° falseμ΄κΈ° λλ¬Έμ λ©μμ§λ₯Ό μΆλ ₯ν©λλ€.
const errorMsg = 'the # is not even';
for (let num = 2; num <= 5; num++) {
console.log(`the # is ${num}`);
console.assert(num % 2 === 0, { num }, errorMsg);
}
Count#
λ‘κΉ
μ μν΄ μλμΌλ‘ μ«μλ₯Ό μ¦κ°μν¨ μ μ΄ μμΌμ κ°μ? console.count()λ μ΄λ€ κ²μ΄ μ€νλ νμ λλ μ½λ λΈλ‘μ΄ μ
λ ₯λ λΉλλ₯Ό μΆμ νλ λ° μ μ©ν©λλ€.
μ νμ μΌλ‘ μΉ΄μ΄ν°μ λ μ΄λΈμ μ§μ νμ¬ μ¬λ¬ μΉ΄μ΄ν°λ₯Ό κ΄λ¦¬νκ³ μΆλ ₯μ λ λͺ ννκ² λ§λ€ μ μμ΅λλ€.
μΉ΄μ΄ν°λ νμ 1λΆν° μμν©λλ€. console.countReset()μ μ¬μ©νμ¬ μΈμ λ μ§ μΉ΄μ΄ν°λ₯Ό 리μ
ν μ μμ΅λλ€. μ΄ κ²½μ°λ λ μ΄λΈ λ§€κ° λ³μλ₯Ό μ νμ μΌλ‘ μ¬μ©ν μ μμ΅λλ€.
λ€μ μ½λλ κ° νλͺ©μ λν μΉ΄μ΄ν°λ₯Ό μ¦κ°μν€λ©°, μ΅μ’ κ°μ 8μ΄ λ©λλ€.
const numbers = [1, 2, 3, 30, 69, 120, 240, 420];
numbers.forEach(name => {
console.count();
});λ€μμ λ μ΄λΈμ΄ μ§μ λ μΉ΄μ΄ν°μ μΆλ ₯ μμ λλ€.

λ μ΄λΈμ μ λ¬νλ λμ κ°μ μ¬μ©νλ©΄ κ° μ‘°κ±΄ κ°μ λν΄ λ³λμ μΉ΄μ΄ν°λ₯Ό κ°μ§ μ μμ΅λλ€. μλλ μμμ λλ€.
console.count(NaN); // NaN: 1
console.count(NaN + 3); // NaN: 2
console.count(1 / 0); // Infinity: 1
console.count(String(1 / 0)); // Infinity: 2Trace#
μλ°μ€ν¬λ¦½νΈμμ μ°λ¦¬λ μ’
μ’
κΉκ² μ€μ²©λ λ©μλμ κ°μ²΄λ₯Ό μ¬μ©ν©λλ€. console.trace()λ₯Ό μ¬μ©νμ¬ μ€ν μΆμ μ ν μ μκ³ , νΉμ μ§μ μ λλ¬νκΈ° μν΄ νΈμΆλ λ©μλλ₯Ό μΆλ ₯ν μ μμ΅λλ€.

μ νμ μΌλ‘ μ€ν μΆμ κ³Ό ν¨κ» μΆλ ₯λ λ°μ΄ν°λ₯Ό μ λ¬ν μ μμ΅λλ€.
Dir#
μ½μμ ν° κ°μ²΄λ₯Ό λ‘κΉ
νλ κ²½μ°, κ·Έκ²μ μ½κΈ° μ΄λ €μΈ μ μμ΅λλ€. console.dir() λ©μλλ₯Ό μ¬μ©νμ¬ νμ₯ κ°λ₯ν νΈλ¦¬ κ΅¬μ‘°λ‘ νμμ μ§μ ν©λλ€.
λ€μμ λλ ν°λ¦¬ μ€νμΌ μ½μ μΆλ ₯μ μμμ λλ€.

console.dirxml()μ μ¬μ©νμ¬ μ μ¬ν λ°©λ²μΌλ‘ XML λλ HTML κΈ°λ° νΈλ¦¬λ₯Ό μΈμν μλ μμ΅λλ€.
Debug#
μ‘ λ΄μ μ¬λ¬λΆμ΄ κ°λ° μ€μ μ¬μ©νλ λͺλͺ λ‘κ·Έκ° μ€μ λμ΄ μμ μ μμ§λ§, κ·Έκ²λ€μ΄ μ¬μ©μμκ² λ³΄μ΄κΈ°λ₯Ό μνμ§ μμ΅λλ€. λ‘κ·Έ ꡬ문μ console.debug()λ‘ λ체νλ©΄ console.logμ μ νν κ°μ λ°©μμΌλ‘ μλνμ§λ§, λΉλ μμ€ν
μμ μ κ±°λκ±°λ νλ‘λμ
λͺ¨λμμ μ€νλ λλ λΉνμ±νλ©λλ€.
λ‘κ·Έ μμ€#
λΈλΌμ°μ μ½μμλ μ¬λ¬ νν°(μ 보, κ²½κ³ , μλ¬)κ° μμΌλ©°, μ΄λ₯Ό ν΅ν΄ λ‘κ·Έλ λ°μ΄ν°μ μμΈ μ λλ₯Ό λ³κ²½ν μ μμ΅λλ€. μ΄λ¬ν νν°λ₯Ό μ¬μ©νλ €λ©΄ λ€μ μ€ νλλ₯Ό μ¬μ©νμ¬ λ‘κ·Έ ꡬ문μ μ ννμμμ€.
console.info()- λ‘κΉ λͺ©μ μ μ λ³΄μ± λ©μμ§λ‘, μΌλ°μ μΌλ‘ μμ βiβμ/λλ νλμ λ°°κ²½μ ν¬ν¨ν©λλ€.console.warn()- κ²½κ³ / μΉλͺ μ μ΄μ§ μμ μ€λ₯λ₯Ό λνλ΄λ©°, μΌλ°μ μΌλ‘ μΌκ°ν λλν λ§ν¬ μ/λλ λ Έλμ λ°°κ²½μ ν¬ν¨ν©λλ€.console.error()- κΈ°λ₯μ μν₯μ λ―ΈμΉ μ μλ μ€λ₯λ₯Ό λνλ΄λ©°, μΌλ°μ μΌλ‘ μν λλνμ/λλ λΉ¨κ° λ°°κ²½μ ν¬ν¨ν©λλ€.
Node.jsμμ μλ‘ λ€λ₯Έ λ‘κ·Έ λ 벨μ μ΄μ νκ²½μμ μ€νλ λ μλ‘ λ€λ₯Έ μ€νΈλ¦Όμ κΈ°λ‘λ©λλ€. μλ₯Ό λ€μ΄ μ΄μ νκ²½μμ error()λ stderrμ κΈ°λ‘λκ³ logλ stdoutμ μΆλ ₯λμ§λ§, κ°λ° νκ²½μμλ λͺ¨λ μ μμ μΌλ‘ μ½μμ νμλ©λλ€.
λ€μ€ κ° λ‘κ·Έ#
console κ°μ²΄λ λλΆλΆ μ¬λ¬ λ§€κ° λ³μλ₯Ό νμ©νλ―λ‘ μΆλ ₯μ λ μ΄λΈμ μΆκ°νκ±°λ ν λ²μ μ¬λ¬ λ°μ΄ν° μ§μ μ μΆλ ₯ν μ μμ΅λλ€. μμλ λ€μκ³Ό κ°μ΅λλ€. console.log('User: ', user.name);
κ·Έλ¬λ λ μ΄λΈμ΄ μ§μ λ μ¬λ¬ κ°μ μΈμνλ λ μ¬μ΄ μ κ·Όλ²μ ꡬ쑰 λΆν΄ ν λΉ(object deconstructing)μ μ¬μ©νλ κ²μ
λλ€. μλ₯Ό λ€μ΄, x,y,zμ κ°μ μΈ κ°μ λ³μκ° μλ κ²½μ°, κ° λ³μ μ΄λ¦κ³Ό κ°μ΄ μΆλ ₯λλλ‘ console.log({x, y, z});μ κ°μ΄ μ€κ΄νΈλ‘ λλ¬μΈμ κ°μ²΄λ‘ λ‘κΉ
ν μ μμ΅λλ€.

λ‘κ·Έ λ¬Έμμ΄ νμ#
μΆλ ₯ν νμ λ¬Έμμ΄μ λΉλν΄μΌ νλ κ²½μ°, νμ μ§μ μλ₯Ό μ¬μ©νμ¬ CμΈμ΄ μ€νμΌ printfλ₯Ό μ¬μ©ν μ μμ΅λλ€.
λ€μκ³Ό κ°μ μ§μ μλ€μ΄ μ§μλ©λλ€.
%s- λ¬Έμμ΄ λλ λ¬Έμμ΄λ‘ λ³νλλ λ€λ₯Έ λͺ¨λ νμ%d/%i- μ μ%f- μ€μ%o- μ΅μ μ νμ μ¬μ©%O- κΈ°λ³Έ νμ μ¬μ©%c- μ¬μ©μ μ μ νμ μ¬μ© (λ λ§μ μ 보)
μμ
console.log(
'Hello %s, welcome to the year %d!',
'Alicia',
new Date().getFullYear()
);
// Hello Alicia, welcome to the year 2022!λ¬Όλ‘ ν νλ¦Ώ 리ν°λ΄μ μ¬μ©νμ¬ λμΌν μμ μ μνν μλ μμ΅λλ€. μ§§μ λ¬Έμμ΄μ κ²½μ° ν νλ¦Ώ 리ν°λ΄ λ°©μμ΄ λ μ½κΈ° μ½μ΅λλ€.
Clear#
λ§μ§λ§μΌλ‘ μ΄λ²€νΈμμ μΆλ ₯μ μ°Ύμ λ, μ¬λ¬λΆμ νμ΄μ§κ° μ²μ λ‘λ©λλ©΄μ μ½μμ λ‘κ·Έ λ λͺ¨λ κ²μ μ κ±°νκ³ μΆμ μ μμ΅λλ€. μ΄ μμ
μ console.clear()λ₯Ό μ¬μ©νμ¬ μνν μ μμΌλ©°, λͺ¨λ λ΄μ©μ μ§μ°μ§λ§, μ΄λ€ λ°μ΄ν°λ μ΄κΈ°ννμ§ μμ΅λλ€.
μΌλ°μ μΌλ‘ ν΄μ§ν΅ μμ΄μ½μ ν΄λ¦νμ¬ μ½μμ μ§μΈ μ μκ³ , νν° ν μ€νΈ μ λ ₯μ ν΅ν΄ μ½μμ κ²μν μλ μμ΅λλ€.
νΉλ³ν λΈλΌμ°μ λ©μλ#
λΈλΌμ°μ μ½μμμ μ§μ μ½λλ₯Ό μ€νν λ, λλ²κΉ , μλν λ° ν μ€νΈμ λ§€μ° μ μ©ν λͺ κ°μ§ κ°λ¨ν λ©μλλ₯Ό μ¬μ©ν μ μμ΅λλ€.
κ·Έμ€ κ°μ₯ μ μ©ν κ²λ€μ λ€μκ³Ό κ°μ΅λλ€.
$()-Document.querySelector()μ μ½μ΄μ λλ€. (DOM μμλ₯Ό μ ννκΈ° μν jQuery μ€νμΌ)$$()- μμ λμΌνμ§λ§, λ°°μ΄μμ μ¬λ¬ μμλ₯Ό λ°νν λ λͺ¨λλ₯Ό μ ν(selectAll) ν©λλ€.$_- λ§μ§λ§μΌλ‘ νκ°λ μμ κ°μ λ°νν©λλ€.$0- κ²μ¬ μ°½μμ κ°μ₯ μ΅κ·Όμ μ νν DOM μμλ₯Ό λ°νν©λλ€.$1β¦$4λ₯Ό μ¬μ©νμ¬ μ΄μ μ μ νν UI μμλ₯Ό κ°μ Έμ¬ μ μμ΅λλ€.$x()- Xpath 쿼리λ₯Ό μ¬μ©νμ¬ DOM μμλ₯Ό μ νν μ μμ΅λλ€.keys()μvalues()- Object.getKeys()μ μ½μ΄λ‘ κ°μ²΄μ ν€ λλ κ°μ λ°°μ΄μ λ°νν©λλ€.copy()- ν΄λ¦½λ³΄λμ λ΄μ©μ 볡μ¬ν©λλ€.monitorEvents()- μ§μ λ μ΄λ²€νΈκ° λ°μν λλ§λ€ λͺ λ Ήμ μ€νν©λλ€.console.table()κ³Ό κ°μ νΉμ κ³΅ν΅ μ½μ λͺ λ Ήμ κ²½μ°, μμconsole.μ μ λ ₯ν νμ μμ΄,table()λ§ μ λ ₯ν΄λ λ©λλ€.
μ¬κΈ°μ λ λ§μ μ½μ λ¨μΆ 컀맨λκ° μ‘΄μ¬νλ©° μ 체 리μ€νΈλ μ΄κ²μ λλ€.
κ²½κ³ μ΄κ²μ κ°λ°μ λꡬ μ½μμμλ§ μλνλ©°, μ¬λ¬λΆμ μ½λμμλ μλνμ§ μμ΅λλ€!
κ·Έλ¦¬κ³ μ’ λβ¦#
μ½μμ λ‘κΉ
ν μ μλ μμ
μ ν¨μ¬ λ λ§μ΅λλ€! μμΈν λ΄μ©μ MDN console λ¬Έμ λλ ν¬λ‘¬ κ°λ°μ μ½μ λ¬Έμμμ νμΈνμΈμ.
μλλ λͺ¨λ² μ¬λ‘μ λν κ°λ΅ν μ°Έκ³ μ¬νμ λλ€.
- console.log κ΅¬λ¬Έμ΄ λ©μΈ λΈλμΉμ λ³ν©λμ§ μλλ‘ lint λ£°μ μ μνμΈμ.
- νκ²½μ λ°λΌ λλ²κ·Έ λ‘κ·Έλ₯Ό νμ±ν/λΉνμ±ννκ³ μ μ ν λ‘κ·Έ μμ€μ μ¬μ©νμ¬ λͺ¨λ νμμ μ μ©ν μ μλ λνΌ(wrapper) ν¨μλ₯Ό μμ±νμΈμ. μ΄κ²μ λν μ½λ μ λ°μ΄νΈκ° ν κ³³μμλ§ νμν μλνν°(third-party) λ‘κΉ μλΉμ€μ ν΅ν©νλ λ°λ μ¬μ©ν μ μμ΅λλ€.
- λ―Όκ°ν μ 보λ₯Ό λ‘κ·Έλ‘ λ¨κΈ°μ§ λ§μΈμ. λΈλΌμ°μ λ‘κ·Έλ μ€μΉλ νμ₯ νλ‘κ·Έλ¨μ μν΄ μΊ‘μ²λ μ μκΈ° λλ¬Έμ μμ ν κ²μΌλ‘ κ°μ£Όν΄μλ μ λ©λλ€.
- νν°λ§ λ° λΉνμ±νλ₯Ό λ μ½κ² λ§λ€κΈ° μν΄ νμ μ¬λ°λ₯Έ λ‘κ·Έ μμ€(
info,warn,errorμ κ°μ)μ μ¬μ©νμΈμ. - νμν κ²½μ°, μμ€ν μμ λ‘κ·Έλ₯Ό ꡬ문 λΆμν μ μλλ‘, μΌκ΄λ νμμ λ°λ₯΄μΈμ.
- νμ μ§§κ³ μλ―Έ μλ μλ¬Έ λ‘κ·Έ λ©μμ§λ₯Ό μμ±νμΈμ.
- λ‘κ·Έ μμ λ§₯λ½ λλ λ²μ£Όλ₯Ό ν¬ν¨νμΈμ.
- λ무 λ¨μ©νμ§ λ§κ³ , μ μ©ν μ λ³΄λ§ λ‘κ·Έλ‘ λ¨κΈ°μΈμ.
π νκ΅μ΄λ‘ λ νλ°νΈμλ μν°ν΄μ λΉ λ₯΄κ² λ°μλ³΄κ³ μΆλ€λ©΄ Korean FE Article(https://kofearticle.substack.com/)μ ꡬλ ν΄μ£ΌμΈμ!
![[Ykss]](/static/e1b6058af380e8a00f152aefa04db768/cbeb2/profile.jpg)