메인 컨텐츠로 가기

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관 보기.

모든 정보가 안전하게 전송되었습니다.

  • 닫기 [x]

웹 서비스와 함께 Ajax 사용하기

두 가지 최신 기술을 결합하는 것은 생각보다 쉽다

Brian M. Carey, Senior Systems Engineer, Triangle Information Solutions
Brian Carey는 Java 엔터프라이즈 애플리케이션의 아키텍처, 설계 및 구현을 전문으로 하는 정보 시스템 컨설턴트이다. Twitter(http://twitter.com/brianmcarey)에서 그의 글을 볼 수 있다.

요약:  웹 서비스는 언어 및 플랫폼과 독립적으로 기능을 노출하는 아주 좋은 방법입니다. Ajax(Asynchronous JavaScript and XML)는 현재 웹 페이지에서 새 요청을 호출하지 않고 다른 자원의 컨텐츠에 액세스하는 데 필요한 기술적인 수단입니다. 이 두 가지를 함께 사용하여 웹 개발자는 최첨단 기술을 활용하고 향상된 사용자 경험을 제공하는 강력한 애플리케이션을 작성할 수 있습니다.

원문 게재일:  2010 년 5 월 18 일 번역 게재일:   2010 년 7 월 06 일
난이도:  중급 영어로:  보기 PDF:  A4 and Letter (44KB | 11 pages)Get Adobe® Reader®
페이지뷰:  3514 회
의견:  


웹 서비스란

웹 서비스는 월드 와이드 웹을 사용하여 애플리케이션 기능을 노출하는 하나의 방법이다. 웹 서비스는 오픈 프로토콜을 사용하여 이를 수행하기 때문에 웹에 액세스할 수 있는 모든 소비 애플리케이션도 웹 서비스에 액세스할 수 있다.

My developerWorks의 웹 개발 그룹에 참여하기

My developerWorks 웹 개발 그룹에서 다른 개발자와 웹 개발에 대한 주제에 대해 토론하고 참고자료를 공유하자.

My developerWorks 회원이 아니라면, 지금 가입하자!

일반적인 웹 서비스 상호작용은 XML 메시지를 서비스에 전송하는 소비자(웹 서비스를 사용하는 원격 애플리케이션)로 구성되어 있다. 그런 다음 서비스는 메시지를 구문 분석한 후 XML 형식으로 응답을 다시 전송한다. 그러면 소비자는 응답을 구문 분석하고 서비스에서 검색된 정보를 사용한다.

웹 서비스에서는 SOAP가 XML 언어로 자주 사용된다. SOAP는 원래 Simple Object Access Protocol의 약어였지만 어떤 이유에선지 더 이상 이런 의미로 사용되지 않는다. 이 프로토콜은 엔벨로프, 데이터 유형 규칙과 조작 요청 및 응답을 정의하는 수단이라는 세 가지 부분으로 구성된다.

웹 서비스는 WSDL(Web Services Description Language)로 알려진 다른 XML 문서를 사용하여 정의된다. WSDL은 웹 서비스를 사용하여 노출되는 조작, 조작에서 사용하는 데이터 유형 정의, 웹 서비스와 통신하는 데 사용되는 프로토콜 및 웹 서비스 자체의 위치를 지정한다.

웹 서비스의 장점은 다른 프로그래밍 언어로 작성되고 다른 플랫폼에 전개된 애플리케이션이 수많은 사이트를 통해 서로 통신할 수 있도록 하는 것이다.

Ajax란?

Ajax는 웹 개발자가 다양한 기능의 클라이언트 프리젠테이션을 위해 사용하는 최신 기술 중 하나이다. Ajax는 이를 위해 현재 보기를 간섭하지 않고 새 요청을 호출한다. XML 문서가 리턴되며 이 XML 문서는 일반적으로 현재 프리젠테이션에 있는 서브페이지로 사용자에게 표시된다. 간단히 말해서, Ajax를 사용하면 클라이언트측 동적 컨텐츠의 외형을 유지하면서 서버측 동적 컨텐츠를 사용할 수 있다.

일반적으로 Ajax는 Ajax가 등장하기 전에는 웹 개발자가 거의 사용하지 않았던 XMLHttpRequest DOM API를 사용하여 요청을 처리한다. 요청 자체는 GET 또는 POST 변형 중 하나가 될 수 있다.

다른 요청과 마찬가지로 응답이 리턴되며 이 응답에는 오류가 있을 수 있다. 오류가 없는 응답이면 응답의 실제 텍스트를 사용하여 현재 보기가 업데이트된다.

"신성 로마 제국은 신성하지도 않고, 사실 로마와 상관도 없고, 게다가 제국도 아니다."라는 볼테르의 유명한 글귀를 떠올리면서 다양한 Ajax 구현을 철저히 조사해 보면 Ajax에는 JavaScript 코드도 필요하지 않고 XML도 필요하지 않을 뿐만 아니라 비동기식이 아니어도 된다는 것을 알게 된다. 약어에서 이 모든 단어를 빼고 나면 접속사인 and만 남게 된다. 하지만 부르기 좋은 이름이기 때문에 업계에서는 이 약어를 그대로 유지하기로 결정했다.

Ajax와 웹 서비스의 관련성

인터넷상의 모든 위치에서 액세스할 수 있는 서비스와 결합된 풍부한 클라이언트 경험에 비유해 보자. 매우 적절한 비유이다.

이미 확인했듯이 Ajax는 암묵적으로 요청을 실행하고 일반적으로 페이지 전체를 새로 고치지 않고 응답(또는 응답의 일부)을 다시 웹 페이지에 전송한다. 이제 해당 요청은 단순 HTTP 요청이 될 수 있고 노출된 웹 서비스에 전송된 SOAP 메시지도 될 수 있다. 그러면 Ajax 루틴의 JavaScript측은 응답(역시 SOAP 형식임)을 구문 분석하고 애플리케이션에 리턴되고 사용자에게 제공되는 필수 데이터를 추출할 수 있다.

이 정도로 간단하다.

fishinhole.com에 대한 비즈니스 요구 사항

fishinhole.com의 이사회에서는 당신이 회사 재고에 다른 웹 애플리케이션이 더 쉽게 접근할 수 있도록 해 주기를 바라고 있다. 이사회에서는 스포츠 낚시 포럼, 블로그는 물론 경쟁 소매상을 포함한 다른 웹 사이트에서 fishinhole.com의 재고 목록에 쉽게 접근할 수 있으면 판매가 23.7% 증가할 것이라고 생각한다.

당신은 23.7%라는 수치의 산출 근거에 의문을 가지는 대신 재고를 다른 웹 애플리케이션에 노출할 수 있는 방법에 초점을 둔다. 웹 서비스를 작성해야 한다는 결론에 도달하는 데는 시간이 오래 걸리지 않는다. 웹 서비스를 사용하면 소비자가 미끼 유형에 따른 미끼의 재고에 대한 요청을 제출할 수 있다. 현재 사용 가능한 미끼 유형은 Casting, TrollingOther이다. 웹 서비스에서는 소비자가 제공한 미끼 유형에 따른 미끼 목록을 리턴한다.

현재는 회사에 Other 유형 미끼가 없다는 것도 알게 된다. 웹 사이트에서 단계적으로 이를 처리해야 한다.

단순 웹 서비스 전개하기

PHP를 사용하여 단순 웹 서비스를 작성한다. PHP는 NuSOAP와 함께 신속한 웹 서비스 작성을 위해 가장 편리한 수단 중 하나라고 생각한다.

먼저 NuSOAP(참고자료 참조)를 확보하여 모든 PHP 파일을 PHP 웹 서비스가 전개될 디렉토리와 동일한 디렉토리에 저장한다.

NuSOAP를 설치하고 나면 실제 웹 서비스 작성을 시작한다. Listing 1에는 전체 내용이 포함되어 있다.


Listing 1. webservice.php

<?php
require_once('nusoap.php');
$server = new soap_server;
$server->register('hello');
$server->register('retrieveByType');
function hello($name) {
    return 'Hello, ' . $name;
}

function retrieveByType($type) {
	if ($type == 'trolling') {
		$arr[0] = 'Donzai Deep Swimmer 5 1/4 inch';
		$arr[1] = 'Yosubi Squid-like 4 inch';
		$arr[2] = 'Fortunata Imperial High Action';
	} else if ($type == 'casting') {
		$arr[0] = 'Silver Spring Mirrors Size 00';
		$arr[1] = 'Gold Spring Mirrors Size 0';
		$arr[2] = 'Mini Minnow Blue';
	} else {
		$arr[0] = 'None found!';
	}

	return $arr;
}

$HTTP_RAW_POST_DATA = isset($HTTP_RAW_POST_DATA) ? $HTTP_RAW_POST_DATA : '';
$server->service($HTTP_RAW_POST_DATA);
?>

먼저 require_once('nusoap.php') 행에 주목한다. 이 행은 PHP 웹 페이지가 nusoap.php에 정의된 클래스를 사용할 수 있게 한다. NuSOAP와 연관된 다른 모든 PHP 파일이 왜 필요한지 궁금할 것이다. 사실을 말하면 nusoap.php는 페이지가 nusoap.php에 의존하는 것과 거의 동일한 방식으로 해당 파일에 의존한다.

다음 행은 soap_server 오브젝트를 인스턴스화한다. 이를 통해 SOAP 프로토콜을 사용하는 웹 서비스를 작성할 수 있다는 사실은 놀라운 일이 아니다.

다음 행은 retrieveByType 함수를 등록하기 때문에 해당 함수는 웹 서비스 조작으로 노출된다. 코드에서 더 아래쪽을 살펴보면 retrieveByType이라는 정의된 함수가 있다는 것을 알게 된다. 그렇다면 이 단계가 왜 필요한 것인가? 함수를 등록하지 않으면 해당 함수는 이 PHP 페이지 또는 이 PHP 페이지가 포함된 다른 PHP 페이지에만 사용할 수 있는 단순 PHP 함수이기 때문이다. 따라서 이 행은 이 함수를 웹 서비스의 소비자가 사용할 수 있는 조작으로 노출한다는 것을 soap_server 오브젝트에 알린다.

코드의 다음 블록은 실제로 retrieveByType 메소드를 구현한다. 이 메소드는 하나의 매개변수 type을 승인하는 단순 PHP 함수이며 이는 trolling, casting 또는 other가 될 수 있다. 이미 알고 있듯이 이들은 fishinhole.com의 고객이 사용할 수 있는 세 가지 미끼 유형이다.

retrieveByType 메소드는 배열을 리턴한다. 배열은 요청된 유형에 해당하는 미끼 목록으로 구성되어 있다. 현재는 trolling에 사용할 수 있는 세 가지 다른 미끼 유형과 casting에 사용할 수 있는 세 가지 다른 미끼 유형이 있다. Other와 인식되지 않는 유형을 포함하는 "포괄적인" 유형이 있다는 것에 유의한다. 이러한 유형에 대해 웹 서비스는 단순히 None Found!를 배열의 유일한 요소로 리턴한다.

마지막 두 행은 웹 서비스에 액세스되면 실행된다. 첫 번째 행은 POST 데이터가 있는지 검사한다. 해당 데이터가 없으면 POST 데이터를 비어 있는 문자열로 설정한다. 두 번째 행은 POST의 데이터가 포함된 웹 서비스를 실행한다. POST 데이터에는 SOAP 메시지가 포함되어 있다. 소비자를 조사하면 이에 대한 자세한 내용을 볼 수 있다.

이 페이지를 webservice.php로 저장한 후 NuSOAP를 설치한 디렉토리와 동일한 디렉토리에 저장한다. PHP 파일을 처리할 수 있는 위치에 이 페이지를 저장해야 하는 것은 물론이다. 요즘은 대부분의 호스팅 솔루션이 PHP를 지원하기 때문에 PHP 프로세서가 없어도 이를 찾는 것이 어렵지 않다.

이제 http://yourhost/yourdirectory/webservice.php에 액세스하여 웹 서비스를 신속하게 테스트한다. yourhostyourdirectory 각각에 대한 파일을 저장한 실제 호스트 및 디렉토리를 대체해야 하는 것은 물론이다.

수신되는 응답은 SOAP 응답이어야 한다(Listing 2 참조). 그렇지 않으면 웹 서비스가 올바르게 작동하고 있지 않은 것이다.


Listing 2. SOAP 응답

<?xml version="1.0" encoding="ISO-8859-1" ?> 
<SOAP-ENV:Envelope 
SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" 
xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" 
xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> 
<SOAP-ENV:Body> 
<SOAP-ENV:Fault> 
<faultcode xsi:type="xsd:string">SOAP-ENV:Client</faultcode> 
<faultactor xsi:type="xsd:string" /> 
<faultstring xsi:type="xsd:string">method '' not defined in service</faultstring> 
<detail xsi:type="xsd:string" /> 
</SOAP-ENV:Fault> 
</SOAP-ENV:Body> 
</SOAP-ENV:Envelope>

웹 서비스에 액세스하는 페이지 작성하기

Listing 3에 표시된 웹 서비스에 실제로 액세스하는 JavaScript 코드에서 시작한다.


Listing 3. invokeService() JavaScript 함수

function invokeService(type) {
 soapMessage = '<?xml version="1.0" encoding="ISO-8859-1"?>';
 soapMessage+='<SOAP-ENV:Envelope SOAP-ENV:encodingStyle=""';
 soapMessage+=' xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/"';
 soapMessage+=' xmlns:xsd="http://www.w3.org/2001/XMLSchema"';
 soapMessage+=' xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/">';
 soapMessage+=' <SOAP-ENV:Body> <ns1:retrieveByType xmlns:ns1="http://fishinhole.com">';
 soapMessage+=' <type xsi:type="xsd:string">' + type + '</type>';
 soapMessage+=' </ns1:retrieveByType> </SOAP-ENV:Body> </SOAP-ENV:Envelope>';
 
 if(window.XMLHttpRequest) {
  httpRequest=new XMLHttpRequest();
 } else if (window.ActiveXObject) { 
  httpRequest=new ActiveXObject("Microsoft.XMLHTTP"); 
 }
                  
 httpRequest.open("POST",url,true);
 if (httpRequest.overrideMimeType) { 
  httpRequest.overrideMimeType("text/xml"); 
 }
 httpRequest.onreadystatechange=populateDiv;
      
 httpRequest.setRequestHeader("Man", url + " HTTP/1.1")
 httpRequest.setRequestHeader("MessageType", "CALL");
 httpRequest.setRequestHeader("Content-Type", "text/xml");

 httpRequest.send(soapMessage);
 valTimeout=setTimeout("timeout(httpRequest);",120000);
}            

이 함수는 invokeService라고 하며 하나의 매개변수 type을 승인한다. 말할 필요도 없이 이 매개변수는 웹 서비스 조작(retrieveByType)에서 승인되는 type 매개변수에 해당한다. 달리 말하면 type 매개변수는 casting, trolling 또는 other로 구성된 문자열이다.

함수의 처음 몇 개 행은 SOAP 메시지를 어셈블한다. 이것은 본 문서의 범위를 벗어나서 SOAP에 대한 장황한 개요를 제공한다. 하지만 XML의 특정 부분은 매우 직관적이다. XML 요소 중 하나는 직접 조작 이름(retrieveByType)에 대응한다는 것에 유의한다. 해당 요소의 하위 요소는 webservice.php 파일에 지정된 매개변수의 이름(type)에 따라 이름이 지정된다. 해당 요소의 값은 type이라고도 하는 이 JavaScript 함수에 전달되는 문자열 매개변수이다.

다음 몇 개의 행은 여러 브라우저를 호환하는 요청 오브젝트를 작성한다. 이 오브젝트는 웹 서비스에 액세스하는 데 사용되는 오브젝트이다.

요청 오브젝트가 확립된 후 이 함수는 콜백 함수(이 예제에서는 populateDiv() 함수)를 설정한다. 이 함수는 웹 페이지에 리턴되는 재고 목록을 표시하는 함수이다.

그런 다음 이 함수는 헤더를 설정한다. 여기서는 SOAP를 준수하는 컨텐츠 유형 text/xml을 설정하는 데 특히 관심을 둔다. url 변수를 사용하는 것에도 유의한다. 자체 웹 페이지를 작성할 때는 해당 변수를 웹 서비스에서 사용하는 URL로 설정해야 한다. 이 URL은 http://www.myhost/myservicedir/webservice.php와 비슷한 모양이다.

마지막으로 요청 오브젝트를 사용하여 SOAP 메시지를 전송하고 서비스가 응답하지 않는 경우의 제한 시간을 설정한다.

다음으로 Listing 4에 표시된 Ajax 호출에 응답하고 재고를 표시하는 JavaScript 코드를 살펴본다.


Listing 4. populateDiv() JavaScript 함수

function populateDiv(){
 try {
      if(httpRequest.readyState==4) {
         if(httpRequest.status==200) {
            clearTimeout(valTimeout);
     	    var text = httpRequest.responseText;
	    if (window.DOMParser) {
		parser=new DOMParser();
		xmlDoc=parser.parseFromString(text,"text/xml");
	    } else {
	        xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
		xmlDoc.async="false";
		xmlDoc.loadXML(text); 
	    } 
	
            var html = "";
	    for (i=0;i<xmlDoc.getElementsByTagName("item").length;i++) {
	     html += "<br/>" + 
             xmlDoc.getElementsByTagName("item")[i].childNodes[0].nodeValue;
	    }

	    var resultDiv=document.getElementById("resultDiv");
	    resultDiv.innerHTML = html;         		
         }
      } 
 } catch(e) { 
     alert("Error!"+e.description); 
 }      
}

처음 몇 개의 행은 Ajax를 사용해 본 사용자에게 익숙하다. 이 함수는 요청 오브젝트에 상태 변경이 발생할 때마다 호출된다는 점을 상기한다. 여기서는 요청에서 올바른 응답(200 코드)을 리턴하는 시기에 특히 관심을 가진다.

올바른 응답이 리턴되면 제한 시간을 지우고 응답 텍스트를 확보한다. 응답 텍스트는 실제로 SOAP 응답이므로 XML 형식으로 되어 있다는 것을 기억한다. 이는 중요한 정보를 위해 XML을 구문 분석하는 데 JavaScript 프로그래밍 언어를 사용해야 함을 의미한다.

다음 몇 개의 행으로 이동한다. 이러한 행은 JavaScript 프로그래밍 언어에서 구문 분석할 수 있는 크로스 브라우저 호환 XML 문서 오브젝트를 인스턴스화한다. SOAP 응답은 XML 문서이므로 다른 XML 문서처럼 구문 분석될 수 있다.

다음으로 일부 HTML을 작성한다. 비어 있는 HTML 문자열로 시작한다. 그런 다음 item 요소에 대한 SOAP 응답을 구문 분석한다. 웹 서비스는 배열을 리턴한다는 것을 기억한다. 따라서 둘 이상의 item 요소가 있을 수 있다. for 루프는 본질적으로 "각각의 item 요소에 대해 다음을 수행한다."라는 문장을 포함한다.

여기서 "다음"은 "JavaScript 코드는 item 요소의 첫 번째 하위를 확보한다."라는 문장이다. 이 경우에는 하나의 하위만 있으며 이 하위는 단순 문자열이다. 그런 다음 재고의 한 가지 항목인 해당 하위의 값을 추출한다. 보기 좋도록 필자는 <br/> 태그를 재고 항목 앞에 추가한다. 이 방식으로 목록의 각 항목이 자체 행에 표시된다. 마지막으로 전체 행이 기존 HTML에 연결되므로 for 루프가 완료되면 전체 목록이 확보된다.

HTML이 완료되면 HTML을 페이지에 저장한다. 이 경우에는 resultDiv라는 div 요소의 컨텐츠가 방금 작성된 HTML로 겹쳐써진다. 사용자가 페이지의 드롭 다운 상자에서 새 유형을 선택하면 화면에 재고 항목 목록이 표시된다.

HTML에 대해서는 Listing 5에 표시된 실제 웹 페이지에 필요한 HTML을 살펴본다.


Listing 5. 클라이언트에 대한 HTML

<body>    
   <div style="position:relative;left:0px;background-color:blue;margin:0px;">   
   <h2 align="center"><font color="#ffffff">FishinHole.com Web Service</font></h2></div>
   <table align="center" cellpadding="6px" cellspacing="6px" width="400" border="0">
      <tr>
         <td width="80" valign="center"><font color="black">
          Lure Type:</font></td>
         <td>
	  <select name="lureType" id="lureType" onchange="changeTypes()">
	   <option value="">-SELECT-</option>
	   <option value="trolling">Trolling</option>
	   <option value="casting">Casting</option>
	   <option value="other">Other</option>
	  </select>
         </td>
	 <td width="150"> </td>
         <tr>
          <td colspan="3">
            <div id="resultDiv"></div>
          </td>
       </tr> 
    </table>    
</body>

여기에는 특별히 복잡한 내용이 포함되어 있지 않다. trolling, casting 및 other라는 세 가지 미끼 유형이 포함된 단순한 드롭 다운 상자가 있다. 필자는 사용자가 새 미끼 유형을 선택하면 Ajax 요청을 호출하는 JavaScript 코드가 자동으로 실행되도록 onchange 속성을 사용한다.

또한 resultDiv div 요소가 있다는 것에도 유의한다. 이 요소에는 재고 목록이 표시된다.

테스트하기

HTML 및 JavaScript 코드를 해석하는 모든 플랫폼에 방금 작성한 HTML 페이지를 저장한다. Microsoft® Windows® 운영 체제를 사용하는 경우에는 하드 드라이브에 저장할 수 있다.

다음으로 웹 페이지에 액세스한다. 화면 중간에 드롭 다운이 표시된다. 현재 선택된 항목은 -SELECT-이다. 해당 항목을 Trolling으로 변경한다. 몇 초간 기다리면 세 가지 항목의 재고 목록이 화면에 표시된다. 축하한다. 테스트가 성공적으로 수행되었다.

문제가 발생하는 경우에는 url 변수가 적절하게 설정되어 있는지 확인한다. 또한 JavaScript 코드는 팝업 창에 설명이 포함된 예외를 보고할 수 있다. 이 예외는 잘못된 부분에 대한 단서를 제공한다.

결론

웹 서비스는 인터넷에 액세스하는 사용자에게 조작을 노출하는 강력한 수단이다. Ajax는 페이지를 새로 고치지 않고 디스플레이를 변경하여 웹 애플리케이션 사용자에게 풍부한 경험을 제공하는 수단이다. 두 가지를 함께 사용하여 분산 오브젝트 애플리케이션을 에뮬레이트하고 전문 인터페이스를 제공하는 강력한 웹 애플리케이션을 작성할 수 있다.



다운로드 하십시오

설명이름크기다운로드 방식
The client-side HTML file used in this articleclient.html_download.zip2KBHTTP
The Web service PHP file used in this articlewebservice.php_download.zip1KBHTTP

다운로드 방식에 대한 정보


참고자료

교육

제품 및 기술 얻기

토론

  • developerWorks 블로그를 통해 developerWorks 커뮤니티에 참여하자.

필자소개

Brian Carey는 Java 엔터프라이즈 애플리케이션의 아키텍처, 설계 및 구현을 전문으로 하는 정보 시스템 컨설턴트이다. Twitter(http://twitter.com/brianmcarey)에서 그의 글을 볼 수 있다.

잘못된 도움말 신고

부정사용 신고

감사합니다. 이 항목은 운영자가 관심을 표시했습니다.


잘못된 도움말 신고

부정사용 신고

제출실패 신고. 나중에 다시 실행해주세요.


디벨로퍼웍스 로그인


IBM ID가 필요하세요?
IBM ID를 잊으셨습니까?


비밀번호를 잊으셨습니까?
비밀번호 변경

developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


developerWorks에 처음 로그인하면 developerWorks프로파일이 생성됩니다.귀하의 프로파일에서 동의하신 내용이 공개되지만 이 사항은 언제든지 변경 가능합니다. 귀하의 성명(숨김으로 체크되어 있어도 표시됩니다)과 디스플레이 이름은 게시한 컨텐츠나 사이트 엑세스시 표시됩니다.

화면상에 보여지는 닉네임을 정하세요.

처음 developerWorks에 로그인할 때 프로파일이 작성되므로, 이를 위해 디스플레이 이름을 선택해야 합니다. 선택하신 디스플레이 이름은 developerWorks에 게시한 컨텐츠에 표시됩니다.

3글자 이상 31글자 이하의 길이로 사용 가능합니다. dW커뮤니티 내에서는 보안상 이메일주소를 제외한 다른 이름을 지정하셔야 합니다.

3개의 &이나 대쉬를 포함해주시고 31글자내로 제한해주세요.


developerWorks 이용 약관에 동의하시는 경우 제출을 클릭하십시오. 이용 약관.

 


아티클 순위

의견

static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=20
Zone=웹 개발, SOA와 웹서비스
ArticleID=499257
ArticleTitle=웹 서비스와 함께 Ajax 사용하기
publish-date=05182010
author1-email=careyb@triangleinformationsolutions.com
author1-email-cc=

태그

Help
검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오.

태그를 더 많이 보거나 적게 보기 위해 슬라이더 막대를 사용하십시오.

인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다.

내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.

검색 필드를 사용하여 My developerWorks 내에서 해당 태그가 사용된 모든 종류의 컨텐츠를 검색하십시오. 인기 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 최고 인기 태그를 보여줍니다. 내 태그는 특정 컨텐츠 존(예를 들어, 자바, 리눅스, WebSphere)의 귀하의 태그를 보여줍니다.