순서
- 2. 스프링 웹 개발 기초
- 2.1 정적 컨텐츠
- 2.2 MVC와 템플릿 엔진
- 2.3 API
2.3 API
이번시간에는 Spring 웹개발 에서 이야기 하는 API 에 대해 알아보자.
정적 컨텐츠 방식을 제외하면
MVC 방식에서는
1. 뷰를 찾아서 템플릿엔진을 통해 화면을 렌더링해서 html을 웹브라우저에 넘겨주는 방식이 있고,
2. API를 써서 데이터를 바로 넘겨주는 방식이 있다.
이번에는 API를 써서 데이터를 넘겨주는 방식을 알아보자.
Controller에 메서드를 추가해 보자.
이전과는 다른 @ResponseBody 애노테이션을 추가하였다.
여기서의 @ResponseBody 는 HTML의 Body가 아닌 HTTP의 header, body중 body를 말한다.
이 어노테이션을 설정해 놓으면 body에 직접 데이터를 넣어 줄 수 있다.
따라서 View를 반환 할때와 다르게 templates 디렉토리에 xxx.html도 생성하지 않는다.
즉 View가 아닌, 문자 그대로 클라이언트에 반환한다.
이게 무슨 말인지 확인하기 위해, 같은 Get방식이지만 View를 반환하는 메서드와 방금작성한 메서드를 호출 한 후 페이지소스를 봐보자.
-view를 반환하는 메서드
-body를 반환하는 메서드
Body를 반환하는 메서드는 HTML 태그로 감싸져있지 않다.
이전의 View를 반환하는 방식은 data를 바꿔가며 화면을 반환하였다면, 이 방식은 data만 그대로 반환하는 방식이다.
API를 통해 data로 객체를 넘겨보도록 하자
1. Hello 라는 클래스를 작성하고, name 필드값을 주고 getter와 setter를 생성한다.
2. 아까와 같이 @ResponseBody 어노테이션을 추가한 메서드를 작성한다.
3. Hello 클래스의 hello 인스턴스 를 만들고 , setName을 통해 파라미터로 넘겨받은 name을 hello에게 준다.
4. hello 객체를 리턴한다.
*getter setter 방식이 뭔지모르겠다면 java 기본강의 또는 java bean 규약에 대해 찾아보자. 이 방식은 property 접근 방식이기도 하다.
결과를 확인해 보자
JSON 형식으로 나타나게 된다. key,value 형식의 간단한 구조로 되어있기 때문에. 요즘 개발에서 data를 주고받을때, JSON 형식을 많이 쓰이고 있어서 API방식을 많이 사용한다.
※어? 근데 객체를 반환했는데 어떻게 JSON 포맷으로 출력되나요?
@ResponseBody 어노테이션이 JSON으로 반환하도록 설정해 준다.
앞서 봤었던 반환방식과 비슷하기 때문에 흐름에 대해서 감이 좀 잡히겠지만, 시각화를 통해 다시 한번 흐름을 알아보자.
1. 웹브라우저에서 localhost:8080/hello-api 접속
2. 톰캣에서 hello-api 가 왔다고 스프링에게 알림
3. spring 이 controller에서 hello-api 를 찾음
4. 기존에는 ViewResolver 가 동작하고, 맞는 템플릿을 찾아서 반환했지만
@ResponseBody라는 어노테이션이 있다면 HttpMesageConverter 가 동작하게 된다
( 문자라면 String Converter가 작동하고 문자 그대로 반환하며, 객체를 반환해야 하는 경우 JsonConverter를 통해 객체를 JSON으로 만든 후 httpResponse 에 반환한다.)
요약
@ResponseBody 를 사용하면
- HTTP의 BODY에 문자 내용을 직접 반환
- viewResolver 대신에 HttpMessageConverter 가 동작
- 기본 문자처리: StringHttpMessageConverter
- 기본 객체처리: MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
*객체를 json형식으로 바꿔주는 라이브러리는 jackson 과 gson 을 많이 쓴다. Spring에서는 jackson을 기본으로 설정되어있으며, 바꿀수도있다.
참고: 클라이언트의 HTTP Accept 해더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter 가 선택된다.
(Accept 헤더에서 xml 로 요청이 오면 xml Converter가 선택 됨)
더 자세한 내용은 김영한님의 스프링 MVC 강의에서 확인할 수 있다.
보통 Spring 개발에서 API의 방식은 객체를 반환하는 것이라고 생각하면 된다.
다음 강의에서는 백엔드와 관련된, 더 뒷단의 강의가 시작된다. (회원관리 예제 - 테스트케이스, 리포지토리, 서비스개발)
'Java | Spring > Spring 입문' 카테고리의 다른 글
[스프링 입문] 3.2 회원 도메인과 리포지토리 만들기 (0) | 2021.09.27 |
---|---|
[스프링 입문] 3.1 비즈니스 요구사항 정리 (0) | 2021.09.15 |
[스프링 입문] 2.2 MVC와 템플릿 엔진 (0) | 2021.09.14 |
[스프링 입문] 2.1 정적 컨텐츠 (0) | 2021.09.06 |
[스프링 입문] 1.4 View 빌드하고 실행하기 (0) | 2021.09.06 |
댓글