1. 정적 컨텐츠
- 그냥 서버에서 파일을 그대로 웹브라우저에 주는것
2. MVC와 템플릿 엔진
- 서버에서 파일을 그대로 주는 것이 아닌 서버에서 프로그래밍을 해서 동적으로 바꿔서 주는것
- Controller model, view 로 나뉨
차이: 파일을 그대로 전달, 반면 서버에서 변형을 해서 html에 내려줌
3.API
JSON 데이터 포맷 로 전달
서버끼리 통신할때
1. 정적 컨텐츠
- 스프링 부트는 자동 제공
- static 폴더에서 찾아 제공
- 웹에서 주소에 원하는 파일 넣으면 그대로 반환 해줌 -> 정적컨텐츠를 제공하는 기능
- localhost:8080/hello-static 요청 내장톰켓서버가 스프링에게 넘김
- spring 은 먼저 controller쪽에 hello-static 있는지 확인, 그 후 리소스 내부에 스태틱에서 hello-static 을 찾아서 반환
- 우선순위 1. controller 2. 스태틱
2. MVC
- view 를 프로그래밍해서 렌더링 된 html 을 넘겨준다.
- model, view, controller
- view->화면을 그리는 데 모든 역량 집중
- controller -> 비즈니스나 내부로직에 집중
- model -> model 에담으면 view 에서 렌더링할때 씀.
- 역할을 쪼갬
- localhost:8080/hello-mvc.html 요청 내장톰켓서버가 스프링에게 넘김
- spring 은 먼저 controller쪽에 확인, controller 존재하므로 뷰리졸버에게 hello-template 리턴
- 뷰리졸버가 변환하여 웹브라우저에 넘겨줌
3. API
@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;
}
}
- html로 웹에 보여주는 것이 아니라 http 프로토콜의 body부분에 직접 삽입(@ResponseBody 어노테이션으로)
- hello라는 객체를 반환하고 이를 JSON으로 반환(default로 세팅되어 있음)
-localhost:8080/hello-api 를 톰캣서버에서 스프링으로 넘겨줌
-스프링은 hello-api가 있는데 @ResponseBody 도 있다는 것을 확인 ->뷰리졸버에게 뿌리지 않고 HttpMessageConverter라는 친구가 동작. 단순 String -> StringConverter동작. But 객체이면 JsonConverter 동작.
- string 인경우 웹페이지에 그대로 내리지만 객체인 경우 JSON형식으로 내림.
@ResponseBody
-(HTTP의 body에 문자내용을 직접반환)
-뷰 리졸버 대신 HttpMessageConverter가 동작
-기본 문자처리: StringHttpMessageConverter
-기본 객체처리: MappingJackson2HttpMessageConverter
- byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음
thymeleaf의 장점
- url로 파일을 그대로 열었을때도 그 안을 볼 수 있음.(오른쪽)
- 반면 템플릿 엔진으로 동작하면 안의 내용으로 치환(왼쪽)
<p th:text="'hello ' + ${name}">hello! empty</p>
'Spring > 스프링입문' 카테고리의 다른 글
[스프링입문] 섹션6-1. 스프링 DB 접근 기술 - Jdbc, JdbcTemplate (0) | 2023.01.17 |
---|---|
[스프링입문] 섹션5. 회원관리 예제 - 웹MVC개발 (0) | 2023.01.17 |
[스프링입문] 섹션4. 스프링 빈과 의존관계 (2) | 2023.01.16 |
[스프링입문] 섹션3.회원 관리 예제 - 웹MVC개발 (0) | 2023.01.16 |
[스프링입문] 섹션1. 프로젝트 환경 설정 (0) | 2023.01.12 |