[Spring 입문] 1. 스프링 웹개발 3가지 방식

강은서·2022년 1월 6일
0

Spring

목록 보기
2/11
post-thumbnail

Spring으로 웹 개발시 크게 정적 콘텐츠, MVC와 템플릿 엔진, API 3가지 방식이 있다.

1. 정적 컨텐츠

서버에서 별다른 작업이 이루어지지 않고, html 파일을 그대로 넘겨줘서 보여주는 방식이다.

  • 웹브라우저에 localhost:8080/hello-static 으로 접속하게 되면, 우선 스프링 부트 내 내장 톰켓 서버에게 보내진다.
  • 톰켓 서버는 스프링 컨테이너에서 hello-static 관련 컨트롤러를 먼저 찾는다.
  • 없는 경우, resource에 있는 html을 찾는다.
  • 웹브라우저에 html을 보내서 화면에 보내준다.

2. MVC와 템플릿 엔진

1) MVC란 무엇인가?

  • Model View Controller
    • Model : 어플리케이션 계층의 정보, 데이터 의미한다.
    • View : 화면 출력 로직을 담당한다.
    • Controller : Model과 View를 연결하는 제어 로직을 담당한다.
    • 과거에는 controller과 view 가 분리되어 있지 않고, view에만 있었음 → model 1방식
      - view는 화면을 그리는 것에 집중해야 한다.
      - controller 비즈니스 관련, 내부적인 처리에 대해 집중해야 한다.
      그래서, controller와 view가 분리되어 mvc 방식으로 사용되고 있다.

2) MVC를 이용하여 hello spring 출력

  1. 클라이언트가 http://localhost:8080/hello-mvc?name=spring으로으로 접속하는 경우, 내장 톰켓 서버을 통해서 스프링은 controller 메서드를 호출한다.

  2. controller는 hello-template, model(name:spring)을 스프링에게 보낸다.

  • HelloController.java
@Controller

public class HelloController{

	//hello-mvc라는 url에 매칭이 되도록 한다.
	@GetMapping("hello-mvc")
	public String helloMvc(@RequestParam("name") String name, Model model){
		model.addAttribute("name", name);
		return "hello-template";
	}
  • 입력 파라미터로 “name”키에 값을 받아들이도록 하며, name=???값을 이용해 “hello-template”을 반환하도록 한다.
  1. viewResolver는 view를 찾아주고, template engine(thymeleaf)를 찾아준다.

  2. viewResolver가 templates에서 hello-template을 찾아서 Thymeleaf 템플릿 엔진에게 보낸다.

  • hello-template.html
<html xmlns:th="http://www.thymeleaf.org">
<body>
	<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
  • ${name}을 통해 HelloController의 helloMvc()에 있는 name attribute를 가져오도록 한다
    • 만약, hello-mvc를 접속할 때, parameter를 입력하지 않으면, 실행되지 않는다.
    • required는 default값이 true이다. 만약, 선택적으로 넘겨준다면 required = false로 설정해야 한다.
  • thymeleaf 템플릿의 장점은 서버 없이 html 파일을 열어볼 수 있음.
    • 서버 없이 html을 불러오게 되면, hello! empty가 출력되고, 서버를 돌리게 되면 text가 출력된다.
  1. 템플릿은 렌더링하여서 변환한 html을 보낸다.
  • 소스보기로 하면, 변환된 html을 볼 수 있다.

3. API

1) @ReponseBody 사용 원리

  • HTTP의 BODY에 문자 내용을 직접 반환하겠다는 annotation
    • @ReponseBody를 사용하면 ViewResolver를 사용하지 않는다.
    • viewResolver대신에 HttpMessageConverter가 동작한다.
  • 코드 소스를 보게 되면, html태그가 보이지 않고, 데이터만 보인다.
  • 기본 문자 처리 : StringHttpMessageConverter
  • 기본 객체 처리 : MappingJackson2HttpMessageConverter
    • Spring은 객체를 json으로 바꿔주는 라이브러리인 Jackson을 기본으로 사용한다.
    • @ResponseBody를 사용하고, 객체를 반환하면 객체가 JSON으로 변환된다.

2) @ResponseBody 문자 반환

@Controller
public class HelloController{

	@GetMapping("hello-string")
	@ResponseBdoy
		public String helloString(@RequestParam("name") String name){
			return "hello " + name;
	}
}

3) @ReponseBody 객체 반환

@Controller
public class HelloController{
	@GetMapping("hello-api")
	@ReponseBody //Json으로 반환한다.
	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){
		his.name = name;

다음 글은 인프런 김영한 강사님의 스프링 강의 복습용입니다 :)

0개의 댓글