Spring + JSP 프로젝트 패키지 폴더 구조 설계
Spring 프로젝트 패키지 설계
Java 폴더 구조
src.main.java.com.도메인명
 ├── global 또는 common // 공통
 │   ├── config // 전역 설정
 │   │   ├── AppConfig.java
 │   │   ├── WebConfig.java // 인터셉터 등록
 │   │   ├── DataSourceConfig.java
 │   │   └── SecurityConfig.java
 │   │   └── interceptor
 │   │       ├── AuthInterceptor.java
 │   │       └── LoggingInterceptor.java
 │   │
 │   ├── exception // 에러 처리
 │   │   ├── GlobalExceptionHandler.java
 │   │   ├── CustomException.java
 │   │   └── ErrorResponse.java
 │   │
 │   └── util // 유틸
 │       ├── DateUtils.java
 │       └── StringUtils.java
 │
 ├── user // 비즈니스 도메인 폴더 1
 │   ├── domain
 │   │   └── User.java
 │   │
 │   ├── dto
 │   │   ├── UserRequestDto.java
 │   │   └── UserResponseDto.java
 │   │
 │   ├── mapper
 │   │   └── UserMapper.java
 │   │
 │   ├── repository // mapper 사용 시 DAO 미사용
 │   │   └── UserDao.java
 │   │
 │   ├── service
 │   │   ├── UserService.java
 │   │   └── impl
 │   │       └── UserServiceImpl.java
 │   │
 │   └── controller
 │       └── UserController.java
 │
 └── post // 비즈니스 도메인 폴더 2
     ├── domain
     │   └── Post.java
     │
     ├── dto
     │   ├── PostRequestDto.java
     │   └── PostResponseDto.java
     │
     ├── mapper
     │   └── PostMapper.java
     │
     ├── repository // mapper 사용 시 DAO 미사용
     │   └── PostDao.java
     │
     ├── service
     │   ├── PostService.java
     │   └── impl
     │       └── PostServiceImpl.java
     │
     └── controller
         └── PostController.java
스프링 MVC 구조를 도메인 단위로 분리하여 DDD (Domain-Driven Design) 원칙을 반영한 설계입니다.
파일이 많아지면 각 폴더 내부에서 역할/기능 단위로 세분화하는 것도 좋습니다.
데이터 객체 설계 종류
| Entity 또는 VO (Value Object) | 
        DB 테이블과 매핑되는 비즈니스 도메인 핵심 객체 비즈니스 로직 포함 가능 JPA 환경에서는 Entity 사용 JDBC, MyBaties 환경에서는 VO 사용  | 
    
| DTO (Data Transfer Object) | 
        Controller ↔ Service 간 데이터 전달용 객체 주로 Request DTO, Response DTO 분리 Entity 또는 VO 데이터 직접 노출을 막기 위해 사용  | 
    
| Mapper | DTO ↔ Entity 또는 VO 변환 담당 객체 | 
| DAO (Data Access Object) | 
        JDBC, MyBaties에서 사용되는 데이터베이스 접근 전용 객체 스프링에서는 @Repository로 구현 JPA 환경에서는 Repository가 DAO 역할 대체 가능 MyBatis 환경에서는 Mapper 인터페이스가 DAO 역할 대체 가능  | 
    
JSP 기반 프론트 구조
src.main.webapp
└── WEB-INF
    ├── views // JSP 페이지 폴더
    │    ├── common // 공통 JSP (header, footer, layout 등)
    │    ├── user // 비즈니스 도메인 폴더 1
    │    │    ├── list.jsp
    │    │    ├── detail.jsp
    │    │    └── form.jsp
    │    └── post // 비즈니스 도메인 폴더 2
    │         ├── list.jsp
    │         ├── detail.jsp
    │         └── write.jsp
    │
    ├── layouts // 템플릿 레이아웃 (Tiles, Sitemesh, include 기반)
    ├── jspf // JSP fragment (공통 include용)
    ├── error // 에러 페이지 (404.jsp, 500.jsp)
    └── web.xml // 디스패처 설정
JSP 파일은 보안상 외부에서 접근할 수 없는 WEB-INF 폴더에 위치해야 합니다.
views 폴더는 도메인별로 분리하고, 사용자/메뉴별 하위 폴더를 생성하는 것도 좋습니다.