개인 공부 (23.07~

프로젝트 패키지 구조 (기능 / 계층)

Song쏭 2023. 8. 24. 11:39

mapper와 jpa 혼용 프로젝트로 진행하려고 하는데

그러려면 나부터 헷갈리지 않게 명확히 구분할 필요를 느꼈다.

 

패키지부터 다시 정리하려는데 

찾아보니

레이어 우선과

모듈 우선이 있었다. 

 

모듈우선 (기능)

기능별로 패키지를 분리.

ex) product, order, user 와 같이 패키지를 분리.

장점 

도메인 중심의 설계 : 도메인 주도 설계 (DDD)와 같은 접근법과 잘 어울린다.

독립적인 개발 : 각 모듈은 상대적으로 독립적이므로 병렬 개발이 용이하다.

높은 재사용성 : 특정 기능이나 서비스를 다른 프로젝트나 모듈에서 재사용하기 쉽다.

단점

순환 참조 위험 : 모듈 간의 잘못된 의존 관계 설정으로 인해 순환 참조의 위험이 있다.

관리 복잡성 : 큰 프로젝트에서는 모듈의 수가 많아져 관리가 복잡해질 수 있다.

 

레이어 우선 (계층)

레이어별로 패키지를 분리

ex) controller, service, repository와 같이 패키지를 분리.

장점

명확한 책임 분리 : 각 레이어는 명확한 책임을 가지므로 구조의 이해가 쉽다.

순환 참조 방지 : 잘 설계된 레이어드 아키텍쳐에서는 순환 참조의 위험이 낮다.

일관된 개발 방식 : 동일한 레이어에서는 유사한 패턴과 구조를 사용하기 때문에 개발 방식이 일관된다.

단점

수직적 확장 제한 : 기능이 추가될 때마다 모든 레이어를 거쳐야하는 경우가 많다.

높은 결합도 : 한 레이어의 변경이 다른 레이어에 영향을 줄 수 있다.

 

 

결론! 어떤 방식이 더 나은 방식인지는 단순히 방식 자체의 장단점만으로 판단하기 어렵다.

프로젝트의 요구사항, 팀의 경험과 선호도, 어플리케이션의 규모와 성장 방향 등을 고려하여 적절한 선택을 해야한다.

 

그리고 더 찾아봤을 때는기능으로 나누고 그 기능안에서 계층별로 나누는 것도 좋은 것 같다.가독성이 좋으니...? 앞으로 시행착오를 겪으면서 또 바꿀 수도 있지만 일단 이렇게 해봐야겠다.