-
[Spring] 웹 개발 기초Spring 2021. 10. 1. 11:43
웹을 개발하는 방법은 크게 3가지가 있다.
- 정적 컨텐츠
- MVC와 템플릿 엔진
- API
정적 컨텐츠
서버에서 하는 것 없이 파일을 웹 브라우저에 내려주는 것
MVC와 템플릿 엔진
템플릿 엔진은 HTML을 그냥 주는 것이 아닌 프로그래밍을 거쳐 동적으로 바꿔서 내리는 것으로 JSP, PHP 등이 템플릿 엔진이다.
그것을 하기위해 Model View Controller가 필요하다.
API
JSON이라는 데이터 포맷으로 클라이언트에게 데이터를 전달한다.
Vue React도 다 JSON에서 받아 클라이언트에서 알아서 화면을 그리고 정리해준다.
서버끼리 데이터 통신을 할 때에도 HTML이 필요없어 API방식을 쓴다.
방법별 상세 설명
정적컨텐츠
static에 넣으면 알아서 접근 가능하다.
내장 톰캣서버가 요청을 받고 그걸 스프링에 넘긴다.
스프링은 그걸 컨트롤러 쪽으로 우선 찾아보고, 없다면 resource:static/로 가서 찾아봄 그리고 반환
MVC와 템플릿 엔진
옛날에는 View에 모든걸 다 넣었다고 한다.
소위 model1 방식.
하지만 요즘에는 MVC스타일로 많이 한다고 한다. 이유는 개발은 관심사를 나눠야 하고 역할이 쪼개져 있어야하기 때문이다.
View는 화면을 그리는데 모든 집중을 하는게 좋다.
Controller은 비즈니스 조직과 관련있거나 내부적인걸 처리하는데 집중해야한다.
Model에는 화면에 필요한 걸 담아서 넘기는 패턴을 주로 사용한다.
@Controller public class HelloController{ @GetMapping("hello-mvc") public String helloMvc(@RequestParam("name") String name, Model model){ model.addAttribute("name", name); return "hello-template"; } }
<!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <body> <p th:text="'hello ' + ${name}">hello! empty</p> </body> </html>
파라미터를 받기 위해선, @RequestParam("key")을 써서 받아야한다.
thymeleaf를 쓰게 되면 매핑이 안되도 출력을 할 수 있게끔 되어있다.
템플릿 엔진으로써 동작을 할 수 있게 되면, 속성값으로 치환이 가능하다.
viewResolver는 view를 찾아주고 template을 연결시켜준다.
API
MVC방법과 차이가 조금 있다.
Model을 인자로 안쓰고 @ResponseBody 를 붙여준다.
return을 해주면 View단으로 가는게 아닌 리턴 자체가 페이지가 된다.
ResponseBody사용원리
@ResponseBody 문자반환
@Controller public class HelloController{ @GetMapping("hello-string") @ResponseBody public String helloString(@RequestParam("name") String name){ return "hello " + name; } }
@ResponeBody를 사용하면 viewResolver를 사용하지 않는다.
HTTP의 BODY에 문자 내용을 직접 반환한다.
@ResponseBody 객체 반환
@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; } } }
(getter setter -> 자바빈 규약, 프로퍼티 접근방식이라고 부른다고 한다.)
@ResponseBody를 사용하고, 객체를 반환하면 객체가 JSON으로 변환된다.
ResponseBody 태그를 확인하면 http응답을 그대로 데이터를 넘겨야겠다고 동작을 함 -> StringConverter
그래서 텍스트의 경우엔 바로 넘어가나 객체의 경우엔
객체가 들어오면 디폴트로 JSON 형식으로 데이터를 만들어서 HTTP응답에 반응하겠다가 기본정책 -> JsonConverter
정확한 호출은
기본 문자처리 : StringHttpMessageConverter
기본 객체처리 : MappingJackson2HttpMessageConverter
MappingJackson => 객체를 JSON형식으로 바꿔주는 컨버터
출처 : 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 학습 페이지 (inflearn.com)
'Spring' 카테고리의 다른 글
[Spring] Form에 쏴준 데이터 받고 다시 출력하기 (0) 2021.10.06 [Spring] 스프링 빈과 의존관계 (0) 2021.10.05 [Spring] Test 코드 기초작성 (0) 2021.10.04 [Spring] Welcome Page 만들기 (0) 2021.09.28 [Spring] 프로젝트 생성 후 구조 겉핥기 (0) 2021.09.27