<?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://kiipos.delimount.net/author/kipos/feed" rel="self" type="application/rss+xml" />
	<link>http://kiipos.delimount.net</link>
	<description>춤을 추는 거야. 음악이 계속되는 한.</description>
	<lastBuildDate>Fri, 07 Oct 2011 15:56:11 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.1</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>잡스 그리고 나</title>
		<link>http://kiipos.delimount.net/1355</link>
		<comments>http://kiipos.delimount.net/1355#comments</comments>
		<pubDate>Thu, 06 Oct 2011 18:44:58 +0000</pubDate>
		<dc:creator>키포스</dc:creator>
				<category><![CDATA[미분류]]></category>
		<category><![CDATA[잡스]]></category>

		<guid isPermaLink="false">http://kiipos.delimount.net/?p=1355</guid>
		<description><![CDATA[잡스에 대한 첫 기억은 초등학교 다닐 때인 듯하다. 당시 나는 아이큐2000이라는 MSX2 기종을 가지고 있었지만 애플2이라는 컴퓨터를 동경했다. 잡스와 워즈니악이라는 사람이 차고에서 만든 PC인데 타자기 같이 생긴 본체 뚜껑을 열면 확장 카드를 꽂을 수 있었다. 롬팩만 꽂던 나에겐 신선한 충격이었다. 하지만 애플2을 갖고 싶었던 가장 큰 이유는 울티마라는 게임 때문이었다. 울티마는 RPG의 레퍼런스 같은 존재로 [...]]]></description>
			<content:encoded><![CDATA[<p>잡스에 대한 첫 기억은 초등학교 다닐 때인 듯하다. 당시 나는 아이큐2000이라는 MSX2 기종을 가지고 있었지만 애플2이라는 컴퓨터를 동경했다. 잡스와 워즈니악이라는 사람이 차고에서 만든 PC인데 타자기 같이 생긴 본체 뚜껑을 열면 확장 카드를 꽂을 수 있었다. 롬팩만 꽂던 나에겐 신선한 충격이었다. 하지만 애플2을 갖고 싶었던 가장 큰 이유는 울티마라는 게임 때문이었다. 울티마는 RPG의 레퍼런스 같은 존재로 당시 게이머들의 로망이었다. 하지만 애플2는 잡지에서 보는 걸로 만족해야만 했다. 아이큐2000도 만만치 않은 가격이었는데 애플2를 또 사달라고 하는 건 염치없는 행동이었다.</p>
<p>아이큐2000으로 열심히 게임하는 동안 몇년이 흘렀고 잡지에서 또다시 잡스를 만날 수 있었다. 잡스는 애플에서 쫓겨났고 다시 회사를 만들었다. 그리고 그곳에서 넥스트(NeXT)라는 컴퓨터를 만들었는데 검정색의 세련된 컴퓨터는 상상을 초월하는 가격이었다. 당시 나에게 넥스트 컴퓨터는 건담과 같이 비현실적인 존재였다.</p>
<p>그로부터 몇년 후 나는 다시 엄마를 졸라 XT를 장만했다. 아이큐2000과 달리 이 XT는 부팅하면 DOS 콘솔 화면이 떴다. 명령어를 하나하나 입력하다 보면 뭔가 전문가가 된 듯한 느낌이 들었다. 하지만 하는 거라고는 게임과 베이직으로 짠 가계부가 전부였다. 그래도 허큘래스 그래픽과 8비트 애드립 사운드를 들으면서 즐겼던 폴리스 퀘스트와 인디아나 존스는 정말 재미있었다.</p>
<p>나름 XT에 만족하면서 살고 있었는데 친구 봄길이네 집에 놀러가서 다시 한번 더 충격을 받았다. 봄길네 방엔 일반인이 흔히 접할 수 없는 매킨토시라는 놈이 있었다. 컬러 모니터에서 연출되는 화려한 윈도우 UI 그리고 게임들! 잡스가 만든 컴퓨터를 오랫동안 만져보는 건 처음이었다. 놀라운 경험이었다. 봄길이가 엄청 부러웠다. 이런 멋진 컴퓨터를 가지고 있다니!</p>
<p>어느덧 고등학생이 되었다. 잠깐잠깐 게임을 즐기긴 했지만 입시 때문에 컴퓨터는 점점 멀어져 갔다. 잡스란 존재도 자연스럽게 잊혀졌다. 그리고 무사히 컴퓨터 공학과에 입학했고 공돌이가 되었다. 용산에 가서 부품을 사고 집에서 열심히 조립한 후 DOS와 윈도우즈 3.0을 깔았다. 그리고 몇달 후 윈도우즈 95를 접했다. 윈도우즈 3.0과는 차원이 달랐다. 나는 마이크로소프트에 열광했고 빌게이츠는 나의 영웅이었다.</p>
<p>성적이 좋지 않았지만 졸업을 하고 엔씨소프트에 입사했다. 당시 엔씨소프트는 MS 친화적인 기업이었다. 회사의 모든 컴퓨터에는 윈도우즈 XP가 깔려있었다. 소문에 의하면 다른 회사의 디자이너들은 작업할 때 맥을 쓴다고 들었지만 직접 눈으로 확인하진 못했다 ㅎ.</p>
<p>6년 후 나는 엔씨를 나와서 델리마운트라는 회사를 만들었다. 많은 일들이 있었다. 2번의 실패 후 회사를 유지하기 위해서 용역 개발을 시작했다. 그리고 엄청난 갑을 만났다. 6개월짜리 프로젝트는 1년 2개월 넘게 진행되었고 잔금도 받지 못한 체 소송에 휘말렸다. 함께한 동료들은 각자 살 길을 찾아 떠났고 나는 혼자 남게 되었다. 미친 듯이 책을 읽었다. 그렇게 몇달이 흐르던 중 아이폰이 한국에 출시되었다. 경제적으로 힘든 상황이라 잠시 망설였지만 할부라는 달콤함 빠져 결국 아이폰을 지르고 말았다. 그리고 새로운 세계를 만났다.</p>
<p>때마침 <a href="http://twitter.com/#!/kzerse">절스</a>군이 돌아왔고 나는 다시 꿈을 꾸었다. 이대로 끝낼 수는 없었기에 아이폰에 실낱같은 희망을 걸었다. 이 모든 것이 잡스가 나에게 준 선물처럼 느껴졌다. 경제적으로 어려운 상황이었기에 또다시 엄마의 도움으로 2008년형 아이맥 24인치 모델을 리퍼비시로 장만하게 된다. 아이맥은 간지 그 자체였고 옆에 있는 PC들은 볼품없이 느껴졌다. 처음엔 생소한 OS X의 UI에 불편했지만 조금씩 익숙해져 갔다. 그리고 어느 순간부터 구석구석 묻어있는  잡스의 디테일이 느껴졌다. 아&#8230; 잡스는 이런 사람이구나.</p>
<p>Objective-C와 XCode는 생소했지만 재미있었다. 한 자동차 수입 업체의 앱을 개발하면서 실전 경험을 쌓았다. 그리고 4월부터 리피 개발을 시작했고 같은 해 8월에 앱스토어 등록 신청을 했다. 리피는 실험적인 프로젝트였다. 몇년 만에 다시 시작하는 서비스 개발은 많은 용기와 경험이 필요했다. 새로운 기술과 트렌드를 적용하고 피드백을 받으면서 서비스 개발과 운영에 조금씩 익숙해져 갔다. 그러는 동안 <a href="http://twitter.com/#!/wizdear">미남1호</a>와 <a href="http://twitter.com/#!/bear_sun">곰썬</a>이 합류했고 2011년 10월 커플로그라는 두번째 서비스의 오픈을 앞두고 있다. 그리고 앞으로 더 많은 사람들이 함께할 것이다.</p>
<p>개인적으로 잡스가 특별한 이유는 그 사람의 스타일 때문이다. 잡스는 매우 예민하고 자유로운 사람이다. 몇해 전만 해도 이런 성격은 CEO로 부적합하다고 했다. 하지만 잡스는 성공했고 지금 애플은 최고다. 그리고 애플이 지금의 위치까지 올라갈 수 있었던 건 잡스가 있었기 때문이다. (물론 잡스 혼자만의 노력은 아니다) 비록 내가 있는 곳이 캘리포니아는 아니지만 잡스는 나의 영웅이자 롤모델이다. 그리고 언제가 잡스의 빈자리를 채울 수 있는 사람이 되기를 오늘도 꿈꾼다.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=http://kiipos.delimount.net/?p=1355+%EC%9E%A1%EC%8A%A4+%EA%B7%B8%EB%A6%AC%EA%B3%A0+%EB%82%98+" title="Post to Twitter"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro4.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://kiipos.delimount.net/1355&amp;title=%EC%9E%A1%EC%8A%A4+%EA%B7%B8%EB%A6%AC%EA%B3%A0+%EB%82%98" title="Post to Delicious"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro4.png" alt="Post to Delicious" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://kiipos.delimount.net/1355/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>리피 제작 의도 &#8211; 채널이란 무엇인가?</title>
		<link>http://kiipos.delimount.net/1256</link>
		<comments>http://kiipos.delimount.net/1256#comments</comments>
		<pubDate>Tue, 10 Aug 2010 16:14:42 +0000</pubDate>
		<dc:creator>키포스</dc:creator>
				<category><![CDATA[미분류]]></category>
		<category><![CDATA[liipii]]></category>
		<category><![CDATA[SNS]]></category>
		<category><![CDATA[리피]]></category>
		<category><![CDATA[미투데이]]></category>
		<category><![CDATA[소셜]]></category>
		<category><![CDATA[아이폰]]></category>
		<category><![CDATA[채널]]></category>
		<category><![CDATA[채팅]]></category>
		<category><![CDATA[트위터]]></category>

		<guid isPermaLink="false">http://kiipos.delimount.net/?p=1256</guid>
		<description><![CDATA[정말 오래간만에 블로깅합니다. 트위터나 미투데이를 하면서 블로그에 소홀해진 점도 있지만 지난 4월부터 저희 회사에서 만든 리피(liipii)라는 서비스 개발에 집중하다보니 블로그에 글을 적을 시간이 부족했습니다. 사실 리피를 개발하면서 아이폰 및 레일스 관련 글을 몇개 적긴했지만 내용도 부족하고 정리도 안된 상태라 임시 저장 상태로 봉인해버렸습니다 ;;
리피는 채널(channel) 중심의 소셜 서비스(SNS)입니다. 기존의 트위터나 미투데이와 같은 소셜 서비스들이 개인 [...]]]></description>
			<content:encoded><![CDATA[<p>정말 오래간만에 블로깅합니다. 트위터나 미투데이를 하면서 블로그에 소홀해진 점도 있지만 지난 4월부터 저희 회사에서 만든 <a href="http://blog.liipii.net/1"><strong>리피(liipii)</strong></a>라는 서비스 개발에 집중하다보니 블로그에 글을 적을 시간이 부족했습니다. 사실 리피를 개발하면서 아이폰 및 레일스 관련 글을 몇개 적긴했지만 내용도 부족하고 정리도 안된 상태라 임시 저장 상태로 봉인해버렸습니다 ;;</p>
<p><strong>리피는 채널(channel) 중심의 소셜 서비스(SNS)입니다.</strong> 기존의 트위터나 미투데이와 같은 소셜 서비스들이 개인 중심이라면 리피는 채널 중심입니다. 현재 리피는 <a href="http://itunes.apple.com/kr/app/id384880871?mt=8">아이폰 앱</a>으로 먼저 출시되었으며 빠른 시일 내에 웹 및 모바일 웹 버전을 출시할 예정입니다.</p>
<p>요즘은 많은 분들이 트위터나 미투데이를 사용하지만 아직까지 트위터나 미투데이를 어려워 하시는 분들도 있습니다. 트위터나 미투데이의 가장 큰 단점은 처음 가입했을 때 별로 할 일이 없다는 점입니다. 구독자(follower)나 친구가 없으니 당연히 혼자 놀기를 할 수밖에 없습니다. 많은 경우 혼자 놀다 흥미를 잃어버리곤 합니다. 그러나 소셜시대라는 대세를 거스를 수 없다면 팔로우(follow) 또는 친구 신청 열심히 해야 합니다. 모든 일은 비용이 들기 마련이지만 당장 누군가와 대화하고 싶은데 그럴 수 없다는 것은 매우 안타까운 상황입니다. 바로 이 점이 처음 리피를 기획하게 된 이유였습니다.</p>
<p style="text-align:center"><a href="http://kiipos.delimount.net/wp-content/uploads/2010/08/twitter.png"><img src="http://kiipos.delimount.net/wp-content/uploads/2010/08/twitter.png" alt="만들지 얼마되지 않아 썰렁한 리피 트위터" title="만들지 얼마되지 않아 썰렁한 리피 트위터" width="270" /></a> <a href="http://kiipos.delimount.net/wp-content/uploads/2010/08/me2day.png" style="margin-left:20px;"><img src="http://kiipos.delimount.net/wp-content/uploads/2010/08/me2day.png" alt="만들지 얼마되지 않아 썰렁한 리피 미투데이" title="만들지 얼마되지 않아 썰렁한 리피 미투데이" width="270" /></a></p>
<p>처음 만나는 사람들이 쉽게 친해질 수 있는 방법은 공통의 관심사를 찾는 것입니다. 우리는 흔히 모르는 사람(이성이든 동성이든)을 처음 만난 경우 이것저것 내용을 바꿔어 가면서 대화를 하다가 공통으로 좋아하는 주제가 나오면 해당 이야기를 이어가면서 서로 동질감을 느끼고 호감으로 발전해갑니다. 이런 패턴을 관찰하면서 채널을 이란 개념을 만들었습니다. 채널이란 특정 주제에 대해서 대화할 수 있는 공간으로 채팅의 채팅방에서 그 모티브를 가져왔습니다. 리피 안에 다양한 주제의 채널이 열려있고 누구든지 그리고 언제든지 관심이 가는 채널만 찾아 들어가면 공통의 관심사를 가진 사람과 바로 대화할 수 있을 것이라고 생각했습니다.</p>
<p>채팅은 실시간 대화인 반면에 트위터나 미투데이와 같은 소셜 서비스는 실시간이라고 보기는 어렵습니다. 물론 블로그와 같은 서비스와 비교해서 실시간 성이 강하며 스마트 폰의 앱들은 알림(push) 기능을 지원하기 때문에 거의 실시간에 가깝다고 볼 수 있습니다. 실시간 성이란 결국 속도감을 의미하며 속도감은 트위터와 같은 단문 대화 서비스의 핵심적인 요소입니다. 그럼에도 불구하고 트위터나 미투데이는 정확한 의미에서 실시간 서비스가 아닙니다. 그리고 실시간이라고 무조건 좋은 것은 아닙니다. 실시간이라는 것은 많은 집중을 요구하기 때문에 그만큼 사용 부담이 크다는 것을 의미하기도 합니다. 사용 부담이 크다는 것은 결과적으로 사용 빈도가 떨어뜨리는 요인이 됩니다.</p>
<p>아무튼 채팅의 채널이라는 개념을 소셜 서비스에 맞게 바꿀 필요가 있었습니다. 우선 채팅의 입장(join)이라는 개념을 빼버렸습니다. 채널이라는 것이 앱 또는 웹 상에 완전히 열려 있기 때문에  폐쇄적이고 번거로운 입장이라는 개념은 필요하지 않았습니다. 대신 구독(follow) 개념을 추가해서 관심 있는 채널의 대화 내용을 모아볼 수 있도록 기획하였습니다. 마찬가지로 채널이 열려 있기 때문에 누구든지 대화를 올릴 수 있도록 했습니다. 극단적인 경우 대화를 올리지만 구독은 하지 않는 경우도 허용하였습니다.</p>
<p style="text-align:center"> <a href="http://blog.liipii.net/attach/1/6550969141.png"><img alt="리피 채널 목록" src="http://blog.liipii.net/attach/1/6550969141.png" title="리피 채널 목록" class="alignnone" width="270" /></a> <a href="http://blog.liipii.net/attach/1/1090016472.png" style="margin-left:20px;"><img alt="나의 리피 (구독 채널 모아보기)" src="http://blog.liipii.net/attach/1/1090016472.png" title="나의 리피 (구독 채널 모아보기)" class="alignnone" width="270" /></a> </p>
<p>그리고 채널에 유효 시간이라는 개념을 추가하였습니다. 채팅의 채널은 마지작 참여자가 퇴장(quit)하는 순간 채널이 종료됩니다. 하지만 리피에는 입장이라는 개념이 없기 때문에 퇴장이라는 개념 또한 없으며 결국 채널은 계속 지속될 수 밖에 없습니다. 채널이 계속 지속되는 경우 실시간 성이 떨어지고 결국 속도감도 떨어질 수 밖에 없다고 판단하였습니다. 그래서 채널을 만든 시점부터 24시간 동안만 대화를 올릴 수 있도록 기획했습니다. 24시간이 지나면 더이상 대화를 올릴 수 없기 때문에 최신 대화 순으로 보여지는 타임라인 상에서 해당 채널의 대화는 더이상 노출되지 않게 됩니다. 물론 채널은 열려있기 때문에 언제든지 이전 채널을 찾아들어갈 수 있습니다.</p>
<p>지금까지 채널의 제작 의도에 대해서 정리해보았습니다. 개발하면서 이것거것 고민을 많이 했기 때문에 할 말은 많지만 글이 길어지면 적는 사람도 읽는 사람도 힘들어지기 때문에 이쯤에서 마무리하려 합니다. 아직 못다한 얘기는 다른 주제로 다시 포스팅하도록 하겠습니다.</p>
<p>이 글을 읽는 동안 리피에 대해서 관심이 생기셨다면 꼭! 리피를 써보시기 바랍니다. <a href="http://itunes.apple.com/kr/app/id384880871?mt=8">리피는 아이폰 앱스토어에서 다운받으실 수 있습니다.</a> 만약 아이폰이 없으시다면 조금만 기다려 주시기 바랍니다. 가능한 빨리 웹 및 모바일 웹 버전을 출시하도록 하겠습니다.</p>
<p>더불어 <a href="http://blog.liipii.net/2">리피 아이폰 앱 등록 기념 이벤트</a>가 진행중입니다. 많은 참여 부탁드립니다~</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=http://bit.ly/apIKBl+%EB%A6%AC%ED%94%BC+%EC%A0%9C%EC%9E%91+%EC%9D%98%EB%8F%84+%E2%80%93+%EC%B1%84%EB%84%90%EC%9D%B4%EB%9E%80+%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%3F+" title="Post to Twitter"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro4.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://kiipos.delimount.net/1256&amp;title=%EB%A6%AC%ED%94%BC+%EC%A0%9C%EC%9E%91+%EC%9D%98%EB%8F%84+%E2%80%93+%EC%B1%84%EB%84%90%EC%9D%B4%EB%9E%80+%EB%AC%B4%EC%97%87%EC%9D%B8%EA%B0%80%3F" title="Post to Delicious"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro4.png" alt="Post to Delicious" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://kiipos.delimount.net/1256/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>프로그래머들이여, 캐치볼을 해라!</title>
		<link>http://kiipos.delimount.net/1175</link>
		<comments>http://kiipos.delimount.net/1175#comments</comments>
		<pubDate>Mon, 22 Mar 2010 02:08:33 +0000</pubDate>
		<dc:creator>키포스</dc:creator>
				<category><![CDATA[미분류]]></category>
		<category><![CDATA[소통]]></category>
		<category><![CDATA[익스트림프로그래밍]]></category>
		<category><![CDATA[캐치볼]]></category>
		<category><![CDATA[프로그래머]]></category>

		<guid isPermaLink="false">http://kiipos.delimount.net/?p=1175</guid>
		<description><![CDATA[요즘 다른 회사의 프로그래머와 협업할 일이 있어서 작업을 같이 진행하고 있는데 결과물을 보면 참 한심스럽다. 그 사람의 프로그래밍 능력도 문제지만 더 큰 문제는 대화 능력인 듯 하다. 요구 사항이 전달되지 않아 결국 제멋대로 넘어온 결과물을 우리 쪽에서 다시 맞추는 작업할 수 밖에 없다.
흔히들 프로그래머들이 소통 능력이 떨어진다고 한다. 기획자나 디자이너는 작업 흐름 상 자신의 작업이 [...]]]></description>
			<content:encoded><![CDATA[<p>요즘 다른 회사의 프로그래머와 협업할 일이 있어서 작업을 같이 진행하고 있는데 결과물을 보면 참 한심스럽다. 그 사람의 프로그래밍 능력도 문제지만 더 큰 문제는 대화 능력인 듯 하다. 요구 사항이 전달되지 않아 결국 제멋대로 넘어온 결과물을 우리 쪽에서 다시 맞추는 작업할 수 밖에 없다.</p>
<p>흔히들 프로그래머들이 소통 능력이 떨어진다고 한다. 기획자나 디자이너는 작업 흐름 상 자신의 작업이 끝나면 다른 사람에게 자신의 작업물을 넘겨주고 자신의 작업물이 최종 결과물에 잘 반영될 수 있도록 뒷 사람에게 소통을 시도한다. 그러나 프로그래머는 최종 결과물을 만드는 사람들이다(물론 그 뒤에 QA가 있기는 하지만 QA는 결과물을 확인할 뿐이지 제품을 만들지는 않는다). 그래서 프로그래머들은 상대적으로 소통의 필요성을 덜 느끼며 결국 다른 작업자들 보다 소통 능력이 떨어진다.</p>
<p>그러나 모든 프로그래머들의 소통 능력이 떨어지는 것은 아니다. 익스트림 프로그래밍(XP)에서는 프로그래머의 소통 능력을 매우 중요하게 생각한다. 고객과 개발자 간의 소통 능력 뿐만 아니라 프로그래머 간의 소통 능력에 대해서도 매우 중요하게 다루고 있다. 우리 회사에서도 짝-프로그래밍(pair programming)을 하기 때문에 프로그래머의 소통 능력을 매우 중요하게 생각한다. 나아가 짝-프로그래밍을 통해서 프로그래머들의 소통 능력이 많이 향상되고 있다.</p>
<p>대부분의 프로젝트라는 것이 여러 사람의 공동 작업이고 공동 작업에서 가장 중요한 것은 소통이다. 프로젝트 팀 구성원들 간에 얼마나 소통이 원활하냐에 따라 프로젝트 진행 및 결과가 결정된다.</p>
<p>소통을 잘 하는 방법은 간단하다. 잘 듣고 잘 말하면 된다. 우선 상대방이 전달하려는 내용을 잘 들어야 한다. 상대방의 생각을 충분히 이해한 다음 정리된 자신의 생각을 상대방에서 말하면 된다. 우리 팀은 이것을 야구의 <strong>캐치볼</strong>에 비유하곤 한다. 캐치볼은 2명(일반적으로)이 플레이어가 하나의 공을 주고 받는 행동이다. 공이 하나이기 때문에 내가 공을 받아야 상대방에게 공을 던질 수 있다. 대화도 마찬가지이다. 내가 나의 생각을 말하기 위해서는 상대방의 생각을 들어야 한다.</p>
<p>그리고 공을 던질 때엔 상대방의 가슴을 향해서 던진다. 상대방이 다음 동작을 잘 이어갈 수 있도록 하기 위한 배려이다. 대화도 마찬가지이다. 내가 하고 싶은 말을 아무렇게나 하는 것이 아니라 상대방이 잘 알아들을 수 있도록 최대한 배려해서 말해야 한다. 그러기 위해서 말하기 전에 듣는 사람의 입장을 생각해봐야 한다.</p>
<p>끝으로 상대방이 던진 공이 내 가슴을 향해 날아오지 않으면 내가 움직여야 한다. 상대방이 가슴을 향해서 던지려 해도 사람이기 때문에 원하는 곳을 공이 날아오지 못할 때가 많다. 특히 초보자의 경우엔 더욱 그러하다. 그래서 공을 받는 사람이 움직여야 한다. 만약 움직이지 않으면 캐치볼은 중단된다. 대화도 비슷한다. 상대방의 하는 말이 자신이 것이 아닐 때 감정 상하지 않고 상대방의 생각을 이해하려고 노력해야 한다. 그리고 대화를 계속 이어나아가야 한다.</p>
<p>요즘은 프로그래머들이 블로그나 트위터, 미투데이에서 많은 대화를 시도하고 있다. 하지만 아직까지 내가 경험한 프로그래머 중에는 소통 능력이 떨어지는 사람들이 많다. 인간은 혼자 살 수 없듯이 프로젝트도 혼자할 수 없다.</p>
<p>프로그래머들이여, 오늘부터 캐치볼을 해라!</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=http://bit.ly/dywFdT+%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EB%93%A4%EC%9D%B4%EC%97%AC%2C+%EC%BA%90%EC%B9%98%EB%B3%BC%EC%9D%84+%ED%95%B4%EB%9D%BC%21+" title="Post to Twitter"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro4.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://kiipos.delimount.net/1175&amp;title=%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%A8%B8%EB%93%A4%EC%9D%B4%EC%97%AC%2C+%EC%BA%90%EC%B9%98%EB%B3%BC%EC%9D%84+%ED%95%B4%EB%9D%BC%21" title="Post to Delicious"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro4.png" alt="Post to Delicious" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://kiipos.delimount.net/1175/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone, UITableViewCell에 텍스트 설정하기</title>
		<link>http://kiipos.delimount.net/1161</link>
		<comments>http://kiipos.delimount.net/1161#comments</comments>
		<pubDate>Tue, 16 Mar 2010 06:19:12 +0000</pubDate>
		<dc:creator>키포스</dc:creator>
				<category><![CDATA[미분류]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[아이폰]]></category>

		<guid isPermaLink="false">http://kiipos.delimount.net/?p=1161</guid>
		<description><![CDATA[UITableViewCell의 setText 메소드는 아이폰 OS 3.0부터는 비권장(deprecated)하고 있습니다. 따라서 아래의 코드는 3.0 이상인 경우 컴파일은 되지만 경고(warning)이 발생합니다.

1
2
3
UITableViewCell* cell;
// ...
&#91; cell setText: @&#34;Hello&#34; &#93;;

3.0부터는 textLabel 메소드로부터 반환 받은 UILabel 객체에 텍스트를 설정하도록 변경되었습니다.

1
2
3
4
UITableViewCell* cell;
// ...
UILabel* label = &#91; cell textLabel &#93;;
&#91; label setText: @&#34;Hello&#34; &#93;;

이 경우 버전 2.1에서는 컴파일 오류가 발생합니다. 하지만 국내에 출시된 아이폰의 [...]]]></description>
			<content:encoded><![CDATA[<p><a href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableViewCell_Class/Reference/Reference.html">UITableViewCell</a>의 setText 메소드는 아이폰 OS 3.0부터는 비권장(deprecated)하고 있습니다. 따라서 아래의 코드는 3.0 이상인 경우 컴파일은 되지만 경고(warning)이 발생합니다.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;">UITableViewCell<span style="color: #002200;">*</span> cell;
<span style="color: #11740a; font-style: italic;">// ...</span>
<span style="color: #002200;">&#91;</span> cell setText<span style="color: #002200;">:</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Hello&quot;</span> <span style="color: #002200;">&#93;</span>;</pre></td></tr></table></div>

<p>3.0부터는 <a href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UITableViewCell_Class/Reference/Reference.html#//apple_ref/occ/instp/UITableViewCell/textLabel">textLabel</a> 메소드로부터 반환 받은 <a href="http://developer.apple.com/iphone/library/documentation/UIKit/Reference/UILabel_Class/Reference/UILabel.html#//apple_ref/doc/c_ref/UILabel">UILabel</a> 객체에 텍스트를 설정하도록 변경되었습니다.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;">UITableViewCell<span style="color: #002200;">*</span> cell;
<span style="color: #11740a; font-style: italic;">// ...</span>
UILabel<span style="color: #002200;">*</span> label <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> cell textLabel <span style="color: #002200;">&#93;</span>;
<span style="color: #002200;">&#91;</span> label setText<span style="color: #002200;">:</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;Hello&quot;</span> <span style="color: #002200;">&#93;</span>;</pre></td></tr></table></div>

<p>이 경우 버전 2.1에서는 컴파일 오류가 발생합니다. 하지만 국내에 출시된 아이폰의 경우 3.1부터 시작하기 때문에 하위 호환 문제는 크게 신경쓰지 않아도 될 듯 합니다. </p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=http://bit.ly/c1mFhT+iPhone%2C+UITableViewCell%EC%97%90+%ED%85%8D%EC%8A%A4%ED%8A%B8+%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0+" title="Post to Twitter"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro4.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://kiipos.delimount.net/1161&amp;title=iPhone%2C+UITableViewCell%EC%97%90+%ED%85%8D%EC%8A%A4%ED%8A%B8+%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0" title="Post to Delicious"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro4.png" alt="Post to Delicious" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://kiipos.delimount.net/1161/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>iPhone, XML 처리 예제 &#8211; NSXMLParser 이용하기</title>
		<link>http://kiipos.delimount.net/1084</link>
		<comments>http://kiipos.delimount.net/1084#comments</comments>
		<pubDate>Wed, 10 Mar 2010 04:14:55 +0000</pubDate>
		<dc:creator>키포스</dc:creator>
				<category><![CDATA[미분류]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[아이폰]]></category>

		<guid isPermaLink="false">http://kiipos.delimount.net/?p=1084</guid>
		<description><![CDATA[몇일 전 iPhone에서 HTTP로 XML 데이터 요청하는 예제를 올렸다가 iPhone SDK에서 NSXMLDocument 클래스를 지원하지 않는 다는 것을 확인하고 NSXMLParser 클래스를 이용해서 XML 데이터를 처리하는 예제를 다시 준비했습니다. 아마도 iPhone에서 NSXMLDocument를 지원하지 않는 건 NSXMLDocument가 메모리를 많이 먹기 때문인 아닐까 싶습니다.
NSXMLParser는 XML 문서를 순차적으로 분석(parse)하면서 이벤트별 처리를 위임(delegate)하는 방식입니다. 따라서 NSXMLDocument를 사용하는 예제보다는 훨씬 더 복잡합니다. [...]]]></description>
			<content:encoded><![CDATA[<p>몇일 전 <a href="http://kiipos.delimount.net/980">iPhone에서 HTTP로 XML 데이터 요청하는 예제</a>를 올렸다가 iPhone SDK에서 NSXMLDocument 클래스를 지원하지 않는 다는 것을 확인하고 NSXMLParser 클래스를 이용해서 XML 데이터를 처리하는 예제를 다시 준비했습니다. 아마도 iPhone에서 NSXMLDocument를 지원하지 않는 건 NSXMLDocument가 메모리를 많이 먹기 때문인 아닐까 싶습니다.</p>
<p><a href="http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSXMLParser_Class/Reference/Reference.html">NSXMLParser</a>는 XML 문서를 순차적으로 분석(parse)하면서 이벤트별 처리를 위임(delegate)하는 방식입니다. 따라서 NSXMLDocument를 사용하는 예제보다는 훨씬 더 복잡합니다. 참고로 iPhone에서 사용할 수 있는 <a href="http://note.marines.co.kr/124">XML 관련 라이브러리</a>들이 개발되어 있기 때문에 해당 라이브러리를 익혀서 사용하는 것이 개발 효율은 더 좋을 것 같습니다. 하지만 NSXMLParser를 이용해서 구현하면 메모리도 적게 먹고 나름 성능 향상을 기대할 수 기대할 수 있기 때문에 직접 작성하는 것도 알아두면 좋을 듯 합니다.</p>
<p>예제에 포함된 파일 목록은 아래와 같습니다.</p>
<table>
<tr>
<th>파일</th>
<th>설명</th>
</tr>
<tr>
<td>showrooms.xml</td>
<td>XML 파일</td>
</tr>
<tr>
<td>Dealer.h <br /> Dealer.m</td>
<td>Dealer 모델 클래스</td>
</tr>
<tr>
<td>Showroom.h <br /> Showroom.m</td>
<td>Showroom 모델 클래스</td>
</tr>
<tr>
<td>ShowroomsXmlParse.h <br /> ShowroomsXmlParse.m</td>
<td>showrooms.xml용 파서 클래스</td>
</tr>
<tr>
<td>showrooms_xml_parser.m</td>
<td>실행(main) 소스</td>
</tr>
</table>
<p>우선 showrooms.xml은 아래와 같습니다.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
</pre></td><td class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;showrooms<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;showroom<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>강남전시장<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;phone<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>02-111-1111<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/phone<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dealer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>김태연<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dealer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/showroom<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;showroom<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>삼성전시장<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;phone<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>02-222-2222<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/phone<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;dealer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
      <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>구하라<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
    <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/dealer<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/showroom<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/showrooms<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></td></tr></table></div>

<p>예제에서 showroom 및 dealer 엘리먼트가 각각 name 엘리먼트를 자식으로 가지도록 작성했습니다.</p>
<p>Dealer.h와 Dealer.m은 다음과 같습니다.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &lt;Foundation/Foundation.h&gt;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@interface</span> Dealer <span style="color: #002200;">:</span> <span style="color: #400080;">NSObject</span>
<span style="color: #002200;">&#123;</span>
  <span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> _name;
<span style="color: #002200;">&#125;</span>
  <span style="color: #a61390;">@property</span><span style="color: #002200;">&#40;</span> copy <span style="color: #002200;">&#41;</span> <span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> name;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;Dealer.h&quot;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@implementation</span> Dealer
  <span style="color: #a61390;">@synthesize</span> name <span style="color: #002200;">=</span> _name;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>Showroom.h와 Showroom.m은 다음과 같습니다.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;Dealer.h&quot;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@interface</span> Showroom <span style="color: #002200;">:</span> <span style="color: #400080;">NSObject</span>
<span style="color: #002200;">&#123;</span>
  <span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> _name;
  <span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> _phone;
  Dealer<span style="color: #002200;">*</span> _dealer;
<span style="color: #002200;">&#125;</span>
  <span style="color: #a61390;">@property</span><span style="color: #002200;">&#40;</span> copy <span style="color: #002200;">&#41;</span> <span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> name;
  <span style="color: #a61390;">@property</span><span style="color: #002200;">&#40;</span> copy <span style="color: #002200;">&#41;</span> <span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> phone;
  <span style="color: #a61390;">@property</span><span style="color: #002200;">&#40;</span> retain <span style="color: #002200;">&#41;</span> Dealer<span style="color: #002200;">*</span> dealer;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>


<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;Showroom.h&quot;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@implementation</span> Showroom
  <span style="color: #a61390;">@synthesize</span> name <span style="color: #002200;">=</span> _name;
  <span style="color: #a61390;">@synthesize</span> phone <span style="color: #002200;">=</span> _phone;
  <span style="color: #a61390;">@synthesize</span> dealer <span style="color: #002200;">=</span> _dealer;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>NSXMLParser는 NSXMLDocument의 NSXMLNode처럼 모델이 없기 때문에 분석(parse) 결과를 담을 수 있는 모델이 필요합니다. 이 모델 클래스들은 MVC에도 적용될 수 있기 때문에 모델 클래스를 만들어 두면 조금 더 우아한 프로그래밍할 수 있습니다. 모델 클래스들은 간단하기 때문에 자세한 설명은 생략하도록 하겠습니다. </p>
<p>ShowroomsXmlParser.h는 아래와 같습니다.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;Showroom.h&quot;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">@interface</span> ShowroomsXmlParser <span style="color: #002200;">:</span> <span style="color: #400080;">NSObject</span>
<span style="color: #002200;">&#123;</span>
  <span style="color: #400080;">NSMutableArray</span><span style="color: #002200;">*</span> _showrooms;
  <span style="color: #400080;">NSMutableArray</span><span style="color: #002200;">*</span> _elementStack;
<span style="color: #002200;">&#125;</span>
  <span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> parser<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSXMLParser</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> parser 
      didStartElement<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> elementName 
      namespaceURI<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> namespaceURI 
      qualifiedName<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> qualifiedName 
      attributes<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSDictionary</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> attributeDict;
  <span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> parser<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSXMLParser</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> parser
      foundCharacters<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> <span style="color: #a61390;">string</span>;
  <span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> parser<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSXMLParser</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> parser 
      didEndElement<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> elementName
      namespaceURI<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> namespaceURI 
      qualifiedName<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> qName;
  <span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSMutableArray</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> parseContentOfUrl<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSURL</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> url;
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>ShowroomsXmlParser는 NSXMLParser가 발생시키는 event를 처리해서 Showroom 객체 배열을 넘겨주는 클래스입니다. NSXMLParser가 위임(delegate)하는 method들을 처리하기 위해서 <del datetime="2010-03-15T11:50:24+00:00"><a href="http://developer.apple.com/mac/library/documentation/Cocoa/Reference/NSXMLParserDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intf/NSXMLParserDelegate">NSXMLParserDelegate</a> 프로토콜을 구현해야 합니다</del>. 참고로 프로토콜은 자바에서 interface랑 동일합니다. 멤버 변수 _elementStack은 파서의 트리 탐색 경로 및 정보를 담아두는 스택입니다.</p>
<p>ShowroomsXmlParse.m은 아래와 같습니다.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;ShowroomsXmlParser.h&quot;</span>
&nbsp;
&nbsp;
<span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> <span style="color: #a61390;">const</span> SHOWROOM <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;showroom&quot;</span>;
<span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> <span style="color: #a61390;">const</span> DEALER <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;dealer&quot;</span>;
<span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> <span style="color: #a61390;">const</span> NAME <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;name&quot;</span>;
<span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> <span style="color: #a61390;">const</span> PHONE <span style="color: #002200;">=</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;phone&quot;</span>;
&nbsp;
&nbsp;
<span style="color: #a61390;">@implementation</span> ShowroomsXmlParser
  <span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> parser<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSXMLParser</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> parser 
      didStartElement<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> elementName 
      namespaceURI<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> namespaceURI 
      qualifiedName<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> qualifiedName 
      attributes<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSDictionary</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> attributeDict
  <span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> elementName isEqualToString<span style="color: #002200;">:</span> SHOWROOM <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
      Showroom<span style="color: #002200;">*</span> showroom <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> Showroom new <span style="color: #002200;">&#93;</span>;
      <span style="color: #002200;">&#91;</span> _elementStack addObject<span style="color: #002200;">:</span> showroom <span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
    <span style="color: #a61390;">else</span> <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> elementName isEqualToString<span style="color: #002200;">:</span> DEALER <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
      Dealer<span style="color: #002200;">*</span> dealer <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> Dealer new <span style="color: #002200;">&#93;</span>;
      Showroom<span style="color: #002200;">*</span> showroom <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>Showroom<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#91;</span> _elementStack lastObject <span style="color: #002200;">&#93;</span>;
      <span style="color: #002200;">&#91;</span> showroom setDealer<span style="color: #002200;">:</span> dealer <span style="color: #002200;">&#93;</span>;
&nbsp;
      <span style="color: #002200;">&#91;</span> _elementStack addObject<span style="color: #002200;">:</span> dealer <span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
    <span style="color: #a61390;">else</span> <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> elementName isEqualToString<span style="color: #002200;">:</span> NAME <span style="color: #002200;">&#93;</span> ||
      TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> elementName isEqualToString<span style="color: #002200;">:</span> PHONE <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
      <span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> element <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> <span style="color: #400080;">NSString</span> stringWithString<span style="color: #002200;">:</span> elementName <span style="color: #002200;">&#93;</span>;
      <span style="color: #002200;">&#91;</span> _elementStack addObject<span style="color: #002200;">:</span> element <span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
  <span style="color: #002200;">&#125;</span>
&nbsp;
  <span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> parser<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSXMLParser</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> parser
      foundCharacters<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> <span style="color: #a61390;">string</span>
  <span style="color: #002200;">&#123;</span>
    <span style="color: #400080;">NSCharacterSet</span><span style="color: #002200;">*</span> characterSet <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> <span style="color: #400080;">NSCharacterSet</span> 
      whitespaceAndNewlineCharacterSet <span style="color: #002200;">&#93;</span>;
    <span style="color: #400080;">NSString</span><span style="color: #002200;">*</span> trimmedValue <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> <span style="color: #a61390;">string</span> stringByTrimmingCharactersInSet<span style="color: #002200;">:</span>
      characterSet <span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #2400d9;">0</span> <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> trimmedValue length <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
      <span style="color: #a61390;">return</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
    <span style="color: #a61390;">id</span> element <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> _elementStack lastObject <span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> element isKindOfClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span> <span style="color: #400080;">NSString</span> class <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
      NSUInteger count <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> _elementStack count <span style="color: #002200;">&#93;</span>;
      NSUInteger index <span style="color: #002200;">=</span> count <span style="color: #002200;">-</span> <span style="color: #2400d9;">2</span>;
      <span style="color: #a61390;">id</span> parentElement <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> _elementStack objectAtIndex<span style="color: #002200;">:</span> index <span style="color: #002200;">&#93;</span>;
&nbsp;
      <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> element isEqualToString<span style="color: #002200;">:</span> PHONE <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
      <span style="color: #002200;">&#123;</span>
        Showroom<span style="color: #002200;">*</span> showroom <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>Showroom<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>parentElement;
        <span style="color: #002200;">&#91;</span> showroom setPhone<span style="color: #002200;">:</span> trimmedValue <span style="color: #002200;">&#93;</span>;
      <span style="color: #002200;">&#125;</span>
      <span style="color: #a61390;">else</span> <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> element isEqualToString<span style="color: #002200;">:</span> NAME <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
      <span style="color: #002200;">&#123;</span>
        <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> parentElement isMemberOfClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span> Showroom class <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
        <span style="color: #002200;">&#123;</span>
          Showroom<span style="color: #002200;">*</span> showroom <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>Showroom<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>parentElement;
          <span style="color: #002200;">&#91;</span> showroom setName<span style="color: #002200;">:</span> trimmedValue <span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#125;</span>
        <span style="color: #a61390;">else</span> <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> parentElement isMemberOfClass<span style="color: #002200;">:</span> <span style="color: #002200;">&#91;</span> Dealer class <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
        <span style="color: #002200;">&#123;</span>
          Dealer<span style="color: #002200;">*</span> dealer <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>Dealer<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span>parentElement;
          <span style="color: #002200;">&#91;</span> dealer setName<span style="color: #002200;">:</span> trimmedValue <span style="color: #002200;">&#93;</span>;
        <span style="color: #002200;">&#125;</span>
      <span style="color: #002200;">&#125;</span>
    <span style="color: #002200;">&#125;</span>
  <span style="color: #002200;">&#125;</span>
&nbsp;
  <span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #a61390;">void</span><span style="color: #002200;">&#41;</span> parser<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSXMLParser</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> parser 
      didEndElement<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> elementName
      namespaceURI<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> namespaceURI 
      qualifiedName<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSString</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> qName
  <span style="color: #002200;">&#123;</span>
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> elementName isEqualToString<span style="color: #002200;">:</span> SHOWROOM <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
      Showroom<span style="color: #002200;">*</span> showroom <span style="color: #002200;">=</span> <span style="color: #002200;">&#40;</span>Showroom<span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span><span style="color: #002200;">&#91;</span> _elementStack lastObject <span style="color: #002200;">&#93;</span>;
      <span style="color: #002200;">&#91;</span> _showrooms addObject<span style="color: #002200;">:</span> showroom <span style="color: #002200;">&#93;</span>;
      <span style="color: #002200;">&#91;</span> _elementStack removeLastObject <span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
    <span style="color: #a61390;">else</span> <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> elementName isEqualToString<span style="color: #002200;">:</span> DEALER <span style="color: #002200;">&#93;</span> ||
      TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> elementName isEqualToString<span style="color: #002200;">:</span> NAME <span style="color: #002200;">&#93;</span> ||
      TRUE <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> elementName isEqualToString<span style="color: #002200;">:</span> PHONE <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
      <span style="color: #002200;">&#91;</span> _elementStack removeLastObject <span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
  <span style="color: #002200;">&#125;</span>
&nbsp;
  <span style="color: #002200;">-</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSMutableArray</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> parseContentOfUrl<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span><span style="color: #400080;">NSURL</span><span style="color: #002200;">*</span><span style="color: #002200;">&#41;</span> url
  <span style="color: #002200;">&#123;</span>
    <span style="color: #400080;">NSXMLParser</span><span style="color: #002200;">*</span> xmlParser <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> <span style="color: #002200;">&#91;</span> <span style="color: #400080;">NSXMLParser</span> alloc <span style="color: #002200;">&#93;</span> 
      initWithContentsOfURL<span style="color: #002200;">:</span> url <span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#91;</span> xmlParser setDelegate<span style="color: #002200;">:</span> self <span style="color: #002200;">&#93;</span>;
&nbsp;
    _showrooms <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> <span style="color: #400080;">NSMutableArray</span> arrayWithCapacity<span style="color: #002200;">:</span> <span style="color: #2400d9;">1024</span> <span style="color: #002200;">&#93;</span>;
    _elementStack <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> <span style="color: #400080;">NSMutableArray</span> arrayWithCapacity<span style="color: #002200;">:</span> <span style="color: #2400d9;">1024</span> <span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #002200;">&#91;</span> xmlParser parse <span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #a61390;">return</span> _showrooms;
  <span style="color: #002200;">&#125;</span>
<span style="color: #a61390;">@end</span></pre></td></tr></table></div>

<p>NSXMLParser가 동작하기 위해서는 최소한 아래의 메소드들이 구현되어야 합니다. </p>
<ul>
<li><a href="http://developer.apple.com/mac/library/documentation/Cocoa/Reference/NSXMLParserDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/NSXMLParserDelegate/parser:didStartElement:namespaceURI:qualifiedName:attributes:">parser:didStartElement:namespaceURI:qualifiedName:attributes:</a> (이하 didStart)</li>
<li><a href="http://developer.apple.com/mac/library/documentation/Cocoa/Reference/NSXMLParserDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/NSXMLParserDelegate/parser:foundCharacters:">parser:foundCharacters:</a> (이하 found)</li>
<li><a href="http://developer.apple.com/mac/library/documentation/Cocoa/Reference/NSXMLParserDelegate_Protocol/Reference/Reference.html#//apple_ref/occ/intfm/NSXMLParserDelegate/parser:didEndElement:namespaceURI:qualifiedName:">parser:didEndElement:namespaceURI:qualifiedName:</a> (이하 didEnd)</li>
</ul>
<p>didStart는 파서가 엘리먼트의 시작 태그를 만났을 때 호출됩니다. 비단말(nonterminal) 노드인 경우 엘리먼트 해당하는 모델 객체를 생성한 후 스택에 넣습니다. 단말(terminal) 노드인 경우 엘리먼트 이름으로 NSString 객체를 만들 후 스택에 넣습니다.</p>
<p>found는 파서가 엘리먼트를 제외한 스트링을 만날을 때 호출됩니다. 인자로 넘어온 스트링의 앞뒤 공백을 제거합니다. 유효한 스트링(이하 속성값)인 경우 스택에서 마지막으로 추가된 NSString 객체를 제거합니다. 제거된 NSString 객체의 값에 따라 적절한 부모 모델 객체의 속성(property)을 속성값으로 설정합니다. 만약 엘리먼트 이름이 NAME인 경우 중복되기 때문에 부모 모델 객체 클래스에 확인합니다.</p>
<p>didEnd는 파서가 엘리먼트의 종료 태그를 만났을 때 호출됩니다. 스택에서 모델 객체를 제거하고 SHOWROOM인 경우 _showrooms 배열 객체에 해당 객체를 추가합니다.</p>
<p>끝으로 콘솔 화면에서 결과를 확인할 수 있는 showrooms_xml_parser.m 파일은 아래와 같습니다.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &quot;ShowroomsXmlParser.h&quot;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">int</span> main<span style="color: #002200;">&#40;</span> <span style="color: #a61390;">int</span> argc, <span style="color: #a61390;">char</span><span style="color: #002200;">*</span> argv<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
  <span style="color: #400080;">NSAutoreleasePool</span><span style="color: #002200;">*</span> pool <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> <span style="color: #400080;">NSAutoreleasePool</span> new <span style="color: #002200;">&#93;</span>;
&nbsp;
  ShowroomsXmlParser<span style="color: #002200;">*</span> xmlParser <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> ShowroomsXmlParser new <span style="color: #002200;">&#93;</span>;
  <span style="color: #400080;">NSURL</span><span style="color: #002200;">*</span> url <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> <span style="color: #400080;">NSURL</span> URLWithString<span style="color: #002200;">:</span> 
    <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;http://www.yourserver.com/showrooms.xml&quot;</span> <span style="color: #002200;">&#93;</span>;
  <span style="color: #400080;">NSMutableArray</span><span style="color: #002200;">*</span> showrooms <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> xmlParser parseContentOfUrl<span style="color: #002200;">:</span> url <span style="color: #002200;">&#93;</span>;
&nbsp;
  <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> Showroom<span style="color: #002200;">*</span> showroom <span style="color: #a61390;">in</span> showrooms <span style="color: #002200;">&#41;</span>
  <span style="color: #002200;">&#123;</span>
    Dealer<span style="color: #002200;">*</span> dealer <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> showroom dealer <span style="color: #002200;">&#93;</span>;
    NSLog<span style="color: #002200;">&#40;</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@ %@ (%@)&quot;</span>, <span style="color: #002200;">&#91;</span> showroom name <span style="color: #002200;">&#93;</span>, <span style="color: #002200;">&#91;</span> showroom phone <span style="color: #002200;">&#93;</span>, 
      <span style="color: #002200;">&#91;</span> dealer name <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>;
  <span style="color: #002200;">&#125;</span>
&nbsp;
  <span style="color: #002200;">&#91;</span> xmlParser release <span style="color: #002200;">&#93;</span>;
  <span style="color: #002200;">&#91;</span> url release <span style="color: #002200;">&#93;</span>;
&nbsp;
  <span style="color: #002200;">&#91;</span> pool drain <span style="color: #002200;">&#93;</span>;
  <span style="color: #a61390;">return</span> <span style="color: #2400d9;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>해당 소스들을 컴파일 하기 위해서는 아래의 명령어를 실행합니다.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">gcc</span> <span style="color: #660033;">-framework</span> Foundation Dealer.m Showroom.m ShowroomsXmlParser.m showrooms_xml_parser.m
<span style="color: #660033;">-o</span> showrooms_xml_parser</pre></td></tr></table></div>

<p>실행 결과 화면은 아래와 같습니다.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
</pre></td><td class="code"><pre class="bash" style="font-family:monospace;">$ .<span style="color: #000000; font-weight: bold;">/</span>showrooms_xml_parser
강남전시장 02-<span style="color: #000000;">111</span>-<span style="color: #000000;">1111</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>김태연<span style="color: #7a0874; font-weight: bold;">&#41;</span>
삼성전시장 02-<span style="color: #000000;">222</span>-<span style="color: #000000;">2222</span> <span style="color: #7a0874; font-weight: bold;">&#40;</span>구하라<span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<p>프로그래밍에 도움되길 바랍니다~</p>
<h4>수정 사항</h4>
<p>엘리먼트 값이 없는 경우 에러가 발생하는 문제를 해결하기 위해서 showrooms_xml_parser.m의 found 메소드 안에 _elementStack의 마지막 요소 제거 코드를 didEnd로 옮겼습니다.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=http://bit.ly/92EjM3+iPhone%2C+XML+%EC%B2%98%EB%A6%AC+%EC%98%88%EC%A0%9C+%E2%80%93+NSXMLParser+%EC%9D%B4%EC%9A%A9%ED%95%98%EA%B8%B0+" title="Post to Twitter"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro4.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://kiipos.delimount.net/1084&amp;title=iPhone%2C+XML+%EC%B2%98%EB%A6%AC+%EC%98%88%EC%A0%9C+%E2%80%93+NSXMLParser+%EC%9D%B4%EC%9A%A9%ED%95%98%EA%B8%B0" title="Post to Delicious"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro4.png" alt="Post to Delicious" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://kiipos.delimount.net/1084/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>OS X, HTTP로 XML 데이터 요청 예제</title>
		<link>http://kiipos.delimount.net/980</link>
		<comments>http://kiipos.delimount.net/980#comments</comments>
		<pubDate>Tue, 02 Mar 2010 07:39:21 +0000</pubDate>
		<dc:creator>키포스</dc:creator>
				<category><![CDATA[미분류]]></category>
		<category><![CDATA[http]]></category>
		<category><![CDATA[iphone]]></category>
		<category><![CDATA[objective-c]]></category>
		<category><![CDATA[xml]]></category>
		<category><![CDATA[아이폰]]></category>

		<guid isPermaLink="false">http://kiipos.delimount.net/?p=980</guid>
		<description><![CDATA[오래 간만에 포스팅합니다. 요즘 트위터 때문에 블로그에 소홀해진 것도 있지만 아이폰과 안드로이드 애플케이션(이하, 앱) 개발에 여념이 없습니다. 스마트폰 대세라 흐름을 따라 가는 것도 있지만 주로 웹 서비스만 개발하다 보니 오래 간만에 접하는 애플리케이션 형태의 제품 개발 자체가 매우 흥미롭습니다.
그런데 요즘 왠만한 앱에는 HTTP를 통해서 XML 데이터를 가져와서 보여주는 기능이 들어가는 데 막상 개발 참고하려고 구글 [...]]]></description>
			<content:encoded><![CDATA[<p>오래 간만에 포스팅합니다. 요즘 트위터 때문에 블로그에 소홀해진 것도 있지만 아이폰과 안드로이드 애플케이션(이하, 앱) 개발에 여념이 없습니다. 스마트폰 대세라 흐름을 따라 가는 것도 있지만 주로 웹 서비스만 개발하다 보니 오래 간만에 접하는 애플리케이션 형태의 제품 개발 자체가 매우 흥미롭습니다.</p>
<p>그런데 요즘 왠만한 앱에는 HTTP를 통해서 XML 데이터를 가져와서 보여주는 기능이 들어가는 데 막상 개발 참고하려고 구글 검색해보면 마땅한 예제가 없어서 간단하게 예제를 작성해보았습니다.</p>
<p>요청하는 XML 문서(hello.xml)는 아래와 같이 작성했습니다.</p>

<div class="wp_syntax"><div class="code"><pre class="xml" style="font-family:monospace;"><span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;?xml</span> <span style="color: #000066;">version</span>=<span style="color: #ff0000;">&quot;1.0&quot;</span> <span style="color: #000066;">encoding</span>=<span style="color: #ff0000;">&quot;UTF-8&quot;</span> <span style="color: #000000; font-weight: bold;">?&gt;</span></span>
&nbsp;
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;showrooms<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;showroom<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>강남전시장<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;phone_number<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>02-111-1111<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/phone_number<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/showroom<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;showroom<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>삼성전시장<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;phone_number<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>02-222-2222<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/phone_number<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/showroom<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
  <span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;showroom<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;name<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>한남전시장<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/name<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;phone_number<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>02-333-3333<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/phone_number<span style="color: #000000; font-weight: bold;">&gt;</span></span><span style="color: #000000; font-weight: bold;">&lt;/showroom<span style="color: #000000; font-weight: bold;">&gt;</span></span></span>
<span style="color: #009900;"><span style="color: #000000; font-weight: bold;">&lt;/showrooms<span style="color: #000000; font-weight: bold;">&gt;</span></span></span></pre></div></div>

<p>해당 XML 데이터를 HTTP를 통해서 가져와서 처리하는 예제는 아래와 같습니다. 간단하게 실행 되는 것을 확인하기 위해서 컨솔 창에서 돌아가도록 작성했습니다.</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
</pre></td><td class="code"><pre class="objc" style="font-family:monospace;"><span style="color: #6e371a;">#import &lt;Foundation/Foundation.h&gt;</span>
&nbsp;
&nbsp;
<span style="color: #a61390;">int</span> main<span style="color: #002200;">&#40;</span> <span style="color: #a61390;">int</span> argc, <span style="color: #a61390;">char</span><span style="color: #002200;">*</span> argv<span style="color: #002200;">&#91;</span><span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
<span style="color: #002200;">&#123;</span>
  <span style="color: #400080;">NSAutoreleasePool</span><span style="color: #002200;">*</span> pool <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> <span style="color: #400080;">NSAutoreleasePool</span> new <span style="color: #002200;">&#93;</span>;
  <span style="color: #400080;">NSURL</span><span style="color: #002200;">*</span> url <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> <span style="color: #400080;">NSURL</span> URLWithString<span style="color: #002200;">:</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;http://www,yourserver.com/hello.xml&quot;</span> <span style="color: #002200;">&#93;</span>;
  <span style="color: #400080;">NSError</span><span style="color: #002200;">*</span> error;
  <span style="color: #400080;">NSXMLDocument</span><span style="color: #002200;">*</span> xmlDocument <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> <span style="color: #002200;">&#91;</span> <span style="color: #400080;">NSXMLDocument</span> alloc <span style="color: #002200;">&#93;</span> 
    initWithContentsOfURL<span style="color: #002200;">:</span> url
    options<span style="color: #002200;">:</span> <span style="color: #002200;">&#40;</span> NSXMLNodePreserveWhitespace | NSXMLNodePreserveCDATA <span style="color: #002200;">&#41;</span>
    error<span style="color: #002200;">:</span> <span style="color: #002200;">&amp;</span>error <span style="color: #002200;">&#93;</span>;
&nbsp;
  <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #a61390;">nil</span> <span style="color: #002200;">!=</span> error <span style="color: #002200;">&#41;</span>
  <span style="color: #002200;">&#123;</span>
    NSLog<span style="color: #002200;">&#40;</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@&quot;</span>, <span style="color: #002200;">&#91;</span> error localizedDescription <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>;
    <span style="color: #002200;">&#91;</span> pool drain <span style="color: #002200;">&#93;</span>;
    <span style="color: #a61390;">return</span> <span style="color: #2400d9;">0</span>;
  <span style="color: #002200;">&#125;</span>
&nbsp;
  <span style="color: #400080;">NSXMLNode</span><span style="color: #002200;">*</span> rootElement <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> xmlDocument rootElement <span style="color: #002200;">&#93;</span>;
  <span style="color: #400080;">NSArray</span><span style="color: #002200;">*</span> showrooms <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> rootElement children <span style="color: #002200;">&#93;</span>;
&nbsp;
  <span style="color: #a61390;">int</span> i, count <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> showrooms count <span style="color: #002200;">&#93;</span>;
  <span style="color: #a61390;">for</span> <span style="color: #002200;">&#40;</span> i <span style="color: #002200;">=</span> <span style="color: #2400d9;">0</span>; i &lt; count; <span style="color: #002200;">++</span>i <span style="color: #002200;">&#41;</span> 
  <span style="color: #002200;">&#123;</span>
    <span style="color: #400080;">NSXMLNode</span><span style="color: #002200;">*</span> showroomNode <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> showrooms objectAtIndex<span style="color: #002200;">:</span> i <span style="color: #002200;">&#93;</span>;
    <span style="color: #400080;">NSXMLNode</span><span style="color: #002200;">*</span> nameNode <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> showroomNode childAtIndex<span style="color: #002200;">:</span> <span style="color: #2400d9;">0</span> <span style="color: #002200;">&#93;</span>;
&nbsp;
    <span style="color: #400080;">NSArray</span><span style="color: #002200;">*</span> nodes <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> showroomNode nodesForXPath<span style="color: #002200;">:</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;phone_number&quot;</span> error<span style="color: #002200;">:</span> <span style="color: #a61390;">nil</span> <span style="color: #002200;">&#93;</span>;
    <span style="color: #400080;">NSXMLNode</span><span style="color: #002200;">*</span> phoneNumberNode <span style="color: #002200;">=</span> <span style="color: #a61390;">nil</span>;
    <span style="color: #a61390;">if</span> <span style="color: #002200;">&#40;</span> <span style="color: #2400d9;">1</span> <span style="color: #002200;">==</span> <span style="color: #002200;">&#91;</span> nodes count <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>
    <span style="color: #002200;">&#123;</span>
      phoneNumberNode <span style="color: #002200;">=</span> <span style="color: #002200;">&#91;</span> nodes objectAtIndex<span style="color: #002200;">:</span> <span style="color: #2400d9;">0</span> <span style="color: #002200;">&#93;</span>;
    <span style="color: #002200;">&#125;</span>
&nbsp;
    NSLog<span style="color: #002200;">&#40;</span> <span style="color: #bf1d1a;">@</span><span style="color: #bf1d1a;">&quot;%@ (%@)&quot;</span>, <span style="color: #002200;">&#91;</span> nameNode stringValue <span style="color: #002200;">&#93;</span>, <span style="color: #002200;">&#91;</span> phoneNumberNode stringValue <span style="color: #002200;">&#93;</span> <span style="color: #002200;">&#41;</span>;
  <span style="color: #002200;">&#125;</span>
&nbsp;
  <span style="color: #002200;">&#91;</span> xmlDocument release <span style="color: #002200;">&#93;</span>;
  <span style="color: #002200;">&#91;</span> url release <span style="color: #002200;">&#93;</span>;
&nbsp;
  <span style="color: #002200;">&#91;</span> pool drain <span style="color: #002200;">&#93;</span>;
  <span style="color: #a61390;">return</span> <span style="color: #2400d9;">0</span>;
<span style="color: #002200;">&#125;</span></pre></td></tr></table></div>

<p>예제에서 특별히 어려운 내용은 없습니다. <a href="http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSXMLDocument_Class/Reference/Reference.html">NSXMLDocument</a> 클래스가 HTTP를 지원하기 때문에 <a href="http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSXMLDocument_Class/Reference/Reference.html#//apple_ref/occ/instm/NSXMLDocument/initWithContentsOfURL:options:error:">initWithContentsOfURL</a> 메소드를 호출하기만 하면 됩니다. 그리고 아이폰 런타임 환경에서는 가비지 컬렉션이 지원되지 않기 때문에 <del datetime="2010-03-10T04:19:17+00:00"><a href="http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSAutoreleasePool_Class/Reference/Reference.html">NSAutoreleasePool</a> 클래스를 이용해서 메모리 관리를 하였습니다.</del> </p>
<p>예제에서 3가지 다른 방법으로 자식 노드에 접근하고 있습니다. 각각 <a href="http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSXMLNode_Class/Reference/Reference.html#//apple_ref/occ/instm/NSXMLNode/children">children</a>, <a href="http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSXMLNode_Class/Reference/Reference.html#//apple_ref/occ/instm/NSXMLNode/childAtIndex:">objectAtIndex</a>, <a href="http://developer.apple.com/mac/library/documentation/Cocoa/Reference/Foundation/Classes/NSXMLNode_Class/Reference/Reference.html#//apple_ref/occ/instm/NSXMLNode/nodesForXPath:error:">nodesForXPath</a> 메소드를 이용합니다. 가장 일반적인 방법은 nodesForXPath을 이용하는 방법입니다. 약간의 성능 문제가 있을 수도 있지만 대부분의 경우 처리하는 XML 데이터의 량이 많이 않기 때문에 신경 쓰지 않아도 될 듯 합니다. 반면 objectAtIndex 메소드를 사용하는 경우 성능은 향상될 수 있겠지만 XML 문법에 종속적이기 때문에 그리 권장할만한 방법은 아닙니다.</p>
<p>해당 파일을 컴파일하는 쉘 구문은 아래와 같습니다.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ <span style="color: #c20cb9; font-weight: bold;">gcc</span> <span style="color: #660033;">-framework</span> Foundation hello.m <span style="color: #660033;">-o</span> hello</pre></div></div>

<p>실행 결과 화면은 아래와 같습니다.</p>

<div class="wp_syntax"><div class="code"><pre class="bash" style="font-family:monospace;">$ .<span style="color: #000000; font-weight: bold;">/</span>hello
강남전시장 <span style="color: #7a0874; font-weight: bold;">&#40;</span>02-<span style="color: #000000;">111</span>-<span style="color: #000000;">1111</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
삼성전시장 <span style="color: #7a0874; font-weight: bold;">&#40;</span>02-<span style="color: #000000;">222</span>-<span style="color: #000000;">2222</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
한남전시장 <span style="color: #7a0874; font-weight: bold;">&#40;</span>02-<span style="color: #000000;">333</span>-<span style="color: #000000;">3333</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></div></div>

<p>프로그래밍에 도움되길 바랍니다~</p>
<p>[ 수정 사항 ]<br />
조사해 본 결과 NSXMLDocument 클래스는 iPhone SDK에 제외되어 있습니다. 따라서 위 예제는 OS X 애플리케이션에서만 동작합니다. <del datetime="2010-03-10T04:19:17+00:00">빠른 시일 내에 iPhone에서 돌아가는 예제를 작성해서 올리도록 하겠습니다.</del> iPhone은 <a href="http://kiipos.delimount.net/1084">iPhone, HTTP로 XML 데이터 요청 및 처리 예제</a>를 참고하세요~</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=http://bit.ly/8Zygle+OS+X%2C+HTTP%EB%A1%9C+XML+%EB%8D%B0%EC%9D%B4%ED%84%B0+%EC%9A%94%EC%B2%AD+%EC%98%88%EC%A0%9C+" title="Post to Twitter"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro4.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://kiipos.delimount.net/980&amp;title=OS+X%2C+HTTP%EB%A1%9C+XML+%EB%8D%B0%EC%9D%B4%ED%84%B0+%EC%9A%94%EC%B2%AD+%EC%98%88%EC%A0%9C" title="Post to Delicious"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro4.png" alt="Post to Delicious" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://kiipos.delimount.net/980/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>트위터 플러그인 설치했어요</title>
		<link>http://kiipos.delimount.net/919</link>
		<comments>http://kiipos.delimount.net/919#comments</comments>
		<pubDate>Sun, 17 Jan 2010 12:19:36 +0000</pubDate>
		<dc:creator>키포스</dc:creator>
				<category><![CDATA[미분류]]></category>
		<category><![CDATA[워드프레스]]></category>
		<category><![CDATA[트위터]]></category>
		<category><![CDATA[플러그인]]></category>

		<guid isPermaLink="false">http://kiipos.delimount.net/?p=919</guid>
		<description><![CDATA[요즘 트위터에 조금 익숙해진 것 같습니다. 아무래도 미투데이와 트위터를 동시에 사용하다보니 분산되긴 하지만 SNS 전체 활동량이 늘어났기 때문에 트위팅 시간도 많이 늘었습니다.  구독(follow)하는 사람들도 조금 늘었고 트윗 개수도 조금씩 늘어가고 있습니다.
몇일전 워드프레스를 2.9.1버전으로 업그레이드 했습니다. 저희 서버는 SFTP를 사용하기 때문에 자동 업그레이드가 실행이 안되서 다소 귀찮지만 수동으로 업그레이드 했습니다.  그나저나 처음에는 SFTP가 마냥 좋은 줄 알았는데 [...]]]></description>
			<content:encoded><![CDATA[<p>요즘 트위터에 조금 익숙해진 것 같습니다. 아무래도 <a href="http://me2day.net/kiipos">미투데이</a>와 <a href="http://twitter.com/kiipos">트위터</a>를 동시에 사용하다보니 분산되긴 하지만 SNS 전체 활동량이 늘어났기 때문에 트위팅 시간도 많이 늘었습니다.  구독(follow)하는 사람들도 조금 늘었고 트윗 개수도 조금씩 늘어가고 있습니다.</p>
<p>몇일전 워드프레스를 2.9.1버전으로 업그레이드 했습니다. 저희 서버는 SFTP를 사용하기 때문에 자동 업그레이드가 실행이 안되서 다소 귀찮지만 수동으로 업그레이드 했습니다.  그나저나 처음에는 SFTP가 마냥 좋은 줄 알았는데 <a href="http://www.digimoon.net/blog/321">몇가지 단점</a>도 있고해서 FTPS도 한번 고려해봐야 겠네요.</p>
<p>아무튼 워드프레스 업그레이드 하면서 트위터 플러그인도 몇가지 추가해봤습니다. 아무래도 블로그보다는 트위터에 포스팅을 많이 하기 때문에 포스팅이 빈한 블로그를 보완하기 위해 사이드바에 트위터 위젯을 추가했습니다. 처음에는 구글링의 가장 상단에 나오는 <a href="http://wordpress.org/extend/plugins/twitter-tools/">Twitter Tools</a>라는 플러그인을 설치했습니다. 그런데 기능이 너무 많고 무거워서 너무 무거운게 제 취향이 아니었습니다.</p>
<p>그래서 <a href="http://wordpress.org/extend/plugins/twitter-for-wordpress/">Twitter for Wordpress</a>를 설치했는데 기능도 단순하고 옵션도 적당해서 일단 제 마음에는 들었습니다. 하지만 처음 페이지를 렌더링할 때 다소 지연(delay)가 발생합니다. 아마도 트위터로부터 정보를 가져와서 캐싱하는데 시간이 좀 걸리는 것 같습니다. 일단 캐싱되면 빠르게 렌더링이 되지만 거슬려서 다른 플러그인을 찾아보았습니다.</p>
<p>결국 <a href="http://www.velvet.id.au/twitter-wordpress-sidebar-widget/">Twitter Wordpress Sidebar Widget</a>이라는 플러그인을 설치했습니다. Twitter for Wordpress보다는 옵션이 부족하지만 렌더링 시간이 거슬릴 정도는 아닙니다. 그런데 트윗한 시각을 &#8216;2 house ago&#8217; 형식으로 보여주는데 포스팅 시각이 그리 중요한 것 같지는 않아서 php 소스를 살짝 고쳐서 &#8216;#&#8217;로 표시되도록 했습니다.</p>
<p>트위터 위젯은 사이드바 가장 상단에 배치하였습니다. 아무래도 가장 업데이트가 자주 발생하는 정보인 만큼 우선순위를 가장 높였습니다.  그다음 최근 글, 태그, 월별 목록 순으로 위젯을 배치하였습니다. 블로그롤(링크 목록) 위젯은는 트위터 위젯과 다소 중복적으로 우선순위를 낮췄습니다.</p>
<p>그리고 <a href="http://richardxthripp.thripp.com/tweet-this">Tweet This</a>라는 플러그인도 설치했습니다. 이 플러그인을 설치하면 글 아래에 &#8216;Tweet this&#8217;라는 버튼이 표시됩니다. 이 버튼을 클릭하면 현재 보고 있을 글을 트위터로 포스팅할 수 있습니다. 그리고 제가 블로그에 포스팅하면 자동으로 트위터에 URL과 제목을 포스팅해주는 기능도 있습니다.</p>
<p>별건 아니지만 그래도 설치해놓고 보니 뭔가 작은 성취감을 느낄 수 있었습니다ㅎ. 당분간은 열심히 트위팅을 할 것 같습니다~</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=http://bit.ly/7NoCOe+%ED%8A%B8%EC%9C%84%ED%84%B0+%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8+%EC%84%A4%EC%B9%98%ED%96%88%EC%96%B4%EC%9A%94+" title="Post to Twitter"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro4.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://kiipos.delimount.net/919&amp;title=%ED%8A%B8%EC%9C%84%ED%84%B0+%ED%94%8C%EB%9F%AC%EA%B7%B8%EC%9D%B8+%EC%84%A4%EC%B9%98%ED%96%88%EC%96%B4%EC%9A%94" title="Post to Delicious"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro4.png" alt="Post to Delicious" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://kiipos.delimount.net/919/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>크롬, 글꼴 강제 지정하기 &#8211; 사용자 스타일 적용</title>
		<link>http://kiipos.delimount.net/819</link>
		<comments>http://kiipos.delimount.net/819#comments</comments>
		<pubDate>Mon, 04 Jan 2010 12:43:54 +0000</pubDate>
		<dc:creator>키포스</dc:creator>
				<category><![CDATA[미분류]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[글꼴]]></category>
		<category><![CDATA[나눔고딕]]></category>
		<category><![CDATA[맑은고딕]]></category>
		<category><![CDATA[사용자스타일]]></category>
		<category><![CDATA[크롬]]></category>
		<category><![CDATA[폰트]]></category>

		<guid isPermaLink="false">http://kiipos.delimount.net/?p=819</guid>
		<description><![CDATA[제 블로그로 들어오는 여러 가지 경로 중 구글을 통해 들어오는 경우를 관심있게 보고 있습니다. 최근에 &#8216;크롬 맑은 고딕&#8217;이라는 키워드로 들어오는 경우가 제법 있었습니다. 아마도 크롬에 맑은고딕을 적용하는 방법을 찾는 사람이 아닐까라고 생각해봅니다.  저도 굴림이나 돋움에 너무 질려서 웬만하면 나눔고딕으로 보고 싶은데 크롬 3.0에는 글꼴 강제 지정 기능이 없어 많이 아쉬웠었습니다.
그런데 오늘 혹시나 하는 마음에 크롬 확장 [...]]]></description>
			<content:encoded><![CDATA[<p>제 블로그로 들어오는 여러 가지 경로 중 구글을 통해 들어오는 경우를 관심있게 보고 있습니다. 최근에 &#8216;크롬 맑은 고딕&#8217;이라는 키워드로 들어오는 경우가 제법 있었습니다. 아마도 크롬에 <strong>맑은고딕</strong>을 적용하는 방법을 찾는 사람이 아닐까라고 생각해봅니다.  저도 <a href="http://kiipos.delimount.net/489">굴림이나 돋움에 너무 질려서</a> 웬만하면 <strong>나눔고딕</strong>으로 보고 싶은데 크롬 3.0에는 글꼴 강제 지정 기능이 없어 많이 아쉬웠었습니다.</p>
<p>그런데 오늘 혹시나 하는 마음에 크롬 <a href="https://chrome.google.com/extensions?hl=ko">확장 프로그램(extension)</a>을 찾아보니 <a href="https://chrome.google.com/extensions/detail/bpbpmpkbnfajbeogbmhndhijpgkchaab">userContent</a>라는 확장 프로그램이 있었습니다. 내용을 대충 읽어보니 사용자가 지정한 CSS를 모든 웹 페이지에 적용하는 확장 프로그램인 듯해서 설치를 진행해봤습니다.</p>
<p>우선 2010년 1월 현재 안정 채널(stable channel, 크롬 프로젝트에서는 버전 대신 채널이라는 용어을 사용하고 있네요)은 버전 3.x으로 확장 프로그램 기능을 지원하지 않습니다.  그래서 <a href="http://dev.chromium.org/getting-involved/dev-channel">크롬 프로젝트 홈페이지</a>에 가보니 베타 채널과 개발 채널을 설치할 수 있더군요. 아무래도 베타 채널이 조금 더 안정적이기 때문에 <a href="http://www.google.com/chrome/eula.html?extra=betachannel">베타 채널을 설치</a>했는데 다행이 베타 채널(ver 4.0)은 확장 프로그램을 지원하더군요.</p>
<p>그리고 <a href="https://chrome.google.com/extensions/detail/bpbpmpkbnfajbeogbmhndhijpgkchaab">userContent</a> 확장 프로그램을 설치했습니다. 아직 사용자 CSS를 지정하지 않았기 때문에 웹 페이지를 열어도 아무런 변화가 없었습니다. &#8216;도구 메뉴 &gt; 확장 프로그램&#8217;을 선택하면 확장 프로그램 페이지가 열리고 userContent 항목의 옵션 버튼을 클릭하면 사용자 CSS 입력 페이지가 열립니다.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #00AA00;">*</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-family</span> <span style="color: #00AA00;">:</span> <span style="color: #ff0000;">'나눔고딕'</span> !important<span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>편집 창에 위 내용을 입력한 후 저장합니다. 그러면 크롬으로 여는 모든 페이지에 나눔고딕이 적용됩니다. 당연한 얘기지만 PC에 나눔고딕이 설치되어 있어야 합니다.</p>
<p>CSS 구문을 간단하게 살펴보면 <strong>*</strong>는 전체 선택자(universal selector)이며 해당 구문은 모든 엘리먼트(element)에 나눔고딕을 글꼴로 적용해라는 내용입니다. (만약 맑은고딕을 적용하려면 &#8216;나눔고딕&#8217; 대신 &#8216;맑은 고딕&#8217;이라고 입력합니다.)  <strong><a href="http://www.w3.org/TR/CSS2/cascade.html#important-rules">!important</a></strong>는 사용자 스타일의 우선 순위를 높게 합니다. 기본적으로 제작자(author)가 지정한  스타일이 사용자 스타일보다 우선 순위가 높습니다. 그러나 !important가 선언된 스타일의 경우 사용자 스타일이 더 높은 우선 순위를 갖게됩니다. 그래서 제작자 지정한 글꼴은 무시되고 사용자 지정한 나눔고딕이 웹 페이지에 적용됩니다.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;"><span style="color: #00AA00;">*</span> <span style="color: #00AA00;">&#123;</span> <span style="color: #000000; font-weight: bold;">font-family</span> <span style="color: #00AA00;">:</span> <span style="color: #993333;">sans-serif</span> !important<span style="color: #00AA00;">;</span> <span style="color: #00AA00;">&#125;</span></pre></div></div>

<p>사용자 스타일을 위에 내용으로 저장하면 브라우저에서 지정한 산세리프체 글꼴이 페이지에 적용됩니다. 이 방법은 사용자 지정 글꼴을 변경할 때 CSS 구분을 직접 편집하는 않고 브라우저가 지원하는 옵션 기능을 이용하기 때문에 CSS 문법에 익숙하지 않은 사용자들이 쉽게 사용할 수 있습니다. 사용자 지정 글꼴을 변경하려면 &#8216;기능 메뉴 &gt; 옵션 &gt; 고급설정 &gt; 언어와 글꼴&#8217;에서 변경할 수 있습니다.</p>
<p>파이어폭스도 좋은 브라우저이긴 하지만 개인적으로 빠른 랜더링과 UI의 간결함 때문에 크롬을 더 좋아합니다. 그러나 지금까지는 크롬에 글꼴을 강제하는 기능이 없어 파이어폭스를 메인 브라우저로 사용하고 있었습니다. 하지만 크롬 4.0부터는 사용자 스타일 지정할 수 있기 때문에 더이상 크롬을 메인 브라우저로 사용하지 않을 이유가 없습니다. 크롬 좋아요~!</p>
<p>[ 추가 사항 ]<br />
전체 선택자를 사용하는 경우 pre 엘리먼트에도 스타일이 적용됩니다. 그런데 pre 엘리먼트는 주로 프로그램 소스 코드를 출력할 때 사용되며 소스 코드는 고정폭 글꼴이 적용되는 것이 좋을 것 같아서 pre, code, samp 엘리먼트를 제외한 모든 <a href="http://www.w3.org/TR/html4/sgml/dtd.html#block">block 엘리먼트</a>와 <a href="http://www.w3.org/TR/html401/sgml/dtd.html#inline">inline 엘리먼트</a>에 적용되도록 수정하였습니다.</p>

<div class="wp_syntax"><div class="code"><pre class="css" style="font-family:monospace;">p<span style="color: #00AA00;">,</span> h1<span style="color: #00AA00;">,</span> h2<span style="color: #00AA00;">,</span> h3<span style="color: #00AA00;">,</span> h4<span style="color: #00AA00;">,</span> h5<span style="color: #00AA00;">,</span> h6<span style="color: #00AA00;">,</span> ul<span style="color: #00AA00;">,</span> ol<span style="color: #00AA00;">,</span> dl<span style="color: #00AA00;">,</span> div<span style="color: #00AA00;">,</span> blockquote<span style="color: #00AA00;">,</span> form<span style="color: #00AA00;">,</span> hr<span style="color: #00AA00;">,</span> table<span style="color: #00AA00;">,</span> 
  fieldset<span style="color: #00AA00;">,</span> address<span style="color: #00AA00;">,</span> li<span style="color: #00AA00;">,</span> dt<span style="color: #00AA00;">,</span> dd<span style="color: #00AA00;">,</span> td<span style="color: #00AA00;">,</span> tt<span style="color: #00AA00;">,</span> i<span style="color: #00AA00;">,</span> b<span style="color: #00AA00;">,</span> big<span style="color: #00AA00;">,</span> small<span style="color: #00AA00;">,</span> em<span style="color: #00AA00;">,</span> string<span style="color: #00AA00;">,</span> 
  dfn<span style="color: #00AA00;">,</span> kbd<span style="color: #00AA00;">,</span> var<span style="color: #00AA00;">,</span> cite<span style="color: #00AA00;">,</span> abbr<span style="color: #00AA00;">,</span> acronym<span style="color: #00AA00;">,</span> a<span style="color: #00AA00;">,</span> q<span style="color: #00AA00;">,</span> sub<span style="color: #00AA00;">,</span> sup<span style="color: #00AA00;">,</span> span<span style="color: #00AA00;">,</span> bdo<span style="color: #00AA00;">,</span> input<span style="color: #00AA00;">,</span> 
  select<span style="color: #00AA00;">,</span> textarea<span style="color: #00AA00;">,</span> label<span style="color: #00AA00;">,</span> button<span style="color: #00AA00;">,</span> <span style="color: #000000; font-weight: bold;">font</span> 
<span style="color: #00AA00;">&#123;</span>
  <span style="color: #000000; font-weight: bold;">font-family</span> <span style="color: #00AA00;">:</span> <span style="color: #993333;">sans-serif</span> !important<span style="color: #00AA00;">;</span>
<span style="color: #00AA00;">&#125;</span></pre></div></div>

<p align="left"><a class="tt" href="http://twitter.com/home/?status=http://bit.ly/71Ts7k+%ED%81%AC%EB%A1%AC%2C+%EA%B8%80%EA%BC%B4+%EA%B0%95%EC%A0%9C+%EC%A7%80%EC%A0%95%ED%95%98%EA%B8%B0+%E2%80%93+%EC%82%AC%EC%9A%A9%EC%9E%90+%EC%8A%A4%ED%83%80%EC%9D%BC+%EC%A0%81%EC%9A%A9+" title="Post to Twitter"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro4.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://kiipos.delimount.net/819&amp;title=%ED%81%AC%EB%A1%AC%2C+%EA%B8%80%EA%BC%B4+%EA%B0%95%EC%A0%9C+%EC%A7%80%EC%A0%95%ED%95%98%EA%B8%B0+%E2%80%93+%EC%82%AC%EC%9A%A9%EC%9E%90+%EC%8A%A4%ED%83%80%EC%9D%BC+%EC%A0%81%EC%9A%A9" title="Post to Delicious"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro4.png" alt="Post to Delicious" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://kiipos.delimount.net/819/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>RESTful한 URI(URL) 만들기</title>
		<link>http://kiipos.delimount.net/664</link>
		<comments>http://kiipos.delimount.net/664#comments</comments>
		<pubDate>Thu, 03 Dec 2009 07:23:54 +0000</pubDate>
		<dc:creator>키포스</dc:creator>
				<category><![CDATA[미분류]]></category>
		<category><![CDATA[rest]]></category>
		<category><![CDATA[restful]]></category>
		<category><![CDATA[uri]]></category>
		<category><![CDATA[url]]></category>
		<category><![CDATA[레일스]]></category>

		<guid isPermaLink="false">http://kiipos.delimount.net/?p=664</guid>
		<description><![CDATA[최근 관심을 갖고 틈틈히 공부하고 있는 것이 REST(Representational State Transfer)입니다. REST는 아키텍처 스타일이라고 할 수 있는데 레일스 2에서 REST를 처음 접하게 되었습니다. 아키텍처 레벨은 REST를 기반으로 구현 레벨은 MVC로 설계가 잡히면서 프레임웍이 훨씬 더 짜임새 있어 보였습니다.
좁은 의미에서 REST는 ROA(Resource-Oriented Architecture)라고 볼 수 있습니다. 마치 객체 지향에서 모든 것을 객체(클래스)로 정의하 듯이 ROA에서는 서비스내에 의미를 [...]]]></description>
			<content:encoded><![CDATA[<p>최근 관심을 갖고 틈틈히 공부하고 있는 것이 <a href="http://ko.wikipedia.org/wiki/REST">REST(Representational State Transfer)</a>입니다. REST는 아키텍처 스타일이라고 할 수 있는데 레일스 2에서 REST를 처음 접하게 되었습니다. 아키텍처 레벨은 REST를 기반으로 구현 레벨은 MVC로 설계가 잡히면서 프레임웍이 훨씬 더 짜임새 있어 보였습니다.</p>
<p>좁은 의미에서 REST는 ROA(Resource-Oriented Architecture)라고 볼 수 있습니다. 마치 객체 지향에서 모든 것을 객체(클래스)로 정의하 듯이 ROA에서는 서비스내에 의미를 가질만한 요소들을 리소스(resource) 단위로 정의합니다. 그리고 리소스가 의미를 가지기 위해서는 리소스의 이름이 필요하며 그 이름을 URI라고 합니다. 참고로 URI와 URL은 같은 걸로 보면됩니다.</p>
<p>그런데 리소스만으로는 서비스의 모든 URI를 표현할 수 없습니다. 모든 내용이 그 내용을 보여주는 형식을 필요로 하듯이 리소스도 리소스를 보여주는 형식이 필요합니다. 리소스를 보여주는 형식을 리프리젠테이션스(representaions)라고 합니다. 그리고 URI는 리소스와 리프리젠테이션의 조합으로 만들어집니다. 예를 들어 레일스에서 아래와 같은 URI 관례가 있습니다.</p>
<ul>
<li>/orders</li>
<li>/orders/1</li>
<li>/orders/new</li>
<li>/orders/1/edit</li>
</ul>
<p>&#8216;/orders&#8217;과 &#8216;/orders/1&#8242;처럼 리소스만으로 표현된 URI가 있는가 하면 &#8216;/orders/new&#8217;와 &#8216;/orders/1/edit&#8217;처럼 리소스와 리프리젠테이션이 조합으로 구성된 URI도 있습니다.</p>
<p>일반적으로 리소스를 대상으로 할 수 있는 기본적인 조작(operation)은 몇가지 정해져 있습니다. 흔히 이것들을 CRUD(Create, Read, Update, Delete)라고 하며 레일스에서 정해놓은 CRUD 관련 URI는 아래와 같습니다.</p>
<ul>
<li><strong>List</strong> : GET /orders</li>
<li><strong>Create Form</strong> : GET /orders/new</li>
<li><strong>Create</strong> : POST /orders</li>
<li><strong>Read</strong> : GET /orders/1</li>
<li><strong>Update Form</strong> : GET /orders/1/edit</li>
<li><strong>Update</strong> : PUT /orders/1</li>
<li><strong>Delete</strong> : DELETE /orders/1</li>
</ul>
<p>여기서 주목할만 것은 Create, Update, Delete의 경우 별도의 URI를 갖지 않으며 리소스 URI를 요청하는 방식(method)를 달리 가져갔다는 점입니다. 리소스를 GET으로 요청하면 해당 리소스의 리프리젠테이션을 기대하게 되며 리소스를 POST로 요청하면 해당 새로운 리소스를 추가합니다. 마찬가지로 리소스를 PUT으로 요청하면 해당 리소스를 수정하는 것이며 DELETE 방식으로 요청하면 삭제하는 것을 의미합니다.</p>
<p>이러한 기본 규칙을 통해서 URI는 통일성을 가지게 됩니다. 그리고 이 통일성을 좁은 의미에서 RESTful이라 할 수 있습니다. 나아가 이러한 통일성은 개발 효율로 이어집니다. 새로운 서비스의 API를 접할 때 그 서비스가 RESTful하다면 URI의 기본 규칙이 동일하기 때문에 API 학습량이 줄어들기 때문입니다. 아마도 이러한 점이 관례를 중시하는 레일스가 적극적으로 REST를 도입한 이유가 아닐까 싶습니다.</p>
<p>그런데 서비스 기능 중에는 기본적으로 정의된 CRUD 이외의 것들이 있을 수 있습니다. 예를 들어, 단순하게 주문 목록을 보여주는 기능을 List라 하고 목록과 달리 주문과 주문 품목을 함께 보여주는 기능을 Inquiry라고 정합니다. 이때 Inquiry 리프리젠테이션의 URI는 아래와 같이 2가지로 생각해볼 수 있습니다.</p>
<ul>
<li>GET /orders?view=inquiry</li>
<li>GET /orders/inquiry</li>
</ul>
<p>앞에 것은 쿼리스트링에 리프리젠테이션(view) 정보를 넘기는 경우이며 뒤에 것은 URI에 리프리젠테이션을 명시한 경우입니다. 사실 어느 것으로 하던 상관은 없다고 봅니다. 다만 앞의 것의 경우 List와 Inquiry가 동일하게 주문 목록을 보여준다는 쪽에 무게를 실은 반면에 뒤에 것은 둘이 서로 다른 리프젠테이션이라는 것을 조금 더 명시적으로 표시한 것입니다. 저희 팀의 경우 뒤에 방식을 선택했는데 사용자들이 보기에 List과 Inquiry은 서로 다른 페이지라고 느낄 것이라고 판단했기 때문입니다.</p>
<p>지금까지 REST를 공부하면서 익혔던 것들을 정리해보았습니다. 참고로 <a href="http://book.naver.com/bookdb/book_detail.php?bid=2909069">RESTful Web Services</a>을 보고 있는데 아직 중간 쯤 읽은 상태라 정리한 내용 중에 틀린 부분이 있을 수도 있으니 기회가 되면 덧글 좀 남겨주세요~</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=http://bit.ly/7ygfK8+RESTful%ED%95%9C+URI%28URL%29+%EB%A7%8C%EB%93%A4%EA%B8%B0+" title="Post to Twitter"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro4.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://kiipos.delimount.net/664&amp;title=RESTful%ED%95%9C+URI%28URL%29+%EB%A7%8C%EB%93%A4%EA%B8%B0" title="Post to Delicious"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro4.png" alt="Post to Delicious" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://kiipos.delimount.net/664/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>윈도우즈 7, 아직은 조금 이른가?</title>
		<link>http://kiipos.delimount.net/649</link>
		<comments>http://kiipos.delimount.net/649#comments</comments>
		<pubDate>Tue, 17 Nov 2009 06:48:41 +0000</pubDate>
		<dc:creator>키포스</dc:creator>
				<category><![CDATA[미분류]]></category>
		<category><![CDATA[윈도우즈7]]></category>

		<guid isPermaLink="false">http://kiipos.delimount.net/?p=649</guid>
		<description><![CDATA[집에서 사용하는 PC의 메인보드가 고장나서 A/S 받았는데 내친 김에 윈도우즈 7을 설치해봤습니다. 설치 시간이 XP보다는 오래 걸린 듯 하지만 큰 무리없이 설치되었습니다. 전체적인 UI는 XP랑 크게 다르지 않아서 사용 상에 어려움은 거의 없었습니다. 부팅 시간도 제법 빠른 편이며 종료는 XP보다 빠른 듯 했습니다. 스타일은 XP보다는 비스타에 가까웠으며 맑은 고딕이 기본 시스템 글꼴이라 훨씬 세련되어 보였습니다.
원래 [...]]]></description>
			<content:encoded><![CDATA[<p>집에서 사용하는 PC의 메인보드가 고장나서 A/S 받았는데 내친 김에 윈도우즈 7을 설치해봤습니다. 설치 시간이 XP보다는 오래 걸린 듯 하지만 큰 무리없이 설치되었습니다. 전체적인 UI는 XP랑 크게 다르지 않아서 사용 상에 어려움은 거의 없었습니다. 부팅 시간도 제법 빠른 편이며 종료는 XP보다 빠른 듯 했습니다. 스타일은 XP보다는 비스타에 가까웠으며 맑은 고딕이 기본 시스템 글꼴이라 훨씬 세련되어 보였습니다.</p>
<p>원래 파이어폭스와 크롬을 사용하기 때문에 웹 서핑에 큰 어려움은 없었습니다. 그러나 국민은행 인터넷 뱅킹은 정상적으로 진행할 수 없었습니다(ActiveX 정말 싫다). 그런데 메인보드 포함된 사운드 장치의 드라이버가 정상적으로 설치되지 않았습니다. ASUS 홈페이지에 가봤지만 윈도우즈 7용 드라이버는 없었습니다. 사운드 장치가 비정상적이라 게임을 설치도 해보지 않았습니다.</p>
<p>XP보다 스타일이 좋고 성능도 나쁘지 않아서 윈도우즈 7으로 넘어갈까 했지만 아직은 이른 듯 합니다. 결국 XP 다시 깔아야겠습니다.</p>
<p align="left"><a class="tt" href="http://twitter.com/home/?status=http://bit.ly/8P7tV1+%EC%9C%88%EB%8F%84%EC%9A%B0%EC%A6%88+7%2C+%EC%95%84%EC%A7%81%EC%9D%80+%EC%A1%B0%EA%B8%88+%EC%9D%B4%EB%A5%B8%EA%B0%80%3F+" title="Post to Twitter"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-twitter-micro4.png" alt="Post to Twitter" /></a> <a class="tt" href="http://delicious.com/post?url=http://kiipos.delimount.net/649&amp;title=%EC%9C%88%EB%8F%84%EC%9A%B0%EC%A6%88+7%2C+%EC%95%84%EC%A7%81%EC%9D%80+%EC%A1%B0%EA%B8%88+%EC%9D%B4%EB%A5%B8%EA%B0%80%3F" title="Post to Delicious"><img class="nothumb" src="http://kiipos.delimount.net/wp-content/plugins/tweet-this/icons/tt-delicious-micro4.png" alt="Post to Delicious" /></a></p>]]></content:encoded>
			<wfw:commentRss>http://kiipos.delimount.net/649/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

