Spring boot api

강정우·2022년 10월 24일
0

spring

목록 보기
16/27
post-thumbnail

data를 내리는 방식

1. html을 직접 내림

mvc방식에서 view를 찾아가지고 template engine을 통해서 화면을 rendering해서 html을 web browser에 넘겨주는 방법

2. api방식으로 data를 바로내림

jsp, php가 template engine중 하나로써 정적페이지가 아닌, 동적페이지를 전달하는 것이다.
우리는 이제 이 2번 방식에 대해 알아볼것임.

  • 이때 Controller에게 먼저 우선권한이 있어 우선 컨트롤러를 찾아보고 없다면 그때 resources에 static 폴더를 찾는다. (사실 더 복잡하지만 우선 굉장히 짧게 요약했다.)

@ResponseBody

  • 여기의 body는 html의 <body>가 아니라 http 통신프로토콜에서 head와 body부가 있는데 여기 body부에 내가 직접 data를 넣어주겠다는 뜻이다.

  • 그럼 저번시간에 했던 thymeleaf를 사용한 일반적인 통신과 @ResponseBody값의 차이점은 무엇인가?

  • @ResponseBody를 사용한다면 html 태그없이 문자열만 내리고
    thymeleaf를 사용한다면 안의 html이 다시 재조정되어 결과값이 보일 것이다.

  • 참고로 파라미터(RequestParam)를 더 자세히 보려면 Mac은 cmd+p , window는 ctrl+p를 누르면 더 자세히 볼 수 있다.

API를 사용한 data 전송

  • 그런데 만약에 이제 data를 내놔라고 한다면 어떻게 될까? 이것은 통상 json 형태로 많이 내리고 이것을 하나의 api방식이라고 한다.

why?

그럼 왜 json형태가 가장 많이 쓰이냐? 예전에는 xml 형태가 많이 쓰였다.
xml은 html을 작성해서 html문서를 주고받는 형태였다. 이는 매우 무겁고, 귀찮고 data를 전송하는데 있어 3차원을 표현하는데 불리한 방식이었다.
이를 보완하고자 어느 한 개발자가 json 형태를 만들어쓰기 시작했고 이게 data를 표현하는데 있어 편하고 3차원 data를 표현하는데 있어 매우 유리했기에 요즘 가장 많이 쓰이는 data form이 되었다.

자바 Bean 규약

  • field값이 private으로 되어있으니 getter, setter method로 접근하는 것. 이것이 java Bean 표준방식 또는 property 접근 방식 이라 함

  • 참고로 intellij 기준 단축키는 alt+insert이다. mac은 cmd+n 이다.

@ResponseBody 동작원리

  • @Controller에서 req에 같은 url이 있나 확인하고 있다면 다른 annotation까지 확인한다.
    이때 @ResponseBody가 없다면 thymeleaf template를 사용하여 viewResolver에게 던지지만
    @ResponseBody가 있다면 http에 그대로 return값을 넘겨야겠다 라고 하는데 이때 만약 문자가 아니라
  • return 값이 객체일때 json 방식으로 data를 만들어서 http 응답으로 반환한다. 즉, viewResolver 대신 HttpMessageConverter가 동작
    기본 문자 처리 : StringHttpMessageConverter
    기본 객체 처리 : MappingJackson2HttpMessageConverter
    이때 jackson은 무엇이냐 객체를 json type으로 바꿔주는 유명한 libary이다. 또 다른 libary는 gson이 있다. spring은 기본적으로 jackson을 사용한다.
  • btye 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어있다. 하지만 실무에선 거의 손대지 않는다.

클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter가 선택된다.

어느정도 작성하고 귀찮으면 ctrl + shift + enter 치면 자동완성이 되고 다음줄로 내려간다.
mac은 cmd + shift + enter

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글