스프링 입문 - 웹 개발 기초

young·2023년 4월 30일
0

Spring Boot

목록 보기
2/19
post-thumbnail

MVC - 템플릿엔진
: html을 동적으로 바꿔서 내는 것

정적 컨텐츠

: 스프링부트 정적 컨텐츠 기능

[ 정적 컨텐츠의 원리 ]
웹 브라우저에서 해당 주소로 들어가면 내장 톰캣 서버가 요청을 받고,
static.html을 스프링부트가 컨트롤러레 static 관련 컨트롤러가 있는지 확인
✅컨트롤러 파일이 없기 때문에 넘어가고,
✅static 관련 html 유/무 확인 후 html 파일 존재할 시, 웹 브라우저에 바로 보내주는 것

MVC와 템플릿 엔진

템플릿 엔진

: html을 서버에서 동적으로 프로그래밍해서 웹 브라우저로 내려주는 것
템플릿 엔진 사용하기 위해 => MVC (Model, View, Controller) 필요
view = 화면을 그린다.
Model,Controller = 비즈니스 로직 관련 및 내부적인 것 처리

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

< 원리 >
: name이라는 이름으로 param을 받아, attribute의 key의 이름이 "name"이라는 곳에 param으로 받은 값을 model에 넣어 return

Resolved [org.springframework.web.bind.MissingServletRequestParameterException: Required request parameter 'name' for method parameter type String is not present]

🚨Error🚨 ❌🔴
: name에 param 값을 주면서 hello-mvc로 들어가야하며, html에서 GET 방식으로 param을 받을 수 있는 방법은 "?key=value"이므로, 접근 시 필수적으로 적어줘야 한다.

1. name의 param으로 받은 "spring~~"이 model.addAttribute("name",name) 중 두번 째 파라미터로 들어가고, 이 값들이 Model에 담겨 hello-template으로 넘어감
2. template에서 Model의 Key값이 name인 것을 찾아 그 value값을 ${name}에 치환

API

: JSON 데이터 구조 포멧으로 클라이언트로 데이터를 전달하는 방식

  • 서버끼리 데이터 구조받을 때 API방식 사용

API 기초

 @GetMapping("hello-string")
    @ResponseBody // body에 data를 직접 넣어주겠다.(바디 응답부분)
    public String helloString(@RequestParam("name") String name){
        return "hello"+name; //spring 데이터를 넣을 경우 "hello spring" - 뷰가 없으면 문자 그대로
    } // param으로 받은 것을 그대로 요청한 서버에 바로 전달

템플릿 엔진과 다르게 template 없이 값 그대로 내보내준다.

API 활용

@GetMapping("hello-api") // JSON 방식
@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;
    }
}

{key : value}처럼 JSON 형식으로 data가 웹 브라우저에 내려간다.

@ResponseBody

  • Http의 BODY에 문자 내용을 직접 반환(데이터 그대로 가지고 오는 방식-html,body 등 태그 X)
  • 'viewResolver' 대신에 'HttpMessageConverter'가 동작
  • 기본 문자처리 : 'StringHttpmessageConverter'
  • 기본 객체처리 : 'MappingJackson2HttpMessageConverter'
  • byte 처리 등등 기타 여러 HttpMessageConverter가 기본으로 등록되어 있음

[ 원리 ]
웹 브라우저 접속 시, 내장 톰캣 서버에서 hello-api spring으로 보내줌
spring : hello-api가 mapping되어 있는 것 확인과 동시에 @ResponseBody가 있어 http 응답에 data를 그대로 넘겨주는 동작
✅객체를 넘겨주기 때문에 data 그대로가 아닌 JSON 방식으로 만들어서 http응답에 반환
@ResponseBody 있을 경우, HttpMessageConverter 동작
객체가 return 되기 때문에 JsonConverter가 동작하게 되어
객체를 JSON 형식으로 바꾸게 되고, JSON 형태로 응답 하게 됨.

profile
ฅʕ•̫͡•ʔฅ

0개의 댓글