본문 바로가기
nodeJs

템플릿 엔진

by mickey7 2024. 4. 16.

템플릿 엔진을 설명하기 전에

템플릿 엔진의 필요성을 부연하기 위해 정적 파일과 동적 파일 설명

정적파일
  • html,css,js 파일과 같이 한번 만들어진 자원이 언제나 똑같이 보이는 리소스

동적파일

사용자와 서버가 상호작용하며 페이지 내용의 일부 혹은 전부가 그때그때 생성되는 파일

 

정적 파일과 동적 파일의 장단점은 서로 균형(Trade-off)을 이룸.

템플릿 엔진을 사용하면 각 장점을 모두 얻을 수 있음.

 

'템플릿 엔진'이란?

템플릿 양식과 특정 데이터 모델에 따른 입력 자료를 합성하여 결과 문서를 출력하는 소프트웨어

 

  • 변수 사용 가능
  • 변경사항 반영 위해 서버 재시동X
  • 코드량 감소
  • 재사용성 증가
  • 유지보수 용이

 

템플릿 엔진 종류

  • pug(jade)
  • ejs(Embedded JavaScript Template) - 자바스크립트가 내장되어 있는 html 파일
  • Handlebars
  • nunjucks

ejs 사용예시

 

 

index.js파일

const path = require("path");
const express = require("express");
const app = express();

app.set("port", process.env.PORT || 3000);
app.set("views", __dirname + "/views");
app.set("view engine", "ejs");

app.get("/", (req, res) => {
  res.render("index", {
    People: [
      {
        name: "Gildong",
        age: "15",
      },
      {
        name: "Jinsu",
        age: "27",
      },
      {
        name: "Hyena",
        age: "25",
      },
    ],
    title: "Express",
  });
});

app.listen(app.get("port"), () => {
  console.log(app.get("port"), "번 포트에서 서버 실행 중..");
});
 
코드의 부연설명(6~7번째 부분, +10번째 부분)
  • views, 템플리트가 있는 디렉토리. 예: app.set('views', './views')
  • view engine, 사용할 템플리트 엔진. 예: app.set('view engine', 'pug')
  • (10번째) render의 첫번째 인자로 ejs파일명을 적어주면 ejs에 title이라는 변수와 people이라는 객체를 넘겨줌 
  • ejs로 보내진 변수는 <%%>태그를 통해 해당 변수를 받아 결과 표시

<% 자바스크립트코드 %>

<%= 출력할 자바스크립트 변수(객체) %>

<%# 주석 %>

 

index.ejs파일

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title><%= title %></title>
  </head>
  <body>
    <h1><%= title %></h1>
    <% for(let i=0; i<People.length; i++) { %>
        <p>Welcome to <%- People[i].name %></p>
    <% } %>
  </body>
</html>

 

출력 화면