스프링 웹 개발 기초
정적 컨텐츠
- 서버에서 특별한 동작을 하지 않고 파일을 그대로 웹브라우저(client)로 전달
- 스프링 부트는 정적 컨텐츠를 제공함
<!DOCTYPE HTML>
<html>
<head>
<title>static content</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>
- localhost:8080/hello-static.html
- 원하는 파일을 넣으면 파일 그대로 반환됨
- 내장 톰켓 서버가 요청을 받고 Spring에 controller가 있는지 찾아봄
- hello-static이라는 컨트롤러, 맵핑된 컨트롤러가 존재X
- resources 안에 있는 static/hello-static.html을 찾음
- 찾은 파일을 반환
MVC와 템플릿 엔진
- Model, View, Controller
- 서버에서 변형을 해서(EX. HTML 파일 변경) 웹브라우저(client)로 전달
<html xmlns:th="http://www.thymeleaf.org"> <body> <p th:text="'hello ' + ${name}">hello! empty</p> </body> </html>
- 단순히 hello-mvc를 열면 에러 발생
- localhost:8080/hello-mvc?name=spring!!!!!!
- 파라미터를 넘겨줘야 함
- controller가 name=spring!!!!!!을 보고 model의 name에 spring!!!!!!을 담음
- ${name} : 모델의 key 값이 name인 것에서 value를 꺼냄
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
- 작동방식
- 웹브라우저에서 localhost 8080에 hello-mvc 넘기면 Spring Boot가 내장 톰켓 서버를 거침
- 내장 톰캣 서버는 hello-mvc를 스프링한테 전달
- 스프링은 helloController 메서드에 맵핑이 돼 있는걸 확인하고 이 메서드를 호출
- helloController는 hello-template와 key(name):value(spring)을 스프링한테 전달
- 스프링 viewResolver가 return의 string과 똑같은 파일을 찾아서 Thymeleaf 템플릿 엔진에서 처리해 달라고 전달
- ViewResolver는 뷰를 찾고 템플릿을 연결시켜줌
- 템플릿 엔진이 렌더링 후 변환한 HTML을 반환함
API
- 데이터 구조 포맷으로 클라이언트 한테 데이터를 전달(요즘은 JSON 많이 사용)
- @ResponseBody : http의 body부에 데이터를 직접 넣겠다
- 템플릿 엔진과 차이점 : view가 따로 존재하지 않고, name 문자가 그대로 전달됨
- http://localhost:8080/hello-string?name=spring 열어보면 html 태그가 존재하지 않고, 단순히 문자열 그대로 내려감. 즉 데이터가 그대로 내려감
@Controller public class HelloController { @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://localhost:8080/hello-api?name=spring!!!!! 를 열어보면 객체가 JSON으로 변환됨
- 기본 : 객체를 반환하고 response body --> Json으로 반환
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name; // "hello spring"
}
- 작동 방식
- 톰켓 내장 서버에서 hello-api를 스프링에 전달
- 스프링에서 hello-api controller를 찾음
- responseBody의 annotaion이 존재(얘가 없으면 viewResolver로 전달됨)
- httpMessageConverter가 동작 --> 리턴 타입이 객체임 --> JsonConverter가 동작해서 json 포맷으로 변환
- 리턴 타입이 string이면 StringConverter가 동작
- 기본 문자처리:
StringHttpMessageConverter
- 기본 객체처리:
MappingJackson2HttpMessageConverter
- json을 http 바디에 실어서 client에게 전달
- HTTP Accept 해더에 특정 포맷을 지정해주면 해당 메시지컨버터가동작을 함
참조) 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 강좌 (인프런 김영한)
'Spring > MVC' 카테고리의 다른 글
[Spring/입문] 06. 스프링 DB 접근 기술 (0) | 2024.05.13 |
---|---|
[Spring/입문] 회원 관리 예제 - 웹 MVC 개발 (0) | 2024.04.29 |
[Spring/입문] 스프링 빈과 의존관계 (0) | 2024.04.29 |
[Spring/입문] 회원 관리 예제 - 백엔드 개발 (0) | 2024.04.29 |
[Spring/입문] 스프링 View 환경설정 (0) | 2024.04.28 |