Skip to content

Package Structure

etuhcarap edited this page Feb 13, 2025 · 2 revisions

목표

프로젝트를 운영 하다보면 소스코드 분류 역할을 담당하는 package가 중복되거나 작업자 변경 등의 단순한 이유로 분리 되어 package명 자체가 가지는 의미가 퇴색되는 경우가 종종 있다. 사전에 인식한 이러한 문제를 방지하고 명확한 기준과 가독성, 코드 응집력을 가진 도메인 중심의 package 구조를 설계한다.


작성 요령

First Depth Layer

  • domain : 서비스 도메인 관련 비지니스 로직을 다루는 중심 모듈 계층
  • global : 전체 프로젝트에서 참조 가능한 모듈 계층
    • 공통 성격을 지닌 코드 혹은 설정 부
  • infra : 외부 Infrastructure와 연동을 담당하는 모듈 계층
    • aws, sms 발송 등 외부 시스템과 연동을 담당 부
com.example.project
 ├── domain     # 도메인 모듈 계층
 ├── global     # 공통 모듈 계층
 ├── infra      # 인프라 연동 계층
...

Second Depth Layer

Domain package의 하위 depth package

  • [controller/presentation]
    • [model/dto] : 요청/응답 객체
  • [service/application]: 비지니스 로직 처리 부(facade, use-case, service)
  • domain
    • entity: 데이터 포장 객체 (JPA Entity)
    • repository: 데이터 접근 계층(JPA Repository)
  • excption : 도메인이 발생시키는 예외 처리를 위한 비지니즈 Exception 클래스
domain
 ├── controller
 │   ├── dto
 ├── service
 │   ├── usecase
 │   ├── facade
 ├── domain
 │   ├── entity     
 │   ├── repository
 ├── excption
...

Global package의 하위 depth package

  • common : 전체 프로젝트에서 공통으로 사용될 수 있는 객체
    • e.g. 페이징 처리를 위한 Request, 공통 응답을 위한 Response
  • config : Application 구동에 필요한 설정
  • error : 예외 핸들링을 담당하는 클래스, 공통 오류 응답을 위한 객체 등
  • util : 유틸성 클래스
global
 ├── common
 ├── config
 ├── error
 ├── util
 ├── security
...

📐 설계 산출물

Clone this wiki locally