본문 바로가기
우아한테크캠프 Pro

우아한테크캠프 Pro 7주차 미션 후기

by 아토로 2021. 12. 28.

우아한테크캠프 Pro 7주 차 레거시 코드 리팩터링 미션을 진행한 내용과 후기를 정리해본다.

이번 미션의 목표

  • 레거시 프로젝트를 리팩터링하는 경험을 통해 서비스를 안정적으로 운영하면서 레거시 코드를 리팩터링 할 수 있는 역량 향상
  • 도메인 주도 설계 기반으로 개발하고 리팩터링 하는 경험

저장소 및 PR

내 코드 피드백

도메인 주도 설계를 할 때 가장 중요한 것은 유비쿼터스 언어를 통한 의사소통이다. 개발자, 비개발자가 서로 합의되어 이해할 수 있는 용어를 사용해야 하며, 이 용어들을 개발할 때 사용해야 의사소통에 어려움이 없다.

이번 미션에서 레거시 코드를 보고 요구사항을 정의해야 했는데, ID와 같은 개발적인 용어들의 사용이 많았던 것 같다. 유비쿼터스 언어를 항상 명심하자.

 

이번 미션에서 인수 테스트 작성이 필수는 아니었다. 하지만 레거시 코드를 리팩터링 하는데 인수 테스트 작성이 큰 도움이 될 것이라는 판단에 작성하였다.

 

예외에 메시지를 추가하면 더 명확한 예외 처리가 될 것 같다.

 

네이밍 관련 코멘트는 단골 손님인 것 같다. 누가 보더라도 이해하기 쉬운 이름으로 한번 더 고민해보자.

 

값을 꺼내서 비교하는 것이 아닌 객체 간에 메시지를 보내는 방식이어야 한다.

 

제공된 코드의 로직이 service에 있었고 이를 domain으로 위임을 해야 하는 상황이었는데, domain으로 위임 가능한 로직이 누락되었다. service는 최대한 작은 크기로 유지하고 대부분의 로직은 doamin에 위치해야 한다.

 

리팩터링 된 코드를 멀티 모듈을 적용하여 분리하는 미션이었는데, 모듈을 어떤 기준에 따라 분리할지가 관건이었다.

4가지 기준(외부 통신, 도메인, 인프라, 공통 util)으로 모듈을 분리하였다.제공된 코드는 외부와 통신 역할을 하는 api와 도메인으로 크게 분리할 수 있었고, 도메인을 다시 core-domain, menu-domain, order-domain 3개로 분리하였다. 리뷰어님 말씀대로 개별적으로 사용이 되지 않는 경우라면 하나의 통합 도메인으로 구성이 되는 것도 괜찮을 것 같다.

5가지 기준(독립 모듈, 공통 모듈(Util, Type), 도메인 모듈, 내부 모듈, 애플리케이션 모듈)으로 모듈을 분리하는 것이 더 합리적이라고 생각된다. 그리고 도메인 모듈들이 개별적으로 사용되지 않고 함께 유기적으로 사용되어야 하므로 하나의 도메인 모듈로 구성하는 것이 더 나은 것 같다.

참고: https://techblog.woowahan.com/2637/

느낀 점

  • 우테캠pro 과정에서 학습하고 연습했던 내용들을 한 번에 다 쏟아부어야 하는 미션이었던 것 같다. 그만큼 시간도 오래 걸리고, 배울 점도 많았다.
  • PR에 대한 리뷰어님의 코멘트가 지금까지 미션 중에 가장 적었다. 그동안 미션을 진행하면서 그래도 조금은 발전을 했다는 생각이 조금은 드는 것 같다.
  • 처음 코드 보다 깔끔해진 결과물을 보니 자신감이 생기는 것 같다. 실무에서 맞닥뜨릴 레거시 코드들에 대해서도 리팩터링을 도전해봐야겠다.

댓글