bbosioy 2023. 7. 28. 14:55

1. 정적 컨텐츠

1) 내장 톰캣 서버가 요청을 받아 스프링에 넘긴다. 

2) 스프링은 컨트롤러를 우선순위로 찾아본다. 이후 내부에 있는 resources 속 일치하는 파일 명을 찾는다.

3) 반환한다. 

 

2. MVC와 템플릿 엔진 :  템플릿 엔진으로 랜더링 된 HTML을 고객에게 전달

1) 내장 톰캣 서버가 요청을 받아 매핑 되는 컨트롤러를 우선적으로 찾는다.

2) model에 담은 데이터를 스프링이 viewResolver에 던진다. 

3) viewResolver가 templates/파일명을 찾아 타임리프 템플릿 엔진에 던진다.

4) 타임리프 템플릿 엔진이 HTML로 변환 후 브라우저에 던진다.

 

3. API : Json으로 변환 후 객체 반환 

[@ResponseBody사용될 시]

1) Http의 Body에 문자 내용을 직접 반환 

2) viewResolver 대신에 HttpMessageConverter 가 동작 (스프링 부트에서 기본 세팅 되어 있음)

3) 기본 문자 처리 : StringHttpMessageConverter

@GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name) {
        //1. 문자일 경우
        //StringConverter
        return "hello " + name; // hello kim
        //@ResponseBody
        //뷰(html태그)가 없고 문자가 그대로 내려간다.
    }

4) 기본 객체 처리 : MappingJackson2HttpMessageConverter ( 객체를 Json으로 바꿔주는 라이브러리 : Jackson )

* Jackson/Gson

-> Jackson은 기본적으로 탑재 되어 있고, 구글에서 Gson을 다운 받아 라이브러리 사용 가능 

@GetMapping("hello-api")
    @ResponseBody
    public Hello helloApi(@RequestParam("name") String name) {
        //2. 객체일 경우 json방식으로 데이터 변환 -> http 응답에 응함
        //JsonConverter
        Hello hello = new Hello();
        hello.setName(name);
        return hello; //문자가 아닌 객체를 넘긴다. [xml이 아닌 json 방식]
    }
    static class Hello {
        private String name;

        public String getName() {
            return name;
        }

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

=> byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록 되어 있음

=> 웹 브라우저에 전달한다. 

 

** 실무에서 그대로 사용 된다! 

 

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