JSP -> Thymeleaf로 리팩토링 회고

이전 리팩토링인 온라인 도서관 SpringMvc 아키텍쳐로 리팩토링 회고에서 FrontContoller -> SpringMvc로 리팩토링 했지만, 여전히 뷰 템플릿은 JSP를 사용중이었다. 보다 스프링에서 권장하는 뷰 템플릿인 Thymeleaf(타임리프)로 리팩토링을 해봤다.

github PR 바로가기

주요 이슈 및 개선사항

프로젝트 구조

직접 만든 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

댓글

개발자  김철준

백엔드 개발자 김철준의 블로그입니다.

주요 프로젝트