[24.09.08] TIL

yy·2024년 9월 7일

개발일지

목록 보기
98/122

JAVA Spring boot 공부중

서버에서 클라이언트에게 서빙해주는 방식 (정적, MVC, API)

정적 컨텐츠

  • 그냥 파일을 그대로 클라이언트한테 전달.
  • 과정 : 웹브라우저에서 localhost:8080/hello-static.html 을 치면 내장 톰캣서버에서 요청이 왔다고 스프링 컨테이너로 요청을 넘김. 컨트롤에서 hello-static 컨트롤러를 찾음. 내부 static에 있는 hello-static.html파일을 찾아서 서브해줌.
@GetMapping("hello")
    public String hello(Model model) {
        model.addAttribute("data", "spring!!!");
        return "hello";
    }

MVC : Model, View, Controller

mvc 방식으로 템플릿 엔지으로 렌더링이 된 html을 클라이언트한테 주는 방식

  • Model: 총괄
  • View : 화면을 그리기
  • Controller: 비즈니스 로직
@RequestParam("name") 
  • 위의 어노테이션 코드를 사용하면 클라이언트로부터 쿼리값으로 값을 넘겨받을 수 있음.

  • 과정 : 쿼리값을 넣은 주소로 내장 톰캣서버를 거쳐서 스프링으로 들어감. 스프링 내부에서 controller를 지나 해당 메소드랑 연결시킴. 그럼 viewResolver를 거쳐서 뷰를 찾아주고 템플릿을 찾아주는 기능을 거치고 thymeleaf 템플릿 엔진 처리 후 html변환하여 클라이언트에게 서빙해줌.


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


API 방식

  • api방식으로 데이터를 클라이언트에게 바로 주는 방식
@GetMapping("hello-string")
    @ResponseBody
    public String helloString(@RequestParam("name") String name) {
        return "hello" + name;
    }

html로 내려주는 방식이 아니래 냅다 데이터만 내려주는 방식

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

@ResponseBody가 붙어있으면

HTTP의 BODY에 문자내용을 직접 반환함. viewResolver대신 HttpMEssageConverter가 동작.

  • 기본 문자처리: StringConverter(StringHttpMessageConverter)가 동작

  • 기본 객체 처리 : JsonConverter(MappingJackson2HttpMessageConverter)가 작동하여 클라이언트에게 서빙.

JAVABEAN 표준 방식

위의 코드에서는 멤버변수 접근을 private으로 해서 직접적인 접근을 막고 메소드를 통한 접근만을 public으로 해놓은걸 사용했다.

참고: https://dololak.tistory.com/133

profile
시간이 걸릴 뿐 내가 못할 건 없다.

0개의 댓글