SPRING 입문 [ 코드로 배우는 스프링 부트 ]

[스프링 입문] 섹션 2.3 스프링 웹 개발 기초 (API)

wlalsu_u 2023. 1. 9. 18:33

2.3.1  API 방식 ( 문자 전달 )

 

Spring 에서의 API 방식 코드를 작성해보자.

main  >  java  >  controller 패키지  >  HelloController.java 에 다음과 같은 코드를 추가하였다.

 

 

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

 

 

@ResponseBody

 

 

API 방식에서는 상단에 @ResponseBody 를 작성해야 한다.

 

- HTTP BODY 에 데이터 직접 반환

   ( html body tag 의미하지 않음)

- View Resolver 대신, HttpMessageConverter 동작

 

 

HTTP 통신 protocol

 

 

상단의 코드에서 String name = spring 이면,

Hello spring 으로 바뀌게 된다.

 

 

+) 템플릿 엔진과의 차이점

API 방식은 view가 없고, 단순히 문자가 전달된다.

 

 

 


 

실제 웹 브라우저 화면을 확인해보자.

 

 

 

 

url 뒤에 ' ?name=spring!' 으로 파라미터 값을 전달하니,

hello spring! 이 표시되는 것을 볼 수 있다.

 

 

 

해당 페이지 소스를 확인해보자.

 

 

 

hello spring!

 

 

신기하게도, html 태그 같은 것은 존재하지 않고,

작성한 문자 그대로 표시되는 것을 볼 수 있다,

 

 

즉 앞서 설명했듯이,
템플릿 엔진은 view 템플릿 엔진에서 코드를 조작을 하는 방식이었지만,
API 방식은 데이터를 그대로 보내준다.

 

 

하지만, 문자를 넘겨주는 방식은 실제로 잘 사용하지 않는다.

데이터를 전달하는 API 방식에 대해 더 알아보자.

 

 

 

 


 

2.3.2  API 방식 ( 데이터 전달 )

 

 

main  >  java  >  controller 패키지  >  HelloController.java 에 다음과 같은 코드를 작성하였다.

 

 

 

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

    static class Hello {
        private String name;
        public String getName(){
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }

 

 

코드를 하나씩 살펴보자.

 

 

 

static class Hello

 

 

먼저, Hello 객체를 생성한다.

Hello 를 static 클래스로 작성하여, 클래스 내부에서 다시 사용할 수 있도록 한다.

 

 

getName() , setName() 메소드

 

 

'Getter and Setter' 를 이용하여 자동으로 작성할 수 있다.

 

java 표준 방식에서 private 필드는 외부에서 접근하지 못하므로,

public 메소드를 통해 간접적으로 접근하도록 한다.

 

 

 

return Hello

 

 

return 값으로 문자가 아닌 객체를 넘겨준다.

 

 

 


 

 

http://localhost:8080/hello-api?name=spring!  에 접속하면,

다음과 같은 화면이 나타난다.

 

 

 

이전과 다른 이상한 값이 출력되는 이유는,

json 방식으로 데이터가 표시되기 때문이다.

 

 

 

json 방식

 

 

- key : value 구조

  ( key = name, value = spring! 이 된다.)

 

 

- Spring 은 기본으로 객체 반환. 

   responsebody 를 작성하면, json 을 기본으로 반환

   ( xml 방식도 사용 가능)

 

 

- 굉장히 단순하여, 최근에는 json 방식으로 통일하여 사용됨

   (xml (html tag 방식) 은 굉장히 무거움)

 

 

 

 


 

 

2.3.3  API 방식 동작 원리

 

 

 

1) 웹 브라우저에서 localhost:8080/hello-api 에 접속

 

 

2) 내장 톰캣 서버가 요청을 받음

 

 

3) Spring 에게 넘어가고, Controller 에 'hello-api' 가 mapping 되어 있음을 확인

 

 

4) @ ResponseBody 확인

     - annotation 이 붙어 있지 않으면, viewResolver에 전달

     - annotation이 붙어 있으면, http에 동작을 그대로 전달

 

 

5) return 값이 객체임을 확인

     - return 값이 문자이면, 단순히 http 응답에 바로 반환

     - return 값이 객체이면, json 방식으로 데이터를 만들고 http에 반환

 

 

6) HttpMessageConverter 동작

   - return 값이 문자이면, StringHttpMessageConverter 동작

   - return 값이 객체이면, MappingJackson2HttpMessageConverter 동작

     ( 객체 -> json 으로 바꾸는 대표적 라이브러리가 jackson임)

 

 

7) 웹 브라우저에 넘김

 

 

 

 

 

 

 

 

 

 

김영한 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 기반으로 작성하였습니다.

https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8/dashboard