241023 TIL Spring 웹 개발 기초 강의 / 개념 이해하기

J_log·2024년 10월 23일
0

오늘은 알고리즘 문제를 풀고 Spring 입문 강의를 들어봤는데 많은 내용은 아니었지만 익숙치 않아서 어렵게 느껴졌다. 학습하고 개념을 잡고, 코드를 직접 쳐보고 구현하면서 spring과 친해져보자

정적 컨텐츠

스프링 부트는 정적 컨텐츠 기능을 지원한다. html 파일을 작성하거나 완성된 파일을 resources/static 폴더에 위치시키면 스프링 애플리케이션을 작동 시키고 바로 로딩할 수 있다.

MVC와 템플릿 엔진

M : Model

  • 애플리케이션의 데이터와 그 데이터를 처리하는 로직을 담당한다. 데이터베이스와 상호작용하거나, 비즈니스 로직을 처리하는 부분이다.

V : View

  • 사용자가 상호작용 하는 UI를 담당한다. 모델로부터 데이터를 받아와 사용자에게 표시하며, 사용자의 입력을 컨트롤러로 전달한다.

C : Controller

  • 사용자의 입력을 처리하고, 그 입력을 기반으로 모델을 업데이트하거나 변경한다. 또한, 모델과 뷰 사이의 중개 역할을 하여 적절한 데이터를 뷰로 전달한다.

이렇듯 애플리케이션의 역할을 명확히 분리하여 유지보수를 쉽게하고 코드의 재사용성을 높이며 테스트를 더 용이하게 한다.

thymeleaf라는 템플릿 엔진을 사용해서 간단하게 웹페이지와 스프링이 소통하고 웹페이지를 조작한다.

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

브라우저에서 요청이 들어오면 내장 톰켓서버에서 컨트롤러로 요청을 보내주고 컨트롤러는 맵핑된 것을 찾아 뷰 리졸버(viewResolve)를 거쳐 웹 브라우저에 리턴하게 된다.

<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>

API

웹페이지를 통해서가 아닌 바로 데이터를 주고 받을 수 있다.

@ResponseBody 문자 반환

@Controller
public class HelloController {
	@GetMapping("hello-string")
	@ResponseBody
	public String helloString(@RequestParam("name") String name) {
		return "hello " + name;
	}
}
  • @ResponseBody를 사용하면 뷰 리졸버를 사용하지 않는다.
  • 대신에 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;
	}

}

@ResponseBody를 사용하고 객체를 반환하면 객체가 Json으로 변환된다.
ex) "name" : "spring"

post-custom-banner

0개의 댓글