com.daall.howtoeat
├── domain # 핵심 도메인 모델 (Entity)
│ ├── user # 사용자 도메인
│ │ └── User.java
│ └── pt # 퍼스널 트레이닝 도메인
│ ├── Trainer.java
│ ├── PtMember.java
│ └── Gym.java
│
├── service # 서비스(클라이언트)용 기능
│ └── user
│ ├── UserService.java
│ └── UserController.java
│
├── admin # 관리자용 기능
│ └── user
│ ├── AdminUserService.java
│ └── AdminUserController.java
우리는 서비스 전반을 도메인 중심 + 요청 주체(서비스/어드민) 분리로 설계했다.
그 목적은 다음과 같다:
domain/
비즈니스의 핵심 모델을 정의하는 공간.
서비스나 어드민과 무관하게, 엔티티를 공유하며 독립적으로 동작할 수 있도록 구성.
service/
& admin/
요청 주체에 따라 기능을 분리.
service/
는 일반 사용자 대상의 API,
admin/
은 관리자 페이지에서 사용하는 API 전용으로 관리.
각 하위 도메인(user, pt 등)은 컨트롤러/서비스/레포지토리를 도메인 기준으로 분류.
관심사 분리 (Separation of Concerns)
도메인 로직과 애플리케이션 로직이 명확하게 분리된다.
확장성
user, pt 외에 다른 도메인 추가가 용이하며, 서비스/어드민 기능도 쉽게 확장 가능.
공통 도메인 재사용
User
, Gym
등 공통 도메인을 하나의 중심 축으로 사용함으로써 중복 없이 기능 확장 가능.