이전 리팩토링인 온라인 도서관 SpringMvc 아키텍쳐로 리팩토링 회고에서 FrontContoller -> SpringMvc로 리팩토링 했지만, 여전히 뷰 템플릿은 JSP를 사용중이었다. 보다 스프링에서 권장하는 뷰 템플릿인 Thymeleaf(타임리프)로 리팩토링을 해봤다.
주요 이슈 및 개선사항
프로젝트 구조
직접 만든 Response를 사용하지 않으니, 프로젝트 구조가 조금 더 깔끔해졌다. 또한, 타임리프는 webapp 이라는 디렉토리를 사용하지 않고, resoures/ 디렉토리를 사용하여 좀 더 읽기 쉬운 프로젝트 구조가 되었다.
이전 프로젝트 구조
├── java
│ └── com
│ └── weblibrary
│ ├── AppConfig.java
│ ├── ServletInitializer.java
│ ├── WebLibraryApplication.java
│ ├── core
│ │ ├── HandlerAdapter.java
│ │ ├── adapter
│ │ │ ├── ForwardControllerAdapter.java
│ │ │ ├── JsonResponseControllerAdapter.java
│ │ │ └── RedirectControllerAdapter.java
│ │ ├── controller
│ │ │ ├── Controller.java
│ │ │ ├── ForwardController.java
│ │ │ ├── FrontControllerServlet.java
│ │ │ ├── JsonResponseController.java
│ │ │ ├── RedirectController.java
│ │ │ └── dto
│ │ │ └── response
│ │ │ ├── ErrorResponse.java
│ │ │ ├── JsonResponse.java
│ │ │ └── RentResponse.java
│ │ └── view
│ │ ├── ModelView.java
│ │ └── View.java
│ └── domain
│ ├── admin
│ │ ├── controller
│ │ │ ├── AdminBookController.java
│ │ │ ├── AdminPageController.java
│ │ │ ├── AdminUsersController.java
│ │ │ └── dto
│ │ │ └── RoleNameDto.java
│ │ ├── model
│ │ │ ├── Role.java
│ │ │ └── RoleType.java
│ │ ├── repository
│ │ │ ├── MemoryUserRoleRepository.java
│ │ │ └── UserRoleRepository.java
│ │ └── service
│ │ └── AdminService.java
│ ├── book
│ │ ├── model
│ │ │ ├── Book.java
│ │ │ └── dto
│ │ │ ├── ModifyBookInfo.java
│ │ │ └── NewBookInfo.java
│ │ ├── repository
│ │ │ ├── BookRepository.java
│ │ │ └── MemoryBookRepository.java
│ │ └── service
│ │ └── BookService.java
│ └── user
│ ├── controller
│ │ ├── AccessDeniedController.java
│ │ ├── IndexController.java
│ │ ├── JoinController.java
│ │ ├── LoginController.java
│ │ └── UserBookController.java
│ ├── model
│ │ └── User.java
│ ├── repository
│ │ ├── MemoryUserRepository.java
│ │ └── UserRepository.java
│ └── service
│ └── UserService.java
├── resources
│ ├── application.properties
│ ├── static
│ └── templates
└── webapp
├── WEB-INF
│ └── views
│ ├── access-denied.jsp
│ ├── admin
│ │ └── index.jsp
│ └── home
│ ├── index.jsp
│ └── join.jsp
└── js
├── admin.js
├── manageBook.js
├── manageMember.js
├── rent.js
└── util.js
개선된 프로젝트 구조
├── java
│ └── com
│ └── weblibrary
│ ├── ServletInitializer.java
│ ├── WebLibraryApplication.java
│ ├── core
│ │ └── controller
│ │ └── AccessDeniedController.java
│ └── domain
│ ├── admin
│ │ ├── controller
│ │ │ ├── AdminBookController.java
│ │ │ ├── AdminPageController.java
│ │ │ ├── AdminUsersController.java
│ │ │ └── dto
│ │ │ └── RoleNameDto.java
│ │ ├── model
│ │ │ ├── Role.java
│ │ │ └── RoleType.java
│ │ ├── repository
│ │ │ ├── MemoryUserRoleRepository.java
│ │ │ └── UserRoleRepository.java
│ │ └── service
│ │ └── AdminService.java
│ ├── book
│ │ ├── model
│ │ │ ├── Book.java
│ │ │ └── dto
│ │ │ ├── ModifyBookInfo.java
│ │ │ └── NewBookInfo.java
│ │ ├── repository
│ │ │ ├── BookRepository.java
│ │ │ └── MemoryBookRepository.java
│ │ └── service
│ │ └── BookService.java
│ └── user
│ ├── controller
│ │ ├── AccountController.java
│ │ ├── IndexController.java
│ │ └── UserBookController.java
│ ├── model
│ │ └── User.java
│ ├── repository
│ │ ├── MemoryUserRepository.java
│ │ └── UserRepository.java
│ └── service
│ └── UserService.java
└── resources
├── application.properties
├── static
│ └── js
│ ├── admin.js
│ ├── manageBook.js
│ ├── manageMember.js
│ └── rent.js
└── templates
├── access-denied.html
├── admin
│ └── index.html
├── home
│ ├── index.html
│ └── join.html
└── js