JSP & 서블릿에 대해 간단히 알아보기

시작하기 앞서

자바 기반 시스템 중 WAS에서 병목 현상이 일어날 수 있는 부분을 나누려고 하면, UI 부분과 비즈니스 로직 부분으로 나눌 수 있다. UI 부분은 서버에서 수행되는 UI를 의미한다. 자바 기반의 서버단 UI를 구성하는 기술에는 대표적으로 JSP와 서블릿이 있다. EJB라는 것도 있지만, 이 글에서 다룰 것은 JSP와 서블릿이다.
현재 JSP와 서블릿이 익숙하지도 않고, 앞으로 사용할 가능성이 있지는 않지만, 그래도 뭔지는 알아놔야 할 것 같아서 정리하고자 한다. 깊게는 하지 않더라도 간단한 동작 원리와 어떤 점에서 주의해야 할지 알아보자.

JSP(Java Server Pages)

JSP는 HTML내에 자바 코드를 삽입하여 웹 서버에서 동적으로 웹 페이지를 생성한다. 생성된 페이지는 웹 브라우저에 돌려주는데 이를 서버 사이드 스크립트 언어라고 한다. 실행시 자바 서블릿으로 변환하고 실행하는데 이는 서블릿과 거의 유사하다.
가장 처음에 호출되는 경우에만 시간이 소요되고, 이후로는 컴파일된 서블릿 클래스가 수행되어서 처리하는 부분에서 소요되는 시간은 많지 않다.

어떻게 동작할까? (라이프 사이클)

1.
JSP URL 호출
2.
페이지 번역
3.
JSP 페이지 컴파일
4.
클래스 로드
5.
인스턴스 생성
6.
jspInit 메서드 호출
7.
_jspService 메서드 호출
8.
jspDestory 메서드 호출

어떤 문제점이 있을까?

include 기능

JSP에서 다른 JSP를 호출하여 혼합해서 하나의 JSP로 만들 수 있다.
정적인 방식과 동적인 방식 두 가지가 존재한다.
정적인 방식 : JSP 라이프 사이클 중에 2번, 3번에 해당하는 단계에서 필요한 JSP를 읽어 포함하는 방식
동적인 방식 : 페이지가 호출될 때마다 지정된 페이지를 불러들이는 방식
동적인 방식이 정적인 방식보다 느릴 수 밖에 없다. 약 30배 더 느리게 나타난다. 성능을 향상시키려면 정적인 방식을 사용해야 한다. 그러나 정적인 방식은 메인 JSP 추가 되는 JSP가 생기는데 동일한 이름의 변수가 있으면 오류가 발생할 수 있다. 따라서 상황에 맞는 include 방식을 선택하자.

태그 라이브러리

JSP에서 공통적으로 반복되는 코드를 클래스로 만든 다음에 HTML 태그와 같이 정의된 태그로 사용할 수 있는 라이브러리이다.
XML 기반의 tld 파일과 태그 클래스로 구성되어 있다.
태그 라이브러리 클래스를 잘못 작성하거나, 태그 라이브러리 클래스로 전송되는 데이터가 많을 때 성능에 문제가 있을 수 있다. 넘겨주는 데이터 형태는 대부분 문자열 타입인데 데이터가 많으면 많을수록 처리해야 하는 부분이 많아지기 때문에 이에 따라 처리되는 시간이 많아질 수밖에 없다. 대용량 데이터를 처리할 경우에는 태그 라이브러리는 권장하지 않는다.

서블릿(Servlet)

자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성한다. 흔히 서블릿이라고 말하며 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다.

서블릿과 JSP는 무슨 차이가 있을까?

JSP는 HTML 문서 안에 Java 코드를 포함하고 있다.
서블릿은 자바 코드 안에 HTML을 포함하고 있다.

어떻게 동작할까? (라이프 사이클)

1.
WAS의 JVM이 시작
2.
Servlet 객체가 자동으로 생성되고 초기화 되거나, 사용자가 해당 Servlet을 처음으로 호출했을 때 생성되고 초기화 된다.
3.
'사용 가능'한 상태로 대기한다.
4.
예외가 발생하면 '사용 불가능' 상태로 변환되기도 한다.
5.
서블릿이 더 이상 필요없으면 '파기' 상태로 변경되고 JVM에서 '제거'된다.

어떤 특징이 있을까?

JVM에서 여러 객체로 생성되지 않는다.
WAS가 시작되고 '사용 가능' 상태인 대부분의 서블릿은 JVM에 살아있다. 따라서 여러 스레드에서 해당 서블릿의 service() 메서드를 호출하여 공유한다.

어떤 문제점이 있을까?

서블릿 클래스 내에 멤버 변수를 선언해서 service() 메서드를 호출하면 여러 스레드로 인해 동기화에 대한 문제가 생길 수 있다. 여러 스레드가 공유하기 때문에 성능상 이점이 있을 수 있지만 동기화에 대한 문제점을 고려해야 한다.

참고 자료

TOP