패키지 구조

프로젝트 패키지 구성 및 레이어드 아키텍처 규칙

마지막 수정: 2026-05

패키지 구조

기본 패키지

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
조회getget
목록조회getListgetList
전체 수getTtlCntgetTtlCnt
데이터 수getCntgetCnt
등록regreg
수정uptupt
삭제deldel
저장 (등록+수정)setset
취소cancel-
확인confirm-

레이어 책임

레이어위치책임
Controllercontroller/HTTP 요청/응답 처리, 파라미터 검증 위임
Serviceservice/비즈니스 로직, 트랜잭션 관리
Mappermapper/MyBatis SQL 매핑 인터페이스
VOvo/데이터 전달 객체

의존성 방향

Controller → Service → Mapper → DB
Controller → VO (사용)
Service    → VO (사용)
  • Controller는 Service만 의존한다
  • Service끼리 의존은 최소화한다
  • VO는 어느 레이어에서나 사용 가능

체크리스트

  • [ ] Controller에 비즈니스 로직 없음
  • [ ] Service에 HTTP 관련 코드 없음 (HttpServletRequest 등)
  • [ ] 업무별 controller/service/mapper/vo 4개 패키지 구성
  • [ ] 공통 기능은 common/ 패키지에 위치