프로그래밍/Spring

[Spring Boot] 입문 - 2. 스프링 개발 기초

daykim 2022. 10. 19. 17:22
김영한 스프링 입문 강의 정리
 

[무료] 스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술 - 인프런 | 강의

스프링 입문자가 예제를 만들어가면서 스프링 웹 애플리케이션 개발 전반을 빠르게 학습할 수 있습니다., - 강의 소개 | 인프런...

www.inflearn.com

목차

  • 정적 컨텐츠
  • MVC와 템플릿 엔진
  • API

정적 컨텐츠 (Static Content)

동작 방식

  1. 내장 톰캣 서버가 요청을 받아 spring에 넘김
  2. 스프링부트는 우선 controller에서 요청이 매핑된(hello-static) 컨트롤러를 찾아본다. → 있으면 반환
  3. 찾지 못 한 경우 resources: static/hello-static.html을 찾아서 있으면 반환해준다.

ex)

<!-- hello-static.html -->
<!DOCTYPE HTML>
<html>
<head>
	<title>static content</title>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<body>
정적 컨텐츠 입니다.
</body>
</html>

 

MVC와 템플릿 엔진

  • M : Model
  • V : View
  • C : Controller

동작 방식

  1. 내장 톰캣 서버가 받은 요청을 스프링에 넘김
  2. 스프링에서 매서드가 매핑된 컨트롤러를 찾아 메서드를 호출한다.
  3. 호출된 메서드의 리턴값을 스프링에 넘겨준다. viewResolver가 뷰를 찾아 템플릿 엔진을 연결시켜줌
  4. 템플릿엔진이 렌더링해 변환한 HTML을 웹 브라우저에게 반환한다.

ex)

Controller

@Controller
public class HelloController{

	@GetMappint("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>

실행 시 에러 발생 → warning 확인 ⇒ Required String parameter ‘name’이 존재하지 않는다.

  • @RequestParam에 required 라는 옵션이 있다.
    • default가 true로 설정됨
    • false로 설정하면 안 넘겨도 됨
    • localhost:8080/hello-mvc?name=spring 위와 같은 형식으로 넘겨주면 된다.

 

API

동작 방식

  1. 톰캣 내장서버에서 요청을 스프링에 넘김
  2. 스프링에서 responsBody 붙어있는것을 확인
  3. 앞에서와 달리 viewResoler에게 주는게 아닌 Http의 Body에 데이터 직접 반환한다. 그런데 return 값이 객체다. 객체는 default로 json방식으로 데이터를 만들어 Http에 반환하는 것이 기본 정책
    • HttpMessageConverter가 동작
    • 기본 문자 처리 : StringHttpMessageConverter가 동작
    • 기본 객체 처리 : MappingJackson2HttpMessageConverter가 동작
  4. hello 객체를 json 스타일로 바꿔 이를 요청한 곳에 반환해준다.

ex)

Controller

@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;
    }
}
  • localhost:8080/hello-api?name=spring
  • 위와 같이 실행시 화면에 json 형식으로 출력된다.

 

페이지 소스 보기 : MVC와 API 차이

  • MVC

  • API