스프링/개념

계층형 패키지 구조 vs 도메인형 패키지 구조

문상휘파람 2024. 9. 9. 13:05

스프링에 대해 공부하다 보니, 패키지 구조 또한 정말 중요하다는 것을 느낍니다.

해서, 계층형 패키지 구조와 도메인형 패키지 구조의 모양과 장단점을 간단히 정리하고자 합니다.

1. 계층형 패키지 구조

controller
    ⎿ UserController
    ⎿ LottoController    

service
    ⎿ UserService
    ⎿ LottoService

dto ...
domain ...

장단점

  1. 패키지만 보면 전체적인 구조 파악 가능합니다.
  2. 계층별 응집도가 좋습니다.
  3. but 도메인별 응집도는 낮습니다.(하나의 패키지 안에 여러 도메인이 섞여있음.)
  4. 규모가 커지면 가시성이 떨어집니다. <- 사실상 요게 제일 문제긴 하죠

2. 도메인형 패키지 구조

User
   ⎿ UserController
   ⎿ UserService
   ⎿ UserDto
    ...

Lotto
   ⎿ LottoController
   ⎿ LottoService
   ⎿ LottoDto
    ...

장단점

  1. 도메인별 응집도가 높습니다.
  2. 유스케이스별로 세분화해서 표현 가능합니다.
  3. but 전반적인 흐름은 파악하기 어렵습니다.
  4. 개발자 관점에 따라 패키지 두는 위치가 바뀔 수 있습니다. <- 이 부분이 가장 헷갈리는 것 같습니다. 책임을 어디에 둬야 할 지....

결론

어느 것을 써야한다 ! 뭐 이런건 아니지만 저는 개인적으로 도메인형 패키지가 좋은 것 같습니다. 게시판 만들기만 해도 클래스가 정말 많이 생기게 되는데, 도메인형 패키지를 사용하면 구조가 복잡하지 않고 어떤 로직이 어떠한 도메인에 들어가 있는지 파악하기 쉬웠던 것 같아요.