7. Spring API 아주 기초

    Spring은 크게 세 가지 방식이 있다. 1) 정적 컨텐츠, 2) Template Engine을 활용한 MVC, 3) API가 있다. 정적 컨텐츠는 내가 만든 HTML 파일을 가공 없이 그대로 클라이언트에게 주는 방식이다. 2번은 Templeate Engine을 MVC 방식으로 쪼개서 View를 Template Engine으로 렌더링한 HTML을 클라이언트에게 전달해주는 방식이다. API는 특정한 방식으로 내가 가공한 데이터를 JSON 방식으로 돌려주는 방법이다. 즉, Return Type은 크게 HTML과 JSON 형식이 있다고 볼 수 있다.

    어찌됐건 Spring API로 JSON 형식을 넘겨주고 싶다면 이 두 가지가 반드시 동시에 일어나야 한다. 1) 어노테이션으로 "ResponseBody"달아주기 2) Return Type을 인스턴스를 넘기기.

     

    Spring API를 사용하는 방법


    Controller를 만들 때 어노테이션 @ResponseBody를 달아준다. ResponseBody는 Http 통신의 Body(Header / Body)에 Return 되는 값을 넣어주겠다는 의미다. 즉, Http 통신으로 뭔가를 전달해준다는 것이기 때문에 HTML이 아닌 다른 형태의 데이터가 넘어가는 것으로 이해할 수 있다.

    // String을 body에 넘겨준다. 즉, String Data만 넘어간다.
    	@GetMapping("hello-string")
        @ResponseBody
        public String helloString(@RequestParam("name") String name){
            return "hello " + name;
        }
    
    
    // Hello 객체를 body에 넘겨준다. 즉, 객체가 넘어가기 때문에 JSON 형식으로 바뀌어 넘어간다.
        @GetMapping("hello-api")
        @ResponseBody
        public Hello helloApi(@RequestParam("name") String name){
            Hello hello = new Hello();
            hello.setName(name);
            return hello;

     

     

    Template + MVC와의 차이는 페이지에서 확인 가능하다. Spring API로 만든 페이지에서 소스보기를 클릭하면, HTML 파일은 없고 String 혹은 JSON 형식으로 데이터가 표시가 되는 것을 확인할 수 있다.

    ResponseBody 어노테이션이 붙어있으면 스프링은 HttpMessageConverter를 동작시킨다(MVC에서는 View Resolver를 동작). HttpMessageConverter는 입력이 어떤 것이 들어왔느냐에 따라 필요한 Converter를 동작시킨다. 이 때, 객체가 들어오게 되면 JSON Converter를 동작시킨다. 문자열이 들어왔다면 String Converter를 동작시킨다.

    Converter는 데이터를 특정 타입으로 변경해주고, 이 데이터는 View를 거치지 않고 바로 클라이언트에게 전송되어 표시된다. 즉, HTML 방식이 아니기 때문에 앞서 말한 것처럼 소스를 봤을 때 정말 데이터만 있다.

     

    Spring API 실습


    1. hello-string이라는 페이지를 만든다. 해당 페이지에서는 웹브라우저 입력값을 페이지에 String 방식으로 표기한다.

        @GetMapping("hello-string")
        @ResponseBody
        public String helloString(@RequestParam("name") String name){
            return "안녕하세요 " + name;
        }
        
        // url에서 "name=" 뒷쪽에 오는 값들이 String name 매개변수로 전달된다.
        // 매개변수와 안녕하세요를 합친 다음 String을 return 해준다.

    2. hello-api라는 페이지를 만든다. 해당 페이지에서는 웹브라우저 입력값을 페이지에 JSON 방식으로 표기한다.

    // Static public class를 하나 만들고, 멤버변수로 name을 private으로 만든다
    // API용 메서드에서 인스턴스를 하나 만들고, 입력값을 name에 셋팅해준다.
    // 인스턴스를 Return 해준다.
    // JSON 형식으로 멤버변수 + 멤버변수값이 JSON format으로 나온다.
      @GetMapping("hello-java-api")
        @ResponseBody
        public HelloJava helloJava(@RequestParam("name") String name){
            HelloJava temp = new HelloJava();
            temp.setName(name);
            temp.setAge(50);
            return temp;
        }
        static class HelloJava{
            private String name;
            private int age;
            public String getName(){
                return name;
            }
            public void setName(String name) {
                this.name = name;
            }
            public int getAge() {
                return age;
            }
            public void setAge(int age) {
                this.age = age;
            }
        }

     

    댓글

    Designed by JB FACTORY