팀 내에서 진행한 리팩터링 2판 스터디 후기입니다.

스터디 책 선정 이유

먼저 팀장님의 추천으로 선정하게 됐습니다. 추천한 이유를 생각해 보면 단순히 리팩터링을 잘하자는 이유인가 싶었지만 스터디가 끝난 후에 돌이켜보면 읽기 좋은 코드의 best practice를 익혀 팀 내 전반적인 코드 퀄리티의 상향 평준화와 팀 내 코드 컨벤션 구축을 위한 목적이었다고 생각이 듭니다.

인상 깊었던 내용

책을 읽으며 평소 생각하지 못했던 부분들에 대해 정리해 보려 합니다.

책 후반부의 예제 코드보단 전체적인 내용을 담고 있는 2,3,4 장에 한해서 정리해 봤습니다.

1. 리팩터링이 성능 향상과 꼭 비례하지는 않는다.

책에서 리팩터링의 목적을 코드를 이해하고 수정하기 쉽게 만드는 것으로 정의하고 있습니다. 성능 관련해서는 성능 최적화로 따로 구분을 하고 있는데요, 때문에 리팩터링은 성능이 좋아질 수도, 나빠질 수도 있다고 말합니다. 평소에 리팩터링은 읽기 좋은 코드 + 성능 최적화까지라고 생각했는데 책에선 따로 구분을 하고 있었네요. 하지만 보통 동시에 하게 되지 않을까.. 생각했습니다.

2. 관리자의 관점에서 본 리팩터링

미래를 위해 리팩터링 하는 시간은 있어야 한다 생각합니다. (책에선 기간을 정하지 않고 수시로 하라 하지만 현실은 여러 제약이 있네요..) 하지만 이건 개발자의 입장이고, 관리자의 입장에서 리팩터링에 대해 이해를 할 수 있을까라는 주제입니다. 분기, 연 단위로 일정을 계획하는 관리자의 입장에서 리팩터링 기간에 대해 어떻게 생각하고 있는지에 대해 다시 생각해 봤습니다.

3. 주석을 의미 있는 함수로

팀 내에선 복잡한 내부 로직을 가지고 있는 부분에 대해서 주석을 통해 동료 개발자(혹은 자신)에게 간략하게 설명을 하는 주석을 남기고 있습니다. 책에선 이러한 주석의 내용을 바탕으로 이를 설명할 수 있는 이름으로 리팩터링하는 기법을 소개합니다. 실제로 코드에 주석이 남겨진 곳들을 확인해 보면, 더 나은 방식으로 이름을 바꿀 수 있거나, 내부 로직들을 더 쪼개서 개선할 수 있는 있었습니다.

4. 테스트 코드의 중요성

TDD의 장점에 대해 많은 개발자들이 버그 발견과 함께 리팩터링 과정에서 테스트를 모두 통과했다는 심리적 안정감 을 통해 편리함을 느낀다고 공유합니다. 이 책 역시 이 부분에 대해서 중요하게 다루고 있는데요, 실제 책의 모든 예제 코드 리팩터링 과정의 끝에서 테스트 코드의 통과를 확인하고 있어 중요성을 다시 한번 느꼈습니다.

스터디 총평

좋은 코드의 best practice

훌룡한 개발자들의 코드들을 읽고 분석할 수 있었습니다. 리팩터링 과정들을 조각내어 설명하면서 과정의 순서대로 생각의 흐름을 읽고 분석할 수 있어 좋았습니다.

팀 내 코드 컨벤션

팀 스터디로 진행하다 보니 책의 내용들을 다 같이 공유할 수 있었습니다. 이런 과정을 통해 PR 리뷰를 할 때도 모두가 리팩터링 기법의 컨텍스트를 공유할 수 있어 암묵적인 코드 컨벤션이 생긴 것 같았습니다.

배운 리팩터링 기법을 적용할 수 있는 기회

현재 Vue/Nuxt로 작성된 코드들을 React/Next기반으로 마이그레이션 작업을 하고 있습니다. 아무리 처음에 잘 짠 코드라도 프레임워크, 기획, 여러 조건이 바뀌면서 수정할 곳이 생길 수 있다고 생각합니다. 이런 상황 속에 이전 코드를 그대로 가져오기보단, 책에서 소개하는 리팩터링 기법들을 이용해 개선하면서 이전보다는 코드 퀄리티 더 향상시킬 수 있었다고 생각합니다.

테스트 커버리지에 대한 아쉬움

아쉽게도 테스트 코드가 촘촘히 작성되어 있진 않습니다. 때문에 이전과 같은 동작을 하는지는 오로지 개발자가 수동으로 체크를 해야 했다는 점, 시간과 정확도 측면에서 아쉬웠습니다. 테스트 코드에 대해 필요성을 더욱 느낄 수 있지 않았나 생각이 듭니다.

짧은 책 리뷰

  1. class 문법을 기반으로 설명합니다. 이 부분에 대해서 React 함수 컴포넌트를 많이 사용해 책이 안와닿는 개발자들도 있는것 같지만 개인적으로 도움이 많이 됐습니다. (객체 평생 안쓸꺼 아니니깐..)
  2. 예제를 위한 살짝 억지스러운 코드가 보이지만 충분히 이해할 수 있는 예제들입니다.
  3. 상황에 따라 상호전환 가능한 예제가 많아 어떤 경우에 어떤 기법을 사용해야 하는지 배울 수 있었습니다.
  4. 예제 코드들이 조각조각 나눠져 있어 리팩터링 과정을 정리해둔 오픈소스들과 함께 보면 코드를 이해하는데 도움이 됐습니다.