CH4 머스테치로 화면 구성하기

동현·2021년 1월 19일
1

CH4 머스테치로 화면 구성하기

4.1 서버 템플릿 엔진과 머스테치 소개


템플릿 엔진이란? 지정된 템플릿 양식과 데이터가 합쳐져 HTML 문서를 출력하는 소프트웨어를 의미한다. (간단하게 웹사이트의 화면을 어떤 형태로 만들껀지 도와주는 양식)

  • 템플릿 엔진의 종류 : JSP, Freemaker / 리엑트react, 뷰vue
    • JSP, Freemaker : 서버 템플릿 엔진
    • 리엑트React, 뷰 Vue : 클라이언트 템플릿 엔진
      개인적으로 학교 수업시간에 다뤄본 JSP 말고는 아직 다뤄본게 없다...
  • 머스테치란? 머스테치는 템플릿의 한종류라고 생각하면 되고 수많은 언어를 지원하는 가장 심플한 템플릿 엔진이다.
    • 머스테치의 장점
      1. 문법이 다른 템플릿 엔진보다 심플함
      2. 로직 코드를 사용할 수 없어 View의 역할과 서버의 역할이 명확하게 구분
      3. Mustache.js, Mustache.java 2가지가 다 있어 하나의 문법으로 클라이언트/서버 템플릿을 모두 사용 가능하다.

4.2 기본 페이지 만들기

책의 한 챕터를 모두 돌은 뒤에 작성한 글이라 책과 코드가 다를수 있음

IndexController

(페이지 관련 모든 컨트롤러는 IndexController에 담긴다)

  • 여기서 주목할 부분은 return index 이다. 왜 return d을 index 만 써도 되는 걸까? = 이는 앞에서 추가한 의존성 mustache starter 에 의해 앞에 경로와 뒤의 경로가 자동으로 지정된다. ( index -> src/main/resources/templates/index.mustach )

Test

  • TestRestTemplate 를 이용해 / 를 호출 했을때 index.mustache"스프링 부트로 시작하는 웹서비스"가 포함되어있나 테스트하는 코드

4.3 게시글 등록 화면 만들기

레이아웃 방식이란 ? 공통영역을 별도의 파일로 분리하여 필요한 곳에서 가져다 쓰는 방식

(layout) Header.mustache

(layout) footer.mustache

  • 책에 설명을 보면 위 코드에 css 와 js 의 위치가 다르다고 나와있다. 근데 나는 원래 어떻게 코드가 짜여져있는지 모르겠어서 이 말이 공감이 안된다.
  • 위 코드에 Header 에는 css, Footer 에는 js 가 있다 이는 펭이지 로딩 속도를 위한 의도라 한다. (css는 화면을 구성하는 코드여서 불러오지 않으면 화면이 깨진다 따라서 먼저 css 를 불러오기 위해 Header 에 css를 위치 시킨 것이다.)

Index.mustache

  • 위 코드는 layout이 적용된 코드이다 코드를 살펴보면 위와 아래에
    {{>layout/header}}, {{>layout/footer}} 가 있다. 이 코드는 header 가 불러와지고 그 다음에 Index.mustache만의 페이지를 짠 코드가 나오고 마지막에 footer로 마무리가 된다.

등록

IndexController

  • IndexController 의 코드는 매우 간단하다. /posts/save로 매핑이 되어 요청이 들어오 IndexController의"posts-save"를 리턴 시킨다. 이 posts-save-> posts-save.mustach 위에서 Index를 리턴했을때와 마찬가지로 경로가 생략 되어있다.

posts-save.mustache

  • 위에서 return 으로 인한 posts-save.mustache 가 불러와져 이때 등록 버튼을 누르게 되면 btn-save라는 api를 호출하게 된다.

Index.js

  • 코드를 설명하기 앞서 var main = {...} 을 선언한 이유는 만약 또다른 js 파일이 같은 이름의 메서드를 가지고 있다면 마지막으로 실행된 메서드를 덮어 쓰게 되어 이를 방지하기 위해 index.js만의 유효 범위를 만들어 주는것이다.
  • 코드 설명 : 먼저 btn-save라는 이벤트가 발생시 save function이 불러와지는데 이때 var data 에 title, author, content 를 담아 JSON형태로 /api/v1/posts = > PostsController의 save로 매핑 시킨다.
    이후 성공하면 done 실패하면 error 를 띄운다.

4.4 전체 조회

이 부분은 간단한 머스테치 문법 몇개만 집고 넘어가겠다.

  • {{#posts}} = posts 라는 List를 순회한다 (for 문과 비슷하게 posts의 list 인덱스가 끝날때까지 반복)
  • {{id}} = List 에서 뽑아낸 객체의 필드를 사용한다.

  • 다음으로 조회의 기능 중 중요하다 여기는 이 부분은 Model을 이용해 Index.mustache 의 {{#posts}} 이부분으로 postsService.findAllDesc()를 넘겨주는 부분이다.

4.5 수정, 삭제

수정

  • 위 코드를 보면 title 을 클리하면 /posts/update/{{id}} 로 연결되는걸 볼수 있다. 따라 가보면

  • IndexControllerpostsUpdate 메서드가 호출 된다.
    위 코드를 보면 id 에 해당하는 결과를 찾아 PostsResponseDto 에 담아 model 을 이용해 post로 넘긴다. 이후 posts-update를 리턴한다.

posts-update.mustache

  • 위에서 return posts-update로 인해 posts-update.mustache가 불러와졌다.
  • 이 때 post에 담겨온 값들이 매칭되어 화면에 표시되는데 이후 수정완료 버튼을 누르면 Index.jsbtn-update로 매핑된다.

이때 진행을 살펴보면 비슷한 형태로 진행되는것을 알수있다. mustache -> IndexController -> mustache -> Index.js -> mustache 형식으로 진행된다는 사실

삭제 부분은 이 수정, 조회와 비슷하여 생략하겠다.


profile
여긴 어디 나는 누구?

0개의 댓글