Controller에 대한 고찰

김준석·2023년 1월 31일
0

Spring 공부를 할 때마다, Controller 어노테이션을 남발하곤 한다. 과연 내가 Controller에 대한 확실한 이해가 있냐고 물으면, 그렇지 않다. 단순한 기능만을 알 뿐 남에게 설명할 수 있을 만큼의 깊이 있는 이해를 하지 못했다. 그렇기 때문에 정리할 필요가 있다고 느껴져서 기록을 남긴다.

Controller란 무엇일까?


  • 흔히 말하는 MVC패턴 (Model, View, Controller)에서 Controller의 역할을 담당한다.
  • Controller는 Model이 데이터를 어떻게 처리할지 명시해주는 역할을 한다. Service단에서의 비즈니스 로직을 실행하라 메세지를 보내고 이 결과를 View에 전달해준다.
    즉, 사용자의 요청을 처리하고, 뷰에 모델을 넘겨주는 역할을 하는 것이다.

좀 더 자세히 파고들어 보자!


외부의 요청을 특정 컨트롤러로 맵핑하기 위한 Servlet인 Dispatcher Servlet은 ViewResolver를 통해 Controller가 반환한 뷰와 일치한 이름의 View를 찾아 사용자에게 반환하는 역할을 한다.

그럼 RestController는?


Controller에 @ResponseBody가 추가된 형태이다.

앞서 쓴 Controller은 view 를 반환한다고 하였다.
반면 RestController는 view가 아닌, 객체 데이터를 보내고 싶을 때 사용하는 것이다.

좀 더 자세히 파고들어 보자!

Controller는 ViewResolver에 의해 Controller 가 반환한 뷰와 일치한 이름의 View를 사용자에게 띄워준다고 했다.

  • 반면, RestController는 ViewResolver 대신에 HttpMessageConverter가 동작을 한다.

  • 이때 문자열의 경우와 객체의 경우 다른 Converter가 사용된다.

    이렇게 정리하고 돌아봤는데, Controller를 사용할 때 보통 view인 html파일을 resource 내의 templates에 넣어 작동시켰었다.

과거에는 Controller를 통하여 서버에서 데이터+ HTML 렌더링까지 담당하여 Server-Side Rendering을 수행하였다고 한다. 하지만 기술이 발전하고 데이터의 빠른 처리가 중요해지면서, 앞선 방법을 피하고 view 대신에 데이터를 제공해주는 RESTful한 방식을 많이 사용한다고 한다.


사실 지금까지 Controller,RestController가 각각 무엇을 전달하는지만 알고 있었다. 왜 Controller,RestController가 최근 많이 사용되고, 또 어떻게 동작하는지에는 무지했다.

지금보다 깊은 이해를 바탕으로 코드를 작성하면 좀 더 의미있을 것 같아서, 자주 쓰는 Annotation들을 정리해보려고 한다.

profile
기록하면서 성장하기!

0개의 댓글