본문 바로가기
Framework/Spring

API

by 파2RI 2024. 1. 9.

정적 컨텐츠를 제외하고는

1. MVC: html을 웹브라우저에 넘겨줌

2. API: 데이터를 직접 내려줌

 

 

먼저 String 형태로 내려주는 API 방식부터.

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

    }

 

여기에서 @ResponseBody가 중요한데,

html 바디 태그가 아니라,

http에서 헤더부와 바디부 중 <바디부>에 데이터를 직접 넣어주겠다는 뜻. (@ResponseBody)

 

그러면 이전과 똑같이 나오기는 하지만, 코드를 보면

 

 

html 태그 없이 바로 String 문자만 내려갔다는 것을 알 수 있다.

 

테플라 엔진과의 차이는?

템플릿 view 이런 부분이 없다.

 

 

이제 객체를 내려주는 API 방식을 볼건데, 이게 중요하다.

 

 

@GetMapping("hello-api")
   @ResponseBody

   public Hello helloApi(@RequestParam("name") String name){
        // Shift + ctrl + enter
       Hello hello = new Hello();
       hello.setName(name);
       return hello;
   }

    static class Hello{
        private String name;

        // Generate: alt + insert
        public String getName() {
            return name;
        }

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

    }

 

Hello 객체 형태로 데이터를 내려줄거다. (* 이때 IntelliJ 버전이 맞지 않아서 좀 고생을 했다.)

 

private String name의 getter setter을 만들어주고,

 

@ResponseBody  // 바디부에 우리가 직접 데이터를 내려줄건데

@RequestParam("name")  // name 파라미터를 입력받아서

hello.setName(name);  // hello 객체의 파라미터로 setName 해줄 것이다.

 

이런 내용.

 

 

웹페이지에 들어가보면

 

 

이런 식의 페이지를 볼 수 있다.

 

{"name": "spring"}은 json이라는 방식인데, 스프링도 json으로 반환하는 것이 기본이다.

 

스프링 입장에서 객체가 오면 뭘로 반환하지?를 한 번 생각해 보는데,

json으로 반환하는 것이 디폴트이기 때문에 굳이 다른 설정을 건드리지 않으면 json으로 반환된다.

 

 

MVC에서는 viewResolver가 동작해서 view 페이지를 보여줬지만,

 

@ResponseBody가 있을 경우에는(아! 데이터를 http 프로토콜의 바디부에 직접 내려받겠다는 거군)

HttpMessageConverter가 작동한다.

 

단순 문자인 경우 -> StringConverter

객체인 경우 -> JsonConverter

 

 

어쨌든 결론은?

 

1. 요즘은 json을 대체로 쓴다.

 

2. API 방식은 객체를 반환하는 것.

   근데 이때 http 메세지 컨버터를 통해서 jsoh 스타일로 바꿔서 반환해준다.

'Framework > Spring' 카테고리의 다른 글

회원 리포지토리 테스트 케이스 작성  (0) 2024.01.09
회원 도메인, 리포지토리 만들기  (0) 2024.01.09
IntelliJ 단축키 모음  (0) 2024.01.09
정적 컨텐츠, MVC/템플릿 엔진  (0) 2023.12.28
View 환경설정  (0) 2023.12.28