회고

개발자로서 성장을 확인할 수 있는 척도는 무엇일까?

jay Joon 2021. 6. 13. 00:36

개발자로 성장하기 위해 1일 1 커밋 , 기술 블로그 활동을 하면서 해당 활동을 하면 분명

내가 남긴 기록을 통해 열심히 하고 있다는 것을 느낄 수 있지만

 

정말로 예전의 나보다 조금 더 좋은 개발자로 성장했는가?

단지 그냥 읽고 지나친 거에 불과하면서 나는 배웠어!라는 착각을 가지고 있지는 않을까?

 

이 두 가지의 생각은 항상 머릿속에 존재하는 것 같다.

 

해당 생각에 대해서 큰 비용이 들지 않고 쉽게 점검할 수 있는 방법은 제가 생각하기엔

본인이 진행한 작은 프로젝트라도 한 번쯤은 되돌아보는 것이 가장 큰 도움이 된다고 생각합니다!

 

따라서 이번 본문에서는 왜 그렇게 생각하는지 말해보고자 합니다.


성장하기 위해서는 토이 프로젝트를 (많이) 경험해보는 것이다!?

빠르게 성장하기 위해 대부분 조언으로 해주는 말은 다음과 같은 말을 제일 많이 들은 것 같다.

자신의 서비스를 만들어 봐라! 만들면서 배워라!

나는 해당 조언에 대해서 90% 동의한다. 하지만! 앞서 조언에 추가적으로 다음과 같은 말도 같이 해주었으면 좋겠다.

이전에 진행했던 토이 프로젝트를 되돌아보자.

 

우리(?)의 GitHub 에는 잠들어 있는 저장소들이 많이 있습니다.

짥고 순간 불타올랐던 activity 그래프..

하나의 프로젝트를 완성하고 대부분 되돌아보지 않습니다! (저만 그런 거 아니죠!!?)

 

 

프로젝트를 진행했던 순간만큼은 진심이였음 !!

이러한 프로젝트들은 당시에는 리펙토링, 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 

 

토이프로젝트 다시한번 살펴보기!

이전 글과 이어지는 내용입니다. 안 읽어도 본문의 내용과는 상관없지만! 궁금하시면 읽어주세요! https://k3068.tistory.com/97 성장을 확인할 수 있는 척도는 무엇일까? 개발자로 성장하기 위해 1일 1

k3068.tistory.com

 

결론

문뜩 성장에 대한 의심이 들 때 본인이 진행했던 프로젝트를 되돌아보면서 과거의 나와 얼마나

다른 생각을 가지고 있는지 확인해 본다면 본인이 얼마나 성장했는지 어느 정도는 알 수 있을 것 같습니다.

 

또한 리펙토링 과정에 고민과 여러가지 시도를 같이함으로써 한 번 더 성장할 수 있는 기회도 있으니

한 번쯤은 해볼 만하지 않을까요?