ejs 유용한 사용 방법

0 투표
ejs 유용한 사용 방법 알려주세요.

1 답변

0 투표

EJS를 더 효과적으로 활용할 수 있는 팁과 패턴을 정리해 보았습니다. 필요에 맞게 골라 적용해 보세요.


1. 레이아웃/공통 템플릿 분리

  • include로 헤더·푸터·네비게이션 같은 반복 구조를 분리
  • views/partials/ 폴더에 공통 부분을 모아두면 관리가 편리합니다.

    <!-- views/partials/header.ejs -->
    <header>
      <h1><%= siteTitle %></h1>
      <nav>…</nav>
    </header>
    
    <!-- views/index.ejs -->
    <%- include('partials/header', { siteTitle: 'My Site' }) %>
    <main>…</main>
    <%- include('partials/footer') %>
    

2. 레이아웃 엔진 사용 (ejs-mate 등)

  • npm install ejs-mate를 쓰면 layout, block, extend 같은 문법으로 마치 Pug처럼 레이아웃 템플릿을 쓸 수 있습니다.

    // app.js
    const engine = require('ejs-mate');
    app.engine('ejs', engine);
    app.set('view engine', 'ejs');
    
    <!-- views/layouts/main.ejs -->
    <!DOCTYPE html><html><head><title><%- block('title') %></title></head>
    <body>
      <%- block('content') %>
    </body></html>
    
    <!-- views/home.ejs -->
    <% layout('layouts/main') -%>
    <% block('title') %>홈 페이지<% end %>
    <% block('content') %>
      <h2>Welcome!</h2>
    <% end %>
    

3. 데이터 전달 & locals 활용

  • Express에서 res.render('view', {user, items}) 로 전달된 변수는 템플릿에서 바로 사용 가능
  • 공통 변수(사이트 이름, 로그인 정보 등)는 app.localsres.locals에 미리 설정
    app.use((req, res, next) => {
      res.locals.currentUser = req.user;
      res.locals.siteName = 'My App';
      next();
    });
    

4. 조건문·반복문

  • <% if (…) { %> … <% } %>, <% items.forEach(item => { %> … <% }) %>
  • for…of, for…in 등 익숙한 JS 문법 그대로 사용 가능
    <ul>
      <% for (let post of posts) { %>
        <li><a href="/posts/<%= post.id %>"><%= post.title %></a></li>
      <% } %>
    </ul>
    <% if (!posts.length) { %>
      <p>등록된 글이 없습니다.</p>
    <% } %>
    

5. HTML 이스케이프 vs. Raw 출력

  • <%= user.name %>: 자동 이스케이프(안전)
  • <%- user.bioHtml %>: escape 없이 raw HTML 그대로 삽입
    <p>안전하게 표시: <%= comment.text %></p>
    <p>HTML 허용: <%- comment.html %></p>
    

6. 커스텀 헬퍼 함수

  • 날짜 포맷, 문자열 자르기 등 자주 쓰는 로직은 app.locals나 별도 모듈에 정의

    // app.js
    const moment = require('moment');
    app.locals.formatDate = date => moment(date).format('YYYY-MM-DD');
    
    // view.ejs
    <time><%= formatDate(post.createdAt) %></time>
    

7. EJS 캐싱 켜기

  • 프로덕션에서는 app.set('view cache', true) 로 렌더링 속도 개선
  • 개발 중에는 false로 두고, 캐시 때문에 변경이 안 보이는 현상 방지

8. 배열·객체 분해 및 기본값 활용

  • EJS 내에서도 ES6 문법 사용 가능
    <% const { title = '제목 없음', author = '익명' } = post; %>
    <h1><%= title %></h1>
    <p>작성자: <%= author %></p>
    

9. 커스텀 구분자(delimiters)

  • <% %> 대신 {% %} 등 다른 구문을 쓰고 싶다면 ejs.delimiter = '?' 처럼 전역 설정이 가능
    const ejs = require('ejs');
    ejs.delimiter = '$'; // 예: <$= user.name $>
    

10. 복잡한 로직은 피하고 서비스 레이어로 분리

  • 템플릿 안에 로직이 너무 많아지면 유지보수 어려워짐
  • 데이터 가공은 컨트롤러나 서비스 함수에서 미리 처리해서 전달하는 게 바람직

위 팁들을 조합하면 EJS를 깔끔하고 효율적으로 활용할 수 있습니다.
필요한 부분만 골라 프로젝트에 적용해 보세요!

구로역 맛집 시흥동 맛집
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
add
...