일반적인 웹 어플리케이션의 계층구조
mvc : 모델, 뷰, 컨트롤러
내부정보처리 결과를(비즈니스로직) 모델에 담아 뷰로 전달하는 형식임.
컨트롤러 : 웹 mvc의 컨트롤러(뷰에 변수를 전달하고 API를 생성하는 등의 역할)
서비스 : 핵심 비즈니스 로직을 구현함(중복가입 불가 등의 기능을 구현함)
리포지토리 : 데이터베이스에 접근 도메인 객체를 DB에 저장하고 관리함
도메인 : 비즈니스 도메인 객체 ( 회원, 주문 등의 DB에 저장하고 관리되는 객체들)
뷰(그림을 표현하는 html) :
resources/static/ 이 경로의 파일 : 정적 컨텐츠임 파일 명 자체가 url이 됨.
별도의 코딩 불가. 있는 것을 그대로 나타내게 됨. 반응형 x
resources/templates/ 이 경로의 파일 : 코딩이 가능(${data}를 사용해 데이터를 표시한다거나 하는 등)
url검색 선제권은 controller가 가짐. 즉 데이터 변수를 controller에서 view로 넘겨줌
mvc와 템플릿 엔진
@Controller
public class HelloController {
@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model) {
model.addAttribute("name", name);
return "hello-template";
}
}
코드 해석 :
@GetMapping("hello-mvc")
->/hello-mvc의 url이 들어오면 이 컨트롤러에서 받아 처리한다.
@RequestParam("name") String name
-> @RequestParam("가져올 데이터의 이름") 타입 데이터를 담을 변수 의 형식으로 사용한다.
model.addAttribute("name", name);
->모델 객체를 이용해서 값을 view로 넘긴다
return "hello-template";
->리턴 값으로 문자를 반환하면 뷰리졸버가 화면을 찾아서 처리한다. 즉
templates/hello-template.html을 찾아서 화면에 뿌려준다.
@ResponseBody 문자반환
@ResponseBody를 사용하면 뷰 리졸버 사용 없이 http의 바디에 문자 내용을 직접 넣어주겠다 라는 뜻.
(html의 바디 아니고 http의 바디! 헷갈리지 말자)
@Controller
public class HelloController {
@GetMapping("hello-string")
@ResponseBody
public String helloString(@RequestParam("name") String name) {
return "hello " + name;
}
}
이걸 실행하고 /hello-spring?name=내가 넣을 단어 이 url을 실행하면
hello 내가 넣은 단어
이렇게 화면에 뜨게 된다.
@ResponseBody를 사용하고 객체를 반환하면 객체가 JSON으로 변환된다.
사용원리
HTTP의 BODY에 문자 내용을 직접 입력해 반환해줌.
viewResolver 대신 HttpMessageConverter가 동작.
기본 문자처리는 StringHttpMessageConverter가 처리하고
기본 객체처리는 MappingJackson2HttpMessageConverter가 처리함.
기타 여러 HttpMessageConverter가 기본으로 등록 되어 있음.
클라이언트 HTTP Accept 헤더와 서버 컨트롤러 반환 타입 정보 두가지를 조합해 어떤 컨버터를 사용할지가 결정됨.
'스프링' 카테고리의 다른 글
빌드 관리 도구 Maven, Gradle 차이 (0) | 2022.03.24 |
---|---|
hello jpa (0) | 2022.03.23 |
jpa 실습을 위한 세팅(인텔리제이) (0) | 2022.03.23 |
서블릿 (0) | 2022.03.23 |
스프링2 스프링의 다양한 파일들 (0) | 2021.12.20 |