올해 상반기는 저에게 있어 많은 경험을 하고 많은 것을 배울 수 있는 시간이었습니다. 나름 여러 프로젝트를 돌아다니면서 경험을 많이 했고 업무를 잘 정리해서 한다고 생각했던 저에게는 반성의 시간과 함께 이번 상반기에서 저에게 가장 큰 임팩트를 주었던 키워드를 정해서 까먹지 않고 하반기 프로젝트에서는 더욱더 좋은 결과를 낼 수 있도록 작성해보려고 합니다.
리팩터링
사실 리팩터링이라는 말을 들을 때 뭔가 엄청난 걸 해야 할 것 같고 소스코드를 뭔가 엄청 줄이거나 무언가 결과물을 만들어야 한다는 생각이 들다 보니 리팩터링은 '시간을 내서 해야 한다'라는 인식이 저 스스로에게도 있었습니다. 그러다 보니 프로젝트를 진행하면서 바쁘다는 핑계와 함께 나중에, 나중에 라는 말로 소스코드에 기능이 더해지지만 리팩터링에는 크게 신경을 쓰지 않았습니다.
다른 프로젝트에서도 느낀 내용이지만 이번에 더욱더 임팩트가 컸던 이유는 이번 프로젝트는 시간을 조금 더 내서라도 테스트 코드 작성과 함께 엄청난 내용이 아니더라도 자잘한 리팩터링을 같이 겸해서 프로젝트를 진행했고 저에게는 아주 좋은 경험이었기에 더욱더 임팩트가 있었습니다.
저에게 리팩터링은 이제 단순히 '시간을 내서 해야 한다'라는 큰 업무가 아닌 대출 상환과 같은 필수적인 업무의 일부분이 되었습니다. 우리가 무언가 금액이 큰 물건을 사거나 집을 구매할 때 대출을 이용하고 대출에 대한 원금과 이자를 한 번에 상환할 수도 혹은 매달 상환할 수 있습니다. 저는 제가 작업한 코드에도 이 대출과 같은 원리가 있다고 생각합니다.
개발자가 작업한 작업물은 소스가 생성되는 순간부터 관리의 대상이 됩니다. 크던 작던 서비스가 고도화되면서 업무가 변경되거나 혹은 제 소스로 인해서 다른 업무에 영향이 갈 수 있는 거죠. 저는 소스코드가 생성되는 순간을 대출을 받았다고 생각합니다. 언젠가는 갚아야 하는 대출금이 바로 리팩터링인 것이죠.
하루 짧게는 10분, 길게는 하루를 잡아서 업무를 진행하면서 상승된 업무 지식과 조금 더 지나고 나서야 느낀 제가 작성한 소스코드의 문제점을 발견하고 어떻게 변경할지 고민을 해서 리팩터링을 자주 진행하려고 합니다. 실제로 상반기 프로젝트를 리팩터링, 테스트 코드와 함께 주기적으로 관리하니 뒤늦게 변경되는 요구사항에 유연하게 대처할 수 있고 무엇보다 제가 작성한 소스코드에 대한 만족도가 높아지는 것이 매우 만족스러운 경험이었습니다.
앞으로는 시간을 내서 해야 하는 업무가 아닌 내가 필수로 가져가야 하는 업무 그리고 내가 만든 결과물에 대한 최소한의 유지보수라고 생각하면서 진행할 수 있었으면 좋겠네요.
이슈 카드 관리
제가 업무를 하면서 어려웠던 점이 이슈 카드를 관리하는 업무가 저에게 있어서는 조금 어려웠습니다. 어떻게 관리하면 잘 관리할 수 있고 왜 나는 이슈카드 관리를 잘하지 못할까?라는 생각이 많았는데 이번 프로젝트에 같이 참여하게 된 분에게 답변을 듣고서는 반성하는 시간을 갖게 되었습니다.
답은 매우 간단했는데 '이슈 카드 관리를 하는 시간을 할당하지 않는다'가 답변이었습니다. 뒤돌아보니 소스코드는 잘 작성하기 위해서 자료를 찾아보고 업무를 진행하기 전 업무에 대한 내용을 찾아보는 등 내가 소스코드를 잘 작성하기 위한 시간을 할당했지만 정작 협업을 위해서 작성하는 이슈 카드 관리에 대해서는 잘할 수 있도록 고민하지 않았고 시간을 할애하지 않고서 매번 어렵게 느꼈습니다.
아쉽게도 이번 프로젝트에서 이슈 트래커 자체를 잘 활용하지는 않았지만 궁금한 내용들이 해결되었고 이슈 트래커에 이런저런 시도를 통해서 많은 경험을 했습니다. 비록 상반기 프로젝트에서 저의 이슈 카드 관리는 매우 미흡했지만 이번에 경험한 내용을 토대로 다음 하반기 프로젝트에서는 상반기에 비해서 더욱 더 협업하기 편하고 업무의 우선순위와 조금 더 효율적으로 일할 수 있도록 이슈 카드 관리에 시간을 할애해보려고 합니다.
테스트 코드
테스트 코드에 대해서는 자료도 찾아보고 강의도 찾아봤지만 그래서 이거 어떻게 작성해야하지? 라는 의문점을 갖고 있었고 어렵다 혹은 나중에 라는 핑계를 대면서 한 번도 실무에서는 적용해보지 못했었습니다. 아직 우리 프로젝트에서는 필요하지 않아, 이게 뭐 그렇게 대단한 거야?라는 마음으로 핑계 삼아 지내왔던 것 같네요.
이번 프로젝트의 저의 개인적인 목표 중 하나는 잘 작성하지 못하더라도 테스트 코드를 경험해보자가 있었습니다. 우리는 테스트 코드를 작성하지 않아 라는 말을 핑계 삼아 작성하지 않았고 이렇게 지내다보면 앞으로 저에게 테스트 코드라는 것은 개념적으로만 존재할까 봐 대단하지 않지만 간단한 내용이라도 테스트 코드를 작성해봤습니다.
물론 처음 한 달은 쉽지 않은 기간이었습니다. 테스트 코드를 쉽게 작성할 수 있는 코딩 스타일도 아니었고 무엇보다 레퍼런스가 없기에 이렇게 작성하는 것이 맞나? 라는 의문점을 가지고 테스트 코드를 작성했습니다. 물론 지금은 능숙하지는 않지만 이전보다 테스트 코드를 더 쉽게 작성할 수 있고 무엇을 테스트 코드로 작성해야 하는지 테스트 코드가 저에게 어떤 이점을 줄 수 있는지 이제는 감이 좀 잡히고 있습니다.
테스트 코드를 통해서 변경된 요구사항에 대해서 비교적 빠르게 대응할 수 있었고 제가 작성한 소스코드에 대한 퀄리티 체크와 최소한의 보장?을 받는 다는 느낌이 들어서 안심되면서 뭔가 든든한 보험을 들어놓은 기분이었습니다.
이번 프로젝트에서 반성한 부분은 말로만 리팩토링, 테스트 코드 그리고 우리 회사는 너무 효율적이지 않아 라는 불평불만을 하면서 정작 그런 불만을 바꾸기 위해 시간과 노력을 쓰지 않았다는 것입니다. 그리고 경험하지 못한 채 사용하지 않는 것과 경험해보고 판단해서 사용하지 않는 것은 큰 차이가 있습니다. 앞으로의 프로젝트에서는 불만을 이야기하는 것뿐 아니라 개선하는 데 있어서 더욱더 노력을 기울여야겠다는 생각이 많이 드는 프로젝트였습니다.