패키지 구조 정하기 🗂

maketheworldwise·2022년 5월 15일
0


이 글의 목적?

평소에도 항상 생각하고 고민하는 내용이 바로 패키지 구조다. 이 프로젝트에서도 막힌 부분이다. 나만 그런건가..? 🤔 일단 K님과 상의한 내용을 토대로 결정한 도메인형 구성에 대해서 내가 참고한 레퍼런스를 참고해 간략하게 정리해보자.

계층형

계층형 구조는 가장 일반적인 구조다.

└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── example
    │   │           └── demo
    │   │               ├── DemoApplication.java
    │   │               ├── config
    │   │               ├── controller
    │   │               ├── dao
    │   │               ├── domain
    │   │               ├── exception
    │   │               └── service
    │   └── resources
    │       └── application.properties

도메인형

도메인형 구조는 각 도메인별로 모아놓은 구조를 의미한다. 관련된 코드들이 응집해 있다는 점이 장점이지만 프로젝트에 대한 이해가 낮을 경우 전체적인 구조를 파악하기 힘들 수 있다는 점이 있다고 한다.

내가 참고한 블로그에 따르면 도메인 주도 개발 DDD, ORM, 객체지향 프로그래밍 등에서는 도메인형 구조가 더 적합하다고 한다.

└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── spring
    │   │           └── guide
    │   │               ├── ApiApp.java
    │   │               ├── SampleApi.java
    │   │               ├── domain
    │   │               │   ├── coupon
    │   │               │   │   ├── api
    │   │               │   │   ├── application
    │   │               │   │   ├── dao
    │   │               │   │   ├── domain
    │   │               │   │   ├── dto
    │   │               │   │   └── exception
    │   │               │   ├── member
    │   │               │   │   ├── api
    │   │               │   │   ├── application
    │   │               │   │   ├── dao
    │   │               │   │   ├── domain
    │   │               │   │   ├── dto
    │   │               │   │   └── exception
    │   │               │   └── model
    │   │               │       ├── Address.java
    │   │               │       ├── Email.java
    │   │               │       └── Name.java
    │   │               ├── global
    │   │               │   ├── common
    │   │               │   │   ├── request
    │   │               │   │   └── response
    │   │               │   ├── config
    │   │               │   │   ├── SwaggerConfig.java
    │   │               │   │   ├── properties
    │   │               │   │   ├── resttemplate
    │   │               │   │   └── security
    │   │               │   ├── error
    │   │               │   │   ├── ErrorResponse.java
    │   │               │   │   ├── GlobalExceptionHandler.java
    │   │               │   │   └── exception
    │   │               │   └── util
    │   │               └── infra
    │   │                   ├── email
    │   │                   └── sms
    │   │                       ├── AmazonSmsClient.java
    │   │                       ├── SmsClient.java
    │   │                       └── dto
    │   └── resources
    │       ├── application-dev.yml
    │       ├── application-local.yml
    │       ├── application-prod.yml
    │       └── application.yml

그럼 우리 프로젝트의 구조는?

대략적으로 그린다면 다음과 같은 구조가 되지 않을까 싶다.

└── src
    ├── main
    │   ├── java
    │   │   └── com
    │   │       └── yousinsa
    │   │           └── www
    │   │               ├── User
    │   │               │   ├── controller
    │   │               │   │   ├── apis
    │   │               │   │   │   ├── UserSignInRestController.java
    │   │               │   │   │   └── UserSignUpRestController.java
    │   │               │   │   ├── views
    │   │               │   │   │   └── UserSignInViewController.java
    │   │               │   │   └── dtos
    │   │               │   │       └── LoginRequestDto.java
    │   │               │   ├── service
    │   │               │   │   ├── UserSignUpService.java
    │   │               │   │   ├── UserSignUpServiceImpl.java
    │   │               │   │   └── converter
    │   │               │   │       └── LoginRequestConverter.java
    │   │               │   ├── domain
    │   │               │   │   ├── repository
    │   │               │   │   │   ├── UserRepository.java
    │   │               │   │   │   └── UserRepositoryImpl.java
    │   │               │   │   └── entity
    │   │               │   │       └── UserEntity.java
    │   │               └── Store
    │   └── resources
    │       ├── application.yml
    │       ├── application-dev.yml
    │       ├── application-stage.yml
    │       └── application-prod.yml

이 글의 레퍼런스

profile
세상을 현명하게 이끌어갈 나의 성장 일기 📓

0개의 댓글