[Spring] MVC

zini9188·2023년 2월 13일
0

Spring

목록 보기
14/33

MVC란 Model + View + Controller의 약자로 비즈니스 로직과 인터페이스를 나눠서 개발하는 것을 의미한다.

Spring MVC 내부에서 서블릿을 기반으로 웹 애플리케이션이 동작한다.

서블릿이란?

Servlet은 클라이언트의 요청을 처리하도록 특정 규약에 맞춰 Java 코드로 작성하는 클래스 파일이다. 아파치 톰캣은 이러한 서블릿들이 웹 애플리케이션으로 실행이 되도록 해주는 서블릿 컨테이너중 하나이다.

Model

클라이언트에게 응답으로 돌려주는 작업의 처리 결과 데이터

View

모델 데이터를 이용해서 웹 브라우저 같은 클라이언트 애플리케이션의 화면에 보여지는 리소스를 제공하는 역할을 한다.

View의 형태는 아래 세 가지로 나뉜다.

HTML 페이지의 출력

  • 기본적인 HTML 태그로 구성된 페이지에 모델 데이터를 채워넣어 최종적인 HTML 페이지를 구성해 클라이언트에 전송

  • Thymeleaf, FreeMarker, JSP + JSTL, Tiles 등

PDF, Excel 등의 문서 형태로 출력

  • 모델 데이터를 가공해 문서를 만들어 클라이언트에 전송

  • 문서 내 데이터가 동적으로 변경되어야 하는 경우에 사용

XML, JSON 등 특정 형식의 포맷으로 변환

  • 모델 데이터를 특정 프로토콜 형태로 변환해 변환된 데이터를 클라이언트에 전송

  • 특정 형식의 데이터를 전송하고, 프론트엔트에서 해당 데이터를 기반으로 HTML 페이지를 만듦

  • 프론트, 백엔드의 구분이 명확해져 개발 및 유지보수가 상대적으로 용이하며 프론트엔드에서 비동기 클라이언트 애플리케이션을 만들 수 있음

public class Coffee{
	// 커피 정보
}

public static void main(String[] args){
	Coffee coffee = new Coffee("아메리카노", "Americano", 3000);
    Gson gson = new Gson();
    String jsonString = gson.toJson(coffee);
}
코드 실행 결과
=============================================================
{"korName":"아메리카노","engName":"Americano","price":3000}

Contoller

클래스 위에 @RestController 어노테이션을 사용하여 지정 가능하다.

클라이언트 측의 요청을 직접적으로 전달 받는 엔드 포인트로 모델과 뷰의 중간에서 상호 작용 역할을 한다.

@RestController
@RequestMapping("/v1/coffee")
public class CoffeeController {                 
    private final CoffeeService coffeeService;

    CoffeeController(CoffeeService coffeeService) {
        this.coffeeService = coffeeService;
    }

    @GetMapping("/{coffee-id}") 
    public Coffee getCoffee(@PathVariable("coffee-id") long coffeeId) {
        return coffeeService.findCoffee(coffeeId);
    }
}

위 코드에서는 @GetMapping 어노태이션을 통해 클라이언트의 요청을 수신하고 CoffeeService의 findCoffee() 메서드로 비즈니스 로직을 처리하여 모델 데이터를 클라이언트에게 반환한다.

MVC의 동작 방식과 구성 요소

  1. 클라이언트가 요청 데이터 전송

  2. 컨트롤러가 요청 데이터 수신

  3. 비즈니스 로직 처리

  4. 모델 데이터 생성

  5. 컨트롤러에게 모델 데이터 전달

  6. 컨트롤러가 뷰에게 모델 데이터 전달

  7. 뷰가 응답 데이터 생성

DispatcherServlet는 다른 구성 요소들에게 위임을 하는 역할을 한다.

DispatcherServlet가 애플리케이션의 가장 앞단에 배치되어 다른 구성요소들과 상호작용하며 클라이언트의 요청을 처리하는 패턴을 Front Controller Pattern이라고 한다.

profile
백엔드를 지망하는 개발자

0개의 댓글