본문 바로가기

프로그래밍

스프링부트 - Controller란 무엇인가

스프링부트 Controller

Spring Boot - Controller

controller란 무엇인가?

  1. 사용자의 요청이 진입하는 지점(entry point)이며

  2. 요청에 따라 어떤 처리를 할지 결정해주며

    단, controller는 단지 결정만 해주고 실질적인 처리는 서비스(Layered Architecture)에서 담당한다.

  3. 사용자에게 View(또는 서버에서 처리된 데이터를 포함하는 View)를 응답으로 보내준다.

 

 

controller를 왜 쓰는가?

대규모 서비스로 갈수록 처리해야할 서비스들이 많아지는데, 이를 하나의 클래스에서 몰아 처리할 게 아니라 controller라는 중간 제어자 역할을 하는 것을 만들어서 A요청에 대한 것은 A-controller가 맡아 필요한 로직처리를 위한 서비스를 호출하게 된다.

 

controller는 MVC 패턴에 포함되는 것인데, Model View Controller의 역할에 따라 설계하고 코딩하면 주먹구구식으로 개발할 때보다 개발비용이나 유지보수비용이 대폭 줄어든다. 역할분담이 핵심이다.

 

 

controller를 어떻게 쓰는가?

사실 글로만 보면 이해가 안 된다.

 

몇 줄 안되지만, 컨트롤러를 역할을 조금 이해할 수 있는 코드를 보자.

 

QuestionController클래스에 속한 메소드 중 하나다.

QuestionController는 /questions로 시작하는 path에 반응하는데

  1. 사용자가 회원가입을 할 때 개인정보를 입력하고 회원가입버튼을 눌리면

  2. http://localhost:8080/questions 가 요청되며

  3. controller는 이를 인식하여 create()가 호출한다.

  4. create()는 리턴 값으로 redirect:/을 리턴한다.

    (내부적으로 DispatcherServlet에 전달할 때에는 ModelAndView 객체를 만들어 리턴해준다.)

     

그러면 어떻게 될까?

  1. Controller의 create메소드로부터 리턴된 View(+Model)에 대한 정보를 DispatcherServlet이 전달받는다.
  2. DispatcherServlet은 View에 해당하는 파일을 찾아서 Model과 결합하여 사용자에게 응답을 보낸다.

응답받은 사용자의 브라우저는 그것을 렌더링하여 사용자에게 보여준다.

 

조금 멀리왔지만, 결국 Controller의 역할은 요청에 따라 로직처리를 위한 분기를 담당하고 사용자에게 서버에서 처리된 데이터를 포함한 View를 리턴한다고 보면 된다.