개념
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도 일부 지원은 되지만 모던 템플릿 만큼 호환성이 좋지 않습니다. 컴포넌트 생성을 통한 화면 처리가 진행 될 경우 라이프사이클 관리가 어려워 지기 때문입니다.
댓글
GitHub 계정으로 의견이나 질문을 남길 수 있습니다.