DINGA DINGA
article thumbnail
728x90

웹 개발 방법

  • 정적 컨텐츠: 파일을 그대로 웹브라우저에 전달하는 것
  • MVC와 템플릿 엔진: 서버에서 프로그래밍해서 html을 동적으로 바꾸는 것 (대부분 이 방식 채택)
  • API: json 등의 포맷으로 클라이언트에 데이터 전달하는 방식

정적 컨텐츠

스프링 부트에서 제공하는 정적 컨텐츠 기능은 다음과 같이 작동한다.

 

static/hello-static.html 파일이 존재할 때, 웹 브라우저에서 localhost:8080/hello-static.html에 접속한 경우

1) 내장 톰캣 서버에서 스프링 컨테이너에 데이터 요청

2) 스프링 컨테이너는 hello-static 관련 컨트롤러가 있는지 탐색 (컨트롤러가 우선순위를 가짐)

3) 매핑된 컨트롤러가 없으므로 resources: static/hello-static.html을 찾아 반환함

출처: 인프런 스프링 입문 강의 (김영한님)


MVC와 템플릿 엔진

MVC: Model, View, Controller

 

hello-mvc 컨트롤러와 hello-template.html 파일을 생성하고 매핑해 놓은 상태일 때

1) 내장 톰캣 서버에서 스프링 컨테이너에 데이터 요청

2) helloController의 hello-mvc 메소드에 매핑이 되어 있으므로 호출함

3) name에 'spring'이라는 값을 넣은 경우 해당 값도 함께 스프링에 반환

4) 스프링이 viewResolver를 통해 templates/hello-template.html을 찾아 Thymeleaf 템플릿에 처리 요청

5) 템플릿 엔진에서 값을 변환하여 웹 브라우저에 넘김

출처: 인프런 스프링 입문 강의 (김영한님)

 

실제로 파일을 만들어 놓고 웹 브라우저에서 name 파라미터 값으로 'spring!!!!'을 넣어 요청해 보면 아래와 같은 화면을 볼 수 있다.

http://localhost:8080/hello-mvc?name=spring!!!!


API

HelloController.java에 아래 내용을 추가하여 API 동작 방식을 확인해보자.

 

1) String을 반환하는 경우

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

@ResponseBody를 사용하면 ViewResolver를 사용하지 않고 HTTP의 Body에 문자 내용을 직접 반환한다.

문자를 반환하는 경우

 

2) 객체를 반환하는 경우

@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 형태로 변환된다.

객체를 반환하는 경우

(내 경우는 크롬 확장 프로그램인 JSON Viewer를 사용하여 위와 같이 보이지만, 원래 {"name": "spring"} 부분만 보인다.)

 

출처: 인프런 스프링 입문 강의 (김영한님)

@ResponseBody를 사용하면 ViewResolver 대신 HttpMessageConverter가 동작한다.

 

기본 문자 처리는 StringHttpMessageConverter가,

기본 객체 처리는 MappingJackson2HttpMessageConverter가 담당한다.

 

보통 스프링에서 이야기하는 API 방식은 객체 반환 방식을 의미한다.

728x90