인프런 커뮤니티 질문&답변

JMJ님의 프로필 이미지

작성한 질문수

자바와 스프링 부트로 생애 최초 서버 만들기, 누구나 쉽게 개발부터 배포까지! [서버 개발 올인원 패키지]

MVC와 API의 차이점

작성

·

581

0

안녕하세요 강사님!!

다름이 아니라 공부를 하다가 MVC와 API의 차이점(?)에 대해 알아보게 되었습니다!

그래서 내린 결론이

Spring MVC구조의 @Controller는 컨트롤러의 리턴값이 ViewResolver에 의해 해석되어서 특정 View가 html응답으로 전송된다.

반면 REST API구조의 @RestController에 의한 호출은 View를 리턴하는 것이 목적이 아닌, 데이터를 전송하는 것을 목적으로 응답이 전송되어 진다.

라고 내렸습니다.

첫번째로, 위에서 제가 내린 결론이 맞는 말인지와

두번째로, 그럼 MVC를 쓰는 경우와 API를 쓰는 경우가 언제인지가 궁금합니다.

제가 아직 개념이 부족해서 그런건지는 몰라도 MVC를 쓰면 프론트엔드의 역할이 없어지는게(?) 아닌가 하는 착각이 들어서...

답변 부탁드리겠습니다!!

답변 1

1

최태현님의 프로필 이미지
최태현
지식공유자

안녕하세요 JMJ님! 🙂 정말 좋은 질문이세요~ 👍

상당 부분 맞게 이해하셨는데요, 살짝 다른 부분이 있습니다!

바로 우리가 만든 REST API 역시 스프링 MVC 프레임워크를 동일하게 사용하고 있다는 거에요!

 

살짝 긴 내용인데 최대한 이해하기 쉽게 설명해 보자면 다음과 같습니다!

  • 원래 "웹 서버"는 서버에서 "화면 (즉, HTML)" 자체를 사용자에게 전달하는 역할을 수행해 왔습니다.

  • 예시로, 아래와 같은 '템플릿'을 만들어 놓고 '템플릿'에 들어가는 값들만 바꿔서 사용자에게 보여주는 거에요.

     

    <p>
     {name}님 방문을 환영합니다!
    </p>
  • 이때 {name}에 들어가는 값을 Controller가 처리해서 Model에 담고, 이 템플릿(= View) 을 사용해서 유저에게는

    최태현님 방문을 환영합니다! 라는 글자가 보이는거죠.

 

  • 하지만, 2010년대 중반이 넘어가며, ajax 기술과 react.js 같은 프론트엔드 기술의 발전, AOS / IOS와 같은 "앱"이라는 애플리케이션이 새로 생겨나며 기술의 패러다임이 약간 변화했습니다.

  • 위와 같은 템플릿을 만들어 놓는게 아니라, JS 코드를 이용해 REST API를 호출하고, 그 데이터를 처리하는 방식으로 바뀐 것이죠.

  • 그렇게 하면 훨씬 더 유려한 프론트엔드 라이브러리를 사용할 수 있을 뿐만 아니라, 앱에서도 REST API를 동일하게 사용해 서버를 공통적으로 활용할 수 있게 됩니다.

  • 예를 들면 아래와 같은 느낌으로 프론트엔드 코드가 바뀐거에요! (동작하는 코드는 아니고, 예시 코드입니다 🙂)

<script>
  ajax.get("https://xxx-api.com/name")
    .success(res => 
      id가 welcome-message에 다음과 같은 문자열을 넣는다
      res.name님 방문을 활용합니다
    )
    .error(err => ...)
</script>
<p id="welcome-message"></p>

 

이런 경우는 스프링 입장에서는 Controller가 바로 응답을 반환하게 됩니다. (우리가 이런 API를 만들어보았죠!) MVC를 사용하긴 하지만, Model과 View를 활용하는 방식이 아닌겁니다.

 

즉, 한 줄 요약 드려보면, REST API를 만들더라도 스프링 MVC를 사용하지만, Model / View / Controller 중 Controller만 사용한다! 라고 말씀드릴 수 있습니다.

 

 

그렇다면 언제 Model + View + Contoller를 모두 사용하고, 언제 Controller만 사용 (= REST API 사용) 할까요? 몇 가지 기준이 있겠습니다만, 아래와 같은 고민을 하게 될 수 있습니다.

  • 프론트엔드 코드를 지금 혹은 추후 별도로 운용할 것인가

    • Yes -> REST API

    • No -> 템플릿 엔진

  • 지금 혹은 추후 "안드로이드 / IOS 앱"도 개발할 것인가?

    • YES -> REST API

    • No -> 템플릿 엔진

 

마지막으로 MVC를 사용하면 프론트엔드의 역할(?)이 없어지는게 맞습니다!

물론 템플릿 엔진을 개발할 때 프론트엔드의 도움을 받긴 하겠죠! 그곳에 css와 html이 들어가닌 하니까요!

하지만 모던한 의미의 프론트 엔드 (react, vue 등) 기술을 사용하지 않게 됩니다.

 

답변이 도움이 되었으면 좋겠습니다.

감사합니다! 🙏

JMJ님의 프로필 이미지
JMJ
질문자

와 정말 감사합니다. 이해가 한 번에 되었네요!!! 항상 강의 잘 듣고 있습니다~~

JMJ님의 프로필 이미지
JMJ
질문자

아 죄송한데 하나만 더 질문할게 있는데,

제가 그럼 프론트엔드 기술 (react, vue 등)을 모르는데 혼자 화면까지 나오는 프로젝트를 진행하고 싶다면 SSR인 템플릿 엔진을 이용한 MVC패턴으로 개발하는 게 더 나을까요??

최태현님의 프로필 이미지
최태현
지식공유자

아이고 얼마든지 질문 주셔도 괜찮습니다! 🙂

https://www.inflearn.com/questions/1263423/mvc-vs-api

에서 질문 주신 것과 동일해서 여기서 답변 드리겠습니다. 감사합니다! 🙏

JMJ님의 프로필 이미지

작성한 질문수

질문하기