과정을 즐기자

스프링 웹 개발 기초 본문

Spring

스프링 웹 개발 기초

320Hwany 2022. 7. 14. 16:50
  • 정적 컨텐츠

 

웹 브라우저가 localhost:8080/hello-static.html 내장 톰켓 서버가 먼저 요청 받는다. 스프링한테 넘기고 스프링은 먼저 컨트롤러 쪽에서 hello-static이 있는지 찾아본다. 컨트롤러가 먼저 우선순위를 가짐

없으면 resources 안에 있는 static/hello-static.html을 찾는다.

 

서버에서 하는 일 없이 파일을 그냥 그대로 웹 브라우저에 내려준다.

 

  • MVC와 템플릿 엔진

MVC : Model, View, Controller

다음과 같이 분리했다. View는 화면을 그리는데 집중한다. Controller나 Model과 관련된 부분들은 비즈니스 로직과 관련 있거나 내부적인 것을 처리하는데 집중한다. model이라는 것에 화면에서 필요한 것들을 담아가지고 넘겨주는 패턴이다.

@GetMapping("hello-mvc")
public String helloMvc(@RequestParam("name") String name, Model model){
    model.addAttribute("name",name);
    return "hello-template";
}

localhost:8080/hello-mvc?name=spring!!! 로 웹 브라우저에 입력하면 HTML파일의 ${name}이 spring!!!으로 치환된다.

@RequestParam("가져올 데이터의 이름") [데이터 타입] [가져온 데이터를 담을 변수]

 

가장 많이 하는 방식으로 HTML을 그냥 주는 것이 아니라 서버에서 프로그래밍해서 HTML을 동적으로 바꿔서 내림 (템플릿 엔진)

 

  • API

안드로이드나 아이폰 클라이언트와 개발을 해야 한다면 서버 입장에서는 json이라는 데이터 포맷으로 내려준다. 또한 서버끼리 통신할 때는 HTML 필요가 없고 데이터가 흐를 때 API 방식을 사용한다.

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

localhost:8080/hello-api?name=spring!!! 이라고 웹 브라우저에  검색하면 HTML파일 없이 hello spring!!! 이 출력된다.

@ResponseBody : HTML에 나오는 body tag가 아니라 HTTP에서 (header, body로 나뉨) body부에 이 데이터를 직접 넣어줌

템플릿 엔진과의 차이는 view와 같은 것이 없다. 그냥 이 문자 그대로 내려간다.

@GetMapping("hello-api")
@ResponseBody
public Hello helloApi(@RequestParam("name") String name){
    Hello hello = new Hello();
    hello.setName(name);
    return hello;
}

객체를 받으면 {"name" : "spring!!!"} : json 방식인 key, value로 이루어진 구조로 출력된다. 

 

@ResponseBody가 안 붙어있으면 viewResolver한테 던지고 맞는 것을 찾아달라고 한다. 붙어있으면 데이터를 그대로 넘긴다. 

문자가 아니라 객체로 오면 json 방식으로 데이터를 만들어서 HTTP 응답에 반환한다.

HttpMessageConverter: JsonConverter (객체) , StringConverter (문자) 

'Spring' 카테고리의 다른 글

MVC 프레임워크 구현하기 - 2  (0) 2022.10.29
MVC 프레임워크 구현하기 - 1  (0) 2022.10.29
싱글톤 컨테이너 (모각소 4주차)  (0) 2022.07.24
웹 MVC  (0) 2022.07.18
스프링 빈과 의존관계  (0) 2022.07.18