1. common
* configuration
* spring project 를 위한 설정을 몰아둠
* exception
* 예외 처리 로직을 몰아둠
* advice & error object & 공통 exception class
* request
* 공통으로 사용 될 요청 DTO가 위치
* response
* 공통으로 사용 될 응답 DTO가 위치
* 공통 된 스팩의 응답을 주기 위한 응답 객체와 로직 위치
* utils
* 해당 프로젝트와 의존이 전혀 없는 포조들이 위치
* 단순 유틸
* validation
* 요청 DTO 를 검증하기 위한 로직이 위치
2. domain
* post
* img
* postComment
3. security
* JWT
* sign
* user
공통 기능을 common 에 모두 몰아두기로 했습니다.
domain package 에는 각 domain 별로 분리하여 코드를 작성하기로 했습니다.
이때 common 의 로직을 언제든지 제 사용 할 수 있습니다.(그러려고 common 을 만들었습니다)
security 는 조금 특별한 도메인이라고 판단 -> 별도로 분리했습니다.
리팩토링의 동기(현 상황에서 문제)
1. common 에 너무 많은 기능이 몰리고 있습니다.
그에 따라 모듈 의미의 명확성이 떨어지고 단순히 공통으로 쓰일 것 같은 코드를 일단 넣고 보는 상황이 되고 있습니다.
프로젝트를 진행할 수록 common 은 더욱 방대해 지고 명확성이 떨어질 것이고 이는 기존 코드 분석에 더 오랜 시간이 걸림을 의미합니다.
이는 생산성 저하로 이어질 것입니다.
2. 프로젝트가 커짐에 따라 단순히 domain & common 2개의 모듈 만으로는 완벽한 모듈 분리가 이루어 질 수 없습니다.
단일 책임을 갖도록 모듈을 조금 더 세분화 하고 세분화 된 모듈 간의 의존 관계를 명확하게 정의할 수 있다면 생산성이 증가할 것으로 기대 합니다.
기존 프로젝트 구조 설명
리팩토링의 동기(현 상황에서 문제)
1. common 에 너무 많은 기능이 몰리고 있습니다.
2. 프로젝트가 커짐에 따라 단순히
domain
&common
2개의 모듈 만으로는 완벽한 모듈 분리가 이루어 질 수 없습니다.