언니가 기획자에서 개발자로 커리어 전환을 시작했다.
그래서 공부를 하는 중인데 자꾸만 기본적인 로직의 흐름과 오류들을 물어서 디버깅을 해보라고 했다.
생각해보니 나도 학원에 다닐 때는 디버깅이라는 걸 전혀 몰랐고 실무에서 진짜 필요로 하는 건 디버깅 능력이라는 생각이 들어 다시 잘하는 법을 찾아보려 블로깅을 하게 됐다.
Debugging 디버깅
그래서 디버깅이란 프로그램 개발 단계 중에 발생하는 시스템의 논리적인 오류나 비정상적 연산(버그)을 찾아내고 그 원인을 밝히고 수정하는 작업 과정을 말한다.
디버깅 능력은 기능 단위의 코드를 단계별로 실행하며 코드를 파악하고 버그를 잘 찾을 수 있는 능력으로 본다.
디버깅 과정
okky에 디버깅에 관련된 유명한 글이 있어서 이를 정리해보겠다.
여기서 바람직한 디버깅의 과정으로는 다음을 제시한다.
1. 재현 가능성 확보
디버깅 과정에서는 로직을 단계적으로 실행하다보니 어느 부분에서 문제가 발생하는지 찾아야 한다.
그러나 어쩌다 한번 발생하는 문제도 있을 것이다. 그런 문제를 반복적으로 재현해낼 수 있는지 확인해야 한다.
2. 단서의 확보
문제가 발생하면 프로그램에서 주는 그 이유가 있을 것이다. 그 단서를 수집한다.
로그, 콘솔 등을 확인한다.
3. 단서의 분석
확보한 단서를 분석해 문제의 원인을 1차적으로 찾는 단계이다.
예외 클래스를 파악하자.
4. 가설의 수립
어떤 문제가 발생했는지 알았다면 이 문제가 왜 일어났는지 경우의 수를 정리하자.
5. 가설의 검증
문제가 일어난 이유에 대해 검증을 한다.
6. 반복
그냥 무작정 특정 로직에서 문제가 발생했다?
계속 실행 계속 실행 콘솔에 찍힌 로그 복사해 구글에 붙여넣기~ 가 아니라
문제를 분석하고 가설을 세우고 해결하는 과정이 필요하다.
단순히 디버깅을 통해 문제만을 해결하는 것도 맞지만
그 과정을 통해 배워가는 게 있어야 한다. 특히나 나 같은 주니어들에게 꼭 필요하다.
또한 개발을 처음 시작했거나 기존 레거시 코드를 보고 파악하고 활용해야하는 초보 개발자들에게도 디버깅은 중요하다.
실제로 나도 스프링 시큐리티를 공부할때 여기 저기서 샘플 코드를 찾아와 붙여넣고 디버깅해보며 흐름을 파악하고 그걸 또 나만의 코드로 바꿔가며 이해했다.
그래서 툴마다의 디버깅 방법을 정리해봤다.
디버깅의 용어나 과정은 툴마다 크게 다르지 않다.
- Break Point : 중단점, 프로그램 실행이 잠시 중단되었으면 하는 포인트, 이 지점에 도착했을때의 변수의 값이나 오류 발생을 확인하기 위해 지정
- Step Over : 중단된 곳부터 그 함수의 끝까지 라인바이 라인으로 로직을 따라감
- Step Into : 함수의 내부로 까지 들어가 라인바이 라인으로 로직을 따라감
- Step Out : 함수를 끝까지 실행시키고 호출시킨 곳으로 돌아감
- Resume : 다음 중단점으로 넘어갈 때까지 실행
이 용어의 차이는 밑에서 설명해보겠다.
일단 main 함수안에서 진행되는 아주 간단한 코드를 작성했다.
이름을 매개변수로 받아 hello + 이름을 반환해 print 해주는 로직이다.
Intellij 디버깅 방법
intellij 에서는 따로 설정해줄 필요 없이 중단점을 지정하고 디버깅 모드로 실행하면 된다.
중단점을 지정하는 법은 해당 라인을 클릭하면 되고, 해제하는 법 역시도 해당 지점을 클릭하면 된다.
디버깅은 벌레 모양의 아이콘을 누르면 시작 된다.
디버깅이 시작되며 프로그램도 시작되었다. main함수가 호출되고 이후 내가 설정한 중단점에 걸렸다.
debug view 를 통해 name 에 "mee"라는 값이 들어간 걸 확인할 수 있다.
Step Into vs Step Over
둘의 차이를 알아보겠다.
중단점을 위와 같이 두개를 걸고 step into를 해본다.
hello 함수 안으로까지 들어가 라인바이 라인을 따라간다.
이번에는 step over로 진행한다.
hello 함수의 라인바이 라인은 스킵하고 바로 그 다음 라인으로 간다.
여기서 ▶️ 이렇게 생긴 아이콘이 resume이다
이 아이콘을 누르면 첫번째 중단점에서 바로 다음 중단점으로 넘어간다.
지금까지 썼던 툴 중에 intellij 가 디버깅하기 제일 좋았는데 그 이유는 해당 변수에 뭐가 들어가는지 바로 한 눈에 보기 쉽기 때문이다.
Eclipse 디버깅 방법
실제 자바+스프링을 처음 배울때 많이 쓰는 툴인 이클립스의 디버깅 방법도 비슷하다.
잘못 캡쳐해서 크기가 좀 작은데 보면 같은 코드다
중단점을 클릭해 설정해준다.
디버깅은 intellij 와 같이 벌레 모양의 아이콘을 누르면 시작 된다.
중단점이 걸린걸 볼 수 있다.
이클립스에서는 변수를 옆에 창에 두고 볼 수 있다.
step into 를 눌러 hello 함수로 들어갔다.
이렇게 로직이 끝나서 console창에 hello+name이 뜬 것까지 확인했다.
디버깅 활용
반복문을 이해할 때 디버깅을 쓰면 로직 이해가 쉽다.
하나하나 step over를 하며 변수에 뭐가 들어가는지 확인을 하고 콘솔창에 어떻게 찍히는지 차근차근 확인할 수 있다.
또 controller에 들어오는 파라미터를 확인하고 싶을때도 유용하다.
pathvariable로 name을 받는 get 메소드를 디버깅해봤다.
요청과 함께 name이 들어오고 그 name이 뭔지 바로 확인할 수 있다.
step over을 통해 바로 다음 라인으로 가 응답에 넣어줄 res를 확인해준다.
그 값과 실제 응답이 같은지 확인한다.
이렇게 디버깅은 단순히 오류를 파악하기 위해도 사용하지만 코드를 좀 더 분석적으로 볼 수 있게 도와주기에 잘 익혀두면 아주 좋다.
참고
https://okky.kr/articles/272227
댓글