안녕하세요 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를 통해 나타남
- 웹의 모든 리소스(문서, 그림, 데이터)는 URI로 표현하고 접근 가능
- 모든 리소스는 구조적이며 유기적인 연결이 가능함
- 비상태 지향적인 방법을 따름
- 정해진 메서드인 HTTP Method만을 사용해 리소스를 사용하는 아키텍처
'[ BE ] 기술' 카테고리의 다른 글
[BE-기술] 채식쇼핑몰 '채식이들' 프로젝트 백엔드 개발 설계 후기 (0) | 2022.10.06 |
---|---|
[BE-기술] Spring Data JPA의 DB 초기화 (0) | 2022.10.02 |
[BE-기술] 걱정말아요. <Spring REST Docs> 자동화 별거 아닙니다..😂 (0) | 2022.09.24 |
[BE-기술] 백엔드 개발자의 필수 과제, '순환 참조(Circular Reference)' 문제 해결 (2) | 2022.09.18 |
[BE-기술] JPA에서 Spring Data의 Audit 기능 적용하기 (0) | 2022.09.10 |