도메인 중심으로 패키지를 구성합니다.
src/main/java/com/example/project/
├── domain/
│ ├── user/
│ │ ├── controller/
│ │ ├── service/
│ │ ├── repository/
│ │ ├── entity/
│ │ ├── dto/
│ │ └── exception/
│ │ └── UserErrorCode.java
│ ├── order/
│ │ ├── controller/
│ │ ├── service/
│ │ ├── repository/
│ │ ├── entity/
│ │ ├── dto/
│ │ └── exception/
│ │ └── OrderErrorCode.java
│ └── product/
│ ├── controller/
│ ├── service/
│ ├── repository/
│ ├── entity/
│ ├── dto/
│ └── exception/
│ └── ProductErrorCode.java
├── global/
│ ├── config/
│ ├── exception/
│ │ ├── ErrorCode.java // 공통 인터페이스
│ │ ├── GlobalErrorCode.java // 전역 에러 코드
│ │ ├── BusinessException.java
│ │ └── GlobalExceptionHandler.java
│ ├── response/
│ └── util/
└── ProjectApplication.java
각 레이어는 아래 역할만 담당하며, 레이어를 건너뛴 호출은 금지합니다.
| 레이어 | 클래스 | 역할 |
|---|---|---|
| Presentation | Controller |
요청/응답 처리, 유효성 검증 |
| Business | Service |
비즈니스 로직 처리 |
| Data Access | Repository |
DB 접근 |
Controller → Service → Repository
UserController
UserService / UserServiceImpl
UserRepository
User // Entity
UserRequestDto
UserResponseDto
| 행위 | 네이밍 |
|---|---|
| 단건 조회 | getUser() |
| 목록 조회 | getUserList() |
| 생성 | createUser() |
| 수정 | updateUser() |
| 삭제 | deleteUser() |
usrNm ❌ → userName ✅)