개발자로서 성장을 확인할 수 있는 척도는 무엇일까?
개발자로 성장하기 위해 1일 1 커밋 , 기술 블로그 활동을 하면서 해당 활동을 하면 분명
내가 남긴 기록을 통해 열심히 하고 있다는 것을 느낄 수 있지만
정말로 예전의 나보다 조금 더 좋은 개발자로 성장했는가?
단지 그냥 읽고 지나친 거에 불과하면서 나는 배웠어!라는 착각을 가지고 있지는 않을까?
이 두 가지의 생각은 항상 머릿속에 존재하는 것 같다.
해당 생각에 대해서 큰 비용이 들지 않고 쉽게 점검할 수 있는 방법은 제가 생각하기엔
본인이 진행한 작은 프로젝트라도 한 번쯤은 되돌아보는 것이 가장 큰 도움이 된다고 생각합니다!
따라서 이번 본문에서는 왜 그렇게 생각하는지 말해보고자 합니다.
성장하기 위해서는 토이 프로젝트를 (많이) 경험해보는 것이다!?
빠르게 성장하기 위해 대부분 조언으로 해주는 말은 다음과 같은 말을 제일 많이 들은 것 같다.
자신의 서비스를 만들어 봐라! 만들면서 배워라!
나는 해당 조언에 대해서 90% 동의한다. 하지만! 앞서 조언에 추가적으로 다음과 같은 말도 같이 해주었으면 좋겠다.
이전에 진행했던 토이 프로젝트를 되돌아보자.
우리(?)의 GitHub 에는 잠들어 있는 저장소들이 많이 있습니다.
하나의 프로젝트를 완성하고 대부분 되돌아보지 않습니다! (저만 그런 거 아니죠!!?)
이러한 프로젝트들은 당시에는 리펙토링, Test Code 작성 및 알고 있는 지식을 모두 동원하거나 새로운 기술을 적용해본 최선을 다한 프로젝트입니다.
그렇다면 해당 프로젝트는 완벽한 프로젝트인가요?
완벽한 프로젝트는 없다.
놀랍게도 3개월 전 진행했던 프로젝트를 다시 열어보면
누가 이렇게 코드를 작성했을까?라는
생각과 이해할 수 없는 코드들이 저를 반겨줍니다.
프로젝트가 끝난 뒤 열심히 공부했다면 분명 예전의 나보다 성장했기 때문에 고쳐야 할 부분이 눈에 보이게 됩니다.
아니면 다른 프로젝트를 진행해보면서 적용했던 기술을 오래된 프로젝트에 적용시켜보는 것도 좋을 것 같습니다.
저는 고쳐야 할 부분이 안 보이는데요..?
끝났던 프로젝트를 다시 고쳐보는 것은 처음 한다면 힘들고 막막할 수 있습니다.
저 또한 똑같았습니다.
처음부터 나는 이 프로젝트를 다 뜯어 고칠꺼야! 라는 생각은 오히려
선뜻 고쳐나가기 어려우며 다시 새로운 프로젝트를 만들어서 처음부터 서비스를 만드는 자기 자신을 볼 수 있습니다.
따라서 작은 단위의 메서드 안에 있는 로직 한 줄이라도 줄여 나가다 보면 변경해야 할 부분이 계속해서 눈에 보이게 됩니다.
제가 처음 시작했던 방법은 다음과 같습니다.(본인에게 맞는 방법을 찾아보는 것도 좋아요~)
public ResponseEntity<Object> createMemberShip(MemberShipForm form) {
Member member = memberRepository.findByPhone(form.getPhone());
// TODO
// [refactor] 1. 회원이 존재하는지 ? 2. 존재하는데 이미 회원권이 존재하는 회원인지 ?
// 문제점 1. 모든 메세지 처리가 ApiResponseMessage 통해 처리되고 있음
// 문제점 2. 반환 모델이 존재하지않음(DTO)
// 해결방안
// 반환 DTO 생성 및 GlobalExceptionController 통한 에러관리
if (member == null) {
return ApiResponseMessage.error(form.getPhone(), MemberController.NOT_FOUND_MEMBER);
} else if (member.isMemberShip()) {
return ApiResponseMessage.error("alreadyMemberShip", MemberController.ALREADY_MEMBERSHIP);
}
//TODO [refactor] 위에 존재하고 있는 예외가 다 통과한다면 회원권이 생성되어 등록된다.
saveMemberShip(member, form.getPoint());
return ApiResponseMessage.success("회원권이 생성되었습니다.");
}
다음과 같이 하나의 메서드가 하는 역할을 파악하여 작성한 후
제가 생각했던 문제점들을 리스트로 작성하고 해결방안을 가볍게 적어보는 과정을 가졌습니다.
이렇게 진행하게 된다면 앞으로 당장 해야 할 일이 보이기 때문에 큰 부담감을 가지지 않을 수 있었습니다.
여기서 중요한 점은 이러한 과정 전에 반드시 동작을 보장한다는 테스트 코드가 이전에 작성이 되어있어야 합니다.
테스트 코드가 있어야 변경에 두려움이 없습니다.(리펙토링 후 작동을 하지 않으면 문제를 금방 찾을 수 있기 때문에..)
이러한 행동이 도움이 될까요?
저도 아직 취업을 안 해서 확답은 드릴 수 없지만 실제로 현업에서 계속해서 신규 기능만 찍어내는 일만 하지 않다는 것은 자신 있게 말할 수 있을 것 같습니다.
기존에 있던 코드를 이용해서 약간의 기능 확장을 진행을 하거나 유지보수를 위해서 코드를 다듬는 일도 존재하기 때문입니다.
오래전 내가 짠 코드도 완벽히 이해하지 못하는데 과연 이러한 연습 없이
다른 사람이 작성한 코드를 리펙토링 하거나 신규 기능을 기존 서비스에 붙일 수 있을까요?
또한 프로젝트를 변경 전과 후를 비교해보면 성취감도 같이 얻을 수 있어서 좋은 것 같습니다.
아래는 리팩토링 과정을 정리한 글입니다.
https://k3068.tistory.com/99?category=873366
결론
문뜩 성장에 대한 의심이 들 때 본인이 진행했던 프로젝트를 되돌아보면서 과거의 나와 얼마나
다른 생각을 가지고 있는지 확인해 본다면 본인이 얼마나 성장했는지 어느 정도는 알 수 있을 것 같습니다.
또한 리펙토링 과정에 고민과 여러가지 시도를 같이함으로써 한 번 더 성장할 수 있는 기회도 있으니
한 번쯤은 해볼 만하지 않을까요?