과거에는 서버(Node.js)가 직접 HTML 코드를 문자열로 덕지덕지 이어 붙여서(res.send('<h1>' + title + '</h1>')) 브라우저로 보냈습니다. 하지만 코드가 길어지면 유지보수가 불가능해집니다. 이를 해결하기 위해 HTML 뼈대 파일에 빈 칸을 뚫어놓고(Template), 서버가 그 빈 칸에 데이터를 채워 넣어(Render) 완성된 HTML을 찍어내는 기법이 바로 템플릿 엔진입니다.
EJS (Embedded JavaScript) 란?
Node.js 진영에서 가장 유명한 템플릿 엔진 중 하나입니다. HTML 태그 속에 특수한 기호(<% %>)를 열고 그 안에 진짜 자바스크립트 코드를 적을 수 있습니다.
문법 기호
역할
사용 예시
<%= 변수명 %>
값을 화면에 출력(렌더링)할 때 사용합니다. HTML 코드를 넣어도 텍스트로 이스케이프 처리하여 XSS 해킹을 방어합니다.
<h1><%= title %></h1>
<%- 변수명 %>
값을 출력하되, 이스케이프 처리를 하지 않고 진짜 HTML 태그로 렌더링시킵니다.
<%- htmlContent %>
<% 로직 %>
화면에 출력하지 않고, if문이나 for문 같은 자바스크립트 제어(로직)를 실행할 때 사용합니다.
<% if (user) { %> 안녕! <% } %>
💡 서버 사이드 렌더링 (SSR)의 조상님
클라이언트(브라우저)는 EJS 문법을 전혀 이해하지 못합니다. 브라우저로 응답이 넘어가기 직전에 Node.js 서버가 res.render() 함수를 통해 EJS 코드를 완벽한 순수 HTML 문자열로 변환(컴파일)해서 보내주기 때문에 화면이 렌더링될 수 있는 것입니다.
EJS 템플릿 엔진 렌더링 시뮬레이션
서버가 가진 변수(Data)를 HTML 뼈대(EJS)에 주입하여, 브라우저가 읽을 수 있는 순수 HTML로 조립해 내는 과정을 확인해 보세요.