Back-End/Spring

[SpringBoot][스프링 입문] - 2.3 API

얄루몬 2021. 12. 21. 16:21

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 -> 문자를 받았을 때  사용(받은 문자를 바로 그냥 보내준다.)