Spring/스프링입문

[스프링입문] 섹션2. 스프링 웹 개발 기초

LTSGOD 2023. 1. 12. 14:40

1. 정적 컨텐츠

- 그냥 서버에서 파일을 그대로 웹브라우저에 주는것

2. MVC와 템플릿 엔진

- 서버에서 파일을 그대로 주는 것이 아닌 서버에서 프로그래밍을 해서 동적으로 바꿔서 주는것

- Controller model, view 로 나뉨

 

차이: 파일을 그대로 전달, 반면 서버에서 변형을 해서 html에 내려줌

 

3.API

 

JSON 데이터 포맷  로 전달

서버끼리 통신할때

 

1. 정적 컨텐츠

- 스프링 부트는 자동 제공

- static 폴더에서 찾아 제공

- 웹에서 주소에 원하는 파일 넣으면 그대로 반환 해줌 -> 정적컨텐츠를 제공하는 기능

 

 

 - localhost:8080/hello-static 요청 내장톰켓서버가 스프링에게 넘김

 - spring 은 먼저 controller쪽에 hello-static 있는지 확인, 그 후 리소스 내부에 스태틱에서 hello-static 을 찾아서 반환

 - 우선순위 1. controller 2. 스태틱

 

2. MVC

- view 를 프로그래밍해서 렌더링 된 html 을 넘겨준다.

- model, view, controller

- view->화면을 그리는 데 모든 역량 집중

- controller -> 비즈니스나 내부로직에 집중

- model -> model 에담으면 view 에서 렌더링할때 씀.

- 역할을 쪼갬

 

 - localhost:8080/hello-mvc.html 요청 내장톰켓서버가 스프링에게 넘김

 - spring 은 먼저 controller쪽에 확인, controller 존재하므로 뷰리졸버에게  hello-template 리턴

 - 뷰리졸버가 변환하여 웹브라우저에 넘겨줌

 

3. API

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

- html로 웹에 보여주는 것이 아니라 http 프로토콜의 body부분에 직접 삽입(@ResponseBody 어노테이션으로)

- hello라는 객체를 반환하고 이를 JSON으로 반환(default로 세팅되어 있음)

-localhost:8080/hello-api 를 톰캣서버에서 스프링으로 넘겨줌

-스프링은 hello-api가 있는데 @ResponseBody 도 있다는 것을 확인 ->뷰리졸버에게 뿌리지 않고 HttpMessageConverter라는 친구가 동작. 단순 String -> StringConverter동작. But 객체이면 JsonConverter 동작.

- string 인경우 웹페이지에 그대로 내리지만 객체인 경우 JSON형식으로 내림.

 

@ResponseBody

-(HTTP의 body에 문자내용을 직접반환) 

-뷰 리졸버 대신 HttpMessageConverter가 동작

-기본 문자처리: StringHttpMessageConverter

-기본 객체처리: MappingJackson2HttpMessageConverter

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

 

thymeleaf의 장점

- url로 파일을 그대로 열었을때도 그 안을 볼 수 있음.(오른쪽)

- 반면 템플릿 엔진으로 동작하면 안의 내용으로 치환(왼쪽)

<p th:text="'hello ' + ${name}">hello! empty</p>