hgzero/claude/standard_package_structure.md
2025-10-23 14:55:33 +09:00

174 lines
4.7 KiB
Markdown

패키지 구조 표준
레이어드 아키텍처 패키지 구조
├── {SERVICE}
│ ├── domain
│ ├── service
│ ├── controller
│ ├── dto
│ ├── repository
│ │ ├── jpa
│ │ └── entity
│ ├── config
└── common
├── dto
├── util
├── response
└── exception
Package명:
- com.{ORG}.{ROOT}.{SERVICE}
예) com.unicorn.lifesub.mysub, com.unicorn.lifesub.common
변수:
- ORG: 회사 또는 조직명
- ROOT: Root Project 명
- SERVICE: 서비스명으로 Root Project의 서브 프로젝트임
예시
com.unicorn.lifesub.member
├── MemberApplication.java
├── controller
│ └── MemberController.java
├── dto
│ ├── LoginRequest.java
│ ├── LogoutRequest.java
│ └── LogoutResponse.java
├── service
│ ├── MemberService.java
│ └── MemberServiceImpl.java
├── domain
│ └── Member.java
├── repository
│ ├── entity
│ │ └── MemberEntity.java
│ └── jpa
│ └── MemberRepository.java
└── config
├── SecurityConfig.java
├── DataLoader.java
├── SwaggerConfig.java
└── jwt
├── JwtAuthenticationFilter.java
├── JwtTokenProvider.java
└── CustomUserDetailsService.java
클린 아키텍처 패키지 구조
├── biz
│ ├── usecase
│ │ ├── in
│ │ ├── out
│ ├── service
│ └── domain
│ └── dto
├── infra
│ ├── controller
│ ├── dto
│ ├── gateway
│ │ ├── repository
│ │ └── entity
│ └── config
Package명:
- com.{ORG}.{ROOT}.{SERVICE}.biz
- com.{ORG}.{ROOT}.{SERVICE}.infra
예) com.unicorn.lifesub.mysub.biz, com.unicorn.lifesub.common
변수:
- ORG: 회사 또는 조직명
- ROOT: Root Project 명
- SERVICE: 서비스명으로 Root Project의 서브 프로젝트임
예시
com.unicorn.lifesub.mysub
├── biz
│ ├── dto
│ │ ├── CategoryResponse.java
│ │ ├── ServiceListResponse.java
│ │ ├── MySubResponse.java
│ │ ├── SubDetailResponse.java
│ │ └── TotalFeeResponse.java
│ ├── service
│ │ ├── FeeLevel.java
│ │ └── MySubscriptionService.java
│ ├── usecase
│ │ ├── in
│ │ │ ├── CancelSubscriptionUseCase.java
│ │ │ ├── CategoryUseCase.java
│ │ │ ├── MySubscriptionsUseCase.java
│ │ │ ├── SubscribeUseCase.java
│ │ │ ├── SubscriptionDetailUseCase.java
│ │ │ └── TotalFeeUseCase.java
│ │ └── out
│ │ ├── MySubscriptionReader.java
│ │ ├── MySubscriptionWriter.java
│ │ └── SubscriptionReader.java
│ └── domain
│ ├── Category.java
│ ├── MySubscription.java
│ └── Subscription.java
└── infra
├── MySubApplication.java
├── controller
│ ├── CategoryController.java
│ ├── MySubController.java
│ └── ServiceController.java
├── config
│ ├── DataLoader.java
│ ├── SecurityConfig.java
│ ├── SwaggerConfig.java
│ └── jwt
│ ├── JwtAuthenticationFilter.java
│ └── JwtTokenProvider.java
└── gateway
├── entity
│ ├── CategoryEntity.java
│ ├── MySubscriptionEntity.java
│ └── SubscriptionEntity.java
├── repository
│ ├── CategoryJpaRepository.java
│ ├── MySubscriptionJpaRepository.java
│ └── SubscriptionJpaRepository.java
├── MySubscriptionGateway.java
└── SubscriptionGateway.java
---
common 모듈 패키지 구조
├── common
├── dto
├── entity
├── config
├── util
└── exception
com.unicorn.lifesub.common
├── dto
│ ├── ApiResponse.java
│ ├── JwtTokenDTO.java
│ ├── JwtTokenRefreshDTO.java
│ └── JwtTokenVerifyDTO.java
├── config
│ └── JpaConfig.java
├── entity
│ └── BaseTimeEntity.java
├── aop
│ └── LoggingAspect.java
└── exception
├── ErrorCode.java
├── InfraException.java
└── BusinessException.java