4 min read

<Spring> 스프링 웹 개발 시작하기

해당 글은 김영한님의 <스프링 입문> 강좌를 기반으로 작성되었습니다.

Static Content 방식

Static Content 구현해보기
  • 아래의 hello-static.html파일을 resources/static 디렉토리에 넣는다
<!DOCTYPE HTML>
<html>
<head>
    <title>static content</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
</head>
<!DOCTYPE HTML>
<body>
정적 컨텐츠입니다!
</body>
Static Content 구현 동작 이미지

MVC(템플릿 엔진 사용) 방식

MVC
  • Model,View,Controller의 약자로 각각의 역할을 나누어 본인의 일에만 집중하게 하는 방식이라고 한다. 코드를 보면 이해 할 수 있다.
Controller 구현
//Using MVC and Template Engine
    @GetMapping("hello-mvc")
    public String helloMvc(@RequestParam("name") String name, Model model){
        model.addAttribute("name",name);

        return "hello-template";
    }
View 구현
  • 위의 Controller에서 리턴해주는 “hello-template” 파일이 view역할을 한다.
  • hello-template.html을 resources/templates에 생성한다.
<html xmlns:th="http://www.thymeleaf.org">
<body>
<p th:text="'hello ' + ${name}">hello! empty</p>
</body>
</html>
  • 이후 http://localhost:8080/hello-mvc?name=brido으로 접속을 하면 아래와 같은 결과를 얻을수 있다.
  • name=“어떠한 값”으로 설정하고 해당 값을 method에서 model에 심어주고 name이 담긴 모델이 뷰로 넘어가면서 출력이 가능하게 된다.
MVC 동작 그림

API 방식

@ResponseBody의 문자 반환
	//Using API ver1 -> 메서드에서 String 반환
    @GetMapping("hello-string")
    @ResponseBody// 문자열 반환
    public String helloString(@RequestParam("name") String name){
        return "hello" + name;
    }
  • 해당 코드의 경우, hello + name의 값을 그대로 반환해주는 API 방식이며, 설명을 위해 가져온 예제라고 보면된다.
@ResponseBody의 객체 반환
//Using API ver2 - Using JSON -> 메서드에서 객체가 반환
    @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 and Setter -> java bean 표준
        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }
    }
  • 대부분의 경우 API를 사용하면 위의 방식을 사용한다.
  • 위 방식은 서버와 서버간의 데이터 전송을 할때 JSON이라는 포맷에 객체를 전달하는 과정을 수행한다.
  • 아래와 같이 url을 작성해 name에 brido라는 값을 전달하면, 해당 값을 전달받은 Hello객체가 JSON형태로 출력된다
@ResponseBody 사용 원리
  • HTTP Body에 데이터를 주입해서 전송한다.
  • MVC 방식과 달리 view-resolver를 사용하지 않고 HttpMessageConverter가 동작한다.
  • HttpMessageConverter는 다양한 Converter를 가지고 있으며 HTTP의 accept 헤더와 서버의 Controller 반환 타입을 보고 Converter를 결정한다.
  • 문자열 처리는 StringHttpMessageConverter가 맡고 객체 처리는 스프링에선MappingJackson2HttpMessageConverter가 수행한다.