동적 페이지 생성 언어로 스크립트 언어가 강점인 이유는?

only2sea의 이미지

서버 사이드 동적 페이지 생성 언어로 유명한 것들이 PHP, Perl,
Python, Ruby 등이 있지요. 그 외에도 ASP, JSP, Coldfusion 같은
것들도 있는 것 같은데, 왜 동적 페이지 생성용으로 이런 스크립트
언어들이 강세인 것일까요?

예전에 CGI로 동적 페이지를 생성할 때 컴파일 언어들도 이용하곤 했던
것 같은데 요즘은 많이 사용되지 않는 것 같습니다. 그러고 보니 왜
동적 페이지 생성용으로 스크립트 언어를 쓰는지에 대한 글을 본 것
같기도 한데요.

컴파일 언어들을 이용하지 않는 이유는 무엇이며, 컴파일 언어를
이용할 경우에 불리한 점은 어떤 점이며, 스크립트 언어들을 이용할 때
어떤 점이 유리하게 되는 것일까요?

only2sea의 이미지

이런 글이 있네요.

http://www.apacheweek.com/features/dynamicpages

그러니까 스크립트 언어는 코드를 html 내에 내장시킬 수 있고, cgi가
아닌 모듈로 제공되면서 매번 스크립트 인터프리터를 실행하지 않아도
되므로 퍼포먼스도 매우 좋아졌기 때문인가요.

익명 사용자의 이미지

가장 큰 차이는 웹서버를 돌리는 중에 프로그래밍 언어를 사용할 수 있느냐는 겁니다.
즉, 런타임에 프로그램을 입력받아서 그것을 기존에 돌아가고 있는 시스템에 덧붙여서 실행시킬 수 있느냐? 이렇게 되면 두가지 - 당장 이 두가지만 떠오르네요 - 가 가능하죠.

1. 개발시: '최소한의 개발 -> 웹에서 확인 -> 추가 개발' 이 용이
2. 운영시: 웹서버 다운 안시키고 패치 혹은 확장

only2sea의 이미지

궁금해서 여쭙습니다. 컴파일 언어로 작성해서 FastCGI로 돌리는 경우라고 해도 웹 서버는 다운시키지 않아도 되는 것 아닌가요?
물론 런타임에 코드를 생성하지는 못합니다만...

아마록에서 가사와 앨범 표지를... http://kldp.net/projects/amarok-script/ 블로그: http://turtleforward.blogspot.com

lacovnk의 이미지

대부분의 스크립트 언어들이 자료형을 엄격히 따지지 않습니다. 유연성도 한 몫 할껍니다 :)

cleol의 이미지

컴파일/인터프리터는 별로 중요한 문제가 아닙니다. 제 생각에는 C/C++ 이 몇가지 이유로 안쓰일 뿐이지 컴파일 언어가 안쓰이는 것은 아닙니다. 예를 들어 자바는 컴파일 언어이지만 웹 개발에 많이 쓰이지요. (물론 JSP 같은 보조 도구와 함께입니다.)

말씀하신 언어들이 많이 쓰이는 가장 큰 이유는 간단합니다. 언어 자체가 웹페이지(또는 텍스트) 생성에 편리한 기능을 많이 가지고 있기 때문이지요. 특히 C/C++ 에 비해 적고 깔끔한 코드로 html 을 생성할 수 있기 때문입니다. 특별히 컴파일 언어가 불리하고 인터프리터 언어가 유리할 이유는 없습니다. 많은 양의 html 코드를 출력하는 코드를 깔끔하게 코딩할 수만 있었다면 C/C++이 웹페이지 생성에 쓰이지 않았을 이유가 없습니다.

또다른 이유로 "보안"을 들 수 있겠지요. C/C++ 은 버퍼 오버플로우 공격에서 자유로울 수 없습니다. 부주의하게 만든 웹페이지 하나 때문에 서버가 쉽게 공격당할 위험에 항상 노출되어 있는 셈입니다.

그리고 텍스트 생성 속도가 그다지 중요하지 않은 점도 있습니다. 대체로 웹 프로그램은 DB 와의 통신에 대부분의 시간을 보냅니다. C/C++ 같은 빠른 언어를 사용하던 느린 언어를 사용하던 어차피 전체적인 속도에 별 영향이 없으므로 "속도"라는 C/C++ 의 중요한 장점이 반감되는 거지요.

위에 런타임에 코드를 변경할 수 있는 기능을 말씀하신 분이 계시지만 제 생각에 큰 장점은 아닌 것 같습니다. 예를 들어 자바 웹 어플리케이션의 경우 코드를 변경하고 새로 컴파일한 후에는 리로딩을 해야하는데 세션이 끊기므로 서버를 죽였다 살리는 거나 별로 다르지 않습니다. 그리고 웹페이지에서 에러를 확인하는 것과 컴파일 창에서 에러를 확인하는 것도 서로 별반 다르지도 않습니다.

익명 사용자의 이미지

자바는 스크립트 언어라고 하지 않죠. 스크립트 언어라 불리우는 것들은 '동적 프로그래밍 언어 - dynamic programming language' 들로 인터프리터 혹은 인터프리터 + 컴파일러 의 형태가 대부분이며, 컴파일은 옵션일 뿐입니다. 그런 맥락에서 자바는 C/C++와 동일합니다.

only2sea의 이미지

오오, 그렇군요!!

cleol님의 말씀을 듣고 보니 컴파일/인터프리터는 별로 중요한 문제가 아니라는 것을 알았습니다.
적고 깔끔한 코드로 작성할 수 있는 점과 DB와 통신하는 시간이 많이 걸리는 점에서 별로 퍼포먼스
향상을 기대할 수 없는 점 등이 그렇군요. 그러고 보니 예전에 문자열 생성하는 부분은 Perl과 같은
언어의 퍼포먼스가 굉장히 좋은 것을 본 적이 있습니다. 문자열 생성류의 작업을 주로 하는 부분은
그렇겠네요...

아마록에서 가사와 앨범 표지를... http://kldp.net/projects/amarok-script/ 블로그: http://turtleforward.blogspot.com

익명 사용자의 이미지

제가 생각할때는 언어 자체에 그 이유가 있는게 아닌거 같습니다.

개발인력의 문제라고 보여집니다.
동적 웹페이지 하나 작성하는데 C개발자가 필요하다고만 가정해봐도
사람구하기 힘들께 뻔할 듯 합니다.

C/C++을 사용하고 FastCGI로 개발했다고 했을때
후임을 쉽게 구할 수 있을까요? ^^

only2sea의 이미지

정말 이것도 이유가 되겠네요. 인력 수급 문제라는 것은 굉장히 중요하더라구요...

블로그: http://turtleforward.blogspot.com

creativeidler의 이미지

제 생각엔 스크립트 언어라서라기보다 파이썬, 루비 등의 언어가 C/C++이나 자바에 비해 좀더 고급 언어이기 때문에 아무래도 좀더 빠르고 쉽게 개발할 수 있고, 그러면서도 좀더 인간적인 코드로 만들어나갈 수 있기 때문이 아닐까 싶습니다. 그래서 사실 이런 스크립트 언어는 웹 뿐 아니라 다양한 분야에서 폭넓게 활용되고 있습니다. 리눅스의 경우 수많은 데스크탑 애플리케이션이 파이썬으로 작성되고 있습니다.

대신 스크립트 언어가 약점을 보이는 분야, 즉, 높은 수준의 신뢰도가 필요한 분야나 성능이 중요한 OS, 임베디드 등의 경우는 여전히 스크립트 언어가 많이 진출하지 못하고 있습니다.

쉽게 말하면 가용성이 중요하지 않은 분야에서는 인간에 좀더 가까운 스크립트 언어가 강세를 보이는데 웹 프로그래밍도 가용성이 그렇게까지 중요한 분야는 아니기 때문에 스크립트 언어가 강세를 보인다고 할 수 있다..라고 말할 수 있겠네요.

댓글 달기

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