모각소 1(정적, 동적 컨텐츠(API,mvc))

LEEHYUNJE·2024년 1월 11일
0
post-thumbnail

스프링 웹 개발 기초

  • api가 뭐냐? json이라는 데이터 구조 포멧을 통해서 클라이언트에게 데이터를 전달하는것이 api방식
  • api를 통해서 서버끼리 통신도한다.



1. 정적 컨텐츠

  • 그냥 static파일에 html파일을 저장 후 실행하면 된다.

  1. 내장 톰켓 서버가 hello-static.html에 대한 정보를요청 받는다.
  2. spring에 톰켓서버가 알림.
  3. mapping이 되는 컨트롤러가 존재하지 않는다.
    -> 즉, "hello-static.html"이라는 getmapping이 정의 되어 있지 않다.
  4. 톰켓서버가 static에 존재하는 파일 이름이 있는지 확인
  5. 그 파일을 웹에 전송 후 띄워줌



2. MVC 템플릿과 엔진

  • 옛날에는 그냥 view로 모든것을 다했다.
  • 하지만 현재는 view는 오직 화면을 그리는 데에 집중을 다해야하고, 컨트롤러는 작동방식에 집중을 다해야한다.
    * 자세히는 모르지만 이게 프론트엔드, 백엔드 라고 생각을 해두자
  • 타임리프에 장점이 뭐지? 파일의 경로를 그냥 바로 url에 올려서봐도 형태를 확인 할 수 있다.
@GetMapping("hello-mvc")
    public String helloMvc(@RequestParam(value = "name",required = true) String name, Model model) {
        model.addAttribute("name", name);
        return "hello-template";
    }


입력 방식 설명
1. /hello-mvc : hello-mvc에 매핑되는 정보를 얻길 바람
2. ?name=spring!! : @RequestParam(value = "name" 에서 직접 파라메터를 요구하고 있으므로 name에 대한 값을 "spring!!" 이라는 문자열 형식으로 입력해준 것


작동 순서
1. client가 (웹주소)/hello-mvc를 웹서버에 요청
2. 내장 톰켓 서버는 helloController에 이를 전달
3. helloController는 "hello-mvc"에 매핑된 메서드를 실행함
4. 이때 return은 "hello-template"이므로 이와 같은 파일 이름을 teplates 폴더에서 찾음
5. model(name:spring)으로 매핑된 것을 전달
6. 지정한 html, 매핑된 모델을 적용하여 viewResolver가 변환 후 웹브라우저에 전송

API

  • mvc에서는 화면을 랜더링해서 웹브라우저에 넘겨주는 방법이 있고, API에서는 데이터로 바로 넘긴다.
  • 정적이 아니면 API또는 MVC만 존재한다고 봐도 무방하다.
  • 서버와 서버는 API를 통해서 서로 통신한다.

1. 첫번째 API 방식 코드(문자열 반환)

@GetMapping("hello-string")
    @ResponseBody // http에는 헤더와 바디가 존재, 데이터를 직접 바디에 넣어주겠다라는 소리이다.
    public String helloString(@RequestParam("name") String name) {
        return "hello " + name; // hellow spring으로 바뀐다. 내가 name으로 설정한 것으로 바로간다는뜻
    }
  • 컨트롤러의 코드
  • 이때 반환값은 문자열 형태라는 것을 생각해두자.

  • client 입장에서의 웹 모습

  • 웹페이지의 소스 보기

아무런 html이 존재하지 않고 return된 데이터가 바로 웹브라우저에 전송된 모습이다.

2. 두번째 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() { // get, set 단축키가 존재하니까 잘알아보셈 > 그냥 value에 접근하기 위해서는 함수를 쓰게 만드는것
            return name;
        }

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

간단하게 코드를 설명하면
Hello 객체의 name을 client로부터 입력받고, controller는 이를 저장한 객체를 반환한다.

  • name=string 이라고 입력했으므로 객체 내에서 매핑된 정보를 출력하는 모습이다.
  • 이는 'json 방식'으로 객체를 바로 웹 브라우저에 전달.
  • 최근에는 json 방식으로 통일이 되었다. 프로젝트를 할때는 json으로 반환하면 된다.


1. hello-api 요청이 왔다는것을 스프링에 넘김
2. hello-api getmapping이 되었으니 메서드 실행을 하려고 함
3. @responseBody는 그냥 바로 데이터를 넘기라는 뜻
* veiwresolver가 아닌 httpmessageConverter가 동작.
4. 근데 객체(hello)가 왔다? 문제 없이 객체가 반환된다.
5. 반환된 형태가 문자라면 StringConverter가 받지만, 객체라면 JsonConverter가 받는다.
6. hello의 name:spring 매핑 정보를 웹브라우저에 전달함.

모각소 1회차 소감.

: 블로그에 정리 하지 않을 때는 배우는 과정만 거치고, 배운 것을 밖으로 꺼내는 과정이 없었으므로, 시간이 지나면 잊을 때가 많았는데, 블로그에 정리하면서 내가 생각하기에 더 중요한 내용, 전체적인 흐름과 같은 것들을 다시한번 복습하는 과정이 되는 것 같아서 모각소 프로그램이 끝나도, 배운내용을 블로그에 정리하는 습관을 들여볼 예정이다. 또 혼자 공부하는 것은 자신과 타협하여 공부 시간을 줄인다거나, 미루는 것을 할 수도 있었지만, 팀원들과 함께 시간을 정하고 하니 확실하게 공부한 것 같아서 뿌듯했다.


자료출처 - 김영한 강사님의 스프링 입문 강의
https://www.inflearn.com/course/%EC%8A%A4%ED%94%84%EB%A7%81-%EC%9E%85%EB%AC%B8-%EC%8A%A4%ED%94%84%EB%A7%81%EB%B6%80%ED%8A%B8

profile
현재진행중

0개의 댓글