온라인 도서관 FrontControllerServlet 아키텍쳐 회고

FrontControllerServlet 기반 아키텍쳐

김영한 선생님 스프링 mvc 1편의 FrontControllerServlet을 기반으로 기능을 만들고, 확장하고, 프로젝트 구조를 개선했다.

주요 기능은 이 단계에서 완성해두었고, 기능 확장 및 springmvc, db등 리팩토링은 계속 해나갈 예정이다.

개선한 주요 이슈 및 아티클

프로젝트 구조

DDD기반 프로젝트 구조를 위해, 프로젝트 구조를 개선했다. 크게 core, domain 패키지로 나누어 관심사를 분리했다. 각 도메인에 대한 설명은 온라인 도서관 프로젝트 소개글을 참고하면 된다.

각 도메인에서 사용할 컨트롤러 계층, 모델 계층, 서비스 계층을 한 패키지에서 사용하니, 확장과 개발이 편리했다.

├── 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

아쉬운 점

  • 기능을 확장했으나, (하위 uri 사용 컨트롤러, 다중 컨트롤러 등록) 다소 무식한 방법으로 확장했다고 생각한다. (우선 컨트롤러를 돌리고, null을 반환하는 방식)
  • / 경로가 아닌 /site 경로를 사용하는 FrontController Root 디렉토리 탐색 문제가 있다.

하지만 우선은 springmvc를 학습하기 위한 목적이었으므로, 넘어가기로 한다.

댓글

개발자  김철준

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

주요 프로젝트