본문 바로가기

백엔드 개발/SpringMVC

Spring 웹 개발 기초 - API

1. api 란? 

한 소프트웨어에서 다른 소프트웨어로 요청을 보내거나 받을 수 있는 수단. 

 

2. 코드분석

    (1) @ResponseBody에 대한 설명

 @GetMapping("hello-string")
    @ResponseBody //컨트롤러가 반환 값을 http body부에 직접 넣어주겠다.
    public String helloString(@RequestParam("name") String name)
    {
        return "hello " + name; 
        /* para에 spring을 넣으면 hello spring이 될 것임. 
           여기선 view이런 걸로 그에 맞는 template 찾아 값 넣는 과정 없이 
           데이터가 그대로 웹 브라우저에 들어감.
           데이터 원본 보기를 해도 코드가 안 뜨고 우리가 넣은 스트링이 그대로 뜸.
        */
    }

      ***Http의 구조***

      http는 header와 body로 이루어져있다. 

      header -> 요청과 응답에 대한 메타 정보, 

      body -> 요청할 때 함께 보낼 데이터가 들어 있는 부분

  @GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) 
    //여기서 Hello는 객체 선언으로 인해 생긴 새로운 데이터 타입
    {
        Hello hello = new Hello();
        hello.setName(name);
        return hello;
        // 객체 생성 - 객체의 setname 함수 이용(para로 받은 인수를 name의 value로 넣어주는 것.)
        // 만든 객체를 반환
    }

    static class Hello
    {
        private String name;

        public String getName() // name 조회 하는 함수
        {
            return name;
        }

        public void setName(String name) //name에 값을 넣는 함수
        {
            this.name = name;
        }

3. 작동 원리

1) 웹 브라우저에서 localhost:8080/hello-api를 GET 요청함.

 

2) 내장 웹 서버 tomcat이 이를 받아들여서 springboot로 다시 보내줌. 

 

3) 스프링부트는 해당 내용을 처리할 수 있는 컨트롤러가 있는 지 확인. ->helloController가 처리 가능함을 확인

 

4) ResponseBody 어노테이션이 있음을 발견

    (if ResponseBody가 없었다면? 컨트롤러는 반환 값을 viewResolver에게 넘기고,

     반환 값을 담을 수 있는 적절한 템플릿을 찾아 돌려달라고 요청)

    (ResponseBody가 있다면? 컨트롤러는 반환 값을 직접 http-body부분에 다시 보내버림.)

 

5) 반환 값이 문자였다면 그대로 http로 보내면 되는데, 반환 값이 객체임

    반환 값이 객체일 때 default는 이 객체의 key 값과 value값을 JSON 형식으로 정제해서 http에 보내는 게 원칙

    여기에 대응 되는 그림이 JSONConverter(반환 값이 객체이면 JSON으로 바꾸어 보내주는 녀석)와

    StringConverter(반환 값이 문자면 그대로 내보내는 녀석).

 

6) JSON으로 바꾼 내용을 웹 브라우저에 응답으로 보내준다.

 

4. 외운 거 확인

(1) @ResponseBody의 뜻?

(2) 작동 원리 객체를 반환할 때와 문자를 반환할 때 나눠서 설명