기존에, FrontControllerServlet 아키텍쳐에서 SpringMvc 아키텍쳐로 전환하면서, 프로젝트 구조를 도메인 주도 설계 구조로 전환한 바 있다.
하지만, 이를 한 번 더 도메인 주도 설계에 맞게 구조를 변경하였다. domain 패키지는 웹 기술(스프링, 타임리프 등)이 변경되어도, 변경되지 않도록, controller, validation 패키지를 web 이라는 패키지 아래로 이동시켰다.
2차 변경된 프로젝트 구조
├── java
│ └── com
│ └── weblibrary
│ ├── ServletInitializer.java
│ ├── TestInit.java
│ ├── WebLibraryApplication.java
│ ├── domain
│ │ ├── admin
│ │ │ ├── model
│ │ │ │ ├── Role.java
│ │ │ │ └── RoleType.java
│ │ │ ├── repository
│ │ │ │ ├── MemoryUserRoleRepository.java
│ │ │ │ └── UserRoleRepository.java
│ │ │ └── service
│ │ │ └── AdminService.java
│ │ ├── book
│ │ │ ├── exception
│ │ │ │ └── NotFoundBookException.java
│ │ │ ├── model
│ │ │ │ ├── Book.java
│ │ │ │ └── dto
│ │ │ │ ├── BookRentDto.java
│ │ │ │ ├── ModifyBookDto.java
│ │ │ │ └── NewBookDto.java
│ │ │ ├── repository
│ │ │ │ ├── BookRepository.java
│ │ │ │ └── MemoryBookRepository.java
│ │ │ └── service
│ │ │ └── BookService.java
│ │ └── user
│ │ ├── dto
│ │ │ ├── JoinUserDto.java
│ │ │ ├── LoginUserDto.java
│ │ │ └── SetUserDto.java
│ │ ├── model
│ │ │ └── User.java
│ │ ├── repository
│ │ │ ├── MemoryUserRepository.java
│ │ │ └── UserRepository.java
│ │ └── service
│ │ └── UserService.java
│ └── web
│ ├── AccessDeniedController.java
│ ├── WebConfig.java
│ ├── admin
│ │ └── controller
│ │ ├── AdminBookController.java
│ │ ├── AdminPageController.java
│ │ └── AdminUsersController.java
│ ├── book
│ │ └── validation
│ │ ├── BookAddValidator.java
│ │ ├── BookModifyValidator.java
│ │ ├── BookRentValidator.java
│ │ └── BookUnRentValidator.java
│ ├── exception
│ │ ├── InterceptorExceptionHandler.java
│ │ └── UnauthorizedAccessException.java
│ ├── interceptor
│ │ ├── RestAdminCheckInterceptor.java
│ │ ├── RestLoginCheckInterceptor.java
│ │ ├── SsrAdminCheckInterceptor.java
│ │ └── SsrLoginCheckInterceptor.java
│ ├── response
│ │ ├── ErrorResponse.java
│ │ └── JsonResponse.java
│ ├── user
│ │ ├── controller
│ │ │ ├── AccountController.java
│ │ │ ├── IndexController.java
│ │ │ └── UserBookController.java
│ │ └── validation
│ │ ├── JoinValidator.java
│ │ └── LoginValidator.java
│ └── validation
│ ├── FieldValidationHandler.java
│ └── ValidationUtils.java
└── resources
├── application.properties
├── errors.properties
├── messages.properties
├── messages_en.properties
├── static
│ ├── css
│ │ ├── access-denied.css
│ │ ├── admin.css
│ │ ├── bootstrap.min.css
│ │ ├── error.css
│ │ └── index.css
│ └── js
│ ├── book.js
│ ├── common.js
│ ├── manageBook.js
│ ├── manageMember.js
│ ├── rent.js
│ ├── user.js
│ └── util.js
└── templates
├── access-denied.html
├── admin
│ ├── book.html
│ ├── index.html
│ └── user.html
├── css
│ ├── access-denied.css
│ ├── bootstrap.min.css
│ └── index.css
├── home
│ ├── index.html
│ ├── join.html
│ └── login.html
└── layout
├── admin.html
└── common.html