Spring Practice

[#7] Spring 파헤치기 : API

박은유 2022. 3. 2. 10:00
반응형

이번엔 API로 구현하는 방법을 알아보자.

 

API 란?

 

 : 애플리케이션 소프트웨어를 빌드하고 통합하기 위한 정의 및 프로토콜 세트인 애플리케이션 프로그래밍 인터페이스(Application Programming Interface)를 뜻한다. 

 

그럼 Spring에서 API 방식은 언제, 어떻게, 왜 사용할까?

 

앞서 살펴봤던 정적 컨텐츠나 MVC 방식은 주로 String을 반환하여 구현할 때 사용했다. 하지만 내가 객체를 반환하여 사용하고 싶으면 어떻게 할까? 그때 사용하는 방식이 API 방식이다.

 

사용방법은 @ResponseBody Annotation을 Controller에 붙혀서 사용한다.

 

@ResponseBody란?

 

 : HTTP에서 Body부에 해당 데이터를 직접 넣어주겠다 라는 태그.

 

해당 코드를 살펴보자.

 

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

앞서 봤던 코드와의 차이점은 @ResponseBody 태그와 Parameter에 Model이 없다는차이가 있다. 앞에서는 return 값을 template의 html로 넘겨줘서 실행했지만, 위 코드는 View가 없이 return에 있는 값이 그대로 반영된다.

 

 

실행화면은 앞과 다를게 없지만,
페이지소스를 보면 데이터 그대로 찍혀있는걸 확인할 수 있다.

다음으로 간단한 객체를 생성해보자.

static class Hello {
        private String name;

        public String getName() {
            return name;
        }

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

    }

name이란 String값을 가진 객체를 하나 생성하였다.

그 다음 Controller를 하나 생성한다.

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

        return hello;
    }

해당 Handler는 문자가 아닌 hello라는 객체를 반환하고있다.

실행하면 다음과 같이 나타난다.

 

위처럼 나타나는 이유는, 객체를 전송할땐 JSON(JavaScript Object Notation)방식으로 전송하기 때문이다. JSON은 서버와 클라이언트간에 데이터를 주고받는 방식중 하나인데, 쉽게 말해서 Key : Value 의 형식으로 데이터를 주고받는다고 생각하면 된다.

위에 보다시피 { Key : Value } 의 형식으로 나타난걸 볼 수 있다.

소스코드또한 일치한다.

과거에는 XML방식을 많이 사용했는데, XML방식은 상대적으로 무겁고, 열고 닫고 두번씩 사용해야하는데 JSON은 가볍고 Key와 Value만으로 데이터를 주고받을 수 있기때문에 지금은 JSON방식으로 주고받는게 기본이 되었다.

 

@ResponseBody의 사용 원리를 그림으로 알아보자.

 

 

출처 : 김영한의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의자료

앞에서 본 MVC방식과 구조상으로는 비슷해보이지만, View가 존재하지않고 바로 Converter로 데이터를 넘겨준다. 그리고 만약 객체를 받았다면, 해당객체를 JsonConverter를 통해 Json스타일로 바꿔준다.

 

1. HTTP의 BODY에 문자 내용을 직접 반환한다.

2. ViewResolver대신에 HttpMessageConverter가 동작한다.

3. 기본 문자처리 : StringHttpMessageConverte가 작동

4. 기본 객체처리 : MappingJackson2HttpMessageConverter가 작동

5. byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어있다.

 

Spring에서 데이터를 주고받는 3가지를 알아봤다. 간단히 정리해보면

 

1. 정적 컨텐츠

 : 파일을 그대로 내려준다.

 

2. MVC와 template 엔진

 : template 엔진을 Model View Controller 방식으로 쪼개서 View를 template 엔진으로 HTML을 프로그래밍한걸로 랜더링해서 랜더링 된 HTML을 클라이언트에게 전송해준다.

 

3. API

 : @ResponseBody를 통해 객체를 View 없이 HttpMessageConverter를 통해서 JSON형태로 데이터를 넘겨준다.

 

 

 

다음으로 회원 관리를 간단하게 개발해보자.

반응형