자바(Java)/JAVA 2EE

JSP(Java Server Pages) 컴포넌트 기술문서

본클라쓰 2010. 12. 9. 08:53

 서블릿과 JSP는 동적 웹 페이지 제작 기술로서 정적 웹 페이지가 가지는 단점을 극복하기 위한 기술이다.

 

[정적 웹 페이지 흐름도]

 

 정적 웹 페이지는 한번 작성한 HTML 문서를 사용자의 요청에 따라 해당하는 페이지를 서버에서 바로 전송하는 방식이다 .이 방식은 페이지 생산에 비해 유지보수가 어렵고 동시 접속자가 많아지면 성능이 저하된다는 점과 기존에 산재해 있는 많은 개발 방법들과 연계가 번거롭다는 단점이 있다. 이를 개선하기 위해 자바에서 동적 웹 페이지 제작 언어인 서블릿과 JSP를 발표했다.

 

 [동적 웹 페이지 흐름도]

 

 동적 웹 페이지는 서버에서 페이지 제작 프로그램을 사용하여 HTML 문서를 생성하는 방법으로, 사용자 요청에 따라 페이지를 제작하는 방식을 말한다. 동적 웹 페이지 제작에서 가장 중요한 것은 페이지를 제작하는 프로그램을 작성하는 것이고, 요청에 따른 처리 방식을 작성한다.

 

 

 

■ 서블릿(Servlet)

 

 자바 언어를 사용해 웹 페이지를 동적으로 생성하는 서버측 프로그램이며 서블릿은 자바 EE 사양의 일부로 브라우저로부터 입력받은 입력정보와 데이터베이스와 상호 작용을 통한 쇼핑몰이나 온라인 뱅킹 등 다양한 웹 시스템을 구현할 수 있다.

 

 서블릿은 개별적인 프로세스를 실행하여 처리하는 방식이 아닌 서블릿을 제어하는 모듈(쓰레드) 내에서 실행된다. 이런 방법으로 성능 향상과 서블릿이 제어 모듈의 통제하에 놓이기 때문에 서블릿까지 자유로운 통신이 가능하고 쓰레드 사용시 멀티 쓰레드 프로그래밍이 가능해진다. 또한, 서블릿 코드는 외부로 노출되지 않고 자바가 제공하는 고수준의 보안을 적용할 수 있기 때문에 보안이 강화된다.

 

 서블릿은 자바 기반의 웹 페이지 제작 언어이기 때문에 자바가 제공하는 수 많은 기능을 제한없이 사용할 수 있다. 이런 특징은 손쉬운 재사용이 가능하며, 플랫폼에 독립적이고, JDBC를 사용한 데이터베이스 프로그래밍을 쉽게 할 수 있게 한다.

 

 

 

■ JSP(Java Server Pages, 자바 서버 페이지)

 

 서블릿은 프로그래밍 코드 안에 HTML 페이지를 생성하는 방식으로 웹 페이지를 제작한다. 작성된 페이지를 수정하기 위해서는 프로그래밍 코드 안에 있는 태그를 수정해야 하는데 프로그래밍 코드와 태그가 뒤 섞여 있기 때문에 페이지 수정에 어려움을 겪는다. 이에 자바에서 JSP란 HTML 페이지 안에 프로그램 코드를 삽입하는 방식의 스크립트 언어를 발표한다.

 

 JSP는 HTML페이지에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성해 브라우저에 결과를 돌려주는 언어이며, Java 2 EE 스펙 중 일부로 웹 어플리케이션 서버에서 작동한다.

 

 JSP는 실행시 서블릿으로 컴파일(변환) 된 후 실행되므로 거의 서블릿과 유사하다고 볼 수 있다. 하지만, 서블릿과 달리 HTML 표준에 따라 작성되므로 웹 페이지를 디자인하기에는 편리하다. 이와 유사한 구조를 가진 것이 PHP, ASP, .NET 등이 있다.

 

 

 위와 같이 클라이언트가 웹 브라우저를 통하거나 어플리케이션에서 서비스 요청하면 JSP를 파싱하여 JSP컨테이너에서 서블릿 원시코드로 변환합니다. 그 후 변환된 원시코드를 컴파일(JSP파일을 서블릿을 위한 자바 코드로 변경한 후 클래스 파일- 자바코드를 서블릿 클래스로 컴파일) 후 실행시켜 나온 결과를 HTML형태로 클라이언트에게 되 돌려주는 방식을 취합니다. 이 때 비즈니스 로직 수행을 위한 자바빈즈 컴포넌트나 데이터베이스 접근을 수행하게 됩니다.

 

 

※ 참고 - Applet 

 HTML코드안에 포함되는 독립적 프로그램으로서 웹 브라우저가 이를 받아서 수행합니다. 애플릿은 서버측에서 동적으로 생성되는 것이 아니라 클라이언트(브라우저)에게 보내져 클라이언트 환경에서 수행되며 모든 브라우저는 JVM(JAVA virtual machine)을 내장하고 있으므로 OS와 독립적으로 동등하게 실행시킬 수 있습니다.