κ°λ°μ νλ€ λ³΄λ©΄ λꡬλ ν λ²μ―€ λ§μ£Όνλ νκ²½μ΄ μμ΅λλ€. μ½μμ°½ κ°λ λ©μμ§ 111, here, obj κ°μ μλ―Έ μλ λ¬Έμμ΄λ€. κΈν λ§μμ μΆκ°ν console.logλ λΉμ₯μ λΆμ λλ λ°λ λμμ΄ λμ§λ§, νλ‘μ νΈμ κ·λͺ¨κ° 컀μ§κ³ λΉμ¦λμ€ λ‘μ§μ΄ 볡μ‘ν΄μ§μλ‘ μ€νλ € μμμ΄ λμ΄ μ°λ¦¬μ λμ κ°λ¦¬κ³€ ν©λλ€.
μ μμ μΌλ§ μ , μμ κ°μ API μλ΅κ³Ό 볡μ‘ν μν λ³νκ° μ½ν κ²°μ λ‘μ§μ λλ²κΉ
νλ©° λΉμ·ν κ²½νμ νμ΅λλ€. console.logλ§μΌλ‘λ λμ ν λ°μ΄ν°μ νλ¦μ μ«μ μ μμλ κ·Έ μκ°, μ λ μ°λ¦¬κ° 무μ¬μ½ μ§λμ³€λ console κ°μ²΄μ μ§μ ν κ°μΉλ₯Ό λ€μκΈ κΉ¨λ«κ² λμμ΅λλ€. μ΄λ² κΈμμλ λ¨μν μΆλ ₯μ λμ΄, βκ΄μΈ‘ κ°λ₯μ±(Observability)βμ κ΄μ μμ consoleμ μ΄λ»κ² νμ©ν μ μλμ§ κ·Έ κ³ λ―Όμ κ³Όμ μ 곡μ νλ € ν©λλ€.
1. λ°μ΄ν°μ νμμ μ§μ€νκΈ°: console.table
μ°λ¦¬λ λ³΄ν΅ API μλ΅μ νμΈνκΈ° μν΄ μ΅κ΄μ μΌλ‘ console.log(response)λ₯Ό νμ΄νν©λλ€. νμ§λ§ μλ΅ λ°μ΄ν°κ° μμ κ°μ νλλ₯Ό κ°μ§ κ°μ²΄ λ°°μ΄μ΄λΌλ©΄ μ΄λ¨κΉμ? λΈλΌμ°μ μ½μμμ νμ΄νλ₯Ό μΌμΌμ΄ ν΄λ¦νλ©° νλλ₯Ό νμΈνλ κ³Όμ μ κ·Έ μμ²΄λ‘ μΈμ§ λΆνλ₯Ό μΌμΌν΅λλ€.
βν(Table)λ μΈμ§ λΆνλ₯Ό μ€μ΄λ κ°μ₯ κ°λ ₯ν λꡬμ λλ€β
Toss Techμ κΈμμ μΈν°νμ΄μ€λ₯Ό βκ³μ½βμΌλ‘ λ°λΌλ³΄λ―, μ λ λ‘κ·Έ μμ βλ°μ΄ν°μ κ³μ½βμ νμΈνλ κ³Όμ μ΄λΌκ³ μκ°ν©λλ€. console.tableμ μ΄ κ³μ½μ μ΄ν μ¬λΆλ₯Ό κ°μ₯ λͺ
ννκ² λ³΄μ¬μ€λλ€.
// 볡μ‘ν μ£Όλ¬Έ λͺ©λ‘ λ°μ΄ν°
const orders = [
{ id: 'ORD-001', product: 'MacBook Pro', price: 2500000, status: 'PAID', customer: 'Jungjin' },
{ id: 'ORD-002', product: 'iPad Air', price: 900000, status: 'PENDING', customer: 'Antigravity' },
{ id: 'ORD-003', product: 'iPhone 15', price: 1200000, status: 'FAILED', customer: 'Toss' },
]
// λ¨μν logλ‘ μ°μΌλ©΄ κ°μ²΄μ κΉμ΄μ κ°νκ² λμ§λ§,
// tableμ λ°μ΄ν°μ 'νμ'μ νλμ λλ¬λ
λλ€.
console.table(orders, ['id', 'product', 'status'])
μ€λ¬΄μμμ κ°μΉ: λ¨μν μμκ² λ³΄μ¬μ£Όλ κ²μ λμ΄, μ½μμ°½μ ν ν€λλ₯Ό ν΄λ¦ν΄ λ°μ΄ν°λ₯Ό μ λ ¬ν΄ λ³Ό μ μλ€λ μ μ΄ ν΅μ¬μ
λλ€. νΉμ μν(FAILED)μ λ°μ΄ν°λ§ λͺ¨μ보거λ κ°κ²© μμΌλ‘ μ λ ¬ν΄ λ³΄λ νμλ λ³λμ λ‘μ§ μΆκ° μμ΄λ μ¦κ°μ μΈ λΆμμ κ°λ₯νκ² ν©λλ€.
2. λ§₯λ½(Context)μ μμ§ μλ λλ²κΉ
: console.group
λΉλκΈ° μμ μ΄ μ°λ¬μ μΌμ΄λλ νκ²½μμ λ‘κ·Έλ μμκ° λ€μμ΄κΈ° λ§λ ¨μ λλ€. A μμ μ λ‘κ·Έμ B μμ μ λ‘κ·Έκ° μ½μμ°½μμ λ€μν€λ μκ°, μ°λ¦¬λ λλ²κΉ μ βλ§₯λ½βμ μμ΄λ²λ¦½λλ€.
βλ‘κ·Έμλ κ³μΈ΅μ΄ νμν©λλ€β
μ λ 볡μ‘ν λ‘μ§μ μνν λ console.groupμ ν΅ν΄ λ‘κ·Έμ λͺ
νν κ²½κ³λ₯Ό κΈμ΅λλ€. μ΄λ λ§μΉ μ½λμμ ν¨μλ₯Ό λΆλ¦¬νλ κ²κ³Ό κ°μ λ
Όλ¦¬μ λ¨μμ ꡬλΆμ μ½μμμλ μ€ννλ κ²μ
λλ€.
async function processPayment(orderId) {
console.group(`π³ κ²°μ νλ‘μΈμ€ μμ: ${orderId}`)
try {
console.log('1. μ¬κ³ νμΈ μ€...')
// ... μ¬κ³ νμΈ λ‘μ§
console.groupCollapsed('π μμΈ κ²μ¦ λ°μ΄ν°')
console.log('ν μΈμ¨: 10%')
console.log('ν¬μΈνΈ μ¬μ©: 5,000p')
console.groupEnd()
console.log('2. PGμ¬ κ²°μ μμ² μ μ‘')
// ... κ²°μ μμ² λ‘μ§
} finally {
console.groupEnd()
}
}
μ groupCollapsedμΈκ°?: λͺ¨λ μ 보λ₯Ό μ²μλΆν° λ€ λ³΄μ¬μ£Όλ κ²μ μ 보 κ³Όμμ
λλ€. groupCollapsedλ₯Ό μ¬μ©νλ©΄ νμμλ ν΅μ¬ νλ¦λ§ 보μ¬μ£Όλ€κ°, λ¬Έμ κ° μκ²Όμ λλ§ μμΈ λ΄μ©μ νΌμ³λ³Ό μ μλ βμ νμ λ
ΈμΆβμ΄ κ°λ₯ν΄μ§λλ€. μ΄λ λλ²κΉ
μ μκ°μ μμμ μ€μ΄λ μ€μ©μ μΈ μ λ΅μ
λλ€.
3. 보μ΄μ§ μλ λ²μΈ μ°ΎκΈ°: console.count & console.dir
κ°λμ λ‘μ§μ΄ μλμΉ μκ² μ¬λ¬ λ² μ€νλκ±°λ, DOM κ°μ²΄μ λ΄λΆ μμ±μ΄ κΆκΈν λκ° μμ΅λλ€. μ΄λ logλ μ°λ¦¬μκ² λ무 λ§μ μ 보λ₯Ό μ£Όκ±°λ, νΉμ λ무 μ μ μ 보λ₯Ό μ€λλ€.
βνμλ₯Ό μΈλ κ²λ§μΌλ‘λ λ²κ·Έλ μ‘νλλ€β
리μ‘νΈ μ»΄ν¬λνΈκ° μ μ΄λ κ² μμ£Ό 리λ λλ§λλμ§ κΆκΈν λ, console.countλ κ°μ₯ μμ΄μ μ΄λ©΄μλ νμ€ν λκ΅¬κ° λ©λλ€.
function MyComponent() {
// μ»΄ν¬λνΈκ° λ λλ§λ λλ§λ€ νμλ₯Ό κΈ°λ‘ν©λλ€.
console.count('π₯οΈ MyComponent λ λλ§ νμ')
return <div>Hello World</div>
}
λν, DOM μμλ₯Ό console.logλ‘ μ°μΌλ©΄ HTML νκ·Έ ννλ‘ λ³΄μ΄μ§λ§, console.dirλ‘ μ°μΌλ©΄ ν΄λΉ μμκ° κ°μ§ λͺ¨λ μλ°μ€ν¬λ¦½νΈ μμ±μ κ³μΈ΅μ μΌλ‘ νμΈν μ μμ΅λλ€.
// νκ·Έκ° μλλΌ 'κ°μ²΄'λ‘μμ μμ±μ΄ κΆκΈν λ
const button = document.querySelector('button')
console.dir(button)
4. λλ§μ λλ²κΉ
ν
λ§: CSS Styling (%c)
λ‘κ·Έκ° λ무 λ§μ μ€μν λ©μμ§κ° 묻νλ€λ©΄, μμ λμ λκ² μ€νμΌμ μ ν μλ μμ΅λλ€. μ΄λ λ¨μν μ¬λ―Έλ₯Ό λμ΄, λκ·λͺ¨ νλ‘μ νΈμμ νΉμ λͺ¨λμ λ‘κ·Έλ₯Ό μκ°μ μΌλ‘ ꡬλΆνλ λ° λ§€μ° μ μ©ν©λλ€.
const successStyle =
'color: white; background: green; font-weight: bold; padding: 2px 5px; border-radius: 3px;'
const errorStyle =
'color: white; background: red; font-weight: bold; padding: 2px 5px; border-radius: 3px;'
console.log('%c SUCCESS ', successStyle, 'λ°μ΄ν° λκΈ°ν μλ£')
console.log('%c ERROR ', errorStyle, 'λ€νΈμν¬ μ°κ²° μ€ν¨')
μ€μ©μ ν¬μΈνΈ: λΌμ΄λΈλ¬λ¦¬λ₯Ό κ°λ°νκ±°λ κ³΅ν΅ λͺ¨λμ λ§λ€ λ, ν΄λΉ λͺ¨λμμ λ°μνλ λ‘κ·Έμ κ³ μ ν μμμ λΆμ¬ν΄ 보μΈμ. λ€λ₯Έ κ°λ°μλ€μ΄ λ‘κ·Έλ₯Ό νμΈν λ βμ, μ΄κ±΄ κ·Έ λͺ¨λμμ λ³΄λΈ κ±°κ΅¬λβλΌκ³ μ¦κ°μ μΌλ‘ μΈμ§ν μ μκ² λ©λλ€.
5. μ±λ₯κ³Ό μΆμ , κ·Έ μ΄μμ μ λ’°: console.time & trace
κ°λμ βμ½λκ° λμκ°κΈ΄ νλλ°, μ μ΄λ κ² λ리μ§?β νΉμ βμ΄ ν¨μκ° μ μ¬κΈ°μ νΈμΆλμ§?βλΌλ κ·Όλ³Έμ μΈ μλ¬Έμ΄ λ€ λκ° μμ΅λλ€. μ΄λ μ°λ¦¬λ κ°(Intuition)μ μμ‘΄νκΈ°λ³΄λ€ λ°μ΄ν°(Data)μ μμ‘΄ν΄μΌ ν©λλ€.
βμΈ‘μ ν μ μλ€λ©΄ κ°μ ν μ μμ΅λλ€β
console.timeμ μ½λμ νΉμ ꡬκ°μ΄ μ°¨μ§νλ 물리μ μκ°μ μΈ‘μ ν΄ μ€λλ€. νΉν 리μ‘νΈμ 리λ λλ§ μ΅μ νλ λλμ λ°μ΄ν° κ°κ³΅ λ‘μ§μμ λ³λͺ© μ§μ μ μ°Ύλ λ° νμν©λλ€.
console.time('π₯ λ°μ΄ν° κ°κ³΅ μ±λ₯ ν
μ€νΈ')
const processedData = data.filter((item) => item.active).map(transform)
console.timeEnd('π₯ λ°μ΄ν° κ°κ³΅ μ±λ₯ ν
μ€νΈ')
λν, console.traceλ νΈμΆ μ€ν(Call Stack)μ κ·Έλλ‘ λ
ΈμΆν©λλ€. μ΄λ νΉν κ³΅ν΅ μ»΄ν¬λνΈλ μ νΈλ¦¬ν° ν¨μκ° μλμΉ μμ κ³³μμ νΈμΆλμ΄ λΆμ ν¨κ³Ό(Side Effect)λ₯Ό μΌμΌν¬ λ, κ·Έ λ²μΈμ μ°Ύλ κ°μ₯ νμ€ν μ¦κ±°κ° λ©λλ€.
λ§μΉλ©°: μ½μμ μ°λ¦¬μ μ½λ μ¬μ΄μ λνμ°½μ λλ€
Toss Techμ SDK κ°λ°κΈ°κ° βμμ μ±βκ³Ό βλͺ
νμ±βμ ν₯ν μ¬μ μ΄μλ―, μ°λ¦¬μ λλ²κΉ
κ³Όμ μμ μ½λμ λν μ λ’°λ₯Ό μμκ°λ κ³Όμ μ΄μ΄μΌ ν©λλ€. console.log ν μ€μ μμ‘΄νλ μ΅κ΄μμ λ²μ΄λ μν©μ λ§λ μ μ ν λ©μλλ₯Ό μ ννλ κ², κ·Έκ²μ΄ λ°λ‘ βμ€μ©μ£Όμ κ°λ°μβλ‘μ μ°λ¦¬κ° κ°μ ΈμΌ ν νλκ° μλκΉ μκ°ν©λλ€.
λ¨μν ν
μ€νΈλ₯Ό μ°λ νμλ₯Ό λμ΄, μμ€ν
μ μνλ₯Ό ꡬ쑰μ μΌλ‘ κ΄μΈ‘νκ³ λΆμνλ λꡬλ‘μ consoleμ λ°λΌλ΄ 보μΈμ. μ¬λ¬λΆμ μ½μμ°½μ΄ μμμ΄ μλ, λͺ
νν μ νΈ(Signal)λ‘ κ°λ μ°¨κΈΈ μμν©λλ€.