yyndevv 2023. 2. 7. 00:15

* 인프런 김영한님의 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강의를 듣고 작성한 내용입니다.

  (강의 링크)

 

  • 정적 컨텐츠: 파일 그대로 내려주는 방식
  • MVC 방식: 뷰를 찾아서 템플릿 엔진을 통해 화면을 랜더링해서 HTML을 웹 브라우저에 넘겨주는 방식
  • API 방식: 데이터를 바로 내려주는 방식

@ResponseBody

  • HTTP 통신 프로토콜은 헤더와 바디로 구성되는데 바디에 이 내용을 직접 넣겠다는 의미!
  • 템플릿 엔진과의 차이는 뷰 없이 이 문자가 그대로 내려간다는 것

 

템플릿 엔진과 결과창은 같지만

HTML 태그 없이 내가 적은 데이터가 그대로 들어있는 것 확인할 수 있다.

 

문자 말고 데이터를 내놓으라고 한다면? API 방식 많이 사용

* IntelliJ 꿀팁

괄호 안 닫힌 상태에서 Ctrl + Shift + Enter 하면 자동으로 괄호 닫아주고 세미콜론까지 붙여줌

 

JSON 방식: Key - Value로 이루어진 구조

  • 과거에는 XML 방식  <HTML></HTML> 많이 사용하였으나 무겁고 열고 닫고 태그를 두 번 사용해야 해서 번거로움
  • JSON은 Key - Value 매우 심플해서 JSON으로 현재 통일된 추세, @ResponseBody에서도 JSON 반환하는 것이 기본

 

자바빈 규약(JavaBean)

  • Getter and Setter, Property 접근 방식

* Alt + Insert 에서 Getter and Setter 누르면

  • name은 private으로 외부에서 바로 못 꺼냄
  • 라이브러리를 쓰거나 메서드 통해 접근

@ResponseBody 사용 원리

웹 브라우저에서 localhost:8080/hello-api 주면 내장 톰켓 서버에서 hello-api 스프링으로 던짐

→ 스프링은 hello-api 확인

→ 기본적으로는 템플릿 엔진으로 던지지만 @ResponseBody annotation 붙어있으므로 HTTP 응답에 그대로 데이터를 넣은 것이 되겠구나 하고 응답

→ 기존에는 viewResolver가 동작했지만 @ResponseBody 있으면 HTTPMessageConverter가 동작

→ 단순 문자라면 StringConverter 동작, 객체라면 JsonConverter가 기본으로 동작하여 JSON 방식으로 데이터 바꿔서 요청한 웹 브라우저로 보냄

 

@ResponseBody 를 사용

  • HTTP의 BODY에 문자 내용을 직접 반환
  • viewResolver 대신에 HttpMessageConverter 가 동작
  • 기본 문자처리: StringHttpMessageConverter
  • 기본 객체처리: MappingJackson2HttpMessageConverter // 실무에서 객체처리시 사용하는 라이브러리 Jackson과 GSON, 스프링은 Jackson이 기본
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음