8. API

API

정적 컨텐츠를 제외하고 2가지만 기억하면 된다.

html을 변환해서 줄것인가, 데이터형식으로 바로 보내줄것인가!!

컨트롤러에 하나 더 추가했다. 이때 가장 중요한게 @ResponseBody 이다.

이게 뭐냐면 html에 나오는 바디 태그를 얘기하는게 아니라 HTTP에서 헤더와 바디부분이 있다.

(HTTP 통신 프로토콜 부분이 그렇게 되어 있음) 그 BODY부분에 이 data를 내가 직접 넣어주겠다는 뜻이다. (응답 바디 부분에 직접 넣어주겠다는 것임)

여기서 name에 spring을 줬다면?

hello spring 이라는 문자로 바뀌고 이 문자가 요청한 클라이언트에게 그대로 내려간다.

이게 템플릿 엔진과의 차이가 뭐냐면 View 이런게 없고 그냥 문자가 그대로 내려간다.

뭔가 느낌적으로 폰트가 달라진것 같지 않나?

페이지 소스보기를 해보니 아니나 다를까 html태그가 하나도 없고

무식하게 내가 여기에 적은 문자가 그대로 내려간다.

얘를 굳이 이런식으로 할 수도 있겠지만 비효율 적이다;

근데 만약 이런 문자말고 데이터를 내놔라고 한다면?? 이런 문제때문에 api방식을 많이 쓴다.

여기서 HelloController라는 객체안에 Hello라는 객체를 만들고 싶다면 static을 써서 만들 수 있다. 그럼 HelloController.Hello~~ 이런식으로 쓸 수 있다. (자바에서 정식으로 지원하는 문법임)

getter setter를 만들고 helloApi라는 메소드 생성한다. 이때 return값으로 문자가 아닌 객체를 반환한다. 위와 같은 방식을 api방식이라고 말한다.

참고) ctrl + shift + enter ← 자동완성 (getter & setter 이렇게 쓰는걸 "자바 빈 규약" 이라고함, "프로퍼티 접근 방식" 이라고 하기도 함)

다음과 같이 출력된다!

웹 페이지 소스 보기도 이와 같이 나온다.

이거는 JSON이란 방식이다. JSON은 키, 밸류로 이루어진 구조다.

여기서 키는 name, 밸류는 spring!!!!이된다.

과거에는 xml이란 방식도 많이쓰였다. 사실 html태그가 xml방식으로 쓴거다. 근데 xml방식은 되게 무겁고 열고 닫고 두번써야한다, 태그를. 근데 얘는 심플하다.

옛날에는 둘이 충돌하다가 최근에는 거의 JSON방식으로 통일됨. 그래서 최근프로젝트를 한다면 다 JSON방식으로 하면 된다.

SPRING도 그래서 기본적으로 객체로 반환하고 @ResponseBody로 하면 그냥 JSON으로 반환한다.(디폴트다) (물론 xml로도 반환할 순 있다)

리스폰스 바디라는 어노테이션이 달려있으면 스프링은 원래 저 어노테이션이 없으면 뷰리졸버한테 던져주는데, 얘는 리스폰스바디가 있으면 http응답에 그대로 데이터를 넘겨야 되겠구나 라고 동작한다. 그런데 반환값이 문자가 아니라 객체다? 문자였으면 그냥 문자를 http에다 그냥 딱 줬다. 그럼 끝!

근데 객체를 반환하면 스프링 에서 정해져 있다. 기본 디폴트로 JSON방식으로 데이터를 만들어서 HTTP응답에 반환하겠다는게 기본 정책이다. 더 디테일한게 있지만 나중에 설명함

어쨋든 간에 hello라는 객체를 넘기면 이 객체를 보고 몇가지 조건을 보는데 나중에 보자.

우선 리스폰스바디를 통해 넘어온 값을 보고 HttpMessageConverter라는 얘가 동작한다. 넘어온얘가 문자라면 StringConveter가 발동한다. 근데 객체가 넘어오면 JsonConverter가 기본으로 동작한다. 그래서 얘를 JSON 스타일로 바꾼다.

어, name이 있고 값이 있네? 그럼 그걸 json형식으로 바꾼다. 그러고 난뒤 나를 요청한 웹브라우저든 서버든 클라이언트(안드로이드 등) 그들에게 보내준다(응답을 해준다).

객체를 JSON으로 바꿔주는 유명한 라이브러리가 대표적으로 2개 있다.

실무에는 Jackson2 (2는 버전)라는 라이브러리가 있음 또하나는 구글에서 만든 google-gson이 있다.

spring은 기본적으로 잭슨을 사용하기로 함 (물론 구글의 gson으로 바꿀 수 있음)

기본으로 쓰는건 그만큼 범용성있고 이미 검증된 라이브러리라고 보면 됨

이걸 깊이있게 파서 내가 원하는걸로 바꿀수도 있고 하지만, 실무에서는 그냥 이거 그대로 쓴다;

거의 손대지 않는다.

 

출처 : 인프런의 김영한 선생님 강의를 정리한 글입니다.
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

'Java > 스프링 입문' 카테고리의 다른 글

10. 회원 도메인과 리포지토리 만들기  (0) 2021.06.04
9. 비즈니스 요구사항 정리  (0) 2021.06.04
7. MVC와 템플릿 엔진  (0) 2021.06.04
6. 정적 컨텐츠  (0) 2021.06.04
5. 빌드하고 실행하기  (0) 2021.06.04

댓글

Designed by JB FACTORY