← 목록으로
DEVLOG · education
2026-06-19

JSP와 Modern Template 화면

JSPTEMPLATE

1. JSP vs 모던 템플릿

1) JSP (JavaServer Pages)

  • 개념 HTML 코드 안에 Java 코드를 삽입하여 동적인 웹 페이지를 생성하는 서버 사이드 스크립트 언어입니다.
  • 동작 방식 Client가 요청하면 JSP 페이지는 서블릿(Servlet) 소스 코드로 변환된 후 컴파일되어 실행됩니다.
  • 특징 과거 전자정부프레임워크 등 국내 웹 개발 표준으로 오랜 기간 사용되었습니다.

2) 모던 템플릿 (Thymeleaf, Mustache 등)

  • 개념 HTML과 서버 데이터를 분리하여 렌더링하는 현대적인 서버 사이드 템플릿 엔진입니다.
  • 동작 방식 HTML 화면 구조를 그대로 유지하면서, 특정 속성(예: Thymeleaf의 th:text)을 통해 서버 데이터를 동적으로 바인딩합니다.
  • 특징 Spring Boot에서 공식적으로 권장하며, 프론트엔드와 백엔드의 관심사 분리(SoC)가 잘 이루어집니다.

2. JSP는 Java와 호환성 및 현업 사용 빈도가 높은데 사용을 안 하는 추세인 이유

1) 보안 문제

  • 비즈니스 로직 노출 JSP 파일 내에 Java 코드가 직접 작성될 경우(스크립틀릿 사용), 백엔드 로직과 데이터베이스 접근 정보가 뷰 레이어에 노출될 위험이 큽니다.
  • 취약점 노출 제대로 정제되지 않은 사용자 입력값이 HTML에 그대로 출력될 경우, XSS(Cross-Site Scripting) 공격에 취약해집니다.

2) 최근 미지원 이슈 (내장 서버 및 패키징 제한)

  • 임베디드 WAS 제약 최근 백엔드 트렌드인 Spring Boot의 내장 Tomcat 구조에서 JSP는 제약이 많습니다.
  • 패키징 제한 Spring Boot는 독립 실행이 가능한 JAR 패키징을 지향하지만, JSP는 기본적으로 WAR(Web Application Archive) 패키징을 요구하며 JAR 구조에서는 정상적으로 동작하지 않거나 제약이 발생합니다.
  • 공식 지원 중단 Spring Boot를 포함한 모던 프레임워크 진영에서 JSP에 대한 자동 설정을 지원하지 않거나 권장하지 않는 추세입니다.

3) 불필요한 스크립트 (스파게티 코드와 유지보수성 저하)

  • 스크립틀릿(<% %>) 오용 HTML 마크업과 Java 비즈니스 로직이 한 파일에 뒤섞이면서 코드가 복잡해지는 '스파게티 코드'가 유발됩니다.
  • 유지보수 및 협업의 어려움 웹 디자이너나 퍼블리셔가 HTML 코드를 수정할 때 Java 코드를 건드릴 위험이 있고, 백엔드 개발자도 화면 코드와 로직 코드가 섞여 있어 가독성이 떨어집니다.

3. 모던 템플릿이 이슈를 보완해주고 있는가?

1) 모던 템플릿의 장점 (Thymeleaf 중심)

  • Natural Templates 모던 템플릿(특히 타임리프)은 서버를 구동하지 않고 HTML 파일 자체를 브라우저에서 그대로 열어도 깨지지 않고 정상적인 화면 디자인을 볼 수 있습니다.
  • 완전한 관심사 분리 뷰(HTML) 영역에는 화면 구조만 남기고, 모든 비즈니스 로직은 Java 클래스(Controller, Service)로 완전히 분리됩니다.

2) 상단 이슈의 대응 방안

  • 보안 강화 템플릿 엔진 자체적으로 XSS 방지(기본 이스케이프 처리) 기능이 내장되어 있어 보안성이 높고, 비즈니스 로직이 화면에 노출될 여지를 원천 차단합니다.
  • 깔끔한 코드 유지 화면 표현을 위한 전용 문법(표현식)만 제공하므로, 화면 내에 무분별한 Java 로직 작성이 불가능해져 유지보수성이 크게 향상됩니다.

3) 지원 범위 확대

  • Spring Boot와의 완벽한 통합 JAR 패키징 및 내장 WAS 환경에서도 아무런 제약 없이 100% 기능을 지원합니다.
  • 다양한 표현식 및 확장성 Spring Security와의 연동, Spring의 Validation 오류 처리 등 스프링 생태계의 기능을 템플릿 안에서 자연스럽게 사용할 수 있도록 지원 범위가 넓습니다.
  • view전용 프레임워크 지원 비지니스 로직을 숨기고, 화면 표현을 도와주는 프레임워크가 많이 사용되고 있습니다. JSP도 일부 지원은 되지만 모던 템플릿 만큼 호환성이 좋지 않습니다. 컴포넌트 생성을 통한 화면 처리가 진행 될 경우 라이프사이클 관리가 어려워 지기 때문입니다.
DISCUSSION

댓글

GitHub 계정으로 의견이나 질문을 남길 수 있습니다.

댓글 불러오는 중