관리 메뉴

Rootable의 개발일기

Controller와 RestController 본문

Spring

Controller와 RestController

dev-rootable 2023. 4. 26. 17:46

 📌 @Controller

 

Spring 이 처음 로딩될 때, Spring Container 라는 공간이 생긴다. 그리고 이 공간에 @Controller 가 선언된 객체들을 

넣어두고 관리한다. 이것을 스프링 컨테이너에서 스프링 빈이 관리된다라고 한다.

 

  • Web Application에서 첫 번째 진입점
  • 사용자의 요청이 진입하는 지점
  • 사용자 요청을 받아서 파라미터를 검증(요청 스펙을 검증)
  • 요청에 따라 어떤 처리를 할지 결정을 서비스에 넘김 (실제 처리는 서비스에서 수행)
  • Model 객체를 만들어 데이터를 담고 사용자에게 지정된 View 를 반환하여 응답 결과를 보여준다.

 

Controller 를 왜 사용할까

 

특정 비즈니스 목적을 가진 프로젝트에서 수행하는 기능은 다양하다. 이러한 기능을 수행하기 위해서는 기본적으로 MVC 구조로 코드를 작성한다. 여기서 Controller 는 View 를 지정하고 응답 결과를 보여주는 역할이 핵심이므로 목적 또는 기능이 명확하도록 작성해야 코드 가독성이나 유지 보수에 유리하다. 이를 위해서 우리는 원하는 기능 단위 또는 페이지 단위로 Controller 를 작성하여 무엇을 처리할 것인지 어떤 페이지를 렌더링할 것인지 등 지표로서 Controller 를 사용하고, 이에 맞게 API 설계를 하는 것이 명확하다. 또한, 개발 비용이나 유지 보수 비용도 절감할 수 있다.

 

📌 @RestController(@Controller + @ResponseBody)

 

@Controller의 경우 반환 값이 String이면 뷰 이름으로 인식하여 뷰 리졸버가 실제 경로를 찾아주고, 최종적으로 해당 뷰를 브라우저에 렌더링한다. 반면, @RestController의 경우 HTTP body에 값을 그대로 적기 때문에 반환 값이 String이면 문자 그대로 출력되고, 객체를 넣으면 JSON으로 출력된다. 이것은 @RestController 애노테이션 안에 @ResponseBody가 적용되어 있기 때문이다.

 

 

🔎 사용 예시

 

1. 업로드할 파일 다운로드

 

웹에서 특정 페이지에 파일을 내려주기 위해 ResponseEntity라는 객체를 이용할 수 있는데, 리턴 값은 관련 정보를 채운 ResponseEntity가 된다. 즉, 다운로드 완료 후 리다이렉트가 필요없고 단순히 다운로드만 원한다면 @Controller를 통한 렌더링 작업이 아닌 @RestController를 통해 자원을 브라우저로 내려줘야 한다.

 

2. 리다이렉트를 원하지 않을 때

 

만약 댓글 등록 후 리다이렉트를 원하지 않는다면 @RestController 사용을 고려할 수 있다. 일반적으로 댓글 등록 후에 현재 화면에 머무는 경우가 많다. 이 경우에는 리턴 값으로 서비스 측을 호출하여 로직 처리만 하고 끝낼 수 있다.

 

Reference:

https://velog.io/@jybin96/Controller-Service-Repository-%EA%B0%80-%EB%AC%B4%EC%97%87%EC%9D%BC%EA%B9%8C#controller%EB%A5%BC-%EC%99%9C-%EC%82%AC%EC%9A%A9%ED%95%A0%EA%B9%8C%EC%9A%94

 

Controller, Service, Repository 가 무엇일까?

찾아본 결과 Controller가 무엇인지 알기 전에 MVC 패턴에 대하여 먼저 아는 것이 중요합니다!MVC패턴은 Model-View-Controller의 약자로서 개발을 할 때 3가지 형태로 역학을 나누어 개발하는 방법론입니

velog.io

 

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-mvc-1/dashboard

 

스프링 MVC 1편 - 백엔드 웹 개발 핵심 기술 | 김영한 - 인프런

김영한 | 웹 애플리케이션을 개발할 때 필요한 모든 웹 기술을 기초부터 이해하고, 완성할 수 있습니다. 스프링 MVC의 핵심 원리와 구조를 이해하고, 더 깊이있는 백엔드 개발자로 성장할 수 있습

www.inflearn.com

 

'Spring' 카테고리의 다른 글

Dependency Injection(DI)과 IoC(Inversion of Control)  (0) 2023.04.27
Spring Test 관련 정리  (0) 2023.04.27
@RequestBody와 @ResponseBody  (0) 2023.04.27
Spring MVC 패턴  (0) 2023.04.27
Spring Boot 동작 (SSR)  (0) 2023.04.26