패키지 구조 표준 레이어드 아키텍처 패키지 구조 ├── {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