처음부터 차근차근

[Spring] Spring 입문 - 정적 컨텐츠, MVC 패턴, API 본문

FrameWork/Spring

[Spring] Spring 입문 - 정적 컨텐츠, MVC 패턴, API

HangJu_95 2023. 12. 18. 17:04
728x90

이번 포스팅은 간단하게 Spring을 통해 다양한 방법으로 데이터를 전송해보겠습니다.

이번에는 간단하게 구현을 하는 포스팅이며, 자세한 설명은 추후 MVC 패턴 강의에서 배워보도록 하겠습니다.

정적 컨텐츠

Spring Boot에는 Static content 기능이 있습니다.

이는 HTML 문서를 보여줄 수 있는 기능입니다.

먼저 HTML 파일을 하나 만들어줍니다.

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

HTML 문서 작동 후 서버를 돌려 Test를 진행해 보겠습니다.

 

http://localhost:8080/hello-static.html

실행된 정적 페이지

간단한 그림을 통해 어떻게 작동된건지 구조를 살펴보겠습니다.

스프링 구조_김영한님 강의

  • 웹 브라우저에서 해당하는 URL 주소 확인
  • Tomcat에서 스프링 컨테이너에서 해당하는 컨트롤러를 확인
  • 없는 경우 정적 페이지 폴더 static 확인 후 출력
  • Tomcat에서 해당하는 HTML Response 진행

MVC 패턴

이번에는 MVC 패턴을 통해 구현해보겠습니다.

먼저 Controller를 하나 만들어주겠습니다.

Controller

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

View

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

Controller에서 URL Param으로 name값을 받아 model에 적용시키는 간단한 MVC 패턴을 적용하였습니다.

한번 출력해보겠습니다.

실행된 MVC 패턴
MVC 동작 원리

이 부분은 Thymeleaf 템플릿 엔진을 통해 model의 값을 받아와 viewResolver에 적용시켰습니다.

이를 통해 내장 톰켓 서버는 HTML을 Response 합니다.

API

백엔드에서 가장 많이 사용하는 API입니다.

JSON을 통해 Response를 진행합니다.

간단한 코드를 작성해보겠습니다.

@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;

        // Getter
        public String getName() {
            return name;
        }

        // Setter
        public void setName(String name) {
            this.name = name;
        }
    }
}

@ResponseBody 에너테이션을 활용하며, 객체를 반환하면 객체가 JSON으로 변환됩니다.

API 적용기

@ResponseBody 에너테이션이 어떻게 적용되는지 한번 알아보겠습니다.

ResponseBody를 통한 적용

@ResponseBody 를 사용

  • HTTP의 BODY에 문자 내용을 직접 반환
  • viewResolver 대신에 HttpMessageConverter 가 동작
  • 기본 문자처리: StringHttpMessageConverter
  • 기본 객체처리: MappingJackson2HttpMessageConverter
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

HttpMessageConverter에서 Controller의 Response 객체 혹은 반환 값을 Json으로 변환해주거나, String으로 변환한 후, 톰켓 서버를 통해 Response를 반환합니다.