728x90

미션 후기

미션을 통해 배운 점
- mock을 통한 테스트 코드 활용
- 레거시 코드 리팩터링 경험
   - DTO 활용
   - 도메인 모델 Entity 작업
   - 일급 컬렉션 작업
   - DAO > Repository 교체 작업
   - Service > domain 책임 리팩터링
- 의존성 리팩터링 경험
- 멀티 모듈 적용 방법

 

가장 힘들고 많은 고민을 하게 했던 미션이었다

대신 정말 정말 많은 걸 배웠던 미션이다

앞에서 진행했던 미션들을 응용해서 완성시키는 사실상 마지막 단계라고 봐도 무관할 것 같다

이번 미션을 통과하느냐 마느냐에 따라 수료가 결정된다고 할 정도로 어렵다고 미리 얘기를 들었었다

일단 이번 미션에서 테스트 코드의 진정한 쓰임새가 돋보이는 느낌이다

레거시 코드를 리팩터링하면서 코드를 보호하기 위해 mock을 활용한 테스트 코드를 많이 사용하였지만

mock은 최대한 늦게 사용하고, 도메인 단위로 테스트하는 것이 좋은 TDD 방법이라고 한다

 

지금까지 개발하면서 의존성에 대한 고민을 해본 적이 거의 없다

객체지향적 개발이 아니라 절차지향적 개발을 주로 해왔기 때문에 더 고민할 필요성을 느끼지 못했던 것 같다

절차 지향적으로 개발하게 되면

즉, service 레벨에 핵심 로직을 구현하게 되면 객체끼리 협력관계(OOP)가 없는 상태가 된다

도메인 단위로 책임을 위임하면 메서드의 단위가 작아져 TDD 하기 쉬워지고
또한 DB에 의존하지 않기 때문에 TDD를 작성하기 쉬워진다

 

모든 미션을 통틀어서 가장 막막하고 힘들었지만 성취감도 그만큼 컸던 미션인 것 같다 :)


리팩터링 팁

객체 참조 설정 규칙

  1. 함께 생성되고 함께 삭제되는 객체들을 패키지로 함께 묶어라
  2. 도메인 제약사항을 공유하는 객체들을 패키지로 함께 묶어라
  3. 가능하면 패키지를 분리해라

의존성 분리 방법

  • id를 통해 repository로 가져오도록 하여 연관관계 구현. 의존관계를 삭제
  • 중간 처리용 객체를 생성하여 단방향으로 설계
  • 인터페이스나 추상화를 통해 단방향으로 처리되도록 설계
  • 도메인 이벤트, 이벤트 핸들러 사용
  • service를 생성하여 한곳에 모음. 비즈니스 흐름이 한눈에 보이는 절차 지향 코드로 구현
    (주객전도가 되지않도록 주의)

의존성 분리 방법 상세

우선 내가 사용했던 방법은

이벤트 핸들러를 사용하는 방식은 현재 구현한 코드와 맞지 않아보여서 배제했고

validator 클래스에서 의존해야하는 service 클래스를 참조하여 처리하는 방식으로 구현했다

Before

 

After

예를 들어 설명하자면

order validator 클래스에서 menu service(menu repository) 를 의존하도록 하여

order service 에서 menu service에 대한 의존성을 제거하도록 처리했다


멀티 모듈

멀티 모듈 장점

  1. 최소 의존성을 가지고 독립적으로 수행되기 때문에 재사용성이 높음
  2. 모듈 별로 빌드가 가능하여 전체 프로젝트를 빌드할 필요가 없음
  3. 버그 발생 시 해당 모듈만 디버깅

멀티 모듈 단점

  1. 멀티 모듈을 하나의 JVM으로 띄우기 위한 사전 작업 필요
    (설정 파일을 계속 신경 써야함)
  2. 의존성 관리에 신경 써야함

Code / Feedback

🚀 1단계 - 테스트를 통한 코드 보호

https://github.com/next-step/jwp-refactoring/pull/476

 

1단계 - 테스트를 통한 코드 보호 by tyakamyz · Pull Request #476 · next-step/jwp-refactoring

안녕하세요 리뷰어님 1단계 - 테스트를 통한 코드 보호 PR 드립니다 :) 테스트의 종류는 고민하다가 리팩토링 시 코드가 많이 변경될 것이라고 mock을 사용하는 방법을 선택하였습니다 실제 코드

github.com


🚀 2단계 - 서비스 리팩터링

https://github.com/next-step/jwp-refactoring/pull/488

 

2단계 - 서비스 리팩터링 by tyakamyz · Pull Request #488 · next-step/jwp-refactoring

안녕하세요 리뷰어님 2단계 - 서비스 리팩터링 PR 드립니다 :) 이번 미션은.. 정말 힘들었네요 여러번 롤백하고 다시 진행했네요ㅜ 계속된 리셋 작업을 경험하고 노하우(?)라고 해야할지 대략적인

github.com


🚀 3단계 - 의존성 리팩터링

https://github.com/next-step/jwp-refactoring/pull/530

 

3단계 - 의존성 리팩터링 by tyakamyz · Pull Request #530 · next-step/jwp-refactoring

안녕하세요 리뷰어님 3단계 - 의존성 리팩터링 PR 드립니다 :) 의존도를 머릿속 계산만으로는 그려지지가 않아서... 그림을 그리고 시작했습니다 리팩토링하면서도 그림을 업데이트 해가며 작업

github.com


🚀 4단계 - 멀티 모듈 적용

https://github.com/next-step/jwp-refactoring/pull/536

 

4단계 - 멀티 모듈 적용 by tyakamyz · Pull Request #536 · next-step/jwp-refactoring

안녕하세요 리뷰어님 4단계 - 멀티 모듈 적용 PR 드립니다 :) 모듈은 유지보수 측면이나 의존성을 나눈 부분이 연계된다고 생각하여 패키지 기준으로 나누었습니다! 한가지 고민되었던 부분이 있

github.com

 

728x90
복사했습니다!