최근 수정 시각 : 2024-12-29 00:00:53

JSP

1. Jakarta Server Pages
1.1. 개요1.2. 사용 현황1.3. 타 기술과의 차이
2. Jacketed Soft Point

1. Jakarta Server Pages

JSP
Jakarta Server Pages
<colbgcolor=orange><colcolor=#000000> 최초 개발자 Sun 마이크로시스템
운영 및 개발 오라클
( Oracle)
라이선스 JSpec-license 2.0
처음 버전 1.0 (1999)
[clearfix]

1.1. 개요

Java[1]를 이용한 서버 사이드 템플릿 엔진이다. JSP는 자바를 웹 서버에서 쉽게 쓰기 위한 기술이며 언어가 아니다. Java Server Pages의 약자였는데, 오라클에서 자바 상표권 문제로 오픈 소스인 JSP는 자카르타 서버 페이지로 이름을 바꾸었다. Java의 점유율을 대폭 상승시킨 1등 공신이다. 같은 부류에 속하는 것으로 ASP가 있다. 확장자는 당연히 .jsp를 사용. ASP와 마찬가지로 <% ... %>로 둘러싸인 스크립트 영역이 있으며, 실행 시에 javax.servlet.http.HttpServlet 클래스를 상속받은 Java 소스 코드로 변환한 다음[2] 컴파일되어 서블릿으로 실행된다. 이 JSP 파일을 Servlet 자바 소스로 클래스로 변환하고 컴파일 역할을 하는 프로그램을 JSP 컨테이너라 하며 컴파일된 서블릿 클래스 파일을 실제로 실행하는 프로그램은 서블릿 컨테이너 혹은 웹 컨테이너[3]라고 부른다.[4][5]로 부른다. 대표적인 것으로 Tomcat. 하나의 JSP 페이지가 하나의 Java 클래스이기 때문에 모든 Java 라이브러리를 끌어다 쓸 수 있다.

서블릿 컨테이너도 Java 프로그램이며, Java Virtual Machine 위에서 실행된다. 따라서 대부분의 운영 체제에서 소스 코드 변경이나 재컴파일 없이 실행시킬 수 있고, 특히 유닉스 계열과 궁합이 잘 맞는다.

1.2. 사용 현황

JSP는 주로 기업용 시스템 구축에 사용되었다. 이런 환경에서는 보통 Java Enterprise Edition(J2EE)의 사양을 만족하는 웹 애플리케이션 서버 위에서 프로그램을 운용하게 된다. J2EE는 JSP의 실행뿐만 아니라 DB 커넥션 풀, 메시징 시스템, 로드 밸런싱 등등 화려한 기능들로 무장하고 있다.[6] 이로 인해 규모가 방대하고 무거우며, 메모리 등의 자원도 많이 사용하게 되고 상대적으로 초기 로딩도 느리다. J2EE 웹 서버계의 최고봉은 BEA의 WebLogic이었지만 지금은 오라클에 인수된 상태.(...) 한국 한정으로 공공 기관 등에 자주 쓰이는 티맥스소프트의 JEUS도 J2EE 애플리케이션 서버다.

PHP를 지원하는 호스팅업체는 많이 널려있지만 자바만 호스팅해 주는 업체는 찾기가 쉽지 않았으나, 최근 데이터 센터와 호스팅업체들이 클라우드 컴퓨팅으로 갈아탄 다음부터 비교적 싼값에 Java를 운용할 수 있는 클라우드 호스팅 서비스도 꽤 생겼다. 대인배 구글 App Engine이 공짜로 Java를 지원하니 이쪽을 이용해 보도록 하자. Amazon Web Services의 Beanstalk와 Lambda도 동일한 서비스이다.

JSP를 지원하는 통합 개발 환경에는 이클립스, 넷빈즈, IntelliJ IDEA 등이 있으며, Visual Studio Code 같은 텍스트 에디터도 JSP를 지원한다.

현재는 JSP 사용률이 감소하고, Thymeleaf를 사용하는 추세가 증가하고 있다. JSP는 Java 코드를 HTML에 삽입하는 방식이어서 템플릿이 복잡해지기 쉽고, 특수한 태그와 스크립트릿을 사용하기 때문에 브라우저에서 직접 보는 것이 어렵기 때문에 여러 가지로 훨씬 쉽고 편한 Thymeleaf를 두고 JSP를 사용할 이유가 없어졌기 때문이다.

자바의 공식 템플릿 엔진은 이미 Thymeleaf로 바뀐 지 오래되었다. 아직도 JSP를 쓰고 있다면 그야말로 틀딱 그 자체라고 할 수 있다.[7]

1.3. 타 기술과의 차이

ASP와 비교해서 JSP는 안정적이고, 유지 보수가 쉽다. 반면 PHP는 개발 속도가 빠르다. 한편 2010년대 이후의 웹 환경은 JSP의 경직된 구조가 받아들이기에는 너무 발전 속도가 빨라졌고 급격히 변하다 보니 인기가 빠르게 식고 있다. 요즘 트렌드인 API 주도형 사이트 구축과 SPA는 JSON을 받아 와 출력하기만 하면 되기 때문이다. 대기업이나 금융권, 관공서 등 규모가 크고 안정적인 서비스가 중요한 곳에서는 여전히 수요가 있지만, 이러한 곳이 아니라면 서비스 내용 대비 쓸데없이 무겁고 느린 JSP는 점점 메리트가 떨어져 가고 있다. 과거에 쓰였던 EJB는 군더더기 코드가 많고, EJB를 로딩하는 데 꽤나 시간이 걸리며[8], 속도를 위해 Local Bean으로만 줄창 쓰다가 지금은 거의 사장된 상태이다.

ASP.NET은 북미에서는 많이 쓰이나 한국에서는 잘 안 쓰인다. 사용하는 방식이 많이 변했지만 PHP는 단순 템플릿이 아닌 언어라서 API 서버 프레임워크도 나오는 등 아직 웹 쪽에서는 선방 중이고, 신흥 강자로 Node.js Go가 떠오르고 있다. 또한 Ruby on Rails의 성공도 JSP의 앞날을 가로막는 존재이다. Python Django Flask 웹 프레임워크도 편의성과 고성능, 그리고 압도적인 생산성과 완만한 학습 곡선으로 JSP를 위협하고 있다. JSP는 자바의 템플릿이며 스프링 프레임워크 5버전부터는 공식 지원을 중단했다.[9][10]

2. Jacketed Soft Point


탄은 측면부는 구리로 도금해 놓지만 탄두의 최전방부에는 내부의 부드러운 탄심(주로 납)을 노출시키는 형태의 탄환. 할로 포인트(JHP)와 마찬가지로 목표에 명중할 때 탄두의 형상이 크게 변화되어 관통력이 낮아지고 대인 저지력이 높아지는 효과가 있다. 특히 탄두가 변형하면서 전체적인 외경이 늘어나고 탄두 내부의 납이 유출되어 파편화되기도 해서 총상이 풀 메탈 재킷(FMJ)에 비해 심각해진다. 같은 덤덤탄인 JHP와 비교하면 상대적으로 탄도가 안정적이고 탄 걸림도 미세하게 적은 편이지만 총열에 납이 부착되는 경향은 조금 더 심한 편이다. 물론 FMJ가 탄도, 탄 걸림도, 납 문제 모두 가장 우수해서 JHP와 마찬가지로 JSP도 군용으로는 잘 쓰이지 않는다.


[1] JavaScript가 아니다! [2] 즉, JSP도 결국 Servlet이 된다. [3] 기본적으로 서블릿의 생명 주기을 관리하기 위해서는 웹의 요청을 받아야 하며 해당 요청을 기반으로 서블릿 객체을 매핑하여 실행을 해야 하기 때문에 서블릿 컨테이너들의 경우 웹 서버의 기능을 가진다 [4] 엄밀히 말해서는 J2EE 사양을 모두 충족하는 구현체가 인증을 받아야만 Web Application Server(WAS)로 부를수 있다. 별로 안 중요한 것 같지만 WAS냐 아니냐는 기술 스펙의 지원 여부 차이이기 때문에 기능상 매우 차이가 나며 미들웨어 제조업체들의 경우 정말 중요한 마케팅 포인트이다. [5] 하지만 업무 현장에서는 사용은 대부분 서버 이름으로 부르거나 그냥 싸잡아 WAS로 부른다. [6] 오픈 소스 WAS도 존재한다. 글래스피시, wildfly 등. [7] JSP specifications 사실 JSP는 현재도 JEE의 주요 스펙 중 하나이고, Thymeleaf의 경우 FreeMaker나 Velocity와 동일하게 자바로 된 일반적인 템플릿 엔진이다. 그러나 현 시점에서 자바를 이용해 웹 서비스를 만드는 경우 매우 오래된 레거시 시스템이 아닌 이상 대부분 스프링을 사용하는데, 레거시가 아닌 스프링 부트의 경우 내장 톰캣에 JSP 엔진이 없어서 JSP와 바로 호환되지 않고, 스프링 공식 사이트에서도 Thymeleaf를 사실상 공식 템플릿으로 취급하고 있다. [8] 원래 분산 환경을 위해 설계되었으나 아무도 그렇게 쓰지 않는다. [9] 스프링 프레임워크와 스프링 부트를 혼동한 서술이다. 스프링 부트의 내장 톰캣에서 JSP 컨테이너를 분리시킨 것에 대한 내용이다. [10] 템플릿 엔진이 아니라 서블릿을 용도로 한정시킨 독립된 기술 사양(J2EE 스펙)이라고 봐야 한다.