스프링 부트, 입문!

준비중..

스프링 부트, 입문!

기본 게시판 만들기!

05 MVC 패턴

MVC 패턴

미션


MVC 패턴 미션! “localhost:8080/articles” 요청 시, 아래와 같은 페이지가 나오게 하시오.
클라우드스터딩-스프링부트--MVC-패턴-확인

개념


⭐️ MVC 패턴

MVC 패턴이란, 일종의 역할 분담이다. 맥도날드를 생각하면 쉽다. 카운터 및 버거 메이커, 그리고 청소 담당이 각 역할을 수행한다. 프로그램도 마찬가지다. 데이터는 모델(Model), 화면은 뷰(View), 처리는 컨트롤러(Controller)가 나누어 담당한다.

이러한 역할 분담인 MVC 패턴. 이는 OOP와 연관이 있다. 객체별 역할을 나누면, 보다 깔끔한 코드 작성 및 관리에 좋다.
클라우드스터딩-스프링부트-MVC-패턴

튜토리얼


⭐️ 컨트롤러

1) 파일 생성: ArticleController
클라우드스터딩-스프링부트-컨트롤러-생성

2) 코드 작성

  1. @Controller // 컨트롤러 선언! 요청과 응답을 처리!
  2. public class ArticleController {
  3. @GetMapping("/articles") // 해당 요청을 처리하도록, 메소드를 등록!
  4. public String index() {
  5. return "articles/index"; // 뷰페이지 설정
  6. }
  7. }

⭐️ 뷰

3) 파일 생성
클라우드스터딩-스프링부트-MVC패턴-뷰-파일-생성

4) 코드 작성: “articles/index.mustache”

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <!-- Required meta tags -->
  5. <meta charset="utf-8">
  6. <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  7. <!-- Bootstrap CSS -->
  8. <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
  9. <title>Hello, world!</title>
  10. </head>
  11. <body>
  12. <!-- navbar -->
  13. <nav class="navbar navbar-expand-lg navbar-light bg-light">
  14. <a class="navbar-brand" href="#">Navbar</a>
  15. <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent"
  16. aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
  17. <span class="navbar-toggler-icon"></span>
  18. </button>
  19. <div class="collapse navbar-collapse" id="navbarSupportedContent">
  20. <ul class="navbar-nav mr-auto">
  21. <li class="nav-item">
  22. <a class="nav-link" href="#">Article</a>
  23. </li>
  24. </ul>
  25. </div>
  26. </nav>
  27. <!-- jumbotron -->
  28. <div class="jumbotron">
  29. <h1>Article 목록</h1>
  30. <hr>
  31. <p>articles/index.mustache</p>
  32. </div>
  33. <!-- footer -->
  34. <footer class="mb-5 container-fluid">
  35. <hr>
  36. <p>© CloudStudying ·
  37. <a href="#">Privacy</a> · <a href="#">Terms</a>
  38. </p>
  39. </footer>
  40. <!-- Optional JavaScript -->
  41. <!-- jQuery first, then Popper.js, then Bootstrap JS -->
  42. <Script src="https://code.jquery.com/jquery-3.4.1.slim.min.js"></script>
  43. <Script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js"></script>
  44. <Script src="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/js/bootstrap.min.js"></script>
  45. </body>
  46. </html>

⭐️ 중간 점검

5) 접속 확인
클라우드스터딩-스프링부트-MVC패턴-컨트롤러와-뷰

⭐️ 모델 객체

6) 데이터를 뷰로 전달: “controller/ArticleController”

  1. ...
  2. @Controller // 컨트롤러 선언! 요청과 응답을 처리!
  3. public class ArticleController {
  4. @GetMapping("/articles") // 해당 요청을 처리하도록, 메소드를 등록!
  5. public String index(Model model) { // 모델 객체를 가져옴!
  6. // 데이터를 모델에 등록! 등록된 데이터는 뷰 페이지에서 사용 가능!
  7. // key(변수명): "msg",
  8. // value(내용): "안녕하세요, 반갑습니다!"
  9. model.addAttribute("msg", "안녕하세요, 반갑습니다!");
  10. return "articles/index"; // 뷰페이지 설정
  11. }
  12. }

⭐️ 뷰 페이지

7) 모델 데이터를 출력: “articles/index.mustache”

  1. ...
  2. <div class="jumbotron">
  3. <h1>Article 목록</h1>
  4. <hr>
  5. <p>articles/index.mustache</p>
  6. <p>{{msg}}</p> <!-- 모델 데이터를 가져 -->
  7. </div>
  8. ...

⭐️ 결과 확인

8) 브라우저 접속
클라우드스터딩-스프링부트--MVC-패턴-확인

훈련하기


  • 화면 하단의 Privacy와 Terms클릭 시, 적절한 페이지가 나오길 원한다. 이를 위한 “StaticController”와 “뷰 페이지”를 추가하시오.
  • 작성한 프로젝트 코드를 저장(commit) 하고, 깃허브에 업로드(push) 하시오.

면접 준비


  • MVC 패턴이란 무엇이고, 왜씀?