Spring MVC

2025. 6. 12. 17:12Java/Spring

  • 어플리케이션을 세 가지 영역, 즉 모델(Model), 뷰(View), 컨트롤러(Controller)로 구분하여 작업을 분리하는 웹 어플리케이션 개발 방법론
  • '로직과 화면을 분리'하는 스타일의 개발 방식인 모델 2 방식으로 처리
  • 서로 간의 결합도를 최소화하고 유지보수성을 높이며 개발의 효율성을 향상

주요 컴포넌트

  • DispatcherServlet
    • 클라이언트의 모든 Request를 우선적으로 받아 처리하는 서블릿
    • HandlerMapping에게 클라이언트의 요청을 처리할 Controller에 대한 검색을 요청
    • HandlerMapping으로부터 클라이언트 요청과 매핑되는 핸들러 객체를 다시 리턴
    • Request에 대해 실제 클라이언트의 요청을 어느 컨트롤러로 매핑시킬 것인지 배치하는 역할
  • HandlerAdapter
    • DispatcherServlet이 찾아낸 Controller의 Handler 메서드를 호출하는 역할
    • 다양한 방식의 Controller(예: @Controller 어노테이션, Controller 인터페이스)를 일관된 방식으로 처리
    • Controller 구현 방식에 상관없이 DispatcherServlet이 유연하게 Controller 호출 가능하도록 추상화된 인터페이스 제공
    • // Handler Adapter가 제공하는 단순한 인터페이스 public interface HandlerAdapter { // handler == Controller boolean supports(Object handler); // "이 핸들러 처리할 수 있어?" ModelAndView handle(..., Object handler); // "처리해줘!" }
  • HandlerInterceptor
    • Request가 Controller에 매핑되기 전 앞단에서 부가적인 로직을 추가
    • 여러 컨트롤러에서 같은 관심사를 갖고 반복되어 사용하는 코드를 제거하고, 다수의 컨트롤러에 동일한 기능을 제공
    • 주로 세션, 쿠키, 권한 인증 로직에 많이 사용
    • 해당 인터페이스는 preHandle(), postHandle(), afterCompletion() 이라는 세 메소드를 제공
  • Controller
    • 사용자의 요청과 Model과 View 사이에서 상호 작용을 관리하는 컴포넌트
    • Request에 대해 어떤 로직(Service)으로 처리할 것인지를 결정 및 호출
    • Service Bean을 스프링 컨테이너로부터 주입
  • ViewResolver
  • Service (Business Logic)
    • 알맞은 정보를 가공하는 과정 → 비즈니스 로직을 수행한다.
    • '비즈니스 로직을 수행'하고 데이터베이스에 접근하는 DAO를 이용해서 '결과값'을 받아온다.
  • Repository (Data Access)
    • Entity에 의해 생성된 DB에 접근하는 메서드에 대한 인터페이스
  • DB
  • Model
  • View

장점

  • 분리된 계층 구조를 통한 유지보수 및 확장성 향상
  • 느슨한 결합: 인터페이스를 통한 의존성 주입
  • 컴포넌트 기반 아키텍처로 높은 재사용성 및 테스트 용이성

참고자료

'Java > Spring' 카테고리의 다른 글

Spring Bean  (1) 2025.06.09