Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
Tags
- 접근제어자
- XLF
- 그리디 알고리즘
- 주식
- javascript
- StringBuffer
- Java
- 현금흐름표
- 자바
- 잉여현금흐름
- object
- etf
- 미국주식
- 알고리즘
- 기업분석
- 인플레이션
- 다형성
- 주린이
- 제태크
- 배당성장
- 프로그래머스
- 객체지향
- 백준
- 금리인상
- S&P500
- FCF
- 무디스
- 오버라이딩
- 금리인하
- mco
Archives
- Today
- Total
오늘의하루
[레거시 리팩토링] 상속을 넘어 컴포지션으로 가보자 본문
문제점 : 깊은 상속 관계의 DTO 무리들...
레거시 프로젝트에서는 각각의 DTO들이 모두 깊은 상속 관계를 갖은 채 하나씩 정의되어 있으며 해당 DTO를 사용해서 모든 행위에 대해 사용하고 있었습니다.
- 불필요한 데이터 전송
- 요청과 응답에 불필요한 필드들이 포함되어 있습니다.
- 유지보수 어려움
- 새로운 필드 추가시 모든 DTO를 검토해야 할 수 있습니다.
리팩토링 방향 : 상속에서 컴포지션으로
비록 정상적으로 작동하고 있지만 앞으로도 계속해서 사용될 제품이기 때문에 데이터 전송의 효율성과 유지 보수성을 개선하기 위해 리팩토링을 결정했습니다.
처음 리팩토링 관련 이야기를 했을때 "이미 동작하는 프로젝트를 굳이 수정할 필요가 있는가?"라는 반응이였지만 내가 생각하는 중요하다고 생각드는 점을 강조하며 설득했습니다.
- 명확성
- 요청과 응답은 정말 필요한 데이터만 포함되어야 합니다.
- 확장성
- 컴포지션 방식을 사용하면 변경과 추가가 개별 객체로 제한되기 때문에 유연한 구조 변경이 가능합니다.
그 이후 만난 문제
이전에는 깊은 상속 관계로 인해 MyBatis에서 별도의 resultMap을 만들 필요가 없었지만 이제는 DTO의 수가 늘어나면서 각 DTO에 대해 별도의 resultMap을 정의해야 했습니다.
이로 인해 resultMap의 관리가 복잡해졌기 때문에 해당 문제를 해결하기 위해 지속적으로 고민할 생각입니다.
'Spring' 카테고리의 다른 글
DTO(Data Transfer Object)를 쓰는 이유? (1) | 2024.11.11 |
---|---|
BeanPostProcessor 사용법: 빈 초기화 과정에서의 조작과 시점 이해하기 (0) | 2024.11.07 |
[Spring] Proxy 내부 호출 문제 해결 및 순환 참조 문제 해결 (1) | 2024.08.28 |
[Spring] Thread Local 사용 시 주의 사항 (0) | 2024.08.03 |
[Spring] 부하 테스트에서 발견한 회원가입 로직 이상 동작에 대한 고찰 (0) | 2024.05.16 |
Comments