728x90
SpringBoot 웹 개발 세 가지 방법
- 정적 컨텐츠 (static contents)
- MVC와 템플릿 엔진
- API
정적 컨텐츠
- 정적 컨텐츠는 HTML 파일 그대로 화면에 출력하는 방식입니다.
- resources의 static 폴더에 name.html파일을 넣고, localhost:8080/name.html을 쳐주면 그대로 뜨게 됩니다.
MVC와 템플릿 엔진
- MVC : Model, View, Controller
- 흔히 개발할 때, 이 방식을 사용하게 됩니다. 저희는 Thymeleaf라는 템플릿 엔진을 통해서 백엔드와 프론트엔드를 연결한 형태로 코드를 짰습니다.
- 컨트롤러를 통해, / 뒤에 올 것을 적고 그 메서드를 코드로 짭니다.
- 아래는 코드입니다.
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name",name);
return "hello-template";
}
- 하지만 위의 코드처럼 URL에 localhost:8080/hello-mvc를 치게 된다면 오류가 납니다. 그 이유는 @RequestParam때문입니다. 무언가 매개변수로 들어와야 오류가 나지 않게되는 것입니다.
- 그래서 localhost:8080/hello-mvc?name=spring 이라고 쳐줘야 하는 것입니다.
API
- 요즘은 API로 개발을 많이 하는 시대입니다.
- @ResponseBody
- 이 어노테이션은 HTTP에서 header와 body에서 body 부분에 이 data를 직접 넣어주겠다고 선언하는 어노테이션입니다.
- template 엔진과의 차이점은 그냥 view라는게 없다는 것입니다.
- 기존엔 HTML에 data를 줘서 보내는 방식이라면 API는 그대로 그걸 HTTP로 내보내게 됩니다.
- HttpMessageConverter가 동작합니다.
- ResponseBody 사용 원리를 아래 그림으로 설명하겠습니다.
- ResponseBody 가 없으면 template 엔진으로 진행합니다.
- 그러나 ResponseBody가 있다면 HTTP의 body에 직접 전송합니다.
- 문자열이 넘어오면 그냥 HTML 파일대로 넘기지만
- 객체가 넘어오면 기본이 JSON 방식으로 data를 만들어서 HTTP응답에 반환합니다.
- @ResponseBody 사용
- HTTP의 body에 문자 내용을 직접 반환합니다.
- viewResolver 대신에 HttpMessageConverter가 동작합니다.
- 기본 문자처리 : StringConverter
- 기본 객체처리 : MappingJackson2Converter
- byte처리 등등 기타 여러 Converter가 기본으로 등록되어 있습니다.
- 아래는 코드입니다.
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name){
return "hello " + name; //"hello spring"
}
@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;
}
}
- 기본 문자처리와 객체 처리.
참고
클라이언트의 HTTP Accept 헤더와 서버의 컨트롤러 반환 타입 정보 둘을 조합해서 HttpMessageConverter가 선택됩니다.
결론
- 정적 컨텐츠
- 그냥 파일을 그대로 내려줍니다.
- MVC와 템플릿 엔진
- 템플릿 엔진을 MVC방식으로 쪼개서 view를 템플릿 엔진으로 (HTML을 프로그래밍한 것)으로 렌더링합니다.
- 렌더링된 HTML을 전달합니다.
- API
- 객체를 반환하는 것입니다.
- HttpMessageConverter를 통해서 JSON 스타일로 바꿔서 반환합니다.
- view 이런 것 없이 그냥 바로 그대로 HTTP Response에다가 값을 넣어서 반환합니다. (ResponseBody)
728x90
'Computer Science > SpringBoot' 카테고리의 다른 글
[SpringBoot] Spring Boot가 뭔데? 왜 쓰는데? (0) | 2022.01.29 |
---|---|
[SpringBoot] 회원 관리 예제 - 백엔드 개발 (0) | 2021.11.05 |
[SpringBoot] view 환경설정 (0) | 2021.11.02 |
[SpringBoot] 라이브러리 살펴보기 (0) | 2021.11.02 |
[SpringBoot] SpringBoot 시작하기 (start.spring.io) (0) | 2021.11.01 |
댓글