[기초] MVC패턴과 REST API

서지민·2024년 4월 21일

기초 정리

목록 보기
5/6
post-thumbnail

이전에 각각 REST API와 MVC패턴에 관해 포스트를 올렸었고, 이번에 캡스톤디자인 하면서 마침 두 개념을 모두 사용하기에 이번 포스트를 작성하게 되었다.

PS. 필자가 스프링진영이기에 MVC패턴 을 이용하는 SpringMVC를 기반으로 설명할 예정이다

1. MVC패턴 & REST 되짚어보기

MVC 패턴

MVC 패턴 (Model-View-Controller)

  • MVC 패턴은 애플리케이션을 구성하는 디자인 패턴
  • 이 패턴은 애플리케이션을 세 부분으로 구분하여, 각 부분의 역할을 명확하게 한다.
  • Model: 데이터를 담당
  • View: 사용자에게 보이는 화면을 담당
  • Controller: 사용자의 입력을 받아 모델과 뷰를 업데이트, 둘의 중간 다리

SpringMVC

  • 스프링 MVC는 자바 기반의 웹 프레임워크인 스프링 프레임워크의 일부
  • 웹 애플리케이션을 구축하기 위한 모델-뷰-컨트롤러(MVC) 디자인 패턴을 구현

REST API

REST

  • REST는 웹 서비스를 구현하기 위한 아키텍처 스타일
  • REST는 간단하고 직관적인 아키텍처 스타일로, 웹 상에서 클라이언트와 서버 간의 상호작용을 위한 방법을 제공
  • REST API를 사용하여 데이터의 CRUD 작업을 수행할 수 있으며,
    이는 HTTP 메소드인 POST, GET, PUT, DELETE에 대응
  • 특징
    • Stateless Communication: 서버는 클라이언트의 상태를 저장하지 않으므로 각 요청은 독립적
    • Uniform Interface: 표준 HTTP 메소드를 사용하여 리소스에 액세스
    • Cacheable: 응답은 캐싱이 가능
    • Client-Server Architecture: 클라이언트와 서버는 독립적으로 개발할 수 있으며, 서로 간의 의존성이 낮다.

REST API는 그 원칙에 따라 구현된 구체적인 인터페이스를 의미

차이점

사실 처음에는 이 두 개념이 하나의 서버에 공존할 수 없다고 생각했었다.
왜 그랬는지는 잘 모르겠으나, 아무튼 그렇게 생각했었다.

그러다 각 개념들에 대해 자세히 알아 본뒤 내가 잘못 생각했었단 걸 깨달았다.

REST API와 Spring MVC는 모두 웹 애플리케이션 개발에 사용되는 중요한 개념이지만 그 둘에게 차이점이 존재하기에 차이점에 대해 알아보자

1. 목적

  • REST API는 웹 서비스의 인터페이스로, 클라이언트와 서버 간의 통신을 위해 설계
  • REST API의 주된 목적은 결국 리소스의 효율적인 공유와 조작을 위함이다.
  • MVC 패턴은 애플리케이션의 구조를 정의하는 디자인 패턴으로, 애플리케이션의 코드 구조와 유지보수성을 개선하기 위해 사용

2. 사용분야

  • REST API는 주로 클라이언트와 서버가 통신하는 웹 서비스 개발에 사용
  • MVC 패턴은 웹 애플리케이션 뿐만 아니라, 다양한 소프트웨어 개발 프로젝트에서 사용가능

3. 동작

  • REST API

    REST API는 뷰를 반환하는 것이 아닌 클라이언트의 요청이 들어오면 MessageConverter를 통해 application/json이나 text/plain등 알맞은 형태로 반환해준다. 즉 데이터를 보내주지 화면을 보내주지 않는다.

  • SpringMVC

    SpringMVC는 클라이언트의 요청이 들어오면 ViewResolver를 통해 클라이언트에게 text/html , jsp 타입 혹은 파일의 경로 타입의 view 응답을 보낸다.

4. 정리

정말정말 간단하게 말하자면 이 둘은 목적과 사용 분야에 차이가 있고, 반환하는 값이 다르다.

SpringMVC와 REST API

그렇다면 처음에 갖고 있던 의문 이 둘은 같이 사용할 수 있을까?
결론부터 말하자면 그렇다 라고 할 수 있다.

Spring MVC는 RESTful 웹 서비스를 개발하기 위한 도구로도 활용될 수 있다.

MVC패턴 중 뷰의 기능을 제외한 나머지 서비스와 컨트롤러의 기능은 그대로 사용하고 마지막 반환값을 HTTP응답에 바로 넘겨주면 되는 것이다.

그리고 그것을 쉽게 만들어주는 것이 바로 @RestController이다.
@RestController에는 @ResponseBody가 들어있는데 이 @ResponseBody가 컨트롤러의 반환 값을 HTTP응답 바디에 넣어주는 역할을 한다.

만약 내가 만들려는 것이 화면까지 백엔드 서버에서 보여주는 웹어플리케이션이라면 @Controller를 쓰는 SpringMVC를 적용하여 직접 뷰를 반환하게 하면 되고,
내가 만드려는 것이 데이터를 주고받고 가공하는 REST API서버라면 @RestController를 사용하여 데이터를 주고받게 만들자.

profile
효율 이전에 노력의 축적이 필요하다

0개의 댓글