본문 바로가기

[ BE ] 기술

[BE-기술] RestController와 Controller

안녕하세요 NOT-ERROR팀의 백엔드 개발자 홍민정입니다. 🫧


🙏🏻 @Controller와 @RestController의 차이점은 HTTP Response Body가 생성되는 방식

(1) @Controller는 View가 반환됨
(2) @RestController는 객체를 반환하고 객체 데이터는 JSON 또는 XML로 HTTP 응답에 작성됨

🔺 @Controller

 - Client 요청으로부터 View를 반환

 - Controller는 ViewResolver 설정에 맞는 View를 반환

 ① Controller로 View 반환하기


 ② Controller로 Data 반환하기

 - RESTful 웹 서비스를 구현하기 위하여 Spring MVC의 컨트롤러에서 데이터를 반환하기 위해 @ResponseBody 사용

 - 내부적으로 Spring은 HTTPMessageConverter 리스트가 등록되어 있음

    - Request Body를 특정 클래스로 변환시킴

 - 컨트롤러는 처리결과에 맞는 Converter가 동작하고 변환해서 HTTP Response Body에 작성되어 전달되는 것

* 객체처리 Converter
 : MappingJackson2HttpMessageConverter
 
 * 문자처리 Converter
  : StringHttpMessageConverter

 ③ @Controller 코드

@Controller
@RequiredArgsConstructor
public class Controller {
	private MemberService memberService;
    
    @GetMapping("/members")
    public @Responsebody ResponseEntity<Member> findMember(
    				    @RequestParam("memberId") String memberId) {
              return ResponseEntity.ok(memberServie.findMember(member));
    }
- findMember는 Memeber객체를 ResponseEntity로 감싸서 반환하고
   Member를 JSON 형태로 반환하기 위해 @ResponseBody 어노테이션 사용

🔺 @RestController

 -  Spring MVC Controller 에 @ResponseBody가 추가된 것

  - 즉, @Controller와 @ResponseBody를 동시에 사용한 것과 동일하게 동작

 - 클라이언트 요청으로부터 JSON 형태의 객체 데이터를 반환

 - 직접 반환 값을 자동으로 HTTP 응답에 작성하고 반환

 - @RestController를 사용하면 MVC RESTful 웹 서비스를 간단하게 구현할 수 있음

 ① RestController로 데이터 반환하기


 ② @RestController 코드

@RestController
@RequestMapping("/members")
@RequiredArgsConstructor
public class MemberController {
	private MemberService memberService;
    
    @GetMapping("/member")
    publc Member findMember(@RequestParam("memberId") String memberId) {
        return memberService.findMember(member);
    }
 }
- findMember는 Member객체를 그대로 반환
 - 클라이언트가 예상하는 HTTP Status를 설정해줄 수 없음

📍 RESTful 웹 서비스

 ▪️ RESTful API를 사용하는 이유

 - 일반적으로 앱에서 사용되는 대량의 데이터는 파일을 따로 구성하여 앱 내부에 넣어두고 이 파일을 읽는 방식으로 처리됨

    → 새로운 데이터가 추가될 때마다 사용자는 업데이트를 해야함

    → 이를 데이터를 서버에 두고 서버로부터 다운받아 사용하여 사용자 경험을 만족 시켜줄 수 있음

 - 서버에 새로운 데이터를 업로드하고 서버로부터 데이터를 받아내면 사용자는 앱에 대한 업데이트 없이 최신 데이터를 받을 수 있음


 ▪️ 웹 서비스 : Web Service

 - 일반적인 웹사이트는 HTML을 렌더링하여 여러가지 UI를 브라우저에 띄움

 - 웹 서비스는 HTTP/HTTPS 프로토콜을 사용하여 데이터만을 주고받을 수 있도록 설계된 모듈

  ① RESTful : Representational State Transfer

    - 데이터 타입 : JSON

  ② SOAP : Simple Object Access Protocol

    - 데이터 타입 : XML


 ▪️ RESTful

  - 웹 형식으로 데이터를 전송하지만 쿠키, SOAP 등 전송 프로토콜 없이 전송이 가능하도록 한 인터페이스

  - 일반적으로 서버에게 요청하려는 정보를 URI를 통해 나타남

     ex) http://hong.co.kr/2022 

  - 웹의 모든 리소스(문서, 그림, 데이터)는 URI로 표현하고 접근 가능

  - 모든 리소스는 구조적이며 유기적인 연결이 가능함

  - 비상태 지향적인 방법을 따름

  - 정해진 메서드인 HTTP Method만을 사용해 리소스를 사용하는 아키텍처