이 글에서는 "Clean Code"를 읽으며 얻은 생각들을 기록하려 한다. 나중에 성장한 후, 지금의 나를 되돌아보는 데 도움이 될 수 있도록, 현재의 생각을 솔직하게 적어볼 예정이다.
최근 내가 개발 중인 JPA의 N+1 문제를 감지하는 라이브러리 jpa-nplus1-detector가 테스트용 어노테이션을 지원하면서 2.0 버전에 진입했다. 버전 2.0으로 업데이트되면서 코드에 많은 변화가 생겼고, 프로젝트의 규모도 이전보다 커졌다. 이런 상황에서 코드의 복잡도가 점점 늘어나면서, 클린 코드를 유지하는 것이 점점 더 힘들어졌다.
특히 여러 기능이 추가되면서 코드의 일관성을 유지하기 어렵다는 생각이 자주 들었다. 기능은 계속 추가되는데, 코드 구조가 점점 엉성해지는 기분이었다. 그래서 "Clean Code"를 읽기로 결심했다. 코드를 깔끔하게 유지하기 위한 다양한 팁들을 배워서 내가 만들고 있는 라이브러리에도 적용해 보고 싶었기 때문이다. javadoc 작성법이나 변수, 메서드, 클래스 이름을 잘 짓는 법 등 사소해 보이지만 실질적으로 코드의 유지보수성에 큰 영향을 미치는 부분에서 많은 도움을 받고 싶었다.
"Clean Code"를 읽으면서 솔직히 느낀 건, 이 책이 클린 코드를 작성하는 마법 같은 비법을 알려주는 책은 아니라는 것이다. 책에서도 이를 강조하고 있다. 클린 코드를 작성하는 건 결국 꾸준한 연습과 경험을 통해 얻어야 하는 것이라는 메시지가 중심이었다. 그러니까 한 번 책을 읽는다고 해서 갑자기 내 코드가 완벽하게 깔끔해지지는 않는다는 이야기다.
책을 읽으면서 "객체지향의 사실과 오해", "오브젝트"와 비슷한 느낌을 많이 받았다. 이 책들처럼 "Clean Code"도 독자가 스스로 생각하고 문제를 풀어나가길 바라는 책이다. 책에서 말하는 원칙들은 하나같이 실무에서 유용하지만, 그만큼 뻔한 내용일 수도 있다. 그럼에도 불구하고, 이 책이 주는 가장 중요한 메시지는 유지보수의 중요성이었다. 코드가 복잡해지고 규모가 커질수록, 유지보수가 쉬운 코드의 필요성이 절실해진다.
이번에 내가 제작한 라이브러리에서도 이런 고민이 있었다. 코드가 늘어나면서, "이 정도까지 깔끔하게 코드를 작성해야 하나?"라는 의문이 들 때가 많았다. 하지만 "Clean Code"에서는 여러 실무 경험을 바탕으로 코드를 깔끔하게 유지하지 않았을 때 발생하는 유지보수 문제들을 실감나게 설명해주고 있다. 이 설명들이 특히 도움이 되었다. 코드의 가독성, 일관성, 유지보수를 위한 노력이 얼마나 중요한지 다시금 깨닫게 되었고, 라이브러리 제작 과정에서도 그 부분에 더 신경 쓰게 되었다.
책을 읽으며 특히 기억에 남는 부분은 옮긴이가 한 이야기다. "이 책을 읽고 난 후 한동안 프로그램을 짜기 싫어졌다"는 말이 있는데, 그 이유가 자신이 그동안 만들어온 나쁜 코드들이 떠올라 스스로가 이유 없이 미워졌다는 것이었다. 이 말이 너무 공감되었다. 나 또한 새로운 것을 배울 때마다, 지금까지 내가 작성한 코드들에 대한 후회와 자책이 몰려온다. 그러다 보니 자꾸만 과거 프로젝트에서 잘못된 부분들이 떠오르고, 그것들을 바로 고치러 갔다. 나만 그런 것이 아니라는 사실을 알게 되니 조금 위안이 되었다.
또 한 가지 기억에 남는 점은 저자가 자신의 흑역사라고 할 수 있는 나쁜 코드를 거리낌 없이 공개하며 "이런 코드를 짜지 말라"고 경고하는 부분이다. 이런 솔직한 태도 덕분에 책을 읽는 내내 지루하지 않고 재미있게 읽을 수 있었다.
하지만 솔직히 말하면, "Clean Code"를 읽으면서 당장 코드적으로 크게 깨달음을 얻은 부분은 많지 않았다. javadoc 작성 같은 기본적인 부분을 제외하고는 대부분 내가 이미 알고 있거나 당연하게 여겼던 내용들이었다. 또한 "객체지향의 사실과 오해", "오브젝트"와 비슷한 내용이 많아서 새로운 충격을 받기보다는 복습하는 느낌이었다. 그리고 이 책이 꽤 오래된 책이라서, 일부 내용은 시대에 맞지 않는 부분도 있었다. 그런 내용들은 그냥 흘려듣고 넘어가게 되었다. 그래서인지 책을 다 읽고 나서 "와, 정말 대단한 책이다"라는 느낌은 없었다.
돌이켜보면, 내가 처음 "객체지향의 사실과 오해"를 읽었을 때가 가장 인상 깊었던 것 같다. 그때는 새로운 개념을 배우는 설렘도 있었고, 그 책이 주는 메시지들이 크게 다가왔기 때문이다. 이번에 "Clean Code"를 읽으면서는 그런 감정을 크게 느끼지 못한 것 같다. 그래서 앞으로 당분간은 코딩 관련 책을 잠시 멈추고, 실전에서 코딩하는 경험을 더 쌓아볼 생각이다. 지금의 내 수준에서는 책을 계속 읽어봐야 깨닫는 것이 별로 없다는 생각이 들었다. 마치 도파민 중독처럼 계속해서 새로운 지식만을 추구하고 있는 것 같은 느낌이었다. 그래서 1년 정도 시간을 두고, 그때쯤 다시 이런 책들을 읽어보려고 한다.
"Clean Code"를 읽으면서 깨달은 것은, 더 중요한 것은 단순히 책을 읽는 것만으로 끝나는 것이 아니라, 실제로 내가 작성하는 코드에 이를 적용하려고 노력해야 한다는 점이다. 실무에서 나의 코드가 얼마나 깔끔한지, 얼마나 유지보수하기 좋은지를 끊임없이 고민해야 한다. 그렇지 않으면 아무리 좋은 책을 읽어도 내 실력은 발전하지 않는다.