2.3.1 API 방식 ( 문자 전달 )
Spring 에서의 API 방식 코드를 작성해보자.
main > java > controller 패키지 > HelloController.java 에 다음과 같은 코드를 추가하였다.
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello " + name;
}
@ResponseBody
API 방식에서는 상단에 @ResponseBody 를 작성해야 한다.
- HTTP BODY 에 데이터 직접 반환
( html body tag 의미하지 않음)
- View Resolver 대신, HttpMessageConverter 동작
상단의 코드에서 String name = spring 이면,
Hello spring 으로 바뀌게 된다.
+) 템플릿 엔진과의 차이점
API 방식은 view가 없고, 단순히 문자가 전달된다.
실제 웹 브라우저 화면을 확인해보자.
url 뒤에 ' ?name=spring!' 으로 파라미터 값을 전달하니,
hello spring! 이 표시되는 것을 볼 수 있다.
해당 페이지 소스를 확인해보자.
hello spring!
신기하게도, html 태그 같은 것은 존재하지 않고,
작성한 문자 그대로 표시되는 것을 볼 수 있다,
즉 앞서 설명했듯이,
템플릿 엔진은 view 템플릿 엔진에서 코드를 조작을 하는 방식이었지만,
API 방식은 데이터를 그대로 보내준다.
하지만, 문자를 넘겨주는 방식은 실제로 잘 사용하지 않는다.
데이터를 전달하는 API 방식에 대해 더 알아보자.
2.3.2 API 방식 ( 데이터 전달 )
main > java > controller 패키지 > 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;
}
}
코드를 하나씩 살펴보자.
static class Hello
먼저, Hello 객체를 생성한다.
Hello 를 static 클래스로 작성하여, 클래스 내부에서 다시 사용할 수 있도록 한다.
getName() , setName() 메소드
'Getter and Setter' 를 이용하여 자동으로 작성할 수 있다.
java 표준 방식에서 private 필드는 외부에서 접근하지 못하므로,
public 메소드를 통해 간접적으로 접근하도록 한다.
return Hello
return 값으로 문자가 아닌 객체를 넘겨준다.
http://localhost:8080/hello-api?name=spring! 에 접속하면,
다음과 같은 화면이 나타난다.
이전과 다른 이상한 값이 출력되는 이유는,
json 방식으로 데이터가 표시되기 때문이다.
json 방식
- key : value 구조
( key = name, value = spring! 이 된다.)
- Spring 은 기본으로 객체 반환.
responsebody 를 작성하면, json 을 기본으로 반환
( xml 방식도 사용 가능)
- 굉장히 단순하여, 최근에는 json 방식으로 통일하여 사용됨
(xml (html tag 방식) 은 굉장히 무거움)
2.3.3 API 방식 동작 원리
1) 웹 브라우저에서 localhost:8080/hello-api 에 접속
2) 내장 톰캣 서버가 요청을 받음
3) Spring 에게 넘어가고, Controller 에 'hello-api' 가 mapping 되어 있음을 확인
4) @ ResponseBody 확인
- annotation 이 붙어 있지 않으면, viewResolver에 전달
- annotation이 붙어 있으면, http에 동작을 그대로 전달
5) return 값이 객체임을 확인
- return 값이 문자이면, 단순히 http 응답에 바로 반환
- return 값이 객체이면, json 방식으로 데이터를 만들고 http에 반환
6) HttpMessageConverter 동작
- return 값이 문자이면, StringHttpMessageConverter 동작
- return 값이 객체이면, MappingJackson2HttpMessageConverter 동작
( 객체 -> json 으로 바꾸는 대표적 라이브러리가 jackson임)
7) 웹 브라우저에 넘김
김영한 '스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술' 강의를 기반으로 작성하였습니다.
'SPRING 입문 [ 코드로 배우는 스프링 부트 ]' 카테고리의 다른 글
[스프링 입문] 섹션 3.2 회원 관리 예제 (회원 도메인과 리포지토리 만들기) (0) | 2023.01.09 |
---|---|
[스프링 입문] 섹션 3.1 회원 관리 예제 (비즈니스 요구사항 정리) (0) | 2023.01.09 |
[스프링 입문] 섹션 2.2 스프링 웹 개발 기초 (MVC와 템플릿 엔진) (0) | 2023.01.07 |
[스프링 입문] 섹션 2.1 스프링 웹 개발 기초 (정적 컨텐츠) (0) | 2023.01.07 |
[스프링 입문] 섹션 1.4 프로젝트 환경설정 (빌드하고 실행하기) (0) | 2023.01.07 |