2015. 5. 24. 10:13 프로그래밍/Java
서블릿(servelet)과 JSP
출처: http://nine01223.blog.me/220346376135
자바 서블릿(Java Servlet)은 자바를 사용하여 웹페이지를 동적으로 생성하는 서버측 프로그램 혹은 그 사양을 말하며, 흔히 "서블릿"이라 불린다. 자바 서블릿은 웹 서버의 성능을 향상하기 위해 사용되는 자바 클래스의 일종이다. 서블릿은 JSP와 비슷한 점이 있지만, JSP가 HTML 문서 안에 Java 코드를 포함하고 있는 반면, 서블릿은 자바 코드 안에 HTML을 포함하고 있다는 차이점이 있다.
자바 서블릿은 자바 EE 사양의 일부분으로, 주로 이 기능을 이용하여 쇼핑몰이나 온라인 뱅킹 등의 다양한 웹 시스템이 구현되고 있다.
비슷한 기술로는 펄 등을 이용한 CGI, PHP를 아파치 웹 서버 프로세스에서 동작하게 하는 mod_php, 마이크로소프트사의 IIS에서 동작하는 ASP 등이 있다. CGI는 요청이 있을 때마다 새로운 프로세스가 생성되어 응답하는 데 비해, 자바 서블릿은 외부 요청마다 프로세스보다 가벼운 스레드로써 응답하므로 보다 가볍다. 또한, 자바 서블릿은 자바로 구현되므로 다양한 플랫폼에서 동작한다.
서버에서 실행되는 작은 프로그램으로서 웹 페이지와 함께 별도의 파일로 보내지는 작은 프로그램인 자바 애플릿의 맥락에서 만들어진 신조어이다
[네이버 지식백과] 서블릿 [servlet] (NEW 경제용어사전, 2006.4.7, 미래와경영)
서블릿이란 쉽게 말해서 자바 코드를 HTML로 변환해주는 기술을 의미합니다.
자바로 코딩을 한 소스를 서블릿 컨테이너(톰캣)에서 돌리기만 하면 HTML로 자동으로 변환이 되어 사용자 눈에 보여집니다.(서블릿 컨테이너를 그냥 번역기라고 생각하시면 됩니다!)
극단적인(?) 예를 들어서 1부터 1000까지 숫자를 주루룩 출력하는 HTML를 만든다고 가정합시다.
자바에서는 for문(반복문)을 돌려서 1000줄을 'out.println(i)'을 써서 출력해버리면 끝인데(소스 3줄이면 됩니다), HTML로 짜려면 1000줄을 일일이 직접 타이핑을 해야만 합니다.
왜냐하면 HTML은 '정적 소스'이기 때문입니다.(쉽게 생각해서 txt 파일이랑 비슷합니다. 내부에 프로그래밍 로직을 포함시킬 수 없습니다. 물론 자바스크립트를 살짝 가미하면 HTML도 '동적 소스'가 될 수 있지만 기본적으로 HTML은 '정적 소스'라고 할 수 있습니다! 그냥 txt 파일과 똑같습니다.)
자바가 제공하는 for문을 이용해서 HTML을 출력하도록 프로그래밍을 하면 엄청난 수고를 덜 수 있습니다!(2시간 노동이 3분으로 줄어듬)
그런데 for문과 같은 반복문은 php나 자바스크립트에서도 똑같이 제공하고 있기 때문에 자바의 특장점은 아니라고 할 수 있습니다.
서블릿이 위대한 이유는 전세계에서 가장 인기가 있고 빵빵한(?) 지원을 받는 강력한 언어인 자바의 모듈(컴포넌트)을 사용해서 웹페이지를 개발할 수 있기 때문입니다!(자바로 짜여진 전세계의 수많은 라이브러리를 활용해서 웹을 개발할 수 있습니다! 트랜잭션 처리, 데이터소스 활용 등 자바 컴포넌트의 범위는 무궁무진합니다.)
그런데 서블릿은 문법이 조금 어렵다는 단점이 있습니다.
'service()', 'doPost()', 'doGet()'과 같이 복잡한 메소드를 구현해야하고, 'out.println("<p>Hello</p>")'와 같이 조금 지저분한 코드를 일일이 작성해야만 하는 번거로움이 있습니다.
그래서 도입이 된 것이 바로 jsp(Java Server Page)입니다.(귀찮은 서블릿 문법 따위는 신경을 쓰지 않고 그냥 HTML 소스 안에 '<%', '%>' 문자만 집어넣고 바로 자바 코드를 쓰면 됩니다! 대단히 직관적입니다.)
개발자가 jsp를 만들어서 실행하면 톰캣이 알아서 서블릿으로 변환을 시켜줍니다.(그리고 서블릿은 다시 HTML로 변환됩니다! 'jsp -> 서블릿 -> HTML'의 3단계 구조이네요.)
'jsp -> 서블릿 -> HTML'과 같은 변환 과정이 가능한 이유는 바로 톰캣, WebSphere와 같은 서블릿 컨테이너 덕분입니다!(서블릿 컨테이너와 WAS는 동일한 개념이라고 보셔도 무방합니다. 정말 서블릿 컨테이너는 훌륭한 번역기라고 할 수 있습니다!)