스프링 필기

HAMONG·2023년 1월 7일
0

✍ 스프링 2일차 : 스프링 웹 개발 기초

웹 개발 기초에 세가지가 있음.

  • 정적컨텐츠
  • MBC와 템플릿 엔진
  • API
  1. 정적 컨텐츠
    웹 브라우저에게 요청을 받은 url의 파일을 그대로 보여주는 것을 말함. 그니까 html 파일 자체!
    스프링의 경우 정적 컨텐츠 기능을 자동으로 제공함! ( Static Content )
    static 폴더에 기본으로 제공함.

  1. MVC 와 템플릿 엔진
    데이터를 받아서 가공하여 사용자가 원하는 형태로 반환하거나 서버에서 변형해서 html을 보여 줌

📍 MVC : Model , View , Controller

사용자에게 보여지는 화면의 모든 일들을 View , 서버와 서비스등의 기능적인 부분은 Controller 에서 처리함
Controller를 통해 가공된 테이터들을 Model에 담아 변환된 htmel을 넘겨주는데 이런 일련의 과정을 MVC 라고함!

💻 java file

	@GetMapping("hello-mvc")
    public String hellMvc(@RequestParam("name") String name, Model model) {
        // RequestParam 외부에서부터 데이터 값을 받아올때사용
        // required 속성은 기본 true = 반드시 값을 받아와야함
        // false경우 값을 받아오지 않아두됨!
        model.addAttribute("name", name);
        return "hello-template";
        // 요청한 것 온 것에 맞는 view를 찾아서 던져줌 : 템플릿엔진
    }

<!-- thymeleaf 템플릿 엔진 쓰기위함 필수 붙여넣기 -->
<html xmlns:th="http://www.thymeleaf.org/" >

thymeleaf 템플릿 엔진의 장점 중 하나가, 서버가 없어도 html의 파일을 열어서 껍데기는 볼수있음!


  1. API
    JSON 데이터 구조 포맷으로 클라이언트에게 줌!
    줄 때, 변화된 html의 화면으로 보여주는 것이 아닌, Http를 통해 body그대로 박혀서 보여짐!
	@GetMapping("hello-string")
    @ResponseBody // 반드시 ResponseBody를 붙여줘야함  ,  문자반환
    // ResponseBody은 Http의 body부에 직접 넣겠다는 것임
    public String helloString(@RequestParam("name") String name) {
        return "hello" + name; // ?name=spring 하면 ->"hello spring" 출력됨
        // 요청한 클라이언트에 그대로 내려감!
        // 템플릿 엔진과의 차이는 view이런것이 없음! 이 문자 그대로 내려감 끝!
        // 소스 보기 해서 확인해보기! 그런데 이렇게 사용경우는 별로 없음!!!XXX

    }

@ResponseBody을 사용하면 view를 통하지 않고 HTTP의 body에 문자의 내용을 직접 반환해서 보여줌

💻 java file

	@GetMapping("hello-api")
    @ResponseBody // HTTP에 데이터를 그대로 넘김 , 그런데 객체로 넘기니!
    // 디폴트로 json방식으로 데이터를 만들어서 반환해줌!
    // HttpMessageConverter 동작 - json/ string 중 선택해서 반환
    public Hello helloApi(@RequestParam("name") String name) {
        Hello hello = new Hello(); // 객체 생성
        hello.setName(name); // 객체 저장
        return hello; // 객체를 반환
        // 기본은 제이슨 방식임!
    }

    static class Hello { // static 여기의 전체흐름과 상관없는 별개의 클래스임
        private String name; // 필드 , 멤버 변수

        public String getName() { // java.bin , propertie 접근 방식
            return name;
        }

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

view가 아닌 HttpMessageConverter가 동작하기때문에
문자처리는 String Converter 가, 객체처리는 MappingJackson2HttpMessageConverter 동작함!
(Jackson2은 json 객체 만들어주는 라이브러리로 스프링에 탑재되어있음)

✍ 요약하자면 ,
1. 정적 컨텐츠는 있는 그대로의 웹페이지를 보여주는 것!
2. 템플릿 엔진은 view라는 화면을가지고 조작하는 방식!
3. API는 받은 데이터를 어떠한 html의 변화를 거치지않고 그대로 내려주는 방식!

  • 추가
profile
OKIDOKIYO

0개의 댓글