기존 프로젝트에서는 하나로 묶여진 코드들 안에서 API, Domain, DB의 의존성이 서로 엉켜있는 상태일 것이다. 따라서 이번 멀티 모듈 리팩토링을 통해 의존성 관계를 정리하고 유지보수 하기 좋은 코드를 생성해볼 것이다.
Chooz - 멀티 모듈 프로젝트 에서의 의존성 흐름
이 그림에서 눈여겨봐야 할 점은 Domain 에는 어떠한 의존성도 추가하지 않는 것이다. 따라서 다른 모듈과의 결합성을 낮추고 모듈의 독립성을 보장함으로써 단단한 도메인을 만들 수 있다. 기존 프로젝트에서는 JPA 엔티티가 도메인 객체의 역할을 해주고 있기 때문에 도메인과 JPA의 경계가 모호했다. 하지만 모듈프로젝트 에서는 JPA → Domain 의존성을 가지게 되고, 더이상 JPA 엔티티가 도메인 객체 모델로써의 역할을 해줄 수 없기 때문에 엔티티와 도메인 객체의 분리가 필요하다.
앞으로 어떤 방향으로 코딩을 해야할지 정리를 해보자면
로그인 로직
registerUser 요청 GeneralSignUpRequest (이름,email,password)
GeneralSignUpRequest.toDomain() 메소드를 통해 Domain 에 있는 DTO 인 GeneralSignUpInfo 로 변환하여 signupService.signup
호출(); (항상 똑같은 필드를 가진 DTO를 API,Domain에 두개 만들어야 하는 건가?)
SignUpService.signUp() 에서는 GeneralSignUpInfo
정보를 받아가지고 User 도메인 객체를 생성한다 → userRepository.register(user) 를 호출한다.
userRepository의 구현체인 Storage 모듈의 UserRepositoryAdaptor의 register 메소드가 호출되고
이 register메소드에서 JPARepository를 상속받은 UserJPARepository를 주입받아
userJPARepository.save(userEntity) 를 실행하여 DB에 user정보를 저장하게 된다. (User - > UserEntity로 변경해야 함)