Commits

Yong Choi  committed 3bd2312

ch 13 revised

  • Participants
  • Parent commits 6535798

Comments (0)

Files changed (1)

File SimpleWebApps.rst

 13장. 간단한 웹 애플리케이션
 ++++++++++++++++++++++++++++
 
-자이썬을 사용하는 주요한 이점은 자바 플랫폼의 능력을 자바가 아닌 파이썬 프로그래밍 언어로 프로그래밍할 수 있다는 점이다. 오늘날 자바 세계에서, 가장 널리 사용되는 웹 개발 기법은 자바 서블릿이다. JavaEE에서는, HTML이나 기타 마크업 언어를 작성하기 위하여 순수 자바 서블릿을 작성하기보다는 여러 기법과 프레임워크를 사용한다. 그러나, 때로는 순수 자바 서블릿을 작성하는 것이 여전히 강점을 갖기도 한다. 서블릿을 작성하기 위하여 자이썬을 사용할 수 있으며, 이는 파이썬 언어의 기능을 사용할 수 있기 때문에, 자바가 줄 수 있는 것에 비하여 더욱 많은 이점을 가져다준다. 마찬가지로, 순수 자바 대신에 웹 시작 애플리케이션을 자이썬을 사용하여 작성함으로써 삶을 보다 편안하게 할 수 있다. 이러한 애플리케이션을 순수 자바로 작성하는 것은 때로는 어렵고 grueling한 작업이다. 자이썬에서 사용가능한 몇 가지 기법을 활용하여 삶을 보다 편안하게 할 수 있다. 심지어는 자이썬 프로젝트에서 *modjy* 통합을 사용함으로써 WSGI 애플리케이션을 자이썬으로 작성할 수도 있다.
+자이썬을 사용하는 주요한 이점은 자바 플랫폼의 능력을 자바가 아닌 파이썬 프로그래밍 언어로 프로그래밍할 수 있다는 점이다. 오늘날 자바 세계에서, 가장 널리 사용되는 웹 개발 기법은 자바 서블릿이다. JavaEE에서는, HTML이나 기타 마크업 언어를 작성하기 위하여 순수 자바 서블릿을 작성하기보다는 여러 기법과 프레임워크를 사용한다. 그러나, 때로는 순수 자바 서블릿을 작성하는 것이 여전히 강점을 갖기도 한다. 서블릿을 작성하기 위하여 자이썬을 사용할 수 있으며, 이는 파이썬 언어의 기능을 사용할 수 있기 때문에, 자바가 줄 수 있는 것에 비하여 더욱 많은 이점을 가져다준다. 마찬가지로, 순수 자바 대신에 웹 시작 애플리케이션을 자이썬을 사용하여 작성함으로써 삶을 보다 편안하게 할 수 있다. 이러한 애플리케이션을 순수 자바로 작성하는 것은 어렵고 때로는 험난하기도 한 작업이다. 자이썬에서 사용가능한 몇 가지 기법을 활용하여 삶을 보다 편안하게 할 수 있다. 심지어는 자이썬 프로젝트에서 *modjy* 통합을 사용함으로써 WSGI 애플리케이션을 자이썬으로 작성할 수도 있다.
 
 이 장에서는 자이썬을 사용하여 간단한 웹 애플리케이션을 작성하는 세 가지 기법, 즉 서블릿, 웹 스타트, WSGI를 살펴볼 것이다. 이러한 기법들을 사용하는 방법을 깊이 살펴볼 것이지만, 각 솔루션의 배포에 대해서는 17장에서 다룰 것이다.
 
 웹 애플리케이션에서 자이썬 서블릿 구성
 --------------------------------------
 
-웹 애플리케이션을 자이썬 서블릿과 호환되도록 하는 데에는 아주 약간의 수고가 필요하다. 자이썬은 *PyServlet* 내장 클래스를 갖고 있는데, 이것은 자이썬 소스 파일로부터 자바 서블릿을 생성해준다. PyServlet을 사용하기 위해서는 애플리케이션의 web.xml 파일에 *PyServlet* 클래스가 실행시간에 *.py* 확장자가 붙은 파일을 적재하도록 설정하는 XML을 간단히 추가하면 된다. 이러한 구성을 애플리케이션에 일단 추가하고, *jython.jar*를 CLASSPATH에 추가하면 자이썬 서블릿을 사용할 준비가 된 것이다. 예제 13-1을 보자.
+웹 애플리케이션을 자이썬 서블릿과 호환되도록 하는 데에는 아주 약간의 수고가 필요하다. 자이썬은 *PyServlet* 내장 클래스를 갖고 있는데, 이것은 자이썬 소스 파일로부터 자바 서블릿을 생성해준다. PyServlet을 사용하기 위해서는 애플리케이션의 web.xml 파일에 *PyServlet* 클래스가 실행시간에 *.py* 확장자가 붙은 파일을 적재하도록 설정하는 XML을 간단히 추가하면 된다. 이러한 구성을 애플리케이션에 일단 추가하고, *jython.jar*\ 를 CLASSPATH에 추가하면 자이썬 서블릿을 사용할 준비가 된 것이다. 예제 13-1을 보자.
 
 *예제 13-1. 웹 애플리케이션에서 자이썬을 사용할 수 있도록 구성*
 ::
 간결한 코드도 그렇거니와, 동적인 서블릿을 가지고 작업하는 개발주기 또한 매력적이다. 앞서 기술한 바와 같이, 자이썬은 실행시간에 컴파일되므로 변경이 일어날 때마다 재배포할 필요가 없다.
 자이썬 서블릿을 수정하고, 저장하고, 웹페이지를 새로고침하기만 하면 변경사항의 확인이 가능하다. 가능성에 대하여 생각하기 시작했다면, 위에서 예로 든 것은 간단한 예제일 뿐이며, 자바로 할 수 있었던 것은 무엇이든 파이썬 언어를 사용하여 자이썬 서블릿으로 해낼 수 있다는 것을 깨닫게 될 것이다.
 
-자이썬 서블릿에 대하여 요약하자면, 우선 *jython.jar*\ 와 *servlet-api.jar*\ 을 CLASSPATH에 둔다. 그리고 필요한 XML을 web.xml에 두고, 끝으로 javax.servlet.http.HttpServlet 추상 클래스를 확장하여 서블릿을 작성하면 된다.
+자이썬 서블릿에 대하여 요약하자면, 우선 *jython.jar*\ 와 *servlet-api.jar*\ 를 CLASSPATH에 둔다. 그리고 필요한 XML을 web.xml에 두고, 끝으로 javax.servlet.http.HttpServlet 추상 클래스를 확장하여 서블릿을 작성하면 된다.
 
 자이썬으로 JSP 사용하기
 -----------------------
 ~~~~~~~~~~~~~~~
 
 자이썬 서블릿을 사용하기 위해 웹 애플리케이션에서 특별히 설정해야할 것은 없다. 필요한 XML을 web.xml 배포 기술자에 추가하고, 올바른 JAR를 애플리케이션에 포함시키고, 코딩을 시작하면 된다. 주의하여야 할 점은 자이썬 서블릿에서 사용할 *.py* 파일이 반드시 CLASSPATH 내에 있어야한다는 것이다. 자이썬 서블릿을 JSP 웹 페이지와 같은 디렉토리에 두는 것이 일반적이다.
-이는 일들을 편하게 만들 수 있지만, 코드를 관리하는 데에 있어 패키지를 사용하지 않으므로 frowned upon될 수 있다. 여기서는 단순성을 위해서 서블릿 코드를 JSP와 동일한 디렉토리에 두지만, 여러분은 다른 방법을 취할 수도 있을 것이다.
+이는 일들을 편하게 만들 수 있지만, 코드를 관리하는 데에 있어 패키지를 사용하지 않았기 때문에 마음에 들지 않을 있다. 여기서는 단순성을 위해서 서블릿 코드를 JSP와 동일한 디렉토리에 두지만, 여러분은 다른 방법을 취할 수도 있을 것이다.
 
 컨트롤러/뷰 작성
 ~~~~~~~~~~~~~~~~
 
-애플리케이션의 뷰 부분은 마크업과 자바스크립트 코드를 사용하여 작성할 수 있다. 이러한 기법은 JSP를 활용하여 마크업을 수용하며, 자바스크립트는 JSP 내에 직접 포함하거나 별도의 *.js* 파일에 둘 수 있다. 깜끔한 후자의 기법을 선호하지만, 많은 웹 애플리케이션에서 페이지 내에 약간의 자바스크립트를 포함한다.
+애플리케이션의 뷰 부분은 마크업과 자바스크립트 코드를 사용하여 작성할 수 있다. 이러한 기법은 JSP를 활용하여 마크업을 수용하며, 자바스크립트는 JSP 내에 직접 포함하거나 별도의 *.js* 파일에 둘 수 있다. 깔끔한 후자의 기법을 선호하지만, 많은 웹 애플리케이션에서 페이지 내에 약간의 자바스크립트를 포함한다.
 
-이 예제의 JSP는 보다 단순하여, 예제 내에는 자바스크립트를 사용하지 않으며 두 군데의 입력 텍스트 영역만을 갖는다. 이 JSP는 두 개의 양식을 갖는데 이는 페이지에 두 개의 분리된 제출 단추를 갖기 때문이다. 각 양식은 서로 다른 자이썬 서블릿으로 리다이렉트되며, 입력 텍스트에서 주어진 자료를 가지고 어떤 일을 수행한다. 예제의 첫 번째 양식에는 사용자가 어떠한 텍스트든지 입력할 수 있는 작은 텍스트상자가 있으며 제출 버튼을 누르면 페이지에 다시 출력된다. 아주 쿨하지 않은가?썩 훌륭하지는 않아도, JSP와 서블릿 구현 간의 연동을 배우기에는 좋은 예이다. 두 번째 양식에는 사용자가 숫자를 넣을 수 있는 두 개의 텍스트 상자가 있고, 제출 단추를 누르면 값들을 다른 서블릿으로 전달하여 두 수의 합을 반환한다. 예제 13-5는 이러한 단순한 JSP의 코드이다.
+이 예제의 JSP는 보다 단순하여, 예제 내에는 자바스크립트를 사용하지 않으며 두 군데의 입력 텍스트 영역만을 갖는다. 이 JSP는 두 개의 양식을 갖는데, 이는 페이지에 두 개의 분리된 제출 단추를 갖기 때문이다. 각 양식은 서로 다른 자이썬 서블릿으로 리다이렉트되며, 입력 텍스트에서 주어진 자료를 가지고 어떤 일을 수행한다. 예제의 첫 번째 양식에는 사용자가 어떠한 텍스트든지 입력할 수 있는 작은 텍스트상자가 있으며 제출 버튼을 누르면 페이지에 다시 출력된다. 아주 쿨하지 않은가? 썩 훌륭하지는 않아도, JSP와 서블릿 구현 간의 연동을 배우기에는 좋은 예이다. 두 번째 양식에는 사용자가 숫자를 넣을 수 있는 두 개의 텍스트 상자가 있고, 제출 단추를 누르면 값들을 다른 서블릿으로 전달하여 두 수의 합을 반환한다. 예제 13-5는 이러한 단순한 JSP의 코드이다.
 
 *예제 13-5. 단순한 컨트롤러/뷰어 애플리케이션의 JSP 코드*
 
 
 
 
-빠르고 단순하게, 서블릿은 요청을 받아서 매개변수 *p* 내에 포함된 값을 얻는다. 그런 다음 그 값을 *addtext*\ 라는 이름의 변수에 할당한다. 그러면 이 변수는 *page_text*\ 라는 이름의 어트리뷰터에 할당하고 *testJython.jsp* 페이지로 역으로 전달한다. 이 코드는 깊이 있는 애플리케이션을 만들고자하는 경우에는 다른 JSP로 쉽게 전달할 수 있다.
+빠르고 단순하게, 서블릿은 요청을 받아서 매개변수 *p* 내에 포함된 값을 얻는다. 그런 다음 그 값을 *addtext*\ 라는 이름의 변수에 할당한다. 그러면 이 변수는 *page_text*\ 라는 이름의 어트리뷰트에 할당하고 *testJython.jsp* 페이지로 역으로 전달한다. 이 코드는 깊이 있는 애플리케이션을 만들고자하는 경우에는 다른 JSP로 쉽게 전달할 수 있다.
 
 JSP의 두 번째 양식은 두 값을 취하여 합을 페이지로 반환한다. 누군가가 텍스트 상자에 숫자 값이 아닌 텍스트를 입력하였다면 합 대신에 오류 메시지를 표시한다. 매우 단순하기는 하지만, 이 서블릿은 데이터베이스 호출 등을 포함하는 어떠한 업무로직이라도 코딩할 수 있음을 보여준다. 예제 13-7을 보라.
 
 애플릿과 자바 웹 스타트
 =======================
 
-글을 쓰고 있는 현재, 자이썬 2.5.0에서는 애플릿을 사용할 수 없다. 그 이유는 애플릿은 정적으로 컴파일되어야하며 웹 페이지에 포함하려면 *<applet>* 또는 *<object>* 태그를 사용하여야 하기 때문이다. *jythonc*\ 라는 정적 컴파일러는 더 나은 기술의 구현을 위해 자이썬 2.5.0에서 제거되었다.
-for better techniques. Jythonc는 자이썬 애플릿을 정적으로 컴파일하는 것과 같은 특정 작업을 수행하기에는 좋았지만, 자이썬과 자바의 통합과 같은 단순한 작업을 수행하기에는 불필요한 개별적인 컴파일 단계였기 때문에 개발 주기의 단절을 가져왔다. 머지 않은 미래의 자이썬 릴리스, 즉 2.5.1 또는 그 이상에는 애플릿을 위한 정적 컴파일을 수행하는 더 나은 방법이 포함될 것이다.
+글을 쓰고 있는 현재, 자이썬 2.5.0에서는 애플릿을 사용할 수 없다. 그 이유는 애플릿은 정적으로 컴파일되어야하며 웹 페이지에 포함하려면 *<applet>* 또는 *<object>* 태그를 사용하여야 하기 때문이다. *jythonc*\ 라는 정적 컴파일러는 더 나은 기술의 구현을 위해 자이썬 2.5.0에서 제거되었다. Jythonc는 자이썬 애플릿을 정적으로 컴파일하는 것과 같은 특정 작업을 수행하기에는 좋았지만, 자이썬과 자바의 통합과 같은 단순한 작업을 수행하기에는 불필요한 개별적인 컴파일 단계였기 때문에 개발 주기의 단절을 가져왔다. 머지 않은 미래의 자이썬 릴리스, 즉 2.5.1 또는 그 이상에는 애플릿을 위한 정적 컴파일을 수행하는 더 나은 방법이 포함될 것이다.
 
 현재로서는, 자이썬 애플릿을 개발하기 위해서는 *jythonc*\ 를 포함하는 이전의 배포본을 사용하여 웹페이지에 *<applet>* 또는 *<object>* 태그를 사용하여 연관시켜야 한다. 자이썬에서는, 표준 자바 애플릿과 상당히 비슷한 방식으로 애플릿을 작성한다. 하지만, 결과적인 행 수는 정교한 구문을 가진 자이썬 쪽이 훨씬 적다. 그와 같은 이유로, 일반적으로 자이썬으로 GUI를 개발하는 것이 자바 스윙 애플리케이션을 개발하는 것에 비하여 생산성이 크게 높다. 이것이 바로 애플릿을 자이썬으로 코딩하는 것이 좋은 해결책이며 그냥 지나쳐서는 안되는 이유이다.
 
 단순한 GUI 기반 웹 애플리케이션의 작성
 --------------------------------------
 
-이 예제에서 개발하는 웹 스타트 애플리케이션은 매우 단순하지만, 여러분이 원한다면 더욱 발전시킬 수 있다. 이 섹션의 목적은 웹 기반의 GUI 애플리케이션을 어떻게 개발하는지를 보이는 것보다는, 그러한 애플리케이션을 개발하는 과정을 보이는 데에 있다. 실제로 GUI 장에서 논의하였던 어떠한 스윙 기반 애플리케이션이나 취하여 웹 스타트 기법을 사용하여 아주 쉽게 배포할 수 있다. 이전 섹션에서 기술한 바와 같이, 자이썬 웹 스타트 애플리케이션을 배포하는 데에는 여러 다른 방법이 있다. 우리는 간단한 자이썬 스윙 애플리케이션을 생성하기 위하여 개체 팩토리 디자인 패턴을 사용하는 쪽을 선호한다.
+이 예제에서 개발하는 웹 스타트 애플리케이션은 매우 단순하지만, 여러분이 원한다면 더욱 발전시킬 수 있다. 이 섹션의 목적은 웹 기반의 GUI 애플리케이션을 어떻게 개발하는지를 보이는 것보다는, 그러한 애플리케이션을 개발하는 과정을 보이는 데에 있다. 실제로, GUI 장에서 논의하였던 어떠한 스윙 기반 애플리케이션이든 웹 스타트 기법을 사용하여 아주 쉽게 배포할 수 있다. 이전 섹션에서 기술한 바와 같이, 자이썬 웹 스타트 애플리케이션을 배포하는 데에는 여러 다른 방법이 있다. 우리는 간단한 자이썬 스윙 애플리케이션을 생성하기 위하여 개체 팩토리 디자인 패턴을 사용하는 쪽을 선호한다.
 하지만, 모든 .py 파일을 사용하고 자이썬 독립실행 JAR 파일을 사용하여 배포하는 것 또한 가능하다. 이 섹션에서 그러한 기법들 각각에 대하여 논의할 것이다. 자바와 자이썬 코드를 혼합할 것이라면 개체 팩토리 패턴이 최선이라는 점을 알아냈다. JAR 방법은 엄격한 자이썬 애플리케이션을 개발할 때에 가장 잘 작동할 것이다.
 
 개체 팩토리 애플리케이션 디자인
 독립 JAR를 통한 배포
 --------------------
 
-자이썬 독립실행 JAR 옵션을 사용하여 웹 스타트 애플리케이션을 배포하는 것이 가능하다. 그렇게 하기 위해서는, 자이썬 독립실행 JAR 파일의 사본이 필요하며, 그것을 explode하고, 그 파일에 여러분의 코드를 추가하고, 배포를 위하여 다시 JAR로 만든다. 파일들이 올바른 경로에 있는지 확인해야하며, 때로는 tedious할 수 있다는 것이 유일한 drawback이다.
+자이썬 독립실행 JAR 옵션을 사용하여 웹 스타트 애플리케이션을 배포하는 것이 가능하다. 그렇게 하기 위해서는, 자이썬 독립실행 JAR 파일의 압축을 풀어서, 그 파일에 여러분의 코드를 추가하고, 배포를 위하여 다시 JAR로 만든다. 이 방법의 유일한 결점은, 올바로 작동하도록 하기 위해서는 파일들이 올바른 경로에 있는지 확인해야하며, 그러한 일들이 때로는 지루해질 수 있다는 점이다.
 
-JAR를 통하여 자이썬 애플리케이션을 배포하기 위해서는, 먼저 자이썬 독립실행 배포본을 다운로드한다. 그런 다음에는, JAR를 expand하는 Stuffit 또는 7zip 등의 도구를 사용하여 *jython.jar*로부터 파일을 풀어낸다. JAR를 explode한 후에는, 여러분의 *.py* 스크립트들은 *Lib* 디렉토리에, 자바 클래스들은 루트에 추가한다. 예를 들어 *org.jythonbook.Book*\ 이라는 이름의 자바 클래스가 있다면, 그것을 패키지 구조에 따른 적절한 디렉토리에 위치시킨다. 애플리케이션에 추가적으로 포함시킬 JAR 파일이 있다면 그것들을 classpath에 두도록 해야한다. 이 셋업을 마치면, 조작된 독립실행 자이썬 JAR를 앞서 기술한 도구들을 사용하여 다시 ZIP 형식으로 JAR한다. 그런 다음 ZIP을 JAR로 이름을 바꾼다. 이제 애플리케이션은 명령행에서 여러분의 애플리케이션을 호출하기 위한 추가적인 외부의 *.py* 파일을 사용하여 "-jar" 옵션을 사용하여 수행시킬 수 있게 되었다.
+JAR를 통하여 자이썬 애플리케이션을 배포하기 위해서는, 먼저 자이썬 독립실행 배포본을 다운로드한다. 그런 다음에는, JAR를 확장하는 Stuffit 또는 7zip 등의 도구를 사용하여 *jython.jar*\ 로부터 파일을 풀어낸다. JAR를 푼 후에는, 여러분의 *.py* 스크립트들은 *Lib* 디렉토리에, 자바 클래스들은 루트에 추가한다. 예를 들어 *org.jythonbook.Book*\ 이라는 이름의 자바 클래스가 있다면, 그것을 패키지 구조에 따른 적절한 디렉토리에 위치시킨다. 애플리케이션에 추가적으로 포함시킬 JAR 파일이 있다면 그것들을 classpath에 두도록 해야한다. 이 셋업을 마치면, 조작된 독립실행 자이썬 JAR를 앞서 기술한 도구들을 사용하여 다시 ZIP 형식으로 압축한다. 그런 다음 ZIP을 JAR로 이름을 바꾼다. 이제 애플리케이션은 명령행에서 여러분의 애플리케이션을 호출하기 위한 추가적인 외부의 *.py* 파일을 사용하여 "-jar" 옵션을 사용하여 수행시킬 수 있게 되었다.
 
 ::
     
 WSGI와 Modjy
 ============
 
-*웹 서버 게이트웨이 인터페이스*의 약자인 WSGI는, 웹 서버와 웹 애플리케이션 간의 통신을 제공하는 저수준 API이다. 사실, WSGI는 그 이상이며 WSGI를 사용하여 완전한 웹 애플리케이션을 실제로 작성할 수 있다. 하지만 WSGI는 파이썬 메소드와 함수르 호출하는 표준 인터페이스에 가깝다. 파이썬 PEP 333은 다양한 웹 서버들 사이에서 웹 애플리케이션의 이식성을 높이기 위하여 제안된, 웹 서버들과 파이썬 웹 애플리케이션 또는 프레임워크 사이의 표준 인터페이스를 기술한다.
+*웹 서버 게이트웨이 인터페이스*의 약자인 WSGI는, 웹 서버와 웹 애플리케이션 간의 통신을 제공하는 저수준 API이다. 사실, WSGI는 그 이상이며 WSGI를 사용하여 완전한 웹 애플리케이션을 실제로 작성할 수 있다. 하지만 WSGI는 파이썬 메소드와 함수를 호출하는 표준 인터페이스에 가깝다. 파이썬 PEP 333은 다양한 웹 서버들 사이에서 웹 애플리케이션의 이식성을 높이기 위하여 제안된, 웹 서버들과 파이썬 웹 애플리케이션 또는 프레임워크 사이의 표준 인터페이스를 기술한다.
 
 이 섹션에서는 *modjy*\ 를 활용하여 매우 간단한 "Hello Jython" 애플리케이션을 생성하기 위하여 WSGI를 활용하는 방법을 보인다. Modjy는 자이썬을 위한 WSGI compliant 게이트웨이/서버로서, Java/J2EE 서블릿에 기반하고 있다. modjy 웹사이트(http://opensource.xhaus.com/projects/modjy/wiki)에 의하면, modjy는 다음과 같이 묘사된다.