프로그래밍언어/WEB

JSP 용어, 처리과정 정리

헬로월드! 2020. 3. 28. 19:41

1. 서블릿 VS JSP 

1) 서블릿

  • 자바를 이용한 서버 프로그래밍 기술로서, 일반 애플리케이션을 개발하기 위해 만들어진 자바를 웹 환경에서 사용하려고 등장함
  • CGI (Common Gateway Interface) 를 대체하려고 개발되었으나, 느린 처리 속도, 많은 메모리 요구, 불편한 화면 제어 등의 한계로 PHP , ASP 등에 주도권을 넘겼다.
  • 그러다가 서블릿을 기반으로 하면서 PHP 와 유사한 형태로 프로그래밍이 가능한 JSP (Java Server Page) 를 선보이면서 JSP 는 가장 대표적인 웹 프로그래밍 언어로 자리 잡게 되었다.
  • 일반적인 자바 클래스의 형태를 취함 , HTML 로 표현해야 하는 내용이 많을수록 서블릿 프로그램은 상당히 비효율적

 

2)  JSP (Java Server Page)

  •   단순하고 직관적이라는 것 외에 서블릿을 기반으로 하기 때문에 자바가 지원하는 기능을 모두 사용할 수 있음
  •   다양한 운영체제와 개발환경을 이용할 수 있음
  •   오픈소스 프로젝트의 지원을 받음
  •  서블릿으로 컴파일된 후 메모리에서 처리되기 문에 많은 사용자의 접속도 원활하게 처리할 수 있음
  •  JSP 또는 다른 서블릿 간의 데이터를 쉽게 공유할 수 있음
  •  Beans (빈즈) 라고 하는 자바 컴포넌트를 사용할 수 있음
  •  커스텀 태그를 만들어 사용할 수 있으며 JSTL (JSP standard Tag Library) 과 같은 태그 라이브러리를 이용할 수 있음
  • 스트러츠, 스프링 @MVC 등 양한 프레임워크와 결합하여 개발할 수 있음 
  • 서블릿을 대체한다기 보다는 상호보완적인 기술!

2. JSP 처리 과정의 이해

JSP 는 HTML 과 다르게 소스 자체로는 실행할 수 없다! 웹 프로그램의 특성이 있기 때문에 웹 브라우저, 웹 서버, 서블릿 컨테이너, JSP, 서블릿, 빈즈 클래스 등 여러 구성요소 사이의 흐름을 이해해야 한다.

 

1) 웹 브라우저서 URL 을 입력한다.

2) DNS 서버로부터 입력한 URL 을 변환한 IP 주소를 받는다.

3) 받은 IP 주소의 웹 서버 8080 번 포트에 JSP 페이지를 요청한다.

4) 웹 서버가 요청 내용을 분석하고 서블릿 컨테이너에 요청을 넘겨 처리한다.

5) 화면에 보일 내용을 HTML 문서 형태로 웹 브라우저에 전송한다.

 

여기서 명확하게 알아야할 것은 JSP 로 개발된 웹 프로그램이라고 하더라도, 사용자에게 최종적으로 전달되는 콘텐츠는 HTML 이어야 한다는 점이다. 이와 같은 특징은 모든 웹 프로그램 기술에 동일하게 적용된다.

 


서블릿 컨테이너 내부 과정 

JSP 가 HTML 과 같은 일반적인 텍스트 파일 구조인데 비해, 서블릿은 자바 소스로 작성된 클래스 파일 구조로 되어있다.

서블릿 컨테이너 JSP 파일을 서블릿 소스로 변환해서 컴파일 하는데, 일단 컴파일된 JSP 파일은 단순한 파일이 아니라 컨테이너에서 서블릿 객체로 관리된다.

이러한 과정 때문에 최초 JSP 파일에 접근할 때는 컴파일 하는 시간이 많이 소요되지만 일단 컴파일하여 실행된 다음부터는 서블릿 컨테이너가 처리하기 때문에 빠르게 실행된다.

개발자가 작성한 JSP 소스는 변환된 소스의 _jspService() 메소드에 들어간다.


JSP 서블릿 컴파일과 처리 과정

  1. 웹 서버로부터 JSP 에 대한 사용자 요청이 컨테이너로 전달된다.
  2. 요청 JSP 에 대한 서블릿이 존재하면 다음 단계로 진행하고 , 존재하지 않을 경우 JSP 를 .java 파일로 변환한 다음 .class 파일로 컴파일 한다.
  3. 컴파일된 서블릿 클래스를 컨테이너의 메모리에 적재하고 실행한다.
  4. 데이터베이스 처리 혹은 별도의 기능을 위한 클래스 호출 등이 있다면 실행하고 결과를 취합해 HTML 형태로 구성한다.
  5. HTML 형태의 결과를 웹 서버를 경유해 사용자 브라우저에 전달한다. 

 

JSP 파일의 실행과 종료에 관계하는 메소드 = 생명주기 메소드 

컴파일된 JSP 는 서블릿 실행 과정에서 jspInit() 메소드를 통해 Ready 상태가 되고 메모리에 로드된다. 그리고 이후 모든 클라이언트 접속에 따라 _jspService() 메소드만 반복해서 호출한다.

컨테이너가 종료될 때에는 jspDestroy() 메소드를 통해 메모리에서 업로드되고, 다시 컨테이너가 시작될 경우 최초 클라이언트 요청에 대한 클래스가 있기 때문에 재 컴파일 과정은 거치지 않고 , jspInit() 메소드 호출을 통해 메모리에 로드하는 과정을 거친다.

 


꼭 꼭 기억해야할 것!

  1. JSP 는 일반 텍스트 파일로 되어있다 ( 텍스트파일은 컴퓨터가 이해할 수 없다. 즉 실행 가능한 프로그램이 아니며 특정 동작을 할 수 없다.)
  2. JSP 는 HTML 코드와 몇몇 특수 태그, 그리고 자바 코드가 섞여 있다.
  3. 사용자가 요청할 경우 JSP는 컨테이너 (톰캣) 에 의해 서블릿 형태의 .java 소스로 변환되고 컴파일 된다.
  4. 컴파일된 .class 는 컴퓨터에서 실행할 수 있는 형태로 특정 기능을 수행할 수 있게 된다.이후 소스 변경 전까지 해당 파일은 메모리에 상주하면서 다시 컴파일되지 않고 서비스된다.

JSP 프로그래밍 기술 변천

 

1. 초기 자바 기반 웹 프로그램은 서블릿 중심이었으나, 웹이 화면의 중심이라는 특성으로 인해 프로그램 내에서 화면을 처리하는 데 여러 문제를 야기한다.

2. 이후 화면을 중심으로 자바 프로그램을 연동할 수 있는 JSP 가 등장하게 되었으나 JSP 내에서 과도한 스크립트릿을 사용하는 문제로 프로그램 개발 구조의 변화가 요구된다.

3. MVC 패턴은 웹 프로그램을 역할에 따라 기술 요소를 구분해서 구현하는 프로그래밍 모델로 이후 웹 프로그램 개발의 기본 모델로 정착 되었다. 

 


MVC 패턴 

1. MVC 는 Model - View - Controller 의 약자로 프로그램의 전체 구성요소를 데이터, 화면 , 컨트롤의 세 가지 기능적 요소에 초점을 둔 프로그래밍 방식이다.

2. MVC 패턴에 따르면 웹 프로그램의 경우 Model 은 자바 클래스로 구현되며 보통 Do,DAO 와 같은 데이터 처리 클래스들로 구성된다.

3. View 는 화면 처리와 관련된 것으로 기본적으로 JSP 영역이며 , HTML , CSS 외의 표현 언어, 커스텀 태그 등이 사용된다.

4. 스크립트릿, <jsp:useBean> 등 JSP 페이지에서 프로그램을 다루는 부분에서는 사용을 권장하지 않는다.

5. 컨트롤러는 모델과 뷰를 연결하는 역할을 수행한다. 사용자 요청을 받아들이고 데이터를 처리한 후 결과를 뷰에다가 전달한다.

6. MVC 패턴은 프로그램 모델이므로 직접 구조를 설계해도 좋지만 스트러츠 프레임워크 혹은 스프링 @MVC 등 검증된 프레임워크를 사용하는 게 좋다.