반응형
Notice
Recent Posts
Recent Comments
Link
«   2024/11   »
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
Archives
Today
Total
11-07 11:40
관리 메뉴

ImJay

[Java Spring] 1-7. API 본문

Java Spring/스프링 입문

[Java Spring] 1-7. API

ImJay 2023. 1. 30. 13:04
반응형

[Java Spring] 1-7. API


1. API : json 등의 데이터 구조 포맷으로 데이터를 전달 ( view, react, 서버끼리 통신할 때 )

정적 컨텐츠를 제외하면 MVC 를 통해 HTML 로 내리는가, 혹은 API 를 통해 데이터로 바로 내리는가 두가지만 기억하면 된다.

 

2. 기존 HelloController.java 에 다음과 같은 코드를 추가한다.

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

여기서 중요한 것은 @ResponseBody 이다.

@ResponseBody 가 의미하는 것은, HTTP 프로토콜의 바디부분 (HTML 아님) 에 이 데이터를 내가 직접 넣어주겠다는 의미이다.

템플릿 엔진과의 차이는? View 가 없다. name 값의 문자가 그대로 내려간다.

 

3. 빌드 ( ALT + SHIFT + F10 ) 후 localhost:8080/hello-string?name=spring!! 입력 및 확인

HTML 태그 하나 없이 문자가 그대로 내려온다.

이전의 템플릿 엔진은 View 안에서 조작하는 방식이었다면, API는 데이터를 그대로 내려온다.

 

4. 기존 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;
        }
    }

- Property 방식을 사용 

- IntelliJ 의 getter&setter 단축키는 Alt + Insert 이다.

 

5. 빌드 ( ALT + SHIFT + F10 ) 후 localhost:8080/hello-api?name=spring!! 입력 및 확인

 

위와 같이 키와 값으로 이루어진 방식을 JSON 방식이라고 한다. 이전에는 XML 방식을 사용했다가, JSON 으로 완전히 통일됨.

 

6. 작동 원리

6-1. 웹 브라우저에서 톰캣 서버로 hello-api 전송

6-2. 톰캣 서버에서 스프링으로 hello-api 전송

6-3. 스프링에서 hello-api 찾기

6-4. hello-api 에서 @ResponseBody 발견 -> 그대로 전송해야겠다고 인식

6-5. 보내야하는 데이터가 객체임을 확인 -> JSON 방식으로 데이터 만들어서 HTTP 응답에 반환함(스프링 기본 정책)

6-6. HttpMessageConverter 동작 ( 문자열이면 StringHttpMessageConverter 동작, 객체면 Jackson2HttpMessageConverter 동작 )

* HTTP Accecpt 헤더와 서버의 컨트롤러 반환 타입 정보를 조합해서 다른 타입을 요청할 수도 있다.

6-7.웹 브라우저로 JSON(name: spring!!) 데이터를 전송

 

- Converter 는 보통 디폴트로 세팅이 되어있고 실무에서 거의 건드릴 일이 없으므로 엄청 깊게 관심을 가질 필요는 없다.

반응형
Comments