김영한 스프링 강의
스프링으로 웹을 개발하는 방법은 3가지가 있다.
▶ 정적 컨텐츠
- 서버에서 일련의 작업이 필요 없이 html 파일을 웹 브라우저에게 그대로 내려준 것이다.
흔히 쓰이는 문법이 들어가지 않은 기본 html 파일이 이에 해당된다.
▶ MVC와 템플릿 엔진
- 모델(Model), 뷰(View), 컨트롤러(Controller) 패턴 방식으로 개발하는 것이다.
정적 컨텐츠와는 다르게 기존에 있던 html을 서버에서 변형을 해주어
변형된 html을 사용자에게 보여준다. (jsp와 비슷)
▶ API
- JSON 포맷 형식의 데이터를 사용자에게 전달하는 방식이다.
예를 들면 날씨 정보 API를 주는 openweathermap 사이트에서는 날씨에 대한 정보를
JSON 형식으로 제공해준다.( {날씨:맑음, 기온:-1 ...} )
이러한 전달 방식의 형태를 API라고 한다.
이번 포스팅에선 MVC와 템플릿엔진의 방법으로 개발하는 법을 알아보고자 한다.
● API
API를 사용하고자 할 때,
@ResponseBody 라는 애노테이션이 사용된다.
서버가 실행될 때, 생성된 스프링 컨테이너에서
컨트롤러를 읽는다.
이때 클래스 명 위에 @ResponseBody 이 있으면
HTTP에 있는 HttpMessageConverter가
JsonConverter 혹은 StringConverter를 이용해
해당 클래스의 반환 값을 알맞게 변환을 한 후,
사용자에게 이 데이터를 응답해준다.
JsonConverter : 반환 값이 객체일 경우 json 형식으로 반환해줌
StringConverter : 반환값이 문자열일 경우 문자열 형태 그대로 반환해줌
변환이 다 되었으면,
해당 클래스의 반환값을 html의 body가 아닌
HTTP 프로토콜의 body부분에 데이터를 넣어준다.
이로써 사용자는 클래스의 반환 값을 브라우저에서 확인할 수 있다.
이제 API 방식으로 개발하는 방법을 알아보도록 하자.
1. src > main > java > hello.hellospring(본인프로젝트 이름) > 컨트롤러 작성
helloController.java
@Controller
public class helloController {
@GetMapping("hello")
public String hello(Model model){
model.addAttribute("data", "hello!");
return "hello";
}
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam(value = "name") String name, Model model){
model.addAttribute("name", name);
return "hello-template";
}
@GetMapping("hello-string")
@ResponseBody // HTTP body에 return 데이터를 직접 넣어주겠다
public String helloString(@RequestParam(value = "name") String name){
return "hello " + name;
}
@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;
}
}
}
2. 브라우저에서 매핑된 URL 요청
○ /hello-spring?name="사용자 입력"
name=spring으로 요청을 보내
hello spring이 출력이 된다.
○ /hello-api?name="사용자 입력"
Json 형식으로 데이터가 반환된다.
'Java > Spring' 카테고리의 다른 글
[Spring boot] 스프링(Spring) 테스트 케이스 작성(회원 가입, 회원 조회 (0) | 2022.01.05 |
---|---|
[Spring boot] 스프링 - 회원 가입, 회원 조회 (0) | 2022.01.05 |
[Spring boot] 스프링 웹 개발 기초 - MVC와 템플릿 엔진 (0) | 2022.01.04 |
[Spring boot] 스프링 웹 개발 기초 - 정적 컨텐츠(html) (0) | 2022.01.04 |
[Spring boot] 스프링 프로젝트 빌드하고 실행하기(Windows, Mac) (0) | 2022.01.03 |