Closure Compiler Service API와 통신

클로저 컴파일러 서비스는 지원 중단되었으며 삭제될 예정입니다. 컴파일러를 로컬에서 실행하는 것이 좋습니다.

개요

Closure Compiler 서비스 API는 웹 기반 API를 통해 클로저 컴파일러 자바스크립트 컴파일에 프로그래매틱 방식으로 액세스할 수 있습니다. 클로저 컴파일러 UI를 사용하면 웹페이지에서 간단한 양식을 통해 컴파일러 서비스를 쉽게 사용할 수 있지만, 이 웹페이지의 출력을 복사하는 것은 가장 효율적인 방법이 아닙니다. Closure Compiler 서비스 API를 사용하면 자체 도구를 빌드하고 자체 워크플로 흐름을 만들 수 있는 다양한 기능을 활용할 수 있습니다.

이 튜토리얼에서는 클로저 컴파일러 서비스에 자바스크립트를 보내고 클로저 컴파일러 출력을 다시 가져오는 과정을 안내합니다. 이 예에서는 자바스크립트에서 주석과 공백을 제거하는 클로저 컴파일러 컴파일의 가장 기본적인 수준을 사용합니다.

이 튜토리얼에서는 자바스크립트와 HTTP에 대한 기본 지식이 있다고 가정합니다. Python 스크립트를 사용하여 클로저 컴파일러 서비스에 자바스크립트를 제출하지만, Python에 대해 몰라도 예시를 따를 수 있습니다.

API와 통신하는 방법

  1. 요청 매개변수 확인

    클로저 컴파일러 서버에 HTTP POST 요청을 전송하여 클로저 컴파일러 서비스와 상호작용합니다. 모든 요청에서 최소한 다음 매개변수를 전송해야 합니다.

    js_code 또는 code_url

    이 매개변수의 값은 컴파일하려는 자바스크립트를 나타냅니다. 이러한 매개변수는 하나 이상 포함해야 하며 두 매개변수를 모두 포함할 수 있습니다. js_code 매개변수는 자바스크립트가 포함된 문자열이어야 합니다(예: alert('hello')). code_url 매개변수에는 HTTP를 통해 사용할 수 있는 자바스크립트 .js 파일의 URL이 포함되어야 합니다.

    js_code:path/to/filename.js 형식으로 이름이 지정된 소스 매개변수를 포함할 수도 있습니다. 각 파일이 가상 파일 시스템에 생성되어 ECMASCRIPT6에서 지원되는 importexport 문을 통해 표준화된 모듈을 사용할 수 있습니다.

    compilation_level

    이 매개변수의 값은 자바스크립트에 적용할 압축 정도와 최적화 정도를 나타냅니다. 가능한 컴파일 수준은 WHITESPACE_ONLY, SIMPLE_OPTIMIZATIONS, ADVANCED_OPTIMIZATIONS 세 가지입니다. 이 예에서는 주석과 공백만 삭제하는 WHITESPACE_ONLY 컴파일을 사용합니다.

    compilation_level 매개변수의 기본값은 SIMPLE_OPTIMIZATIONS입니다.

    output_info

    이 매개변수의 값은 컴파일러에서 원하는 정보의 종류를 나타냅니다. 출력에는 compiled_code, warnings, errors, statistics의 네 가지 종류가 있습니다. 이 예에서는 클로저 컴파일러 서비스에 요청에서 수신한 자바스크립트의 압축된 버전을 출력하도록 지시하는 값 compiled_code를 사용합니다.

    output_format

    클로저 컴파일러 서비스 출력의 형식입니다. 가능한 출력 형식은 text, json, xml입니다. 이 예시에서는 원시 텍스트를 출력하는 text 값을 사용합니다.

    output_format 매개변수의 기본값은 text입니다.

    이러한 필수 매개변수와 추가 선택적 매개변수에 대한 자세한 내용은 API 참조를 확인하세요.

    이 소개 튜토리얼의 예시에서는 한 줄의 원시 자바스크립트를 클로저 컴파일러 서비스에 전송하여 code_url 대신 js_code를 사용합니다. WHITESPACE_ONLYcompilation_level를 사용하고 output_formattext인 원시 텍스트 출력을 요청하고 output_info 유형의 compiled_code을 요청합니다.

  2. 폐쇄 컴파일러 서비스에 대한 사후 요청

    Closure Compiler 서비스의 출력을 가져오려면 POST 요청에서 1단계에서 선택한 매개변수를 Closure Compiler 서비스 API URL로 전송합니다. 이를 위한 한 가지 방법은 Hello World of Closure Compiler Service API와 같은 간단한 HTML 양식을 사용하는 것입니다.

    그러나 개발 중에 이러한 양식을 사용하려면 출력을 브라우저에서 복사하여 .js 파일에 붙여넣어야 합니다. 대신 클로저 컴파일러 서비스에 요청을 전송하는 작은 프로그램을 작성하는 경우 클로저 컴파일러 출력을 파일에 직접 쓸 수 있습니다. 예를 들어 다음 Python 스크립트는 클로저 컴파일러 서비스에 요청을 보내고 응답을 작성합니다.

    #!/usr/bin/python2.4
    
    import httplib, urllib, sys
    
    # Define the parameters for the POST request and encode them in
    # a URL-safe format.
    
    params = urllib.urlencode([
        ('js_code', sys.argv[1]),
        ('compilation_level', 'WHITESPACE_ONLY'),
        ('output_format', 'text'),
        ('output_info', 'compiled_code'),
      ])
    
    # Always use the following value for the Content-type header.
    headers = { "Content-type": "application/x-www-form-urlencoded" }
    conn = httplib.HTTPSConnection('closure-compiler.appspot.com')
    conn.request('POST', '/compile', params, headers)
    response = conn.getresponse()
    data = response.read()
    print data
    conn.close()
    

    참고: 이 예를 재현하려면 Windows 사용자가 Python을 설치해야 할 수 있습니다. Windows에서 Python을 설치하고 사용하는 방법에 대한 안내는 Python Windows FAQ를 참조하세요.

    이 스크립트는 전달된 인수인 명령줄을 최적화합니다. 위 코드를 compile.py 파일에 붙여넣고 파일 권한을 실행 파일로 변경하여 다음 명령어를 실행합니다.

    $ python compile.py 'alert("hello");// This comment should be stripped'
    

    이 명령어는 클로저 컴파일러 응답에서 압축된 코드를 출력합니다.

    alert("hello");
    

    이 예에서는 기본 컴파일을 사용하므로 컴파일러는 주석 제거 이외의 다른 작업을 하지 않습니다.

    다음은 스크립트와 관련하여 유의해야 할 사항입니다.

    • 매개변수는 HTTPS 연결의 요청 메서드에 URL 인코딩 문자열로 전달됩니다. urllib.urlencode 호출 후에 매개변수 변수에 다음 문자열이 포함됩니다.
      js_code=alert%28%22hello%22%29%3B%2F%2F+This+comment+should+be+stripped&output_info=compiled_code&out=text&compilation_level=WHITESPACE_ONLY
          
      직접 스크립트를 작성하는 경우 스크립트에서 다음과 같이 URL로 인코딩된 콘텐츠를 게시해야 합니다.
    • 요청에는 항상 application/x-www-form-urlencodedContent-type 헤더가 있어야 합니다.
  3. 다음 단계

    보다 현실적인 개발 시나리오에서 더 나은 압축을 달성하는 데 이 서비스를 사용하는 방법을 알아보려면 API로 파일 압축하기로 계속 진행하세요.