1. 프로젝트 구조

도메인 중심으로 패키지를 구성합니다.

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

2. 3-Layer Architecture

각 레이어는 아래 역할만 담당하며, 레이어를 건너뛴 호출은 금지합니다.

레이어 클래스 역할
Presentation Controller 요청/응답 처리, 유효성 검증
Business Service 비즈니스 로직 처리
Data Access Repository DB 접근
Controller → Service → Repository

3. 네이밍 컨벤션

클래스

UserController
UserService / UserServiceImpl
UserRepository
User                   // Entity
UserRequestDto
UserResponseDto

메서드

행위 네이밍
단건 조회 getUser()
목록 조회 getUserList()
생성 createUser()
수정 updateUser()
삭제 deleteUser()

변수 / 필드