SPRING 기초(MVC) - Model, View, Controller

Hailey·2025년 3월 8일

SPRING

목록 보기
8/15
post-thumbnail

MVC (Model-View-Controller)

view - controller - service - DAO/repository - DB

view: 화면을 그려줌
controller: 요청을 받음. 값을 뭉쳐줌(가공처리)
model(Service, DAO/Repository,DTO) :
model 개념 안에 service, DTO, DAO/Repository 가 다 들어 있다!

DAO와 DTO의 차이

DAO( Data Access Object )

: 데이터베이스 연결 객체 ( 연결되어 CRUD하는 역할)

DTO( Data Transfer Object )

: 계층 간 데이터를 주고 받기 위한 객체 (aggregate같은 것?)

MVC 요청 처리 과정

1) Servlet vs Controller

그럼 여기서 궁금했던 것이 Servlet과 Controller 둘 다 클라이언트의 요청을 처리하는 것으로 중복되는 것처럼 보이는데, 왜 이 사진에서 dispatcherServlet과 Controller 두개 다 사용하는 것일까?

Spring MVC에서는 Servlet을 직접 사용하지 않지만, 요청을 처리하기 위해 Spring이 내부적으로는 DispatcherServlet을 사용한다!

2) DispatcherServlet의 역할

DispatcherServlet은 Spring MVC의 프론트 컨트롤러(Front Controller) 역할을 한다.
즉, 모든 HTTP 요청을 받아서 적절한 컨트롤러로 전달하는 역할을 수행한다.

1. 클라이언트가 요청을 보냄

사용자가 웹 브라우저에서 특정 URL을 요청

2. DispatcherServlet이 요청을 받음

모든 요청이 DispatcherServlet을 통해 처리됨

3. HandlerMapping을 통해 적절한 Controller 찾기

요청 URL에 맞는 컨트롤러를 찾아 Mapping
ex) /hello 요청이 HelloController의 hello()메서드로 연결됨

  • HandlerMapping의 역할은 아래에서 또 정리함

    4. Controller에서 비즈니스 로직 수행

    Service를 호출하여 데이터 처리
    DAO(Repository)를 사용하여 DB조회

    5. Controller가 DispatcherServlet에게 View 정보 반환

    컨트롤러는 처리결과를 Model에 담고 다시 DispatcherServlet에게 뷰(View)이름을 반환

    ex) "hello"라는 뷰 이름 반환

    6.View Resolver가 뷰를 찾아줌

    ViewResolver가 "hello"를 실제 뷰 파일(hello.html or hello.jsp)로 변환

    내부적으로 tomcat이 들어있다는게 이런 뜻이다!

    7. 최종적으로 클라이언트에게 응답 반환

    변환된 뷰를 클라이언트에게 응답으로 제공

3)HandlerMapping 이란?

사진 상에서는 HandlerMapping이라는 것이 있는데.., 막상 코드에는 없어서 정확히 HandlerMapping이라는 용어가 없어서 이게 정확히 무슨 동작을 하는지 헷갈렸다.

@RequestMapping("/*")

@RequestMapping("/*")는 HandlerMapping이 참고하는 매핑 정보다!
이것 자체가 HandlerMapping은 아니다.

HandlerMapping은 요청이 들어왔을 때 적절한 컨트롤러를 찾아준다!

Spring 내부에서 동작하기 때문에, 개발자가 직접 설정할 필요가 없다. Dispatcher가 내부적으로 사용한다.

4)Controller vs ViewResolver

controller가 알아서 변환해주는 것이 아니다!!!
실제로 변환해주는 것은 View Resolver!

@RequestMapping("/*")
public class MainController {

    @RequestMapping(value={"/","/main"})
    public String main() {
        return "main";
    }
}

controller는 뷰 이름(string)(ex."main")만 반환하고, ViewResolver가 이를 받아서 해당 뷰 파일(Ex. main.html)을 찾아서 렌더링한다!


Spring Core Container

: 스프링에서 가장 기본적이며 중요한 모듈 중 하나이다.

이 모듈은 스프링에서 객체의 생성과 관리를 담당한다. 스프링의 DI(Dependency Injection)과 IoC(Inversion of Control) 개념이 구현되어 있다.

이를 이용하여 코드의 재사용성과 유지보수성을 높일 수 있다.


제어의 역전(IoC, Inversion of Control)은 일반적인 프로그래밍에서, 프로그램의 제어 흐름 구조가 뒤바뀌는 것을 의미한다.

profile
럭키헤일리

0개의 댓글