[spring] 스프링 웹 개발 기초

이진이·2023년 8월 10일
0
post-thumbnail

🤗이 글은 "스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술" 김영한님 강의를 듣고 작성하였습니다.

스프링 웹 개발 기초

1. 정적 컨텐츠

그냥 파일을 그대로 내려준다.

브라우저에서 input.html 을 요청받으면 톰켓 내장서버에서 static폴더 하위에 있는 input.html 파일을 찾아 클라이언트로 전송한다.


2. MVC 템플릿 엔진

템플릿 엔진을 모델 뷰 컨트롤러 방식으로 쪼개서 뷰를 템플릿 엔진으로 랜더링 된 html을 클라이언트에게 전달해 준다.

Controller

@Controller
public class HelloController {
	@GetMapping("hello-mvc")
	public String helloMvc(@RequestParam("name") String name, Model model) {
		model.addAttribute("name", name);
 		return "hello-template";
 	}
}

View

<html xmlns:th="<http://www.thymeleaf.org>">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
  1. 사용자가 hello-mvc를 요청하면 helloController가 모델을 통해서 데이터를 가공한다(클라이언트의 요청 처리).
  2. controller는 가공한 데이터(modlename:spring)와 view페이지의 정보(hello-template)를 담은 ModelAndView객체를 반환한다.
  3. 이를 토대로 viewResolver가 templates하위에 있는 hello-template.html을 찾아 html로 변환하여 반환한다.

여기서 모델(model)은 애플리케이션의 데이터(데이타베이스, 처음의 정의하는 상수, 초기화값, 변수 등)을 뜻한다. 또한 이 데이터들의 가공하는 컴포넌트를 포함한다.

참고


3. API

보통 일반적인 스프링의 api방식은 객체를 반환하는 것. MappingJakson2HttpMessageConverter를 통해서 json스타일로 바꿔서 반환해준다.
뷰 이런거 없이 바로 html response에 반환해주는 것

ResponseBody 사용 원리

  • @ResponseBody를 사용하면 viewResolver 대신에 HttpMessageConverter 가 동작
  • 기본 문자처리: StringHttpMessageConverter
  • 기본 객체처리: MappingJackson2HttpMessageConverter
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

@ResponseBody 문자 반환

@Controller
	public class HelloController {
 	@GetMapping("hello-string")
	@ResponseBody
 	public String helloString(@RequestParam("name") String name) {
 		return "hello " + name;
 	}
}
  • HTML 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;
 		}
 	}
}
  • @ResponseBody를 사용하고 객체를 반환하면 JSON으로 변환됨
profile
프론트엔드 공부합니다. 블로그 이전: https://jinijana.tistory.com

0개의 댓글