개발자
안녕하세요 스프링부트로 개인프로젝트를 시작해보려고 아이디어 구상을 하고 있던 와중에 다들 가장 선호하는 패키지구조가 어떤 것인지 문득 궁금해져서 질문을 남깁니다 혹시 추천하거나 개인이 선호하는 패키지구조가 있으시면 한번씩 알려주시면 감사하겠습니다 !
답변 1
인기 답변
안녕하세요. 저도 한번쯤 고민을 해봤던 경험이있어서 짧은 지식내에서 답변을 드려볼까 합니다. 먼저 말씀드릴 중요한 내용은 완벽한 정답은 없다는 내용을 드리고싶습니다. 내가 또는 타인이 내가 작성한 프로젝트를 봤을때 MVC 모델 별로 어떤 패키지에 들어있는지 한눈에 보기 쉽다거나, 내가 수정하고자 혹은 찾고자 하는 도메인에 대한 로직의 위치를 알아볼 수 있도록 분류하는것이 좋은 방법이라고 생각됩니다. 대표적인 패키지 분류 방법인 두가지를 소개해드리겠습니다. 첫번째로 MVC패턴을 가시화한 '계층형 구조'가 있습니다. Controller, Service, Repository, Model 패키지로 분류하여 관리되는 방식입니다. 장단점을 간단하게 설명해드리자면 프로젝트의 이해도가 전반적으로 낮다고 하더라도 패키지 구조만으로 프로젝트에 대한 이해가 용이하다는 장점이 있습니다. 하지만 서비스의 규모가 커질수록 패키지 내부가 점점 비대해져 구분이나 관리가 어려워진다는 단점이 있습니다. 두번째는 도메인(업무)별로 분류하는 DDD(domain driven design)방식의 '도메인 구조'가 있습니다. 이 방식은 요약하자면 상품을 주문하여 결제하는 로직이 있는 주문 서비스의 프로젝트인 경우 상품(Product), 주문(Order), 결제(Payment)와 같이 분류하여 패키지화 하는 방식입니다. 장단점으로는 프로젝트를 도메인 별로 패키징화 하여 응집도가 높아지고 도메인이 흐름을 파악하기가 용이합니다. 하지만 도메인이 아닌 전체적인 프로젝트 관점으로는 여러 패키지를 이동해야하기 때문에 한눈으로 이해가 어려울수 있다는 단점이 있습니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!
현직자들의 명쾌한 답변을 얻을 수 있어요.
이미 회원이신가요?
커리어리 AI 봇
GPT가 달아주는 답변입니다.
2023년 11월 14일
자바에서 패키지 구조를 설계하는 것은 프로젝트의 복잡성 및 유지보수하는데 큰 역할을 합니다. 일반적으로는 두 가지 주요한 방식이 있습니다: 기능별(Functional) 패키징과 계층별(Layered) 패키징. 1. 계층별 패키징(Layered Packaging): 이 방식은 MVC(Model-View-Controller) 같은 계층적 구조에 따라 패키지를 분리합니다. 예를 들면, - com.myapp.service - com.myapp.repository - com.myapp.controller 이런 식으로 패키지를 나눌 수 있습니다. 각각의 서비스, 리파지터리, 컨트롤러들이 해당 패키지에 속하게 됩니다. 2. 기능별(Functional Packaging): 이 방식은 도메인 중심 설계(DDD: Domain Driven Design)에서 영감을 받았으며, 각 기능에 따라 패키지를 나눕니다. 예를 들면, - com.myapp.order - com.myapp.user 위와 같이 주문(order), 사용자(user) 등의 도메인 별로 나눌 수 있습니다. 따라서 당신의 선호나 프로젝트 요구 사항에 따라 적합한 패키지 구조를 선택할 수 있습니다. 그러나 중요한 것은 일관성과 팀의 합의입니다. 다른 개발자들이 당신의 코드를 쉽게 이해하고, 수정하고, 유지보수할 수 있는 구조를 만드는 것이 중요합니다.
지금 가입하면 모든 질문의 답변을 볼 수 있어요!