웹 개발 구분
- 정적 컨텐츠
- MVC와 템플릿 엔진
- API
1. 정적 컨텐츠
- SpringBoot는 정적 리소스를 기본적으로 띄어줄 수 있다.
- /resouces/static에 원하는 정적 페이지를 생성해준 후 localhost:8080/{정적페이지이름.html}으로 접속시 정적페이지 반환
- SpringBoot에서 localhost:8080/{정적페이지이름.html}에 요청이 들어오면 먼저 controller에 정적적페이지.html에 대한 controller가 있는지 확인한다.
- 없다면 정적페이지로 가정한 후 static파일에 정적페이지이름.html에 대한 파일이 있는지 확인한다.
- 있다면 해당하는 정적페이지를 반환한다.
2. MVC와 템플릿 엔진
MVC: model, view, controller
1
2
3
4
5
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
model.addAttribute("name",name);
return "hello-template";
}
- 내장 톰켓 서버에 local:8080/hello-mvc라는 요청이 들어오면 SpringBoot는 해당하는 Controller를 찾는다.
- 주소와 일치하는 Controller가 있다면 returen 값을 확인한다. 이때, RequestParam을 사용했기 때문에 name의 이름을 확인하고 ViewResolver에게 전달한다.
- viewResolver는 해당하는 웹 페이지를 연결시켜주는 동시에 name을 같이 변환을 해주어 화면을 출력한다.
3. API
1
2
3
4
5
6
7
8
9
10
11
12
13
@GetMapping("hello-string")
@ResponseBody //http에서 body에 직접 데이터를 입력하겠다는 것
public String helloString(@RequestParam("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;
}
API방식을 사용하기 위해서는 @ResponseBody 어노테이션을 사용한다.
첫번째 함수는 문자열 형식의 api를 반환하는 것이고
두번째 함수는 Hello라는 객체를 api로 반환하는 것이다.
- 스프링부트에 localhost:8080/hello-api 라는 요청이 들어오면 스프링 컨테이너에서 알맞는 Controller가 있는지 확인한다.
- @ResponseBody라는 어노테이션이 있으므로 viewResolver가 아닌 HttpMessageConvter에게 처리하라고 명령한다. 이때 HTTP의 Body 문자 내용을 직접 전달하는 방식으로 진행된다.
- 기본 문자 일때는 : StringConverter
- 기본 객체 일때는 : JsonConverter