건강한 코드에 대한 개인적인 의견
- Jquery로 운영되었던 기존 서비스를 React 기반으로 개편하는 업무를 맡았습니다. 4개월간의 적잖은 개발 기간으로 Lagacy 코드를 분석하고 이를 재개발하면서 많은 부분을 느낄수 있었습니다. 5년간의 History가 담긴 Legacy코드를 해석하고 이를 재개발 하는데에 많은 난관들이 있었지만 주위 동료들의 도움으로 프로젝트를 완성할 수 있었음으로 동료분들에게 감사함을 표합니다.
- 본 리뉴얼 작업을 시작하기전
나 자신과의 다짐과 굳은 결심을 하였습니다.
이해하고 코드를 작성하자.
기존 코드를 ctrl c+v식으로 작업을 진행할 수도 있었지만, 기술 부채, 추후 발생할 수 있는 이슈의 투자 시간과 미해결 이슈, 기존 프로젝트의 문제 악순환 반복, 리뉴얼의 목적에 어긋난 방법인 것 같아 위 결심을 토대로 작업을 진행하였습니다.
회사 코드를 보면서 “왜?, 왜지?”라는 질문을 항상 내뱉었습니다. 난독화 수준의 핵심 코드, 죽은 코드와 중복 코드, 의미를 할수 없는 코드들과 상수 등… 예외처리와 분기처리로 이뤄진 코드를 React 프로젝트에 어떻게 담아 놓을지 개선방법을 생각해야 했습니다. 여러가지 시행착오를 통해 몇가지의 방법을 채택하여 작업을 진행하였습니다.
방법 1 (기능의 이해)
- step 1 레거시 코드 참고 전에 사용자 입장에서 서비스의 기능을 이용해보자
- step 2 프로젝트에서 운영하는 문서(기획, 개발)를 참고하여 유효성 체크 및 예외처리 파악
- step 3 Lagacy 코드와 비교 후 자체 코드 평가를 하는 순서로 작업을 진행하였습니다.
방법 2 (Help Me)
프로젝트 크루(기존 작업자, 기획자, PM)들의 도움이 필요합니다. (히스토리)
코드중 서비스 로직이 강한 코드나 배경지식이 필요한 코드들은 신규 작업자가 이해하는데엔 무리가 있습니다. 기획서를 참고하고 개발 문서를 검색하면 답을 찾을 순 있지만 시간 소모가 너무 컸습니다. 이를 해소하기 위해 다른 문서를 이용해야 합니다. 살아 숨쉬는 문서들이 회사에 존재합니다. 그분들이 떠나시기전 도움을 요청하고 커피를 제공하면서 걸어다니는 문서를 이용해야 합니다.
방법 3 (Cooperation)
작업자간 실시간 업무 내용 공유가 필요합니다. 작업자간 공통적으로 사용되는 헬퍼, 유틸함수를 제공하여 작업자간 업무 시너지를 냅니다.
해당 방법을 통해 리모트 미팅 서비스 리뉴얼 작업이 완료가 되었으며, QA를 진행하고 있습니다. 발견되는 이슈량은 상당하였고 이는 당연한 결과이자 거처야될 큰 산이며 적잖은 시간만 투자하면 쉽게 해결 되리라고 장담합니다.
특정 함수의 git 히스토리를 훓어보았습니다. 여러 작업자를 거쳐가고 코드의 양 많아졌습니다. 함수의 첫 시작은 맑디 맑은 순수 함수였지만, 5년후의 결과물은 부수 효과(SideEffect)를 일으키는 함수로 변화되었습니다. 작업간 기능 요구사항이나 변수명이 명확하지 않는다면 초기 작업자의 의도와 다르게 함수는 변질되고 오염된다는 걸 볼 수 있었습니다.
이를 통해 코드리뷰의 필요성을 느끼며, 프로젝트의 건강한 코드를 유지하도록 작업자간 협력과 긴장감 그리고 책임감이 필요하다는걸 느낄수 있었습니다.
- 건강한 코드란?
작업자 어느 누구라도 코드의 흐름과 문맥을 쉽게 파악이 가능하고, 코드리뷰가 가능할만한 부끄러움이 없는 코드.
끝으로 건강한 코드를 위해 지속적인 코드 관리와 프로젝트의 이해, 코드리뷰가 필요하다는걸 몸소 느꼈습니다.