코드를 디버깅할 때 puts 문을 여기저기 넣어보고 '언젠가 원하는 값이 출력되겠지' 하며 기다려 본 적이 있으신가요? 코드 중간에 puts "잘 작동한다!"라고 넣고 터미널에서 실행했는데 아무것도 출력되지 않아 당황한 경험이 있을 겁니다.
루비 개발자들이 쓰는 강력한 디버깅 도구에 대해 들어는 봤지만 막상 써보기엔 겁이 나서, 그냥 코드를 텍스트 에디터에 마구 던져 넣고 무엇이라도 걸리기를 바라는 '스파게티 방식'의 디버깅에 의존하고 있다면 주목하세요. 문제는 이런 방식으로는 해결책을 보장받을 수 없다는 점입니다.
디버깅은 개발자 인생 내내 계속하게 되는 작업입니다. 주니어 개발자만 하는 일이 아니라 시니어도 매일 하는 일이죠. 따라서 버그를 찾는 데 도움이 되는 도구를 빨리 익힐수록 장기적으로 큰 이득을 얻게 됩니다.
그렇다면 어떤 도구들이 있을까요? 선택지는 다양하지만, 오늘은 모든 루비스트가 반드시 알아야 할 훌륭한 도구 중 하나인 Pry를 자세히 파헤쳐 보겠습니다. Pry의 작동 방식과 그중요성을 함께 살펴봅시다.
Pry란 무엇인가?
Pry는 프로그램을 잠시 멈춰(freeze) 세워두고, 코드 내부로 직접 들어가 현재 무슨 일이 벌어지고 있는지, 무엇을 고쳐야 하는지 확인할 수 있게 해주는 도구입니다. 처음에는 다소 복잡해 보일 수 있지만, 같은 주니어 루비 개발자로서 말씀드리면 — 사용할수록 점점 쉬워지고, 어느 순간부터는 Pry 없이는 코딩을 할 수 없게 됩니다.
Pry는 스테로이드를 맞은 IRB
아마 대부분 IRB(Interactive Ruby Shell)를 이미 편하게 사용하고 있을 겁니다. IRB에서는 코드를 놀이터처럼 자유롭게 실행해 보며 무엇이 작동하고 무엇이 작동하지 않는지 확인할 수 있고, 디버깅 용도로도 유용하죠.
Pry도 비슷한 방식으로 작동하지만, 그 위에 더 많은 기능이 얹혀 있습니다. IRB와 Pry 모두 REPL(Read, Evaluate, Print, Loop) 명령 구조를 사용합니다. 하지만 Pry는 디버깅 시 한 단계 더 나아갈 수 있게 해줍니다. 예를 들어 Pry는 구문 강조(syntax highlighting) 기능을 제공해서, 코드가 실행될 때 어떤 일이 일어날지 파악하기 쉽습니다. 덕분에 실수를 발견하기 쉬워지고, 코드 수정도 한결 수월해집니다.
예제 코드

디버깅에 대한 한마디
앞서 언급했지만 다시 강조합니다 — 디버깅은 모든 프로그래머가 커리어 전반에 걸쳐 수행하는 작업입니다. 이런 도구를 배우는 데 '주니어'라는 단어는 전혀 어울리지 않습니다. 배울수록, 그리고 빨리 배울수록 더 나은 프로그래머가 됩니다.
Pry로 중단점(breakpoint) 설정하기
이제 Pry의 가장 강력한 기능인 중단점(breakpoint) 설정을 살펴볼 차례입니다. 코드가 예상대로 작동하지 않아 골치 아픈 상황을 상상해 보세요. 우리 모두 겪어본 적 있죠?
이럴 때 문제가 되는 코드 부분에 중단점을 설정하면, 해당 지점에서 프로그램이 멈춘 상태로 Pry 세션에 진입하게 됩니다. 예제로 설명하는 것이 가장 이해하기 쉽겠죠.
사용자 정보가 제대로 설정되었는지 확인하고 싶다고 가정해 봅시다. 먼저 문제가 되는 코드 줄 바로 위에 binding.pry를 추가하고 코드를 실행합니다.

그다음 이 코드를 실행시키는 페이지에 접속해 봅니다. 로컬에서 Rails 서버를 돌리고 있다면 localhost:3000/users/1에 접속하면 됩니다.
그러면 IRB와 비슷한 콘솔 화면에 진입하게 되고, 그 안에서 코드를 자유롭게 테스트하며 현재 상황을 확인할 수 있습니다.

이 시점에서 @user가 올바른 사용자 ID로 설정되었는지 확인할 수 있습니다.

사용자가 로그인되어 있는지도 확인할 수 있습니다.

아무 일도 일어나지 않는다면?
때로는 중단점을 설정하고 코드를 실행했는데, Pry 세션에 진입하지 못하고 아무 일도 일어나지 않는 경우가 있습니다. 답답하게 느껴질 수 있지만, 사실 이것도 중요한 단서입니다. 코드가 그 지점까지 도달하지 못했다는 뜻이거든요.
이럴 때는 코드의 더 앞부분에 새로운 중단점을 설정하고 다시 실행해 보세요. 번거로워 보이지만, 실제로는 코드 흐름이 어디까지 정상적으로 진행되는지 좁혀 가는 귀중한 정보를 얻는 과정입니다.
언제 도움을 요청해야 할까?
주니어 루비스트라면 가끔 더 경험 많은 개발자에게 도움을 요청해야 할 때가 있습니다. 문제는 언제까지 스스로 디버깅을 계속하고, 언제 도움을 청할지 판단하는 것이죠.
먼저 문제를 재현(reproduce)해 보는 것이 좋습니다. Pry로 중단점을 설정하고 코드를 깊이 파고들어 보세요. 만약 20~30분이 지나도 해결책에 한 걸음도 가까워지지 않았다면, 그때가 도움을 요청할 적절한 시점입니다.
지금 바로 Pry를 시작해 보세요
디버깅 무기고에 Pry를 추가할 준비가 되었다면 몇 가지만 하면 됩니다. 먼저 gem을 설치해야 합니다. Gemfile에 추가하고 bundle install을 실행하는 방법이 있습니다.
gem 'pry'
또는 직접 설치할 수도 있습니다.
gem install pry
그리고 코드가 Pry를 인식하도록 파일 상단에 다음 줄을 추가해야 합니다.
require 'pry'
이것으로 끝입니다! 이제 Pry와 함께 즐거운 디버깅을 시작해 보세요!