JSP 도대체 얼마나 느린겁니까?

vj1974의 이미지

PHP/ASP.NET/JSP 등등... 중에서..

이중 ASP.NET외에는 배운게 없습니다.--; 지금 한참 자바를 배우는중인지라... 몇가지 검색해보면

JSP는 보안이 강하지만 상당히 느리다. 라는 글귀가 많더군요.
그리고 개발시간도 상당히 오래걸리지만.... 제작이 끝나면 유지보수가 쉽다는 표현도 있던데 .. 요즘도 그렇게 차이가 나는지요?

또 JSP도 무료로 개발하고 배포하고 자유롭게 할수 있다고 알고 있습니다.만..... 오픈소스관련 어플이나 자료를 뒤져보면 PHP가 압도적이더군요-_-... 다들 보안이나 안정성은 관심이 없는걸까요?
(PHPBB나 제로보드 만 보더라도 자주 뚫리는걸 볼수 있더군요--)

정태영의 이미지

vj1974 wrote:
(PHPBB나 제로보드 만 보더라도 자주 뚫리는걸 볼수 있더군요--)

php 에서 register_globals 로 인한 문제점도 있었지만... register_globals 를 off 로 해놓곤 전혀 돌아주지 않는 제로보드도 한 몫하고 있죠 -_-;;;;;

오랫동안 꿈을 그리는 사람은 그 꿈을 닮아간다...

http://mytears.org ~(~_~)~
나 한줄기 바람처럼..

익명 사용자의 이미지

꼭 JSP라고 PHP보다 보안에 강할까요?

그건 아니라고 봅니다. 구조적으로 JSP가 PHP보다 안정적인 설계를 유도 하도록 되어 있지만,

대부분의 보안버그는 개발자의 실수로 인해서 발생됩니다.

따라서 JSP라고 무조건적으로 보안에 강한것은 아닙니다.

단지 오버플로우 같은 공격에 강한 측면은 있겠군요.

또한 아시다시피 예전에는 어느면에서는 PHP보다 느린 측면도 있습니다만, 지금은 대부분 사실이 아닙니다.

서버의 성능이 나날이 발전하고 있고, 각 웹 스크립트 언어들이 발전할때로 발전해서 어느 언어를 선택하는지는 문제가 아닙니다.;;;

유지 보수의 측면에서도 꼭 강한것은 아닙니다.
이것도 개발자의 역량에 따라 달린것이겠죠. (하지만 자바쪽이 좀더 체계적인 개발을 유도하도록 설계된것은 사실이라고 생각합니다.)
또한 JSP로 개발할경우는 개발기간이 많이 걸리기도 하구요.

오픈소스로 만들어진 JSP 프로그램같은 경우는... 사실 일반인에게는 쓰일 필요가 거의 없습니다.
왜냐하면, SDK라이선스 때문에 대부분의 리눅스 서버는 JRE를 포함하고 있지 않으며, 톰켓이 기본적으로 깔리지도 않습니다.
반면에 PHP나 ASP는 기본으로 깔리는 서비스죠.
거의 같은 기능을 가진 오픈소스 소프트웨어라면 꼭 자바로 개발해야 할 필요가 없다고 봅니다. 자바를 대신할 언어는 많이 있죠. 파이썬 이라던가.. 루비라던가...

jk군의 이미지

보안에 관련된 의견의 윗분의 내용과 비슷합니다.
대부분 보안 문제는 프로그래머의 사소한 실수에서 비롯되는것이고 이것은 어떤 언어이든 마찬가지입니다. 하지만 JAVA 언어 같은경우에는 기본적으로 언어자체가 보안을 염두에 두고 설계가 되었고 런타임 자체가 '관리'가되고 있는 언어이기 때문에 프로그래머가 덜 신경을 써도 치명적인 오류는 발생할 가능성이 적죠. 위에서 말씀하신듯이 자바에서 버퍼오버플로우를 일으키기는 쉽기않죠. 단적인 예로, 기본적인 배열 마저도 자동적으로 index체크를 다 해주지 않습니까...
반면 C같은 경우는 런타임이 '관리되지 않는'(프로세스 관리 얘기가 아닌건 아시죠?) 언어이기때문에 프로그래머 나름대로 갖가지 술수를 쉽게 부릴순 있지만 그만큼 실수를 할 구멍이 많아질것 같네요.
결국은 보안문제는.. 윗분은 프로그래머의 역량 차이라고 하셨지만, 제가 생각하기로는 성의의 차이라고 생각 되네요. 조엘의 블로그에서는 심지어 버퍼오버플로우 같은경우는 무조건 모조리 프로그래머의 책임이며, 변명할 여지조차 없는 무책임한 코드가 원인이라고... 까지 써놨더군요. ^^

그리고, 속도 문제에 관해서라면 이전 마소지 에서 봤는데 J2EE 와 ASP.NET 에서 같은 코드로 연산속도를 수행했는 비교치를 봤는데, JSP가 3배정도 느렸던것 같네요. 수치는 대략 .NET 쪽이 2.5 J2EE 쪽이 7.대가 나왔던것 같네요. 인상깊었던건, .NET이 C로 컴파일한 native code와 대등한 퍼포먼스가 나온다는 것이었는데... .NET 프레임워크 자체가 윈도버전 밖에 없으니 그정도 최적화는 수긍할 수 있는 수준입니다만...
물론 단순 산술연산이라 절대적 비교 지표로는 문제가 있을것 같구요. 게다가 꽤 옛날에 본거라 이게 SUN JVM의 java1.3 지원 버전이었던것 같은데, 요즘은 JVM 성능 자체가 워낙 좋아져서 잘 모르겠습니다.

뭐, 잡설이 길어졌습니다만. 짧은 지식에 그나마 아는 내용이 올라와 주절주절 거렸습니다.

j-k Flip-Flop이랑은 상관없음!!

fender의 이미지

일단 명확히 해야 할 것은 '자바 웹개발'이 JSP 스크립팅만을 의미하지 않는다는 점입니다. 자바건 PHP건 ASP.NET이건 간에 각각 장단점은 있습니다만, JSP를 PHP 쓰듯 스크립팅 해서는 자바 웹개발의 장점은 완전히 사라집니다.

상대적으로 자바의 경우 PHP나 ASP.NET에 비해 생산성이 떨어지고 진입장벽이 높은 건 사실입니다. 그렇지만 진입장벽이 높다는 건 그 만큼 웹개발의 여러 분야에 사용할 수 있는 프레임워크나 라이브러리가 매우 다양하다는 뜻이고 어느 정도 설계 및 구현에 있어서 검증된 패턴이 존재한다고 해석할 수 있습니다.

쉽게 비교하면 웹개발을 할 때, 자바 진영의 경우 매우 다양한 접근방법과 라이브러리, 프레임워크가 산재해 있는 반면, ASP.NET의 경우 MS가 권장하는 한 가지 최적의 개발 방식이 있으며, PHP의 경우 일반적으로 어떤 복잡한 설계나 프레임워크의 사용 보다는 'quick & dirty'의 빠른 생산성을 지향하는 특징이 있습니다. 개인적인 생각으로 자바의 경우 나머지 두 경우와 비교했을 때 제대로 하면 가장 신뢰성 있고 유지보수 가능한 설계가 가능하지만 반면 가장 잘못된 방향으로 가기도 쉽다고 봅니다.

PHP야 어차피 개발자 마음이고 ASP는 하라는 대로 하면 크게 엇나갈 것도 없는 반면 자바는 일단 프레임워크/라이브러리를 쓸데 안쓰거나 (대부분 SI가 그렇습니다), 안쓸 데 쓰거나, 아니면 프로젝트에 안맞는 걸 가져다 쓰거나, 혹은 개발자가 제대로 이해를 못하고 쓰는 경우도 많고 이 경우 여지없이 프로젝트가 산으로 갑니다.

참고로 MS가 스폰서한 벤치마크 자료나 연구 보고서는 액면 그대로 믿을 필요는 없습니다. MS는 이제까지 줄곧 외형상 MS와 관계 없는 독립기관이나 회사에 자금을 주고 자사 제품과 경쟁사 제품을 비교 분석하는 '객관적' 벤치마크나 보고서를 자주 발표했습니다.

오늘만 해도 수세 리눅스와 윈도우즈 2000의 관리 편이성과 TCO에 대한 보고서가 나왔는데, 요약하자면 '객관적'으로 테스트한 결과 리눅스에서 치명적인 보안 결함 10여개가 나올 동안 윈2000은 한 건도 발생하지 않았고 대략 리눅스가 4배나 더 많은 패치를 요구했으며 관리자가 윈도우즈에 비해 리눅스에 뺐기는 시간이 68% 가량 많았다고 합니다.

재밌는 건 일부러 기술지원도 있는 상용 리눅스를 구매했으면서 '일반적으로 개발자는 최신 버전의 컴포넌트를 쓰기 때문에' 배포판에서 지원하지 않는 버전의 mysql을 홈페이지에서 다운받아 설치하는 과정에서 glibc를 잘못 올려 시스템이 '복구 불가능하게' 망가졌다는 걸 강조 하더군요.

사족이 길었지만 어쨌든 JSP가 느리다거나 보안에 특별히 강하다거나 하는 건 특별히 고려할 사항은 안된다고 봅니다.

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

blueruin의 이미지

jk군 wrote:
그리고, 속도 문제에 관해서라면 이전 마소지 에서 봤는데 J2EE 와 ASP.NET 에서 같은 코드로 연산속도를 수행했는 비교치를 봤는데, JSP가 3배정도 느렸던것 같네요.

이런종류의 비교는 별 의미가 없다고 생각합니다.
마소에서는 .NET의 우월성을 강조하기 위해 .NET 에 최적화된 코드로 JAVA를 뭉개고, 또 얼마후엔 SUN에서 자바의 장점을 살려(물론 지금언급되는 속도포함해서) .NET 보다 한수위라고 보도하는것은 이미 오래전부터 만행하는 각 밴더들의 '홍보' 에서 크게 벗어나지 못합니다.

질문하신분은 자바의 서브릿등은 배제한 순수한 스크립트 언어의 퍼폰먼스에 대해서 물어보시는것 같은데 제 생각도 위에 다른분들처럼 개발자의 역량의 차이이지 언어차이를 퍼포먼스와 연관시키긴 어려운 부분같습니다.
이유는 스크립트 언어특성상 프로세스가 작은 묶음단위로 처리되는데 여기서 언어의 차이(What)를 논하기에는 어떻게 구현했는지(How)가 훨씬 많은 성능차이를 보입니다.

예로 들어 PHP 나 JSP 등과같은 스크립트 엔진에서 수만,수십만 이상의 루프연산을 할경우 PHP와 JSP는 어느정도 성능차이를 보입니다. 물론 C와같은 언어와 비교하면 수배에서 수십배이상 차이가 납니다.
하지만 실제로 스크립트 언어로 이정도의 반복을 처리할 일은 거의 없다고 봐도 됩니다.
차라리 약간의 성능을 올리고 싶다면 어떤 플랫폼으로 바꿔야 성능이 좋아질까보다는 어떻게 논리적으로 이런부분을 없앨까.. 라고 고민하는것이 실질적인 정답이될 가능성이 압도적으로 높습니다.

그리고 JSP가 보안이 좋고 유지보수가 좋다는것은 인정하지만 실무에서 이 장점을 살리는 경우는 별로 없었던거 같습니다.
언어차원에서 구조적이게 유도하고 완벽한 객체지향을 제공하지만 이것역시 잘못된 사용으로 역효과를 내는경우가 많습니다. (이부분은 객체지향에 대한 언급일수도 있겠네요)
또 PHP 의 경우 쉽게 배울수있다는 장점이 선무당을 많이 만들어 언어자체의 이미지에 안좋게 반영되는경우도 있을테고요.
주변에서 확장성을 위해 JSP(서블릿)을 택하고 오히려 유지보수때문에 골치섞는경우를 많이 봐왔습니다.
집앞에 있는 편의점 가는데는 차보다는 자전거가 빠르죠.

time to wait...

cocas의 이미지

vj1974 wrote:
PHP/ASP.NET/JSP 등등... 중에서..

또 JSP도 무료로 개발하고 배포하고 자유롭게 할수 있다고 알고 있습니다.만..... 오픈소스관련 어플이나 자료를 뒤져보면 PHP가 압도적이더군요-_-... 다들 보안이나 안정성은 관심이 없는걸까요?
(PHPBB나 제로보드 만 보더라도 자주 뚫리는걸 볼수 있더군요--)

그건 PHP로 개발/배포되는 웹 어플리케이션이 많아서 그렇습니다. JSP, ASP로 된 웹 어플리케이션이 배포되어 널리 쓰이지 않다보니 취약성 수가 적어보이는거죠. 보안이나 안정성에 관심이 없어서 그런건 아닙니다.

php는 언어 자체에서 '를 자동으로 escape 해 주기 때문에 적어도 SQL injection 에서는 꽤나 효과를 봅니다. 반면 다른 language에서는 그런 방법이 없거나 기본이 아니거나 널리 퍼진 설정이 아니라 '를 id, passwd 칸에 넣을 때 injection이 가능한 곳이 많습니다.

fender의 이미지

cocas wrote:
php는 언어 자체에서 '를 자동으로 escape 해 주기 때문에 적어도 SQL injection 에서는 꽤나 효과를 봅니다. 반면 다른 language에서는 그런 방법이 없거나 기본이 아니거나 널리 퍼진 설정이 아니라 '를 id, passwd 칸에 넣을 때 injection이 가능한 곳이 많습니다.

다른 건 모르겠는데 자바에서 데이터베이스 작업에 가장 흔히 사용하는 PreparedStatement의 경우 파라메터로 들어가는 값은 자동으로 변환됩니다.

보안에 대해서는 물론 PHP가 상대적으로 많이 쓰인다는 점도 있겠지만 개인적인 생각으로는 가상머신에서 구동되는 자바나 ASP.NET과는 달리 직접 시스템의 여러 실행파일들이나 라이브러리를 직접 연동하는 방식을 쓴다는 점도 큰 영향을 주는 것 같습니다.

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

cocas의 이미지

fender wrote:
cocas wrote:
php는 언어 자체에서 '를 자동으로 escape 해 주기 때문에 적어도 SQL injection 에서는 꽤나 효과를 봅니다. 반면 다른 language에서는 그런 방법이 없거나 기본이 아니거나 널리 퍼진 설정이 아니라 '를 id, passwd 칸에 넣을 때 injection이 가능한 곳이 많습니다.

다른 건 모르겠는데 자바에서 데이터베이스 작업에 가장 흔히 사용하는 PreparedStatement의 경우 파라메터로 들어가는 값은 자동으로 변환됩니다.

보안에 대해서는 물론 PHP가 상대적으로 많이 쓰인다는 점도 있겠지만 개인적인 생각으로는 가상머신에서 구동되는 자바나 ASP.NET과는 달리 직접 시스템의 여러 실행파일들이나 라이브러리를 직접 연동하는 방식을 쓴다는 점도 큰 영향을 주는 것 같습니다.

저도 Java에서 사용하는 방법은 이번에 배우고 있어서 잘은 모르겠는데 ? ? 로 된 것을 치환하는 경우가 많은가요? 아니면 그냥 문자열 이어붙이듯이 이어 붙이는 경우가 많은가요? 전자의 경우라면 안전한가보네요. 다음부터는 꼭 저렇게 써야겠습니다.

ydhoney의 이미지

fender wrote:
재밌는 건 일부러 기술지원도 있는 상용 리눅스를 구매했으면서 '일반적으로 개발자는 최신 버전의 컴포넌트를 쓰기 때문에' 배포판에서 지원하지 않는 버전의 mysql을 홈페이지에서 다운받아 설치하는 과정에서 glibc를 잘못 올려 시스템이 '복구 불가능하게' 망가졌다는 걸 강조 하더군요.

뭐 이런 경우 생각보다 많습니다. -_-a;

그리고 '일반적으로 개발자는 예전에 사용하던 버전의 컴포넌트를 쓰기 때문에' 저런 일을 벌이는데..제가 잘못 알고 있는건가요? -_-?

댓글 달기

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
이것은 자동으로 스팸을 올리는 것을 막기 위해서 제공됩니다.