STUDY/SpringBoot

[SpringBoot] MVC(Model·View·Contoller) 정리✔ [1]

ReCode.B 2022. 7. 29. 02:09
728x90

웹서비스의 동작원리

웹서비스는 클라이언트와 서버의 요청과 응답으로 동작한다.

클라이언트: 서비스를 사용하는 프로그램 또는 컴퓨터 ↔ 서버 : 서비스를 제공하는 프로그램

= 웹브라우저 ↔ 스프링부트(서버의역할)

 

localhost:8080

localhost 서버의주소를 의미 = 내컴퓨터의주소를의미 비유하자면 우리집 

8080  비유를 들어 방을 의미. '내집의 8080방' 

이것을 ports 번호라고 부른다.

 

localhost:8080/hello.html

파일명을 직접 명시했을때

기본적으로 resources > static 에서 hello.html을 찾는다.

이것은 브라우저의 응답이다.


뷰 템플릿과 MVC패턴

뷰템플릿 : 화면을 담당하는 기술. 

웹페이지를 하나의 틀로만들고, 여기에 변수를 삽입하게 한다.

틀이되는 페이지가 변수의 값에 따라서 수많은 페이지로 바뀔수있다.

 

타임리프 : 템플릿 엔진 (=html등의 뷰를 만들어줌) 이 템플릿 엔진 중 하나가 타임리프! 

타임리프 템플릿을 통해서 controller(자바)에서 받아온 데이터를
Html 문서에 적용시킨뒤 "완성된" html파일만 클라이언트 전달

 

뷰템플릿에는 Controller와 Model이라는 두 동료가 있다.

Controller는 처리 (logic) , Model은 데이터관리 (data)

이렇게 화면 처리 데이터 분야를 각 담당자별로 나눈 기법은 MVC기법이라고 한다.(Model View Controller)

package com.mytestspring.mytestspring.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

//Controller를 만드는 방법
//1. Controller 동료를 선언!
@Controller
public class FirstController {

    //2. @GetMapping이라는 어노테이션을 넣어주어야한다.
    //@GetMapping = URL요청연결
   @GetMapping("/hi") //3. ()안에 접속할 url주소를 넣어주어야한다.

                                //6.파라미터로 Model을 받아오기
    public String niceToMeetYou(Model model){

       //7.model을 통해서 변수등록 => .addAttribute
       model.addAttribute("username", "hongpark");
       //8."홍팍"이라는 값을 "username"이라는 이름에 연결시켜서 보내줌

        return "greeting"; //4. return써주면 -> templates안에 greeting을 알아서 찾아서 -> 브라우저로 전송
       //hi라는 url이 입력받았을때 greeting를 찾아서 반환해준다.
    }
}

.addAttribute

<!DOCTYPE html>
<!-- doc+tab -기본html생성-->
<html xmlns:th="http://www.thymeleaf.org">

<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<!--5.이름을바꾸면서 입력되게하고싶으면 ${username}을 써준다.
6.그리고 Model을 사용해야한다-->
<p th:text= " '안녕하세요 ' + ${username} ">안녕 낯선이</p>
</body>
</html>

 


MVC 역할과 실행흐름

서버로서의 스프링부트 → 모델,뷰,컨트롤러의 유기적 역할공간이 존재한다

 

컨트롤러 - 클라이언트로부터 요청을받고

뷰 - 최종페이지를만들어주고

모델 - 최종페이지에 쓰일 데이터들을 뷰에게 전달해준다.

 

 

바로 전에 작성했던 예제 흐름 정리

1.localhost:8080/hi 를 Controller가 받는다 

2.@Controller 

3.@GetMapping 

4.hi라는 주소를 @GetMapping("/hi") 이렇게 받게 해놨기때문에 

niceToMeetYou라는 메소드가 hi라는요청과 동시에 수행이된다

5.이 메소드가 반환하는 리턴값을 통해서 그 페이지 (templates의 greetings)를 찾아서 보여준다. 

@Controller
public class FirstController {
   @GetMapping("/hi") 
    public String niceToMeetYou(Model model){

6.greeting을 들어가보면 username이라는 변수를 사용하는데 이 변수를 사용하기 위해서는  model을 거쳐야한다.

<p th:text= " '안녕하세요 ' + ${username} ">안녕 낯선이</p>

7.Controller에 가보면 model을 통해서 .addAttribute라는 메소드를 수행시킨다.

       model.addAttribute("username", "hongpark");
	return "greetings";

 8.이때 username이라는 변수를 등록시키고 이 변수에 오른쪽의 hongpark이라는 값을 등록했기때문에

<p th:text= " '안녕하세요 ' + ${username} ">안녕 낯선이</p>

9.뷰페이지에서 유저네임을 사용할수있다.

 

 

localhos:8080/bye 로 입력받았을때, 다르게 출력하는것을 작성해보자

package com.mytestspring.mytestspring.Controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

//Controller를 만드는 방법
//1. Controller 동료를 선언!
@Controller
public class FirstController {

    //2. @GetMapping이라는 어노테이션을 넣어주어야한다.
    //@GetMapping = URL요청연결
   @GetMapping("/hi") //3. ()안에 접속할 url주소를 넣어주어야한다.
                                //6.파라미터로 Model을 받아오기
    public String niceToMeetYou(Model model){

       //7.model을 통해서 변수등록 => .addAttribute
       model.addAttribute("username", "hongpark");
       //8."홍팍"이라는 값을 "username"이라는 이름에 연결시켜서 보내줌

        return "greeting"; //4. return써주면 -> templates안에 greeting을 알아서 찾아서 -> 브라우저로 전송
       //hi라는 url이 입력받았을때 greeting를 찾아서 반환해준다.
    }

    //localhos:8080/bye 로 입력받았을때, 다르게 출력하는것을 작성해보자
    @GetMapping("/bye")
    public String seeYouNext(Model model) {
       model.addAttribute("nickname", "홍길동");
       return "goodbye";
    }
}
<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<p th:text= " '다음에또만나요 ' + ${nickname} ">안녕 낯선이</p>
</body>
</html>

 

원본 영상 링크 :

https://www.youtube.com/watch?v=5vfxeRJJsWo&list=PLyebPLlVYXCiYdYaWRKgCqvnCFrLEANXt&index=6

728x90