JSP가 빠른 이유는 뭔가요?

morning의 이미지

전 혼자서 뚝딱뚝딱 일하고 있는 원맨 컴퍼니 사장 겸 백수입니다. ^^
주로 Perl, PHP, Python 같은 웹프로그램을 하며 지냈습니다.
요즘 제법 대형 사이트를 기획하고 있으며 런칭할 시점이 얼마남지 않아
시스템적으로 이래저래 준비하고 고민할 것이 많습니다.
그러다 웹언어에 대해서도 고민 하게 되었습니다.

대형 사이트라면 왠지 JSP가 가장 좋다는 인식을 저도 알게 모르게 가지고 있습니다.
하지만 혼자서 아무리 곰곰히 생각해봐도 JSP 자체가 빠를 이유는 없거든요.

저의 깊지 못한 지식으로는
자바라면 한 단계 더 가상화된 구조에서 동작하며,
더군다나 언어 자체도 클래스 같은 객체화된 것을 많이 사용하기 때문에
언어상으로는 빠를 것이 없다고 생각이 되거든요. 오히려 느리고 불안하겠죠.
결국 JSP가 빠른 것은 결국 캐싱에 의한 것이 아닌가라는 생각이 들어서요.

JSP가 웹프로그램으로써 전망이나 장단점 같은 것은 논외로 하구요
단기 기술적으로 왜 빠르다는 이야기가 나오는지 궁금합니다.
(영업측면에서만 나온 이야기가 아니겠죠 ^^)

impactbar의 이미지

컴팔해서 그런거 아닌까요...

jsp 파일은 돌려 보면 class로 변해 있습니다... ^^;

hados의 이미지

웹 브라우저로 JSP 페이지를 요청하면

JSP 페이지 코드는 서블릿 코드로 변환된 후

서블릿 코드가 class 파일로 변환되어 실행되게 됩니다

(물론 이 과정은 맨 처음 한 번만 일어나게 되고요,

한 번 class파일로 변환되면 그 이후로는 쭉 class 파일이 곧장

실행됩니다)

머....컴파일 되니 나름대로 빠를 수도 있다고 할 수도 있겠지만

질문에 대한 답은 아닌 듯 하구요...

머 특별히 JSP가 빠르다거나 그런 말은 들어본 적이 없습니다

(빠르지 않다는 것이 아니라 모르겠다는 뜻..-_-;;;;; )

대신 큰 규모의 웹사이트에서 JSP가 좋은 이유라면

MVC(Model, View, Controller) 때문이 아닌가 합니다

자체 JSP 태그 라이브러리를 구축해 놓을 경우(모..꼭 그렇지 않더라도)

웹디자이너 등 프로그래머 아닌 사람들이 View 측면에서 JSP를 이용하면

웹 페이지를 구성하기 쉬워지거든요(책의 내용...-_-;; )

프로그래머들은 Controller 부분은 서블릿으로 구축하고

JSP custom tag 만들고...

그러면 분업 되고 Presentation layer, implementation layer 구분도

되고...

모..그래서가 아닐까요?

(헛소리만 했나......-_-;;;;; :shock: )

digitie의 이미지

JSP를 쓰는 이유는 빠르다는 것 보다 생산성(개발편의성, 재사용성)과, 스케일러블한 면 때문이 아닐까 하는 생각을 합니다.

showmethemoney

hurryon의 이미지

싸이트의 규모가 어떻게 되는지 모르겠지만 중소규모라면 PHP가 작업하기도
빠르고 속도도 더 빠를거 같군요. 순전히 개인적인 생각입니다.

JSP을 이용하는 이유는 분산네트웍 환경에 잘 적응을 하며 다른 개발 도구들이
많이 있기 때문이 아닌가요?

글쩍글쩍...으흠.

단순한 속도 비교는 무리 일거 같습니다. 트래픽이 많아 졌을때 JSP 가
퍼포먼스가 덜 떨어진다는 문서는 어디서 본듯하군요.

requiem의 이미지

jsp보다 cgi, php가 더 빠르겠죠.
직접 해보시면 아실텐데..
뭐.. 저도 체감상으로 느낀바를 말씀드리는거고
따로 테스트를 해본것은 아닙니다.

전 jsp 전문가는 아니지만 jsp로 작업을 한 적이 있습니다.
저로서는 php로 하는게 훨씬 편했고 작업기간도 줄어드니
회사로서도 이득이었죠.
하지만 제품의 단가를 올려야 했습니다. php로 하게되면
다른 경쟁사보다 단가를 터무니없이 더 올릴수가 없기 때문이었거든요.

단가를 왜 올려야 했냐면.. 저로서는 이해할수없었지만
개발을 의뢰한 쪽은 공공기관에 근무하는 공무원이었는데 그 사람이 말하길
예산이 책정되어 있기때문에 그 금액대로 작업을 해야한다고 했다네요.
그 이외에 굳이 jsp로 작업을 한 적은 몇번 없었습니다.

흠..
전 웹프로그래밍 전문가는 아니라서 잘 모르지만
제가 jsp나 servlet을 쓰고싶은 이유가 있다면 단 한가지 있긴합니다.
바로 JDBC 때문이죠.

urstory의 이미지

JSP를 사용하는 이유는, 일단 JSP는 내부적으로 자바기술이

사용되기 때문에 자바의 수많은 API를 이용할 수 있기 때문이빈다.

그리고 보통 큰 프로젝트는 JSP와 함께 Servlet이 함께 사용되어

지는데. JSP와 서블릿은 작은 단위의 프로젝트에서도 사용될 수

있지만 J2EE의 보여지는쪽(프리젠테이션)을 담당하기 때문입니다.

즉 JSP는 작은 규모부터, 큰 규모의 프로젝트에서 사용될 수

있다는 장점이 있습니다.

---

JSP가 빠른 이유는, 일단 jsp를 실행하게 되면 Servlet소스로
변환이 되고 Servlet소스는 다시 컴파일 되어 서블릿 class가
만들어 지게 됩니다.

해당 서블릿은 처음 실행되었을 때 메모리에 올라가게 되면,
두번째부터는 이미 메모리에 올라가있는 서블릿이 쓰레드 방식으로
동작하게 됩니다. 즉, 메번 실행될때마다 메모리에 로딩
되는 것이 아니라 두번째 부터는 이미 메모리에 있는
서블릿이 실행되기 때문에 상당히 반응 속도가 빨라지게 되는 것입니다.

(이러한 장점은 Jsp, Servlet에게만 있는 것은 아니지만 말입니다. :-)
즉 다른 언어도 이와 비슷한 방식이나 같은 방식으로 빠를 수가
있겠지요. )

그리고, jsp나 서블릿은 같은 JVM상에서 동작하기 때문에. 여러가지
부가적인 처리를 할 수도 있습니다. 이러한 것이 jsp와 서블릿의
장점이 될 것입니다.

----------
http://sunny.sarang.net
JAVA,Oracle,MySQL,Linux,PHP

서지훈의 이미지

앞의 JSP가 구동되는 방법은 다들 말씀을 해주신걸 참고를 하시고...
보통의 JSP를 사용하는 곳은 속도 때문이 아니라...
보안 지원이 잘 되기 때문입니다.
그렇기 때문에 금융권과 몇몇 보안 사이트 들이 JSP(JAVA)를 선호를 하게됩니다.
그리고 속도를 원하신다면...
PHP 를 사용을 하시고...
여러가지 많은 응용프로그램과 지원을 원하시면...
ASP를 사용하는게 맞을거 같네요...
제가 해본 봐로는...

그러나 웹 사이트에서 뭐니뭐니 해도 중요한건 스크립트의 선택도 중요하지만...
전체 서비스 구성과 DB Query가 성능을 좌우합니다.
참고 하시길...

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

fender의 이미지

J2EE/Servlet/Jsp 기반을 선택하는 가장 큰 이유는 윗 분들이 말씀하신 대로 확장성 및 유연성, 다양한 라이브러리, 그리고 어플리케이션 서버와 써드파티 툴 지원을 들 수 있습니다. 문제는 국내의 경우 제대로 프레임워크를 적용해서 개발하는 경우가 거의 없이 주먹구구식이 많아 오히려 asp보다도 생산성이 안나오는 경우가 있다는 것입니다.

어떤 분이 php나 cgi가 jsp보다 빠르다고 하셨는데 이 부분은 좀 의심이 가는 부분입니다. 우선 cgi의 경우 raw speed는 jsp보다 빠를 수 있을지도 모르지만 리퀘스트 마다 프로세스를 할당하는 방식의 한계 상 많은 사용자가 접속했을 때 효율적으로 처리할 수 없습니다. php의 경우 일반적으로 인터프리트 방식으로 동작하기 때문에 컴파일 + JIT 환경에서 동작하는 jsp보다 속도가 느립니다.

하지만 웹어플리케이션의 속도는 단순하게 리퀘스트 하나에 얼마나 빨리 응답이 오는가로 측정할 수는 없기 때문에 이런식의 단순 성능비교는 무리가 있습니다.

정리하자면, 중대규모이거나 확장성, 혹은 다양한 라이브러리/툴지원을 원한다면 J2EE 기반을, 중소규모에서 빠른 생산성 및 적은 시스템 리소스 사용을 원한다면 php를, 그리고 IIS기반이고 MS관련 솔루션과 통합이 필요하다면 asp를 사용하는 것이 좋습니다. cgi는 특별히 장점으로 내세울 만한게 없는 것 같군요...

그럼...

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

서지훈의 이미지

Quote:
어떤 분이 php나 cgi가 jsp보다 빠르다고 하셨는데 이 부분은 좀 의심이 가는 부분입니다. 우선 cgi의 경우 raw speed는 jsp보다 빠를 수 있을지도 모르지만 리퀘스트 마다 프로세스를 할당하는 방식의 한계 상 많은 사용자가 접속했을 때 효율적으로 처리할 수 없습니다. php의 경우 일반적으로 인터프리트 방식으로 동작하기 때문에 컴파일 + JIT 환경에서 동작하는 jsp보다 속도가 느립니다

PHP 기본은 모르겠지만...
PHP를 컴파일 해서 사용을 하면은 일반 스크립트로 사용할 때 보다도...
옛날에 본 문서에는 10배 이상도 빠르다는 글을 본것 같네요...
이 내용들은 PHP 홈페이지를 확인을 해보시면은 될것 같네요...
그리고 JAVA는 .class 가 바로 시스템에 올라 가는게 아니라...
JRE 에 한 번 올라가서 파싱을 한다음에 올라 가는게 아닌지?
그렇다면... compiled PHP가 빠른건 당연 하겠죠...
compile 된데에다가... C로 되어 있으니...-_-ㅋ

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

fender의 이미지

jsp의 경우 최초 리퀘스트 시에 jsp->서블릿 java->class로 변환합니다. 실행시에는 JIT(Just-In-Time) 컴파일러 기술을 이용해서 네이티브한 코드로 변환하는 것은 물론 런타임 최적화를 하기 때문에 빠른 속도를 낼 수 있습니다.

컴파일된 php는 일반적으로 쓰이는 지는 모르겠습니다만 인터넷 검색 결과 jsp/asp 등과 비교한 신뢰할 만한 벤치마크 결과가 없어서 평가하기가 어렵네요.

서지훈 wrote:

PHP 기본은 모르겠지만...
PHP를 컴파일 해서 사용을 하면은 일반 스크립트로 사용할 때 보다도...
옛날에 본 문서에는 10배 이상도 빠르다는 글을 본것 같네요...
이 내용들은 PHP 홈페이지를 확인을 해보시면은 될것 같네요...
그리고 JAVA는 .class 가 바로 시스템에 올라 가는게 아니라...
JRE 에 한 번 올라가서 파싱을 한다음에 올라 가는게 아닌지?
그렇다면... compiled PHP가 빠른건 당연 하겠죠...
compile 된데에다가... C로 되어 있으니...-_-ㅋ

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

----------------------------
[서명] 그놈 한국 사용자 모임 - 그놈에 대한 모든 것! - 게시판, IRC, 위키, 갤러리 등등...

requiem의 이미지

애기가 다른쪽으로 번지는것 같은데 cgi로만 할수밖에 없는것들도 있습니다.
거의 대부분 DB의 내용을 웹에 출력하고 결과를 저장하는 정도로
사용하시겠지만 웹을 통해 하드웨어 or 시스템을 제어하려고 하는 경우,
웹을 통해 들어오는 동시다발적 요청을 빠르게 처리 해야하는 경우중
DBMS가 아닌 파일시스템 기반의 DB를 사용하면서 대용량의 데이터 처리가
필요할때.. 기타 시스템 콜 or 웹서버의 API를 호출하여 보다 저수준의 컨트롤이
가능합니다. 비슷한 예로 데이터베이스가 지원하는 저수준의 API를 사용해야
하는 경우도 있고 하여튼 cgi 방식을 택하는경우가 적지 않습니다.

이건 좀 어떻게 들으실지 모르겠지만.. 성능상에 문제가 있을 것 같다면
(아직 제 주위에선 경험한적 없었지만) 네트웍 회선 or 구성을 변경해야
할것이고 서버의 하드웨어 사양을 높이는게 나을듯 하네요.
비용이 정말 문제라면 아직 써본적은 없지만 fastcgi를 통해
소프트웨어적으로 어느정도 개선될수있다고는 봅니다.

서지훈의 이미지

Quote:
컴파일된 php는 일반적으로 쓰이는 지는 모르겠습니다만 인터넷 검색 결과 jsp/asp 등과 비교한 신뢰할 만한 벤치마크 결과가 없어서 평가하기가 어렵네요.

compiled PHP의 경우엔 따로 tool이 필요한데...
이건 free가 아니라...
유료로 사야 합니다.
이걸 이용하게 되면...
속도와 함께... 컴파일이 되어서 나오기 때문에 code security에도 많은 도움이 됩니다.

<어떠한 역경에도 굴하지 않는 '하양 지훈'>

#include <com.h> <C2H5OH.h> <woman.h>
do { if (com) hacking(); if (money) drinking(); if (women) loving(); } while (1);

smalljam의 이미지

요청받은 클래스를 한번 컴파일한후에,
엔진의 종류에 따라서 차이가 약간있기는 하지만,
해당 클래스를 엔진이 메모리 갖고 있기때문이라고 알고있습니다.
레신은 자동으로 클래스의 버젼을 관리해주고,톰캣,제런은 클래스 변동이
있을때 리로드해주어하구요.

즐거운 하루되세요;

In the UNIX,
화일 시스템은 지평적인 공간 감각을 제공하며 ,
프로세스는 생명을 갖는 생명체와 같아보인다.
--BACH

댓글 달기

Filtered HTML

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

BBCode

  • 텍스트에 BBCode 태그를 사용할 수 있습니다. URL은 자동으로 링크 됩니다.
  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param>
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.

Textile

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • You can use Textile markup to format text.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Markdown

  • 다음 태그를 이용하여 소스 코드 구문 강조를 할 수 있습니다: <code>, <blockcode>, <apache>, <applescript>, <autoconf>, <awk>, <bash>, <c>, <cpp>, <css>, <diff>, <drupal5>, <drupal6>, <gdb>, <html>, <html5>, <java>, <javascript>, <ldif>, <lua>, <make>, <mysql>, <perl>, <perl6>, <php>, <pgsql>, <proftpd>, <python>, <reg>, <spec>, <ruby>. 지원하는 태그 형식: <foo>, [foo].
  • Quick Tips:
    • Two or more spaces at a line's end = Line break
    • Double returns = Paragraph
    • *Single asterisks* or _single underscores_ = Emphasis
    • **Double** or __double__ = Strong
    • This is [a link](http://the.link.example.com "The optional title text")
    For complete details on the Markdown syntax, see the Markdown documentation and Markdown Extra documentation for tables, footnotes, and more.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 사용할 수 있는 HTML 태그: <p><div><span><br><a><em><strong><del><ins><b><i><u><s><pre><code><cite><blockquote><ul><ol><li><dl><dt><dd><table><tr><td><th><thead><tbody><h1><h2><h3><h4><h5><h6><img><embed><object><param><hr>

Plain text

  • HTML 태그를 사용할 수 없습니다.
  • web 주소와/이메일 주소를 클릭할 수 있는 링크로 자동으로 바꿉니다.
  • 줄과 단락은 자동으로 분리됩니다.
댓글 첨부 파일
이 댓글에 이미지나 파일을 업로드 합니다.
파일 크기는 8 MB보다 작아야 합니다.
허용할 파일 형식: txt pdf doc xls gif jpg jpeg mp3 png rar zip.
CAPTCHA
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.