[JAVA] JSP 동작원리


OKKY와 이런글이 올라왔었다.

java와 JSP 컴파일 시점 차이좀 알 수 있을까요?

어떤분께서 JSP는 인터프리터라서 컴파일이 필요 없습니다. 라고 답변을 달아주셨다.

아닌거같은데…

아니라고 반박하려면 나 먼저 알아야 하기 떄문에 한번 JSP란 무엇인지 정리해보자

JSP(Java Server Page)

Java Server Page의 약자로

HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성하여 웹 브라우저에 돌려주는 서버 사이드 스크립트 언어이다.

JSP가 실행되면 자바 서블릿으로 변환된 후 실행되므로 서블릿과 거의 유사하다고 볼 수 있다.

그러나 서블릿과 달리 HTML 표준에 따라 작성되므로 웹 디자인하기에 편리하다.

자바 서블릿(Java Servlet)

그렇다면 자바 서블릿은 뭐냐

자바 서블릿은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램이다.

JSP , Java Servlet 의 차이

결과적으로 역할은 같지만 아래의 차이가 있다.

  • JSP : HTML 문서 안에 Java 코드를 포함
  • 서블릿 : 자바 코드 안에 HTML을 포함

JSP 동작원리

img

  1. 웹브라우저에서 JSP페이지를 웹 서버에게 요청

  2. 웹 서버는 JSP에 대한 요청을 JSP 컨테이너에 넘김 (요청이 처음이 아닐경우 메모리에 적재되어 있는 클래스 파일을 실행 - 5번으로 이동 )**

  3. JSP 컨테이너는 해당 JSP를 찾아서 서블릿 파일(.java)을 새롭게 생성

  4. 서블릿 파일은 컴파일되어 서블릿 클래스 파일(.class) 을 생성 및 메모리에 적재

  5. 컴파일된(또는 메모리에 있는) 서블릿 클래스 파일이 클라이언트의 웹 브라우저로 응답

  6. 사용자 응답

정리 - 웹 브라우저 -> 웹 서버 -> JSP 컨테이너 -> .jsp ->.java ->*.class -> 웹 서버 -> 웹 브라우저

—————– 여기서부터는 개인적인 생각 —————–

어떻게 JSP를 다루어야 할까?

필자는 스트러츠, 스프링부터 기업 자체 프레임워크까지 많은 곳에서 JSP를 경험해봤다.

프레임워크를 설계할떄는 프로젝트의 목적에 따라 다르겠지만

모든 코드를 JSP안에 다 떄려 박았던 프로젝트가 있었다.

Java파일 하나 없이 JSP 파일 안에 DB조회를 위한 JAVA코드 , sql쿼리문 ,

HTML , Javascript , Jquery , CSS 등 지저분하기 짝이 없었다.

설계자는 서버를 중단없이 수정된 소스를 반영하기 위해서 이렇게 설계했다고 했지만

코드를 읽기 너무 힘들었었다.

그렇다면 어떻게 JSP를 다루어야 할까?

JSP에서 자바코드는 최대한 지양하자

JSP의 HTML , Javascript, CSS에다가 Java까지 잡다한 언어들 다 들어가고

<% for( …..) %> , <% if …..%> , <%=userName%>와 같은 표현식과 Java코드 는

  • 유지보수의 어려움
  • 낮은 가독성
  • 뷰와 비즈니스로직의 분리가 어려움

의 문제가 있었다.

그러니 JSP안에 비지니스 로직이 포함된 자바 코드는 최대한 지양하자.

JSP는 HTML , Javascript의 디자인적인 부분만 작성하자.

라는것에 필자의 의견이다.

Java코드의 대체재 - JSTL

기존의 <% for( …..) %> , <% if …..%> , <%=userName%>와 같은 표현식과 Java코드 대신

JSTL을 사용하자

JSTL (JavaServer Pages Standard Tag Library)

자바서버 페이지 표준 태그 라이브러리 약칭 JSTL은 HTML코드 내의

Java 코드인 <%=userName> , <%for(int i=0…….%>을 대체하여 사용된다.

JSTL 태그

태그명설명
변수명에 값을 할당
값을 출력
조건식에 해당하는 블럭과 사용될 scope설정
다른 언어의 switch와 비슷
switch문의 case에 해당
switch문의 default에 해당
다른언어의 loop문 items 속성에 배열을 할당할 수 있음

jstl의 자세한 표스팅은 추후 진행하겠습니다.

정리

HTML내의 Java코드를 적기 위한 것이 JSP이지만

낮은 가독성과 , 유지보수 및 뷰,비즈니스로직의 분리의 어려움 등으로

JSP의 Java코드는 지양하자.




© 2017. by isme2n