Categories
자바

JSP 라이프사이클

JSP(Java Server Page)

JSP 중 Server Page는 서버에서 실행되는 라이프사이클이 있는 웹 프로그래밍용 클래스를 말한다. Java는 개발 언어를 가리킨다. Tomcat 웹 서버에서 자스퍼 엔진이 JSP를 서블릿으로 변환한다. 라이프사이클을 고려하지 않고 개발해도 서블릿으로 변환될 때 라이프사이클 메서드가 자동으로 만들어져 서블릿처럼 실행된 다. hello.jsp를 만들면 org.apache.jsp.hello_jsp.java와 같이 서블릿으로 변환되고 org.apache.jsp.hello_jsp.class로 컴파일된 다음 실행된다. JSP도 서블릿이므로 서블릿에서 사용하는 객체나 메서드를 JSP에서도 사용할 수 있다. 컨테이너에서 실행될 수 있도록 필요한 규칙을 준수한 웹 프로그램 묶음을 웹컴포넌트라고 한다. 예를 들어 컴퓨터의 마더보드는 여러개의 카드를 꽂을 수 있는 슬롯이 있고, 각 카드는 정해진 목적이 있다. 목적을 이루기 위해 여러 부속품으로 여러 카드를 만든다. JSP나 서블릿은 부속품에, 웹컴포넌트는 각 카드에 해당 한다. 각 카드는 마더보드에 꽂혀야 실행된다. VGA 카드를 꽂아야 화면이 나오며, 사운드 카드를 꽂아야 소리가 나온다. 카드를 마더보드에 꽂을 때는 슬롯의 암수가 맞아야한다. 슬롯 설치 시 반드시 이 규칙을 지켜야 하는데, 웹 컴포넌트에서드 API라는 규칙을 반드시 지켜야한다. 따라서 웹프로그래밍은 웹컴포넌트를 만드는 방법, 웹 컴포넌트와 웹 컨테이너 사이의 규칙을 배우는 것이라 할 수 있다. 배포단위, 실행단위의 디렉터리를 컨텍스트라고 한다. 개발 후 JSP나 서블릿, HTML, web.xml을 압축하여 묶어서 아카이브 war를 만든다. 이 war를 웹 컨테이너에 놓으면 압축이 풀려 실행을 위한 디렉터리가 된다. 이 디렉터리가 바로 컨텍스트이며 모든 파일을 각 용도에 맞게 컨텍스트 안의 디렉터리에 놓아야 한 다. 예를 들어 hello.war를 웹 컨테이너에 놓으면 hello.war가 풀어져 hello 디렉터리가 된다. 컨텍스트 바로 아래에는 HTML, CSS, 자바스크립트, 이미지, JSP, WEB-INF 디렉터리가 있다. WEB-INF 디렉터리 안에는 web.xml이 있고, 서블릿과 컴파일된 클래스는 classes 디렉터리에 있어야 하며, .jar로 압축된 라이브러리는 lib에 안에 있어야 한다. 컨테이너는 컨텍스트의 web.xml을 가장 먼저 한 번 읽어들인다. WAS(JEE)는 “Web Server + Application Server + Service”의 의미다. 웹 서버는 JSP/Servlet를 위한 웹 컨테이너와 HTML을 서비스하는 HTTP Server가 있다. Application Server에서는 비즈니스 로직을 수행하는 EJB 컨테이너가 있다. 서비스는 JNDI, JMS, JTA, JavaMail을 제공하여 다른 기능의 서버와 연결하여 사용하게 하거나 서버 안에서 편리하게 사용할 수 있게 한다. Enterprise Edition의 필수요소를 모두 구현한 서버를 Enterprise Edition Server 또는 WAS라 부른다. WAS에는 WebLogic, WebSphere, JBoss, Zeus 등 수많은 제품이 있다. Tomcat을 WAS로 부르기도 한다. 이 책에서는 Tomcat 웹 서버를 Tomcat 애플리케이션 서버와 같은 의미로 사용한다. 레이어는 프로그램의 역할에 따라 논리적으로, 티어는 시스템의 역할에 따라 물리적으로 나눈 것이다. 혼용되기도 하지만 논리적인 것과 물리적인 것으로 구분된다는 점을 기억하자. 데이터베이스에서 DVD 대출정보를 찾아 웹 브라우저에 출력하는 웹 프로그래밍을 한다고 가정해보자. DVD 대출 프로그램은 데이터베이스에 접근해 정보를 가져오는 부분, 고객정보인지 비디오 정보인지 요청을 판단 하고 실행하는 부분, HTML로 결과를 만들고 응답하는 부분으로 나눌 수 있다. DVD 대출 프로그램은 역할에 따라 나눌 수 있으며 이를 레이어라 한다. 데이터베이스 서버, 웹 서버, 클라이언트인 웹 브라우저등 시스템을 물리적으로 나눌 수 있는데 이것을 티어라 한다. 웹 프로그래밍은 기본적으로 3티어다. 레이어는 보통 4개로 나눈다. 화면 레이어는 JSP와 서블릿이 담당한다. 요청을 받아 비즈니스 레이어에 정보를 요청한다. 결과를 받아 요청한 화면을 동적으로 만들고, 요청한 화면으로 옮긴다. 데이터 레이어는 영속성 레이어로도 알려진 레이어로, 데이터베이스에 쿼리(CRUD)를 실행한다. 데이터베이스에 접근하여 쿼리를 실행하기 위해 JDBC를 이용하거나, 해당 쿼리에 대해 JDBC 작업을 자동으로 실행해 쉽게 사용할 수 있도록 만든 프레임워크를 사용한다. 비즈니스 레이어에서 화면 레이어는 데이터 레이어를 이용한다. 비즈니스 레이어에서 얻은 객체를 비즈니스 객체라고 하며, 데이터베이스의 테이블과 관련이 있다. 데이터 레이어에서 얻은 결과로 화면 레이어에서 필요한 비즈니스 객체를 만들어도 된다. 애플리케이션 서버를 사용하는 경우는 4티어가 된다. 4티어일 때는 웹 서버와 애플리케이션 서버가 물리적으로 나누어진 티어가 되므로 레이어를 티어라고 부른다.