[spring boot] 패키지 구조(도메인형, 계층형)

yookyungmin·2023년 9월 25일
0

프로젝트에서 사용한 패키지 구조에 대해 간단하게 포스팅 해보려고 합니다

계층형 패키지 구조

계층형 패키지 구조의 예시이다.
서비스 계층에 따라 패키지를 설계하는 방식이다.

com
 ㄴ example
     ㄴ nuribank
       ㄴ config
       ㄴ controller
       ㄴ domain
       ㄴ repository
       ㄴ service
       ㄴ security
       ㄴ exception

코드랩은 우선 멀티 모듈로 진행한 프로젝트이다.

멀티 모듈은 전에도 다룬 내용이 있어 간단하게 말하자면, 하나의 서비스나 프로젝트를 여러 개의 모듈로 나누어 개발하는 것이다.
https://velog.io/@yookyungmin/Gradle%EC%9D%B4%EB%9E%80


사진과 같이 api, common, intergration으로 분리되어 있고

api 패키지는 계층형 구조로 되어 있고 common 패키지는 엔티티를 정의한 곳이다. intergration은 s3 관련, discordwebhook 관련된 내용들이 있다.

일반적으로 장단점은

장점

  • 해당 프로젝트에 이해가 상대적으로 낮아도 전체적인 구조를 빠르게 파악할 수 있음

단점

  • 하나의 패키지에 모든 클래스들이 모이게 되기 때문에 규모가 커지면 클래스의 개수가 많아져 구분이 어려워진다.
  • 모듈 단위로 분리 시 어려움이 있음

이라한다. 멀티 모듈도 처음, 계층형 패키지 구조도 처음이지만 새로운 패키지구조로 경험을 할수 있어서 좋았습니다.

도메인 패키지 구조

아래의 예시처럼 도메인 별로 나누는 구조입니다.

com
 ㄴ example
    ㄴ nuribank
        ㄴ domain
        |   ㄴ account
        |   | ㄴ controller
        |   | ㄴ dto
        |   | ㄴ entity
        |   | ㄴ exception
        |   | ㄴ repository
        |   | ㄴ service
        |   ㄴ user
        |   | ㄴ controller
        |   | ㄴ dto
        |   | ㄴ entity
        |   | ㄴ exception
        |   | ㄴ repository
        |   | ㄴ service
        | ...
        ㄴ global
            ㄴ auth
            ㄴ common
            ㄴ config
            ㄴ error
            ㄴ infra
            ㄴ util

아래 사진의 프로젝트의 이름은 딜리이고 도메인 패키지 구조로 프로젝트를 진행 하였습니다.

해당 프로젝트를 도메인 구조로 진행 한 이유는 다수결 투표로 채택 되었는데 투표했을 당시에 도메인별로 패키지 구조가 나누어져 있는게 깔끔해 보였습니다.

도메인 패키지 구조의 장단점에 대한 전반적인 의견은

장점

  • 관련 코드들이 응집해 있다.
  • 모듈 단위로 분리할 때 유리함

단점

  • 프로젝트에 대한 이해가 낮을 경우 전체적인 구조를 파악하기 어렵다.
  • 개발자의 관점에 따라 어느 패키지에 둘지 애매한 클래스들이 존재한다.

이러한데 내 생각엔 도메인별로 나누어져 있어서 직관적이고 개발을 할 때나 복습할때도 쉽게 파악을 할수 있었던거 같다

어디 블로그에서나 말하듯 도메인 패키지구조나 계층형 패키지 구조나 뭐가 더낫다 정답이 없는거 같긴 합니다
취업한 회사의 패키지 구조를 따라야할뿐,,
요즘은 MSA(마이크로 서비스 아키텍쳐) 영향으로 도메인 패키지구조를 많이 쓰는 추세라고 합니다.

참고
https://ksh-coding.tistory.com/96
https://gksdudrb922.tistory.com/271

0개의 댓글