📘 10.2.2 브라우저 디버거 - 코드를 천천히 들여다보는 강력한 확대경
안녕하세요, 여러분. 지난 시간에 우리는 console.log
라는 코딩의 가장 친한 친구를 만났습니다. 마치 요리하면서 맛을 보는 것처럼, 코드의 상태를 중간중간 확인하는 방법을 배웠지요.
이번 시간에는 한 단계 더 발전된 도구를 소개해드릴 겁니다. 바로 브라우저 디버거예요. 이것은 console.log
보다 훨씬 더 자세하고 정밀하게 코드를 관찰할 수 있는 강력한 확대경과 같은 도구랍니다.
🧠 새로운 단어들과 친해지기
브라우저 디버거와 관련된 중요한 단어들을 쉽게 풀어서 설명해드리겠습니다.
단어 | 쉬운 설명 |
---|---|
브라우저 디버거 | 웹 브라우저에 숨어있는 코드 검사 도구입니다. |
소스 탭 (Sources Tab) | 브라우저에서 자바스크립트 코드를 보고 조절할 수 있는 화면입니다. |
단계별 실행 | 코드를 한 줄씩 천천히 실행하면서 상태를 확인하는 것입니다. |
브라우저 디버거는 "debug(문제 해결하다)"와 "er(~하는 도구)"의 합성어로, 코드의 문제를 해결하는 도구라는 뜻입니다. 마치 의사가 환자를 진료할 때 사용하는 정밀한 의료 장비처럼, 코드를 세밀하게 검사할 수 있는 전문 도구예요.
✨ 브라우저 디버거가 뭔지 알아보기
브라우저 디버거는 프로그래머에게 시간을 조절할 수 있는 특별한 능력을 부여해줍니다. 평소에는 너무 빠르게 지나가서 놓치기 쉬운 코드의 실행 과정을 천천히, 심지어는 멈춰가면서 관찰할 수 있어요.
console.log
가 사진을 찍어서 특정 순간의 모습을 보여준다면, 브라우저 디버거는 동영상을 촬영하면서 재생 속도까지 조절할 수 있는 것과 같습니다.
가장 놀라운 점은 변수 값의 실시간 변화를 눈으로 직접 확인할 수 있다는 것입니다. 변수가 어떤 값에서 시작해서 어떻게 변해가는지를 생생하게 볼 수 있어요.
따뜻한 비유: 영화를 슬로우 모션으로 감상하기
브라우저 디버거를 더 쉽게 이해하기 위해 '영화를 슬로우 모션으로 감상하는 것'에 비유해볼게요.
축구 경기를 생각해보세요. 선수가 화려한 골을 넣는 장면이 있을 때, 실시간으로 보면 너무 빨라서 정확히 어떻게 골을 넣었는지 알기 어려워요. 하지만 슬로우 모션 재생을 하면 어떨까요?
선수가 공을 받는 순간, 발의 각도를 조절하는 모습, 공이 날아가는 궤적, 골키퍼의 반응까지 모든 것을 세밀하게 관찰할 수 있어요. 원하는 지점에서 일시정지를 해서 "바로 이 순간에 무슨 일이 일어났는지" 자세히 분석할 수도 있지요.
브라우저 디버거도 바로 이런 슬로우 모션 재생과 같습니다. 평소에는 너무 빠르게 실행되어 놓치기 쉬운 코드의 모든 과정을 천천히 관찰할 수 있어요.
🎯 왜 브라우저 디버거를 사용할까요?
console.log
만으로도 많은 문제를 해결할 수 있지만, 더 복잡한 상황에서는 브라우저 디버거가 필요한 이유들이 있어요.
첫째로 전체적인 코드 흐름 파악이 가능합니다. 함수가 어떤 순서로 호출되는지, 조건문이 어떤 경로로 실행되는지를 시각적으로 명확하게 확인할 수 있어요.
둘째로 변수 값의 연속적인 변화 추적이 가능합니다. console.log
는 특정 순간의 값만 보여주지만, 디버거는 변수가 어떻게 변해가는 과정을 연속적으로 관찰할 수 있어요.
셋째로 복잡한 정보의 내부 구조 탐색이 쉬워집니다. 복잡한 정보 구조를 가진 변수들의 내부를 층층이 들여다보면서 원하는 정보를 찾을 수 있어요.
마지막으로 정밀한 문제 진단이 가능합니다. 어떤 부분에서 예상과 다른 일이 벌어지는지를 정확히 찾아내어, 문제의 근본 원인을 파악할 수 있어요.
⚙️ 브라우저 디버거 사용법 배우기
브라우저 디버거를 사용하는 기본적인 방법들을 단계별로 알아보겠습니다.
1단계: 개발자 도구 열기
- F12 키를 누르거나
- 마우스 우클릭 → "검사" 선택하거나
- 브라우저 메뉴 → "도구" → "개발자 도구" 선택
2단계: 소스 탭 찾기
- 개발자 도구 상단의 탭들 중에서 "Sources"(소스) 클릭
- 왼쪽 패널에서 자신이 작성한 파일 찾기
- 오른쪽에 코드가 표시되는 것 확인
3단계: 코드 관찰하기
- 궁금한 변수에 마우스 올려서 현재 값 확인하기
- 오른쪽 패널에서 "Scope" 항목으로 모든 변수 보기
- 실행 조절 버튼들로 코드를 단계별로 실행하기
🧪 직접 해보면서 배우기
이제 실제 예시를 통해서 브라우저 디버거를 어떻게 사용하는지 알아보겠습니다.
🔹 첫 번째 예시: 간단한 함수에서 변수 값 확인하기
첫 번째 예시에서는 브라우저 디버거로 변수의 값을 확인하는 기본 방법을 알아보겠습니다.
// 두 친구의 나이를 비교하는 함수
function compareFriendsAge(friend1Name, friend1Age, friend2Name, friend2Age) {
let message = "";
if (friend1Age > friend2Age) {
message = friend1Name + "이(가) " + friend2Name + "보다 나이가 많아요.";
} else if (friend1Age < friend2Age) {
message = friend2Name + "이(가) " + friend1Name + "보다 나이가 많아요.";
} else {
message = "두 친구의 나이가 같아요!";
}
return message;
}
// 함수 테스트하기
let result = compareFriendsAge("민수", 12, "지연", 11);
console.log(result);
디버거 사용 방법: F12를 눌러 개발자 도구를 열고 Sources 탭으로 이동한 뒤, 함수 내부의 변수들(friend1Name
, friend1Age
, message
등)에 마우스를 올려서 각각의 값을 확인해보세요.
🔹 두 번째 예시: 반복문에서 변수의 변화 과정 관찰하기
두 번째 예시에서는 반복문 실행 과정에서 변수가 어떻게 변해가는지 디버거로 추적해보겠습니다.
// 좋아하는 과목들을 하나씩 출력하는 함수
function listFavoriteSubjects() {
let subjects = ["수학", "과학", "체육", "음악"];
let count = 0;
for (let i = 0; i < subjects.length; i++) {
count = count + 1;
let currentSubject = subjects[i];
console.log(count + "번째 좋아하는 과목: " + currentSubject);
}
console.log("총 " + count + "개의 과목을 좋아해요!");
}
listFavoriteSubjects();
디버거 활용 포인트: 반복문 안에서 i
, count
, currentSubject
변수들이 각 반복마다 어떻게 변하는지 실시간으로 관찰해보세요.
🔹 세 번째 예시: 복잡한 조건문의 실행 경로 추적하기
세 번째 예시에서는 여러 조건이 있는 복잡한 상황에서 디버거를 활용하는 방법을 알아보겠습니다.
// 시험 점수에 따라 등급을 정하는 함수
function getGrade(mathScore, englishScore) {
let average = (mathScore + englishScore) / 2;
let grade = "";
if (average >= 90) {
if (mathScore >= 85 && englishScore >= 85) {
grade = "A+";
} else {
grade = "A";
}
} else if (average >= 80) {
grade = "B";
} else if (average >= 70) {
grade = "C";
} else {
grade = "재시험이 필요해요";
}
return "평균: " + average + "점, 등급: " + grade;
}
// 여러 경우를 테스트하기
let student1 = getGrade(95, 92);
let student2 = getGrade(88, 95);
let student3 = getGrade(82, 78);
디버거 심화 활용: 각 테스트 케이스에서 average
값이 어떻게 계산되는지, 어떤 조건문 경로를 따라가는지를 단계별로 추적해보세요.
🧚♀️ 이야기로 다시 배우기: 과학자의 정밀한 실험 관찰
지금까지 배운 내용을 하나의 이야기로 다시 정리해볼까요?
여러분이 과학자가 되어 실험실에서 중요한 실험을 관찰하는 상황을 상상해보세요.
실험에서는 여러 가지 화학 물질들이 복잡하게 반응합니다. 과학자는 이 반응 과정을 정확히 이해하기 위해 고성능 현미경과 슬로우 모션 카메라를 사용해요.
일반적인 관찰로는 "뭔가 반응이 일어났다" 정도만 알 수 있지만, 정밀한 장비를 사용하면 어떤 순서로 반응이 일어나는지, 각 단계에서 물질의 상태가 어떻게 변하는지를 세밀하게 관찰할 수 있어요.
때로는 실험을 일시정지시켜서 "바로 이 순간에 무슨 일이 일어나고 있는지" 자세히 분석하기도 하지요.
브라우저 디버거도 바로 이런 과학자의 정밀한 실험 장비와 같습니다. 코드라는 실험에서 변수와 함수들이 어떻게 상호작용하는지를 현미경처럼 자세히 들여다보고, 슬로우 모션 카메라처럼 천천히 관찰할 수 있게 해주는 것이지요.
🔄 브라우저 디버거 활용하는 순서 정리하기
지금까지 학습한 브라우저 디버거의 활용 과정을 자연스럽게 정리해보겠습니다.
첫 번째 단계는 문제 상황 인식입니다. console.log
만으로는 해결하기 어려운 복잡한 문제를 발견하거나, 코드의 동작을 더 자세히 이해하고 싶을 때 디버거 사용을 결정하게 되지요.
두 번째로는 디버거 환경 설정 단계가 있습니다. F12로 개발자 도구를 열고 Sources 탭으로 이동한 뒤, 관찰하고 싶은 코드 파일을 찾아 엽니다.
세 번째는 단계별 실행 및 관찰 단계입니다. 실행 조절 버튼들을 사용해서 코드를 천천히 실행하면서, 각 변수의 값 변화를 실시간으로 확인해요.
마지막으로 문제 원인 발견 및 해결 단계에서는 관찰한 결과를 바탕으로 예상과 다른 부분을 찾아내고, 문제의 근본 원인을 파악한 뒤 적절한 해결책을 적용합니다.
🧠 자주 하는 실수와 주의할 점
브라우저 디버거를 사용할 때 초보자들이 자주 하는 실수들을 미리 알아두면 더 효과적으로 활용할 수 있어요.
❌ 실수 1: 디버거 기능을 모르고 console.log
만 고집하기
// 복잡한 상황인데도 console.log만 사용하려고 하는 경우
function complexCalculation(data) {
console.log("시작:", data);
let result = 0;
for (let i = 0; i < data.length; i++) {
console.log("i:", i, "data[i]:", data[i]);
result += data[i] * 2;
console.log("중간 결과:", result);
}
console.log("최종 결과:", result);
return result;
}
이런 접근 방식은 간단한 문제에서는 괜찮지만, 복잡한 로직에서는 오히려 혼란을 가중시킬 수 있어요. 브라우저 디버거를 사용하면 모든 변수의 값을 한눈에 보면서 코드를 단계별로 실행할 수 있어 훨씬 효율적입니다.
❌ 실수 2: 변수 값 확인을 제대로 하지 않고 넘어가기
// 디버거를 열었지만 변수 값을 확인하지 않는 경우
function checkNumber(num) {
let doubled = num * 2; // 여기서 num과 doubled 값을 확인해야 함
return doubled > 10;
}
브라우저 디버거의 가장 큰 장점은 변수 값을 실시간으로 확인할 수 있다는 것인데, 이를 제대로 활용하지 않으면 디버거를 사용하는 의미가 없어요.
✏️ 직접 해보기 - 연습이 필요한 순간
이제 브라우저 디버거를 실제로 사용해볼 수 있는 단계별 가이드를 제공해드리겠습니다.
시간이 흘러 여러분의 손끝에서 코드가 춤을 추기 시작합니다. 한 글자 한 글자 입력할 때마다 작은 기적이 일어나는 것을 느끼실 거예요. 그 기적을 직접 만들어보세요.
Ex1) 디버거를 열고 "안녕, 나는 ○○야!" 함수의 변수들을 확인해보자
// 자기소개를 하는 함수
function introduceMyself(name, age, hobby) {
let greeting = "안녕하세요!";
let introduction = "저는 " + name + "이고요,";
let ageInfo = "나이는 " + age + "살입니다.";
let hobbyInfo = "취미는 " + hobby + "예요!";
let fullMessage = greeting + " " + introduction + " " + ageInfo + " " + hobbyInfo;
return fullMessage;
}
// 함수를 실행해서 결과를 확인해요
let myIntroduction = introduceMyself("지우", 11, "그림그리기");
console.log(myIntroduction);
디버거 첫 경험 가이드:
- F12를 눌러 개발자 도구를 열어보세요
- "Sources" 탭을 클릭해보세요
- 각 변수(
greeting
,introduction
,ageInfo
등)에 마우스를 올려서 값을 확인해보세요
Ex2) 반복문에서 숫자가 어떻게 변하는지 관찰해보자
// 숫자를 하나씩 키우면서 제곱을 계산하는 함수
function watchNumbersGrow() {
console.log("🔢 숫자 관찰을 시작해요!");
for (let number = 1; number <= 4; number++) {
let squared = number * number;
let message = number + "의 제곱은 " + squared + "이에요!";
console.log("🔢 숫자가 커지고 있어요! " + message);
}
console.log("✨ 모든 숫자 관찰이 끝났어요!");
}
watchNumbersGrow();
반복문 변수 추적 가이드:
- 디버거에서 반복문 시작 부분을 찾아보세요
number
,squared
,message
변수들이 각 반복마다 어떻게 변하는지 확인해보세요- 단계별 실행 버튼을 사용해서 천천히 진행해보세요
Ex3) 조건문에서 어떤 길로 가는지 추적해보자
// 점수에 따라 칭찬을 해주는 함수
function giveCompliment(score) {
let compliment = "";
console.log("🚦 점수 확인 중: " + score + "점");
if (score >= 90) {
compliment = "🌟 대단해요! 정말 잘했어요!";
console.log("🚦 이 길로 가요! 최고 등급 경로");
} else if (score >= 70) {
compliment = "👍 좋아요! 노력이 보여요!";
console.log("🚦 이 길로 가요! 보통 등급 경로");
} else {
compliment = "💪 다음엔 더 잘할 수 있어요!";
console.log("🚦 이 길로 가요! 격려 경로");
}
return compliment;
}
// 여러 점수로 테스트해보기
let result1 = giveCompliment(95);
let result2 = giveCompliment(75);
let result3 = giveCompliment(65);
조건문 경로 추적 가이드:
- 각 테스트 케이스에서 어떤 조건문 경로를 따라가는지 관찰해보세요
score
값에 따라compliment
변수가 어떻게 달라지는지 확인해보세요- 콘솔 메시지와 함께 어떤 경로로 진행되는지 추적해보세요
🤔 조금 더 어려운 문제로 실력 확인하기
기본 연습을 마쳤다면, 이제 조금 더 깊이 있는 문제들을 통해서 브라우저 디버거에 대한 이해를 확인해보겠습니다.
Q1. 브라우저 디버거의 가장 큰 장점은 무엇일까요?
정답: 코드를 한 줄씩 천천히 실행하면서 변수 값의 실시간 변화를 관찰할 수 있다는 점입니다.
해설: console.log
는 특정 순간의 "사진"만 보여주지만, 디버거는 코드 실행 과정의 "동영상"을 슬로우 모션으로 재생할 수 있어요.
Q2. 언제 console.log
대신 브라우저 디버거를 사용하는 것이 좋을까요?
정답: 복잡한 반복문, 여러 함수가 연결된 코드, 복잡한 조건문이 있을 때 사용하면 좋습니다.
해설: 간단한 변수 값 확인은 console.log
로도 충분하지만, 코드의 흐름이 복잡하거나 여러 변수가 동시에 변화하는 상황에서는 디버거가 훨씬 효과적입니다.
🔄 9단원 복습 - this와 친해지기
잠깐! 이전에 배운 내용을 다시 한번 복습해볼까요? 9단원에서 배운 this
에 대해 간단한 문제로 기억을 되살려보겠습니다.
복습 문제 1: 객체에서 this가 가리키는 것 확인하기
// 동물원 동물 객체를 만들어보세요
let tiger = {
name: "호랑이",
sound: "어흥",
roar: function() {
console.log(this.name + "가 " + this.sound + " 소리를 내요!");
}
};
tiger.roar(); // 실행해보세요!
해답과 설명:
this.name
은tiger.name
인 "호랑이"를 가리켜요this.sound
는tiger.sound
인 "어흥"을 가리켜요- 객체의 메서드에서
this
는 그 객체 자신을 뜻해요 - 결과: "호랑이가 어흥 소리를 내요!"가 출력됩니다
복습 문제 2: 생성자 함수에서 this 사용하기
// 학생을 만드는 생성자 함수
function Student(name, grade) {
this.name = name;
this.grade = grade;
this.introduce = function() {
console.log("안녕하세요! 저는 " + this.name + "이고 " + this.grade + "학년입니다.");
};
}
let student1 = new Student("철수", 5);
let student2 = new Student("영희", 6);
student1.introduce();
student2.introduce();
해답과 설명:
new Student()
로 새 객체를 만들 때this
는 새로 만들어지는 객체를 가리켜요student1
에서this
는 철수 객체,student2
에서this
는 영희 객체를 가리켜요- 첫 번째 결과: "안녕하세요! 저는 철수이고 5학년입니다."
- 두 번째 결과: "안녕하세요! 저는 영희이고 6학년입니다."
지금까지 브라우저 디버거의 모든 특성과 활용법을 따뜻한 이야기와 함께 알아보았습니다. 브라우저 디버거는 여러분이 더 정교하고 안정적인 프로그램을 만들 수 있도록 도와주는 강력한 도구입니다. 마치 과학자의 정밀한 실험 장비처럼, 코드의 모든 비밀을 파헤쳐 여러분을 더 뛰어난 프로그래머로 성장시켜줄 거예요!
✅ 학습 완료 체크리스트
이번 시간에 배운 내용들을 모두 이해했는지 확인해보세요!
학습 내용 | 이해했나요? |
---|---|
브라우저 디버거 기본 개념 | ✅ |
기본 사용법과 문법 | ✅ |
주요 특징과 차이점 | ✅ |
자주 하는 실수들 | ✅ |
실전 예제 이해 | ✅ |
🎯 추가 연습 문제들
조금 더 연습하고 싶은 분들을 위한 추가 문제들입니다!
추가 문제 1. 브라우저 디버거로 변수 값을 확인해보세요.
function greetStudent(name, age) {
let message = "안녕하세요, " + name + "님!";
let info = "나이: " + age + "세";
console.log(message);
console.log(info);
}
// 테스트
greetStudent("철수", 10);
// 디버거 사용법: 함수 안에서 name, age, message, info 변수에 마우스 올려서 값 확인
추가 문제 2. 반복문에서 디버거로 변수 변화를 관찰해보세요.
function sumNumbers() {
let total = 0;
for (let i = 1; i <= 3; i++) {
total += i;
console.log("i:", i, "total:", total);
}
return total;
}
// 테스트
sumNumbers();
// 디버거 사용법: 반복문 안에서 i와 total 값이 어떻게 변하는지 관찰
추가 문제 3. 조건문에서 디버거로 실행 경로를 확인해보세요.
function checkScore(score) {
if (score >= 90) {
return "우수";
} else if (score >= 80) {
return "양호";
} else {
return "노력 필요";
}
}
// 테스트
checkScore(95);
checkScore(85);
checkScore(70);
// 디버거 사용법: 각 조건문에서 어떤 경로로 실행되는지 Step Over로 확인
추가 문제 4. 브라우저 디버거를 열기 위해 눌러야 하는 키는 무엇인가요?
답: F12 키를 누르면 브라우저 개발자 도구가 열리고, Sources 탭에서 디버거를 사용할 수 있습니다.
추가 문제 5. console.log와 비교했을 때 브라우저 디버거의 장점은 무엇인가요?
답: 코드를 한 줄씩 천천히 실행하면서 모든 변수의 값을 실시간으로 확인할 수 있고, 함수 호출 순서나 복잡한 로직의 흐름을 정확히 파악할 수 있습니다.
📂 마무리 정보
오늘 배운 10.2.2
내용이 여러분의 자바스크립트 지식에 잘 저장되었나요? 다음 시간에는 더 흥미로운 내용으로 만나요!
기억할 점: 오늘 배운 내용을 꼭 연습해보시고, 궁금한 점이 있으면 언제든 다시 돌아와서 읽어보세요.
무료 JavaScript 학습 플랫폼에서 단계별 학습과 실시간 코드 실행을 통해
더욱 효과적이고 재미있게 학습하실 수 있습니다.
'10. 오류와 친구하기 (에러 처리와 디버깅) > 10.2 디버깅 도구 사용하기' 카테고리의 다른 글
10.2.3 코드 여행길의 쉼터 만들기 - 중단점이라는 특별한 정거장 (0) | 2025.07.14 |
---|---|
10.2.1 `console.log` - 코딩의 가장 친한 친구 (0) | 2025.07.14 |