OKKY와 이런글이 올라왔었다.
java와 JSP 컴파일 시점 차이좀 알 수 있을까요?
어떤분께서 JSP는 인터프리터라서 컴파일이 필요 없습니다. 라고 답변을 달아주셨다.
JSP는 언어도 아니고 인터프리터터도 아닌거같은데…
아니라고 반박하려면 나 먼저 알아야 하기 떄문에 한번 JSP란 무엇인지 정리해보자
# JSP(Java Server Page)
Java Server Page의 약자로
HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성준다.
JSP가 실행되면 자바 서블릿으로 변환된 후 실행되므로 서블릿과 거의 유사하다고 볼 수 있다.
그러나 서블릿과 달리 HTML 표준에 따라 작성되므로 웹 디자인하기에 편리하다.
# 자바 서블릿(Java Servlet)
그렇다면 자바 서블릿은 뭘까?
자바 서블릿은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램이다.
# JSP , Java Servlet 의 차이
결과적으로 역할은 같지만 아래의 차이가 있다.
JSP : HTML 문서 안에 Java 코드를 포함
서블릿 : 자바 코드 안에 HTML을 포함
# JSP 동작원리
- 웹브라우저에서 JSP페이지를 웹 서버에게 요청
- 웹 서버는 JSP에 대한 요청을 JSP 컨테이너에 넘김 (요청이 처음이 아닐경우 메모리에 적재되어 있는 클래스 파일을 실행 - 5번으로 이동 )
- JSP 컨테이너는 해당 JSP를 찾아서 서블릿 파일(.java)을 새롭게 생성
- 서블릿 파일은 컴파일되어 서블릿 클래스 파일(.class) 을 생성 및 메모리에 적재
- 컴파일된(또는 메모리에 있는) 서블릿 클래스 파일이 클라이언트의 웹 브라우저로 응답
- 사용자 응답
정리 - 웹 브라우저 -> 웹 서버 -> JSP 컨테이너 -> .jsp ->.java ->*.class -> 웹 서버 -> 웹 브라우저
—————– 여기서부터는 개인적인 생각 —————–
# 어떻게 JSP를 다루어야 할까?
필자는 스트러츠, 스프링부터 기업 자체 프레임워크까지 많은 곳에서 JSP를 경험해봤다.
프레임워크를 설계할때는 프로젝트의 목적에 따라 다르겠지만
모든 코드를 JSP안에 다 떄려 박았던 프로젝트가 있었다.
Java파일 하나 없이 JSP 파일 안에 DB조회를 위한 JAVA코드 , sql쿼리문 ,
HTML , Javascript , Jquery , CSS 등 지저분하기 짝이 없었다.
설계자는 서버를 중단없이 수정된 소스를 반영하기 위해서 이렇게 설계했다고 했지만
코드를 읽기 너무 힘들었었다. 그렇다면 어떻게 JSP를 다루어야 할까?
1. JSP에서 자바코드는 최대한 지양하자
JSP의 HTML , Javascript, CSS에다가 Java까지 잡다한 언어들 다 들어가고
<% for( …..) %> , <% if …..%> , <%=userName%>와 같은 표현식과 Java코드 는
- 유지보수의 어려움
- 낮은 가독성
- 뷰와 비즈니스로직의 분리가 어려움
의 문제가 있었다.
그러니 JSP안에 비지니스 로직이 포함된 자바 코드는 최대한 지양하자.
JSP는 HTML , Javascript의 디자인적인 부분만 작성하자.
라는것에 필자의 의견이다.
2 . Java코드의 대체재 - JSTL
기존의 <% for( …..) %> , <% if …..%> , <%=userName%>와 같은 표현식과 Java코드 대신 JSTL을 사용하자
JSTL (JavaServer Pages Standard Tag Library)
자바서버 페이지 표준 태그 라이브러리 약칭 JSTL은
HTML코드 내의 Java 코드인 <%=userName> , <%for(int i=0…….%>을 대체하여 사용된다.
# 정리
HTML내의 Java코드를 적기 위한 것이 JSP이지만
낮은 가독성과 , 유지보수 및 뷰,비즈니스로직의 분리의 어려움 등으로
JSP의 Java코드는 지양하자.
'Dev > Java' 카테고리의 다른 글
JNDI, JDBC, DBCP (0) | 2022.10.03 |
---|---|
Java 컴파일 (1) | 2022.10.03 |
JDK vs JRE (0) | 2022.10.03 |
Int VS Integer (0) | 2022.03.30 |
Mac에서 JDK설치 및 환경변수 (0) | 2021.07.03 |