강의

멘토링

로드맵

인프런 커뮤니티 질문&답변

eju님의 프로필 이미지
eju

작성한 질문수

제대로 배우는 Express.js: Part1 기초부터 심화까지 [기초편]

Users Route 만들기 Part 3 - 로그인과 로그아웃 처리

ejs 와 어떤 개발언어로 조합해서 사용했을때 성능이 좋을까요?

해결된 질문

작성

·

10

·

수정됨

0

ejs 와 어떤 개발언어로 조합해서 사용했을때 성능이 좋을까요?

답변 1

0

nhcodingstudio님의 프로필 이미지
nhcodingstudio
지식공유자

안녕하세요 eju님 🙂,

EJS는 Embedded JavaScript Templates의 약자로, HTML 안에 자바스크립트 코드를 끼워 넣어 동적으로 완성된 웹페이지를 만드는 템플릿 엔진입니다. 예를 들어 <%= user.name %>처럼 작성하면, EJS가 해당 구문 안의 자바스크립트 표현식을 평가해 실제 값으로 치환한 HTML을 만들어 줍니다. 이 과정은 브라우저가 아닌 서버에서 이루어지며, Node.js 환경에서 실행됩니다. Node.js는 브라우저 외부에서도 자바스크립트를 실행할 수 있도록 만든 런타임 환경으로, 구글 크롬의 V8 엔진을 그대로 사용합니다. 따라서 EJS가 생성한 자바스크립트 코드는 Node.js에서 별도의 변환 과정 없이 바로 실행됩니다.

EJS는 단순히 HTML 문자열을 출력하는 도구가 아니라, 내부적으로 템플릿을 한 번 파싱하여 자바스크립트 함수 형태로 변환한 뒤 실행합니다. 즉, 사람이 작성한 .ejs 파일은 내부적으로 하나의 함수로 컴파일되어 실행되는 구조를 가지고 있습니다. 이 과정은 언어 번역을 위한 트랜스파일 과정이 아니라, HTML과 자바스크립트 표현식을 결합하기 위한 단순한 텍스트 변환 단계입니다. 그렇기 때문에 Babel 같은 별도의 번역 도구는 필요하지 않습니다. 즉, 자바스크립트로 작성된 템플릿이 자바스크립트로 그대로 실행된다는 점에서 매우 효율적입니다.

Node.js와 EJS가 자연스럽게 함께 동작하는 이유는 JSON과 자바스크립트 객체의 완전한 호환성 덕분이기도 합니다. 서버에서 res.render('profile', { name: '홍길동' })처럼 단순히 객체를 전달하면, EJS 내부에서는 그 데이터를 변환 없이 바로 사용할 수 있습니다. JSON 문법이 자바스크립트 객체 리터럴과 동일하기 때문에 별도의 직렬화나 역직렬화 과정이 필요하지 않습니다. 이런 구조 덕분에 서버에서 생성된 데이터를 템플릿으로 전달할 때 중간 단계가 생략되어 코드가 단순하고 처리 속도도 빠릅니다.

Node.js의 핵심 엔진인 V8은 JIT(Just-In-Time) 컴파일러를 내장하고 있습니다. 이는 자주 실행되는 코드를 기계어 수준으로 최적화하여 실행 속도를 높이는 기술로, EJS처럼 서버에서 반복적으로 실행되는 코드에서도 성능 이점을 제공합니다. 또한 Express.js는 EJS 템플릿 렌더링을 위한 캐시 기능을 지원합니다. 한 번 컴파일된 EJS 템플릿은 메모리에 저장되어 다음 요청 시 재사용되며, 프로덕션 모드에서는 기본적으로 이 캐시가 활성화됩니다. 즉, 서비스 환경에서는 한 번 파싱된 템플릿 함수가 그대로 재사용되어 렌더링 속도가 점점 더 빨라집니다.

결과적으로 EJS와 Node.js의 조합은 같은 언어 위에서 움직이므로 불필요한 변환이 없고, JSON 데이터가 자연스럽게 연결되며, V8 엔진의 최적화와 Express의 캐시 기능 덕분에 빠르고 안정적으로 동작합니다. 이런 이유로 EJS는 Node.js 환경에서 가장 자연스럽고 효율적인 템플릿 엔진 중 하나로 평가됩니다. 다만 EJS는 Node.js 전용으로 만들어진 것은 아니며, 브라우저에서도 독립적으로 실행할 수 있는 범용 자바스크립트 템플릿 엔진이라는 점을 함께 기억하셔야 합니다.

또한, 다른 언어들에서도 이와 유사한 방식의 템플릿 엔진이 존재합니다. 예를 들어 Python의 Jinja2, PHP의 Twig, Ruby의 ERB(Embedded Ruby), 그리고 Java의 JSP(JavaServer Pages) 등이 그 대표적인 예입니다. 이들은 모두 “코드와 마크업을 섞어 최종 HTML을 생성하는” 구조를 가지며, 각 언어 환경에서 EJS와 동일한 역할을 수행합니다. 즉, 자바스크립트 생태계에서는 EJS가 이 역할을 맡고, Python에서는 Jinja2가, Ruby에서는 ERB가, Java에서는 JSP가 같은 기능을 담당한다고 보실 수 있습니다. 이러한 템플릿 엔진들은 모두 언어별 런타임과 긴밀히 연결되어 작동하기 때문에, EJS가 Node.js와 자연스럽게 어우러지는 것처럼 다른 언어의 템플릿 엔진들도 각자의 환경에서 최적화된 형태로 실행됩니다.

감사합니다.

eju님의 프로필 이미지
eju

작성한 질문수

질문하기