클라이언트/ 서버/ 엔지니어 " 게임 개발자"를 향한 매일의 공부일지

디버깅이 필요한 이유 1 - 버그와 예외 본문

웹 · 앱 개발/디버깅

디버깅이 필요한 이유 1 - 버그와 예외

huenuri 2024. 7. 30. 10:38

어제는 별로 많은 공부를 하지 못했다. 디버깅 입문을 1주차까지는 학습하고 싶었으나 밤이 되니 정신이 몽롱해졌다. 난 밤보다 새벽에 하는 공부가 더 잘되는 것 같았다. 어제 취업특강 강사님께서 강의하시며 이런 말씀을 하셨던 것이 기억이 난다.
AI/IT 분야에 취업할 때 전공자든 비전공자든 특별히 차이점을 느끼지 못했다면서 비전공자도 이런 교육기관을 통해 6개월 이상 정말 열심히 노력하면 좋은 회사에 들어가는 것들을 많이 보았다고 하셨다. 실무적으로도 이둘의 별 차이는 없었으며 자신의 노력 하에 따라 얼마든지 극복이 가능하다는 거였다.

 

그리고 회사에 들어가서의 1~2년이 그 사람의 성장을 가늠한다고 하셨다. 주말을 반납하고 매일 새벽이 늦도록 공부를 하는 사람과 그렇지 않은 사람은 실력에서 굉장한 차이가 있다면서..
난 앞으로 6개월 동안 동안 아니 1~2년 그 이상도 주말은 없다 생각하고 진짜 열심히 공부해보기로 다짐했다. 그리고 대기업보다는 스타트업에 들어가고 싶어졌다. 그곳에서는 직접 모든 걸 다 경험해보며 자기 성장면에서는 좋은 기회가 될 것 같았다.

오늘은 5시에 일어나서 공부를 시작해본다. 이제 잠도 좀 깼으니 디버깅의 첫번째 주 학습을 본격적으로 이어가보려고 한다.


 

실습 1 - 디버깅 문제 예시

이번 수업은 실습이 제일 먼저 있어 문제부터 풀고 이론 수업에 들어가볼 것이다.

 

 

원래 코드는 이렇게 된다.

 

 

 

틀린 코드

 

 

 

 

자바랑 파이썬을 헤깔려서 발생한 문제이다. 조금 전에 n을 input으로 받기에 왜 이렇게 되어있지 하면서 지웠는데 그건 맞는 코드였다. 다시 풀어보기로 했다.

 

 

 

다시 풀어보기

5번 이상의 도전 끝에 다음과 같은 코드를 작성했다.

 

 

하지만 오답이라고 나온다. 공백을 넣은 적이 없는데 공백 처리가 된다. 이 문제는 이론 수업을 듣고 다시 한번 풀어봐야겠다.

 

 

물어보며 해결하기

이 문제는 미션이 아니니 참고 영상이 있어야 하는데 이상하게도 PDF 파일이 보였다. 아마도 이것도 버그의 일종 같았다. 디버깅을 가르치는 수업에서 디버깅이라니 뭔가 의미가 있어 보였다.

헬퍼에게 물어보니 다음과 같은 답을 내놓았다.

 

 

문자열과 정수를 함께 출력할 때는 문자열과 정수를 결합하여 하나의 결과로 만들어주어야 한다는 것이다. + 연산자 기호를 썼더니 버그가 날 때가 많아 콤마로 찍어주었더니 이것도 안되는 모양이다.

 

 

이번에는 정답으로 나왔다. 문제를 이렇게 풀면 되는구나 하는 생각이 들었다. 이전의 미션 문제들도 안 풀렸던 것을 이렇게 물어보며 풀어봐야겠다~


 

이론 1 - 버그와 예외

 

모든 버그들을 다루지는 않고 프로그램을 시작하며 발생하는 경우들을 주로 다루게 된다.

 

 

 

예외는 버그는 아니다.

 

 

예시 1

더이상 파일을 불러올 수 없고 사용자는 계속 로딩 화면이 뜨는 것을 보다 화면을 끄게 된다.

 

 

 

예시 2

개발자는 이러한 섬세한 부분까지도 생각하며 개발해야 한다.


 

디버깅이란?

원인을 찾지 못하면 버그를 해결할 수 없다.

 

 

 

버그가 많은 빈도로 발생하지 않는다면 기업에서는 이 버그를 해결하지 않을 경우도 많다. 에러 메시지가 무엇인지 알면 이 버그가 어떤 상황에서 왜 발생하는지 알 수 있다.

 

 

 

예를들어, 이모티콘을 입력하면 앱이 꺼지는 확률이 30%라면 왜 이러한 버그가 발생하는지 생각해본다. 어떤 원인에서 발생하는지 알면 이 중간의 코드를 바꾸어줌으로 해결할 수 있다.

 

 

 

 

이 버그가 댓글 창에서는 버그가 없는지 확인해볼 수 있다. 가장 좋은 방법은 테스트 코드를 짜는 것이다. 우리가 설계한 코드가 변경되더라도 설계할 때 동작했던 기능들이 제대로 작동하는지 확인할 수 있다.


 

 

이론 3 - 디버깅이 중요한 이유

 

아무리 유용한 기능을 포함하고 있더라도 사용자는 버그가 많다면 불편함을 느낀다.

 

 

 

내가 짠 코드는 왠만하면 버그가 있고, 이건 피할 수 없는 운명이다. 그렇기 때문에 버그를 찾아내고 해결하는 능력이 매우 중요하다.

 

 

 

좋은 프로그래머는 빠르게 문제의 원인을 찾아 그 원인을 제거하고, 앞으로 이러한 문제가 발생하지 않도록 하는 사람이다.


 

1주차 학습을 마치고

1주차 학습은 비교적 짧게 구성되어 있다. 이제 버그도 어떻게 풀 수 있을지 해결해보았다. 어제 풀어보았던 OT 문제도 혹시 다시 풀면 어제는 발견하지 못했던 오류를 찾을 수 있을 것 같다.
다시 열어서 풀어봐야겠다. 그리고 어제는 2번이나 글이 날라가서 정말 화가 난 마음에 대충 마무리했던 학습일지를 보완해볼 수 있겠지.

개발자는 버그를 만나는 건 당연한 일이고 이를 즐길 수 있어야 한다. 버그를 만났을 때 어제처럼 당황하거나 글이 날라가는 것도 하나의 버그의 일종이다. 이럴 때도 인내심을 갖고 다시 학습에 열중하되, 다시는 같은 일이 벌어지지 않도록 실수를 방지하는 일이 더욱 중요하다.
버그는 꼭 프로그래머의 역할이라고만 할 수는 없다. 우리가 일상생활에서 만나는 수많은 실수들을 줄이고 반복하지 않을 수 있다면, 우리의 삶은 더욱 나아질 것이고 성장하게 될 것이다.

다음 포스트에서는 2주차 학습을 진행해보겠다.