2. 스프링 웹 개발 기초
2.3 API
1. API에 들어가기 앞서서...
정적 콘텐츠를 제외하고 HTML 방식으로 내리느냐, API 방식으로 내리느냐 두가지의 차이점을 정확하게 아는 것이 중요하다.
2. 뷰 없이 데이터를 그대로 보여주는 방식
@GetMapping("hello-string")
@ResponseBody //바디부에 직접 내가 return 값을 넣어주겠다는 의미!!
public String helloString(@RequestParam("name") String name){
return "hello " + name; //"hello spring" --> 네임에 넣는 것에 따라 달라짐. view 없이 그대로 문자가 내려감!!
}
소스를 보면 이렇게 HTML 테그 없이 문자가 있는 것을 볼 수 있다.
굉장히 비효율적이고 쓸 일이 없다.
3. 데이터를 달라고 할 때는 API를 쓴다.
@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name){
Hello hello = new Hello();
hello.setName(name);
return hello; //객체를 넣은 경우
}
static class Hello{ //static class로 넣어서 사용가능 자바에서 정식지원해주는 기능(내부클래스)
private String name;
// Alt + insert(ins) 버튼을 누르면 자동으로 만들어줌
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
- 이것은 Json이라는 방식이다.
- Json은 key와 value로 구성된 방식이다.
- 과거는 XML 방식을 많이 썼지만 (html 방식 <html> </html>) XML은 무겁고 테그를 여닫고를 두 번 써야 했기 때문에 Json은 그에 비해 심플하기 때문에 최근에는 Json 방식을 대부분 사용한다.
- return으로 객체를 반환하고, ResponseBody라고 해놓는 경우엔 스프링도 Json으로 반환하는 것을 기본으로 한다.(원한다면 XML 사용을 할 순 있지만 요즘엔 잘 쓰지 않는 추세이다.!!)
4. 프로퍼티 접근 방식(Getter Setter)
static class Hello{ //static class로 넣어서 사용가능 자바에서 정식지원해주는 기능(내부클래스)
private String name;
// Alt + insert(ins) 버튼을 누르면 자동으로 만들어줌
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
getter setter -> Alt + ins 누르면 만들어진다. 이들을 자바Bin 규약이라한다.
name은 private로 설정되어 외부에서 직접 사용이 불가하기 때문에 라이브러리나 다른 곳에서 사용할 때 get, set 메소드를 사용해서 접근하게 된다. (이를 다른 말로 프로퍼티 접근방식이라고 부른다.)
5. @ResponseBody 사용 원리
- 웹브라우저에서 hello-api를 치고 톰켓 내장서버에서 helloController에 매핑이 되어있는 것을 확인하게 된다.
- 이때 @ResponseBody가 붙어 있는 것을 보고 http에 그대로(문자는 그대로 http로 보내줌) 보내야 하지만 이때 객체를 받았기 때문에 객체를 Json 방식으로 데이터를 만들어서 Http응답해준다.
JsonConverter -> 객체를 받았을 때 사용(Json으로 바꿔줘서 사용한다.)
StringConverter -> 문자를 받았을 때 사용(받은 문자를 바로 그냥 보내준다.)
'Back-End > Spring' 카테고리의 다른 글
[SpringBoot][스프링 입문] - 3.1 비니지스 요구사항 정리 (0) | 2021.12.23 |
---|---|
[SpringBoot][스프링 입문] - 2장 스프링 웹 개발 기초 <정리> (0) | 2021.12.21 |
[SpringBoot][스프링 입문] - 2.2 MVC와 템플릿 엔진 (0) | 2021.12.21 |
[SpringBoot][스프링 입문] - 2.1 정적 콘텐츠 (0) | 2021.12.21 |
[SpringBoot][스프링 입문] - 1.4 빌드하고 실행하기 (0) | 2021.12.20 |