! 패키지 구조를 구성할때 가장 대표되는 2가지 !
Layer vs Domain 🤔
/* Layer 구조
Layer : controller, Service, dto 같은 아키텍트적인 계층형 기반으로 구성된 패키지 구조
장점
-> 프로젝트에 이해가 낮아도 전체적인 구조를 빠르게 파악가능
-> 작성하고자 하는 계층이 명확할 경우 빠르게 개발이 가능
단점
-> 각 레이어별로 수십개의 클래스들이 존재하여 코드 파악이 어려움
-> Layer를 기준으로 분리했기 때문에 코드의 응집력이 떨어짐
*/
/* Domain 구조
Domain : 도메인들이 최상단 루트로 구성된 패키지 구조
장점
-> 관련된 코드들이 응집해 있음
-> 디렉토리 구조를 통해 도메인을 이해할 수 있음
단점
-> 도메인 지식 없이 이해하기 어려움
-> 각 계층을 구분하기 위한 논의가 필요
*/
🥸 Domain 구조를 자세히 살펴보면...
-> member와 관련되어 사용되는 객체들로 구성
api : Controller 클래스로 구성
domain : 도메인 Entity에 대한 클래스로 구성, Enum 같은 클래스 또한 포함시킨다.
dto : Request, Response 객체로 구성
exception : 해당 도메인이 발생시키는 Exception 으로 구성
-> global은 프로젝트 전방위적으로 사용되는 객체들로 구성
common : 공통으로 사용되는 Value 객체들로 구성 ex) 공통된 Request, Response
config : 스프링 각종 설정들로 구성
error : 예외 핸들링을 담당하는 클래스
util : 유틸성 클래스들이 위치
근데 사실 아직 나는 Domain 구조로 개발을 진행해본적은 없다. 처음에 Layer 구조를 이용해서 개발하다보니 편해져서 같은 구조를 계속 지녔던 것 같은데 Domain 구조를 공부하다보니 진행했거나 하고있는 프로젝트에서 Domain 구조로 전환하게되면 어떻게 바뀔지 생각하고 그려보면서 좀 더 다르게 접근 할 수 있을 것 같아서 다음 프로젝트를 진행하게 되면 Domain 구조로 개발을 한번 해보고 싶다 🥹