<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>빛을 담고 세상 넓히기 &#187; 라이브러리</title>
	<atom:link href="http://fantazic.com/archives/tag/%eb%9d%bc%ec%9d%b4%eb%b8%8c%eb%9f%ac%eb%a6%ac/feed" rel="self" type="application/rss+xml" />
	<link>http://fantazic.com</link>
	<description>마음의 빛으로 넓은 세상을 비추고 싶다. JAVA, 고양이, 사진들이 있는 곳.</description>
	<lastBuildDate>Tue, 27 Jul 2010 04:38:45 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>공용 라이브러리 만들기의 어려움</title>
		<link>http://fantazic.com/archives/23</link>
		<comments>http://fantazic.com/archives/23#comments</comments>
		<pubDate>Wed, 08 Feb 2006 02:49:23 +0000</pubDate>
		<dc:creator>따지크</dc:creator>
				<category><![CDATA[Software & Developer]]></category>
		<category><![CDATA[API]]></category>
		<category><![CDATA[라이브러리]]></category>

		<guid isPermaLink="false">http://fantazic.com/?p=23</guid>
		<description><![CDATA[프로그래밍을 한다는 것은 자기자신과 컴퓨터간의 대화인 경우가 많다. 프로그램 개발은 요구사항에 따라 컴퓨터가 바르게 동작하도록 언어의 규칙에 맞게 하나의 완성품을 만들어가는 과정이다.
그런데 이 과정에서 여러명의 개발자가 협업을 하게 되면 서로간의 코딩 규약을 지키고 일정을 맞추고 재사용성이 가능한 콤포넌트를 개발하는데 집중하게 된다.
더 나아가 팀내에서 공용으로 사용하게 되는 라이브러리를 개발하는 경우 신경 써야하는 것들이 늘어나고 다양한 언어와 [...]]]></description>
			<content:encoded><![CDATA[<p>프로그래밍을 한다는 것은 자기자신과 컴퓨터간의 대화인 경우가 많다. 프로그램 개발은 요구사항에 따라 컴퓨터가 바르게 동작하도록 언어의 규칙에 맞게 하나의 완성품을 만들어가는 과정이다.</p>
<p>그런데 이 과정에서 여러명의 개발자가 협업을 하게 되면 서로간의 코딩 규약을 지키고 일정을 맞추고 재사용성이 가능한 콤포넌트를 개발하는데 집중하게 된다.</p>
<p>더 나아가 팀내에서 공용으로 사용하게 되는 라이브러리를 개발하는 경우 신경 써야하는 것들이 늘어나고 다양한 언어와 환경을 고려해야 하는 상황에 직면하게 된다.</p>
<p><strong>최근 Ajax 관련된 공용 라이브러리를 만들고 있는데 정말 머리에 쥐나는 작업이다.</strong> prototype.js 기반으로 클라이언트 예제 파일과 asp로 작성된 서버쪽 예제를 작성하고 있다. asp용 JSON 라이브러리가 없기 때문에 XML parser 를 추가하고, DOM 객체를 다루는 예제 코드를 작성 중이다.</p>
<p>그냥 개인적으로 또는 같은 프로젝트 내에서만 사용한다면 좀 더 마음 편하게 작업할 수 있을텐데, 개발그룹내에서 공통으로 사용할 코드를 만든다니 생각할 것이 많아진다. <strong>최근 읽은 &#8216;TDD 개발 방법론&#8217;이나 &#8216;실용주의 프로그래머&#8217;의 영향 때문일까?</strong> 중복을 배제하고 가독성이 좋으며 독립된 형태로 만들어야 한다는 강박관념과 열심히 만들었지만 왠지 완성도가 떨어져 보이는 불안감이 계속된다. 그리고 결국 자신의 코드에 자신이 책임져야 한다는 무거운 압박.</p>
<p>아마도 이런 어려움을 겪는건 아직 내 실력과 경험이 부족하기 때문이 아닐까 싶다. 하지만 이런 경험을 통해 아키텍쳐로 발전해 갈 수 있을거라 생각한다. 역시 스트레스는 사람을 피곤하게 하지만 도전하지 않으면 발전도 없다. 계속해서 고민하고 완성도를 높여갈 수 밖에.</p>
<blockquote><p>완성이라는 것은 더 이상 더할 것이 없을 때가 아니라, 더 이상 빼낼 것이 없을 때 얻게 되는 것이다.<br />
- 생텍쥐페리Antoine de St. Exupery, [바람과 모래와 별들Wind, Sand, and Stars] 1939</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://fantazic.com/archives/23/feed</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>AJAX 개발자용 자료(2) &#8211; 라이브러리</title>
		<link>http://fantazic.com/archives/19</link>
		<comments>http://fantazic.com/archives/19#comments</comments>
		<pubDate>Thu, 12 Jan 2006 08:48:59 +0000</pubDate>
		<dc:creator>따지크</dc:creator>
				<category><![CDATA[Software & Developer]]></category>
		<category><![CDATA[Ajax]]></category>
		<category><![CDATA[라이브러리]]></category>

		<guid isPermaLink="false">http://fantazic.com/?p=19</guid>
		<description><![CDATA[AJAX 관련 라이브러리 : AJAX는 DHTML, CSS, XML, XMLHttpRequest, javascript 등의 기술이 합쳐진 기술의 집합체를 의미한다. 즉, AJAX를 사용한다는 것은 비동기적인 통신을 통한 정보의 전달과 화면의 부분적 전환 등으로 구체화 된다. 이 두가지 기술 즉, 정보의 전달과 화면 전환에 필요한 라이브러리를 소개한다.
1. JSON 라이브러리 : JSON(JavaScript Object Notation)은 텍스트 기반의 가벼운 데이타 전송 포맷이다. 값(문자, [...]]]></description>
			<content:encoded><![CDATA[<p><strong>AJAX 관련 라이브러리</strong> : AJAX는 DHTML, CSS, XML, XMLHttpRequest, javascript 등의 기술이 합쳐진 기술의 집합체를 의미한다. 즉, AJAX를 사용한다는 것은 비동기적인 통신을 통한 정보의 전달과 화면의 부분적 전환 등으로 구체화 된다. 이 두가지 기술 즉, 정보의 전달과 화면 전환에 필요한 라이브러리를 소개한다.</p>
<p><strong>1. JSON 라이브러리</strong> : <a href="http://www.crockford.com/JSON/">JSON(JavaScript Object Notation)</a>은 텍스트 기반의 가벼운 데이타 전송 포맷이다. 값(문자, 숫자, boolean, null), 객체, 배열 세 가지 종류의 형태로 데이타를 전달할 수 있고, 웹 페이지에서 사용하는 json.js을 비롯해서 다양한 언어에서 사용가능한 라이브러리를 제공해주고 있다.</p>
<p>간단한 사용예를 보면 다음과 같다.</p>
<p><strong>1) AJAX를 통해서 서버에 데이타를 보내는 경우</strong></p>
<pre>function&nbsp;getXmlHttpRequest()&nbsp;{
&nbsp;if(window.XMLHttpRequest)
&nbsp;&nbsp;return&nbsp;new&nbsp;XMLHttpRequest();
&nbsp;else
&nbsp;&nbsp;return&nbsp;new&nbsp;ActiveXObject("Microsoft.XMLHTTP");
}

function&nbsp;reqData()&nbsp;{
&nbsp;var&nbsp;info&nbsp;=&nbsp;{};
&nbsp;info['name']&nbsp;=&nbsp;'fantazic';
&nbsp;info['url']&nbsp;=&nbsp;'http://fantazic.com';
&nbsp;var&nbsp;encoded;

&nbsp;try&nbsp;{
&nbsp;&nbsp;encoded&nbsp;=&nbsp;JSON.stringify(info);
&nbsp;&nbsp;//객체를 저장하는 경우
&nbsp;&nbsp;//{"name":"fantazic","url":"http://fantazic.com"}
&nbsp;}&nbsp;catch(e)&nbsp;{
&nbsp;&nbsp;alert(e);
&nbsp;&nbsp;return;
&nbsp;}

&nbsp;var&nbsp;xmlhttp&nbsp;=&nbsp;getXmlHttpRequest();
&nbsp;xmlhttp.open("POST",&nbsp;"ajax_json.jsp",&nbsp;true);
&nbsp;xmlhttp.setRequestHeader('Content-Type', \\
&nbsp;'application/x-www-form-urlencoded');
&nbsp;xmlhttp.onreadystatechange&nbsp;=&nbsp;function()&nbsp;{
&nbsp;&nbsp;if(xmlhttp.readyState&nbsp;==&nbsp;4)&nbsp;{
&nbsp;&nbsp;&nbsp;if(xmlhttp.status&nbsp;==&nbsp;200)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;parsedObject&nbsp;=&nbsp;JSON.parse(xmlhttp.responseText);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if(parsedObject.result&nbsp;==&nbsp;true)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert('success');
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(parsedObject.reason);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch(e)&nbsp;{
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;alert(e);
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return;
&nbsp;&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;&nbsp;}
&nbsp;&nbsp;}
&nbsp;}

&nbsp;xmlhttp.send('info='&nbsp;+&nbsp;encoded);
}</pre>
<p><strong>2) 서버쪽에서 데이타 처리 및 응답부분 (JAVA)</strong></p>
<pre>try&nbsp;{
&nbsp;String&nbsp;info&nbsp;=&nbsp;request.getParameter("info");
&nbsp;JSONObject&nbsp;getObj&nbsp;=&nbsp;new&nbsp;JSONObject(info);
&nbsp;JSONObject&nbsp;returnObj&nbsp;=&nbsp;new&nbsp;JSONObject();

&nbsp;if(getObj.get("name").equals("fantazic") \\
&nbsp;&#038;&&nbsp;getObj.get("url").equals("http://fantazic.com"))&nbsp;{
&nbsp;&nbsp;returnObj.put("result",&nbsp;true);
&nbsp;}&nbsp;else&nbsp;{
&nbsp;&nbsp;returnObj.put("result",&nbsp;false);
&nbsp;&nbsp;returnObj.put("reason",&nbsp;"입력내용이&nbsp;잘못됐습니다.");
&nbsp;}

&nbsp;response.getWriter().print(returnObj.toString());
}&nbsp;catch(Exception&nbsp;e)&nbsp;{
&nbsp;e.printStackTrace();
}</pre>
<p>JSON을 사용하면 직관적인 데이타 구성이 가능하고, 브라우져별 XMLParser 차이에 영향을 받지 않는 장점이 있다. JSON은 <a href="http://teamplay.cyworld.nate.com">싸이월드 팀플</a>의 참여자 정보, <a href="channy.creation.net/wp/data/channy/ajaxkoreainternetcom.pdf">다음 메일의 주소록</a> 등에서 이미 많이 사용되고 있다.</p>
<p><strong>2. Rico 라이브러리</strong> : AJAX를 사용하는 경우 AJAX를 이용해 비동기적 통신을 하는 것보다 DHTML과 DOM을 사용해 동적으로 페이지를 구성하는데 어려움을 겪는 경우가 많다. 웹표준을 지키며 편리한 동적 UI를 쉽게 만들 수 있는 다양한 라이브러리가 공개되어 있는데 그중에서 <a href="http://www.openrico.org/rico/home.page">Rico</a>를 소개한다.</p>
<p>오픈 소스로 제공되는 Rico 라이브러리를 다운받은 후 사용할 수 있다. <a href="http://www.openrico.org/rico/demos.page">데모</a>에서 볼 수 있는 많은 기능 중 Drag&#038;Drop 기능과 Live-Grid Search 기능을 예로 들어 살펴보겠다. (자세한 기능은 <a href="http://www.openrico.org/rico/docs.page">메뉴얼</a>을 참고하면 된다.)</p>
<p><strong>1) Drag&#038;Drop</strong> : 구글 개인화 페이지 등에서 아이템을 마우스 드래그로 옮길 때 사용되는 기술로, Rico에서는 AjaxEngine 을 제공해준다. AjaxEngine을 통해 XML 형태로 데이타를 전달할 수 있고, html code를 지정된 target 영역에 대체할 수 있다. Rico 라이브러리는 javascript의 Class, <a href="http://openframework.or.kr/JSPWiki/Wiki.jsp?page=QuickGuideToPrototype">prototype.js</a> 기능을 사용하는데, Rico에서 사용된 Class를 확장해서 사용할 수 있다.</p>
<pre>//Drag 가능한 영역을 추가한다.
function createDraggables(val) {
&nbsp;for ( var i = 1 ; i <= val; i++ ) {
&nbsp;&nbsp;dndMgr.registerDraggable( \\
&nbsp;&nbsp;new CustomDraggable($('photo'+i)));
&nbsp;}
}

//Drop 가능한 영역을 추가한다.
function createDropZones(val) {
&nbsp;for ( var i = 1 ; i <= val; i++ ) {
&nbsp;&nbsp;dndMgr.registerDropZone( \\
&nbsp;&nbsp;new CustomDropZone($('photo'+i)));
&nbsp;}
}

//Drag 시작할 때 처리하는 부분
CustomDraggable.prototype = ( \\
new Rico.Draggable()).extend( {
....
}

//Drop 됐을 때 처리하는 부분
CustomDropZone.prototype = ( \\
new Rico.Dropzone()).extend( {
....
}</pre>
<p><strong>2) Live-Grid Search</strong> : 기존의 숫자로 된 페이징을 스크롤 기능을 이용해 구현한 기능이다. Rico.LiveGrid Class를 사용해 데이타 요청을 하고 서버에서 XML 형태로 데이타를 전송한다. 보여지는 데이타 전/후의 일정 데이타를 캐쉬하는 기능도 제공해준다.</p>
<p>Rico 라이브러리를 사용할 경우 XML에 html code를 넣어서 지정한 특정 요소의 내용 전환이 가능하다. 이 경우 html tag 는 XML 형식에 맞춰야 한다. (예 &lt;br /&gt;)</p>
<p>위에서 소개한 라이브러리 외에도 다양한 공개 라이브러리가 존재하니 개발에 활용한다면 AJAX 적용에 많은 도움이 될 것이다.</p>
]]></content:encoded>
			<wfw:commentRss>http://fantazic.com/archives/19/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
