대상: (예: OrderService, 결제 모듈, API 응답 구조 등)
언어 / 프레임워크:
1. 개요
| 항목 | 내용 |
|---|---|
| 한 줄 요약 | (예: 중복된 할인 계산 로직을 전략 패턴으로 분리) |
| 리팩터링 범위 | (예: 단일 메서드 / 클래스 / 모듈 / 아키텍처 레이어) |
| 소요 시간 | |
| 난이도 | ⭐ / ⭐⭐ / ⭐⭐⭐ / ⭐⭐⭐⭐ / ⭐⭐⭐⭐⭐ |
2. 문제 인식 — 무엇이 문제였나?
현재 코드 혹은 구조에서 느낀 불편함, 버그, 유지보수 어려움 등을 구체적으로 기록하세요.
문제 상황
- 예외 처리가 되지 않아서 존재하지 않는 id에 대해서 등록하거나, 삭제하려고 할 때, 예외를 다루지 않았다.
- repository dao 관련한 이름들이 혼용되어 사용되어 있어서 클래스와 파일들이 이해하기 어려웠다.
문제가 되는 코드 / 구조
// 문제가 있는 코드나 구조를 붙여넣으세요 (코드가 아닌 경우 텍스트로 설명)
문제 유형 체크
- 중복 코드 / 로직
- 불명확한 이름 (변수, 메서드, 클래스 등)
- 단일 책임 원칙(SRP) 위반 — 너무 많은 역할
- 높은 결합도 — 변경 시 여러 곳에 영향
- 낮은 응집도 — 관련 없는 것들이 한곳에
- 확장하기 어려운 구조 (OCP 위반)
- 테스트하기 어려운 구조
- 성능 문제
- 가독성 / 이해하기 어려움
- 기타:
3. 변경 이유 — 왜 바꿔야 하는가?
지금 당장 동작하더라도 왜 바꾸어야 하는지 그 필요성을 설득력 있게 정리하세요.
- 유지보수 측면:
- 확장성 측면:
- 가독성 측면:
- 테스트 용이성 측면:
- 기타 이유:
4. 변경 방향 — 어떻게 바꿀 것인가?
어떤 방식으로 접근할지, 어떤 기법·패턴·원칙을 적용할지 계획을 기록하세요.
접근 전략
- Optional 사용
- JdbcxxxxxxRepository 클래스 네이밍으로 통일
적용할 기법 / 패턴 / 원칙
- 메서드 추출 (Extract Method)
- 클래스 / 인터페이스 추출
- 디자인 패턴 적용 (패턴명: )
- 레이어 / 모듈 분리
- 의존성 역전 (DIP) 적용
- 불변 객체 / VO 도입
- 기타:
변경 후 구조 (다이어그램 or 설명)
5. 변경 결과 — 어떻게 바뀌었나?
변경된 코드 / 구조
// 리팩터링 후 코드나 구조를 붙여넣으세요
Before / After 비교
| 관점 | Before | After |
|---|---|---|
| 구조 | ||
| 코드 라인 수 | ||
| 책임 분리 | ||
| 테스트 용이성 | ||
| 기타 |
6. 기대 효과 및 실제 효과 — 무엇이 나아졌나?
예상했던 효과와 실제로 느낀 효과를 구분해서 기록하면 더 좋습니다.
| 항목 | 기대했던 효과 | 실제로 느낀 효과 |
|---|---|---|
| 가독성 | ||
| 유지보수성 | ||
| 확장성 | ||
| 테스트 용이성 | ||
| 성능 | ||
| 기타 |
7. 테스트
- 기존 테스트 모두 통과
- 신규 테스트 케이스 추가
- 수동 검증 완료
- 해당 없음
// 주요 테스트 코드 (있을 경우)
8. 회고
배운 점
어렵거나 아쉬웠던 점
다음에 적용해 보고 싶은 것
- [ ]
- [ ]
9. 참고 자료
| 제목 | 링크 | 메모 |
|---|---|---|
🗓 마지막 수정: YYYY-MM-DD