오늘의하루

[레거시 리팩토링] 상속을 넘어 컴포지션으로 가보자 본문

Spring

[레거시 리팩토링] 상속을 넘어 컴포지션으로 가보자

오늘의하루_master 2024. 12. 17. 23:11

문제점 : 깊은 상속 관계의 DTO 무리들...

레거시 프로젝트에서는 각각의 DTO들이 모두 깊은 상속 관계를 갖은 채 하나씩 정의되어 있으며 해당 DTO를 사용해서 모든 행위에 대해 사용하고 있었습니다.

  • 불필요한 데이터 전송
    • 요청과 응답에 불필요한 필드들이 포함되어 있습니다.
  • 유지보수 어려움
    • 새로운 필드 추가시 모든 DTO를 검토해야 할 수 있습니다.

리팩토링 방향 : 상속에서 컴포지션으로

비록 정상적으로 작동하고 있지만 앞으로도 계속해서 사용될 제품이기 때문에 데이터 전송의 효율성과 유지 보수성을 개선하기 위해 리팩토링을 결정했습니다.

 

처음 리팩토링 관련 이야기를 했을때 "이미 동작하는 프로젝트를 굳이 수정할 필요가 있는가?"라는 반응이였지만 내가 생각하는 중요하다고 생각드는 점을 강조하며 설득했습니다.

  • 명확성
    • 요청과 응답은 정말 필요한 데이터만 포함되어야 합니다.
  • 확장성
    • 컴포지션 방식을 사용하면 변경과 추가가 개별 객체로 제한되기 때문에 유연한 구조 변경이 가능합니다.

그 이후 만난 문제

이전에는 깊은 상속 관계로 인해 MyBatis에서 별도의 resultMap을 만들 필요가 없었지만 이제는 DTO의 수가 늘어나면서 각 DTO에 대해 별도의 resultMap을 정의해야 했습니다.

이로 인해 resultMap의 관리가 복잡해졌기 때문에 해당 문제를 해결하기 위해 지속적으로 고민할 생각입니다.

Comments