패키지 구조
기본 패키지
com.{회사명}.{프로젝트명}
업무 패키지 구조
업무 패키지 아래에 controller / service / mapper / vo 4개 구조를 사용한다.
com.{회사명}.{프로젝트명}
├── {업무명}/
│ ├── controller/ # Spring MVC 컨트롤러
│ ├── service/ # 비즈니스 로직
│ ├── mapper/ # MyBatis Mapper 인터페이스
│ └── vo/ # Value Object (요청/응답)
├── common/ # 공통 모듈
│ ├── config/ # 설정 클래스 (@Configuration)
│ ├── exception/ # 예외 클래스
│ ├── util/ # 유틸리티 클래스
│ └── vo/ # 공통 VO (GeneralVO 등)
└── {프로젝트명}Application.java
파일 배치 예시
src/main/java/com/{회사명}/{프로젝트명}/
├── user/
│ ├── controller/
│ │ └── UserController.java
│ ├── service/
│ │ └── UserService.java
│ ├── mapper/
│ │ └── UserMapper.java
│ └── vo/
│ └── UserVo.java
├── board/
│ ├── controller/
│ │ └── BoardController.java
│ ├── service/
│ │ └── BoardService.java
│ ├── mapper/
│ │ └── BoardMapper.java
│ └── vo/
│ └── BoardVo.java
└── common/
├── config/
├── exception/
├── util/
└── vo/
└── GeneralVO.java
액션명 정의표
Java 메서드명과 MyBatis Mapper ID는 아래 규칙을 따른다:
| 성격 | Java 메서드명 | MyBatis ID |
|---|---|---|
| 조회 | get | get |
| 목록조회 | getList | getList |
| 전체 수 | getTtlCnt | getTtlCnt |
| 데이터 수 | getCnt | getCnt |
| 등록 | reg | reg |
| 수정 | upt | upt |
| 삭제 | del | del |
| 저장 (등록+수정) | set | set |
| 취소 | cancel | - |
| 확인 | confirm | - |
레이어 책임
| 레이어 | 위치 | 책임 |
|---|---|---|
| Controller | controller/ | HTTP 요청/응답 처리, 파라미터 검증 위임 |
| Service | service/ | 비즈니스 로직, 트랜잭션 관리 |
| Mapper | mapper/ | MyBatis SQL 매핑 인터페이스 |
| VO | vo/ | 데이터 전달 객체 |
의존성 방향
Controller → Service → Mapper → DB
Controller → VO (사용)
Service → VO (사용)
- Controller는 Service만 의존한다
- Service끼리 의존은 최소화한다
- VO는 어느 레이어에서나 사용 가능
체크리스트
- [ ] Controller에 비즈니스 로직 없음
- [ ] Service에 HTTP 관련 코드 없음 (
HttpServletRequest등) - [ ] 업무별
controller/service/mapper/vo4개 패키지 구성 - [ ] 공통 기능은
common/패키지에 위치