자바 서버 페이지
1. 개요
1. 개요
자바 서버 페이지는 자바 플랫폼 기반의 서버 측 기술로, 동적인 웹 페이지를 생성하는 데 사용된다. 썬 마이크로시스템즈에 의해 1999년에 최초로 등장했으며, 현재는 오라클이 관리하고 있다. 이 기술은 HTML 문서 안에 자바 코드를 삽입하여 실행하는 방식으로, 주로 웹 애플리케이션 개발과 동적 웹 콘텐츠 생성에 활용된다.
JSP는 서블릿 기술을 확장한 것으로, 웹 서버에서 실행되어 최종 사용자에게는 표준 HTML 형태로 결과를 전송한다. 개발자는 JSP 페이지에 비즈니스 로직과 프레젠테이션 로직을 함께 작성할 수 있어, 초기 웹 개발을 단순화하는 데 기여했다. 이 기술은 자바 EE 스펙의 핵심 구성 요소 중 하나로 자리 잡았다.
2. 역사
2. 역사
자바 서버 페이지는 1999년 썬 마이크로시스템즈에 의해 처음 소개되었다. 이 기술은 기존의 서블릿 기술만으로 웹 페이지를 생성하는 것이 복잡하고 유지보수가 어려운 점을 보완하기 위해 개발되었다. 서블릿은 자바 코드 안에 HTML을 문자열 형태로 삽입해야 했는데, 자바 서버 페이지는 이 방식을 역전시켜 HTML 문서 안에 자바 코드를 삽입할 수 있게 하여 웹 디자이너와 개발자의 협업을 용이하게 했다.
초기 자바 서버 페이지 사양은 정적인 HTML이나 XML 문서에 특별한 태그와 스크립트릿을 포함시켜 서버에서 실행 후 결과를 클라이언트에 전송하는 방식을 채택했다. 이 기술은 빠르게 자바 2 플랫폼, 엔터프라이즈 에디션의 핵심 웹 애플리케이션 개발 구성 요소로 자리 잡았다. 2003년에는 자바 서버 페이지 2.0 사양이 발표되며 표현 언어와 태그 파일 기능 등이 강화되었다.
자바 서버 페이지 기술은 현재 오라클에 의해 관리되며, 자카르타 EE 사양의 일부로 발전을 거듭하고 있다. 역사적으로 마이크로소프트의 액티브 서버 페이지와 경쟁 관계에 있었으며, 이후 등장한 다양한 템플릿 엔진과 자바스크립트 기반 서버 사이드 기술들의 등장으로 그 사용 영역은 변화해 왔다.
3. 구성 요소
3. 구성 요소
3.1. 지시자
3.1. 지시자
자바 서버 페이지(JSP)에서 지시자(directive)는 JSP 페이지 전체에 적용되는 설정 정보를 웹 컨테이너에 전달하는 역할을 한다. 지시자는 페이지의 속성을 정의하거나 외부 파일을 포함시키는 등 페이지가 서블릿으로 변환되는 방식을 지시한다. 지시자는 <%@로 시작하고 %>로 끝나는 특별한 태그 형태를 가지며, 페이지의 최상단에 위치하는 것이 일반적이다.
주요 지시자로는 page, include, taglib가 있다. page 지시자는 JSP 페이지의 언어, 콘텐츠 타입, 인코딩, 세션 사용 여부, 버퍼 크기 등 페이지의 전반적인 속성을 지정한다. include 지시자는 컴파일 시점에 다른 HTML 파일이나 JSP 파일의 내용을 현재 페이지에 삽입할 때 사용한다. taglib 지시자는 사용자 정의 태그 라이브러리나 JSTL(JSP Standard Tag Library)과 같은 태그 라이브러리를 페이지에서 사용할 수 있도록 선언한다.
이러한 지시자는 JSP 페이지가 자바 서블릿 코드로 변환되는 과정에 직접적인 영향을 미친다. 예를 들어, page 지시자에서 인코딩을 지정하면 생성되는 서블릿의 응답 콘텐츠 타입이 설정되고, include 지시자를 사용하면 포함된 파일의 내용이 소스 코드 수준에서 병합되어 하나의 서블릿으로 컴파일된다. 지시자는 JSP의 동작을 제어하는 기본적인 뼈대를 제공하는 핵심 요소이다.
3.2. 스크립트릿
3.2. 스크립트릿
스크립트릿은 자바 서버 페이지에서 자바 코드를 직접 삽입하여 실행할 수 있도록 하는 기본 구성 요소이다. 스크립트릿은 <%와 %> 태그로 둘러싸여 있으며, 이 태그 안에 작성된 모든 코드는 서블릿으로 변환될 때 _jspService 메서드 내부에 그대로 포함된다. 이는 웹 애플리케이션의 로직, 예를 들어 조건문, 반복문, 변수 할당 등을 HTML 또는 다른 마크업 언어와 혼합하여 작성할 수 있게 해준다.
스크립트릿은 자바 문법을 그대로 사용하기 때문에 자바 개발자에게 친숙하고 학습 곡선이 낮다는 장점이 있다. 또한 서블릿의 모든 기능과 자바 표준 라이브러리를 페이지 내에서 직접 활용할 수 있어 강력한 동적 웹 콘텐츠를 빠르게 생성하는 데 유용하다. 예를 들어, 데이터베이스 쿼리 결과를 처리하거나 세션 정보를 조작하는 복잡한 비즈니스 로직을 구현할 수 있다.
그러나 스크립트릿의 과도한 사용은 소프트웨어 공학적 관점에서 문제를 일으킬 수 있다. 자바 코드와 HTML이 한 파일에 뒤섞이면 코드 가독성이 떨어지고 유지보수가 어려워진다. 이는 특히 대규모 웹 개발 프로젝트에서 심각한 단점으로 작용한다. 이러한 문제점은 MVC 패턴의 도입과 함께 스크립트릿의 사용을 지양하고, 표현식이나 액션 태그, 그리고 JSTL 같은 태그 라이브러리를 활용하는 방향으로 발전하게 된 주요 원인이 되었다.
3.3. 표현식
3.3. 표현식
자바 서버 페이지의 표현식은 JSP 페이지 내에서 자바 코드의 값을 간결하게 출력하기 위한 요소이다. 표현식은 <%= %> 태그로 감싸서 작성하며, 태그 안에 위치한 자바 표현식의 평가 결과가 문자열로 변환되어 클라이언트의 응답 출력 스트림에 직접 삽입된다. 이는 스크립트릿 내에서 out.print() 메서드를 사용하는 것과 동일한 결과를 훨씬 간편한 문법으로 제공한다.
표현식은 주로 변수, 메서드 호출, 또는 간단한 산술 연산의 결과를 HTML 코드 사이에 동적으로 삽입할 때 사용된다. 예를 들어, 사용자 이름이나 현재 시간과 같은 데이터를 웹 페이지에 표시하는 데 적합하다. 표현식 태그 내부의 코드는 서버에서 실행되며, 그 결과값만이 클라이언트의 웹 브라우저로 전송된다.
표현식은 JSP 페이지의 가독성을 높이고 스크립트릿에 비해 코드를 깔끔하게 유지하는 데 기여한다. 그러나 MVC 패턴의 관점에서 볼 때, 표현식 역시 프레젠테이션 계층에 비즈니스 로직이 과도하게 노출될 수 있는 문제점을 내포하고 있다. 이는 이후 등장한 JSTL과 EL과 같은 기술로 보완되었다.
3.4. 선언문
3.4. 선언문
선언문은 자바 서버 페이지에서 메서드나 변수를 선언하기 위해 사용하는 요소이다. 선언문은 <%!로 시작하여 %>로 끝나는 태그 안에 작성되며, 이 태그 내부에 선언된 코드는 해당 자바 서버 페이지가 서블릿으로 변환될 때 클래스의 멤버(인스턴스 변수나 메서드)로 추가된다. 이는 스크립트릿이나 표현식에서 사용되는 지역 변수와는 구분되는 특징이다.
선언문을 사용하면 페이지 내에서 반복적으로 호출해야 하는 헬퍼 메서드를 정의하거나, 여러 요청에 걸쳐 상태를 유지해야 하는 인스턴스 변수를 선언할 수 있다. 예를 들어, 특정 형식으로 문자열을 포맷하는 메서드나 페이지의 접속 횟수를 카운트하는 변수를 선언하는 데 활용된다. 이렇게 선언된 멤버는 해당 자바 서버 페이지에서 생성된 서블릿의 수명 주기 동안 존재하게 된다.
그러나 선언문의 사용은 주의가 필요하다. 선언된 인스턴스 변수는 스레드 간에 공유되기 때문에, 동시에 여러 사용자의 요청이 들어올 경우 스레드 안전성 문제가 발생할 수 있다. 따라서 변수를 선언할 때는 synchronized 키워드를 사용하거나, 필요한 경우 지역 변수나 다른 스코프의 속성을 사용하는 것이 일반적으로 권장된다. 선언문은 주로 스레드 안전에 영향을 주지 않는 유틸리티 메서드를 정의하는 목적으로 더 많이 사용된다.
3.5. 액션 태그
3.5. 액션 태그
액션 태그는 자바 서버 페이지에서 특정 작업을 수행하기 위해 사용되는 XML 스타일의 태그이다. 이 태그들은 페이지의 실행 흐름을 제어하거나, 다른 리소스를 포함시키거나, 자바빈즈 컴포넌트를 조작하는 등의 기능을 제공한다. 액션 태그는 서블릿으로 변환될 때 특정 자바 코드로 대체되며, 스크립트릿에 비해 코드의 가독성과 재사용성을 높여준다.
주요 액션 태그로는 <jsp:include>, <jsp:forward>, <jsp:useBean>, <jsp:setProperty>, <jsp:getProperty> 등이 있다. <jsp:include> 태그는 현재 페이지에 다른 정적 또는 동적 리소스를 포함시키는 역할을 한다. <jsp:forward> 태그는 현재 요청을 다른 자바 서버 페이지나 서블릿으로 전달하여 제어권을 넘긴다. 이는 MVC 패턴에서 컨트롤러의 역할을 구현할 때 자주 활용된다.
<jsp:useBean>, <jsp:setProperty>, <jsp:getProperty> 태그들은 자바빈즈와 밀접하게 연관되어 있다. <jsp:useBean>은 특정 범위(예: page, request, session, application)에서 자바빈즈 객체를 찾거나 새로 생성한다. <jsp:setProperty>는 해당 객체의 속성 값을 설정하고, <jsp:getProperty>는 속성 값을 가져와 출력한다. 이를 통해 자바 서버 페이지에서 비즈니스 로직과 프레젠테이션 로직을 분리하는 데 기여한다.
이 외에도 <jsp:param> 태그는 include나 forward 액션에 추가 매개변수를 전달할 때 사용되며, 사용자 정의 태그 라이브러리를 호출하는 <jsp:invoke>나 <jsp:doBody>와 같은 태그도 존재한다. 액션 태그의 사용은 자바 서버 페이지 코드를 더 구조화하고 유지보수하기 쉽게 만드는 중요한 요소이다.
4. 동작 원리
4. 동작 원리
자바 서버 페이지의 동작 원리는 웹 서버가 클라이언트로부터 JSP 파일에 대한 요청을 받는 순간부터 시작된다. 웹 서버는 이 요청을 JSP 컨테이너라고 불리는 특수한 엔진으로 전달한다. JSP 컨테이너는 톰캣과 같은 웹 애플리케이션 서버에 내장되어 있으며, JSP 파일을 처리하는 핵심 역할을 담당한다.
JSP 파일이 최초로 요청되면, JSP 컨테이너는 해당 파일을 자바 서블릿 소스 코드로 변환(번역)한다. 이 과정에서 지시자, 스크립트릿, 표현식 등의 JSP 요소들은 모두 순수한 자바 코드로 변경된다. 그런 다음 이 자바 소스 코드는 자바 컴파일러에 의해 바이트코드(.class 파일)로 컴파일되어 실행 가능한 서블릿 클래스가 생성된다.
컴파일이 완료되면, JSP 컨테이너는 이 서블릿 클래스의 인스턴스를 생성하고 초기화한다. 이후의 모든 동일한 JSP 페이지 요청은 이 미리 컴파일된 서블릿이 실행되어 처리하게 된다. 이 서블릿은 요청을 처리하고, 필요한 데이터베이스 연동이나 비즈니스 로직을 수행한 후, 최종적으로 HTML 형태의 응답을 생성하여 클라이언트의 웹 브라우저로 전송한다.
이러한 변환과 컴파일 과정은 JSP 파일이 수정되거나, 서버가 재시작될 때까지 한 번만 발생하므로, 초기 접속 시에는 약간의 지연이 발생할 수 있지만, 이후 요청에서는 컴파일된 서블릿이 직접 실행되어 빠른 성능을 보인다. 결과적으로 JSP는 개발자에게는 HTML에 가까운 편리한 작성 방식을 제공하면서, 실행 시점에는 고성능의 서블릿으로 동작하는 특징을 가진다.
5. 장단점
5. 장단점
5.1. 장점
5.1. 장점
자바 서버 페이지는 자바 기반의 웹 애플리케이션 개발에서 널리 사용되는 기술로, 여러 가지 장점을 제공한다. 가장 큰 장점은 자바 언어의 강력함과 서블릿 기술의 모든 기능을 그대로 사용할 수 있다는 점이다. 이는 개발자가 익숙한 자바 문법과 방대한 자바 API 라이브러리를 웹 페이지 개발에 직접 활용할 수 있게 해준다. 또한, HTML이나 XML과 같은 마크업 언어 안에 자바 코드를 삽입하는 방식으로, 정적인 웹 페이지 구조와 동적인 로직을 비교적 쉽게 결합할 수 있다.
또 다른 주요 장점은 플랫폼 독립성이다. 자바 서버 페이지로 작성된 애플리케이션은 자바 가상 머신이 설치된 모든 운영 체제(윈도우, 리눅스, 유닉스 등)와 웹 서버(아파치 톰캣, 제이보스 등)에서 동일하게 실행될 수 있다. 이는 "한 번 작성하면, 어디서나 실행된다"는 자바의 철학을 웹 개발 영역에서도 구현하게 해준다. 결과적으로 개발과 배포 환경의 유연성을 크게 높여준다.
자바 서버 페이지는 웹 애플리케이션의 표현 계층을 담당하는 데 효율적이다. 스크립트릿, 표현식, 액션 태그 등의 구성 요소를 통해 비즈니스 로직과 프레젠테이션 로직을 분리하는 MVC 패턴 구현을 용이하게 한다. 특히, 자바빈즈나 사용자 정의 태그 라이브러리를 활용하면 HTML 코드 내에 지저분하게 섞이는 자바 코드의 양을 줄이고, 재사용 가능한 컴포넌트를 만들어 유지보수성을 향상시킬 수 있다.
마지막으로, 자바 서버 페이지는 성숙한 기술 생태계의 혜택을 받는다. 수많은 오픈 소스 라이브러리와 강력한 통합 개발 환경 지원, 그리고 방대한 개발자 커뮤니티를 바탕으로 한 풍부한 자료와 솔루션이 존재한다. 이는 학습 곡선을 낮추고, 실제 프로젝트에서 발생하는 복잡한 문제를 해결하는 데 유리한 환경을 제공한다.
5.2. 단점
5.2. 단점
JSP의 주요 단점은 복잡한 비즈니스 로직과 프레젠테이션 로직이 하나의 파일에 혼재되어 유지보수가 어려워질 수 있다는 점이다. 이는 스파게티 코드를 초래할 수 있으며, 특히 대규모 프로젝트에서 디자이너와 개발자의 역할 분리가 어렵게 만든다. 또한, JSP 페이지는 실행 시점에 서블릿으로 변환되고 컴파일되는 과정을 거치기 때문에, 최초 요청 시 발생하는 지연 시간이 성능 저하의 원인이 될 수 있다.
JSP는 기본적으로 자바 코드를 직접 페이지 내에 삽입할 수 있는 스크립트릿을 제공하는데, 이는 로직과 뷰의 강한 결합을 유도한다. 이러한 구조는 MVC 패턴과 같은 아키텍처 패턴을 적용하기 어렵게 만들며, 단위 테스트 작성도 복잡해진다. 또한, JSP 태그 라이브러리와 EL의 사용이 필수적이지 않다면, HTML 내에 자바 코드가 산재하여 가독성을 현저히 떨어뜨린다.
성능과 관련된 또 다른 문제는 세션 관리와 스코프에 있다. 기본적으로 JSP는 페이지, 요청, 세션, 애플리케이션 네 가지 스코프를 제공하지만, 이를 과도하게 사용하거나 관리하지 않으면 메모리 누수와 서버 부하를 초래할 수 있다. 특히 세션에 대량의 데이터를 저장하는 경우, 서버의 메모리 사용량이 급증하여 확장성에 악영향을 미칠 수 있다.
마지막으로, 현대적인 웹 개발 트렌드와 비교했을 때 JSP는 한계를 보인다. RESTful API와 싱글 페이지 애플리케이션이 주류가 된 환경에서는 서버 측에서 완전한 HTML 페이지를 렌더링하는 JSP의 역할이 축소되었다. 또한, 타임리프나 프리마커 같은 최신 템플릿 엔진들은 더 깔끔한 문법과 강력한 기능을 제공하며, 자바스크립트 기반 프레임워크들은 클라이언트 측 렌더링을 통해 더 풍부한 사용자 경험을 구현할 수 있어 JSP의 대안으로 자리 잡고 있다.
6. MVC 패턴과의 관계
6. MVC 패턴과의 관계
자바 서버 페이지는 초기에는 비즈니스 로직과 프레젠테이션 로직이 한 파일에 혼재하는 경향이 있어 유지보수가 어려웠다. 이 문제를 해결하기 위해 MVC 패턴과의 결합이 강력히 권장되며, JSP는 주로 뷰(View) 계층의 역할을 담당하게 된다. 모델-뷰-컨트롤러 아키텍처에서 JSP는 사용자에게 보여질 HTML이나 XML 등의 출력을 생성하는 데 특화된 구성 요소로 사용된다.
이 패턴에서 컨트롤러(Controller)는 일반적으로 서블릿이 담당하여 사용자 요청을 처리하고, 모델(Model)은 자바빈즈나 엔터프라이즈 자바빈즈와 같은 자바 객체가 비즈니스 데이터와 로직을 표현한다. 컨트롤러는 모델을 처리한 후 그 결과를 리퀘스트나 세션 속성에 저장하고, 적절한 JSP 페이지로 포워딩한다. JSP는 전달받은 모델 데이터를 참조하여 최종적인 웹 페이지를 동적으로 렌더링하는 역할을 수행한다.
이러한 분리는 개발 과정에서 효율적인 역할 분담을 가능하게 한다. 예를 들어, 웹 디자이너는 마크업과 스타일시트에 집중하여 JSP를 다루고, 자바 개발자는 복잡한 서버 측 로직을 서블릿과 모델 객체에서 구현할 수 있다. JSP 표준 태그 라이브러리나 EL(표현 언어)의 도입은 JSP 내에서 자바 코드의 사용을 최소화하여 뷰 계층의 순수성을 더욱 높이는 데 기여했다.
결과적으로, JSP는 MVC 패턴의 뷰 컴포넌트로서 그 진가를 발휘하며, 스프링 MVC나 자카르타 EE의 MVC 프레임워크와 같은 현대적인 웹 애플리케이션 프레임워크의 기반이 되는 중요한 기술로 자리 잡았다.
7. 대체 기술
7. 대체 기술
7.1. 서블릿
7.1. 서블릿
서블릿은 자바를 사용하여 웹 서버에서 실행되는 서버 사이드 프로그램이다. 자바 서버 페이지의 기반이 되는 핵심 기술로, HTTP 요청을 받아 처리하고 동적인 웹 페이지를 생성하여 응답하는 역할을 한다. 서블릿은 자바 가상 머신 위에서 동작하는 특수한 자바 클래스이며, 웹 애플리케이션의 비즈니스 로직을 처리하는 데 주로 사용된다.
서블릿의 동작 방식은 웹 컨테이너 또는 서블릿 컨테이너에 의해 관리된다. 클라이언트의 요청이 서버에 도착하면, 웹 컨테이너는 해당 요청을 처리할 서블릿 인스턴스를 생성하거나 재사용하며, service(), doGet(), doPost()와 같은 메서드를 호출한다. 서블릿은 데이터베이스 조회나 계산과 같은 로직을 수행한 후, 그 결과를 HTML 형태로 생성하여 클라이언트에게 전송한다. 이 과정에서 서블릿은 응답 객체를 직접 조작해야 하기 때문에, 복잡한 HTML 출력을 생성하는 데는 다소 번거로움이 따른다.
이러한 서블릿의 한계를 보완하기 위해 등장한 기술이 자바 서버 페이지이다. JSP는 서블릿 기술을 확장한 것으로, 최종적으로는 서블릿 코드로 변환되어 실행된다. JSP는 HTML 내에 자바 코드를 쉽게 삽입할 수 있어 프레젠테이션 레이어를 구성하기에 더 적합한 반면, 서블릿은 순수 자바 코드로 강력한 로직 처리를 담당하는 데 유리하다. 따라서 현대의 자바 웹 애플리케이션에서는 서블릿이 컨트롤러 역할을, JSP가 뷰 역할을 수행하는 MVC 패턴으로 함께 활용되는 경우가 많다.
7.2. 자바스크립트 기반 프레임워크
7.2. 자바스크립트 기반 프레임워크
자바 서버 페이지의 대안으로 등장한 주요 기술군 중 하나는 자바스크립트 기반 프레임워크이다. 이는 클라이언트 사이드에서 동작하는 자바스크립트를 통해 웹 애플리케이션의 사용자 인터페이스를 구축하는 방식으로, 서버 사이드에서는 주로 RESTful API나 GraphQL과 같은 웹 API를 통해 데이터만 제공하는 역할을 분리한다. 이 접근법은 싱글 페이지 애플리케이션 개발에 적합하며, 서버의 부담을 줄이고 더 풍부한 사용자 경험을 제공할 수 있다는 특징이 있다.
대표적인 자바스크립트 기반 프레임워크로는 리액트, 앵귤러, 뷰.js 등이 있다. 이러한 프레임워크들은 가상 DOM과 같은 기술을 활용하여 효율적인 UI 렌더링을 지원하며, 컴포넌트 기반 아키텍처를 채택하여 재사용 가능한 코드 작성을 용이하게 한다. 이는 전통적인 자바 서버 페이지 방식이 서버에서 HTML을 완성하여 전송하는 것과는 근본적으로 다른 패러다임이다.
자바스크립트 기반 프레임워크의 등장은 프론트엔드와 백엔드 개발의 명확한 분업을 촉진하였다. 백엔드에서는 스프링 부트나 Node.js와 같은 기술로 비즈니스 로직과 데이터베이스 처리를 담당하고, 프론트엔드는 사용자와의 상호작용을 전담하게 된다. 이로 인해 자바 서버 페이지가 주로 사용되던 모놀리식 아키텍처에서 마이크로서비스 아키텍처와 프론트엔드 분리 아키텍처로의 전환이 가속화되었다.
프레임워크 | 주요 특징 | 개발사/주체 |
|---|---|---|
리액트 | 가상 DOM, 컴포넌트 기반, 함수형 프로그래밍 지원 | 메타(구 페이스북) |
앵귤러 | 타입스크립트 기반, 풀 프레임워크, 양방향 데이터 바인딩 | 구글 |
뷰.js | 점진적 채택 가능, 쉬운 학습 곡선, 반응형 시스템 | 에번 유 |
이러한 변화는 현대 웹 개발에서 자바 서버 페이지의 역할을 상대적으로 축소시켰으며, 특히 복잡한 대화형 웹 애플리케이션을 구축할 때는 자바스크립트 기반 프레임워크가 더 선호되는 기술 스택이 되었다.
7.3. 타임리프, 프리마커 등 템플릿 엔진
7.3. 타임리프, 프리마커 등 템플릿 엔진
자바 서버 페이지의 대안으로 등장한 템플릿 엔진들은 서버 사이드 렌더링 방식을 유지하면서도 JSP의 단점을 보완하는 데 초점을 맞췄다. 대표적인 예로 타임리프(Thymeleaf)와 프리마커(FreeMarker)가 있으며, 이들은 순수한 HTML 템플릿 파일을 사용하고 템플릿 내에 비즈니스 로직을 최소화하는 철학을 공유한다. 이러한 접근 방식은 프론트엔드 개발자와 백엔드 개발자 간의 협업을 용이하게 하고, 템플릿 파일의 가독성과 유지보수성을 크게 향상시킨다.
타임리프는 스프링 프레임워크 생태계와의 긴밀한 통합으로 널리 채택되었다. 가장 큰 특징은 정적 프로토타입으로도 웹 브라우저에서 직접 열어 확인할 수 있는 '자연 템플릿'을 지원한다는 점이다. 또한, 표현식이 HTML 속성에 기반하여 작성되기 때문에 기존 마크업을 크게 해치지 않으며, 스프링 시큐리티나 국제화(i18n)와 같은 스프링의 다양한 기능을 템플릿 레벨에서 편리하게 사용할 수 있다.
프리마커는 타임리프보다 역사가 긴 템플릿 엔진으로, 특정 웹 프레임워크에 종속되지 않는 독립적인 라이브러리이다. 강력한 템플릿 언어를 제공하며, HTML 생성뿐만 아니라 이메일, XML, JSON 등 다양한 형식의 텍스트 출력에 활용될 수 있다. 구성이 단순하고 유연성이 높아, 자바 기반의 다양한 애플리케이션에서 범용적으로 사용된다.
이들 템플릿 엔진은 모델-뷰-컨트롤러 패턴에서 '뷰' 계층을 담당하는 기술로, 서블릿이나 스프링 MVC와 같은 컨트롤러와 결합되어 사용된다. JSP가 자바 코드를 직접 삽입할 수 있는 반면, 이들은 템플릿 자체에 프로그래밍 로직을 포함시키지 않고, 컨트롤러로부터 전달받은 데이터를 표시하는 데만 집중한다. 이로 인해 보안성이 강화되고, 테스트 용이성이 증가하는 장점을 가진다.
