지난주 금요일 새벽부터 시작된 옆집 강아지들의 짖음 + 하울링 때문에 정말 잠을 못자고 있다.. 잠깐 강아지들이 짖지 않으면, 모기가 날 괴롭히고..(이 추운날씨에 모기도 신기하다) 이렇게 나는 매일 하루 평균 4시간씩 잠든 것 같다.. 물론 낮잠을 한시간정도씩 자기도 했지만, 해야할 것들에 대한 생각때문에 제대로 잠도 못잤던 나날들이었다.
그리고 오늘, 여전히 옆집 개들은 새벽에 짖어댔다. 예민함과 화가 머리 끝까지 나버린 나는 잠은 개나줘버리고.. 그렇게됬다.. 그리고 나는 갑자기 장염(?)이 생겼다. 최근에 장이 많이 안좋았던 것 같은데, 아무래도 잘 못쉬어서 몸이 회복하지 못한 것 같다.
그래서 오늘은 진짜 힘없이 책보고 공부하고 정리하고 침대에서 쉬기를 반복했던 것 같다.
독서: 리팩터링 에 대하여
오늘은 디자인 패턴의 아름다움의 5장. 리팩터링 기법 을 독서했다. 사실 리팩터링은 내가 책을 통해 처음으로 접한 개발 관련 주제이기도 하다. 당시에는 리팩터링에 대하여, 이것이 정말 중요하구나! 라고만 생각을 했었는데 지금 다시보니 리팩터링은 역시 정말 중요하다.
- 리팩터링은 코드의 품질을 보장하는 효과적인 수단으로 코드 품질 저하를 효과적으로 방지할수 있다.
- 리팩터링은 코드에 대한 이해를 쉽게 하기 위해 소프트웨어의 내부 구조를 개선하는 것으로, 소프트웨어의 외부 동작을 변경하지 않고 수정 비용을 줄이는 것을 의미한다.
이에 대해서는 리팩터링에 대해 들어본 사람들이라면 이미 알고 있는 내용들일 것이라고 생각한다. 그리고 나는 이에 추가적으로 이번 독서를 통해 나의 잘못 생각한 부분을 알 수 있었다.
- 프로젝트의 유지 보수 비용이 새로운 코드를 작성하는 것보다 많이 든다면, 해당 코드는 리팩터링하기에 늦은 코드이다.
- 리팩터링은 스프트웨어 엔지니어의 코딩 능력을 측정하는 중요한 수단이 될 수 있다.
- 리팩터링의 종류에는 대규모/소규모 의 리팩터링이 존재한다.
이번 독서를 통해 새롭게 알게된 부분들이 어찌보면 당연한 부분일 수 있다. 하지만 분명한 것은 나는 저 생각들을 하지 못했다는 것이다.
리팩터링에 대한 나의 강박(?)
나는 지난 10개월간 레거시 프로젝트를 담당하면서, 코드를 분석하고 이해하는 것이 내 주된 일과였다. 이 과정에서 나는 코드를 리팩터링할 때, 가능하다면 기존의 코드를 이해하고, 이를 개선하고자 노력했다. 당시에는 구조와 동작이 거의 똑같은 코드가 너무나도 많았기 때문에, 나는 이를 피하고 싶었다.
그런데 지금 생각해보니, 어쩌면 내가 문제라 생각한 코드는 리팩터링하기엔 늦었으며, 이로인해 새로운 코드를 작성한게 아닐까? 하는 생각이 들었다.(그래도 비슷한코드를 작성해놓고 비슷한 코드를 계속해서 남겨둔 것은 잘못됬다고 생각한다.) 다른 사람이 보기에는 내가 객기처럼 보이지 않았을까? 하는 생각도 해보는 오늘이다.
그리고 나는 대규모의 리팩터링은 리팩터링이 아닌 리뉴얼이라고 생각했다. 그런데 지금 생각해보니, 결국 리뉴얼도 리팩터링의 일부분인듯하다.(왜 나는 이렇게 생각을 못했지?) 이전까지는 대규모의 리팩터링에 대하여 기존의 코드를 다 포기하고 새로만든다 라고 생각해서 이런듯 하다. 이제는 이 생각을 고쳐먹어야겠다.
그리고 가장 중요한 것인, 리팩터링이 엔지니어의 능력을 측정하는 도구가 될 수 있다는 부분이다. 이전 프로젝트에서 깨닮은 가장 큰 것이 있다면, 개발에서 중요한 능력은 유지보수 업무라고 생각을 했다. 장애에 대응하고, 코드 논리의 오류를 바로 잡는 것이 굉장히 중요하다는 생각을 하게 되었다. 그런데 당시에는 유지보수 == 리팩터링 이라는 생각을 하지 못한 것 같다. 유지보수업무는 굉장히 중요해! 라고 생각했지만, 리팩터링은 수단일뿐이야! 이런 느낌이었다.
이는 아마도 내가 생각하는 리팩터링으로 하지 않았기 때문인 것 같다.
- 내가 생각하는 리팩터링은 단위테스트를 작성해야 했지만, 레거시 프로젝트에서는 단위 테스트가 없었다.
- 내가 겪은 장애와 기능의 오류는 대부분 코드 논리의 오류 혹은 불필요한 코드 때문이었기에 단위테스트 자체의 필요성을 느끼지 못했다.(목표 기능에 대한 단위테스트 작성 또한 어려웠다..)
나는 단위테스트가 없는 리팩터링은 리팩터링이라는 생각을 하지 않았다. 근데 이 이유를 명확하게 모르겠다. 제대로된 리팩터링이 아니라고 생각해서인가..? 싶다. 이에 대한 생각을 하다보니 자연스럽게 단위테스트에 대해서도 생각하게 되었는데, 책은 참 똑똑(?)한게 리팩터링에 대한 이야기 후에 바로 단위테스트를 위치시켰다.
(단위) 테스트에 대한 중요성은 이미 뼈저리게 느끼고 있기 때문에 어서 이를 정리해야하는데, 아직 정리를 다 못했다.. 원래같아선 오늘 다했어야하는데... 내일은 배안아프겠지.. 내일 어떻게는 정리해봐야겠다.
인터뷰 회고
오늘은 침대에서 쉬면서, 지난 최종 인터뷰가 잘 되지 않됬을 경우를 감안하여 미래의 면접을 준비했다.(사실 준비라하기도 좀 뭐하지만.. 어떻게 면접 때 이야기해야겠다. 이런 것을 생각했다.) 그러면서 자연스럽게 지난 인터뷰 때 내가 대답한 답변들이 조금씩 떠올랐는데, 아.. 내가 왜이렇게 대답했을까.. 하는 부분들이 꽤나 있었다.
지난 인터뷰에 대한 내 생각은 재밌었다. 약간의 아쉬움은 존재하지만 후회는 없다. 라고 생각하나, 오늘 생각해보니 조금의 아쉬움이 더 추가가되는 듯하다. 개인적으로 내 대답들에 대해서 배경설명이 좀더 있었다면 좋지 않았을까? 하는 생각이 드는 것 같다.
항상 왜? 라는 것을 생각하는 나인데, 지난 인터뷰의 일부분에서 왜? 라는 부분이 많이 생략 되어 아쉬운 설명이 된 것 같다. 오늘 생각을 하면서 다음 면접 기회가 찾아온다면, 내가 왜 선택하고, 결정했는지를 잘 전달 할 수 있도록 좀 더 답변을 다듬어 설명할 수 있도록 준비해야겠다.
이런 생각 후 지쳐 잠들었어 그런지.. 내가 정말 가고싶은 회사라서 그런지... 아직 나오지 않은 결과에 대한 이메일을 받은 꿈을 꿨다.(근데 결과는 열어보지 못하고 꿈에서 꺴다!!!) 아무래도 내가 지난 인터뷰에 대해서 아쉬움이 많이 남았음에도, 나도 모르게 기대를 하게 되는 것 같다.
최근동안 계속해서 기술면접 준비를 한다고 정신이 팔려 TIL을 소홀히 했던 것 같다. 매일 책을 읽었지만, 읽기만하게된 요즘이었다. 책의 내용을 되새긴다던지, 곰곰히 곱씹어보는 시간이 많이 부족했다. 그리고 부족한 프로젝트에 대한 개선도 하지 못했다. 이 문제를 인식했으니, 이제 부터는 개선해보고자한다.
이 결심을 어제 공원을 뛰면서 생각했는데, 생각지 못한 장염 때문에 하루가 딜레이 됬지만, 더 열심히 잘 하기 위한 도움 닫기라 생각하며... 화이팅!!!
'회고 > TIL' 카테고리의 다른 글
논블록킹 I/O 에 관하여, 단위 테스트를 설계하는 방법 (0) | 2023.10.18 |
---|---|
독서: 단위테스트, DDD (0) | 2023.10.17 |
3시간의 짧고 재밌었던, 최종 인터뷰 후기 (0) | 2023.10.13 |
기술 인터뷰 후기 (0) | 2023.10.06 |
독서: 추상클래스와 인터페이스, JPA 공부, Product 작업내용 반영, 면접 준비 (0) | 2023.09.22 |