개발자
백엔드 개발자를 꿈꾸는 취업준비생입니다. 지금까지 팀 프로젝트, 개인 프로젝트 등 여러가지 사이드 프로젝트들을 진행해왔습니다. 이 과정에서 새로 배운 기술들, 제대로 활용하지 못했던 문법 등 다양한 것들을 공부하면서 이전에 작성했던 코드들을 바라볼 때 어떤 시야로 바라보시는지 궁금합니다. 예를 들어 먼저 진행했던 a 프로젝트에서 api 응답 방식을 단순히 ResponseEntity를 활용해왔다고 가정하고, 이후 진행한 b 프로젝트에서 응답 형식을 커스텀한 DTO 클래스를 활용했다고 가정했을 때 b프로젝트에 활용한 방식이 더 낫다고 느껴진다면 a프로젝트에 해당 부분을 리팩토링 하는 것이 좋은 공부 방법인가요? 새로운 것을 계속 공부하고 프로젝트마다 다른 방식을 적용하게 되면서 이전 코드를 바라보면 “왜 이렇게 짰지?”라는 생각도 들고 뭔가 이걸 개선했던 이유들을 되돌아보며 얻는 것들이 있다고 생각해서 개인 공부 목적의 프로젝트 외에 진행했던 사이드 프로젝트에 관한 리팩토링은 크게 진행하지 않고있습니다. 다른 개발자분들은 어떤 기준으로 리팩토링을 진행하고 어떤 공부방법을 선호하시는지 궁금하여 질문 남깁니다!
답변 3
인기 답변
제목이랑 본문이 다른 질문을 하는 거 같아서 먼저 어디까지 하는게 좋냐는 제목의 질문을 볼게요. 답을 하기 전에 양극단을 한 번 보죠. 극단적으로 리팩터링에만 몰두하고 기능추가를 안하면 엔지니어 이력서에는 리팩터링만 남고 회사가 망해서 월급이 끊길겁니다. 반대로 기능추가에만 몰두한다면 나중에 스파게티가 된 코드베이스 때문에 기능 추가가 매우 더뎌 엔지니어 이력서에 밀도가 낮아지고 역시 회사가 망해서 월급이 끊기겠죠. 저 양극단 사이에서 줄타기를 할 수 있도록 평소에 리팩터링을 위한 여유를 확보하는 것이 가장 적용하기 쉬운 전략이라고 생각합니다. 개발 소요시간을 측정할 때, 항상 리팩터링을 포함해서 측정하세요. 그런 여유도 주지 않을 만큼 회사가 빡빡한 일정을 요구하면 이직도 옵션에 넣으세요. 위의 두번째 극단의 예시처럼 자살골하는 상황이 올 수도 있으니까요. 그리고 다음은 실질적인 리팩터링 전략에 관한 제 생각입니다. 리팩터링은 미래에 발생할 소프트웨어의 유지보수 비용을 낮추는 목적을 가진 엔지니어링 활동입니다. 우리는 엔지니어로서 소프트웨어가 요구사항을 반영하도록 만들어야 합니다. 요구사항이 변했거나 혹은 소프트웨어가 요구사항을 오반영한 상황(버그)가 발견되면 소프트웨어를 수정해야 하는데, 위에서 말한 유지보수의 비용은 이 때 소프트웨어의 어느 부분이 변경이 필요한지, 어떻게 변경을 해야 하는지 알아내고 변경을 했을 때 의도대로 변경이 일어났는지 검증을 하는 전 과정을 포함합니다 이런 유지보수의 비용을 이루는 요소들의 관점에서 리팩터링 전략을 찾아내는 것이 적합하다고 생각해요. 유지보수의 비용의 뿌리는 결국 요구사항과 소프웨어어가 어떻게 변했느냐이기 때문에 프로젝트 A에 반영한 리팩토링 전략이 프로젝트 B에도 효과적일 것이냐는 정답이 없습니다. 그 리팩토링 전략이 왜 프로젝트 A에 효과적이었는지, 그리고 프로젝트 B도 그 전략이 효과적일만한 특성을 갖고 있는지 이해가 필요합니다. 그런 숨겨진 특성들을 찾아내고 유형화하는 것이 엔지니어에게 큰 자산이 될 거라 생각합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
지금 가입하면 모든 질문의 답변을 볼 수 있어요!