240619
오늘의 학습
● 1. 아키텍처 패키지 구조
프로젝트를 설계하며 고민한 부분
아키텍처 패키지 구조
스프링 프로젝트의 패키지 구조는 크게 레이어 계층형 구조와, 도메인형 구조 2개가 존재한다.
계층형 구조
controller
└ UserController
└ BoardController
└ CommentController
service
└ UserService
└ BoardService
└ CommentService
repository
└ UserRepository
└ BoardRepository
└ CommentRepository
계층형 구조는 계층별로 구분을 하여 패키지 전체적인 구조를 알아보기 쉬운 장점이 존재하고, 단점으로는 하나의 디렉터리에 많은 클래스가 존재할 수 있어 프로젝트가 커질수록 오히려 복잡해질 수 있는 단점이 존재한다.
도메인형 구조
board
└ controller
└ BoardController
└ service
└ BoardService
user
└ controller
└ UserController
└ service
└ UserService
도메인이라는 큰 범주를 주제로 패키지를 구성한 구조이다.
해당 도메인 하나에 계층을 나눠 다소 패키지가 많아져 구조를 파악하기 힘들 수 있다는 단점이 있지만 프로젝트의 사이즈가 커질수록 오히려 계층형보다는 클래스를 찾기 쉽다는 장점이 존재한다.
계층형 구조 vs 도메인형 구조
계층형 구조와 도메인형 구조 중 가장 좋은 구조는 사실 프로젝트 사이즈에 따라 선호도가 달라진다.
위의 구조마다의 장점과 단점을 통해 알 수 있는 공통적인 문제점은 프로젝트의 사이즈에 따라 서로 장점과 단점을 커버를 하고 있기 때문에 프로젝트의 크기가 작을 경우 개인적으로는 계층형 구조를 사용하는 것이 좋고, 사이즈가 클 경우에는
계층형 구조보다는 도메인형 구조를 선택하는것이 좋은 선택이라고 생각한다.
팀에서 정한 패키지 구조
팀에서 정한 패키지 구조는 "도메인형 구조"를 선택하게 되었다. 프로젝트 사이즈만 놓고보면 매우 작은 프로젝트라 개인적으로는 계층형 패키지를 사용하는것이 좋다고 생각을 했지만, 저를 포함한 팀원분들이 캠프에선 항상 작은 프로젝트만을 했기때문에 비교적 도메인형이라는 패키지구조를 사용을 해보지 못했다는 의견이 모여 도메인형 구조를 사용하기로 결정을 하게 되었다.
# 오늘의 회고
팀원분들과 프로젝트를 설계하며 여러가지 고민을 했고, 그 중 패키지 설계에 대한 고민을 했었다.
패키지를 설계하며 2가지의 구조를 알게 되었고, 그 중 도메인형을 사용을 하게 되었다.
그 밖에도 깃허브에 이슈를 만들어 해당 이슈에서 branch를 생성할 수 있다는 점도 알게되었고, 여담으로 인텔리제이에
code with me라는 원격기능이 존재하다는 것도 알게되었다. 역시.. 협업을 하면 몰랐던걸 많이 배우게 된다.