<?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; view</title>
	<atom:link href="http://fantazic.com/archives/tag/view/feed" rel="self" type="application/rss+xml" />
	<link>http://fantazic.com</link>
	<description>마음의 빛으로 넓은 세상을 비추고 싶다.</description>
	<lastBuildDate>Sun, 27 Nov 2011 23:52:11 +0000</lastBuildDate>
	
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>NoSQL 정리와 Daum view의 선택</title>
		<link>http://fantazic.com/archives/445</link>
		<comments>http://fantazic.com/archives/445#comments</comments>
		<pubDate>Wed, 24 Mar 2010 04:54:41 +0000</pubDate>
		<dc:creator>따지크</dc:creator>
				<category><![CDATA[Software & Developer]]></category>
		<category><![CDATA[NoSQL]]></category>
		<category><![CDATA[view]]></category>
		<category><![CDATA[소셜검색]]></category>

		<guid isPermaLink="false">http://fantazic.com/?p=445</guid>
		<description><![CDATA[
Tweet

최근 NoSQL 관련 소식이 많이 들려서 나름 정리를 해보았다.
NoSQL이란?

정의: NoSQL은 비관계형 데이터 저장소로 고정된 테이블 스키마나 조인을 지원하지 않고 수평적 확장에 강하다. 학계에서는 구조적 저장소로 부르기도 한다.  구현 제품으로는 구글의 BigTable, 아마존의 Dynamo가 있고, 아파치 HBase, 페이스북의Cassandra등의 오픈소스 제품도 있다. ( NoSQL is a movement promoting a loosely defined class of non-relational data stores that [...]]]></description>
			<content:encoded><![CDATA[<div style="display:block;margin-left: 10px; margin-bottom: 10px;">
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://fantazic.com/archives/445" data-text="NoSQL 정리와 Daum view의 선택" data-count="horizontal" >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
</div>
<p>최근 NoSQL 관련 소식이 많이 들려서 나름 정리를 해보았다.</p>
<h3>NoSQL이란?</h3>
<ul>
<li>정의: NoSQL은 비관계형 데이터 저장소로 고정된 테이블 스키마나 조인을 지원하지 않고 수평적 확장에 강하다. 학계에서는 구조적 저장소로 부르기도 한다.  구현 제품으로는 구글의 BigTable, 아마존의 Dynamo가 있고, 아파치 HBase, 페이스북의Cassandra등의 오픈소스 제품도 있다. ( NoSQL is a movement promoting a loosely defined class of non-relational data stores that break with a long history of relational databases and ACID guarantees. These data stores may not require fixed table schemas, usually avoid join  operations and typically scale horizontally. Academics and papers typically refer to these databases as structured storage. Notable production implementations include Google&#8217;s BigTable and Amazon&#8217;s Dynamo, however there are also many publicly available open source variants including Apache HBase and Facebook&#8217;s Cassandra.) from <a href="http://en.wikipedia.org/wiki/NoSQL">위키피디어</a></li>
<li>NoSQL은 수평확장에 강하다. (strong network partition tolerance)</li>
<li>이미 많은 대형 사이트 솔루션이 &#8216;MySQL + Memcached&#8217;에서 NoSQL로 변화 중이다.</li>
</ul>
<h3>NoSQL 선택 기준</h3>
<p>(참고: <a href="http://blog.nahurst.com/visual-guide-to-nosql-systems">Visual Guide to NoSQL Systems</a>)</p>
<h4>CAP 선택</h4>
<div id="attachment_446" class="wp-caption alignnone" style="width: 310px"><a href="http://fantazic.com/wp-content/uploads/2010/03/media_httpfarm5static_mevIk.png.scaled1000.png"><img class="size-medium wp-image-446" title="Visual Guide to NoSQL Systems" src="http://fantazic.com/wp-content/uploads/2010/03/media_httpfarm5static_mevIk.png.scaled1000-300x225.png" alt="" width="300" height="225" /></a><p class="wp-caption-text">Visual Guide to NoSQL Systems from Nathan Hurst’s Blog</p></div>
<ul>
<li>Consistency: each client always has the same view of the data</li>
<li>Availability: all clients can always read and write</li>
<li>Partition tolerance: the system works well across physical network partitions</li>
</ul>
<p style="padding-left: 30px;">(참고: <a href="http://www.julianbrowne.com/article/viewer/brewers-cap-theorem">Brewer&#8217;s CAP Theorem</a> CAP 중에서 2개만 얻을 수 있고 하나는 포기해야 한다는 이론)<br />
ex) RDM (MySQL) = C + A, NoSQL (Cassandra) = A + P, BigTable = C + P</p>
<h3>Data Model 선택</h3>
<ul>
<li>Relational: RDBMS, support ACIDity</li>
<li>Key-value: 키 기반의 get, put, delete 기능 제공</li>
<li>Column-oriented: 테이블 기반이지만 조인 미지원, 컬럼기반 (not like row-oriented databases)</li>
<li>Document-oriented: JSON, XML 형태의 구조적 문서 저장, 조인 미지원</li>
</ul>
<h3>NoSQL 적용 사례</h3>
<h4>Digg.com</h4>
<ul>
<li>LAMP 기반에서 NoSQL 기반으로 구조 개편 (참고: <a href="http://about.digg.com/blog/saying-yes-nosql-going-steady-cassandra">Saying Yes to NoSQL; Going Steady with Cassandra</a>)</li>
<li>상황
<ul>
<li>끝이 안보이게 빠르게 증가하는 데이터 때문에 고성능, 쓰기 중심의 어플리케이션 구축이 어려움</li>
<li>수평적, 수직적 확장 전략이 필요함</li>
<li>CAP에서 Consistency를 포기할 수 있는 상황 (digg 서비스 특징)</li>
<li>consistency는 어플리케이션 레벨에서 구현 가능</li>
<li>복수의 데이터 센터 지원, 수정 작업 시 다운타임 없어야 함</li>
</ul>
</li>
<li>오픈소스 Cassandra 선택
<ul>
<li><a href="http://cassandra.apache.org/">Cassandra</a>? Dynamo 인프라 위에 BigTable 데이터 모델을 가지고 있는 분산 DB</li>
<li>컬럼기반, 구조적 문서 저장 가능</li>
<li>모든 노드가 개별적(identical)이고 데이터가 여러 노드와 데이터 센터간에 복제되어 안전</li>
<li>수평확장할 경우 읽기, 쓰기 성능이 선형적으로 증가</li>
<li>현재상황
<ul>
<li>full text 인덱싱, relational and graph 인덱싱 추가</li>
<li>Cassandra 성능 향상 (오픈소스 프로젝트 참가)</li>
<li>atomic counter 기능 추가 (Zookeeper 기반)</li>
</ul>
</li>
<li>그 이후의 자세한 내용 <a href="http://about.digg.com/blog/looking-future-cassandra">Looking to  the future with Cassandra</a></li>
</ul>
</li>
</ul>
<h4>digg.com 이외 대형 사이트</h4>
<p>(참고: <a href="http://www.25hoursaday.com/weblog/2010/03/10/BuildingScalableDatabasesAreRelationalDatabasesCompatibleWithLargeScaleWebsites.aspx">Building Scalable Databases: Are Relational Databases Compatible with Large Scale Websites?</a>)</p>
<ul>
<li><a href="http://labs.google.com/papers/bigtable.html">Google: BigTable</a></li>
<li><a href="http://www.allthingsdistributed.com/2007/10/amazons_dynamo.html">Amazon: Dynamo</a></li>
<li><a href="http://blog.linkedin.com/2009/03/20/project-voldemort-scaling-simple-storage-at-linkedin/">Linkedin: Project Voldemort</a></li>
<li><a href="http://nosql.mypopescu.com/post/407159447/cassandra-twitter-an-interview-with-ryan-king">트위터도 Cassandra 사용 검토</a></li>
</ul>
<p>Digg.com에서는 친구가 추천(digg)한 글을 표시해주기 위해 Cassandra를 선택한 것으로 판단된다.</p>
<p>대량의 데이터를 가공하여 개인화된 정보를 표시해줄 때 기존의 RDB + 캐싱 기법이 한계를 갖고 있는데, 이를 비정규화된 데이터를 분산된 서버에 저장하는 방식으로 해결한 것으로 보인다.</p>
<p>즉, 내가 어떤 글을 추천했을 때 내 친구들의 모든 리스트에 내 추천 기록을 저장해서 해당 글이 친구에 의해 추천받았다는 것을 각각의 사용자에게 보여줄 수 있게 되는 것이다.</p>
<p>이는 Daum view에서 내가 구독하는 사용자가 발행한 최신글, 인기글을 보여주거나, 추천 LIVE, 추천평 LIVE를 보여주는 것과 유사하다고 할 수 있는데,</p>
<p>재미있는 사실은 view에서는 전혀 다른 방식으로 이를 해결했다는 것이다.</p>
<p>view에서는 기존 MySQL 기반의 데이터 영역을 Lucene 기반의 검색엔진으로 상당부분 대체했고 서비스가 검색을 기반으로 발전하고 있다.</p>
<p>내가 5명의 블로거를 구독하고 있을 때 이들이 추천한 정보를 가져오기 위해서 SQL 쿼리를 MySQL로 요청하는 것이 아니라,</p>
<p>검색 쿼리를 Lucene으로 요청하게 된다.</p>
<p>예를 들어 RDB 쿼리가 다음과 같다면,</p>
<p style="padding-left: 30px;">SELECT * FROM recommend_table r</p>
<p style="padding-left: 60px;">JOIN user_mapping_table um ON r.userid = um.userid</p>
<p style="padding-left: 30px;">ORDER BY r.id desc;</p>
<p>검색 쿼리가 다음과 같이 만들어 질 수 있다.</p>
<p style="padding-left: 30px;">(daumid:id1 OR daumid:id2 OR daumid:id3 OR daumid:id4 OR daumid:id5) type:recent</p>
<p>만일 구독 글 안에서 검색을 하고 싶으면 검색엔진의 이점은 더욱 분명히 드러나게 된다.</p>
<p style="padding-left: 30px;">SELECT *  FROM recommend_table r</p>
<p style="padding-left: 60px;">JOIN user_mapping_table um ON r.userid =  um.userid</p>
<p style="padding-left: 60px;">JOIN news_table n ON r.news_id = n.id</p>
<p style="padding-left: 30px;">WHERE n.title like &#8216;%검색어%&#8217; OR n.summary like &#8216;%검색어%&#8217;</p>
<p style="padding-left: 30px;">ORDER BY r.id desc;</p>
<p style="padding-left: 30px;">(daumid:id1 OR daumid:id2 OR daumid:id3 OR daumid:id4 OR daumid:id5)  type:recent 검색어</p>
<p>물론 Lucene 기반의 데이터 영역이 가지는 구조적 단점이 있겠지만</p>
<p>현재까지는 이런 변화가 기존에 생각하지 못했던 서비스들을 만들어낼 수 있는 기술적 기반이 되었다고 할 수 있다.</p>
<p>그리고 view 서비스는 사용자의 추천 행위를 검색 랭킹에 반영할 수 있는 소셜 검색의 새로운 도전 무대라고 생각한다.</p>
<p>기존에 서비스 기획과 검색 기획이 별도로 진행됐다면 검색이 바로 서비스인 새로운 모습이 구현되고 있는 것이다.</p>
<p>사용자가 참여하는 서비스가 검색의 품질에 직접 기여하게 되고, 검색 랭킹의 영향으로 다시 사용자 참여를 이끌어내는 새로운 생태계가 만들어지기를 기대해 본다.</p>
]]></content:encoded>
			<wfw:commentRss>http://fantazic.com/archives/445/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>내가 생각하는 소셜 검색</title>
		<link>http://fantazic.com/archives/419</link>
		<comments>http://fantazic.com/archives/419#comments</comments>
		<pubDate>Thu, 18 Feb 2010 04:40:03 +0000</pubDate>
		<dc:creator>따지크</dc:creator>
				<category><![CDATA[Software & Developer]]></category>
		<category><![CDATA[view]]></category>
		<category><![CDATA[소셜 검색]]></category>
		<category><![CDATA[소셜 네트워크]]></category>

		<guid isPermaLink="false">http://fantazic.com/?p=419</guid>
		<description><![CDATA[
Tweet

설날에 집안 정리를 하면서 소셜 검색에 대한 생각도 정리해 보았다.
최근 소셜 검색은 다시 새롭게 정의되고 있으며 한마디로 정의하기 힘든 영역이라 할 수 있다. 하지만 구글에서 시도한 실험들을 따라가다 보면 소셜검색의 실체가 드러난다.
1. 사용자가 컨텐츠를 평가
구글이 Digg.com을 인수하려는 시도를 하다 결국 자체적으로 구글 검색 결과에 대해 사용자가 직접 평가를 하는 시스템을 도입했다. 하지만 서비스 컨셉의 충돌로 [...]]]></description>
			<content:encoded><![CDATA[<div style="display:block;margin-left: 10px; margin-bottom: 10px;">
<a href="http://twitter.com/share" class="twitter-share-button" data-url="http://fantazic.com/archives/419" data-text="내가 생각하는 소셜 검색" data-count="horizontal" >Tweet</a><script type="text/javascript" src="http://platform.twitter.com/widgets.js"></script>
</div>
<p>설날에 집안 정리를 하면서 소셜 검색에 대한 생각도 정리해 보았다.</p>
<p>최근 소셜 검색은 다시 새롭게 정의되고 있으며 한마디로 정의하기 힘든 영역이라 할 수 있다. 하지만 구글에서 시도한 실험들을 따라가다 보면 소셜검색의 실체가 드러난다.</p>
<p><strong>1. 사용자가 컨텐츠를 평가</strong></p>
<p><a href="http://techcrunch.com/2008/07/22/google-in-final-negotiations-to-acquire-digg-for-around-200-million/">구글이 Digg.com을 인수하려는 시도</a>를 하다 결국 자체적으로 구글 검색 결과에 대해 사용자가 직접 평가를 하는 시스템을 도입했다. 하지만 서비스 컨셉의 충돌로 의미있는 결과를 만들어내지 못한 것으로 알고 있다. 이를 통해 알 수 있는 것은 사용자 추천이 검색 결과에 잘  융합되지 못한다면 오히려 별도의 서비스로 사용자 추천을 수집하는 방식이 효과적이라는 것이다.</p>
<p>사용자 평가를 활용하면 범용적인 PageRank보다 더 의미있는 개인화된 랭킹, 그리고 사회적 환경에 따라 변하는 동적 랭킹을 제공하는 것이 가능할 것이다.  이를 위해서는 해당 컨텐츠를 누가 추천했는지 추천자를 분류하는 것이 중요하고 내가 신뢰할 수 있는 추천자의 역할이 중요해진다.</p>
<p><strong>2. 소셜 네트워크 내에서의 검색</strong></p>
<p><a href="http://googleblog.blogspot.com/2009/10/introducing-google-social-search-i.html">최근에 구글에서 발표한 소셜검색</a>은 자신의 소셜 네트워크 안에서 검색을 해주는 기술이다. 내 친구가 작성한 블로그, 사진, 트위터 등을 모두 검색해주기 때문에 나름 의미가 있지만 이것만으로는 의미있는 가치를 만들어주지는 못할 것이다.</p>
<p>Daum과 같은 포털에서는 포털 내의 사용자가 생산한 컨텐츠 검색을 제공해 줄 수 있으나 오픈 플랫폼을 기반으로 외부 네트워크를 확장하고 컨텐츠를 확보해야만 진정한 소셜 검색이 될 수 있다고 생각한다.</p>
<p><strong>3. 아이덴티티 통합</strong></p>
<p>구글 버즈가 새로 오픈했는데 버즈의 가장 강력한 기능은 사용자의 아이덴티티를 묶어 주는데 있다. 구글은 이미 전세계의 모든 웹페이지를 인덱싱하고 있지만 각각의 글이 누구의 소유인지 추측만 할 뿐 정확히 알지 못한다. 그런데 구글 버즈를 통해 사용자들이 스스로 자신들의 트위터, 블로그, 플리커와 같은 웹에 흩어져 있는 자신의 아이덴티티를 묶어 주고 있는 상황이 되었다.</p>
<p>물론 구글은 이미 url 기반으로 모든 정보를 수집하고 있기 때문에 이런 통합된 아이덴티티를 기준으로 내 버즈를 쉽게 생성할 수 있고, 이 방식은 API를 활용한 FriendsFeed와는 전혀 다른 방식이며 비동기적으로 수집이 수행된다.</p>
<p><strong>4. 관심별로 사용자 그룹핑</strong></p>
<p>소셜 검색에서 사용자별로 개인화된 검색 결과를 보여주는 것은 기술적으로 불가능해 보일 수 있다. 하지만 이는 사용자 클러스터로 해결이 가능하다. Daum view에서는 이미 키워드 기반으로 사용자를 묶어주는 서비스를 준비하고 있으며, 사용자의 아이덴티티를 통합할 수 있다면 그 데이터를 기반으로 사용자의 관심을 알 수 있고, 이 관심을 기반으로 사용자를 분류할 수 있다.</p>
<p>또한 추천자도 이와 동일한 관심에 따라 분류됐을 때 개인에게 의미있는 컨텐츠를 찾아줄 수 있는 가능성이 커진다.  이런 세분화된 추천은 소셜 랭킹에 반영될 수 있는 중요한 요소이다. 즉, 내가 관계를 맺고 있는 사람들의 추천, 좀 더 넓은 의미로 내가 생성한 글들, 내가 구독하는 글들로 판단된 관심과 동일한 관심을 갖고 있는 사람들의 추천을 통해 그 사람이 원하는 정보를 찾아줄 수 있다면 이것이 새롭게 가치를 창조하는 미래의 소셜 검색이라고 할 수 있다.</p>
<p>참고: <a href="http://webscience.creation.net/16">소셜 검색 알고리듬 찾기</a></p>
]]></content:encoded>
			<wfw:commentRss>http://fantazic.com/archives/419/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

