2007년 6월
소개: 프록시를 사용하는 이유
프록시 서버는 일반적으로 외부 리소스에 대해 여러 클라이언트 컴퓨터를 대신하여 요청을 수행하는 컴퓨터 (또는 컴퓨터의 서비스)입니다. 이 도움말에서는 HTTP가 Google 웹 서비스의 공개 API에 액세스하는 데 사용되는 프로토콜이므로 HTTP 프록시 서버에 대해 설명합니다. 따라서 비공개 사용자 데이터나 비밀번호와 같은 민감한 정보가 포함된 HTTP 요청을 할 때도 HTTPS 또는 SSL 프록시가 유용합니다. 오늘날 많은 대기업에서 HTTP 프록시를 사용하여 직원이 인터넷에서 볼 수 있는 웹사이트나 정보를 관리합니다. 공공 도서관과 학교에서도 이 목적으로 프록시를 구현하는 것으로 알려져 있습니다. 익명으로 웹 콘텐츠에 액세스하는 데 사용할 수 있는 공개 프록시 서버도 많이 있습니다.
프록시 서버를 사용할 때 발생할 수 있는 문제는 사용 중인 소프트웨어와 구성 방식에 따라 다릅니다. 프록시는 프록시 식별 및 인증에 필요한 것 외에 클라이언트의 요청이나 서버의 응답을 어떤 방식으로도 변경하지 않는 경우 '투명'한 것으로 간주됩니다. 하지만 많은 프록시 서버가 개발자가 알아야 하는 방식으로 요청이나 응답을 변경합니다. 특히 일부 프록시는 응답의 콘텐츠 유형을 변경하거나 리소스를 호스팅하는 외부 서버로 전송되는 HTTP keep-alive 헤더를 삭제합니다.
그렇다면 개발자가 HTTP 또는 SSL 프록시를 사용하려는 이유는 무엇일까요? 일반적으로 두 가지 이유가 있습니다. 일부 회사 인프라에서 필요하거나 개발자가 웹 서비스를 사용하는 애플리케이션을 디버깅하려고 하는 경우입니다. 첫 번째 이유는 개발자가 작업하는 네트워크의 규칙에서 프록시를 사용하지 않는 웹 또는 SSL 연결을 외부 웹사이트로 금지하는 경우 완전히 피할 수 없습니다. 후자의 이유는 Google 웹 서비스를 처리할 때 문제를 해결하려는 개발자가 지원 포럼에서 자주 신고합니다. 이러한 상황에 적합한 특수 목적의 '디버깅' 프록시(예: Fiddler, Charles)가 있습니다. 프록시 서버 사용에 관한 자세한 내용은 On the Wire: Tools for API Developers(온더와이어: API 개발자를 위한 도구) 도움말을 참고하세요.
일부 애플리케이션의 경우 프록시 서버 지원을 추가하기 어려울 수 있습니다. 다행히도 Google Data API용 클라이언트 라이브러리의 대부분은 약간의 코드 수정 후 HTTP 프록시 서버와 함께 작동하도록 할 수 있습니다. 이 도움말은 애플리케이션에서 이루어지는 웹 요청에 프록시 서버를 사용하려는 개발자를 위한 시작점으로 제공됩니다.
자바
Sun에서 시스템 속성을 사용하여 연결 설정을 관리하므로 Java 클라이언트 라이브러리를 사용하여 HTTP 프록시를 쉽게 사용할 수 있습니다.
예를 들어 회사 프록시 서버가 포트 3128에서 'my.proxy.domain.com'에서 실행되는 경우 Google Calendar, Google Sheets 등의 서비스 객체를 만들기 전에 코드에 다음을 추가할 수 있습니다.
System.setProperty("http.proxyHost", "my.proxy.domain.com"); System.setProperty("http.proxyPort", "3128");
또는 서블릿 환경을 시작할 때 명령줄에서 이를 실행할 수 있습니다.
java -Dhttp.proxyHost=my.proxy.domain.com -Dhttp.proxyPort=3128
최신 버전의 JSSE 패키지를 사용하면 SSL 프록시로도 확장할 수 있습니다. 이전 예의 동일한 프록시 서버가 포트 3129에서 SSL 프록시를 실행하는 경우 필요한 코드는 다음과 같습니다.
System.setProperty("https.proxyHost", "my.proxy.domain.com"); System.setProperty("https.proxyPort", "3129");
HTTP 프록시와 마찬가지로 명령줄에서도 이 작업을 할 수 있습니다.
프록시 서버를 사용하려면 사용자 인증 정보를 제공해야 하는 경우가 있습니다. 일반적으로 다음과 같이 HTTP 헤더에 포함된 base64 해시를 사용하여 제출됩니다.
String encoded = new String(Base64.encodeBase64(new String("username:password").getBytes())); String base64encodedCredentials = "Basic " + encoded; myService.getRequestFactory().setPrivateHeader("Proxy-Authorization", base64encodedCredentials);
위 코드는 필요한 base64 인코딩을 실행하기 위해 Apache Commons Codec 패키지를 사용합니다. 위 코드를 실행하려면 org.apache.commons.codec.binary.Base64
클래스를 가져와야 합니다.
.NET
.NET 클라이언트 라이브러리에서 HTTP 프록시를 사용하는 것은 Java 클라이언트에서와 같이 간단하지는 않지만 특정 제품의 서비스 객체를 만들 때 비슷한 방식으로 수행할 수 있습니다.
예를 들어 프록시를 사용하여 Google Calendar 서비스와 상호작용할 수 있습니다.
using System.Net; CalendarService service = new CalendarService("CalendarSampleApp"); query.Uri = new Uri(calendarURI); GDataRequestFactory requestFactory = (GDataRequestFactory) service.RequestFactory; IWebProxy iProxy = WebRequest.DefaultWebProxy; WebProxy myProxy = new WebProxy(iProxy.GetProxy(query.Uri)); // potentially, setup credentials on the proxy here myProxy.Credentials = CredentialCache.DefaultCredentials; myProxy.UseDefaultCredentials = true; requestFactory.Proxy = myProxy;
이렇게 하면 인터넷 연결 설정에서 필요한 프록시가 감지됩니다. 이는 .NET 라이브러리의 유용한 기능입니다. 하지만 프록시를 제대로 검색하지 못할 것이라고 생각되면 코드를 다음과 같이 변경하여 설정할 수도 있습니다.
using System.Net; CalendarService service = new CalendarService("CalendarSampleApp"); GDataRequestFactory requestFactory = (GDataRequestFactory) service.RequestFactory; WebProxy myProxy = new WebProxy("http://my.proxy.example.com:3128/",true); // potentially, setup credentials on the proxy here myProxy.Credentials = CredentialCache.DefaultCredentials; myProxy.UseDefaultCredentials = true; requestFactory.Proxy = myProxy;
결론
이 도움말에서는 일부 Google 데이터 API 클라이언트 라이브러리가 HTTP 프록시 서버와 작동하는 방법을 설명했습니다. 네트워크 정책에 따라 프록시 서버를 사용하는 개발자도 이러한 라이브러리를 사용할 수 있습니다. 개발자는 프록시 서버를 사용하여 Google 웹 서비스로 전송되거나 Google 웹 서비스에서 전송되는 HTTP 요청 및 응답의 콘텐츠를 기록하여 코드를 디버그할 수도 있습니다. 이 튜토리얼에서 다루지 않는 프록시 서버 및 기타 클라이언트 라이브러리의 고급 사용 사례가 있습니다. 추가 도움이 필요한 개발자는 아래 링크된 공개 지원 그룹에 참여하는 것이 좋습니다.
이 도움말에 사용된 클라이언트 라이브러리에 대한 자세한 내용은 다음 페이지를 참고하세요.
기타 리소스:
- Google Data API 지원 그룹
- Objective-C 소개 위키 페이지 - 프록시 서버에서 오류를 포착하고 사용자 대화상자로 인증하는 방법을 간략하게 설명합니다.