상세 컨텐츠

본문 제목

Servlet과 JSP, 그리고 동적인 웹 페이지

IT/프로그래밍

by James Lee. 2015. 12. 1. 12:44

본문

인터넷이 발명된 초기에는 HTML이 주류였다.

따라서 대부분의 컨텐츠는 정적으로 이루어졌다.

하지만 인터넷의 발전과 상업적 필요성에 따라 서로 정보를 주고받는 정적인 컨텐츠들이 필요해졌다.

그래서 사용자들이 요청을 하면 서버에서 동적인 페이지를 만들어서(Servlet에서 html문서를 만든것처럼) 사용자에게 배포해줄 수 있도록 발전되었다.

이것이 위에서 설명한 Servlet이다.

하지만 이 Servlet이 나오고도 몇가지 불편한 점들이 있었다.

  1. Java의 출력문으로 Html문서를 만들므로 가독성이 부족했고 디버깅이 어려웠다.
  2. Java 코드와 Html 코드가 뒤섞여 있었다.

Java코드와 Html코드가 섞여있으면 어떤 불편함이 있었을까?

프로그램은 계속 변화한다는것은 지금까지 경험으로 잘 알고 있을것이다. 

과거에도 프로그램은 변화해왔었다. 그런데 이 변화에는 축이 있었다.

가끔 변하는 축, 자주 변하는 축

Java와 Html로 이루어진 Servlet은 Java가 자주 변할까, Html이 자주 변할까?

난 Java가 자주 변할 것이라고 생각했지만 Html이 자주 변한다고 한다.

그 이유는 사용자의 요구사항이 주로 UI의 변환에 있었기 때문이다. (내가 이해한 바로는 UI를 변경하는 경우가 자바 내부 로직을 바꾸는 경우보다 많았다는 것 같다.)

버튼의 위치를 1mm만 옮긴다고 하더라도 

(파일 수정 - 서버에 업로드 - 서버가 배포)라는 과정을 거쳤기에 비용이 많이 들었다.

더 심각한 문제는 Html을 수정하다가 Java에 들어가있는 로직을 실수로 건드린다면? 프로그램이 동작하지 않게 될 수도 있었다.

JSP의 등장

JSP는 Html내부에 Java코드를 삽입하는 형태이다.

그리고 우리 눈에는 보이지 않지만 이러한 소스를 JSP 엔진이 JavaServlet문서로 변환시켜준다.

JSP는 가독성이 좋고, 어느 부분이 Html인지, 어느 부분이 Java인지 구별이 잘 되어 있다.

그래서 UI수정을 원할 때, Html부분이 Java와 결합성이 낮은 부분은 그냥 Html부분만 수정해줄수 있었다.

JSP의 4가지 표현

  1. <% @ %> : 선언부, 여러가지 기본 설정이 설정되어 있다. JSP엔진이 이 부분을 인식하고 JavaServlet으로 변환한다.
  2. <%! %> : 메소드를 정의한다.
  3. <%%> : Java의 코드를 작성할 수 있다.
  4. <%= %> : 출력부, 해당 출력부에 존재하는 값을 출력한다.

out.print와 <%= %>출력부의 차이점

<%=%>는 주로 String 변수에 연산을 저장해놓고 출력할때 사용하는데 String연산은 내부적으로 비용을 많이 소모한다.

그래서 그냥 <%%>에서 계산과 동시에 out.print로 출력하는것이 비용을 절감할 수 있어 더 효율적인 경우도 있다.

JSP의 요약식 $

하지만 이렇게 JSP로 분할해도 여전히 Java코드가 존재하기 때문에 Java코드를 건드릴 수 있는 여지가 많이 남아있다.

그래서 요즘에는 ${attribute}와 같이 JSP에서 지원해주는 요약식들이 생겼다.

이런 요약식을 사용하면 얻을 수 있는 장점은 아래와 같다.

request.setAttribute("attribute","testAttribute"); // atrribute라는 속성에 testAttribute라는 값을 넣어줌

이 문장은 원래 <%= request.getAttribute("attribute") %> 이런 형태로 출력을 해야 한다.

하지만 요약식을 사용하면 ${attribute} 이렇게 간단하게 출력할 수 있다.

즉, Java에 관련된 소스가 점점 숨겨지고 있다.

따라서 Java를 수정하지 않고 유지보수가 점점 더 쉽게 되어가고 있다.


한동안 이러한 방식으로 서버가 배포하는 방식이 유지되었다가

최근에는 JavaScript와 같은 클라이언트 측에서 실행되는 언어들도 나오고 있다.

그래서 JavaScript를 위한 단위 테스트 툴들도 나오고 있는 중이라고 한다.


 

'IT > 프로그래밍' 카테고리의 다른 글

BBD란 무엇인가  (0) 2015.12.01
[Linux] 리눅스 기초 명령어  (0) 2015.12.01
BDD와 TDD의 차이  (0) 2015.12.01
[Cucumber] Cucumber 단계 정의  (0) 2015.12.01
[머신러닝] 머신러닝이란?  (0) 2015.12.01

관련글 더보기

댓글 영역