[Spring Boot] API방식

GyeongEun Kim·2021년 6월 10일
0

Spring Boot

목록 보기
5/12
post-thumbnail
post-custom-banner

본 게시물은 인프런 김영한 강사님의 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 듣고 개인 공부용으로 작성되었음을 알립니다.


정적 컨텐츠를 제외하면 스프링의 동작 방식에는

mvc패턴으로 html을 내려주는 방식

API를 사용하는 방식 (html X)

의 두가지 방법이 있다.

앞서 정적컨텐츠와 mvc패턴을 배웠으니 이제 api방식에 대해 알아보도록 하겠다.

우선 HelloController에 이렇게 추가해준다.

 @GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam(value = "name")String name) {
        return "hello"+name;
    }

여기서 @ResponseBody 애노테이션은 http통신 프로토콜의 body부에 데이터를 직접 넣어주겠다라는 뜻이다.
따라서 만약 name이 string이면 리턴값은 hello string이 되는 것이다.

그렇다면 이전의 템플릿 엔진과의 차이점이 뭘까?
api 방식을 사용하면 리턴시 view(html)가 필요없이 정말 데이터 그대로 "hello string"만 반환된다.
-

위 사진은 api방식을 이용하여 페이지 소스를 보았을 때이고 아래는 mvc템플릿 방식을 사용했을때의 페이지 소스이다.

이제 단순 문자열이 아닌 데이터를 반환할 때는 어떤지 보도록 하자. Hello라는 객체를 만들고 이름을 정하고 이를 반환해보도록 하자.

@GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi (@RequestParam("name") String name) {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
    }


    static class Hello { //hello객체
        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        private String name;

    }



객체를 반환했더니 다음과 같이 json 형태(key:value)로 반환이 되었다.

ResponseBody 작동원리

  1. 웹 브라우저에서 localhost:8080/hello-api를 요청
  2. 톰캣 내장서버가 스프링에게 알려줌
  3. @RespopnseBody 애노테이션이 붙어있으므로 HttpMessageConverter가 해당 데이터 (문자열이든 객체이든)를 자료형에 맞게 변환하여 http body에 붙여 응답한다.
profile
내가 보려고 쓰는 글
post-custom-banner

0개의 댓글