저번 시간에는 MVC 와 템플릿엔진에 대해서 알아봤는데, 이번시간에는 API에 대해서 알아보자
일단, API 부터 간단하게 살펴보자.
🤔 API 란 ?
어떤 서버의 특정한 부분에 접속해서 그 안에 있는 데이터와 서비스를 이용할 수 있게 해주는 소프트웨어 도구
그렇다면 실습을 통해서 API로 동작하는 과정을 알아보자
1. @ResponseBody 문자 반환
📗 HelloController
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello"+name;
}
@ResponseBody는 BODY에 문자 내용을 직접 반환하는 것으로 뷰 리졸브를 사용하지 않는다.
localhost:8080/hello-string?name=spring 을 요청하자 아래와 같은 화면이 출력됐다.
엥? 그럼 이전에 배운 MVC 템플릿 엔진과 다른점이 무엇일까?
페이지 소스를 보면 그 차이를 알 수 있다. 페이지 소스를 살펴보자.
MVC 템플릿 엔진으로 처리한 페이지는 아래와 같이 전체 코드가 나오지만
@ResponseBody 사용하면 뷰 리졸버를 사용하지 않고 아까 말한대로 body에 문자 그대로 반환하는 것을 알 수 있다.
그렇다면 객체로 받으면 어떻게 될까?
객체로 받기 위해서 아래 코드와 같이 작성을 해준다.
2. @ResponseBody 객체 반환
📗 HelloController
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name){
Hello hello = new Hello();
hello.setName(name);
return hello;
}
static class Hello{
private String name;
public String getName(){
return name;
}
public void setName(String name){
this.name= name;
}
}
이렇게 작성해보고 해당 주소를 쳐서 확인해보면 문자가 아닌 JSON 형태로 받는것을 알 수 있다.
오? 왜 아까는 문자 그대로 반환했는데 왜 이제는 JSON 형태로 반환을 하는거지?
그림을 통해 @ResponseBody 사용 원리에 대해서 정리해보자
1️⃣ 웹 브라우저에서 localhost:80080/hello-api를 요청
2️⃣ 스트링부트에 내장된 톰캣 서버가 스프링 컨테이너에게 hello-api 보냄
3️⃣ @ ResponseBody 를 사용하여 HTTP 의 BODY에 문자 내용을 직접 반환
(ViewResolver대신 HttpMessageConverter동작[ Spring 기본설정] )
4️⃣ @ResponseBody일 때 객체인 경우, JSON 방식으로 반환(default)
@ResopnseBody를 사용하면 'viewResolver' 대신에 'HttpMessageConverter'가 동작한다.
이때 기본 문자는 'StringHttpMessageConverter'가 동작하고,
기본 객체는 'MappingJackson2HttpMessageConverter'가 동작한다.
❓ JSON이란 ?
JSON은 JavaScript Object Notation 의 약자로 직역하면 '자바 스크립트 객체 표기법'이다
데이터를 쉽게 ' 교 환 ' 하고 ' 저 장 ' 하기 위한 텍스트 기반의 데이터 교환 표준이다.
JSON은 텍스트 기반이기 때문에 다양한 프로그래밍 언어에서 데이터를 읽고 사용할 수 있다.
'ON > 실습' 카테고리의 다른 글
[Spring Boot] 회원관리 예제 - 회원 도메인과 리포지토리 만들기 ② (2) | 2023.11.08 |
---|---|
[Spring Boot] 회원관리 예제 - 비즈니스 요구 사항 정리 ① (0) | 2023.11.07 |
[Spring Boot] 스프링 웹 개발 기초 ② - MVC와 템플릿 엔진 (1) | 2023.11.05 |
[Spring Boot] 스프링 웹 개발 기초 ① - 정적 컨텐츠 (0) | 2023.11.04 |
[Spring Boot] 스프링 부트 프로젝트 생성 | cmd 창으로 빌드 및 실행 ② (0) | 2023.11.03 |