스프링 웹 개발에서 이야기하는 API방식에 대한 이야기.
정적 컨텐츠 방식을 제외하면, 이전에 봤던 MVC방식에서 view를 찾아서 템플릿 엔진을 통해 화면을 렌더링하여 html을 웹 브라우저에 넘겨주는 방식이 있고, 오늘 얘기할 API 방식이 있다.
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
위 사진처럼 HelloController에 위 코드를 추가해 주었다.
여기서 @ResponseBody를 꼭 추가해 주어야 한다.
ResponseBody의 의미는
http의 header부분과 body부분이 있는데, body부분에 "hello " + name이라는 data를 직접 넣어주겠다는 뜻이다.
String name에 spring이라고 값을 넣으면, return문은 hello spring이라고 바뀔 것이다.
문자가 내가 요청한 클라이언트에 그대로 내려간다는 뜻이다.
이전 템플릿 엔진과의 차이는 view가 없이 문자가 그대로!!! 내려간다는 점이 차이점이다.
코드를 실행시켜 웹 브라우저에 localhost:8080/hello-string?name=spring!!!이라고 치고 접속을 해 보았더니 문자가 그대로 화면에 출력되었다.
페이지 소스보기를 해봤더니 다른 html 태그가 일절 없이 hello spring!!!만 떠 있는 것을 볼 수 있다.
이전의 템플릿 엔진은 view라는 템플릿이 있는 상황에서 조작하는 방식이었다면, 이 API 방식은 문자를 그대로 내려주는 방식인 것이다.
위 사진처럼 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;
}
}
static class Hello라는 class를 만들어서 getter와 setter를 추가하고,
hello라는 객체를 만들어서 setter에 name을 주고, 값이 아닌 객체를 반환시켜 본 코드이다.
그 후 주소창에 /hello-api?name=spring!!!을 쳐서 접속했더니, 이전과는 다른 화면이 나타났다.
이는 json이라는 방식이다.
json은 key value로 이루어진 구조이다. {"name":"spring!!!"}
과거에는 xml방식도 많이 쓰였다.
그런데 xml방식은 무겁고, 태그를 여러 번 써야한다는 단점이 있지만,
json방식은 간단하기 때문에 최근 프로젝트를 하게 되면 모두 json방식을 쓴다.
**Getter Setter 단축키 : ctrl + enter
@ResponseBody 사용 원리를 그림으로 설명해보면 이렇다.