<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-4769019860571672243</id><updated>2012-02-17T00:05:13.732+09:00</updated><category term='바탕화면'/><category term='sun studio 12'/><category term='NateOn'/><category term='내책상'/><category term='멀틱스'/><category term='뉴스'/><category term='센토스 설치'/><category term='월드컵'/><category term='아이폰 앱스'/><category term='awk'/><category term='그래픽 카드'/><category term='Trac'/><category term='모바일'/><category term='bzip2'/><category term='Solaris 10'/><category term='미닉스'/><category term='solaris'/><category term='설치'/><category term='서버보유대수'/><category term='Screenshot'/><category term='facebook'/><category term='PDP-1'/><category term='리차드 스톨만'/><category term='소유권'/><category term='패키지'/><category term='한글입력기'/><category term='PERL'/><category term='row_number()'/><category term='iPhone'/><category term='켄 톰슨'/><category term='내자리'/><category term='리누스'/><category term='훅'/><category term='Bash'/><category term='슈퍼유저'/><category term='아이폰'/><category term='언어'/><category term='아이튠즈'/><category term='Python'/><category term='배포판'/><category term='윈도우즈 7'/><category term='리눅스 설치'/><category term='옴니아2'/><category term='gadget'/><category term='GNU'/><category term='파이선'/><category term='html/css'/><category term='minix'/><category term='dag'/><category term='리눅스/centos'/><category term='프로그램'/><category term='솔라리스 서버'/><category term='Index'/><category term='스크린샷'/><category term='서울'/><category term='cpan 설치'/><category term='일상'/><category term='i-라이트'/><category term='갤럭시S'/><category term='ARPA'/><category term='페이스북'/><category term='xfce4'/><category term='QT'/><category term='컴퓨터'/><category term='한겨레'/><category term='컴퓨터이야기'/><category term='Multic'/><category term='계정'/><category term='폭설'/><category term='패키지관리'/><category term='Hook'/><category term='쉘스크립트'/><category term='kde'/><category term='openssh'/><category term='tar'/><category term='애플'/><category term='한컴오피스'/><category term='스크린샷(Screenshot)'/><category term='책'/><category term='CSS3'/><category term='서버'/><category term='Database'/><category term='Linux'/><category term='unix'/><category term='압축해제'/><category term='ATI'/><category term='gtk+'/><category term='레드햇'/><category term='서울 폭설'/><category term='운영체제'/><category term='iphone 3GS'/><category term='솔라리스'/><category term='앱스'/><category term='Join'/><category term='FileApp'/><category term='JSP'/><category term='삼성전자'/><category term='html5'/><category term='쉘'/><category term='Multics'/><category term='리눅스'/><category term='sage'/><category term='wmvare'/><category term='이야기'/><category term='허가권'/><category term='스마트폰'/><category term='커널'/><category term='로마자변환기'/><category term='파이썬 Python'/><category term='firefox'/><category term='베팅'/><category term='yum'/><category term='유닉스'/><category term='css'/><category term='레드햇 리눅스'/><category term='쉘프로그래밍'/><category term='History'/><category term='일기'/><category term='자바스크립트'/><category term='SCIM'/><category term='파이어폭스'/><category term='테마'/><category term='CPAN'/><category term='네트워크 설치'/><category term='centos'/><category term='MySQL'/><category term='센토드'/><category term='구글'/><category term='타임서버'/><category term='서버대수'/><category term='Analyzed'/><category term='안드로이드'/><category term='visual studio'/><category term='펄'/><category term='센토스'/><category term='아이폰 3GS'/><category term='HTML &amp;amp; CSS'/><category term='해킹'/><category term='Process'/><category term='itunes'/><category term='OS'/><category term='댓글시간'/><category term='네이트온'/><category term='파이썬 팁'/><category term='javascript'/><category term='apple'/><category term='바탕화면 꾸미기'/><category term='방화벽'/><category term='centos 설치'/><category term='gzip'/><category term='불여우'/><category term='rpm'/><category term='gnome'/><category term='Themes'/><category term='리스트중복제거'/><category term='Html5/CSS3'/><category term='운영제체'/><category term='파티션'/><category term='cut'/><category term='기사'/><category term='파이썬'/><category term='남아공월드컵'/><category term='XFCE 데스크탑'/><category term='Windows 7'/><category term='가젯'/><category term='아이폰해킹'/><category term='Mobile'/><category term='Redhat'/><category term='기초 명령어'/><category term='platform'/><category term='데이터베이스'/><category term='아이폰 요금제'/><category term='삼성'/><category term='bsd'/><category term='Trac설치'/><category term='데스크탑'/><category term='용량표시'/><category term='한겨레신문'/><category term='openssh 5.6'/><category term='월드컵이벤트'/><category term='monitoring'/><category term='Linux/Centos'/><category term='samsung'/><category term='wxPython'/><category term='디스크용량'/><category term='C#'/><category term='기타'/><category term='Linux/Unix'/><category term='xfce'/><category term='플랫폼'/><category term='기초'/><category term='데몬'/><category term='iptables'/><category term='MYSQL5'/><category term='Perl 객체지향'/><title type='text'>타키투스의 컴퓨터 생활.</title><subtitle type='html'>타키투스의 컴퓨터 생활.^_^</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><link rel='next' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default?start-index=101&amp;max-results=100'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>109</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-8480964523743335120</id><published>2010-12-08T15:25:00.000+09:00</published><updated>2010-12-21T01:34:40.555+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Join'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><category scheme='http://www.blogger.com/atom/ns#' term='기타'/><category scheme='http://www.blogger.com/atom/ns#' term='Index'/><title type='text'>MySQL 5.1 페이징 쿼리 최적화.</title><content type='html'>&lt;p&gt;게시판을 작성하다 보면 페이징으로 인해서 부득이 하게 limit 20,10 이런식으로 쿼리를 작성하게 된다. 문제는 LIMIT 20,10 테이블 행의 풀 스캔을 일으킬수 있다는 것이다. 그리고 비용도 많이 드는데 이를 피할 수 있는 방법은 다음과 같다.&lt;/p&gt;&lt;br /&gt;[code sql]&lt;br /&gt;select * from xe_comments_list limit 20, 10;&lt;br /&gt;[/code]&lt;br /&gt;&lt;p&gt;이게 과연 효과가 있을까? 다음을 보자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[code sql]&lt;/p&gt;&lt;p&gt;mysql&amp;gt; explain extended select * from xe_comments_list limit 20, 10;&lt;br /&gt;+----+-------------+------------------+------+---------------+------+---------+------+---------+----------+-------+&lt;br /&gt;| id | select_type | table &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; | type | possible_keys | key&amp;nbsp; | key_len | ref&amp;nbsp; | rows &amp;nbsp;&amp;nbsp; | filtered | Extra |&lt;br /&gt;+----+-------------+------------------+------+---------------+------+---------+------+---------+----------+-------+&lt;br /&gt;|&amp;nbsp; 1 | SIMPLE &amp;nbsp; &amp;nbsp;&amp;nbsp; | xe_comments_list | ALL&amp;nbsp; | NULL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; | NULL | NULL &amp;nbsp;&amp;nbsp; | NULL | 1016616 | &amp;nbsp; 100.00 | &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;br /&gt;+----+-------------+------------------+------+---------------+------+---------+------+---------+----------+-------+&lt;br /&gt;1 row in set, 1 warning (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&amp;gt; show status like 'last_query_cost';&lt;br /&gt;+-----------------+---------------+&lt;br /&gt;| Variable_name &amp;nbsp; | Value &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;br /&gt;+-----------------+---------------+&lt;br /&gt;| Last_query_cost | 208867.199000 |&lt;br /&gt;+-----------------+---------------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&amp;gt; explain extended select head, arrange from xe_comments_list inner join ( select comment_srl from xe_comments_list limit 20, 10) as lim using(comment_srl);&lt;br /&gt;+----+-------------+------------------+--------+---------------+---------+---------+-----------------+---------+----------+-------------+&lt;br /&gt;| id | select_type | table &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; | type &amp;nbsp; | possible_keys | key &amp;nbsp; &amp;nbsp; | key_len | ref &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; | rows &amp;nbsp;&amp;nbsp; | filtered | Extra &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;br /&gt;+----+-------------+------------------+--------+---------------+---------+---------+-----------------+---------+----------+-------------+&lt;br /&gt;|&amp;nbsp; 1 | PRIMARY &amp;nbsp; &amp;nbsp; | &amp;lt;derived2&amp;gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; | ALL &amp;nbsp;&amp;nbsp; | NULL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; | NULL &amp;nbsp;&amp;nbsp; | NULL &amp;nbsp;&amp;nbsp; | NULL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; | &amp;nbsp; &amp;nbsp;&amp;nbsp; 10 | &amp;nbsp; 100.00 | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;br /&gt;|&amp;nbsp; 1 | PRIMARY &amp;nbsp; &amp;nbsp; | xe_comments_list | eq_ref | PRIMARY &amp;nbsp; &amp;nbsp; &amp;nbsp; | PRIMARY | 8 &amp;nbsp; &amp;nbsp; &amp;nbsp; | lim.comment_srl | &amp;nbsp; &amp;nbsp; &amp;nbsp; 1 | &amp;nbsp; 100.00 | &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;br /&gt;|&amp;nbsp; 2 | DERIVED &amp;nbsp; &amp;nbsp; | xe_comments_list | index&amp;nbsp; | NULL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; | PRIMARY | 8 &amp;nbsp; &amp;nbsp; &amp;nbsp; | NULL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; | 1016616 | &amp;nbsp; 100.00 | Using index |&lt;br /&gt;+----+-------------+------------------+--------+---------------+---------+---------+-----------------+---------+----------+-------------+&lt;br /&gt;3 rows in set, 1 warning (0.00 sec)&lt;br /&gt;&lt;br /&gt;mysql&amp;gt; show status like 'last_query_cost';&lt;br /&gt;+-----------------+----------+&lt;br /&gt;| Variable_name &amp;nbsp; | Value &amp;nbsp;&amp;nbsp; |&lt;br /&gt;+-----------------+----------+&lt;br /&gt;| Last_query_cost | 0.000000 |&lt;br /&gt;+-----------------+----------+&lt;br /&gt;1 row in set (0.00 sec)&lt;br /&gt;&lt;/p&gt;&lt;p&gt;[/code]&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;last_query_cost 가 join 을 하는 방법이 더 적다.&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-8480964523743335120?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/8480964523743335120/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/12/mysql-51-%ED%8E%98%EC%9D%B4%EC%A7%95-%EC%BF%BC%EB%A6%AC-%EC%B5%9C%EC%A0%81%ED%99%94.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/8480964523743335120'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/8480964523743335120'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/12/mysql-51-%ED%8E%98%EC%9D%B4%EC%A7%95-%EC%BF%BC%EB%A6%AC-%EC%B5%9C%EC%A0%81%ED%99%94.html' title='MySQL 5.1 페이징 쿼리 최적화.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-7373772624300020078</id><published>2010-12-03T22:23:00.000+09:00</published><updated>2010-12-21T01:34:39.227+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='dag'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='yum'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>Dag 저장소 추가.</title><content type='html'>Yum 은 매우 사용하기 편하고 훌륭한 패키지 관리 프로그램입니다. 패키지의 의존성, 버전관리등을 편리하게 해줍니다. 그런데 Yum 은 리눅스 배포판에 의존적이어서 셀수도 없이 많은 패키지들의 관리를 제공하지는 않습니다. 그래서 Third party 에서 많은 패키지들을 제작하고 Yum 저장소(Repository)도 함께 제공하는데, Yum 은 이 저장소 주소를 추가하는 것만으로도 Third party 패키지도 관리할 수 있습니다.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# vim /etc/yum.repos.d/Dag.repo&lt;br /&gt;[dag]&lt;br /&gt;name=Dag RPM Repository for Red Hat Enterprise Linux&lt;br /&gt;baseurl=http://apt.sw.be/redhat/el$releasever/en/$basearch/dag&lt;br /&gt;gpgcheck=1&lt;br /&gt;enabled=0&lt;br /&gt;&lt;br /&gt;]# rpm --import http://tacitus.textcube.com/139/attach/RPM-GPG-KEY.dag.txt&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;이렇게 하면 준비가 끝난 것입니다. 사용은 다음과 같이 합니다.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# yum --enablerepo=dag search ncftp&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;특징은 '--enablerepo=dag' 를 사용해야 한다는 것입니다. (물론, Dag.repo 파일에서 enabled=1로 설정하면 옵션 사용을 하지 않아도 됩니다.)&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XE47XbWqFX.txt" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/txt.gif" alt="" style="vertical-align: middle;" /&gt; RPM-GPG-KEY.dag.txt&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-7373772624300020078?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/7373772624300020078/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/12/dag-%EC%A0%80%EC%9E%A5%EC%86%8C-%EC%B6%94%EA%B0%80.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7373772624300020078'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7373772624300020078'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/12/dag-%EC%A0%80%EC%9E%A5%EC%86%8C-%EC%B6%94%EA%B0%80.html' title='Dag 저장소 추가.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6220122163170540606</id><published>2010-11-18T09:49:00.000+09:00</published><updated>2010-12-21T01:34:37.385+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='MYSQL5'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='프로그램'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><title type='text'>Mysql Tunning Program.</title><content type='html'>&lt;P&gt;Mysql Tunning 을 도와주는 프로그램.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;A href="http://pkg.tini4u.net/dbms/mysql/tuning-primer.tar.gz"&gt;http://pkg.tini4u.net/dbms/mysql/tuning-primer.tar.gz&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;파일.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XFzyWmj0mQ.gz" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/gz.gif" alt="" style="vertical-align: middle;" /&gt; tuning-primer.tar.gz&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6220122163170540606?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6220122163170540606/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/11/mysql-tunning-program.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6220122163170540606'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6220122163170540606'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/11/mysql-tunning-program.html' title='Mysql Tunning Program.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-5611426768968110159</id><published>2010-11-03T23:10:00.000+09:00</published><updated>2010-12-21T01:34:34.699+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='자바스크립트'/><category scheme='http://www.blogger.com/atom/ns#' term='언어'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>변수사용시 var 를 사용하고 않하고 차이.</title><content type='html'>자바스크립트를 사용하는데 있어서 변수를 'var' 를 이용하는 것과 이용하지 않는 것에는 어떤 차이가 있을까?&lt;br /&gt;&lt;br /&gt;변수의 Scope 와 관련이 있다. &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;결론부터 말하면 var 를 사용하지 않으면 모두 전역변수화 된다. 함수내에서 선언되어도 전역변수화 된다는 것이다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;예제.&lt;br /&gt;[code javascript]&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp; msg = "난 전역변수다";&lt;br /&gt;&amp;nbsp;&amp;nbsp; function fncScope(){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; var msg = "난 지역변수 일까??";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; alert(msg);&lt;br /&gt;&amp;nbsp;&amp;nbsp; }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;lt;script&amp;gt; fncScope(); &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;위의 예제의 출력은 "난 지역변수 일까??" 이다.&lt;br /&gt;&lt;br /&gt;[code javascript]&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;&amp;nbsp;msg = "난 전역변수다";&lt;br /&gt;&amp;nbsp;function fncScope(){&lt;br /&gt;&amp;nbsp; &amp;nbsp; alert(msg);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt; fncScope(); &amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;위 예제의 출력은 "난 전역변수다" 이다.&lt;br /&gt;&lt;br /&gt;[code javascript]&lt;br /&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;&amp;nbsp;function fncScope(){&lt;br /&gt;&amp;nbsp;&amp;nbsp; msg = "난과연지역변수일까?";&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;nbsp;function call(){&lt;br /&gt;&amp;nbsp;&amp;nbsp; alert(msg);&lt;br /&gt;&amp;nbsp;}&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;&amp;lt;script&amp;gt;&lt;br /&gt;&amp;nbsp;fncScope();&lt;br /&gt;&amp;nbsp;call();&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;위 결과는 "난과연지역변수일까?" 이다. &lt;span style="color: rgb(255, 0, 0); font-weight: bold;"&gt;var 붙이지 않은 함수내 변수는 전역변수가 되었기 때문에 다른 함수내에서도 호출이 가능한 것이다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;출처: http://www.gurubee.net/pages/viewpage.action?pageId=1507952&lt;br style="color: rgb(255, 0, 0); font-weight: bold;"&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-5611426768968110159?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/5611426768968110159/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/11/%EB%B3%80%EC%88%98%EC%82%AC%EC%9A%A9%EC%8B%9C-var-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B3%A0-%EC%95%8A%ED%95%98%EA%B3%A0-%EC%B0%A8%EC%9D%B4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/5611426768968110159'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/5611426768968110159'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/11/%EB%B3%80%EC%88%98%EC%82%AC%EC%9A%A9%EC%8B%9C-var-%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B3%A0-%EC%95%8A%ED%95%98%EA%B3%A0-%EC%B0%A8%EC%9D%B4.html' title='변수사용시 var 를 사용하고 않하고 차이.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-1511555715567550536</id><published>2010-11-01T12:54:00.000+09:00</published><updated>2010-12-21T01:34:33.339+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='패키지관리'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='yum'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>패키지 관리 - YUM(Yellowdog Updater Modified)</title><content type='html'>RPM은 로컬 호스트 내에서 파일이 존재해야 한다. 만일 시스템에 설치된 패키지(Package)가 업데이트 되었다면 관리자는 이 업데이트 패키지 리스트를 받아 전부 다운로드 받은후에 rpm 명령어로 의존성을 해결하면서 설치를 해줘야 할 것이다. 이 얼마나 짜증나는 일인지....&lt;br /&gt;&lt;br /&gt;이렇게 짜증나는 일을 쉽게 해결할 수는 없을까? 미 노스캐롤라이나의 듀크 대학교 물리학과에서 레드햇 리눅스를 사용하고 있었던 모양이다. 그리고 얼마후에 패키지관리에 너무 많은 시간이 든다는 것을 알게된 학과에서 이를 네트워크로 자동으로 감지하고 의존성을 해결하면서 업데이트 뿐만 아니라 설치, 삭제까지 할수 있는 프로그램을 제작했는데 그것이 바로 YUM(Yellowdog Updater Modified)이다. &lt;br /&gt;&lt;br /&gt;YUM은 네트워크를 통해서 RPM을 관리해준다. 설치, 삭제, 업데이트를 의존성을 해결하면서 모두 자동으로 해준다. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;패키지 검색&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;어떤 프로그램을 알고 싶다면 검색을 하면된다. 예를들면, ftp 프로그램을 알고 싶다면 다음과 같이 하면 된다.&lt;br /&gt;[code bash]&lt;br /&gt;]# yum search ftp&lt;br /&gt;bug-buddy.x86_64 : A bug reporting utility for GNOME&lt;br /&gt;esound.i386 : Allows several audio streams to play on a single audio device.&lt;br /&gt;esound.x86_64 : Allows several audio streams to play on a single audio device.&lt;br /&gt;esound-devel.i386 : Development files for EsounD applications.&lt;br /&gt;esound-devel.x86_64 : Development files for EsounD applications.&lt;br /&gt;gdm.x86_64 : The GNOME Display Manager.&lt;br /&gt;gdm-docs.x86_64 : GDM Documentation&lt;br /&gt;gftp.x86_64 : A multi-threaded FTP client for the X Window System.&lt;br /&gt;mc.x86_64 : User-friendly text console file manager and visual shell&lt;br /&gt;kdebase.i386 : K Desktop Environment - core files&lt;br /&gt;kdebase.x86_64 : K Desktop Environment - core files&lt;br /&gt;squid.x86_64 : The Squid proxy caching server.&lt;br /&gt;aria2.x86_64 : Download utility with BitTorrent and Metalink support&lt;br /&gt;atftp.x86_64 : Advanced Trivial File Transfer Protocol (TFTP) client&lt;br /&gt;atftp-server.x86_64 : Advanced Trivial File Transfer Protocol (TFTP) server&lt;br /&gt;atop.x86_64 : AT Computing System and Process Monitor&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;패키지의 설명과 패키지 이름에서 ftp 가 들어가있으면 목록을 보여준다. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;패키지 이름으로 검색&lt;/span&gt;을 하고 싶다면 다음과 같이 한다.&lt;br /&gt;[code bash]&lt;br /&gt;]# yum list *ftp*&lt;br /&gt;atftp.x86_64 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 0.7-6.el5.rf &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; rpmforge&lt;br /&gt;atftp-server.x86_64 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.7-6.el5.rf &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; rpmforge&lt;br /&gt;ftp.x86_64 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 0.17-35.el5 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; base &amp;nbsp;&amp;nbsp; &lt;br /&gt;ftpproxy.x86_64 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1.2.3-2.2.el5.rf &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; rpmforge&lt;br /&gt;fuse-curlftpfs.x86_64 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.9.1-1.el5.rf &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; rpmforge&lt;br /&gt;gftp.x86_64 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 1:2.0.18-3.2.2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; base &amp;nbsp;&amp;nbsp; &lt;br /&gt;lftp.x86_64 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 4.0.10-1.el5.rf &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rpmforge&lt;br /&gt;libobexftp.x86_64 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.22-1.el5.rf &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rpmforge&lt;br /&gt;libobexftp-devel.x86_64 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 0.22-1.el5.rf &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rpmforge&lt;br /&gt;obexftp.x86_64&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;사용할 수 있는 모든 패키지 리스트.&lt;/span&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# yum list &lt;br /&gt;[/coe]&lt;br /&gt;&lt;br /&gt;패키지 저장소에서 활용할수 있는 모든 패키지를 보여준다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;패키지 설치.&lt;/span&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# yum install gftp&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;위와같이 패키지를 설치할수 있다. 패키지 파일의 전체파일 이름을 알 필요도 없다. 그리고 의존성이 있다면 그것도 자동으로 설치해준다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;패키지 삭제.&lt;/span&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# yum remove gftp&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;삭제도 패키지 파일 이름을 입력할 필요도 없다. 의존성도 걸리면 자동으로 다 해결해 준다. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;패키지 정보.&lt;/span&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# yum info gftp&lt;br /&gt;Available Packages&lt;br /&gt;Name &amp;nbsp; &amp;nbsp; &amp;nbsp; : gftp&lt;br /&gt;Arch &amp;nbsp; &amp;nbsp; &amp;nbsp; : x86_64&lt;br /&gt;Epoch &amp;nbsp; &amp;nbsp;&amp;nbsp; : 1&lt;br /&gt;Version &amp;nbsp;&amp;nbsp; : 2.0.18&lt;br /&gt;Release &amp;nbsp;&amp;nbsp; : 3.2.2&lt;br /&gt;Size &amp;nbsp; &amp;nbsp; &amp;nbsp; : 939 k&lt;br /&gt;Repo &amp;nbsp; &amp;nbsp; &amp;nbsp; : base&lt;br /&gt;Summary &amp;nbsp;&amp;nbsp; : A multi-threaded FTP client for the X Window System.&lt;br /&gt;URL &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; : http://gftp.seul.org/&lt;br /&gt;License &amp;nbsp;&amp;nbsp; : GPL&lt;br /&gt;Description: gFTP is a multi-threaded FTP client for the X Window System. gFTP&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; : supports simultaneous downloads, resumption of interrupted file&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; : transfers, file transfer queues to allow downloading of multiple&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; : files, support for downloading entire directories/subdirectories, a&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; : bookmarks menu to allow quick connection to FTP sites, caching of&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; : remote directory listings, local and remote chmod, drag and drop, a&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; : connection manager and much more.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; : &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; : Install gftp if you need a graphical FTP client.&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;패키지의 정보를 알려준다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;업데이트 패키지 확인&lt;/span&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# yum check-update&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;업데이트할 패키지가 존재한다면 리스트를 보여준다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;패키지 업데이트&lt;/span&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# yum update&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;패키지들을 자동으로 확인해서 업데이트를 해준다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;패키지 그룹 보기.&lt;/span&gt;&lt;br /&gt;이거는 약간 설명이 필요하다. RPM 패키지들은 일종의 그룹을 가지고 있다. 이 패키지는 네트워크 관련 패키지, 저 패키지는 시스템 관련 패키지등 식이다. 이를 확인할 수 있는 방법이 바로 아래 명령이다.&lt;br /&gt;[code bash]&lt;br /&gt;]# yum grouplist&lt;br /&gt;Installed Groups:&lt;br /&gt;&amp;nbsp;&amp;nbsp; Editors&lt;br /&gt;&amp;nbsp;&amp;nbsp; Yum Utilities&lt;br /&gt;Available Groups:&lt;br /&gt;&amp;nbsp;&amp;nbsp; Administration Tools&lt;br /&gt;&amp;nbsp;&amp;nbsp; Authoring and Publishing&lt;br /&gt;&amp;nbsp;&amp;nbsp; Base&lt;br /&gt;&amp;nbsp;&amp;nbsp; Beagle&lt;br /&gt;&amp;nbsp;&amp;nbsp; Cluster Storage&lt;br /&gt;&amp;nbsp;&amp;nbsp; Clustering&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;위 내용을 보면 설치된 그룹과 앞으로 설치할수 있는 그룹을 알 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;그룹 패키지 설치.&lt;/span&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# yum groupinstall XFCE-4.4&lt;br /&gt;[/code]&lt;br /&gt;XFCE4 를 설치할때 패키지들을 하나하나 설치할 필요없다. 위의 예제처럼 XFCE-4.4 그룹을 설치해주면 자동으로 모두 XFCE4 가 자동으로 설치해준다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;더 놀라운 기능은 다운로드한 rpm 파일을 설치할 수 있다&lt;/span&gt;는 것이다. 이렇게 되면 rpm 파일에 의존성이 필요할 경우 네트워크를 통해서 자등올 설치를 해준다.&lt;br /&gt;[code bash]&lt;br /&gt;]# yum localinstall kernel-2.6.32-100.0.19.x86_64.rpm&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;배포판을 통째로 업그레이드&lt;/span&gt;를 해야할 때가 있다. 예를들어 CentOS 5.5 가 6.0으로 업그레이드가 되었다면 업그레이드를 해줘야 해줘야 하는데 다음과 같이 한다.&lt;br /&gt;[code bash]&lt;br /&gt;]# yum upgrade&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;이렇게하면 배포판을 업그레이드 해준다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;yum 은&lt;/span&gt; 네트워크를 연결해서 자동으로 패키지를 로컬호스트에 다운로드한다. 그리고 패키지 리스트를 캐쉬해서 들고 있는데 어떤 이유에서 yum 이 꼬일때가 있다. 이럴때는 이러한 모든 정보를 삭제하고 다시 해주면 해결되는데, 다음과 같은 명령어로 &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;초기화를 해줄 수 있다.&lt;/span&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# yum clean all&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;YUM이 나온후에 RPM명령어를 잘 사용하지 않게 되었다. 너무나 편리하기 때문이다. &lt;br /&gt;&lt;br /&gt;다음에는 프로그램 설치의 마지막으로 소스 컴파일 설치에 대해서 알아보도록 하겠다. &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-1511555715567550536?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/1511555715567550536/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/11/%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B4%80%EB%A6%AC-yumyellowdog-updater-modified.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1511555715567550536'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1511555715567550536'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/11/%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B4%80%EB%A6%AC-yumyellowdog-updater-modified.html' title='패키지 관리 - YUM(Yellowdog Updater Modified)'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-1132754350159618760</id><published>2010-10-25T22:46:00.000+09:00</published><updated>2010-12-21T01:34:28.564+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='패키지관리'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='rpm'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스/centos'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>패키지 관리 하기 RPM(Redhat Package Management)</title><content type='html'>초기 리눅스는 윈도우즈와는 달리 setup.exe 와같은 프로그램이 없었다. 윈도우즈의 경우에는 프로그램을 사용하기위해서는 '설치'라는 과정을 거쳐야 한다. 그리고 프로그램이 필요가 없어졌을 경우에는 '삭제(uninstall)'을 통해서 깔끔하게 프로그램을 제거할 수 있다. 이러한 설치와 제거의 과정은 그저 파일을 적당한 위치에 복사는 것을 벋어나 OS내에 프로그램정보를 기록하고 제어할수 있도록 일종에 OS에 융합되는 면이 많이 있다.&lt;br /&gt;&lt;br /&gt;하지만 리눅스에서는 이러한 설치와 삭제가 필요가 없었다. 왜냐하면 컴파일한 바이너리를 그져 적당한 디렉토리에, 더 엄밀히 말하면 사용자가 넣고 싶은 곳 어디서든지 있기만하면 실행이 가능하기 때문이다. 윈도우즈와는 달리 리눅스는 OS에 융합되거나 하지 않는다. 라이브러리(Library)만 제대로 갖추고 있다면 프로그램이 동작하는데에는 아무런 문제가 없다.&lt;br /&gt;&lt;br /&gt;그런데 리눅스의 경우에 일일이 모든 컴파일된 바이너리와 라이브러리들을 적당한 곳에 넣을려면 힘이든다. 수백대의 컴퓨터가 있다고 한다면 어떻게 해야할지 모를일이다. 이런것들을 마치 압축하듯이 하나의 패키지로 모아놓은 파일로 제작을 해놓는다. 그리고 특정한 명령어를 통해서 OS에 배포되도록 만들어놓기도 하는데 RedHat 계열이 바로 이러한 시스템을 사용한다.&lt;br /&gt;&lt;br /&gt;RPM(Redhat Package Management)는 미리 컴파일된 바이너리를 미리 압축된 파일로 만들어놓은 패키지이다. 확장자가 rpm 이라면 바로 이것을 말하는 것이다. rpm은 단순하게 미리 압축된 파일이이 아니라 쿼리를 통해서 각종 정보를 조회할수 있으며 미리 설치된 파일이 포함된 패키지, 의존성 패키지등을 검사할 수 있다.&lt;br /&gt;&lt;br style="color: rgb(255, 0, 0);"&gt;&lt;font style="color: rgb(255, 0, 0);" size="4"&gt;&lt;span style="font-weight: bold;"&gt;RPM(Redhat Package Management)&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;RPM은 Redhat에서 개발한 패키지 관리/제작 프로그램이다. 관리만 하는것이 아니라 제작도 할수 있다. 다음과 같이 해보자.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# rpm -qf /bin/bash&lt;br /&gt;bash-3.2-24.el5&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;위 명령은 '/bin/bash' 프로그램이 속한 패키지가 무엇인지를 알려준다. '-q'는 '질의한다(query)'는 것이고 '-f'은 파일에 대한 정보를 지정하는 것이다. 따라서 '-qf'라면 '파일에대한 정보를 질의한다'가 되어서 파일이 어느 패키지에 속해있는지를 알려준다.&lt;br /&gt;&lt;br /&gt;이제 rpm 파일을 하나 다운로드받아서 좀더 자세한 사용법을 알아보자.&lt;br /&gt;[code bash]&lt;br /&gt;]# wget ftp://mirror.khlug.org/centos/5.5/os/x86_64/CentOS/gftp-2.0.18-3.2.2.x86_64.rpm&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;rpm -qlp &lt;/span&gt;&lt;br /&gt;-p는 '설치된 또는 설치되지 않은 &amp;lt;패키지화일&amp;gt;에 대하여 질문을 수행하도록하는 옵션이다. -l은 파일안에 파일리스트를 보여주는 것으로 이 리스트들이 실제로 시스템에 설치가 된다.&lt;br /&gt;[code bash]&lt;br /&gt;]# rpm -qlp gftp-2.0.18-3.2.2.x86_64.rpm&lt;br /&gt;/usr/bin/gftp&lt;br /&gt;/usr/bin/gftp-gtk&lt;br /&gt;/usr/bin/gftp-text&lt;br /&gt;/usr/share/applications&lt;br /&gt;/usr/share/applications/net-gftp.desktop&lt;br /&gt;/usr/share/doc/gftp-2.0.18&lt;br /&gt;/usr/share/doc/gftp-2.0.18/COPYING&lt;br /&gt;/usr/share/doc/gftp-2.0.18/ChangeLog&lt;br /&gt;/usr/share/doc/gftp-2.0.18/README&lt;br /&gt;/usr/share/doc/gftp-2.0.18/TODO&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;rpm -qip &lt;/span&gt;&lt;br /&gt;-i는 패키지 이름, 버전, 설명 등의 정보를 출력한다. rpm 은 단순한 파일 리스트의 목록이 아니다. 각종 정보를 포함하는데 이경우가 바로 이것이다.&lt;br /&gt;[code bash]&lt;br /&gt;]# rpm -qip gftp-2.0.18-3.2.2.x86_64.rpm&lt;br /&gt;Name &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; : gftp &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Relocations: (not relocatable)&lt;br /&gt;Version &amp;nbsp; &amp;nbsp; : 2.0.18 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; Vendor: CentOS&lt;br /&gt;Release &amp;nbsp; &amp;nbsp; : 3.2.2 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Build Date: &lt;br /&gt;Install Date: (not installed) &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Build Host: builder3.centos.org&lt;br /&gt;Group &amp;nbsp; &amp;nbsp; &amp;nbsp; : Applications/Internet &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Source RPM: gftp-2.0.18-3.2.2.src.rpm&lt;br /&gt;Size &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; : 2709888 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; License: GPL&lt;br /&gt;Signature &amp;nbsp; : DSA/SHA1, 2007년 04월 04일 (수) 오전 09시 23분 21초, Key ID a8a447dce8562897&lt;br /&gt;URL &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; : http://gftp.seul.org/&lt;br /&gt;Summary &amp;nbsp; &amp;nbsp; : X 윈도우 시스템에 사용되는 다중 스레드 FTP 클라이언트.&lt;br /&gt;Description :&lt;br /&gt;gFTP는 X Window System에서 사용되는 다중 스레드 FTP 클라이언트입니다. &lt;br /&gt;gFTP는 다음과 같은 기능을 지원합니다: 동시 다운로드, 중단된 파일 전송을 복구, &lt;br /&gt;다중 파일 다운로드를 위한 파일 전송 대기열, 전체 디렉토리/하부 디렉토리 다운로드하기 지원, &lt;br /&gt;FTP 사이트로의 빠른 접속을 위한 책갈피 메뉴, 원격 디렉토리 목록 캐싱, 로컬과 원격 chmod, &lt;br /&gt;끌어다 놓기 (drag and drop), 접속 관리자와 기타 등등.&lt;br /&gt;&lt;br /&gt;그래픽모드의 FTP 클라이언트가 필요하시면 gftp를 설치하십시오.&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;rpm -qRp&lt;/span&gt;&amp;nbsp; &lt;br /&gt;패키지의 의존성을 알려준다. 사실 이것은 정보가 부족하다. 의존성이 걸린 패키지들을 알려주는 것이라기 보다는 의존성이 걸린 라이브러리 목록을 알려준다.&lt;br /&gt;[code bash]&lt;br /&gt;]# rpm -qRp gftp-2.0.18-3.2.2.x86_64.rpm&lt;br /&gt;/bin/sh&amp;nbsp; &lt;br /&gt;libatk-1.0.so.0()(64bit)&amp;nbsp; &lt;br /&gt;libc.so.6()(64bit)&amp;nbsp; &lt;br /&gt;libc.so.6(GLIBC_2.2.5)(64bit)&amp;nbsp; &lt;br /&gt;libc.so.6(GLIBC_2.3)(64bit)&amp;nbsp; &lt;br /&gt;libc.so.6(GLIBC_2.3.4)(64bit)&amp;nbsp; &lt;br /&gt;libc.so.6(GLIBC_2.4)(64bit)&amp;nbsp; &lt;br /&gt;libcairo.so.2()(64bit)&amp;nbsp; &lt;br /&gt;libcrypto.so.6()(64bit)&amp;nbsp; &lt;br /&gt;libdl.so.2()(64bit)&amp;nbsp; &lt;br /&gt;libgdk-x11-2.0.so.0()(64bit)&amp;nbsp; &lt;br /&gt;libgdk_pixbuf-2.0.so.0()(64bit)&amp;nbsp; &lt;br /&gt;libglib-2.0.so.0()(64bit)&amp;nbsp; &lt;br /&gt;libgmodule-2.0.so.0()(64bit)&amp;nbsp; &lt;br /&gt;libgobject-2.0.so.0()(64bit)&amp;nbsp; &lt;br /&gt;libgthread-2.0.so.0()(64bit)&amp;nbsp; &lt;br /&gt;libgtk-x11-2.0.so.0()(64bit)&amp;nbsp; &lt;br /&gt;libm.so.6()(64bit)&amp;nbsp; &lt;br /&gt;libnsl.so.1()(64bit)&amp;nbsp; &lt;br /&gt;libpango-1.0.so.0()(64bit)&amp;nbsp; &lt;br /&gt;libpangocairo-1.0.so.0()(64bit)&amp;nbsp; &lt;br /&gt;libpthread.so.0()(64bit)&amp;nbsp; &lt;br /&gt;libpthread.so.0(GLIBC_2.2.5)(64bit)&amp;nbsp; &lt;br /&gt;libssl.so.6()(64bit)&amp;nbsp; &lt;br /&gt;libutil.so.1()(64bit)&amp;nbsp; &lt;br /&gt;rpmlib(CompressedFileNames) &amp;lt;= 3.0.4-1&lt;br /&gt;rpmlib(PayloadFilesHavePrefix) &amp;lt;= 4.0-1&lt;br /&gt;rtld(GNU_HASH)&lt;br /&gt;[/code]&lt;br /&gt;의존성이 걸린 패키지 목록이 나올줄 알았는데, 라이브러리 목록이 나오는데 이걸 보고 의존성을 알 사람이 몇이나 될까.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;rpm -qa&lt;/span&gt;&lt;br /&gt;현재 시스템에 설치된 모든 패키지들을 보여준다. &lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;패키지 설치&lt;/span&gt;&lt;br /&gt;rpm 파일만 있으면 패키지를 설치할 수 있다. 그런데 문제가 하나 있다. 패키지를 설치하기 전에 설치에 필요한 의존성 패키지가 설치가 되어 있어야 한다. 의존성은 그 프로그램이 실행하기 필요한 라이브러리 및 또다른 프로그램들을 말한다. 윈도우즈 설치에서도 가끔 .NET Framework 설치가 필요하다고 해서 나오는데 이와 같은 이치이다.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# rpm -ivh gftp-2.0.18-3.2.2.x86_64.rpm&lt;br /&gt;[/code]&lt;br /&gt;출력되는 메시지들을 잘 살펴봐야 한다. 에러메시지 없었다면 정상적으로 패키지가 설치가 된다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;패키지 삭제&lt;/span&gt;&lt;br /&gt;패키지를 삭제하기 위해서는 설치된 패키지 이름을 알아야 한다. 그전에 어떤 파일을 삭제하고 싶은지에 대해서 결정을 해야 한다. 그것만 알게되면 패키지를 알수 있게 된다.&lt;br /&gt;[code bash]&lt;br /&gt;]# rpm -qf /usr/bin/gftp&lt;br /&gt;gftp-2.0.18-3.2.2&lt;br /&gt;]# rpm -evv gftp-2.0.18-3.2.2&lt;br /&gt;[/code]&lt;br /&gt;패키지를 삭제할때도 의존성을 해결해야 한다. gftp 가 다른 패키지에 의존성으로 걸려있다면 의존성 에러로 삭제가 되지 않을 것이다. 그럴때에는 의존성이 걸려있는 패키지를 먼저 삭제를 해야 한다.&lt;br /&gt;&lt;br /&gt;rpm 은 기존의 컴파일 설치 방법을 벗어나 설치하는 바이너리 파일들을 일목요연하게 쉽고 빠르게 해주었다. 컴파일 설치를 어려움을 느꼈던 초보자들에게 많은 도움을 줬었다. 그런데 설치나 삭제시에 발생하는 의존성 문제는 초보자 뿐만 아니라 숙련된 사람에게까지 짜증을 불러일으킬만 했다. 의존성을 해결해주기 방법을 제시하지 않았기에 사람이 일일이 찾아서 해결해줘야만 했다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-1132754350159618760?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/1132754350159618760/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/10/%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B4%80%EB%A6%AC-%ED%95%98%EA%B8%B0-rpmredhat-package-management.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1132754350159618760'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1132754350159618760'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/10/%ED%8C%A8%ED%82%A4%EC%A7%80-%EA%B4%80%EB%A6%AC-%ED%95%98%EA%B8%B0-rpmredhat-package-management.html' title='패키지 관리 하기 RPM(Redhat Package Management)'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-4007999563672628661</id><published>2010-10-25T11:37:00.000+09:00</published><updated>2010-12-21T01:34:27.205+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='페이스북'/><category scheme='http://www.blogger.com/atom/ns#' term='facebook'/><category scheme='http://www.blogger.com/atom/ns#' term='Database'/><category scheme='http://www.blogger.com/atom/ns#' term='데이터베이스'/><category scheme='http://www.blogger.com/atom/ns#' term='기타'/><title type='text'>Facebook 데이터베이스 구조.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XY8nFZmBMs.jpg" style="width:520px;height:480px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XY8nFZmBMs.jpg')" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-4007999563672628661?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/4007999563672628661/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/10/facebook-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B5%AC%EC%A1%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/4007999563672628661'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/4007999563672628661'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/10/facebook-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%B2%A0%EC%9D%B4%EC%8A%A4-%EA%B5%AC%EC%A1%B0.html' title='Facebook 데이터베이스 구조.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-4928326669429473443</id><published>2010-10-25T11:35:00.000+09:00</published><updated>2010-12-21T01:34:25.939+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><category scheme='http://www.blogger.com/atom/ns#' term='Trac설치'/><category scheme='http://www.blogger.com/atom/ns#' term='Trac'/><title type='text'>Trac 설치 및 운영.(Trac How to Install and setting)</title><content type='html'>이 문서는 프로젝트 관리 프로그램인 'Trac'의 설치와 운영을 위한 세팅을 다룹니다. Trac 어떤 것이며 프로젝트 관리 프로그램이 어떤것인지에 대해서는 검색을 하시면 많이 찾을 수 있는 내용입니다.&lt;br /&gt;&lt;br /&gt;경어체는 사용하지 않도록 하겠습니다.&lt;br /&gt;&lt;br /&gt;1.설치 환경.&lt;br /&gt;OS: CentOS 5.5&lt;br /&gt;&lt;br /&gt;2.설치해야 할 것들.&lt;br /&gt;subversion&lt;br /&gt;아파치(옵션)&lt;br /&gt;&lt;br /&gt;3.easy_install 설치&lt;br /&gt;[code bash]&lt;br /&gt;]# wget http://peak.telecommunity.com/dist/ez_setup.py &lt;br /&gt;]# python ez_setup.py&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;4. Subversion 설치.&lt;br /&gt;배포판에 있는 것을 사용해도 되지만 최신 안정버전으로 설치.&lt;br /&gt;[code bash]&lt;br /&gt;]# wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.1-1.el5.rf.x86_64.rpm&lt;br /&gt;]# rpm --import http://apt.sw.be/RPM-GPG-KEY.dag.txt&lt;br /&gt;]# rpm -K rpmforge-release-0.5.1-1.el5.rf.*.rpm&lt;br /&gt;]# rpm -i rpmforge-release-0.5.1-1.el5.rf.*.rpm&lt;br /&gt;]# yum check-update&lt;br /&gt;]# yum -y remove subversion&lt;br /&gt;]# yum -y install subversion.x86_64&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;5. Trac을 위한 python 라이브러리 설치&lt;br /&gt;[code bash]&lt;br /&gt;]# easy_install pysqlite&lt;br /&gt;]# easy_install pytz&lt;br /&gt;]# easy_install docutils&lt;br /&gt;]# easy_install genshi&lt;br /&gt;]# easy_install Pygments&lt;br /&gt;]# easy_install ElementTree&lt;br /&gt;]# easy_install epydoc&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;Python 국제화 애플리케이션 Babel 설치.&lt;br /&gt;[code bash]&lt;br /&gt;]# wget http://ftp.edgewall.com/pub/babel/Babel-0.9.5.tar.gz &lt;br /&gt;]# wget http://unicode.org/Public/cldr/1.6.1/core.zip &lt;br /&gt;]# tar xvzf Babel-0.9.5.tar.gz&lt;br /&gt;]# unzip core.zip -d core&lt;br /&gt;]# cd Babel-0.9.5&lt;br /&gt;]# python setup.py egg_info&lt;br /&gt;]# python python2.5 scripts/import_cldr.py ../core&lt;br /&gt;]# python scripts/import_cldr.py ../core&lt;br /&gt;]# python setup.py install&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;6. Trac 설치&lt;br /&gt;[code bash]&lt;br /&gt;]# wget ftp://ftp.edgewall.com/pub/trac/Trac-0.12.1.tar.gz&lt;br /&gt;]# tar xvzf Trac-0.12.1.tar.gz&lt;br /&gt;]# cd Trac-0.12.1&lt;br /&gt;]# python setup.py build&lt;br /&gt;]# python setup.py install&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;7. Subverion 과 Trac Document Root 생성&lt;br /&gt;[code bash]&lt;br /&gt;]# mkdir /home/svn&lt;br /&gt;]# mkdir /home/trac&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;8. Subversoin 테스트 저장소 생성.&lt;br /&gt;우선 subversion 을 데몬으로 실행.&lt;br /&gt;[code bash]&lt;br /&gt;]# svnserve -d -r /home/svn/&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;저장소 생성.&lt;br /&gt;[code bash]&lt;br /&gt;]# svnadmin create --fs-type fsfs /home/svn/sample&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;9. Trac 프로젝트 페이지 생성.&lt;br /&gt;[code bash]&lt;br /&gt;]# trac-admin /home/trac/sample initenv&lt;br /&gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;10. Trac '소스 둘러보기' Enable&lt;br /&gt;Trac 0.12 이상버전부터는 자동으로 '소스 둘러보기'가 화면에 나오지 않는다. 홈페이지에서 확인한 결과 기본값이 disable 이란다.&lt;br /&gt;&lt;br /&gt;/home/trac/sample/conf/trac.ini 에서 다음과 같이 수정한다.&lt;br /&gt;[code bash]&lt;br /&gt;]# vi trac.ini&lt;br /&gt;repository_dir = /home/trac/sample&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;11. Project 관리자 사용자 등록.&lt;br /&gt;프로젝트에 관리자를 설정해야 한다. 관리자를 설정하면 인증과정도 설정해야 하는데 역서는 'htdigest' 방법을 사용할 것이다. 암호화된 사용자와 암호를 파일로 저장해서 관리하는 방법이다. 암호화된 파일을 제작하기 위해서 Trac 홈페이지에서는 스크립트를 제공한다.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]#&amp;nbsp; python trac-digest.py -u admin -p 1234 -r sample &amp;gt; /home/trac/sample/users.htdigest&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;이렇게 한 후에 admin 계정에 TRAC_ADMIN 권한을 부여한다.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# trac-admin /home/trac/sample permission add admin TRAC_ADMIN&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;그리고 다음과 같이 옵션을 달리해서 Trac 을 재시작 시켜줘야 한다.&lt;br /&gt;[code bash]&lt;br /&gt;]# tracd --daemonize -p 8000 -a sample,/home/trac/sample/users.htdigest,sample /home/trac/sample&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;그리고 웹브라우저로 접속을 한후에 login 클릭하면 계정인증창이 나온다. TRAC_ADMIN 권한을 가진 admin 으로 로그인을 해보자.&lt;br /&gt;&lt;br /&gt;12. Trac Addons Component 설치.&lt;br /&gt;Trac 은 Addons Component 가 아주 많다. 추가적인 기능을 사용할 수 있도록하는 것들인데, 터미널에서 해야할 일을 웹에서도 쉽게 할수 있다. &lt;br /&gt;&lt;br /&gt;설치할 Addons Component 는 다음과 같다.&lt;br /&gt;1) TracWebAdmin &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; - 컴포넌트 설치 및 설정 할수 있다.&lt;br /&gt;2) TracAccountManager&amp;nbsp; - Trac 계정 관리.&lt;br /&gt;3) TracTocMacro &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; - Table of content 라고 해서 위키의 글목록을 쉽게 생성하도록 해준다.&lt;br /&gt;&lt;br /&gt;설치하기 전에 한가지 주의해야 할 사항은 Trac 버전에 따라서 설치해야 할 플로그인 버전도 달라진다. 이문서의 기준은 0.12 안정버전임을 명심하기 바란다.&lt;br /&gt;&lt;br /&gt;1) TracWebAdmin&lt;br /&gt;[code bash]&lt;br /&gt;]# http://trac.edgewall.org/attachment/wiki/WebAdmin/TracWebAdmin-0.1.2dev_r4240-py2.4.egg.zip?format=raw&lt;br /&gt;]# mv TracWebAdmin-0.1.2dev_r4240-py2.4.egg.zip?format=raw TracWebAdmin-0.1.2dev_r4240-py2.4.egg&lt;br /&gt;]# easy_install --always-unzip TracWebAdmin-0.1.2dev_r4240-py2.4.egg&lt;br /&gt;]# vi /home/trac/sample/conf/trac.ini&lt;br /&gt;[components]&lt;br /&gt;webadmin.* = enabled&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;그리고 나서 재시작을 해준다.&lt;br /&gt;&lt;br /&gt;2) TracAccountManager&lt;br /&gt;최신 버전에는 약간 문제가 있어서 업로드한 파일을 다운로드 받아서 설치한다.&lt;br /&gt;[code bash]&lt;br /&gt;]# easy_install TracAccountManager-0.2.1dev_r7165-py2.4.egg&lt;br /&gt;]# vi /home/trac/sample/conf/trac.ini&lt;br /&gt;[components]&lt;br /&gt;acct_mgr.admin.accountmanageradminpage = enabled&lt;br /&gt;acct_mgr.api.accountmanager = enabled&lt;br /&gt;acct_mgr.htfile.htdigeststore = enabled&lt;br /&gt;acct_mgr.pwhash.htdigesthashmethod = enabled&lt;br /&gt;acct_mgr.web_ui.accountmodule = enabled&lt;br /&gt;acct_mgr.web_ui.loginmodule = enabled&lt;br /&gt;acct_mgr.web_ui.registrationmodule = enabled&lt;br /&gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;위와 같이하면 왼쪽에는 "Accounts" 서브메뉴가 생성되고 본문에는 TracAccountManager 설정이 나온다. 필요한 기능이 있다면 활성화해서 사용하면 된다.&lt;br /&gt;&lt;br /&gt;Accounts 서브메뉴에 Configuration 을 클릭하면 filename 에 users.htdigest 파일 경로를 넣는다. 중요한건 realm 에는 users.htdigest 생성할때 넣었던 것을 넣는다. 그리고 Users 메뉴를 클릭하면 이제 웹에서 계정관리를 할 수 있다.&lt;br /&gt;&lt;br /&gt;3) TracTocMacro&lt;br /&gt;Table Of Content 라고 해서 위키에 오른쪽 위에 그 본문의 목차를 쉽게 생성해주는 매크로다.&lt;br /&gt;[code bash]&lt;br /&gt;]# easy_install http://trac-hacks.org/svn/tocmacro/0.11&lt;br /&gt;]# vi /home/trac/sample/conf/trac.ini&lt;br /&gt;[components]&lt;br /&gt;tractoc.* = enabled&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;첨부파일: &lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XMEwf4hpm7.gz" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/gz.gif" alt="" style="vertical-align: middle;" /&gt; TracPlugin.tar_1.gz&lt;/a&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-4928326669429473443?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/4928326669429473443/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/10/trac-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%9A%B4%EC%98%81trac-how-to-install-and.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/4928326669429473443'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/4928326669429473443'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/10/trac-%EC%84%A4%EC%B9%98-%EB%B0%8F-%EC%9A%B4%EC%98%81trac-how-to-install-and.html' title='Trac 설치 및 운영.(Trac How to Install and setting)'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-860073766258015262</id><published>2010-10-12T22:21:00.000+09:00</published><updated>2010-12-21T01:34:24.530+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><category scheme='http://www.blogger.com/atom/ns#' term='History'/><category scheme='http://www.blogger.com/atom/ns#' term='Bash'/><title type='text'>history 출력시 날짜/시간도 같이 출력하기</title><content type='html'>&lt;P&gt;[code bash]&lt;/P&gt;&lt;P&gt;# history | head&lt;br /&gt;&amp;nbsp;1019&amp;nbsp; XXXX&lt;br /&gt;&amp;nbsp;1020&amp;nbsp; XXXX&lt;br /&gt;&amp;nbsp;1021&amp;nbsp; XXXX&lt;br /&gt;&amp;nbsp;1022&amp;nbsp; XXXX&lt;br /&gt;&amp;nbsp;1023&amp;nbsp; XXXX&lt;br /&gt;&lt;br /&gt;# export HISTTIMEFORMAT="%F %T "&lt;br /&gt;&lt;br /&gt;# history | head&lt;br /&gt;&amp;nbsp;1021&amp;nbsp; 2010-09-03 16:42:40 XXXX&lt;br /&gt;&amp;nbsp;1022&amp;nbsp; 2010-09-03 16:42:40 XXXX&lt;br /&gt;&amp;nbsp;1023&amp;nbsp; 2010-09-03 16:42:40 XXXX&lt;br /&gt;&amp;nbsp;1024&amp;nbsp; 2010-09-03 16:42:40 XXXX&lt;br /&gt;&amp;nbsp;1025&amp;nbsp; 2010-09-03 16:42:40 XXXX&lt;/P&gt;&lt;P&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-860073766258015262?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/860073766258015262/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/10/history-%EC%B6%9C%EB%A0%A5%EC%8B%9C-%EB%82%A0%EC%A7%9C%EC%8B%9C%EA%B0%84%EB%8F%84-%EA%B0%99%EC%9D%B4-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/860073766258015262'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/860073766258015262'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/10/history-%EC%B6%9C%EB%A0%A5%EC%8B%9C-%EB%82%A0%EC%A7%9C%EC%8B%9C%EA%B0%84%EB%8F%84-%EA%B0%99%EC%9D%B4-%EC%B6%9C%EB%A0%A5%ED%95%98%EA%B8%B0.html' title='history 출력시 날짜/시간도 같이 출력하기'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-7475456190539013593</id><published>2010-10-07T10:03:00.000+09:00</published><updated>2010-12-21T01:34:23.203+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='언어'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='Bash'/><title type='text'>bash for 루프 사용 예</title><content type='html'>for 루프를 배울때 가장 잘 나오는 예가 1~100 까지 덧셈이다. 그런데 Bash 는 어떻게 하지 하는 생각이 문득 들었는데 한참을 찾아야 했다. ^^;;&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;for i in $(seq 1 100); do&lt;br /&gt;&amp;nbsp; &amp;nbsp; echo -n "file${i}";&lt;br /&gt;&amp;nbsp; &amp;nbsp; touch file${i} 2&amp;gt;&amp;amp;1;&lt;br /&gt;done&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-7475456190539013593?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/7475456190539013593/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/10/bash-for-%EB%A3%A8%ED%94%84-%EC%82%AC%EC%9A%A9-%EC%98%88.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7475456190539013593'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7475456190539013593'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/10/bash-for-%EB%A3%A8%ED%94%84-%EC%82%AC%EC%9A%A9-%EC%98%88.html' title='bash for 루프 사용 예'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-3713926936763314577</id><published>2010-09-23T19:06:00.000+09:00</published><updated>2010-12-21T01:34:22.010+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='openssh'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='openssh 5.6'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>openssh 5.6 for CentOS 5.5</title><content type='html'>현재 openssh의 버전은 5.6이다. 그런데 CentOS 5.5에 포함된 버전은 4.3 이다. 메이저버전으로 1.1이상 차이가 나고 있어서 업그레이드를 할려는 찰라에 검색을 통해서 배포된 소스를 가지고 패키지를 제작할 수 있는 방법을 알아 냈다. &lt;br /&gt;&lt;br /&gt;일단 openssh 5.6으로 업그레이드를 하게되면 기본으로 protocol 버전이 2로 된다. &lt;br /&gt;&lt;br /&gt;원본 링크: http://blog.mizoshiri.com/archives/971&lt;br /&gt;&lt;br /&gt;윗글의 핵심은 압축을 해제하고 나서 contrib/redhat/openssh.spec 을 수정한다. 그리고 다시 압축을 한후에 다음과 같이 명령어를 입력한다.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# rpmbuild -ta --clean openssh-5.6p1-final.tar.gz &lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;이렇게 하게되면 패키지가 제작된다. &lt;br /&gt;&lt;br /&gt;sshd_config 설정 &lt;br /&gt;[code text]&lt;br /&gt;Protocol 2&lt;br /&gt;SyslogFacility AUTHPRIV&lt;br /&gt;PermitRootLogin yes&lt;br /&gt;RSAAuthentication yes&lt;br /&gt;PasswordAuthentication yes&lt;br /&gt;PermitEmptyPasswords no&lt;br /&gt;ChallengeResponseAuthentication no&lt;br /&gt;GSSAPIAuthentication yes&lt;br /&gt;GSSAPICleanupCredentials yes&lt;br /&gt;UsePAM yes&lt;br /&gt;X11Forwarding yes&lt;br /&gt;Subsystem &amp;nbsp; sftp &amp;nbsp;&amp;nbsp; /usr/libexec/openssh/sftp-server&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;Source RPM : &lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XaDlnbnH3X.zip" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/zip.gif" alt="" style="vertical-align: middle;" /&gt; openssh-5.6p1-1.el5.centos.src.zip&lt;/a&gt;&lt;p class="cap1"&gt;openssh 5.6 for CentOS 5.5&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-3713926936763314577?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/3713926936763314577/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/09/openssh-56-for-centos-55.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3713926936763314577'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3713926936763314577'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/09/openssh-56-for-centos-55.html' title='openssh 5.6 for CentOS 5.5'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6858245252277359350</id><published>2010-09-12T22:51:00.000+09:00</published><updated>2010-12-21T01:34:20.622+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='바탕화면'/><category scheme='http://www.blogger.com/atom/ns#' term='컴퓨터'/><category scheme='http://www.blogger.com/atom/ns#' term='컴퓨터이야기'/><category scheme='http://www.blogger.com/atom/ns#' term='바탕화면 꾸미기'/><category scheme='http://www.blogger.com/atom/ns#' term='기타'/><title type='text'>바탕화면 II</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XVZdyTFNRh.jpg" style="width:520px;height:354px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XVZdyTFNRh.jpg')" /&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XUOXDoQ5Yn.rar" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/unknown.gif" alt="" style="vertical-align: middle;" /&gt; Tribute__Wallpaper_pack__by_Uribaani.rar&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6858245252277359350?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6858245252277359350/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/09/%EB%B0%94%ED%83%95%ED%99%94%EB%A9%B4-ii.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6858245252277359350'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6858245252277359350'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/09/%EB%B0%94%ED%83%95%ED%99%94%EB%A9%B4-ii.html' title='바탕화면 II'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-3513023520647654710</id><published>2010-09-12T22:47:00.000+09:00</published><updated>2010-12-21T01:34:19.282+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='바탕화면'/><category scheme='http://www.blogger.com/atom/ns#' term='컴퓨터'/><category scheme='http://www.blogger.com/atom/ns#' term='컴퓨터이야기'/><category scheme='http://www.blogger.com/atom/ns#' term='기타'/><title type='text'>바탕화면 I</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XSRx3bVibq.jpg" style="width:400px;height:600px;" alt=""  /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XW4rs01KQd.zip" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/zip.gif" alt="" style="vertical-align: middle;" /&gt; Bokeh_Glow_by_FateZoom.zip&lt;/a&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;span class="Apple-style-span" style="font-family: Verdana; line-height: normal; font-size: 10px;"&gt;Sizes&lt;br style="background-color: transparent ! important; border-width: 0px ! important;"&gt;2560x1600&lt;br style="background-color: transparent ! important; border-width: 0px ! important;"&gt;1920x1200&lt;br style="background-color: transparent ! important; border-width: 0px ! important;"&gt;1680x1050&lt;br style="background-color: transparent ! important; border-width: 0px ! important;"&gt;1440x900&lt;br style="background-color: transparent ! important; border-width: 0px ! important;"&gt;1280x800&lt;/span&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-3513023520647654710?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/3513023520647654710/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/09/%EB%B0%94%ED%83%95%ED%99%94%EB%A9%B4-i.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3513023520647654710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3513023520647654710'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/09/%EB%B0%94%ED%83%95%ED%99%94%EB%A9%B4-i.html' title='바탕화면 I'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-7270661994694780972</id><published>2010-09-07T14:19:00.000+09:00</published><updated>2010-12-21T01:34:16.535+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='언어'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>MySQL UTF-8</title><content type='html'>Python 에서 MySQLdb 라이브러를 써서 UTF-8 쿼리를 넣으면 오류가 난다. 서버환경도 UTF-8 클라이언트 환경도 UTF-8 인데도 오류가 나는 것은 MySQLdb 라이브러에서 Mysql 서버에 접속할때에 문자셋을 Latin-1 으로 하기 때문이다. 이를 해결하기 위해서는 MySQLdb 라이브러리에서 제공하는 'set_character_set' 이용해서 접속 문자셋을 교체해주어야 한다. &lt;br /&gt;&lt;br /&gt;또 Python 자체 동작 환경을 UTF-8 로도 교체해주어야 정상 동작한다. 다음은 샘플 코드다.&lt;br /&gt;&lt;br /&gt;[code python]&lt;br /&gt;#!/bin/env python2.6&lt;br /&gt;# -*- coding: utf-8 -*-&lt;br /&gt;&lt;br /&gt;import MySQLdb&lt;br /&gt;import os&lt;br /&gt;from operator import itemgetter&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;import sys&lt;br /&gt;&lt;br /&gt;reload(sys)&lt;br /&gt;sys.setdefaultencoding("utf-8")&lt;br /&gt;&lt;br /&gt;dbconnhost = "localhost"&lt;br /&gt;dbconnuser = "root"&lt;br /&gt;dbconnpass = "123456"&lt;br /&gt;dbconndb = "mysql"&lt;br /&gt;&lt;br /&gt;conn = MySQLdb.connect(host=dbconnhost, user=dbconnuser, passwd=dbconnpass, db=dbconndb)&lt;br /&gt;&lt;br /&gt;conn.set_character_set('utf8')&lt;br /&gt;charset = conn.character_set_name()&lt;br /&gt;print charset&lt;br /&gt;cursor = conn.cursor()&lt;br /&gt;&lt;br /&gt;sql = "insert into tbl_mac_addr(sid, mac, add_date) values('192.168.160.98김선일pc2','{alksdjfljsadflj}',now())"&lt;br /&gt;&lt;br /&gt;cursor.execute(sql)&lt;br /&gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-7270661994694780972?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/7270661994694780972/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/09/mysql-utf-8.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7270661994694780972'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7270661994694780972'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/09/mysql-utf-8.html' title='MySQL UTF-8'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-198738387367645710</id><published>2010-09-06T22:19:00.000+09:00</published><updated>2010-12-21T01:34:15.262+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='프로그램'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>XFCE4 에서 유용한 프로그램.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;이번에는 XFCE4 에서 사용하면 좋은 프로그램들에 대해서 알아 보도록 하겠다.&lt;br /&gt;&lt;br /&gt;1. gthumb &lt;br /&gt;그림보기 프로그램 이다. 그놈용으로 개발되었기 때문에 XFCE4 를 설치한다고 해서 자동으로 설치되는 것이 아니라서 혹시 설치가 안될 수도 있다. 이 프로그램이 좋은 이유는 XFCE4 용 파일관리자 프로그램에서 그림을 더블클릭하면 자동으로 연동되는 프로그램이기 때문이다. &lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XTUTDFQJRV.png" style="width:520px;height:409px;" alt="gthumb 그림보기 프로그램." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XTUTDFQJRV.png')" /&gt;&lt;p class="cap1"&gt;gthumb 그림보기 프로그램.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;일반적인 그림보기 프로그램에 제공하는 기능들을 제공한다. 썸네일로 보여주고 더블클릭을하면 크게 보여주도록 되어 있다. &lt;br /&gt;&lt;br /&gt;2. Adobe Reader &lt;br /&gt;누구나 다 알고 있는 유명한 PDF 문서 읽기 프로그램 이다. Adobe 사에서 리눅스용으로 배포하고 있다. 따라서 Adobe 홈페이제이 가면 누구나 다 다운받아서 설치할 수 있다. &lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XZCYB4RD9M.png" style="width:520px;height:375px;" alt="Adobe Reader" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XZCYB4RD9M.png')" /&gt;&lt;p class="cap1"&gt;Adobe Reader&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;3. Dia 차트 그리는 프로그램.&lt;br /&gt;차트를 그리는 프로그램이다. 순서도, 차트, 다이어그램등 프로그램이나 기획을 할때에 자주 사용할 수 있를만한 것을 작성할 수 있다. 그림파일로 Export 해주는 기능도 있어서 사용하기 좋다. &lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XeSGpmGomh.png" style="width:520px;height:384px;" alt="Dia 차트 프로그램." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XeSGpmGomh.png')" /&gt;&lt;p class="cap1"&gt;Dia 차트 프로그램.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;4. Orage XFCE4 용 일정관리 프로그램.&lt;br /&gt;XFCE4 용 일정관리 프로그램이다. 이것이 XFCE4 를 설치하면 자동으로 설치될때도 있고 그렇지 않을때도 있어 잘 모르시는 분들이 꽤 있다. 기능이 다양한 것은 아니지만 그래도 기본에 충실한 프로그램으로 쓸만한 프로그램이다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XPA9dWlBG0.png" style="width:520px;height:524px;" alt="Orage 프로그램." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XPA9dWlBG0.png')" /&gt;&lt;p class="cap1"&gt;Orage 프로그램.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;5. Xchat Irc 클라이언트 프로그램.&lt;br /&gt;IRC 는 'Internet Relay Chatting'으로서 인터넷 보급도 제대로 되지 않은 시절에 정보를 교환하고자 탄생한 일종의 채팅이다. 각 주제별로 방을 개설해 정보를 교환할 수 있다. &lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XZX9yxCxdn.png" style="width:520px;height:358px;" alt="IRC 클라이언트 프로그램 Xchat " onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XZX9yxCxdn.png')" /&gt;&lt;p class="cap1"&gt;IRC 클라이언트 프로그램 Xchat &lt;/p&gt;&lt;/div&gt;&lt;br /&gt;6. gFTP FTP, SFTP 클라이언트 프로그램.&lt;br /&gt;gFTP는 FTP, SFTP 프로토콜을 지원하는 프로그램이다. 윈도오즈에 익숙한 사용자라면 FTP, SFTP를 이젠 잘 모를지도 모른다. 하지만 리눅스에서는 자주 사용되어지는 프로토콜이며 이를 위한 프로그램중에 하나이다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XPx8OXE45p.png" style="width:520px;height:386px;" alt="FTP, SFTP 클라이언트 프로그램." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XPx8OXE45p.png')" /&gt;&lt;p class="cap1"&gt;FTP, SFTP 클라이언트 프로그램.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-198738387367645710?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/198738387367645710/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/09/xfce4-%EC%97%90%EC%84%9C-%EC%9C%A0%EC%9A%A9%ED%95%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/198738387367645710'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/198738387367645710'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/09/xfce4-%EC%97%90%EC%84%9C-%EC%9C%A0%EC%9A%A9%ED%95%9C-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8.html' title='XFCE4 에서 유용한 프로그램.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6568329061928517283</id><published>2010-08-21T23:10:00.000+09:00</published><updated>2010-12-21T01:34:13.663+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='sun studio 12'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='MYSQL5'/><category scheme='http://www.blogger.com/atom/ns#' term='솔라리스 서버'/><category scheme='http://www.blogger.com/atom/ns#' term='솔라리스'/><category scheme='http://www.blogger.com/atom/ns#' term='solaris'/><category scheme='http://www.blogger.com/atom/ns#' term='Solaris 10'/><title type='text'>Mysql 5.1.50 설치하기(x86_64).</title><content type='html'>&lt;P&gt;Solaris 10 에서 MySQL을 설치하는 방법입니다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;1.전제조건.&lt;/P&gt;&lt;P&gt;Solaris 에서 MySQL을 설치하는데에는 여러방법이 있다. 대부분 sunfreeware.com 에서 Gcc 관련 패키지들을 설치해서 리눅스에 동일한 환경을 구축해서 컴파일을 하게 된다. 하지만Solaris 10에는 Sun Studio 12 를 함께 제공한다. 예전에는 구매를 해서 사용해야 했지만 무료로 전환되어서 썬에 가입만 하면 무료로 제공받을 수 있다. &lt;/P&gt;&lt;P&gt;Sun Studio 는 솔라리스에 맞게 제작된 컴파일러이고 따라서 당연히 Gcc 컴파일보다도 더 많은 쵝적화를 이룰 수 있다. 이번 MySQL 설치는 sunfreeware.com 에서 아무런 패키지도 설치하지 않고 Sun Studio 와 Solaris 에서 기본 제공되고 있는 라이브리만을 가지고 컴파일 설치하는 방법이다. (사실 Sun Studio 만 제대로 설치되어 있다면 아무런 일도 할 필요가 없다.)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;2.다운로드.&lt;/P&gt;&lt;P&gt;MySQL 5.1.38 ~ 5.1.40 까지는 버그가 존재한다. 현재 릴리즈 되고 있는 최신버전에는 이러한 버그를 해결한 것이다. 따라서 가능하면 최신버전을 다운로드 하는 것이 좋다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;3.컴파일 및 설치.&lt;/P&gt;&lt;P&gt;컴파일은 Sun Studio 로 한다. Sun Studio는 최적화 옵션을 제공하며 이는 MySQL에 가능한한 최고의 퍼포먼스를 제공해준다. 일단 쉘을 바꿔서 진행한다.&lt;/P&gt;[code bash]&lt;br /&gt;# /usr/bin/bash&lt;br /&gt;bash-3.00# export CC=/opt/sunstudio12.1/bin/cc&lt;br /&gt;bash-3.00# export CFLAGS="-xO3 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic -m64 -xregs=no%frameptr -I/usr/sfw/include/openssl"&lt;br /&gt;bash-3.00# export CXX=CC&lt;br /&gt;bash-3.00# export CXXFLAGS="-xO3 -mt -fsimple=1 -ftrap=%none -nofstore -xbuiltin=%all -xlibmil -xlibmopt -xtarget=generic -m64 -xregs=no%frameptr -I/usr/sfw/include/openssl"&lt;br /&gt;bash-3.00# export LDFLAGS="-xtarget=generic -m64 -L/usr/sfw/lib/amd64 -R/usr/sfw/lib/amd64"&lt;br /&gt;bash-3.00# ./configure --prefix=/usr/local/mysql --localstatedir=/usr/local/mysql/data --libexecdir=/usr/local/mysql/bin&amp;nbsp; --with-extra-charsets=complex --with-server-suffix=-standard --enable-thread-safe-client --enable-local-infile --with-big-tables --enable-shared --with-plugins=max --with-ld=/usr/ccs/bin/ld&lt;br /&gt;bash-3.00# /usr/sfw/bin/gmake&lt;br /&gt;bash-3.00# /usr/sfw/bin/gmake install&lt;br /&gt;[/code] &lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;여기서 중요한 것은 '--with-ld' 를 지정해줘야 한다. 이것을 지정하지 않으면 컴파일 오류가 난다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;MySQL 구동을 위해서 환경을 설정해준다.&lt;/P&gt;[code bash]&lt;br /&gt;bash-3.00# groupadd mysql&lt;br /&gt;bash-3.00# useradd -c "MySQL Database" -g mysql -d /usr/local/mysql mysql&lt;br /&gt;bash-3.00# cd /usr/local/mysql&lt;br /&gt;bash-3.00# ./bin/mysql_install_db&lt;br /&gt;bash-3.00# chown -R mysql:mysql data&lt;br /&gt;bash-3.00# cp /usr/local/mysql/share/my-medium.cnf /etc/my.cnf [/code] &lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;솔라리스에서도 리눅스와 마찬가지로 라이브러리 PATH를 파일에 적어놓고 이것을 참조한다. &lt;/P&gt;&lt;P&gt;32bit 라이브러리는 /var/ld/ld.config, 64bit 라이브러리는 /var/ld/64/ld.config 에 기록한다. 파일형식은 텍스트여서 편집기로 편집하면 된다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그런데 솔라리스에서는 명령어가 존재한다. 이를 이용해서 컴파일 설치된 MySQL의 라이브러리를 파일에 추가한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;[code bash] bash-3.00# crle -64 -u -l /usr/local/mysql/lib [/code] &lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;4. 튜닝.&lt;/P&gt;&lt;P&gt;솔라리스에서는 메모리 관련 라이브러를 교체하는 것 만으로도 대단한 성능향상이 있다고 한다. 방법은 간단하다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;[code bash]# 64bit&lt;br /&gt;bash-3.00# LD_PRELOAD_64=/usr/lib/amd64/libmtmalloc.so&lt;br /&gt;bash-3.00# export LD_PRELOAD_64&lt;br /&gt;# 31bit&lt;br /&gt;bash-3.00# LD_PRELOAD=/usr/lib/libmtmalloc.so&lt;br /&gt;bash-3.00# export LD_PRELOAD&lt;br /&gt;[/code] &lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이것을 MySQL 시작스크립트인 /usr/local/mysql/share/mysql.server 에 두번줄에 삽입해준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;5.SMF&lt;/P&gt;&lt;P&gt;솔라리스 10에서의 가장 큰 기능인 SMF에 MySQL을 등록해보자. SMF은 지능형 서비스 관리 설비로 기존 SystemV에서 사용하는 방법을 진일보 시킨 것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SMF는 메니페스트 파일에서 서비스 관리에 관한 설정를 한다. xml 파일 형식을 가지며 이것을 SMF에 등록을하면 그때부터는 SMF에서 제공하는 명령어를 사용해서 서비스를 관리할 수 있다. SMF에 관해서 꼭 알아두자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SMF에 등록하기위해서 MySQL의 매니페스트 파일인 xml 이 필요하다. 내용은 다음과 같다.&lt;/P&gt;[code xml]&amp;lt;?xml version="1.0"?&amp;gt;&lt;br /&gt;&amp;lt;!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1"&amp;gt;&lt;br /&gt;&amp;lt;!--&lt;br /&gt;&amp;nbsp; &amp;nbsp; Copyright 2004 Sun Microsystems, Inc.&amp;nbsp; All rights reserved.&lt;br /&gt;&amp;nbsp; &amp;nbsp; Use is subject to license terms.&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; pragma ident &amp;nbsp;&amp;nbsp; "@(#)server.xml 1.2 04/08/09 SMI"&lt;br /&gt;--&amp;gt;&lt;br /&gt;&amp;lt;service_bundle type="manifest" name="MySQL"&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;service name="application/database/mysql" type="service" version="1"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;dependency name="filesystem" grouping="require_all" restart_on="none" type="service"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;service_fmri value="svc:/system/filesystem/local"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/dependency&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;dependency name="database_configuration" type="path" grouping="require_all" restart_on="refresh"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;service_fmri value="file://localhost/etc/my.cnf"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/dependency&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;dependent name="mysql-runlevel" grouping="require_all" restart_on="none"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;service_fmri value="svc:/milestone/multi-user-server"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/dependent&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;exec_method type="method" name="start" exec="/usr/local/mysql/share/mysql/mysql.server %m" timeout_seconds="10"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;exec_method type="method" name="stop" exec="/usr/local/mysql/share/mysql/mysql.server %m" timeout_seconds="5"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;exec_method type="method" name="restart" exec="/usr/local/mysql/share/mysql/mysql.server %m" timeout_seconds="5"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;property_group name="general" type="framework"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;!-- to start stop database --&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;propval name="action_authorization" type="astring" value="mysql.operator"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;propval name="value_authorization" type="astring" value="mysql.administrator"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/property_group&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;instance name="default" enabled="true"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;stability value="Unstable"/&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;template&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;common_name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;loctext xml:lang="C"&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; MySQL Database Server&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/loctext&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/common_name&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;documentation&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;manpage title="mysql" section="1" manpath="/usr/local/mysql/man"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;manpage title="mysqld" section="1" manpath="/usr/local/mysql/man"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;manpage title="mysqladmin" section="1" manpath="/usr/local/mysql/man"/&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;lt;/documentation&amp;gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;lt;/template&amp;gt;&lt;br /&gt;&amp;lt;/service&amp;gt;&lt;br /&gt;&lt;br /&gt;&amp;lt;/service_bundle&amp;gt;&lt;br /&gt;&lt;P&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이것을 '/var/svc/manifest/application/database/mysql.xml'로 저장한다. 그리고 소유권과 퍼미션을 조정해준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;[code bash]bash-3.00# chown root:sys /var/svc/manifest/applicaiton/database/mysql.xml&lt;br /&gt;bash-3.00# chmod 444 /var/svc/manifest/applicaiton/database/mysql.xml&lt;br /&gt;[/code] &lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;파일이 이상이 없는지 체크를 한다.&lt;/P&gt;[code bash]bash-3.00# svccfg&lt;br /&gt;svc:&amp;gt; validate /var/svc/manifest/applicaiton/database/mysql.xml&lt;br /&gt;svc:&amp;gt;&lt;br /&gt;[/code] &lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;메시지가 없다면 문법적으로 이상이 없는 파일이다. 이제 SMF를 등록한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;[code bash] bash-3.00# svccfg -v import /var/svc/manifest/applicaiton/database/mysql.xml [/code] &lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;SMF 관리 목록에 추가 된다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;[code bash] bash-3.00# svcadm -v enable application/database/mysql [/code] &lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이 서비스를 SMF에서 관리하겠다고 등록하는 것이다. 이렇게 되면 정말 잘 동작하는지를 체크해야 하는데 다음과 같이 한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;[code bash]bash-3.00# svcs -x mysql&lt;br /&gt;svc:/application/database/mysql:default (MySQL Database Server)&lt;br /&gt;&amp;nbsp;상태: online(2010년 8월 21일 토요일 오후 10시 16분 32초 이후)&lt;br /&gt;&amp;nbsp;&amp;nbsp; 참조: mysql(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp; 참조: mysqld(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp; 참조: mysqladmin(1)&lt;br /&gt;&amp;nbsp;&amp;nbsp; 참조: /var/svc/log/application-database-mysql:default.log&lt;br /&gt;영향: 없음&lt;br /&gt;bash-3.00# &lt;br /&gt;[/code] &lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;뭔가 잘못되었다면 메시지가 나온다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이로서 Mysql 최신버전을 솔라리스 10에서 Sun Studio 12 를 이용해 최적화하면서 설치하고 SMF 에까지 서비스를 등록해 봤다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6568329061928517283?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6568329061928517283/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/08/mysql-5150-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0x8664.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6568329061928517283'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6568329061928517283'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/08/mysql-5150-%EC%84%A4%EC%B9%98%ED%95%98%EA%B8%B0x8664.html' title='Mysql 5.1.50 설치하기(x86_64).'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-5886103043155994065</id><published>2010-08-16T00:32:00.000+09:00</published><updated>2010-12-21T01:34:12.240+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='gtk+'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='QT'/><category scheme='http://www.blogger.com/atom/ns#' term='kde'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><category scheme='http://www.blogger.com/atom/ns#' term='gnome'/><title type='text'>리눅스 데스크탑과 XFCE4</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;윈도우즈(Windows)의 경우는 데스크탑이 하나이다. 부팅을하면 파란색 바탕화면에 태스크바가 아래에 나오고 왼쪽 아래에 윈도우즈 로고가 보이고 클릭을하면 메뉴가 펼쳐진다. 외향을 바꾸기위해서 테마(Theme)를 제공한다.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;리눅스에는 데스크탑이 여러개이다. 원래 리눅스는 서버 용도로 개발이 되었다. 서버의 경우는 불필요한 자원의 사용을 최대한 줄여야하는데, GUI 화면과 관련된 것이 그러한 것이었다. 그러다가 리눅스가 발전하면서 GUI 화면 구현을 위해서 다양한 연구가 이루어졌는데, 대표적인 것이 GTK와 QT이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XD2HM4z22q.png" style="width:291px;height:152px;" alt="리눅스 그래픽 라이브러리 GTK , QT"  /&gt;&lt;p class="cap1"&gt;리눅스 그래픽 라이브러리 GTK , QT&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;GTK와 QT는 리눅스에서 그래픽처리를 위한 프로그램 라이브러리(Library)를 제공해준다. GUI 프로그램 제작자들은 그래픽처리에 관련된 사항을 고려할 필요없이 이 라이브러리를 사용함으로써 프로그램 자체 로직에 신경을 좀더 쓸수 있게 되었다. 그리고 이 그래픽 라이브러리를 기반으로 리눅스에 많은 데스크탑이 탄생하게 되었는데 대표적인 것이 바로 GNOME 과 KDE 이다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XXybdgkZ7q.png" style="width:437px;height:219px;" alt="KDE, GNOME "  /&gt;&lt;p class="cap1"&gt;KDE, GNOME&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;얼핏 데스크탑을 골라서 사용할 수 있다는 것에 의아해 한다. 윈도우즈만을 사용했던 사람일 수록 이러한 생각에서 벗어나질 못한다. 왜냐하면 GUI 화면은 당연한 것이라고 생각되겠지만 리눅스에서는 앞서 설명했듯이 GUI 자체가 옵션이고 시스템과 분리되어 있으며, 이러한 사실은 다양한 GUI환경을 제공해 줄수 있다는 것을 의미한다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;GNOME과 KDE외에 다양한 데스크탑이 존재한다고 했지만 결국에는 GTK계열이냐 아니면 QT계열이냐에 차이일뿐이다. 이러한 계열의 구분은 결국 데스크탑에서 사용되는 프로그램 호환성을 제공한다. 예를들어, XFCE4는 GTK 계열이다. 이 말은 GNOME과 동일한 계열임을 말하는 것으로 GNOME에 최적화되고 종속적인 프로그램을 제외한 프로그램들을 XFCE4에서도 사용될 수 있다는 것을 의미한다. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XAk8aljCpD.png" style="width:150px;height:150px;" alt="XFCE"  /&gt;&lt;p class="cap1"&gt;GTK 계열의 XFCE&lt;/p&gt;&lt;/div&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그렇다고해서 XFCE4에서 KDE 계열의 프로그램들을 사용할 수 없다는 것은 아니다. 라이브러리 호환성이 없다고해서 프로그램 구동이 안된다는 말은 아니기 때문이다. KDE 계열의 프로그램을 사용하기 위해서는 KDE 라이브러리들을 설치해주고 XFCE4에서 프로그램을 구동하면 무리없이 실행이 된다. 단지, KDE 계열에 의존하는 테마와같은 것은 적용이 되지 않으며 XFCE4에서는 이런것들을 GTK계열의 디폴트 값으로 세팅을해서 Display 하게 된다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;GTK 계열과 QT계열중에 어느것이 더 좋은지에 대해서는 사용자가 판단한다. 더나가 GNOME, KDE가 좋은지등도 결국 사용자의 몫이다. 필자의 경우는 GNOME도 KDE도 사용해봤는데, 아주 많은 기능들을 제공하고 있었으며 이를 통해서 초보사용자에게도 무리없이 사용할 수 있는 환경을 제공하고 있었다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;하지만 GNOME과 KDE가 진화화면서 다양한 프로그램과 환경을 제공하기위해서 시스템에 더 많은 자원을 사용하게 되었다. 이러한 변화는 필자에게는 달가운 것이 아니었다. 데스트탑으로서 사용을하지만 테스트 서버로서의 역활로도 사용해야할 필자에게 GUI에 시스템 자원을 많이 할당하는것이 달갑지 않았기 때문이다. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;그래서 가벼우면서도 데스크탑으로서 기능을 충분히 수행할 수 있는 것을 찾게 되었는데 이것이 바로 XFCE4 이다. 물론 XFCE4를 선택하기전에 외관도 살펴봤는데 Sun MicroSystem 사의 Solaris 에서 사용하는 CDE와 거의 동일한 인터페이스를 보고 반가운 마음도 들었다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XOtjcOTpcm.png" style="width:520px;height:390px;" alt="Solaris CDE" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XOtjcOTpcm.png')" /&gt;&lt;p class="cap1"&gt;Solaris CDE 데스크탑.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;다음에는 XFCE4에서 사용하기에 유용한 프로그램들을 살펴보도록하겠다.&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-5886103043155994065?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/5886103043155994065/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/08/%EB%A6%AC%EB%88%85%EC%8A%A4-%EB%8D%B0%EC%8A%A4%ED%81%AC%ED%83%91%EA%B3%BC-xfce4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/5886103043155994065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/5886103043155994065'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/08/%EB%A6%AC%EB%88%85%EC%8A%A4-%EB%8D%B0%EC%8A%A4%ED%81%AC%ED%83%91%EA%B3%BC-xfce4.html' title='리눅스 데스크탑과 XFCE4'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-3821043219257662148</id><published>2010-08-10T09:37:00.000+09:00</published><updated>2010-12-21T01:34:09.293+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='파이썬 Python'/><category scheme='http://www.blogger.com/atom/ns#' term='언어'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='파이썬'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><category scheme='http://www.blogger.com/atom/ns#' term='wxPython'/><title type='text'>Python File Transfer Messenger.</title><content type='html'>Python File Transfer Messenger.&lt;br /&gt;&lt;br /&gt;SourceForge 에 있는 파이썬을 이용한 파일전송 메신저. wx 프로그래밍 시작하기에는 좋음.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XTjub3WFJo.bz2" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/unknown.gif" alt="" style="vertical-align: middle;" /&gt; PypMsg-0.1-src.tar.bz2&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-3821043219257662148?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/3821043219257662148/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/08/python-file-transfer-messenger.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3821043219257662148'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3821043219257662148'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/08/python-file-transfer-messenger.html' title='Python File Transfer Messenger.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-2023190833493000821</id><published>2010-08-01T20:40:00.000+09:00</published><updated>2010-12-21T01:33:54.697+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='파이썬 Python'/><category scheme='http://www.blogger.com/atom/ns#' term='언어'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='파이썬'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>SocketServer Thread 구현.</title><content type='html'>프로그래밍 언어로 서버를 구현한다는 것은 대단한 기술이다. 왜냐하면 고려해야할 사항들이 너무나도 많기 때문이다. 서버를 구현하기위해서 일차적으로 Socket 라이브러리를 알아야 하고 시그널(Signal)과 데몬(Daemon)구현, 그리고 로깅, 내부 처리 로직(Handler 라고도 한다.)등을 모두 갖춰야지 제대로 된 서버라고 말할수 있다. &lt;br /&gt;&lt;br /&gt;하지만 제일 어려운 과제는 서버의 운영으로 외부 접속에 동시접속을 어떻게 구현하느냐가 문제가 된다. 다중접속은 서버의 기본기능이지만 이를 구현하는 것은 쉬운일이 아니어서 실제 구현에 있어 이부분을 집중적으로 연구하고 구현하게 된다. 보통 Fork 방식과 Select 방식등으로 나뉘는데(epoll, kqueue등도 있지만 여기서는 생략~) 이것을 실제로 구현하는 것도 만만치 않다.&lt;br /&gt;&lt;br /&gt;Python 2.6 에서도 이러한 서버를 구현하기 위해서 Socket 라이브러리를 제공한다. Python 언어의 특성이 Socket 라이브러리에도 잘 나타나는데, Select 방식을 Thread로 구현해준다. &lt;br /&gt;&lt;br /&gt;Socket 클래스의 상속된 'Socket.ThreadingTCPServer' 가 바로 그것이다. 이것을 이용하면 곧바로 서버가 Select 방식으로 구동된다. &lt;br /&gt;&lt;br /&gt;Python의 Socket 프로그래밍은 서버의 운영방법과 외부의 요청을 처리하는 Handler 로 나뉜다. 서버의 운영방법은 'Socket' 에서 담당하고 Handler 는 'Socket.BasesRequestHandler'나 'Socket.StreamRequestHandler' 등을 상속받아 사용자가 구현한다.&lt;br /&gt;&lt;br /&gt;거두 절미하게 기본 골격을 보자.&lt;br /&gt;&lt;br /&gt;[code python]&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;# -*- coding: utf-8 -*-&lt;br /&gt;&lt;br /&gt;import sys&lt;br /&gt;import os&lt;br /&gt;import time&lt;br /&gt;import SocketServer&lt;br /&gt;&lt;br /&gt;class EchoRequestHandler(SocketServer.BaseRequestHandler):&lt;br /&gt;&amp;nbsp; &amp;nbsp; def handle(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; data = self.request.recv(1024).strip()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; if data:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.request.send(data)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; else:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.request.close()&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;&amp;nbsp; &amp;nbsp; HOST, PORT = 'localhost', 9999 &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; server = SocketServer.ThreadingTCPServer((HOST, PORT), EchoRequestHandler)&lt;br /&gt;&amp;nbsp; &amp;nbsp; # Activate the server; this will keep running until you&lt;br /&gt;&amp;nbsp; &amp;nbsp; # interrupt the program with Ctrl-C&lt;br /&gt;&amp;nbsp; &amp;nbsp; server.serve_forever()&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;'SocketServer.ThreadingTCPServer' 클래스를 사용함으로서 간단하게 Select 서버를 구현한 수 있다. 위의 예제에서 서버운영을 클래스로 다음과 같이 교체해보자.&lt;br /&gt;&lt;br /&gt;[code python]&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;# -*- coding: utf-8 -*-&lt;br /&gt;&lt;br /&gt;import sys&lt;br /&gt;import os&lt;br /&gt;import time&lt;br /&gt;import SocketServer&lt;br /&gt;&lt;br /&gt;class EchoRequestHandler(SocketServer.BaseRequestHandler):&lt;br /&gt;&amp;nbsp; &amp;nbsp; # Called before the handle()&amp;nbsp; method to perform any initialization actions required.&lt;br /&gt;&amp;nbsp; &amp;nbsp; def setup(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print self.client_address[0], 'connected!!'&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; def handle(self): &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; data = self.request.recv(1024).strip() &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if data: &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.request.send(data) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.request.close()&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; # Called after the handle()&amp;nbsp; method to perform any clean-up actions required.&lt;br /&gt;&amp;nbsp; &amp;nbsp; def finish(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.request.close()&lt;br /&gt;&lt;br /&gt;class SocksServer(SocketServer.ThreadingTCPServer):&lt;br /&gt;&amp;nbsp; &amp;nbsp; def __init__(self, listen_addr): &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SocketServer.ThreadingTCPServer.__init__(self, listen_addr, EchoRequestHandler)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Whether the server will allow the reuse of an address.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.allow_reuse_address = True&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; #&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.daemon_threads = True&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # request_queue_size&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.request_queue_size = 50&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; def start(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.serve_forever()&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;&amp;nbsp; &amp;nbsp; HOST, PORT = 'localhost', 9999&lt;br /&gt;&amp;nbsp; &amp;nbsp; server = SocksServer((HOST, PORT))&lt;br /&gt;&amp;nbsp; &amp;nbsp; server.start()&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;'ThreadingTCPServer'를 상속받은 'SocksServer' 클래스를 제작한다. 그 안에서 부모클래스의 생성자를 호출하면서 해들러도 같이 지정해준다.&lt;br /&gt;&lt;br /&gt;여기서 추가된 내용이 클래스 멤버 변수들인데, 주목해야 할 것은 'request_queue_size' 변수로 이것은 쓰레드의 개수를 지정해주는 것이다. 디폴트로는 5이다.&lt;br /&gt;&lt;br /&gt;또, 'EchoRequestHandler' 핸들러들에 'setup','finish' 메소드를 추가했다. 코멘트에도 달았지만 'setup'은 'handle'메소드가 시작되기전에 먼저 호출되는 것이고, 'finish'는 'handle'메소드가 끝나고나서 실행되는 메소드이다.&lt;br /&gt;&lt;br /&gt;'EchoRequestHandler' 핸들러 클래스도 'SocketServer.BaseRequestHandler'를 상속받은 것이다. 'SocketServer.BaseRequestHandler' 클래스는 'setup','handle','finish' 메소드가 정의만 되어 있어 이를 오버라이딩(overriding)해서 사용하는 것이다. 이 클래스에는 특징이 있는데 데이터를 주고 받을때 읽은 버퍼의 크기를 정해줘야 한다. &lt;br /&gt;&lt;br /&gt;'SocketServer.BaseRequestHandler'는 그야말로 기본적인 소켓 핸들러 클래스이다. 이에 비해서 자주 사용되는 것이 'SocketServer.StreamRequestHandler' 이다. 이 클래스를 쓰면 버퍼 크기를 정하지 않아도 된다. &lt;br /&gt;&lt;br /&gt;[code python]&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;# -*- coding: utf-8 -*-&lt;br /&gt;&lt;br /&gt;import sys &lt;br /&gt;import os&lt;br /&gt;import time&lt;br /&gt;import SocketServer&lt;br /&gt;&lt;br /&gt;class SocksHandler(SocketServer.StreamRequestHandler):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; def handle(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.data = self.rfile.readline().strip()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if self.data:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print "%s" % str(self.client_address[0])&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print self.data&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.request.send(self.data.upper())&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.request.close()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;class SocksServer(SocketServer.ThreadingTCPServer):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; def __init__(self, listen_addr):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SocketServer.ThreadingTCPServer.__init__(self, listen_addr, SocksHandler)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.allow_reuse_address = True&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.daemon_threads = True&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.request_queue_size = 50&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; def start(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.serve_forever()&lt;br /&gt;&lt;br /&gt;if __name__ == '__main__':&lt;br /&gt;&amp;nbsp; &amp;nbsp; HOST, PORT = 'localhost', 9999&lt;br /&gt;&amp;nbsp; &amp;nbsp; obj = SocksServer((HOST, PORT))&lt;br /&gt;&amp;nbsp; &amp;nbsp; obj.start()&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;이상으로 ThreadingTCPServer를 구현해봤다. 역시나 Python은 간단하게 구현이 가능하구나.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XYfKSVlKaH.gz" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/gz.gif" alt="" style="vertical-align: middle;" /&gt; tcpserver_example.tar.gz&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-2023190833493000821?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/2023190833493000821/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/08/socketserver-thread-%EA%B5%AC%ED%98%84.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/2023190833493000821'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/2023190833493000821'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/08/socketserver-thread-%EA%B5%AC%ED%98%84.html' title='SocketServer Thread 구현.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-3987660725226847051</id><published>2010-08-01T14:22:00.000+09:00</published><updated>2010-12-21T01:34:06.717+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='일상'/><category scheme='http://www.blogger.com/atom/ns#' term='일기'/><title type='text'>뭔가를 해야겠다는 생각은 드는데....</title><content type='html'>뭔가를 해야겠다는 생각은 자꾸 드는데 도통 손이 가지 않는다. 최근에 HTML 5 + CSS3 를 가지고 cakephp 를 써서 블로그를 만들어볼까 생각도 했었지만 회사 스트레스때문에 그것도 흐지부지 되고 말았다. &lt;br /&gt;&lt;br /&gt;벌써 2010년 후반을 향에 달리고 있는데, 뭔가를 해야겠다는 생각은 있는데 행동으로 가지 않는게 문제다. 왜 이런걸까... 절박하지 않아인가...&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-3987660725226847051?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/3987660725226847051/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/08/%EB%AD%94%EA%B0%80%EB%A5%BC-%ED%95%B4%EC%95%BC%EA%B2%A0%EB%8B%A4%EB%8A%94-%EC%83%9D%EA%B0%81%EC%9D%80-%EB%93%9C%EB%8A%94%EB%8D%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3987660725226847051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3987660725226847051'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/08/%EB%AD%94%EA%B0%80%EB%A5%BC-%ED%95%B4%EC%95%BC%EA%B2%A0%EB%8B%A4%EB%8A%94-%EC%83%9D%EA%B0%81%EC%9D%80-%EB%93%9C%EB%8A%94%EB%8D%B0.html' title='뭔가를 해야겠다는 생각은 드는데....'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-3102782046758772049</id><published>2010-07-29T23:09:00.000+09:00</published><updated>2010-12-21T01:34:05.367+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='MYSQL5'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='row_number()'/><title type='text'>[MySQL] ROW_NUMBERS() 함수 쿼리.</title><content type='html'>Oracle에는 ROW_NUMBER()라는 함수가 있다. SELECT 문에서 주로 사용하는데 레코드에 번호를 먹여주는 것으로 다음과 같이 나온다.&lt;br /&gt;&lt;br /&gt;[code sql]&lt;br /&gt;+----+------------+&lt;br /&gt;| &amp;nbsp; rk &amp;nbsp; | &amp;nbsp; &amp;nbsp; name &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;br /&gt;+----+------------+&lt;br /&gt;| &amp;nbsp; 1 &amp;nbsp;&amp;nbsp; | &amp;nbsp; &amp;nbsp; Hyun &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;br /&gt;| &amp;nbsp; 2 &amp;nbsp;&amp;nbsp; | &amp;nbsp; &amp;nbsp; Tacitus &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; |&lt;br /&gt;+----+------------+&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;테이블 스키마에 rk 라는 컬럼이 없는데도 위의 경우처럼 결과를 보여준다.&lt;br /&gt;&lt;br /&gt;문제는 MySQL은 이것을 지원하지 않는다. 대부분 idx라는 컬럼을 만들고 auto_increament 제약사항을 줘서 Primary key 로 정해서 사용한다. 그래서 row_number()라는 함수가 없어도 필요로 하는 기능을 수행할 수 있다. 그런데 이러한 키가 없을 경우는 어떻게 할 것인가?&lt;br /&gt;&lt;br /&gt;검색을 하다보니 이러한 고민이 상당이 많이 나왔고 적당한 해결책을 찾아냈다. &lt;br /&gt;&lt;a target="_blank" href="http://jimmod.com/blog/2008/09/displaying-row-number-rownum-in-mysql/"&gt;http://jimmod.com/blog/2008/09/displaying-row-number-rownum-in-mysql/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SELECT @row:=@row+1 as rk, it.TABLE_SCHEMA, it.TABLE_NAME FROM (SELECT @row:=0) AS r, INFORMATION_SCHEMA.TABLES AS it WHERE it.TABLE_NAME='xe_session';&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;mysql 5.x의 INFOMATION_SCHEMA에 번호를 먹여봤다. 'xe_session'이라는 테이블을 가진 데이터베이스를 검색하는 쿼리인데 스키마에는 rk가 없다. 그래서 위의 쿼리처럼 임의로 rk를 지정해줄 수 있다. &lt;br /&gt;&lt;br /&gt;그런데 rk는 말했다시피, 레코드의 컬럼이 아니다. 그래서 WHERE 조건문에서 사용할 수 없다. rk를 이용해서 특정 번호 이상 혹은 이전값을 가지고 와야할 경우가 생기는데 그럴때는 새롭게 가상의 테이블을 만든다.&lt;br /&gt;&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SELECT * FROM&amp;nbsp; (SELECT @row:=@row+1 as rk, it.TABLE_SCHEMA, it.TABLE_NAME FROM (SELECT @row:=0) AS r, INFORMATION_SCHEMA.TABLES AS it WHERE it.TABLE_NAME='xe_session') rank WHERE rk &amp;gt; 10&lt;br /&gt;mysql&amp;gt; SELECT * FROM&amp;nbsp; (SELECT @row:=@row+1 as rk, it.TABLE_SCHEMA, it.TABLE_NAME FROM (SELECT @row:=0) AS r, INFORMATION_SCHEMA.TABLES AS it WHERE it.TABLE_NAME='xe_session') rank WHERE rk BETWEEN 10 AND 24&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;Mysql도 가능하다.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-3102782046758772049?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/3102782046758772049/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/mysql-rownumbers-%ED%95%A8%EC%88%98-%EC%BF%BC%EB%A6%AC.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3102782046758772049'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3102782046758772049'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/mysql-rownumbers-%ED%95%A8%EC%88%98-%EC%BF%BC%EB%A6%AC.html' title='[MySQL] ROW_NUMBERS() 함수 쿼리.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6518306136237455158</id><published>2010-07-29T22:45:00.000+09:00</published><updated>2010-12-21T01:34:04.181+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='일상'/><category scheme='http://www.blogger.com/atom/ns#' term='일기'/><title type='text'>기술적인것 외에 신경을 안쓴다?</title><content type='html'>오히려 너무 많이 신경써서 문제다.&lt;br /&gt;&lt;br /&gt;문제의 본질을 보는 시각자체가 달랐다. 균형도 없는 대화였을 뿐이다. 누군가와 대화를 하기위해서는 직급을 버려야했지만 상대방은 직급을 가진체 그 시각으로 바라봤을뿐이다. 그리고 웃기게도 '기술적인 것 외엔 신경을 안쓴다'였다. 그리고 전체적으로 봤을때 얼마나 막장으로 가고 있나를 가름할 수 있었다.&lt;br /&gt;&lt;br /&gt;IT 경력 5년차쯤인데, 이쯤되면 기술적인것 외에는 다른것도 신경을 써야하는건 아닌가? 라는 질문에 욱할뻔 했다. 만난지 얼마나됐다고 경력까지 운운하면서 다른것도 좀 신경쓰라는 듯한 늬앙스는 무엇인지.&lt;br /&gt;&lt;br /&gt;상대방의 주장은 이런것이 었다. 경력 5년차도 됐고 기술적인만 신경쓰지말고 다른것도 신경써줬으면 좋겠다. 프로젝트를 맞기면 할수있었으면 한다. &lt;br /&gt;&lt;br /&gt;웃기지 않은가? 아무리 수평적 상하관계를 유지하는 구조지만 각 역활에 맞는 일이 있다. 팀장은 팀장으로서 당연히 해야 할 일이 있는것이고 사원이면 사원으로 당연히 해야할 일이 있는 것이다. 각 역활에 맞는 일에대해서 평가를 받는 것은 당연한 것이다. 당연히 그 보다 더 하면 좋은 평가를 받을 수 있지만 자기 역활에 맞는 일을 하면서 그 이상을 못한다고 해서 달리 뭐라고 할수 있는 것도 아니다.&lt;br /&gt;&lt;br /&gt;상대방의 주장은 내가 듣기로는 팀장일을 이제 좀 해라로 요약된다. 그러한 일은 내가 하는 일이 아니다. 할수는 있다. 그만한 권한을 부여한다면 말이다. (아아~ 이런말을 하면 또 '팀장일'이란게 정해진게 따로 없다고 할지도 모른다. 그러한 주장이라면 논쟁자체가 필요가 없는 것이다. 그와 더불어서 무엇으로 어떠한 가준으로 날 평가할 것인가? ) &lt;br /&gt;&lt;br /&gt;왜 이런 구분에 신경을 쓰는가라고 말할 수도 있다. '평가'라는 요소가 내장되기 때문이다. 내가 팀을 옮길때마다 팀장들에게 했던말은 왠만하면 일관된 평가를 받고 싶다였다. 평가라는 것이 왠만해서는 다른사람이 들었을때에 수긍할 수 있는 논리였다. 하지만 내가 여기저기 팀을 옮겨다니면서 느낀것은 팀장 마음대로의 평가였을 뿐이다. '왠만해서는 다른사람이 들었을때에 수긍할 수 있는 논리'의 입장에서 봤을때 오늘 상대방의 주장이 얼마나 어이없는지를 말해보겠다.&lt;br /&gt;&lt;br /&gt;팀장의 입장에서 봤을때 알아서 잘하는 사원들이 눈에 보이기 마련이다. 그에 반대로 묵묵히 자기 할일에 충실하면서 기술개발에 힘쓰는 사람도 눈에 보인다. 그렇다면 당신이 팀장이라고 한다면 누구와 일을 하겠는가? 누구에게 더 많은 일을 주겠는가?&lt;br /&gt;&lt;br /&gt;전자를 택한다면 당신은 팀장으로서 실격이다. 알아서 다 잘해주는 사원을 데리고 일을 한다면 분명히 프로젝트가 거침없이 성공할 가능성은 있다. 그와 더불어 자신이 신경을 덜 쓰더라도 프로젝트는 알아서 잘 굴러갈 것이고 팀장인 자신의 입지도 강화될 것이다. 하지만 그 이면에는 자신이 무능하다는 것을 만천하에 홍보하는 꼴이된다. 왜냐하면 그러한 팀에는 아무사람이나 팀장을 하던간에 프로젝트는 성공가능성이 높고, 따라서 팀장자체가 필요없는 팀으로서 불리울수 있게 된다. &lt;br /&gt;&lt;br /&gt;문제는 팀원중에 그렇게 알아서 잘하는 사람이 아닌 사람이 끼여 있을때 발생한다. 알아서 잘 해주길 기대했지만 그러지 못한 팀원이 있을 경우 팀장은 그 사람에 대한 평가를 깍아 내린다. 왜냐하면 자신이 원하는 팀원은 알아서 잘하는 사람인데, 그러지 못했으니까 말이다. 하지만 평가라는 것은 자신이 원하는 팀원의 능력을 평가하는 것도 맞지만 그 사람이 가진 직위에서 하는일에 대한 정당한 평가도 동시에 있어야 한다. 알아서 잘하는 능력은 팀원들이 가지고 있으면 좋겠지만 그러지 못했다고 해서 팀원들의 평가 전부가 '능력없음'이라고 적을 수 있는 것이 아니라는 것이다.&lt;br /&gt;&lt;br /&gt;팀장이 역활이 무엇이라고 생각하는가? 일을 던지면 잘해주길 바라는 팅원을 데리고 프로젝트를 성공하는 것이라고 생각하는가? 팀장의 역활은 이 보다 더 훨씬 크다. 각 팀원들간의 특성을 간파하고 잘 할수 있는 능력을 개발하고 거기에 맞추어서 일을 포장해서 던져주는 것부터해서 팀원들간의 의견 조율, 타팀으로부터 팀내 보호(?)등등 말로는 다 못할 정도다.&lt;br /&gt;&lt;br /&gt;웃긴것은 이러한 팀장의 생각이 '일반성'을 내포하는 것인가? '일반성'이라면 다양한 환경에서도 누구나 공감하고 수긍할 수 있는 논리나 생각들을 말하는데, IT에 근무하는 팀장들의 생각이 대부분 다 그렇다는 것이며 이것이 올바른 것으로 팀장의 역활로 연구해야할 가치가 있는 것인가 라는 것이다. &lt;br /&gt;&lt;br /&gt;누군가에게 요구를 할때는 '일반성'을 내포해야 한다. 대화는 암묵적으로 '일반성'에 대한 약속을 전제로 이루어지는 것이다. '팀장의 역활', '팀장이 팀원들을 어떻게 다룰것인가?'에 대한 생각을 할때에도 일반성을 전제로 해야한다는 것은 당연한 것이다. &lt;br /&gt;&lt;br /&gt;하지만 내가 있는 공간에는 이러한 일반성은 없는 듯하다. 각 개인의 특성을 살릴 수도 없거니와 그러한 특성을 이용해 업무에 반영한다는 것은 어불성설이다. &lt;br /&gt;&lt;br /&gt;또, 프로젝트를 던지면 했으면 한다고 했지만 '프로젝트'의 의미는 내가 있는 공간에서는 없는거나 다름없다. 예를들어 서버리스트의 경우도 그렇다. 상대방은 프로젝트를 주면 진행을 했으면 했지만, 프로젝트에 필요한 환경구축을 상대방에게 요구했었다. 하지만 상대방은 그러한 환경구축이 필요하면 '요구'하시면 된다라고 말한다.&lt;br /&gt;&lt;br /&gt;전쟁에 싸우러나가면서 총알도 없이 총만 주고 내보내고 필요하면 총알 요청하라고 하는 것과 같다. 프로젝트의 성공요인은 기술적인 측면이 아니다. 환경적인 측면이 거의 100% 차지 한다고 본다. 그러한 환경적인 측면을 누가 제공해줘야 하나? 누구의 역활이란 말인가? 역활 구분도 없이 마구 아무나 되는사람이 능력껏 해주길 바라고 하면 '좋은평가' 못하면 '그닥~'이라고 긋는것은 앞에서도 말했지만 자신이 얼마나 무능한지를 증명하는 것밖에 안된다. &lt;br /&gt;&lt;br /&gt;더군다나 상대방은 팀장의 입장만 일괄적으로 전달했을뿐이다. 나의 의견에 대해서는 '그럼 요청하세요~ 요청안하고 뭐하세요?'라는 말로 되돌아왔다. 나의 요구는 '앞으로는 이러한 것도 좀 해주세요~' 였지만 '요구하세요~ 그럼 해드릴께요' . 웃기지 않은가? 프로젝트를 시작할 시점에 팀장이 무엇을 뭘 어떻게 해야할지도 모른단 말로만 들린다.&lt;br /&gt;&lt;br /&gt;점점 획일화 되어가고 점점 자기기준에 맞추어주기만 바라 공간으로의 변화. 이미 팀장이 되었으니까 별 걱정없이 평생직장되겠구나 하는 생각들.... IT 종사자라는 타이틀이 아깝다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6518306136237455158?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6518306136237455158/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/%EA%B8%B0%EC%88%A0%EC%A0%81%EC%9D%B8%EA%B2%83-%EC%99%B8%EC%97%90-%EC%8B%A0%EA%B2%BD%EC%9D%84-%EC%95%88%EC%93%B4%EB%8B%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6518306136237455158'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6518306136237455158'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/%EA%B8%B0%EC%88%A0%EC%A0%81%EC%9D%B8%EA%B2%83-%EC%99%B8%EC%97%90-%EC%8B%A0%EA%B2%BD%EC%9D%84-%EC%95%88%EC%93%B4%EB%8B%A4.html' title='기술적인것 외에 신경을 안쓴다?'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-4819744941184755188</id><published>2010-07-28T18:49:00.000+09:00</published><updated>2010-12-21T01:34:02.871+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='내책상'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='내자리'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='일상'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><category scheme='http://www.blogger.com/atom/ns#' term='일기'/><title type='text'>내가 일하는 책상.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XXQj8r1IxO.jpg" style="width:520px;height:390px;" alt="내 책상." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XXQj8r1IxO.jpg')" /&gt;&lt;p class="cap1"&gt;내일터, 내책상.&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;내가 다니는 회사에 내 책상. 내가 다니는 회사는 무조건 듀얼 모니터를 준다. 그리고 OS는 최근에는 Windows 7 pro를 준다. 하지만 나는 리눅스를 사용하고 싶어서 CentOS 를 설치해서 사용하고 있는 중이다. 직업이 프로그래머 &amp;amp;&amp;amp; 관리자이다보니 터미널 접속이 많은데 리눅스를 설치하면 한텀(Hanterm)으로 바로 접속이 가능하고 리눅스에서 제공하는 각종 강력한 프로그램을 이용할 수 있어서 좋다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;오른쪽 화면은 Vmplayer 로 Windows 7 를 설치해서 사용하고 있다. 다른 사람들은 전부 윈도운즈를 사용하고 있어서 업무를 하려면 어쩔수 없어 사용한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-4819744941184755188?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/4819744941184755188/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/%EB%82%B4%EA%B0%80-%EC%9D%BC%ED%95%98%EB%8A%94-%EC%B1%85%EC%83%81.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/4819744941184755188'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/4819744941184755188'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/%EB%82%B4%EA%B0%80-%EC%9D%BC%ED%95%98%EB%8A%94-%EC%B1%85%EC%83%81.html' title='내가 일하는 책상.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-4443148624918167935</id><published>2010-07-17T01:09:00.000+09:00</published><updated>2010-12-21T01:34:01.631+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='visual studio'/><category scheme='http://www.blogger.com/atom/ns#' term='C#'/><category scheme='http://www.blogger.com/atom/ns#' term='기타'/><title type='text'>Visual Studio C# 2008 Step by Step code sample</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XUIPcYkVt7.png" style="width:163px;height:199px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XXIFmVmsub.exe" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/exe.gif" alt="" style="vertical-align: middle;" /&gt; 9780735626706_OCC.exe&lt;/a&gt;&lt;p class="cap1"&gt;code sample&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Link: &lt;A href="http://go.microsoft.com/fwlink/?LinkId=184386"&gt;http://go.microsoft.com/fwlink/?LinkId=184386&lt;/A&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-4443148624918167935?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/4443148624918167935/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/visual-studio-c-2008-step-by-step-code.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/4443148624918167935'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/4443148624918167935'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/visual-studio-c-2008-step-by-step-code.html' title='Visual Studio C# 2008 Step by Step code sample'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-248425803802933616</id><published>2010-07-14T11:08:00.000+09:00</published><updated>2010-12-21T01:34:00.414+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='파이썬 Python'/><category scheme='http://www.blogger.com/atom/ns#' term='언어'/><category scheme='http://www.blogger.com/atom/ns#' term='파이썬'/><category scheme='http://www.blogger.com/atom/ns#' term='파이썬 팁'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>파이썬 Prompt 기능 추가.</title><content type='html'>파이썬 Prompt는 인터프리터 이다. 그런데 쓰다보면 답답한게 한둘이 아니다. 기본적으로 리눅스 Bash 쉘처럼 &amp;lt;tab&amp;gt; 리스팅 기능과 완성기능이 없어서 모두 타이핑을 해줘야 하고 입력했던 히스토리 기능도 없어서 매번 입력해줘야 한다. 이를 해결하기 위해서 Ipython 이 있지만 간단한 방법으로 위의 기능들을 구현할 수 있다.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;파이썬은 Prompt가 실핼될때에 환경변수 PYTHONSTARTUP 를 검사한다. 이 환경변수가 있다면 파이썬을 이를 읽어서 실행해준다. 이를 활용해서 파이썬이 시작할때에 &amp;lt;tab&amp;gt; 리스팅과 완성기능을 구현해주는 파이썬 스크립트를 넣어주면 된다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;&amp;lt;tab&amp;gt; 리스팅과 완성기능 그리고 히스토리 기능 구현을 위해서 파이썬에 'readline' 라이브러리를 참조해야 하는데 이는 파이썬 설치시에 readline C 라이브러리를 링크해 컴파일 설치되어 있어야 한다. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;[code python]&lt;br /&gt;# python startup file&lt;br /&gt;import readline&lt;br /&gt;import rlcompleter&lt;br /&gt;import atexit&lt;br /&gt;import os&lt;br /&gt;# tab completion&lt;br /&gt;readline.parse_and_bind('tab: complete')&lt;br /&gt;# history file&lt;br /&gt;histfile = os.path.join(os.environ['HOME'], '.pythonhistory')&lt;br /&gt;try:&lt;br /&gt;&amp;nbsp; &amp;nbsp; readline.read_history_file(histfile)&lt;br /&gt;except IOError:&lt;br /&gt;&amp;nbsp; &amp;nbsp; pass&lt;br /&gt;atexit.register(readline.write_history_file, histfile)&lt;br /&gt;del os, histfile, readline, rlcompleter&lt;br /&gt;[/code]&lt;br /&gt;이것을 .pythonstartup 로 파일을 저장한다. 그리고 환경변수를 세팅하기위해서 Bash startup 파일인 .bashrc 에 다음과 같이 입력한다&lt;br /&gt;[code bash]&lt;br /&gt;export PYTHONSTARTUP=~/.pythonstartup&lt;br /&gt;[/code]&lt;br /&gt;그리고 .bashrc 파일 적용을 위해서 다음과 같이 source 해준다.&lt;br /&gt;[code bash]&lt;br /&gt;]# source .bashrc&lt;br /&gt;[/code]&lt;br /&gt;이렇게 하고 python을 실행하고 다음의 코드를 입력해보자.&lt;br /&gt;[code bash]&lt;br /&gt;python&lt;br /&gt;Python 2.4.3 (#1, Sep&amp;nbsp; 3 2009, 15:37:37) &lt;br /&gt;[GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2&lt;br /&gt;Type "help", "copyright", "credits" or "license" for more information.&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; import md5&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt; md5.&lt;br /&gt;md5.MD5Type &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; md5.__doc__ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; md5.__init__ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; md5.__reduce_ex__ &amp;nbsp; &amp;nbsp; md5.digest_size &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;md5.__class__ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; md5.__file__ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; md5.__name__ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; md5.__repr__ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; md5.md5 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;md5.__delattr__ &amp;nbsp; &amp;nbsp; &amp;nbsp; md5.__getattribute__&amp;nbsp; md5.__new__ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; md5.__setattr__ &amp;nbsp; &amp;nbsp; &amp;nbsp; md5.new &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;md5.__dict__ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; md5.__hash__ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; md5.__reduce__ &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; md5.__str__ &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;gt;&amp;gt; md5.&lt;br /&gt;[/code]&lt;br /&gt;리스팅도 해주고 완성도 해준다.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-248425803802933616?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/248425803802933616/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/%ED%8C%8C%EC%9D%B4%EC%8D%AC-prompt-%EA%B8%B0%EB%8A%A5-%EC%B6%94%EA%B0%80.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/248425803802933616'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/248425803802933616'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/%ED%8C%8C%EC%9D%B4%EC%8D%AC-prompt-%EA%B8%B0%EB%8A%A5-%EC%B6%94%EA%B0%80.html' title='파이썬 Prompt 기능 추가.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6591846919559039555</id><published>2010-07-11T19:32:00.000+09:00</published><updated>2010-12-21T01:33:59.098+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Html5/CSS3'/><category scheme='http://www.blogger.com/atom/ns#' term='CSS3'/><category scheme='http://www.blogger.com/atom/ns#' term='언어'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='HTML &amp;amp; CSS'/><title type='text'>Html5 example2 예제.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XRUDJgGysC.png" style="width:520px;height:419px;" alt="Html5 example2" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XRUDJgGysC.png')" /&gt;&lt;p class="cap1"&gt;Html5 example2&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;Html5 example2 입니다. 원래사이트는 &lt;a target="_blank" href="http://www.globfx.com/support/"&gt;swiff chart 사이트&lt;/a&gt; 입니다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XIEIok28gY.gz" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/gz.gif" alt="" style="vertical-align: middle;" /&gt; html5_example2.tar.gz&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6591846919559039555?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6591846919559039555/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/html5-example2-%EC%98%88%EC%A0%9C.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6591846919559039555'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6591846919559039555'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/html5-example2-%EC%98%88%EC%A0%9C.html' title='Html5 example2 예제.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-2067600460107828144</id><published>2010-07-09T09:51:00.000+09:00</published><updated>2010-12-21T01:33:57.639+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='모바일'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='스마트폰'/><category scheme='http://www.blogger.com/atom/ns#' term='기사'/><category scheme='http://www.blogger.com/atom/ns#' term='갤럭시S'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><title type='text'>삼성전자의 '갤럭시S' 언론 플레이현장.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;미디어오늘이 비교적 정확한 시각으로 삼성전자의 '갤럭시S' 언론 플레이 현장을 꼬집었다. 특히나 해외에서 발생한 갤럭시S의 폭발 사고를 보도했던 YTN의 기사삭제 대목에서 더 극명하게 들어난다.&lt;br /&gt;&lt;br /&gt;&lt;a target="_blank" href="http://www.mediatoday.co.kr/news/articleView.html?idxno=89389"&gt;[미디어오늘] 아이폰은 '까고' 갤럭시S는 '띄우고'&lt;/a&gt;&lt;br /&gt;&lt;a target="_blank" href="http://www.mediatoday.co.kr/news/articleView.html?idxno=89389"&gt;악마적 매력? "갤럭시S는 아이폰 킬러" 등 엉터리 작문,편파 보도 논란.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;또 언론들이 해외의 보도를 인용할때에 기기의 단점은 쏙빼버리고 장점만 나열하고 있다는 것도 사실이다. 미디어 오늘 기사에 보면 &lt;br /&gt;&lt;br /&gt;" &lt;span style="font-style: italic;"&gt;연합뉴스는 기사 말미에 "이 신문은 그러나 애널리스트들의 분석을 인용해 '갤럭시S가 비록 하드웨어는 강력하지만 경쟁업체들의 시장점유율을 빼앗아오기 위해서는 콘텐츠와 애플리케이션을 차별화해야 한다'고 덧붙였다"고 짧게 언급했지만 정작 "전문가들은 갤럭시S가 하드웨어적 사양이 높긴 하지만 아이폰 킬러가 될 것이라는 것에는 의구심을 나타내고 있다(However, they doubt the GalaxyS can become the iPhone killer, despite its strong hardware)"는 대목을 쏙 빼놓았다.&lt;/span&gt; "&lt;br /&gt;&lt;br /&gt;라고 보도하고 있다.&lt;br /&gt;&lt;br /&gt;거기에다가 번역기를 돌려서 기사를 써낸것도 보인다.&lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;&lt;span style="font-style: italic;"&gt;뉴시스도 엉터리 번역 기사를 내보내 구설수에 오른 적이 있다. 지난달 29일 "'악마적 품질' 갤럭시S, 아이폰 대항 미국 점령'이란 제목의 기사를 내보냈는데 '악마적 품질'이란 단어는 미국의 정보기술 사이트 인가젯의 기사에서 따온 것으로 원문은 다음과 같다. &lt;/span&gt;&lt;br style="font-style: italic;"&gt;&lt;br style="font-style: italic;"&gt;&lt;br style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;'Samsung's 4 inch Super AMOLED, 800×480, IPS-killing display. Touted as the technology that will finally rid AMOLED of its vampiric quality(삼성의 4인치 슈퍼 아몰레드는 800×400 해상도와 IPS 대항 디스플레이 등으로 기존 아몰레드의 치명적인 단점을 제거한 신기술을 선보였다).'&lt;/span&gt;&lt;br style="font-style: italic;"&gt;&lt;br style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;'vampiric quality'는 문맥상 '악마적 품질'이 아니라 '치명적인 단점' 정도의 의미다. 뱀파이어라는 말은 기존의 아몰레드 액정화면이 낮에는 잘 보이지 않고 밤에만 잘 보인다는 의미를 담고 있기도 하다. 심지어 원문에는 'rid(제거했다)'는 말까지 나온다. 기초적인 수준의 독해 실력만 있어도 실수하지 않을 거라는 지적이 제기됐다. &lt;/span&gt;&lt;br style="font-style: italic;"&gt;&lt;br style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;그런데 뉴시스는 이 문장을 정반대로 해석했다. &lt;/span&gt;&lt;br style="font-style: italic;"&gt;&lt;br style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;'실제로 미국의 IT 전문 온라인 매체 인가젯은 갤럭시S에 대한 리뷰기사에서 '갤럭시S의 슈퍼 아몰레드는 IPS를 죽여버릴 정도의 악마적 품질을 장점으로 내세우고 있다'고 평가했다.'&lt;/span&gt;&lt;br style="font-style: italic;"&gt;&lt;br style="font-style: italic;"&gt;&lt;span style="font-style: italic;"&gt;뉴시스는 논란이 확산되자 이 문장을 삭제하고 제목도 수정했다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;이런걸 잡아낸 미디어 오늘도 대단하지만 그보다 앞서 잡아낸 누리꾼들이 더 대단하다. 역시나 누리꾼들이야 말로 뭐가 객관적인지, 뭐가 올바른지를 아는 듯하다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XHA0Rl0x4j.jpg" style="width:520px;height:741px;" alt="아이폰 &amp;#39;까기&amp;#39;에 대한 누리꾼들의 패러디" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XHA0Rl0x4j.jpg')" /&gt;&lt;p class="cap1"&gt;아이폰 &amp;#39;까기&amp;#39;에 대한 누리꾼들의 패러디&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-2067600460107828144?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/2067600460107828144/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90%EC%9D%98-%EA%B0%A4%EB%9F%AD%EC%8B%9Cs-%EC%96%B8%EB%A1%A0-%ED%94%8C%EB%A0%88%EC%9D%B4%ED%98%84%EC%9E%A5.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/2067600460107828144'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/2067600460107828144'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/%EC%82%BC%EC%84%B1%EC%A0%84%EC%9E%90%EC%9D%98-%EA%B0%A4%EB%9F%AD%EC%8B%9Cs-%EC%96%B8%EB%A1%A0-%ED%94%8C%EB%A0%88%EC%9D%B4%ED%98%84%EC%9E%A5.html' title='삼성전자의 &apos;갤럭시S&apos; 언론 플레이현장.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-3972460306591011073</id><published>2010-07-09T09:21:00.000+09:00</published><updated>2010-12-21T01:33:56.081+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='한글입력기'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><category scheme='http://www.blogger.com/atom/ns#' term='SCIM'/><title type='text'>SCIM 재시작.</title><content type='html'>리눅스 데스크탑을 사용하다보면 자판입력기인 SCIM가 동작을 않하는 경우가 있다. 한글전환이 안된다거나 하는 그런 증상. 그럴때는 으레 X server 를 재시작하려고 하지만 그럴필요는 없다. 다음과 같이 하고 프로그램들을 재시작 하면 된다.&lt;br /&gt;[code bash]&lt;br /&gt;]# pkill -9 scim&lt;br /&gt;]# scim -d&lt;br /&gt;[/code]&lt;br /&gt;이렇게 하고 한글입력이 필요한 프로그램을 재시작해주면 된다.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-3972460306591011073?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/3972460306591011073/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/scim-%EC%9E%AC%EC%8B%9C%EC%9E%91.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3972460306591011073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3972460306591011073'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/scim-%EC%9E%AC%EC%8B%9C%EC%9E%91.html' title='SCIM 재시작.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-3332874388172557073</id><published>2010-07-04T21:07:00.000+09:00</published><updated>2010-12-21T01:33:53.329+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='CSS3'/><category scheme='http://www.blogger.com/atom/ns#' term='언어'/><category scheme='http://www.blogger.com/atom/ns#' term='html5'/><category scheme='http://www.blogger.com/atom/ns#' term='html/css'/><title type='text'>Html5 + CSS3 First example</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;Html5 와 CSS3 를 이용한 첫번째 예제.&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XAN8e6B0dr.png" style="width:507px;height:254px;" alt="Html5 First example" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XAN8e6B0dr.png')" /&gt;&lt;p class="cap1"&gt;Html5 First example&lt;/p&gt;&lt;/div&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;위의 화면과 같은 첫번째 예제.&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XSrYiAESqs.zip" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/zip.gif" alt="" style="vertical-align: middle;" /&gt; Web_html5_example1.zip&lt;/a&gt;&lt;/div&gt;&lt;DIV&gt;&lt;br /&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-3332874388172557073?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/3332874388172557073/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/html5-css3-first-example.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3332874388172557073'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3332874388172557073'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/html5-css3-first-example.html' title='Html5 + CSS3 First example'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-1887053368149295216</id><published>2010-07-01T15:11:00.000+09:00</published><updated>2010-12-21T01:33:51.876+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='파이선'/><category scheme='http://www.blogger.com/atom/ns#' term='언어'/><category scheme='http://www.blogger.com/atom/ns#' term='데몬'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>Daemon 제작하기.</title><content type='html'>데몬은 백그라운드(Background)로 외부에서 종료명령을 내리지 않는한 계속해서 동작을 하는 프로그램을 말한다. 백그라운드로의 프로그램 운영은 매우 신중하게 해야하는데 무한으로 반복 대기를 하다가 어떤 액션이 취해지면 다시 대시상태로 돌아와야 하는데 여기서 잘못되었을경우 시스템 자원의 과도한 낭비가 발생할 수 있기 때문이다.&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;Python 으로 데몬을 어떻게 작성하는지 알아보자.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;데몬을 만드는 방법은 다음과 같다.&lt;/div&gt;&lt;div&gt;1.fork() 로 자식프로세스를 만든 다음에 부모 프로세스를 죽인다.&lt;/div&gt;&lt;div&gt;2.프로그램 시작디렉토리를 '/'로 바꾸고 마스크값도 0으로 바꾸고 세션도 루트로 바꾼다.&lt;/div&gt;&lt;div&gt;3.stdout, stdin, stderror 를 전부 null 바꾼다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;위 세가지를 프로그램으로 작성하면 데몬이 된다.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;&lt;/div&gt;&lt;div&gt;[code python]&lt;br /&gt;#!/usr/bin/env python&lt;br /&gt;&amp;nbsp;&lt;br /&gt;import sys, os, time, atexit&lt;br /&gt;from signal import SIGTERM &lt;br /&gt;&amp;nbsp;&lt;br /&gt;class Daemon:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; """&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; A generic daemon class.&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Usage: subclass the Daemon class and override the run() method&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; """&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; def __init__(self, pidfile, stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.stdin = stdin&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.stdout = stdout&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.stderr = stderr&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.pidfile = pidfile&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; def daemonize(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; """&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; do the UNIX double-fork magic, see Stevens' "Advanced &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Programming in the UNIX Environment" for details (ISBN 0201563177)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; http://www.erlenstar.demon.co.uk/unix/faq_2.html#SEC16&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; """&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try: &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pid = os.fork() &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if pid &amp;gt; 0:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # exit first parent&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit(0) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; except OSError, e: &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.stderr.write("fork #1 failed: %d (%s)\n" % (e.errno, e.strerror))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit(1)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # decouple from parent environment&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; os.chdir("/") &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; os.setsid() &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; os.umask(0) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # do second fork&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try: &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pid = os.fork() &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if pid &amp;gt; 0:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # exit from second parent&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit(0) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; except OSError, e: &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.stderr.write("fork #2 failed: %d (%s)\n" % (e.errno, e.strerror))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit(1) &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # redirect standard file descriptors&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.stdout.flush()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.stderr.flush()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; si = file(self.stdin, 'r')&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; so = file(self.stdout, 'a+')&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; se = file(self.stderr, 'a+', 0)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; os.dup2(si.fileno(), sys.stdin.fileno())&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; os.dup2(so.fileno(), sys.stdout.fileno())&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; os.dup2(se.fileno(), sys.stderr.fileno())&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # write pidfile&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; atexit.register(self.delpid)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pid = str(os.getpid())&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; file(self.pidfile,'w+').write("%s\n" % pid)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; def delpid(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; os.remove(self.pidfile)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; def start(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; """&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Start the daemon&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; """&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Check for a pidfile to see if the daemon already runs&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pf = file(self.pidfile,'r')&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pid = int(pf.read().strip())&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pf.close()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; except IOError:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pid = None&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if pid:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; message = "pidfile %s already exist. Daemon already running?\n"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.stderr.write(message % self.pidfile)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit(1)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Start the daemon&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.daemonize()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.run()&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; def stop(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; """&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Stop the daemon&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; """&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Get the pid from the pidfile&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pf = file(self.pidfile,'r')&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pid = int(pf.read().strip())&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pf.close()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; except IOError:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pid = None&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if not pid:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; message = "pidfile %s does not exist. Daemon not running?\n"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.stderr.write(message % self.pidfile)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; return # not an error in a restart&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; # Try killing the daemon process &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; try:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; while 1:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; os.kill(pid, SIGTERM)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; time.sleep(0.1)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; except OSError, err:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; err = str(err)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if err.find("No such process") &amp;gt; 0:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if os.path.exists(self.pidfile):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; os.remove(self.pidfile)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; else:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; print str(err)&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sys.exit(1)&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; def restart(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; """&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Restart the daemon&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; """&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.stop()&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; self.start()&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; def run(self):&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; """&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; You should override this method when you subclass Daemon. It will be called after the process has been&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; daemonized by start() or restart().&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; """&lt;br /&gt;[/code]&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-1887053368149295216?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/1887053368149295216/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/daemon-%EC%A0%9C%EC%9E%91%ED%95%98%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1887053368149295216'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1887053368149295216'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/07/daemon-%EC%A0%9C%EC%9E%91%ED%95%98%EA%B8%B0.html' title='Daemon 제작하기.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-3011668848208501352</id><published>2010-06-29T16:44:00.000+09:00</published><updated>2010-12-21T01:33:50.381+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='MySQL'/><category scheme='http://www.blogger.com/atom/ns#' term='Analyzed'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='MYSQL5'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='monitoring'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>[Mysql]Monitoring and Analyzing</title><content type='html'>이 문서는 mysql-admin-cookbook 책에서 'Monitoring and Analyzing MySQL Installation' 을 정리한 것입니다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 30, 161);"&gt;1.InnoDB Tablespace 빈공간 체크하기.&lt;/span&gt;&lt;br /&gt;MySQL의 디폴트 엔진인 'MyISAM'의 경우 각각의 테이블들에 대응하여 파일시스템상에서 파일들이 생성이 되어진다. 따라서 데이터가 계속 쌓인다 하더라도 파일시스템상에 빈공간이 남아있으면 별문제가 되지 않는다. &lt;br /&gt;&lt;br /&gt;하지만 InnoDB는 다르다.&lt;br /&gt;&lt;br /&gt;확인하는 방법은 모든 데이터베이스에 테이블들에 대해서 다음과 같이 확인을 하는 것이다.&lt;br /&gt;&lt;br /&gt;[code sql]&lt;br /&gt;SELECT DATA_FREE/(1024*1024) AS FREE_MB, TABLE_SCHEMA, TABLE_NAME&lt;br /&gt;FROM INFORMATION_SCHEMA.TABLES WHERE ENGINE="InnoDB";&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;보통 테이블스페이스를 따로 지정을 하지 않으면 mysql은 공통테이블 스페이스를 사용하게 되고 이럴경우 모든 테이블의 테이블스페이스의 빈공간 용량은 동일하게 나온다.&lt;br /&gt;&lt;br /&gt;각각의 테이블마다 테이블 스페이스를 지정하기 위해서는 'innodb_data_home_dir' 을 my.cnf 파일에 추가해주면 된다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 30, 161);"&gt;2.데이터베이스에 필요한 저장공간 계산하기.&lt;/span&gt;&lt;br /&gt;맨 처음 데이터베이스를 생성할때에 고민이되는 것이 바로 저장공간을 얼만정도로 해줘야 할까하는 것이다. '적절한'저장공간 확보를 위해서는 많은 외부변수들을 종합적으로 감안을해야하는데 이럴경우 '적절한 저장공간은 없고, 최대한 많이'라는 결론만 나온다. 그래도 대충은 데이터 저장 공간을 계산해내서 거기서 생각을 넓혀갈 수는 없을까?&lt;br /&gt;&lt;br /&gt;방법은 존재 한다. &lt;br /&gt;&lt;br /&gt;일단 계산을 위한 테이블 스키마가 필요하다. 테이블 스키마의 정의에 따라서 값이 변하기 때문이다. 그리고 여기에 간단하게 샘플 데이터들을 넣는다. 샘플 데이터들의 양이 많으면 많을 수록 계산되어지는 저장공간에 정확도는 증가할 것이다. 그리고 얼정도의 레코드를 쌓을 것이지를 결정하고 다음과 같이 쿼리로 계산을 할수 있다.(여기서는 1,000,000 레코드를 쌓는 다는 전재다.)&lt;br /&gt;&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SELECT 1000000 * (DATA_LENGTH + INDEX_LENGTH) / (SELECT COUNT(*) FROM sample.table1) / (1024*1024) AS REQUIRED_SPACE_MB FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA="sample" AND TABLE_NAME="table1";&lt;br /&gt;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;위의 명령어는 sample이라는 스키마에 table1 이라는 테이블이 있고 1,000,000 레코드를 기록할 것이라고 예상했을 경에 필요로 하는 저장공간을 계산한 것이다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 30, 161);"&gt;3.Mysql 변수 확인 및 변경.&lt;/span&gt;&lt;br /&gt;Mysql은 기본적으로 'my.cnf' 파일에 각종 변수들을 세팅하고 서버를 재시작하면 적용된다. 하지만 동작하고 있는 상태에서 그러한 변수들을 확안하고 일부 변수는 변경도 가능한데, 이를 알아보자.&lt;br /&gt;&lt;br /&gt;1) 모든 변수 확인&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SHOW VARIABLES;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;2) 특정 변수 확인&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SHOW VARIABLES LIKE "version";&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;3) 특정변수 그룹 확인&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SHOW VARIABLES LIKE "version%";&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;여기서 알아둘 것은 변수는 현재접속자(your own connection)에게만 적용되는 것과 전체 사용자에 영향을 주는 글로벌 설정으로 나뉜다는 것이다. &lt;br /&gt;&lt;br /&gt;현재접속자의 경우에 'SET'으로 값을 변경을하면 그 값은 즉시 적용되어 접속이 이루어지는 동안만 유효하게 된다. 접속을 해제하고 다시 접속했을 경우 이전 값으로 나온다는 뜻이다. 이러한 변수를 세션 변수(session variables)라고 한다.&lt;br /&gt;&lt;br /&gt;글로벌 설정은 현재접속자 뿐만 아니라 전체 사용자에게 영향을 미친다. 단, 현재 접속하여 사용하고 있는 사용자들은 재접속을 해야지만 변경된 값으로 적용이 되어 진다. 이러한 변수를 글로벌 변수(global variables)라고 한다.&lt;br /&gt;&lt;br /&gt;4) 현재접속자에게만 변수 수정(접속해제하면 값은 사라짐). - 세션 변수 수정.&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SET auto_increment_increment=2;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;5) 글로벌 변수 수정(재접속을 해야지만 적용됨). - 글로벌 변수 수정.&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SET GLOBAL auto_increment_increment=3;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;글로벌 변수와 세션 변수의 적용 차이는 다음과 같다.&lt;br /&gt;&amp;nbsp; - 세션변수없이 단독글로벌 변수의 경우 변경 즉시 모든 접속자/비접속자에게 적용이 바로 된다.&lt;br /&gt;&amp;nbsp; - 글로벌변수와 세션변수 둘다 존재할 경우 모두 새로운 접속자에게만 적용이 된다.&lt;br /&gt;이러한 적용이 차이는 글로벌변수가 변경이 되었을 경우 이 것을 세션 변수에 카피(copy)하기 때문이다.&lt;br /&gt;&lt;br /&gt;6) 조건문으로 변수 찾기.&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SHOW VARIABLES WHERE variable_name IN ('wait_timeout', 'autocommit') OR variable_name LIKE 'version%';&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;7) 글로벌 변수 세팅 확인&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SHOW GLOBAL VARIABLES like 'auto_increment_increment';&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 30, 161);"&gt;4.데이터베이스 테이블 갯수 알아내기.&lt;/span&gt;&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SELECT TABLE_SCHEMA, COUNT(*) AS TABLE_COUNT from INFORMATION_SCHEMA.TABLES GROUP BY TABLE_SCHEMA WITH ROLLUP;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 30, 161);"&gt;5.가장 큰 레코드 개수를 가진 데이터베이스, 테이블 알아내기&lt;/span&gt;&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SELECT TABLE_SCHEMA,TABLE_NAME, (INDEX_LENGTH+DATA_LENGTH)/(1024*1024) AS SIZE_MB, TABLE_ROWS FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA NOT IN("mysql", "information_schema") ORDER BY SIZE_MB DESC;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 30, 161);"&gt;6.가장 큰 컬럼 타입별로 정렬해서 보기.&lt;/span&gt;&lt;br /&gt;가끔은 가장 큰 컬럼타입이 무엇일까 하고 궁금해질때가 있다. 이럴때는 다음과 같이 하면 나온다.&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH AS SIZE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA NOT IN ("mysql", "information_schema") ORDER BY size DESC LIMIT 30;&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;그리고 VARCHAR의 특정 길이를 가진 테이블들을 알고 싶다면 다음과 같이 하면 된다.&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SELECT TABLE_SCHEMA, TABLE_NAME, COLUMN_NAME, DATA_TYPE, CHARACTER_MAXIMUM_LENGTH AS SIZE FROM INFORMATION_SCHEMA.COLUMNS WHERE DATA_TYPE="VARCHAR" AND CHARACTER_MAXIMUM_LENGTH=64 AND TABLE_SCHEMA NOT IN ("mysql", "information_schema");&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 30, 161);"&gt;7.다른 테이블 참조하는 테이블 찾아내기.&lt;/span&gt;&lt;br /&gt;InnoDB를 사용하는 이유는 트랜잭션과 외래키를 통한 다른 테이블의 참조에 있다. 그런데 특정테이블을 참조(Referencing)하는 테이블들을 어떻게 하면 알아낼까? 다음과 같이하면 알아낼 수 있다.&lt;br /&gt;&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SELECT TABLE_NAME, CONSTRAINT_NAME, UPDATE_RULE AS "UPDATE", DELETE_RULE AS "DELETE" FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE REFERENCED_TABLE_NAME="employees";&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;'employee' 테이블을 참조하는 다른 테이블들을 모두 찾는다.&lt;br /&gt;&lt;br /&gt;이번에는 'employee'가 참조하는 테이블들을 모두 찾는다.&lt;br /&gt;[code sql]&lt;br /&gt;mysql&amp;gt; SELECT REFERENCED_TABLE_NAME, CONSTRAINT_NAME, UPDATE_RULE AS "UPDATE", DELETE_RULE AS "DELETE" FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE TABLE_NAME="employee";&lt;br /&gt;[/code]&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-3011668848208501352?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/3011668848208501352/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/mysqlmonitoring-and-analyzing.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3011668848208501352'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3011668848208501352'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/mysqlmonitoring-and-analyzing.html' title='[Mysql]Monitoring and Analyzing'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-7596016115814987428</id><published>2010-06-23T22:21:00.000+09:00</published><updated>2010-12-21T01:33:49.140+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='sage'/><category scheme='http://www.blogger.com/atom/ns#' term='firefox'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='파이어폭스'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='css'/><title type='text'>파이어폭스 Sage 사용자정의 CSS</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;파이어폭스 애드온(AddOn)으로 RSS Reader 인 Sage 프로그램에서 RSS 목록을 보여주는 페이지의 CSS Style 를 다음과 같이 바꾸어 주도록 해주는 사용자 정의 CSS 입니다.&lt;br /&gt;&lt;br /&gt;디폴트 CSS 는 한글환경에 잘 어울리지 못하는 것 같아서 한국 모질라 사용자 포럼에서 구했습니다.&lt;br /&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XTQXCG2fNf.png" style="width:520px;height:177px;" alt="Sage Custom CSS " onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XTQXCG2fNf.png')" /&gt;&lt;p class="cap1"&gt;Sage Custom CSS &lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XYg8PcxvGV.gz" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/gz.gif" alt="" style="vertical-align: middle;" /&gt; sage.tar.gz&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-7596016115814987428?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/7596016115814987428/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/%ED%8C%8C%EC%9D%B4%EC%96%B4%ED%8F%AD%EC%8A%A4-sage-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%A0%95%EC%9D%98-css.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7596016115814987428'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7596016115814987428'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/%ED%8C%8C%EC%9D%B4%EC%96%B4%ED%8F%AD%EC%8A%A4-sage-%EC%82%AC%EC%9A%A9%EC%9E%90%EC%A0%95%EC%9D%98-css.html' title='파이어폭스 Sage 사용자정의 CSS'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-2100657255784173705</id><published>2010-06-23T21:45:00.000+09:00</published><updated>2010-12-21T01:33:47.505+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='타임서버'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>time.bora.net 대체 서버들.</title><content type='html'>보통 서버에 타임을 맞추기위해서 'time.bora.net' 을 이용을 합니다.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# rdate -s time.bora.net&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;그런데, 최근에 가끔 타임아웃이 걸리면서 연결이 되지 않는 사태(?)가 자주 발생하는데, bora.net 의 Slave 격인 'zero.bora.net' 를 이용하기도 하지만 이것마져도 연결이 안되면 난처해 집니다.&lt;br /&gt;&lt;br /&gt;그럴때는 다음과 같이 하면 됩니다.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# rdate -s time.nist.gov&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;아니면 ntpd 를 설치만 해놓구 데몬을 구동하지 않았다면 &lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# ntpdate kr.pool.ntp.org&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;이 명령어를 입력하면 해결이 많이 됩니다.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-2100657255784173705?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/2100657255784173705/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/timeboranet-%EB%8C%80%EC%B2%B4-%EC%84%9C%EB%B2%84%EB%93%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/2100657255784173705'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/2100657255784173705'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/timeboranet-%EB%8C%80%EC%B2%B4-%EC%84%9C%EB%B2%84%EB%93%A4.html' title='time.bora.net 대체 서버들.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-8817552525249140730</id><published>2010-06-21T16:14:00.000+09:00</published><updated>2010-12-21T01:33:46.210+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='리스트중복제거'/><category scheme='http://www.blogger.com/atom/ns#' term='언어'/><category scheme='http://www.blogger.com/atom/ns#' term='파이썬'/><category scheme='http://www.blogger.com/atom/ns#' term='파이썬 팁'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>리스트 중복 제거.</title><content type='html'>&lt;P&gt;[code python]#!/usr/bin/env python&lt;br /&gt;lists=['Admin','Admin','DB','DB','a','b','c','d','Admin']&lt;br /&gt;aa=[]&lt;br /&gt;&amp;nbsp; for elem in lists:&lt;br /&gt;&amp;nbsp; &amp;nbsp; if (elem in aa) == 0:&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; aa.append(elem)&lt;br /&gt;print aa&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;python 1.5 에서 매우 잘 동작함. 보통 'set' 내장함수를 이용하지만 이것을 이용할수 없는 버전일경우 위와같이 해주면 된다. 함수나 객체라면 메소드로 만들어서 리턴값을 받으면 편함.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-8817552525249140730?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/8817552525249140730/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A4%91%EB%B3%B5-%EC%A0%9C%EA%B1%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/8817552525249140730'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/8817552525249140730'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A4%91%EB%B3%B5-%EC%A0%9C%EA%B1%B0.html' title='리스트 중복 제거.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6262379668550171086</id><published>2010-06-16T09:16:00.000+09:00</published><updated>2010-12-21T01:33:44.955+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='서버보유대수'/><category scheme='http://www.blogger.com/atom/ns#' term='서버대수'/><category scheme='http://www.blogger.com/atom/ns#' term='서버'/><category scheme='http://www.blogger.com/atom/ns#' term='기타'/><title type='text'>각 회사별 서버 보유대수 땅따먹기(?)</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;거의 대부분의 통계자료는 차트 형식으로 해서 비교할수 있도록 해놓는다. 유명회사가 운영하는 서버들의 대수도 그런식으로 보여주곤 하는데 그래도 사람들이 실감이 안난 모양이다. 그래서 최근에 이것을 땅(?)면적으로 비교해서 보여주는 그림을 어디선가 올려놨다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XT8O3kk9qj.png" style="width:520px;height:2757px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XT8O3kk9qj.png')" /&gt;&lt;/div&gt;&lt;br /&gt;구글 땅이 훨씬 크다. ㅡㅅㅡ;;&lt;br /&gt;&lt;br /&gt;원본: &lt;a target="_blank" href="http://www.intac.net/a-comparison-of-dedicated-servers-by-company_2010-04-13/"&gt;http://www.intac.net/a-comparison-of-dedicated-servers-by-company_2010-04-13/&lt;/a&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6262379668550171086?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6262379668550171086/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/%EA%B0%81-%ED%9A%8C%EC%82%AC%EB%B3%84-%EC%84%9C%EB%B2%84-%EB%B3%B4%EC%9C%A0%EB%8C%80%EC%88%98-%EB%95%85%EB%94%B0%EB%A8%B9%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6262379668550171086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6262379668550171086'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/%EA%B0%81-%ED%9A%8C%EC%82%AC%EB%B3%84-%EC%84%9C%EB%B2%84-%EB%B3%B4%EC%9C%A0%EB%8C%80%EC%88%98-%EB%95%85%EB%94%B0%EB%A8%B9%EA%B8%B0.html' title='각 회사별 서버 보유대수 땅따먹기(?)'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6515751548049967909</id><published>2010-06-12T23:41:00.000+09:00</published><updated>2010-12-21T01:33:43.717+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='한컴오피스'/><category scheme='http://www.blogger.com/atom/ns#' term='월드컵'/><category scheme='http://www.blogger.com/atom/ns#' term='남아공월드컵'/><category scheme='http://www.blogger.com/atom/ns#' term='베팅'/><category scheme='http://www.blogger.com/atom/ns#' term='일상'/><category scheme='http://www.blogger.com/atom/ns#' term='월드컵이벤트'/><category scheme='http://www.blogger.com/atom/ns#' term='일기'/><title type='text'>남아공 월드컵 그리스 2:0 승리 풍경.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;h1 style="color: rgb(0, 47, 255);"&gt;&lt;font size="3"&gt;[월드컵]그리스 베팅업체, "한국이 2-0으로 승리한다"&lt;/font&gt;&lt;/h1&gt;월드컵이 시작하기전에 전세계 도박사들이나 베팅업체들은 승률을 계산한다. 그런데 언제나 그렇듯이 한국의 승률이 높은 것은 아니어서 씀쓸하게 했는데 웬걸? 적군(?) 그리스의 한 베팅업체가 정확하게 한국의 승리를 예측해서 눈낄을 끈다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XPJAuUFOVi.png" style="width:520px;height:533px;" alt="그리스 베팅업체 한국 2:0 승리할것" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XPJAuUFOVi.png')" /&gt;&lt;p class="cap1"&gt;그리스 베팅업체 한국 2:0 승리할것&lt;/p&gt;&lt;/div&gt;이하 기사 내용.&lt;br /&gt;&lt;br /&gt;그리스의 베팅업체가 12일(한국시간) 열릴 한국과 그리스의 B조 개막전서 한국의 2-0 승리를 예측했다.&lt;br /&gt;&lt;br /&gt;그리스의 스포츠 베팅업체인 '스포츠 그리크'는 12일 "한국은 그라운드 위에서 매우 빠르고 효과적인 전술을 구사한다. 여기에그들 특유의 강인한 정신력과 에너지로 노쇠한 그리스의 라인업을 충분히 무너뜨릴 것"이라며 한국의 2-0 승리를 예상했다.&lt;br /&gt;&lt;br /&gt;허정무 감독이 이끄는 한국은 이날 오후 8시 30분 포트 엘리자베스 넬슨 만델라 베이 스타디움에서 그리스와 조별 첫 경기를 갖는다. 양팀 모두 이 경기를 반드시 이겨야만 목표로 하는 16강 진출 희망을 가질 수 있다.&lt;br /&gt;&lt;br /&gt;이 업체는 그러나 "그리스는 유로2004 우승을 이끈 명장 오토 레하겔이 지도하고 있지만 너무 수비에만 치중한다"고 꼬집으며 한국의 우세를 점쳤다.&lt;br /&gt;&lt;br /&gt;이어 "박지성은 박주영의 뒤에서 부지런히 움직이며 골 찬스를 많이 만들어낼 것으로 기대되고 이청용 역시 잉글랜드 프리미어리그에서보여준 영리한 플레이를 펼칠 것으로 예상된다. 2002년 월드컵 4강에 오른 한국은 이들의 활약으로 세계 무대에서 급성장한명성을 떨칠 것으로 기대된다"고 예상했다.&lt;br /&gt;&lt;br /&gt;&lt;font style="font-weight: bold; color: rgb(0, 47, 255);" size="3"&gt;한컴 오피스 2010 홈에디션 스마트 할인 이벤트 폭풍~&lt;/font&gt;&lt;br /&gt;&lt;br /&gt;아래하 한글로 유명한 한글과 컴퓨터에서 진행한 한국의 선전기원 이벤트가 폭풍을 맞고 있다. 이벤트 내용은 아래와 같다. &lt;a target="_blank" href="http://shop.hancom.co.kr/board/view.bo?ref=9&amp;amp;step=1&amp;amp;re_level=1&amp;amp;bid=event&amp;amp;page=1&amp;amp;bkind="&gt;한컴이벤트&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XHBbbLmNZW.png" style="width:520px;height:578px;" alt="한컴 오피스 이벤트" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XHBbbLmNZW.png')" /&gt;&lt;p class="cap1"&gt;한컴 오피스 이벤트&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;핵심은 2골차로 한국이 이기면 80% 할인 해준다는 것이다. 결국 한국이 2:0으로 승리했다. 그래서 살려고 접속을 했다. 그런데...&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XEEQGQBwQG.png" style="width:520px;height:363px;" alt="한컴오피스 다운" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XEEQGQBwQG.png')" /&gt;&lt;p class="cap1"&gt;한컴오피스 홈페이지 이상함.&lt;/p&gt;&lt;/div&gt;접속이 불가했다. 무슨 짓이지? 그래서 트위터를 찾아내 알아보니 &lt;a target="_blank" href="http://twitter.com/Hancom4u"&gt;http://twitter.com/Hancom4u&lt;/a&gt; &lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XSbuOJFpoB.png" style="width:520px;height:740px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XSbuOJFpoB.png')" /&gt;&lt;/div&gt;담당자도 응원나갔다 돌아오고 있고... 서비스 운영을 어떻게 하는 건지... 거기다 서버접속 장애라고 하는데 페이지의 태그가 다 깨지는 현상인데, 서버 과부하로 태그깨지는 현상이 발생하는지도 의문이다. 설마 한국이 2:0으로 이기겠냐 하는 생각이었지도 모른다. 담담자가 응원을 가는 상황이었으니 말이다. &lt;br /&gt;&lt;br /&gt;지금의 사회는 제품의 성능보다 고객에 대한 서비스에 따라서 사업의 존폐가 결정되기도 하는 시대이다. 한컴이 IT에 기여한 바가 컷지만 CEO가 자주 바뀌면서 각종 횡령등 어지러운 환경이 전개되고 있다는 것은 고객이 기업을 바라보는 시각을 달리하게 한다는 것을 알아야 한다.&lt;font size="4"&gt;&lt;/font&gt;&lt;span class="status-body"&gt;&lt;span class="status-content"&gt;&lt;span class="entry-content"&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6515751548049967909?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6515751548049967909/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/%EB%82%A8%EC%95%84%EA%B3%B5-%EC%9B%94%EB%93%9C%EC%BB%B5-%EA%B7%B8%EB%A6%AC%EC%8A%A4-20-%EC%8A%B9%EB%A6%AC-%ED%92%8D%EA%B2%BD.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6515751548049967909'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6515751548049967909'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/%EB%82%A8%EC%95%84%EA%B3%B5-%EC%9B%94%EB%93%9C%EC%BB%B5-%EA%B7%B8%EB%A6%AC%EC%8A%A4-20-%EC%8A%B9%EB%A6%AC-%ED%92%8D%EA%B2%BD.html' title='남아공 월드컵 그리스 2:0 승리 풍경.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-3995657492881239256</id><published>2010-06-07T13:38:00.000+09:00</published><updated>2010-12-21T01:33:42.593+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='한겨레'/><category scheme='http://www.blogger.com/atom/ns#' term='한겨레신문'/><category scheme='http://www.blogger.com/atom/ns#' term='훅'/><category scheme='http://www.blogger.com/atom/ns#' term='일상'/><category scheme='http://www.blogger.com/atom/ns#' term='댓글시간'/><category scheme='http://www.blogger.com/atom/ns#' term='Hook'/><category scheme='http://www.blogger.com/atom/ns#' term='일기'/><title type='text'>Hook 훅 시간 오류.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;평소에 사회현상에 대해서 관심이 많아서 이곳저곳 인터넷을 돌아댕기면서 기사도 읽고 사설 및 컬럼도 즐겨 읽는다. 그러다가 얼마전에 한계레에 Hook-훅 이라는 칼럼페이지를 보고 흥미가 생겨 댓글도 달고 얘기도 하고 그러는데 자세히 보니 문제가 있더라.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XJz147QXSL.png" style="width:520px;height:84px;" alt="Hook 댓글의 시간오류" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XJz147QXSL.png')" /&gt;&lt;p class="cap1"&gt;Hook 댓글의 시간오류&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;댓글들을 보니 시간이 전혀 안 맞는 것이다. 분명히 23시에 글을 썼는데도 글이 새벽 2시에 올라간것으로 나오는 것이 분명 서버의 시간이 잘못된 모양이다. 그래서 용기를 내서 전화를 걸었다.&lt;br /&gt;&lt;br /&gt;1566-9595 로 연락을해서 상담원과 통화후에 관련부서에 연락을 했다. '댓글 시간이 안맞아요~ 서버에 시간을 좀 맞춰보세요~' '네네~ 제가 담당자에게 알려서 고치도록할께요~'&lt;br /&gt;&lt;br /&gt;이제 고쳐지겠지?&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-3995657492881239256?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/3995657492881239256/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/hook-%ED%9B%85-%EC%8B%9C%EA%B0%84-%EC%98%A4%EB%A5%98.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3995657492881239256'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/3995657492881239256'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/hook-%ED%9B%85-%EC%8B%9C%EA%B0%84-%EC%98%A4%EB%A5%98.html' title='Hook 훅 시간 오류.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6954452668375742135</id><published>2010-06-06T21:42:00.000+09:00</published><updated>2010-12-21T01:33:41.350+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XFCE 데스크탑'/><category scheme='http://www.blogger.com/atom/ns#' term='테마'/><category scheme='http://www.blogger.com/atom/ns#' term='xfce4'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Themes'/><title type='text'>xfce4 Look 변경하기.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;Look 변경은 테마, 창관리, 배경화면 관리등 XFCE4의 컽모습을 바꾸는것을 말한다. 기본적으로 XFCE4는 GTK를 기반으로하기 때문에 GTK의 테마와 창관리등을 어느정도 공유할 수 있다. &lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XJ2sA4zoug.png" style="width:520px;height:229px;" alt="XFCE4 Look 설정들" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XJ2sA4zoug.png')" /&gt;&lt;p class="cap1"&gt;XFCE4 Look 설정들&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;좀더 XFCE4에 최적화해 제공하는 웹페이지를 제공하는데 &lt;a target="_blank" href="http://xfce-look.org"&gt;xfce-look.org&lt;/a&gt; 이 그런 곳이다. 이곳에가면 Look에 관련된 거의 모든것들을 다운받을 수 있다. 이제 직접 해보자.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;1.테마 변경하기.&lt;/span&gt;&lt;br /&gt;&lt;a target="_blank" href="http://xfce-look.org/"&gt;xfce-look.org&lt;/a&gt; 에서 왼쪽 메뉴를 보면 Themes가 보이고 클릭을 하면 GTK1, GTK2, Xfce 가 보인다. 여기서 Xfce 를 클릭하자. GTK2 를 다운받도록 하자. Xfce에서 자신이 마음에드는 테마를 아무거나 다운받는다. 그리고 다음과 같이 압축을 해제한다.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# tar xvjf 56577-gtk-osx-theme.tar.gz-C /usr/share/themes&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;XFCE의 테마는 /usr/share/themes 에 위치시키면 된다. '사용자 환경 설정' 화면에서 설정을 눌러 압축해제한 목록이 나오면 클릭해서 적용해 보자.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XH88RYDPNr.png" style="width:492px;height:497px;" alt=""  /&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;2.아이콘 테마 변경.&lt;/span&gt;&lt;br /&gt;&lt;a target="_blank" href="http://xfce-look.org/"&gt;xfce-look.org&lt;/a&gt; 에서 왼쪽에 Icons 를 클릭해서 자신이 마음에드는 것을 다운받아 아래와같이 압축을 해제한다.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# tar xvjf iComity-beta3.tar.bz2 -C /usr/share/icons&lt;br /&gt;[/code]&lt;br /&gt;아이콘 테마는 '/usr/share/icons' 에 위치시키면 된다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XMZ3nbDgaO.png" style="width:520px;height:296px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XMZ3nbDgaO.png')" /&gt;&lt;/div&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;3.창관리자.&lt;/span&gt;&lt;br /&gt;창관리자는 Themes 메뉴에서 Xfce를 클릭해서 마음에 드는 테마를 선택한 후에 '/usr/share/themes' 에 압축을 해제해서 보면 등록이 된다.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6954452668375742135?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6954452668375742135/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/xfce4-look-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6954452668375742135'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6954452668375742135'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/xfce4-look-%EB%B3%80%EA%B2%BD%ED%95%98%EA%B8%B0.html' title='xfce4 Look 변경하기.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-2535698615782785923</id><published>2010-06-01T15:25:00.000+09:00</published><updated>2010-12-21T01:33:38.876+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='해킹'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰해킹'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><title type='text'>Iphone 3.1.3 해킹 &amp; 후속작업.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;p&gt;아이폰을 구매해서 사용하기 시작한지 벌써 4개월이 넘었다. 처음 아이폰을 구매했을때에는 아이폰의 펌웨어 버전이 3.1.2 였고 해킹에관한 상당한 자료가 나와 있는 상태여서 컴퓨터를 하는 사람으로서 그다지 어려움을 느끼지 않고 손쉽게 되었다. 단, 완전하지 않아서 아이폰을 재부팅을 하기위해서는 USB로 컴퓨터에 연결 JailBreak 를 실행줘야만 했다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그러다 3월단즈음에 애플이 아이폰 펌웨어를 3.1.3으로 버전업 했다. 늘 그렇듯이 버전이 올라가면 뭔가 보이지는 않지만 성능상 향상이 있으리나는 짐작으로 펌웨어 버전업을 하는 사람들이 나왔고 곧 후회하는 모습을 목격하게 됐다. 몇몇은 해킹된 아이폰 3.1.2에서 3.1.3으로 버전업을 하다가 벽돌이 되어버리는 사고(?) 다수 목격됐다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;나는 기달렸다. 펌웨어 업데이트를 한다고 하더라도 오히려 불편만 가중될뿐 아무런 이득이 없다는 것을 컴퓨터로 밥벌이하는 사람의 감각을 믿었다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그러다 5월이되어서 드디여 3.1.3의 해킹툴이 발표가 되었다. 그것도 전버전의 불편사항이던 재부팅 문제가지 해결하면서 말이다. (멋지다..) 그리고 조금 기다렸다. 역시나 도전정신이 강한 유저들이 나서주셔서 상당한 자료가 쌓였고 상당히 해볼만 하다고 하는 시점이 되었다고 판단했다. (더 멋진분들이다.. ) &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;내가 자주가는 아이폰 사용자 카페가 있다. 초보자 강좌에 해킹관련 내용문의가 많이있었다. 해킹이야 컴퓨터가 해주는 거지만 몇몇 사람들은 그야말로 컴퓨터를 모르시는분들도 있었다. '해킹이 뭐예요?', '왜 해요?', '이제 뭐해요?' 등등 그야말로 생초보자분들이 있어 도움을 주고자 했지만 회원등급에 걸려 글을 쓸수 없었다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;이 문서는 그러한 사람들을 최대한 배려해서 작성되었다. 컴퓨터로 밥벌이를 하고 있고 기타 여러번 컴퓨터 강의 아닌 강의도 했었던 경험을 살려 생초보들을 까지도 손쉽게 이해하면서 해킹을 하고 해킹후에 즐길수 있게 하도록 했다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#002fff"&gt;1.해킹&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0088"&gt;컴퓨터 세계에서 해킹은 금괴가 들어있는 보물상자를 맥가이버가 주어진 여건과 자신의 기술을 가지고 여는 행위라고 비교하면 맞다.&lt;/font&gt;&lt;/strong&gt; 보물상자가 무엇이냐가 중요한데 대부분 사용자의 컴퓨터에서부터 시작해서 방대한 자료가 있으며 많은 사용자들이 동시다발적으로 접속하는 대형 서버에까지 컴퓨터로 할수 있는 모든 것이 대상이 된다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;아이폰도 마찬가지다. 아이폰도 조그마한 컴퓨터의 일종이다. 컴퓨터를 통해서 아이폰에 데이터를 넣고 연결하고 할수 있다. 보물상자는 아이폰이고 맥가이버와 주어진 여건은 컴퓨터가 되는 셈이다. 열심히 청진기를 통해서 내부의 소리도 듣고 전자현미경으로 내부를 들여다보고 해서 '요렇게 하면 열리겠구나~' 해서 나오는 도구(Tool)이 바로 해킹툴이 된다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ps,&lt;/p&gt;&lt;p&gt;사실 해킹의 정확한 의미는 컴퓨터를 매우 잘 다루는 사람이란 뜻이다. 그냥 잘 다루는 사람이 아니라 프로그램능력과 시스템을 다루는 능력등 한마디로 표현하지면 '초고수'를 일컫는 말이었다. 이런 사람들은 절대로 시스템에 해악을 미치거나 이를 이용해 사회적으로 해악을 일이키지 않는 사람들이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;실제로 보통 우리가 이해하고 있는 개념은 '크래킹(Cracking)'이라고 부른다. 자신의 이득을 위해서 범죄를 저지르는 사람이 여기에 해당된다. 그래서 언론에서 'xxx 사이트 해킹당해 회원정보 유출~' 이라는 기사는 'xxx 사이트 크래킹당해 회원정보 유출~' 이라고 보도해야 명확하고 정확한 표현이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#002fff"&gt;2.해킹 왜 하나?&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0088"&gt;&lt;strong&gt;해킹을 하는 이유는 많은 이유가 있는데, 첫번째는 범죄다.&lt;/strong&gt;&lt;/font&gt; 대형서버를 대상으로 하는 해킹의 경우는 십중팔구 그 서버에 저장된 회원들의 개인정보를 빼내는데 있다. 개인정보가 곧 돈이되는 시대에 살고 있다보니까 해킹의 집중 타켓이 되는 것이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0088"&gt;&lt;strong&gt;두번째는 보다 많은 확장성을 확보하기 위해서다.&lt;/strong&gt;&lt;/font&gt; 아이폰이 경우가 여기에 해당된다. 아이폰을 만든 애플은 자신만의 독특한 룰을 정해서 제품을 판매한다. 자신이 만든 소프트웨어들은 전부 자신들이 만든 하드웨어에서만 동작해야하고 소프트웨어의 경우에도 수정이나 설치등도 자신들이 정한 룰에따라서만 가능하도록 해놨다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;이것은 많은 사용자들의 요구를 결국 애플만이 해결해 줄수 있다는 얘기다 된다. 애플직원이 몇명이고 거기서 엔지니어들과 프로그래머들이 몇명인지는 모르겠지만 전 세계를 통틀어 수백만개를 판 제품에대한 사용자들의 요구사항을 다 처리해주기에는 역부족임에는 틀림이 없다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그래서 맥가이버(유능한 프로그래머)들이 보물상자(아이폰)을 연구해서, 결국 상자를 열었다. &lt;/p&gt;&lt;p&gt;그렇게되면 전 세계 맥가이버들이 너도나도 사용자들이 필요로했던 것을 대신해서 만들어줄 기회가 늘어나게 된다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;3.아이폰 해킹.&lt;/p&gt;&lt;p&gt;아이폰을 해킹하기 전에 자신이 왜 해킹을 해야하는지 목적을 분명히 해야한다. 괜히 옆사람이 '나 해킹했다~ ^^' 말하면 왠지 내가 뒤떨어지는 소외감을 가질 필요가 없다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;나는 아이폰 해킹을 하는 이유가 정확하게 딱 3가지 이다.&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0088"&gt;&lt;strong&gt;1) 멀티 태스킹&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0088"&gt;&lt;strong&gt;2) 테마적용&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0088"&gt;&lt;strong&gt;3) 개발(아이폰 SDK로 제작 베타테스트 정도.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;현재 아이폰 3.1.3 펌웨어 버전에서는 멀티 태스킹을 지원하지 않는다. 멀티 태스킹은 앱스를 동시에 두가지 이상 실행할수 있는 기능을 말한다. 아이폰을 사용하다보면 뭔가를 하고나서 다른것을 하기위해서는 반듯이 현재 하고 있는 앱스를 꺼야 한다. 하지만 아이폰을 해킹하게 되면 앱스를 끄는게 아니라 백그라운드(Background)로 돌려 잠시 대기상태로 만들거나 아니면 백그라운드로 돌리면서 실행을 계속하게 하게 할수 있다. 그 사이에 다른 앱스를 구동시켜서 뭔가를 확인하거 할수 있게 된다. 향후 아이폰 4G에서는 기본 지원될거라는 설이 있지만 그때는 그때고 지금은 지원을 안해줘서 '아~ 불편해~ 짜증나~' 상태이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;테마적용은 아이폰을 사용하는데 즐거움을 증가 시켜준다. 꼭 잠금상태가 아니라도 사용하고 있을때도 아리따운 아가씨가 씨익~ 웃고 있다면 '^^' 표정이 된다면 얼마나 좋겠나? 안그런가? &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;아이폰 개발은 쉬운게 아니다. 아이폰 개발뿐만 아니라 소프트웨어 개발은 매우 어려운 것이다. 그런데 천성으로 저런것을 즐기는 '인간'들이 있다. 어려운데 시간도 많이들고 하지만 무서운 집중력을 발휘해 무서운 삽질(?)을 통해서 멋진 성을 지어내는 '인간'들이 있다. 나는 그런 '인간'에 속하지 않지만(삽질은 않한다.. 남이 삽질해주길 바라지.. ^_^/ ) 뭐 공부차원으로다가 심심할때 봐주는 뭐 그런.... 아.. 음... 그래서..... 아.. 음....&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;하지만 &lt;font color="#ff0088"&gt;&lt;strong&gt;해킹은 전적으로 사용자의 몫이다.&lt;/strong&gt;&lt;/font&gt; 애플에서는 해킹을 대놓고 막고 있지는 않지만 그렇다고 해킹으로 인해서 발생하는 사용자의 불이익까지 챙겨주는 것은 아니다. 따라서 &lt;strong&gt;&lt;font color="#ff0088"&gt;무섭고 두렵다면 하지 않는게 정신건강에 좋다.&lt;/font&gt;&lt;/strong&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;이렇게 확실히 해킹이 필요한 이유를 세우고 시작해보자.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font color="#002fff"&gt;&lt;strong&gt;4.해킹 시작&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;이제 대충 서론은 끝난듯해서 해킹을 시작해보자. 해킹을 하기전에 먼저 환경을 갖추어보자. 무슨 일을 할때는 계획을 잘 세우고 일할 환경을 만들고 하지 않나? 아이폰 해킹도 그런 환경이 필요하다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;나는 3.1.3으로 펌웨어 업데이트를 하고 난후에 컴퓨터 자체를 포맷해버렸다. 이유는 프로그램이 꼬여서인지 아이튠즈 최신버전이 설치가 안되고 자꾸 오류가 났고, PDF 뷰어로 유명한 어도비 리더(Adobe Reader)도 자동 업데이트가 안되는 상황이었다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;펌웨어 업데이트시에도 조마조마해서 초 울트랑 캡쑝~ 소심한 나는 그날로 포맷해 버렸다. 그래서 이글을 작성하고 있는 컴퓨터에는 달랑 윈도우즈와 아이튠즈만 설치되어 있다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;어떤 환경인지 소개를 하는것이 좋은듯하다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;cpu: AMD Opteron 1210(Santa-ana) Quad core Processor&lt;/p&gt;&lt;p&gt;RAM: DDR2 6GB&lt;/p&gt;&lt;p&gt;HDD: 320GB&lt;/p&gt;&lt;p&gt;GPU: ATI Radeon HD2600&lt;/p&gt;&lt;p&gt;OS: Windows 7 Ultimate K &lt;font color="#ff0088"&gt;&lt;strong&gt;x64(64bit 버전이라는 뜻)&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;Itune: 9.1.1.12 &lt;strong&gt;&lt;font color="#ff0088"&gt;x64&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;시스템 하드웨어는 별로 중요하지 않다. &lt;font color="#ff0088"&gt;&lt;strong&gt;문제는 OS와 소프트웨어인데 64bit 용이다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#002fff"&gt;4-1.백업&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;해킹을 하기전에 순정품으로 나는 돌아왔다. 3.1.2 해킹버전에서 3.1.3으로 버전업을 하면서 기존에 설치됐던 자료와 소프트웨어는 모두 버렸다. 휴대폰 전화번호만 네이버 주소록 싱크 앱스를 활용해 백업뒀을 뿐 나머지는 모두 버렸다. 너무 많은 앱스를 사용하고 있었고 조잡하다는 생각도 들어서 백업이고 뭐고 그냥 다 날려버렸다. 그덕분에 3.1.3으로 버전을 올리고 나서 아이폰을 새로 구입한 기분이 들기도 했다. (ㅋㅋ )&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0088"&gt;&lt;strong&gt;3.1.3이고 순정품이라면 해킹을 하기전에 백업을 먼저 해두도록 하자.&lt;/strong&gt;&lt;/font&gt; 왜냐하면 해킹을 하다가 잘못되었을 경우가 존재한다고 가정해야 한다. 해킹을 하다가 잘못되면 어떻게 될까? 그럴때 해야하는 매뉴얼이 인터넷에는 상당히 많이 나왔지만 결론은 오직하나다. &lt;font color="#ff0088"&gt;&lt;strong&gt;백업 복원&lt;/strong&gt;&lt;/font&gt;.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;백업을 해놓지 않아도 된다. 순정품이고 앱스자체를 설치하지 않고 그야말로 처음 구입한 그대라면 그냥 아이튠즈에서 복원을 누르면 똑같이 처음 구입한 그대로 복원을 해준다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그런데 순정품이고 많은 앱스를 깔았고 전화번호도 상당수 많고 찍어놓은 사진도 많고 음악도 많고 그러면 백업을 해두록하자. 백업복원으로 백업시점의 상태데로 되돌려 줄 것이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;아이폰을 USB로 컴퓨터와 연결해 아이튠즈를 실행한다. 그리고 그림과 같이 백업을 하자. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XXIQIaxwW7.png" style="width:308px;height:209px;" alt="아이폰 백업" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XXIQIaxwW7.png')" /&gt;&lt;p class="cap1"&gt;만일의 사태를 대비해서 백업을 해두자.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ps, 상당한 양의 자료가 있다면 백업 자체는 오래걸릴수도 있다. 역으로 복원도 마찬가지다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#002fff"&gt;4-2.해킹.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;해킹은 상당히 쉽다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;a href="http://spiritjb.com/"&gt;http://spiritjb.com/&lt;/a&gt;&amp;nbsp;이 주소에서 자신의 OS에 맞게 파일을 다운로드 받는다. 윈도우즈의 경우 64bit이건 32bit이건 상관없다. 그냥 윈도우즈를 선택해서 파일을 다운받도록 하자. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그리고 &lt;strong&gt;&lt;font color="#ff0088"&gt;아이튠즈를 꺼주고 아이폰을 USB에 연결을 한다.&lt;/font&gt;&lt;/strong&gt; 그리고 파일을 실행하기 전에 아이폰에서 '자동 잠금'을 해제해준다. USB를 연결했으니까 배터리 문제는 없을 것이고 &lt;strong&gt;&lt;font color="#ff0088"&gt;설정앱스에 들어가서 중간쯤에 보면 '일반'이 보이고 아래쪽에 '자동잠금'이라고 있다. 이것을 눌러서 들어가서 해제를 터치해주고 나온다.&lt;/font&gt;&lt;/strong&gt; 해킹을 열심히하고 있는데 아이폰이 대기상태가 되어버리면 골란하니까 이렇게해서 방지하도록 하는 것이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XBrja1Bd8N.png" style="width:320px;height:480px;" alt=""  /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그리고 왠만하면 윈도우즈의 다른 응용프로그램들을 모두 꺼준다. 메신저도 로그오프해주고 웹 브라우저도 모두 꺼준다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;이제 파일을 실행해야 하는데 윈도우즈 7 사용자라면 다운로드 받은 파일을 마우스 오른쪽 버튼을 눌러 '관리자 권한으로 실행'으로 프로그램을 실행해준다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XegkGSkj9O.png" style="width:389px;height:173px;" alt="해킹툴 관리자 권한으로 실행"  /&gt;&lt;p class="cap1"&gt;Windows 7의 경우 반듯이 관리자 권한으로 프로그램을 실행하자.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;윈도우즈 7의 경우 보안성 강화를 위해서 시스템 변경을 하거나 프로그램이 권한이 필요할때만 관리자 권한을 일시적으로 사용하도록 설계해놨다. 그래서 프로그램을 설치하거나 할때에는 반듯이 관리자 권한이 필요하다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;1)백업도 해줬다.(이것은 옵션이다. 해도되고 안해도 되고)&lt;/p&gt;&lt;p&gt;2)아이튠즈도 꺼져줬다.&lt;/p&gt;&lt;p&gt;3)아이폰에서 자동장금 해제.&lt;/p&gt;&lt;p&gt;4)윈도우즈 응용프로그램 모두 꺼줬다.&lt;/p&gt;&lt;p&gt;5)해킹툴인 'Spirit'를 관리자 권한으로 실행 했다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;위 절차대로 했다면 다음과 같은 화면이 나온다.&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XaIDwGmRbr.png" style="width:329px;height:140px;" alt="해킹툴 Spirit 실행 화면"  /&gt;&lt;p class="cap1"&gt;해킹툴 Spirit 실행 화면. Connected 라는 말이 보인다.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그리고 주저 없이 'Jailbreak' 를 눌러준다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그러면 아이폰 화면에 '복원중', '복원완료' 라고 뜨고 아이폰이 재부팅된다. 재부팅될때부터 해킹폰이라는 증명하듯이 바탕화면이 마치 우주의 화려한 성운공간을 연상케한다. 부팅이 완료되면 다음과 같이 'Cydia' 라는 앱스가 설치되어 있을 것이다. 그리고 윈도우즈 화면에는 'Jailbreak succeeded!' 라고 나온다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XPkLiyXa0o.png" style="width:329px;height:140px;" alt="해킹 완료."  /&gt;&lt;p class="cap1"&gt;해킹 완료.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;이제 아까 했던 '자동잠금' 해제 설정을 적당한 분으로 다시 설정해 준다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#002fff"&gt;5.Cydia&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0088"&gt;&lt;strong&gt;아이폰의 프로그램설치는 아이튠즈와 앱스토어를 통해서만 이루어지도록 되어 있다.&lt;/strong&gt; &lt;/font&gt;그러한 프로그램들(앱스들)은 애플이 검수과정을 거쳐서 등록되어져 사용자들이 다운로드 받을수 있도록 되어 있다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그런데 &lt;strong&gt;&lt;font color="#ff0088"&gt;해킹을 하게되면 애플이 허가를 안해주는 앱스들도 필요하게 되는데 이것을 Cydia(시디아)가 대신해준다.&lt;/font&gt;&lt;/strong&gt; Cydia 에서 다운받은 앱스도 아이폰에서 동작한다. 하지만 동작한다고 해서 그 앱스들이 아이폰에 악영향을 주지 않을 거라는 보장은 없다. 왜냐하면 애플의 검수를 거치지도 않았기 때문에 손수만든 앱스의 안정성 평가가 결여되어 있다 것이다. &lt;strong&gt;&lt;font color="#ff0088"&gt;그래서 되도록이면 Cydia에서는 많은 사람들이 사용하는 앱스를 사용하는것이 좋다. 왜냐하면 많이 사용한다는 것은 안정성이 어느정도 있다고 볼 수도 있기 때문이다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Cydia 를 실행해서 동작할수 있는 환경을 조성해주자. 실행을 하면 'Recog~~ 어쩌구' 하면서 실행이된다. 좀 걸린다. 한 1분정도 기다리면 아이폰이 초기화(아이폰에 암호를 걸었다면 암호를 입력하라고 나온다.)된다. 그리고 다시 Cydia 실행 그러면 다음과 같은 화면이 나온다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XYJDpv3EKu.png" style="width:320px;height:480px;" alt="Cydia 실행"  /&gt;&lt;p class="cap1"&gt;Cydia 실행. User 를 선택한다.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;'User(Graphical Only)'를 선택해준다. 그러면 화면상단에 'Download:~ 어쩌구' 하면서 막 지가 알아서 뭔가를 한다. 'Error: Refreshing Data' 라고 나오지만 그냥 'Okay' 해준다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그럼 이제 Cydia를통해서 각종 앱스를 받기위한 URL를 추가해주는 작업을 해야한다. &lt;font color="#ff0088"&gt;&lt;strong&gt;해킹 앱스들은 애플에서 받는게 아니라 Cydia를 통해서 받는데 Cydia 앱스도 보유한 URL에서 검색을해서 다운받고 설치하게 되어 있다. 그래서 유명한 Cydia 앱스 URL를 추가두면 유용하다.&lt;/strong&gt;&lt;/font&gt; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XCrLKP3Ix6.png" style="width:320px;height:480px;" alt=""  /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;아래부분에 'Manage'를 터치하면 위와 같은 화면이 나온다. 여기서 'Sources'를 터치 해준다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XWlPSgSP8Y.png" style="width:520px;height:390px;" alt="Source추가하기." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XWlPSgSP8Y.png')" /&gt;&lt;p class="cap1"&gt;화면 오른쪽 상단 &amp;#39;Edit&amp;#39;를 터치하면 왼쪽 상단이 &amp;#39;Add&amp;#39;로 바뀐다.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;화면 오른쪽 상단 'Edit'를 터치하면 왼쪽 상단이 'Add'로 바뀐다. Add를 터치해서 입력창이 나오는데 거기에 다음의 3개를 차례대로 URL을 오타 없이 입력하고 'Add Source'를 눌러주면 뭔가 'Dowload Package' 라고 작업을 막하고 Cydia 로 돌아갈건지 물어보게 된다.&amp;nbsp; &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0088"&gt;&lt;strong&gt;1)cydia.xsellize.com&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0088"&gt;&lt;strong&gt;2)www.sinfuliphonerepo.com&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0088"&gt;&lt;strong&gt;3)cydia.hackulo.us&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/Xdq5YBUQxt.png" style="width:320px;height:480px;" alt="소스가 추가되고 있는 모습."  /&gt;&lt;p class="cap1"&gt;소스가 추가되고 있는 모습.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;다되었다면 다음과 같이 3개의 소스리스트가 추가되어 있을 것이다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XfSaBH1mJj.png" style="width:320px;height:480px;" alt="3개의 소스리스트가 추가된 모습."  /&gt;&lt;p class="cap1"&gt;3개의 소스리스트가 추가된 모습.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;오른쪽 상단에 'Done'을 눌러 완료한다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#002fff"&gt;6.기능확장 및 보안설정.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;대부분 사람들이 이부분을 '안정화'라고 부른다. 뭘 안정화한다는지 나는 도통 모르겠다. 처음에는 해킹을 해서 뭔가 아이폰이 소프트웨어적으로 불안해져서 뭔가 Fix를 시키는 작업즘으로 생각했는데 그게 아니었다. 안정화라기보다는 확장성을 좋게하는 프로그램과 해킹 방지를 위해서 패스워드 변경을 위한 것들이다. 안정화라기 보다는 기능확장과 보안설정이라고 봐야 옳다고 생각한다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font color="#002fff"&gt;&lt;strong&gt;&lt;font color="#ff0088"&gt;보안설정이 무엇보다 중요하다.&lt;/font&gt;&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0088"&gt;아이폰은 Unix 운영체제의 하나인 FreeBSD를 기반으로 제작된 모바일용 운영체제이다.&lt;/font&gt;&lt;/strong&gt; 모든 운영체제에는 사용자관리와 더불어 각 사용자마다 등급을 먹여 권한을 부여하는 방법으로 첫째로 보안을 구현하다. 마치 인터넷 카페에서 등급을 정하듯이 운영체제도 그렇게 등급이 정해져 있는데&lt;font color="#ff0088"&gt;&lt;strong&gt; Unix 운영체제의 경우 최고 등급, 즉 관리자의 아이디는 'root'로 정해져 있다.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그런데&lt;font color="#ff0088"&gt;&lt;strong&gt; 아이폰 OS의 경우 최고 관리자인 root의 암호가 모두 동일하다.&lt;/strong&gt; &lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0088" size="5"&gt;alpine&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;이것은 매우 심각한 보안 구멍(Hole)이다. &lt;font color="#ff0088"&gt;&lt;strong&gt;최고관리자의 암호가 모두 노출이되어 있는것이나 마찬가지다. 와이파이(WiFi)로 서로 기기들간의 데이터가 전송되고 있는 시점에서 최고 관리자 암호가 노출되어 있다는 것은 재앙을 부를수 있다.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그렇다면 애플의 순정품은 안 바꿔도 되나? 바꿀수 있도록 하는 설정도 없다. 당연히 필요가 없다. 순정품의 경우 애플의 앱스토어에 등록된 앱스만이 설치할수 있다. 그런데 그런 앱스의 경우는 애플이 앱스를 등록할때에 검수를 하게된다. 따라서 최고 관리자 권한을 탈취하는 앱스 같은것은 애초에 등록조차 될수 없다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;하지만 해킹폰의 경우는 다르다. 애플의 검수를 거치지 않은 앱스도 설치가 가능하다. 따라서 언제든지 마음만 먹으면 어떤 짓을 쉽게 할수 있는 것이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;이를 방지 하기위해서 아이폰의 내부를 들여다 볼수 있는 앱스를 설치해줘야 한다. MobileTerminal 앱스가 바로 그것이다. 이 프로그램은 Unix 운영체제의 기본프로그램인 터미널 프로그램이다. Unix에서는 윈도우즈와 달리 마우스보다 키보드가 주 입력장치이다. 마치 Dos를 다루듯이 명령을 치면서 작업하는 환경이다. FreeBSD, Linux도 모두 터미널을 기반으로 일을 한다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Cydia에서 검색을 해서 'MobileTerminal' 을 설치해준다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XMLH5JmpGv.png" style="width:320px;height:480px;" alt="MobileTermail 설치."  /&gt;&lt;p class="cap1"&gt;아이폰의 최고관리자 패스워드 변경을 위해서 MobileTerminal을 설치해준다.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;자 그럼 이제 Unix의 최고 관리자인 'root'의 암호를 변경해보자. 참고로 이 작업은 FreeBSD, Linux 에서도 동일하게 사용할수 있는 명령어들이다. 실제로도 'root' 암호를 이렇게 변경한다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;일단 앱스를 실행한다. 그러면 시커먼 화면에 다음과 같이 쉘(Shell) 프롬프트(Prompt)가 보일것이다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XRIAWaG9dP.png" style="width:320px;height:480px;" alt=""  /&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;쉘 프롬프트는 커서가 깜빡이고 있는데 명령어를 입력을 하면 결과를 화면에 뿌려주게 되어 있다. 그리고 화면만봐도 많은 정보를 알려주고 있는데 '~ mobile' 은 mobile 사용자의 홈디렉토리(~ 가 홈디렉토리를 지칭한다.) 에 위치해 있으며 '~ mobile$' 에서 '$'로 보아 최고 관리자 'root'가 아니라 일반 사용자 임을 알려주고 있다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;간단하게 id 라고 입력하고 'return'을 터치한다. 그러면 보다 더 자세한 정보가 나온다. 위 정보에 의하면 아이폰은 기본적으로 최고관리자인 'root'가 아닌 mobile 계정으로 운영되고 있음을 알 수 있다. 'uname -a' 를 입력해보면 아이폰의 간단한 운영체제 정보와 하드웨어를 알수 있다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Unix 운영체제에서는 일반사용자라도 잠시동안 최고 관리자로 전환을 할 수 있다. 바로 'su -' 명령어를 사용해서 최고 관리자의 인증을 거쳐서 최고 관리자로 전환할 수 있다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;~ mobile$ su -&lt;/p&gt;&lt;p&gt;Password: &lt;/p&gt;&lt;p&gt;~ root#&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;'Password: ' 프롬프트에서 'alpine'를 입력하자(실제로 터치를해도 화면에는 안보여준다. 그러니 그냥 맞겠거니 계속 입력해준다.) 그러면 최고 관리자 'root'로 전환이 된다. 자세히보면 쉘 프롬프트도 $ -&amp;gt; # 로 바뀌었다. 최고관리자임을 알려주는 것이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Unix에서 최고관리자 root는 막강한 권한을 가진다. 그 누구도 막을수 없고 모든것을 실행,수정,삭제 할수 있는 권한을 가지고 있다. 따라서 뭣도 모르고 그져 재미로 명령을 입력했다가는 시스템을 통째로 날릴수 있으니 조심해야 한다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;최고 관리자 'root'로 전환했으니 암호를 변경해보자&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;~ root# passwd &lt;/p&gt;&lt;p&gt;Changing password for root.&lt;/p&gt;&lt;p&gt;New password:&lt;/p&gt;&lt;p&gt;Retype ne password:&lt;/p&gt;&lt;p&gt;~ root#&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;새로운 암호를 입력하고 확인을 위해서 재차 입력을 제대로했고, 그냥 쉘 프롬프트 '~ root#'이 나왔다면 변경이 성공한 것이다. Unix의 특징이기도 한데, 성공하면 아무말이 없다. 그냥 쉘 프롬프트만 보여준다. 하지만 뭔가 잘못되서 오류가난다면 그때는 화면에 오류메시지를 뿌려준다. 아무튼 아무말이 없으면 Unix에서는 잘~ 실행이된것이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;이제 작업을 다했으니 최고 관리자에서 다시 일반사용자로 되돌아 와야 한다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;~ root# exit&lt;/p&gt;&lt;p&gt;logout&lt;/p&gt;&lt;p&gt;~ mobile$&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;그리고 프로그램 종료를 위해서 화면을 터치해 있으면 다음과 같이 화면이 나오는데 exit를 터치하고 팝업에서 Yes를 선택하면 MobileTerminal 프로그램이 종료 된다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/Xem5pKwx5I.png" style="width:320px;height:480px;" alt="MobileTerminal 종료."  /&gt;&lt;p class="cap1"&gt;MobileTerminal 종료.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#002fff"&gt;6-1.기능확장&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;해킹이 첫번째 목적이 멀티 태스킹이다. 이를 구현하기 위해서는 프로그램을 설치해야 하는데 크게 멀티 태스킹을 지원하는 프로그램으로는 다음 두가지가 있다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0088"&gt;1)ProSwitcher&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;font color="#ff0088"&gt;2)Kirikae&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;스크린 샷을 보면 차이점을 볼 수 있다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XBwhR4yiTc.png" style="width:320px;height:480px;" alt="ProSwitcher 스크린샷"  /&gt;&lt;p class="cap1"&gt;ProSwitcher 스크린샷. 백그라운드로 실행되고 있는 프로그램을 보여준다.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XDVaM6DtfI.png" style="width:320px;height:480px;" alt="kirikae 스크린샷."  /&gt;&lt;p class="cap1"&gt;kirikae 스크린샷. 리스트 형식으로 단순하게 보여준다.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;Cydia를 활용해 프로그램을 설치하면 된다. 위 프로그램들은 Activator 라는 프로그램을 필요로 한다. Cydia를 실행하고 'Search' 섹션에서 Activator 라고 입력하고 클릭해서 설치해준다.&amp;nbsp; 마찬가지로 자신이 쓰고자하는 프로그램을 설치해준다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XLVhLViDVA.png" style="width:320px;height:480px;" alt="ProSwitcher 앱스 설치."  /&gt;&lt;p class="cap1"&gt;ProSwitcher 앱스 설치.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;사용법을 알아보자. 이 프로그램을 설치하기전에 Activator 를 설치했었는데 이 프로그램을 이용해서 사용자의 액션을 결정한다. 그러니까 홈버튼을 길게 누르면 멀티태스킹 화면이 나온다거나 그런 액션들을 Activator 가 해준다는 것이다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;ProSwitcher 의 경우.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;일단 여기까지 시간이 나면 이어서 쓰거나 링크 제공예정.&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-2535698615782785923?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/2535698615782785923/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/iphone-313-%ED%95%B4%ED%82%B9-%ED%9B%84%EC%86%8D%EC%9E%91%EC%97%85.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/2535698615782785923'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/2535698615782785923'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/06/iphone-313-%ED%95%B4%ED%82%B9-%ED%9B%84%EC%86%8D%EC%9E%91%EC%97%85.html' title='Iphone 3.1.3 해킹 &amp;amp; 후속작업.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-503599720401017070</id><published>2010-04-13T10:16:00.000+09:00</published><updated>2010-12-21T01:33:37.589+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='프로그램'/><title type='text'>Komodo-IDE 설치후 설치해줘야할 애드온들.</title><content type='html'>&lt;P&gt;1.Side by Side Diffs.&lt;/P&gt;&lt;P&gt;  -별도 설정이 없음.&lt;/P&gt;&lt;P&gt;2.Tweak UI&lt;/P&gt;&lt;P&gt;  -Preference -&amp;gt; Appearance -&amp;gt; Tabs 에서 'Show tabs side-by-side (Komodo 4 style)' 체크.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-503599720401017070?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/503599720401017070/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/04/komodo-ide-%EC%84%A4%EC%B9%98%ED%9B%84-%EC%84%A4%EC%B9%98%ED%95%B4%EC%A4%98%EC%95%BC%ED%95%A0-%EC%95%A0%EB%93%9C%EC%98%A8%EB%93%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/503599720401017070'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/503599720401017070'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/04/komodo-ide-%EC%84%A4%EC%B9%98%ED%9B%84-%EC%84%A4%EC%B9%98%ED%95%B4%EC%A4%98%EC%95%BC%ED%95%A0-%EC%95%A0%EB%93%9C%EC%98%A8%EB%93%A4.html' title='Komodo-IDE 설치후 설치해줘야할 애드온들.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-5521932121162307888</id><published>2010-03-28T17:25:00.000+09:00</published><updated>2010-12-21T01:33:33.321+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='XFCE 데스크탑'/><category scheme='http://www.blogger.com/atom/ns#' term='xfce4'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='xfce'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>XFCE 환경 사용하기 I - 패널 다루기.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;이제 리눅스에 관한 기초적인 내용을 거의 다 다루었다. 리눅스를 다루는데 있어 기초적인 리눅스 명령어들과 알아야할 것들에 대한 것을 주로 다루었다. 리눅스를 데스크탑으로 사용하기위해서 가볍고 사용하기 편한 XFCE 데스크탑을 설치했었다. &lt;br /&gt;&lt;br /&gt;이제 이 XFCE 데스크탑에 관해서 간단하게 사용설명을 해보도록 하겠다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XQ9Au4nfQ3.png" style="width:520px;height:412px;" alt="리눅스 데스크탑 로그인" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XQ9Au4nfQ3.png')" /&gt;&lt;p class="cap1"&gt;리눅스 데스크탑 로그인&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;리눅스를 그래픽 부팅을 하면 로그인 화면이 나온다. 화면 왼쪽 하단에 세션부분을 클릭하여 세션을 'XFCE4'를 선택해 '세션 바꾸기'를 한후에 로그인을 하자.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XK21J3j3bf.png" style="width:520px;height:400px;" alt="XFCE4 데스크탑 초기 화면" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XK21J3j3bf.png')" /&gt;&lt;p class="cap1"&gt;XFCE4 데스크탑 초기 화면&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;XFCE4의 초기 화면은 위와 같다. 리눅스에서 사용할 수 있는 데스크탑으로 GNOME, KDE 등이 많이 쓰인다. 매우 많은 기능을 가지고 있으며 사용자 편의시설이 잘 갖추어져 있어 기본 리눅스 데스크탑으로서 사용하도록 권장하고 있다.&lt;br /&gt;&lt;br /&gt;하지만 종종 너무 많은 기능으로 인해서 시스템 자원을 낭비하는 것을 보곤한다. 가벼우면서 넘치지않는 기능을 가진 데스크탑은 없을까해서 사용하게 된것이 XFCE4 이다. XFCE4 는 상용 유닉스(Unix)에 탑재되는 CDE의 리눅스 버전이라고 보면된다. 어떤이는 맥OS X와 유사하다고 하지만 CDE와 더 닮아 있다. 간편하면서 꼭 필요한 기능만을 갖춘 XFCE4 에 대해서 알아보도록 하자.&lt;br /&gt;&lt;br /&gt;&lt;SPAN style="COLOR: rgb(0,47,255); FONT-WEIGHT: bold"&gt;1.XFCE4 패널(Panel) 살펴보기.&lt;/SPAN&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XahlnAx1oG.png" style="width:346px;height:74px;" alt=""  /&gt;&lt;/div&gt;&lt;br /&gt;처음 패널(Panel)에는 위와 같이 7개의 아이템이 있다. 1번째는 XFCE4의 도구메뉴이다. 윈도우즈의 윈도우즈 버튼과 같다. 2번은 XFCE4의 기본터미널이며 3번은 메모장이다. 4번은 파일 매니저. 5번은 웹브라우져, 6번은 종료버튼이다. 7번은 디저털 시계이다.&lt;br /&gt;&lt;br /&gt;이 패널에 아이템을 제거하거나 추가할 수 있는데, 실제로 해보자. 패널에서 아무 아이템에 마우스를 두고 오른쪽 마우스 버튼을 클릭한다. &lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XUgzkGBKAi.png" style="width:326px;height:199px;" alt="아이템 항목 추가"  /&gt;&lt;p class="cap1"&gt;아이템 항목 추가&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;마우스 오른쪽 버튼을 클릭하면 위와같이 아이템 자체에 대해 속성, 이동, 삭제등을 할수 있으며 패널자체에대한 '새로운항목추가'와 '패널꾸미기'등을 할수 있다. '새로운 항목 추가'를 클릭하면 XFCE4에서 제공하는 항목들이 보인다. 여기서는 볼륨제어를 추가해보자.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XdxkC0z4Kr.png" style="width:520px;height:475px;" alt="독에 추가할수 있는 아이템 리스트" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XdxkC0z4Kr.png')" /&gt;&lt;p class="cap1"&gt;독에 추가할수 있는 아이템 리스트&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;'더하기'를 클릭하면 패널에 아이템이 추가된다. 추가된 아이템은 마우스 오른쪽 버튼을 클릭해서 이동도 할수 있고 속성를 클릭해 아이템에 대해서 설정도 할수 있다. XFCE4는 다양한 아이템을 제공한다. 필요한 아이템들을 추가해보자.&lt;br /&gt;&lt;br /&gt;&lt;SPAN style="COLOR: rgb(0,47,255); FONT-WEIGHT: bold"&gt;2.실행기 아이템 추가를 통한 프로그램 등록.&lt;/SPAN&gt;&lt;br /&gt;&lt;br /&gt;XFCE4에서 제공하는 아이템들이 많지만 패널에 프로그램을 등록할 수는 없을까? 가능하다. '새로운 항목 추가'후 나오는 아이템 리스트에서 '실행기'를 추가한다.&lt;br /&gt;&lt;br /&gt;실행기를 추가하면 자동으로 실행기 속성 창이 뜬다. &lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XRhCCShRAY.png" style="width:520px;height:404px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XRhCCShRAY.png')" /&gt;&lt;/div&gt;&lt;br /&gt;여기에 위와같이 각각의 항목들을 입력해준다. 아이콘은 인터넷을 통해서 구할수 있다. 실행하고 싶은 명령어를 넣어준다.&lt;br /&gt;&lt;br /&gt;&lt;SPAN style="COLOR: rgb(0,47,255); FONT-WEIGHT: bold"&gt;3.패널(Panel) 자체 설정.&lt;/SPAN&gt;&lt;br /&gt;&lt;br /&gt;패널을 옮기거나 크기를 바꾸는것도 가능하다. 아무 아이템에서 마우스 오른쪽 버튼을 클릭한 후에 '패널 꾸미기' 를 클릭하면 '패널 관리자'가 실행이 된다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XF4Ob4jlux.png" style="width:342px;height:498px;" alt="패널 관리자"  /&gt;&lt;p class="cap1"&gt;패널 관리자, 각종 패널에대해서 설정을 할수 있다.&lt;/p&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-5521932121162307888?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/5521932121162307888/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/03/xfce-%ED%99%98%EA%B2%BD-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-i-%ED%8C%A8%EB%84%90-%EB%8B%A4%EB%A3%A8%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/5521932121162307888'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/5521932121162307888'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/03/xfce-%ED%99%98%EA%B2%BD-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0-i-%ED%8C%A8%EB%84%90-%EB%8B%A4%EB%A3%A8%EA%B8%B0.html' title='XFCE 환경 사용하기 I - 패널 다루기.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-1346343212503919002</id><published>2010-03-28T12:48:00.000+09:00</published><updated>2010-12-21T01:33:34.805+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JSP'/><category scheme='http://www.blogger.com/atom/ns#' term='책'/><title type='text'>최범균의 JSP 2.0 기초부터 중급까지 프로그래밍 예제 파일.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;가메출판사에서 출판한 최범균의 Jsp 책의 예제 파일.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XDID4K1zJx.png" style="width:150px;height:213px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;파일:&lt;A href="http://orion203.cafe24.com/jsp_example.iso" target=_blank&gt;jsp_example.iso&lt;/A&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-1346343212503919002?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/1346343212503919002/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/03/%EC%B5%9C%EB%B2%94%EA%B7%A0%EC%9D%98-jsp-20-%EA%B8%B0%EC%B4%88%EB%B6%80%ED%84%B0-%EC%A4%91%EA%B8%89%EA%B9%8C%EC%A7%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%98%88%EC%A0%9C-%ED%8C%8C%EC%9D%BC.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1346343212503919002'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1346343212503919002'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/03/%EC%B5%9C%EB%B2%94%EA%B7%A0%EC%9D%98-jsp-20-%EA%B8%B0%EC%B4%88%EB%B6%80%ED%84%B0-%EC%A4%91%EA%B8%89%EA%B9%8C%EC%A7%80-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EC%98%88%EC%A0%9C-%ED%8C%8C%EC%9D%BC.html' title='최범균의 JSP 2.0 기초부터 중급까지 프로그래밍 예제 파일.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6078464567558077193</id><published>2010-03-16T10:24:00.000+09:00</published><updated>2010-12-21T01:33:30.497+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='구글'/><category scheme='http://www.blogger.com/atom/ns#' term='이야기'/><category scheme='http://www.blogger.com/atom/ns#' term='모바일'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='안드로이드'/><category scheme='http://www.blogger.com/atom/ns#' term='스마트폰'/><category scheme='http://www.blogger.com/atom/ns#' term='삼성전자'/><title type='text'>안드로이드 저작권.</title><content type='html'>그러면 그렇지, 이게 국내기업의 기업 정신.&lt;br /&gt;&lt;br /&gt;구글이 오픈소스로 안드로이드 모바일 운영체제를 제작했다. 안드로이드라는 명칭도 붙이고 휴대폰 제조사에게 어떠한 돈도 받지 않고도 누구나 안드로이드를 탑재해서 스마트폰을 사용할 수 있게 공개했다. 이에 많은 휴대폰 제조사들이 아이폰의 대항마로 안드로이드에 주목했고 국내외적으로 안드로이드 운영체제를 탑재한 스마트폰이 속속 데뷔하고 있는 상황이다.&lt;br /&gt;&lt;br /&gt;그런데 오늘 신문을보다가 깜짝 놀랐다. 국내에서는 더 이상 스마트폰에 '안드로이드'라는 말을 붙일 수 없다는 기사였다. 좀더 자세히 읽어보니 운영체제인 '안드로이드'라는 말은 사용해도 되지만 스마트폰 하드웨어를 지칭할때는 '안드로이드'라는 말을 써서는 안된다는 것이다. 그러니까 '안드로이드 XXX폰' 이라고 쓸수 없다는 것이다.&lt;br /&gt;&lt;br /&gt;왜? 대한민국, 아니 세계 초 일류기업이라는 삼성전자께서' 안드로이드' 명칭에 대한 상표권을 인수했다는 것이다. 구글에서는 소프트웨어만 제작했고 이에 대한 명칭인 '안드로이드'에 상표권 행사를 하지 않는다. 자유로이 쓰라는 것이다. 하지만 국내에서는 삼성전자께서 '안드로이드'명칭에 대해서 이제 저작권을 가지게 되어서 더 이상 국내에서는 삼성전자 이외에는 사용할 수 없다는 것이다. &lt;br /&gt;&lt;br /&gt;이건 뭐 상도나 기업정신도 없는 행위다. 구글이 아무리 거대기업이라지만 안드로이드 운영체제를 제작하는데 돈이 안들어간 것도 아니다. 그럼에도 누구나다 사용할 수 있다록 소스코드까지 공개했으며 이를 채용해서 사업을 해도 뭐라하지 않는다. '안드로이드'에 대한 명칭에도 제약을 두지 않았다. &lt;br /&gt;&lt;br /&gt;그러한 공개와 공유정신에 빛나는 소프트웨어를 가지고 장사를 하면서 국내에서 명칭에대한 상표권을 획득해 타 기업이나 개인들마저 사용을 금지하게 한것이 삼성전자다. 더러운 수법이 아닐수 없다. 어떤이는 세상일이라는게 다 그런거라고 말할지 모르지만 세상일이라는건 경쟁을 하는데 있어서도 지킬것은 지키면서 해야하는게 세상일이다. 제조업체인 삼성전자가 소프트웨어 기술력도 없는 기업이 글로벌 공개 소프트웨어를 가지고 장사를 하면서 정작 자신들은 그것을 가지고 이득이나 취할려고하는 행태는 역시 삼성 답다는 평가일뿐이다. &lt;br /&gt;&lt;br /&gt;국내업체들은 아직도 아이폰의 이미를 제대로 모르는듯하다. 아이폰으로 인해서 그 동안 국내업체들이 얼마나 소비자들을 괴롭혔는지 여실히 까발려진 사태였다. 그것도 외국에서 만든 스마트폰 하나때문에 말이다. 그런데 그 이면에는 소비자 중심의 서비스와 소비자들에 의한 시장 창출과 같은 인문적인 부분을 국내업체는 달가와 하지 않는 모양이다. 이미 해외에서는 이러한 상업은 기본이 되고 있음에도 불구하고 국내에서는 여전히 소비자를 봉으로 만들려고 잔머리를 굴리는 모습이다.&lt;br /&gt;&lt;br /&gt;삼성전자의 '안드로이드' 명칭 저작권도 이와 같은 것이다. 당연히 삼성전자는 이러고도 남을 기업이다. 소비자를 봉으로 만들지 않고서는 문을 닫아야 할테니까.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6078464567558077193?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6078464567558077193/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/03/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%A0%80%EC%9E%91%EA%B6%8C.html#comment-form' title='3개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6078464567558077193'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6078464567558077193'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/03/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-%EC%A0%80%EC%9E%91%EA%B6%8C.html' title='안드로이드 저작권.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>3</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6889418093527574882</id><published>2010-02-26T12:55:00.000+09:00</published><updated>2010-12-21T01:33:29.327+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Unix'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>리눅스 파일시스템 구조.</title><content type='html'>&lt;P&gt;처음 리눅스의 디렉토리 구조를 본다면 당황하게 된다. 윈도우즈와은 달리 매우 많은 디렉토리가 보이기 때문이다. 처음에는 왜 이리 많이 존재하나 생각할수 있지만 리눅스의 디렉토리 구조는 매우 기능적으로 알맞게 의미적으로 작성된 것이다. 각 디렉토리 구조에 대해서 알아보자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;/ 루트(Root)&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;모든 운영체제의 디렉토리 구조는 트리(Tree) 구조이다. 이러한 트리 구조에 최정점을 루트(Root)라고 부르는데 리눅스의 루트 디렉토리는 이런 의미와 동일하다. 모든 디렉토리의 뿌리가 되는 디렉토리를 루트라고 부른다. 비교를 하자면 윈도우즈의 C 드라이브와 동일하다고 보면 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;/boot&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;부트(boot) 디렉토리는 리눅스 커널과 부팅 매니저가 위치하는 디렉토리다. 리눅스가 부팅할때에 맨 처음 읽어들이는 것이 바로 이 디렉토리이다. 부팅을위해서 Grub 부트 매니저를 읽어 실행하고 커널을 읽어들여 부팅을 한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;/bin&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;리눅스의 매우 기초적인 명령어가 들어있는 디렉토리이다. 기초적인 명령어라고도 하고 시스템 명령어라고도 한다. 시스템 명령어는 시스템을 운영하기위한 매우 중요한 것인데, 따라서 매우 기초적인 명령어이기도 하다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;/root&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;슈퍼유저인 루트(Root) 사용자의 홈디렉토리이다. 본래 사용자 홈디렉토리는 /home 으로 지정되어 있다. 하지만 루트 사용자는 일반 사용자와 구별되는 슈퍼유저이기 때문에 일반유저와 따로 구별를위해 만들어졌다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;/sbin&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;리눅스의 매우 기초적인 명령어가 들어있지만 일반 사용자가 아닌 슈퍼유저만 사용가능한 명령어가 들어있다. 이 디렉토리의 명려어는 조심해서 다루어야 한다. 주로 시스템의 영향을 미치는 명령어가 많기 때문에 잘못해서 사용했을 경우 시스템에 돌이킬수 없는 영향을 줄수 있기 때문이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;/home&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;일반 사용자의 홈 디렉토리이다. 리눅스는 다중 사용자 운영체제이다. 각 일반 사용자들의 홈디렉토리가 필요한데 이를 위해서 /home 가 존재하며 여기에 계인계정이 생성이 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;/etc&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;각종 프로그램의 설정 파일이 존재한다. 리눅스에는 많은 프로그램들이 운영된다. 이러한 프로그램들은 각자 고유의 설정파일이 존재하는데, 이를 한곳에서 관리할수 있으면 편할 것이다. /etc 디렉토리가 이러한 역활을 하도록 만들어진 디렉토리다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;/lib, /lib64&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;각 프로그램의 공유라이브러리 및 정적라이브러리가 위치하는 디렉토리다. 프로그램의 경우 고통으로 사용되어지는 기능들을 라이브러리로 작성해서 프로그램 실행시 공유해서 사용한다. 이러한 라이브러리들의 위치하는 디렉토리다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;/usr&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;각종 프로그램이 설치되는 디렉토리다. 프로그램 패키지를 설치하던가 컴파일 설치를 하던 프로그램은 전부 /usr 에 설치되어 진다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;/dev&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;리눅스의 장치 파일이 위치하는 곳이다. 리눅스는 모든게 파일이다. 장치를 제어하기 위한것도 파일로 존재하는데, 예를들면 '/dev/sda1' 처럼 하드디스크 첫번째 파티션도 파일로 존재한다. 이를 위한 장치파일이 모인곳인 /dev 다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;/proc&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;리눅스 커널 이미지 디렉토리이다. 이 디렉토리는 실제로 파일 시스템상에 존재하지 않는다. 부팅과 함께 커널이 메모리에 만들어준다. 각종 시스템 정보와함께 커널 파라메터들을 볼수 있고 바꿀 수도 있다. 시스템 운영에 있어 매우 중요한 정보를 담고 있으며 잘 활용하면 유용한 정보도 많다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;리눅스 프로그램의 디렉토리 구조.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;리눅스에는 많은 프로그램들이 존재한다. 각 프로그램마다 설정파일과 공유라이브러리 파일, 실행파일, 데이터 파일등이 존재한다. 이러한 각각의 파일들도 리눅스의 파일 시스템 구조를 그대로 따르도록 되어있다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;예를들어 내가 testCpu 라는 프로그램을 제작했다고 하자. 컴파일을 하고 설치를 위한 디렉토리는 구조는 다음과 같이 구성이 될수 있다.&lt;/P&gt;&lt;P&gt;[code text]&lt;br /&gt;bin - 프로그램 명령어 디렉토리&lt;br /&gt;lib - 프로그램 공유라이브러리 디렉토리&lt;br /&gt;etc - 프로그램 설정 디렉토리&lt;br /&gt;var - 프로그램 데이터 및 로그 디렉토리&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;위 디렉토리구조는 프로그램을 컴파일 설치를 해보면 더욱 정확하게 알수 있다. 프로그램 컴파일 설치시에 별도의 디렉토리 지정 옵션을 주지 않으면 프로그램의 설치 루트 디렉토리는 '/usr/local' 이 되며 이 디렉토리 이하에 위의 구조대로 프로그램이 설치가 된다. 보다 자세한 것은 추후의 리눅스 프로그램 컴파일 설치를 해보면 무슨 말인지 알게 된다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6889418093527574882?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6889418093527574882/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/02/%EB%A6%AC%EB%88%85%EC%8A%A4-%ED%8C%8C%EC%9D%BC%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%EC%A1%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6889418093527574882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6889418093527574882'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/02/%EB%A6%AC%EB%88%85%EC%8A%A4-%ED%8C%8C%EC%9D%BC%EC%8B%9C%EC%8A%A4%ED%85%9C-%EA%B5%AC%EC%A1%B0.html' title='리눅스 파일시스템 구조.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6222343736061000843</id><published>2010-02-21T15:55:00.000+09:00</published><updated>2010-12-21T01:33:28.079+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='뉴스'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='앱스'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><title type='text'>뉴스 &amp; 미디어.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;아이폰을 구매해서 자주 활용하는 기능중에 하나는 뉴스와 미디어를 보는것이다. 아이폰의 경우 웹브라우징 속도가 상당히 빨라서 언제 어디서든지 최신의 뉴스를 접할수 있다는 것은 정말 매력적이다. 그런데 웹브라우저로 일일이 뉴스를 찾는것은 매우 버거로운 일인데 이를위해서 많은 앱스들이 준비되어 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;Free RSS Reader&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XQ4sDcSacM.png" style="width:195px;height:235px;" alt="Free RSS Reader" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XQ4sDcSacM.png')" /&gt;&lt;p class="cap1"&gt;Free RSS Reader&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;RSS는 xml로 표현되는 정보제공 방법이다. 많은 홈페이지나 블로그등에서 위의 아이콘이 보인다면 RSS를 제공하는 것이라고 보면 틀림없다. RSS를 활용하는 이유는 트래픽을 줄일수 있어서다. RSS는 마치 뉴스의 요약정보를 보여주듯이 내용의 앞부분을 일정부분 보여준다. 따라서 이를 보고 대충 어떤내용인지 알수 있고 보다 내용을 보기 원한다면 클릭해서 들어가서 보면 된다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XSbaBCFG3R.png" style="width:520px;height:390px;" alt="Rss 리스트와 Rss 등록" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XSbaBCFG3R.png')" /&gt;&lt;p class="cap1"&gt;Rss 리스트와 Rss 등록&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;Naver Newscast&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XMv6MMnTRY.png" style="width:194px;height:229px;" alt="Naver Newscast"  /&gt;&lt;p class="cap1"&gt;Naver Newscast&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;네이버 뉴스캐스트다. 네이버 뉴스캐스트는 각종 뉴스매체들을 보여준다. 설정에서 보고싶은 뉴스매체를 선택하면 그것만 볼수 있다. 또 스포츠/연예, 외신/영자지, 지역지등으로 카테고리 되어있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XUOatz0byV.png" style="width:320px;height:480px;" alt="네이버 뉴스캐스트"  /&gt;&lt;p class="cap1"&gt;네이버 뉴스캐스트&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" color=#002fff&gt;MobileRSS Free&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XQw87byK6O.png" style="width:193px;height:231px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;MobileRSS Free는 구글(Google)의 RSS를 연동해주는 앱스다. 따라서 구글의 계정이 있어야 한다. 구글과 연동되다 보니 인터넷을 통한 구글RSS 설정내용이 그대로 반영이되고 반대로 앱스에서 설정한것도 구글RSS에 그대로 반영이 된다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#002fff&gt;&lt;STRONG&gt;YTN&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XH2MBoDIiC.png" style="width:193px;height:230px;" alt=""  /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;YTN 은 대한민국 뉴스전문 채널 YTN의 뉴스를 접할수 있는 앱스다. 와이파이 지역에서는 TV시청도 가능하다. 또 속보의 푸쉬기능이 있어서 긴급뉴스 속보가 있다면 푸쉬로 알려준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6222343736061000843?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6222343736061000843/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/02/%EB%89%B4%EC%8A%A4-%EB%AF%B8%EB%94%94%EC%96%B4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6222343736061000843'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6222343736061000843'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/02/%EB%89%B4%EC%8A%A4-%EB%AF%B8%EB%94%94%EC%96%B4.html' title='뉴스 &amp;amp; 미디어.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-1784888747538730051</id><published>2010-02-09T09:40:00.000+09:00</published><updated>2010-12-21T01:33:26.740+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='이야기'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><title type='text'>스마트폰 시장, 본격적인 경쟁 돌입.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;구글의 안드로이드가 국내시장에서 본격적으로 시동을 걸었다. SKT에서 방송광고까지 제작해서 반영하는 것을 보니 이제야 실감이 난다. 삼성에서도 재빠르게 안드로이드를 탑재한 스마트폰을 발표했다고 한다. 거기다 심비안은 모든 소스코드를 공개했다. 정말이지 스마트폰 시장 선점을위한 본격적인 경쟁에 돌입한 모습이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;국내 스마트폰 경쟁체제.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이러한 일련의 변화로 역시나 많은 사람들의 관심은 '과연 승자는?'라는 질문을하게 된다. 국내에서는 아직 스마트폰의 보급이 작고 그만큼 시장도 작다. 그렇게 작은 시장이지만 앞으로는 휴대폰을 대체할 디바이스로 스마트폰이 될거라는 전망에 토를 다는 사람은 아마도 없다. &lt;/P&gt;&lt;P&gt;현재 그렇게 작은 시장이지만, 그 작은 시장도 해외의 움직임을 따라가는 것 같다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;국내에서 아이폰의 출시로 아이폰의 입지는 아직까지는 국건하다. 사실 삼성의 옴니아2도 있지만 성능이나 사용자 편의성 측면과 개발적인 측면에서는 아이폰이 앞선다는 것에는 이견이 없다. 아이폰의 도입으로 국내시장의 스마트폰 시장이 시작되었다고 보는 시각이 나올만큼 아이폰의 파급력은 대단한 것이었다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;궁지의 몰린 삼성전자와 SKT는 이를 타파하기 위해서 구글의 안드로이드를 대항마로 받아들였다. 구글하면 어떤 기업인지는 다들 안다. 검색엔진의 최강자이자 개발자들이라면 최고의 회사로 뽑는 IT 업체의 리더쯤으로 생각할 수 있는 회사다. 그만큼 저력이 상당한 회사가 만든 안드로이드라면 아이폰에 대항하기에 부족함이 없다고 본게 분명하다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XeSiqBgEby.png" style="width:520px;height:475px;" alt="아이폰 vs 넥서스원" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XeSiqBgEby.png')" /&gt;&lt;p class="cap1"&gt;아이폰과 구글의 안드로이드 탑재폰 넥서스 원&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;성능, 사용자 UI 포커스보다 제품에대한 생태계가 중요.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;많은 대학이나 미디어에서는 앞으로의 산업사회는 지식사회가 될것이며 이러한 지식산업의 구조에서 경영또한 그렇게 바뀔것이라고 배운다. 지식산업의 핵심은 순환구조에 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;예를들어, 오래전 기업에서는 지식의 흐름이란게 없었다. 상하구조적인 기업환경에서 지식과 정보는 위로 올라갈수록 많아지고 일방적으로 아래로 뿌려지는 형태였다. 하지만 지식기반 산업에서의 구조는 이와 다르다. 지식과 정보의 양은 동일하거나 좀더 많은 지식과 정보를 기업측에서는 제공한다. 이를 제공받은 측에서는 이를 활용하고 재생산해서 다시 기업의 지식과 정보에 추가되고 활용되어진다. 일방적으로 뿌려지고 폐쇄적인 형태에서 순환구조와 공유 기반으로 변화한 것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;오픈소스 진영이 이러한 기반으로 운영되어졌고 발전되어 왔다. 그러한 구조의 효용성은 리눅스(Linux)를 통해서 진가를 발휘했고 생각했던것 이상으로 큰 발전을 이루어 냈다. 오픈소스의 핵심은 공유와 참여다. 많은 소스를 무료로 오픈하고 능력있는 개발자들에게 보다 나은 소스코드를 제공받으며 성장했다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;많은 기업들이 이러한 오픈소스 발전의 놀라워하는 것은 돈의 흐름이 없이는 무엇도 이룩할 수없다는 기업들의 시각으로 판단했기 때문이다. 많은 IT 기업들이 지식기반의 순환구조보다는 판매자와 소비자 구조를 고수해왔다. 기업에서 제작한 제품은 기업의 소유였고 소비자는 보다 나은 생각과 불만사항들을 기업이 들어주기를 바래야만 했다. 그래서 많은 기업들이 오픈소스와 기업의 수익성을 고려, 잘 배합해 자신만의 모델을 만들어 운영중인데, 모바일에서는 애플이 먼저 도입했다. 바로 앱스토어(AppStore)가 그것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;앱스토어는 개발자들과 소비자들이 한대 어우러져 공존하는 공간이다. 애플은 이 공간에 룰만 정해주고 어떠한 간섭도 하지 않는다. 애플은 기초공사만 해놓은 집을 제공하면 많은 능력있는 개발자들이 인테리어를 가미할수 있도록 환경을 조성했다. 지식순환구조를 어떻게 구축할 것인가를 고민한 애플은 판매자와 소비자의 경계를 없앰으로 구현했다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이러한 생태계 조성은 적중했다. 판매자와 소비자 모두를 만족시켜줌과 동시에 수익도 낼수 있으니까 두마리 토끼를 잡은 셈이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;핵심은 '앱스토어'&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;아이폰이나 넥서스원이나 핵심은 하드웨어도 아니고, 편리한 사용자 UI도 아니다. 핵심은 '앱스토어'임에 틀림이 없다. 국내의 업체는 이를 재빠르게 눈치챈게 틀림 없다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;구글은 앱스토어에 대한 정책까지 오픈한 형태이다. 앱스토어도 안드로이드 폰을 제작하는 기업에서 독자적으로 구축할수 있는 확장성을 제공한 것이다. 국내 기업이 여기에 덥썩 달려든 것은 당연한 것이다. 삼성, SKT등은 이제 안드로이드를 탑재한 스마트폰의 앱스토어를 운영할수 있는 것이다. 아이폰의 경우는 앱스토어의 운영권은 애플이 가지고 있기 때문에 통신사 아이폰 제조업체는 앱스토어를 운영할 수 없다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;국내업체도 앱스토어를 운영할 수 있다는 그것도 구글의 안드로이드를 위한 앱스토어를 운영할 수 있다는 계산은 매우 큰 성공가능성을 열어준 것이다. 당연히 국내 업체는 구글에 올인할게 뻔하다. 애플을 몰아내야 국내의 시장의 독점적 직위를 계속 유지할수 있을 테니까..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-1784888747538730051?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/1784888747538730051/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/02/%EC%8A%A4%EB%A7%88%ED%8A%B8%ED%8F%B0-%EC%8B%9C%EC%9E%A5-%EB%B3%B8%EA%B2%A9%EC%A0%81%EC%9D%B8-%EA%B2%BD%EC%9F%81-%EB%8F%8C%EC%9E%85.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1784888747538730051'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1784888747538730051'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/02/%EC%8A%A4%EB%A7%88%ED%8A%B8%ED%8F%B0-%EC%8B%9C%EC%9E%A5-%EB%B3%B8%EA%B2%A9%EC%A0%81%EC%9D%B8-%EA%B2%BD%EC%9F%81-%EB%8F%8C%EC%9E%85.html' title='스마트폰 시장, 본격적인 경쟁 돌입.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-7075061733085829007</id><published>2010-02-04T22:21:00.000+09:00</published><updated>2010-12-21T01:33:25.282+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><title type='text'>아이폰 필수 프로그램.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;아이폰을 처음 구매하게 되면 이것저것 해보고 싶은 욕구가 마구 솟구친다. 아이튠즈도 연결해보고 음악도 싱크 맞춰서 아이폰에서 이어폰을 통해서 들려오는 음악을 들을때의 그 기쁨이란...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그런데 아이폰을 사용하면서 곧 불만이 생기게된다. 이유는 기본으로 제공되는 것들이 모두 한국 사용자에게 맞춰서 제작된게 아니기 때문이다. 휴대폰 사용자들은 초성으로 전화번호를 찾거나, 전화번호부의 그룹화등등이 그것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;걱정하지 마라. 막강한 애플의 앱스토어의 앱스들이 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XW0k2UHuBj.png" style="width:475px;height:190px;" alt="아이폰에 꼭 필요한 앱스들"  /&gt;&lt;p class="cap1"&gt;아이폰에 꼭 필요한 앱스들&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&lt;FONT size=3&gt;Groupy,&amp;nbsp; SpDial, Jihachul&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;'Groupy'는 전화번호부에 그룹을 생성하게 해주고 전화번호부에 그룹핑을 해주게 해준다.&lt;/P&gt;&lt;P align=left&gt;'SpDial'은 초성만으로도 전화번부에서 사람이름을 찾아준다.&lt;/P&gt;&lt;P align=left&gt;'Jihachul'은 지하철 노선도인데 단순하게 지하철 노선만 보여주는 것이 아니라 출발역과 도착역을 입력하여 걸리는 시간과 경로등을 보여준다.&lt;/P&gt;&lt;P align=left&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=left&gt;꼭 필수 유틸이니 설치해두자.&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-7075061733085829007?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/7075061733085829007/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/02/%EC%95%84%EC%9D%B4%ED%8F%B0-%ED%95%84%EC%88%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7075061733085829007'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7075061733085829007'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/02/%EC%95%84%EC%9D%B4%ED%8F%B0-%ED%95%84%EC%88%98-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%A8.html' title='아이폰 필수 프로그램.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-1359572719633311738</id><published>2010-02-04T21:43:00.000+09:00</published><updated>2010-12-21T01:33:18.218+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='허가권'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='소유권'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>소유권, 허가권.</title><content type='html'>&lt;P&gt;모든 운영체제에서 보안은 매우 중요한 문제이다. 운영체제는 개인의 정보를 저장하는 곳이기에 이러한 개인정보를 다른사람이 쉽게 접근하고 변형, 삭제할수 있다면 정말 심각한 문제가 아닐 수 없다. 리눅스에서는 이러한 보안성을 확립하기 위해서 소유권과 허가권을 기본으로 제공한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;리눅스 시스템은 기본적으로 3가지의 소유권을 지정한다. '자기자신, 그룹, 다른사람들' 이 그것이다. 자기자신이야 설명일 안해도 될것이고 그룹은 시스템 운영에 있어서 사용자들을 특정한 형태나 속성, 집단으로 구성하는 것을 도와준다. 다른사람은 자기자신도 아니고 그룹에 속한 사람도 아닌 모두를 말한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;소유권.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;리눅스에서는 파일이나 디렉토리에 대한 소유권 정책을 적용하다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]]$ ls -lh &lt;br /&gt;합계 4.0M&lt;br /&gt;drwx------ 2 tacitus tacitus 4.0K&amp;nbsp; 1월 24 19:28 Desktop&lt;br /&gt;-rw-r--r-- 1 tacitus tacitus&amp;nbsp; 29K&amp;nbsp; 1월 19 22:03 a.png[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;소유권은 단순하게 한사람에 대한 것만이 아니라 그룹에 관한것도 존재한다. 내가 특정 집단이나 특정한 그룹에 속해있을 경우에는 그 그룹의 소유권 정책을 따를 필요가 있는데 이를 위해서 그룹 소유권이 존재한다. 중간에 'tacitus tacitus'로 보이는 부분이 바로 소유권에 관한 정보를 알려주는 것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;왼쪽에서부터 '사용자', '그룹' 소유권 순서를 띈다. 그래서, 예를들어, 'a.png'파일에 대한 소유권을 보자면 이 파일에 대한 사용자 소유는 'tacitus'이며 그룹 소유권은 'tacitus'이다. 마찬가지로 'Desktop' 디렉토리에 대한 소유권도 그런 방식으로 해석하면 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;리눅스는 보통 계정을 생성할때 그룹을 따로 지정하지 않으면 아이디와 동일한 그룹을 생성한다. 한사람에 대한 그룹을 따로 생성하는 것이다. 그래서 위의 예제에서처럼 사용자와 그룹이 모두 동일하게 나온것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]]$ ls -lh &lt;br /&gt;합계 4.0M&lt;br /&gt;drwx------ 2 tacitus tacitus 4.0K&amp;nbsp; 1월 24 19:28 Desktop&lt;br /&gt;-rw-r--r-- 1 tacitus root&amp;nbsp; 29K&amp;nbsp; 1월 19 22:03 a.png[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위의 예제에서 'a.png'파일에대한 소유권이 바뀌었다. 파일 소유는 'tacitus'이지만 그룹 소유는 'root'다. 따라서 root 그룹에 속한 사용자라면 이 파일에 대해서 뭔가를 할수 있다. 그 '뭔가를 할수 있게' 지정한 것이 허가권이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#002fff&gt;&lt;STRONG&gt;허가권&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;허가권은 3가지로 이루어진다. 자기자신에 대한 허가권, 그룹에대한 허가권, 나머지 모든 사용자에 대한 허가권 이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]]$ ls -lh &lt;br /&gt;합계 4.0M&lt;br /&gt;drwx------ 2 tacitus tacitus 4.0K&amp;nbsp; 1월 24 19:28 Desktop&lt;br /&gt;-rw-r--r-- 1 tacitus root&amp;nbsp; 29K&amp;nbsp; 1월 19 22:03 a.png[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위화면에서 맨 왼쪽에 있는 '-rw-r--r--' 부분이 바로 허가권을 보여주는 부분이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;&lt;FONT size=6&gt;-rwx rwx rwx&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;실제 왼쪽의 모든내용은 위와 같다. 맨 왼쪽 '-'은 파일이외에 무엇인지를 알려주는 영역이다. 만약 디렉토리라면 'd'라고 표시간된다. 실제로 위에 보면 'Desktop'은 'd'라고 표시되어있고 이것은 디렉토리라고 알려주고 있다. 나머지는 허가권을 알려주고 있는데 'rwx'가 반복해서 나오는데 'r'='Read', 'w'='Write', 'x=eXecute' 를 말한다. 그러니까 읽고, 쓰고, 실행할수 있는 허가권을 말하는 것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;리눅스 시스템은 모든것을 파일로 다룬다. 장치던 디렉토리던간에 모든것이 파일처럼다루어진다. 이러한 파일에 대해서 시스템이 할수 있는 것은 읽고, 쓰고, 실행하는 것이다. 파일의 갱신도 파일을 쓰는 행위와 동일하다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그리고 3번 반복되서 나오는데 이것은 다음과 같은 의미가 있다.&lt;br /&gt;&lt;/P&gt;&lt;P align=center&gt;&lt;STRONG&gt;자기자신 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;그룹 &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;나머지 모든사용자&lt;/STRONG&gt;&lt;/P&gt;&lt;P align=center&gt;&lt;FONT size=6&gt;&lt;STRONG&gt;-rwx &amp;nbsp; &amp;nbsp;rwx &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; rwx&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;소유자에 대한 허가권을 지정해주는 것이라는 걸 알수있다. 만일 특정한 행위에대해서 허가권이 없다면 '-'으로 표시되게 되어 있다. 따라서 'a.png'파일에대해서 이제 어떤 허가권을 가지고 있는 알수 있다. 보면(-rw-r--r--)인데, 자기자신(tacitus)에게는 '읽고,쓰고'의 허가권, 그룹(tacitus)에 대해서는 '읽기'만, 나머지 모든 사용자에 대해서도 '읽기'만 할수 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;소유권 변경.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이제 소유권을 변경하는 법을 알아보자. 소유권 변경은 오로지 'root'만 할수 있다. 자신의 소유를 다른사람으로 혹은 다른 사람의 소유를 자신의 것으로 마음대로 할수 있다면 소유권이 존재할 이유가 없을 것이다. 따라서 소유권 변경은 오로지 'root'만 할수 있다록 되어 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;소유권 변경은 'chown' 명령어와 'chgrp' 명령어를 사용한다. 'chgrp' 명령어는 그룹 소유권을 변경할때 사용하는 것인데, 'chown'명령어에서도 지원하기 때문에 자주 쓰이지는 않는다.&lt;/P&gt;&lt;P&gt;'chgrp'의 사용법은 다음과 같다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]]# chgrp root a.png[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;바꾸고자하는 그룹을 지정하면 그 그룹으로 바뀐다. 단, 그룹이 시스템에 존재해야 한다.&lt;/P&gt;&lt;P&gt;사용자 소유권은 'chown'명령어를 이용해서 다음과 같이 바꾼다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]]# chown root a.png[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;역시 바꾸고자하는 사용자를 지정하면 그 사용자로 바뀐다. 단, 사용자가 시스테메 존재해야 한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이번에는 'chown' 명령어를 이용해서 사용자와 그룹을 한꺼번에 바꿔보자. 순서는 '사용자.그룹'이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]]# chown tacitus.root a.png[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;'.'이나 ':'를 사용해서 사용자와 그룹을 그분지어주면 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#002fff&gt;&lt;STRONG&gt;허가권 변경.&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;허가권의 경우는 변경할수 있는 방법이 두가지가 존재한다. 소유권을 지정해서 허가권을 부여하는 방법과 비트 지정를 이용하는 방법이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;허가권에는 먼저 대상을 사용자(u), 그룹(g), 나머지모든사용자(o)로 구분을 한다. 그리고 허가권은 'rwx'로 지정을 한다. 그래서 소유권을 지정해서 허가권을 부여하는 방법을 예제를 통해서 알아보자.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;사용자에게 읽기권한을 추가 부여.&lt;br /&gt;[code bash]&lt;br /&gt;]# chmod u+r a.png&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사용자에게 읽기를 빼기.&lt;br /&gt;[code bash]&lt;br /&gt;]# chmod u-r a.png&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사용자에게 읽고, 쓰고, 실행 권한을 추가 부여.&lt;br /&gt;[code bash]&lt;br /&gt;]# chmod u+rwx a.png&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사용자와 그룹에 실행권한 추가 부여.&lt;br /&gt;[code bash]&lt;br /&gt;]# chmod ug+x a.png&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;나머지 사용자들에게 실행권한 추가 부여.&lt;br /&gt;[code bash]&lt;br /&gt;]# chmod o+x a.png&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;모든 사용자들에게 읽고, 쓰고, 실행권한 추가 부여.&lt;br /&gt;[code bash]&lt;br /&gt;]# chmod a+rwx a.png&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사용자와 그룹에 실행권한 빼기.&lt;br /&gt;[code bash]&lt;br /&gt;]# chmod ug-x a.png&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위의 예제는 권한을 추가하거나 빼는 것이다. 그렇다면 권한을 아예 리셋하는 것은 없을까? 기존 권한을 모두 없애고 새롭게 권한을 주기위해서는 '='를 사용한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사용자에게 읽기권한만 부여&lt;br /&gt;[code bash]&lt;br /&gt;]# chmod u=r a.png&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;모든 사용자들에게 읽기, 실행권한만 부여&lt;br /&gt;[code bash]&lt;br /&gt;]# chmod u=rx a.png&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;두번째는 비트 지정 방법이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;|&amp;nbsp; r &amp;nbsp; &amp;nbsp; w &amp;nbsp; &amp;nbsp; x &amp;nbsp; | &amp;nbsp; r &amp;nbsp; &amp;nbsp; w &amp;nbsp; &amp;nbsp; x &amp;nbsp; | &amp;nbsp; r &amp;nbsp; &amp;nbsp; w &amp;nbsp; &amp;nbsp; x &amp;nbsp; | &amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위와같이 3부분으로 나눈뒤에 권한이 있으면 '1', 없으면 '0' 비트를 지정한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;예를들어 &lt;/P&gt;&lt;P&gt;[code bash]]$ ls -lh &lt;br /&gt;합계 4.0M&lt;br /&gt;-rw-r--r-- 1 tacitus root&amp;nbsp; 29K&amp;nbsp; 1월 19 22:03 a.png[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이것을 비트를 입혀서 본다면 다음과 같다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;|&amp;nbsp; r &amp;nbsp; &amp;nbsp; w &amp;nbsp; &amp;nbsp; - &amp;nbsp; | &amp;nbsp; r &amp;nbsp; &amp;nbsp; -&amp;nbsp; &amp;nbsp; - &amp;nbsp; | &amp;nbsp; r&amp;nbsp; &amp;nbsp; -&amp;nbsp; &amp;nbsp; &amp;nbsp;- &amp;nbsp; | &amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; 1 &amp;nbsp;&amp;nbsp; 1 &amp;nbsp; &amp;nbsp;&amp;nbsp; 0 &amp;nbsp; &amp;nbsp; &amp;nbsp; 1 &amp;nbsp; &amp;nbsp; 0 &amp;nbsp; &amp;nbsp;0 &amp;nbsp; &amp;nbsp; &amp;nbsp; 1 &amp;nbsp;&amp;nbsp; 0 &amp;nbsp; &amp;nbsp; 0&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이것을 각각 10진수로 환산하면 '644'가 된다. 그러니까 비트지정 방식으로 위의 권한을 해석한다면 '644'가 되는 것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;비트지정 방법은 모든 사용자의 비트를 함께 지정을 해줘야 한다. &lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# chmod 755 a.png&lt;br /&gt;]# ls -lh&lt;br /&gt;합계 4.0M&lt;br /&gt;-rwxr-xr-x 1 tacitus root&amp;nbsp; 29K&amp;nbsp; 1월 19 22:03 a.png&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;비트지정 방법은 비트를 계산해야하는 번거로움이 있지만 쉘 스크립트를 하다보면 자주 쓰는 권한이 있게되는데 이럴때는 비트지정방법을 자주 이용하게 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-1359572719633311738?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/1359572719633311738/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/02/%EC%86%8C%EC%9C%A0%EA%B6%8C-%ED%97%88%EA%B0%80%EA%B6%8C.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1359572719633311738'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1359572719633311738'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/02/%EC%86%8C%EC%9C%A0%EA%B6%8C-%ED%97%88%EA%B0%80%EA%B6%8C.html' title='소유권, 허가권.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-552042822760170687</id><published>2010-01-30T17:45:00.000+09:00</published><updated>2010-12-21T01:33:21.994+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='이야기'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='platform'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='모바일'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='플랫폼'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><title type='text'>애플의 전략 '플랫폼'</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;아이폰(Iphone)으로 인해서 애플(Apple)이 일반인에게도 주목을 받고 있다. IPod로  젊은이들에게는 익숙하지만 아이폰(Iphone)은 애플(Apple)을 30~40대에게도 알리는데 일조를 했다.&lt;br /&gt;&lt;br /&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XTK85nB1Va.jpg" style="width:294px;height:394px;" alt="애플사의 로고."  /&gt;&lt;p class="cap1"&gt;애플사의 로고.&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;하지만 애플은 컴퓨터 발전 역사에 한축을 담당한 회사다. 개인용 컴퓨터인 PC역사는 IBM과 애플, 그리고 마이크로소프트(Microsoft), 3개사에의해서 씌여졌다고 해도 과언이 아니다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#002fff"&gt;&lt;STRONG&gt;IBM vs 애플.&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;초기 PC역사에서 IBM과 애플은 적이었다. 보다 쉽고 다양하게 대중화하는데 초점이 맞추어졌다. 보다 빠른 성능과 쉽게배울수 있는 컴퓨터를 내세웠었는데 IBM과 애플이 양대산맥이었다. IBM은 딱히 이름을 붙이지는 않았지만 자신들이 개발한 컴퓨터를 가장 대중적으로 사용할 수 있다고 홍보했고 애플은 자사가 만든 컴퓨터에 매킨토시(Macintosh)라는 브랜드를 붙여 역시 홍보 및 판매를 했다. &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XR2qPc0L6X.png" style="width:520px;height:199px;" alt="IBM 호환 PC 플랫폼과 매킨토시 플랫폼" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XR2qPc0L6X.png')" /&gt;&lt;p class="cap1"&gt;IBM 호환 PC 플랫폼과 매킨토시 플랫폼&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;그런데 마이크로소프트(Microsoft)에서 PC에서 동작하는 개인용 운영체제를 개발했다. 그런데 하필이면 이 개인용 운영체제는 IBM PC에서만 동작되도록 설계된 것이었다. IBM은 자사가 개발한 컴퓨터를 개인용 컴퓨터의 표준이 되기를 희망했지만 소프트웨어 부제에 시달리고 있을 때였다. 그럴때에 MS의 개인용 운영체제의 등장은 그야말로 IBM 컴퓨터에게 천군만마였다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;이후에 IBM이 만들어낸 컴퓨터를 많은 제조사들이 모방하여 제작해 판매할수 있도록 IBM이 냅둔 모양이다. 물론 IBM과 완전하게 동일하게는 아니기만 해면 되었고 자신들이 만든 PC와 호환이 된다면 더 괜찮을 거라고 여겼던 모양이다.  거기에 MS의 개인용 운영체제를 설치할 수 있다는 것 만으로도 '개인용 컴퓨터 = IBM 호환 PC'가 되는데 문제가 될게 없었다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;하지만 애플은 달랐다. 다른 기타 제조사들이 제조를 할수 없도록 라이센스를 걸었기 때문이다. 또 애플이 만든 매킨토시는 하드웨어도 달랐고 고가였다. 그런데도 애플은 자신만의 창의적인 소프트웨어와 그래픽환경으로 매니아층을 형성하며 개인용 PC의 하나로 자리잡는다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#002fff"&gt;&lt;STRONG&gt;플랫폼.&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;'IBM 호환 PC', '매킨토시'라고 하는 것을 '플랫폼'이라고 한다. 플랫폼이란, 하드웨어 설계에서부터 소프트웨어까지의 환경을 말하는 것인데, 일반인이 이해하기는 조금 애매한 면이있다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;예를들어 'IBM 호환 PC'의 경우 최근 나온 MS 'Windows 7' 운영체제를 설치할 수 있다. 매우 잘 동작하고 이것으로 세상이 정말 많이 좋아졌다. 그러면 내가 매킨토시를 구매하고 MS 'Windows 7'를 설치하고자 했을때 설치가 될까? 당연히 되지 않는다. 하드웨어가 문제가 되는게 아니다. 필요하다면 MS 'Windows 7'의 드라이버를 구해서 설치하면 그만이다. 그런데도 설치가 되지 않는다. 플랫폼이 다르기 때문이다. &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XSmGwdAyQV.png" style="width:490px;height:235px;" alt="Windows7과 Mac OS X"  /&gt;&lt;p class="cap1"&gt;Windows7과 Mac OS X는 필요로 하는 플랫폼이 다르다.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;마찬가지로 최근 나온 'Mac OS X'를 'IBM 호환 PC'에 설치할 수 있을까? 역시나 불가능하다. 'Mac OS X'는 매킨토시 플랫폼에서만 동작하도록 제작되었기 때문이다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;그런데 'IBM 호환 PC'제조사들은 얼마든지 있다. 그래서 소비자들은 다양한 종류의 'IBM 호환 PC'를 가지고 있다. 하지만 매킨토시는 오로지 애플에서만 제작하고 판매한다. 왜 그렇게 할까?&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" color="#002fff"&gt;&lt;STRONG&gt;애플, '최고의 컴퓨터 환경은 완벽한 플랫폼에서 나온다' - 플랫폼&lt;/STRONG&gt;&lt;/FONT&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;애플은 사용자 컴퓨터 환경을 위해서는 완벽한 플랫폼이 필요하다고 생각했다. 하드웨어 제조사 따로 소프트웨어 따로 노는 것이 아닌 한몸처럼 움직이도록 되어야 한다고 생각한 것이다. 그래서 애플은 플랫폼 전략을 세운다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;애플은 모든 전략에는 플랫폼이 있다. 이는 지난 몇년간 지켜봐도 그대로 들어난다. 'Web 2.0'이 한참 유행일때도 그랬다. 애플은 웹(Web)도 플랫폼으로 봤다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;1.MS : 웹은 OS다.&lt;/P&gt;&lt;P&gt;2.애플: 웹은 플랫폼이다.&lt;/P&gt;&lt;P&gt;3.구글: 웹은 그냥 웹이다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;위의 내용은 한창 웹전쟁을 벌일때에 나온 3사의 웹 전략이다. 애플은 플랫폼을 보고 그때도 매킨토시를 내세운다. 웹을 진정으로 잘 활용하기 위해서는 매킨토시가 필요하다는 것이다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color="#002fff"&gt;&lt;STRONG&gt;모바일 = 플랫폼&lt;br /&gt;&lt;/STRONG&gt;&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;애플이 그러한 전략은 비판을 많이 받아왔다. 아무리 잘 지원하고 좀더 잘 동작한다고 하더라도 초기 비용이 너무 많이 나온다는 것이다. 그리고 꼭 매킨토시가 아니더라도 다른방법으로도 얼마든지 저렴하게 환경을 즐길수 있었다. &lt;/P&gt;&lt;P&gt; &lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XKMVEYCEud.jpg" style="width:250px;height:340px;" alt="아이폰은 플랫폼이다."  /&gt;&lt;p class="cap1"&gt;아이폰은 플랫폼은 스마트폰의 대중성을 이끌어 냈다.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;하지만 모바일 시대가 도래하면서 얘기가 달라졌다. 애플의 이러한 전략이 진가를 발휘하기 시작한 것이다. 이를 입증한 것이 아이팟이다. MP3 Player 시장을 쓰러버린 이 모바일 기기는 최고의 성능과 환경을 제공함으로서 전세계에 애플이란 이름을 널리 알렸다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;모바일은 일반 PC와는 다르다. 제한된 하드웨어 사양에서 성능을 이끌어내야 하고 휴대성과 디자인도 함께 고려를 해야한다. 전력을 덜 소모하면서 다양한 기능을 할수 있어야 하는게 문제다. 그런데 이게 소프트웨어를 잘 만든다고 해서 되는것이 아니다. 소프트웨어도 하드웨어도 모두 잘 조합을 이루고 오류없이 동작을해야 한다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;이러다 보니 모바일은 플랫폼의 성격을 그대로 반영한다. 애플이 모바일 분야에서 두각을 나타낸것은 그동안 쌓아온 노하우의 결과라고 봐야한다. 편안한 인터페이스, 모바일에서 필요한 다양한 애플리케이션 환경(?)등은 그동안 한계단 한계단 천천히 밟고 올라온 애플의 결과다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-552042822760170687?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/552042822760170687/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%95%A0%ED%94%8C%EC%9D%98-%EC%A0%84%EB%9E%B5-%ED%94%8C%EB%9E%AB%ED%8F%BC.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/552042822760170687'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/552042822760170687'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%95%A0%ED%94%8C%EC%9D%98-%EC%A0%84%EB%9E%B5-%ED%94%8C%EB%9E%AB%ED%8F%BC.html' title='애플의 전략 &apos;플랫폼&apos;'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-965817317693877827</id><published>2010-01-30T17:19:00.000+09:00</published><updated>2010-12-21T01:33:24.247+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='기타'/><title type='text'>Java API Flow</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XSSBtUSirF.gif" style="width:520px;height:572px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XSSBtUSirF.gif')" /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-965817317693877827?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/965817317693877827/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/java-api-flow.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/965817317693877827'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/965817317693877827'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/java-api-flow.html' title='Java API Flow'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-1708732987477469872</id><published>2010-01-29T11:50:00.000+09:00</published><updated>2010-12-21T01:33:23.180+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='언어'/><category scheme='http://www.blogger.com/atom/ns#' term='Python'/><title type='text'>xml SAX 파서를 이용한 RSS 분석기.</title><content type='html'>&lt;PRE&gt;[code python]#!/usr/bin/env python&lt;br /&gt;&lt;br /&gt;"""&lt;br /&gt;RSS.py&lt;br /&gt;&lt;br /&gt;Classes for working with RSS channels as arbitrary data structures.&lt;br /&gt;Requires Python 2.2 or newer and PyXML 0.7.1 or newer.&lt;br /&gt;&lt;br /&gt;  ChannelBase - Base class for RSS Channels.&lt;br /&gt;  CollectionChannel - RSS Channel modeled as a URI-per-entry &lt;br /&gt;                    dictionary.&lt;br /&gt;  TrackingChannel - RSS Channel modeled as an item-per-entry &lt;br /&gt;                    dictionary.&lt;br /&gt;  RSSParser - Multi-format RSS/XML Parser.&lt;br /&gt;  &lt;br /&gt;Typically, the *Channel clases will be most useful to developers.  &lt;br /&gt;  &lt;br /&gt;This library provides tools for working with RSS feeds as data&lt;br /&gt;structures. The core is an RSS parser capable of understanding most&lt;br /&gt;RSS formats, and a serializer that produces RSS1.0. The RSS channel&lt;br /&gt;itself can be represented as any arbitrary data structure; two such&lt;br /&gt;structures are provided both as examples and to service common&lt;br /&gt;usage. This approach allows channels to be manipulated and stored in&lt;br /&gt;a fashion that suits both their semantics and the applications that&lt;br /&gt;access them.&lt;br /&gt;&lt;br /&gt;Both the parser and the serializer have the following limitations:&lt;br /&gt;  - RSS 1.0 "rich content" modules are not supported&lt;br /&gt;  - RSS 0.9x features that rely on attributes are not supported&lt;br /&gt;  - RDF is not understood; this library does not expose statements or&lt;br /&gt;    understand RDF syntax beyond that documented in RSS1.0 (taking &lt;br /&gt;    into account the previously listed limitations) &lt;br /&gt;&lt;br /&gt;The RSS format is made up of three metadata sections (channel,&lt;br /&gt;image, and textinput) and a list of items. Each individual metadata&lt;br /&gt;section and each item is passed around as an "item dictionary",&lt;br /&gt;which is a Python dictionary with (namespace, localname) tuples as&lt;br /&gt;keys. The values of the dictionaries are always strings; they may&lt;br /&gt;contain markup, which will be rendered into the RSS/XML when&lt;br /&gt;serialized.&lt;br /&gt;&lt;br /&gt;Individual items are found by using an "item identifier"; this is a&lt;br /&gt;channel-unique, string identifier for any given item. Item&lt;br /&gt;identifiers may be generated in a variety of ways, depending on the&lt;br /&gt;requirements of the channel.&lt;br /&gt;&lt;br /&gt;Certain types of channel metadata are automatically generated, and&lt;br /&gt;will not be returned or honored when accessed. They includes the&lt;br /&gt;"items", "image" and "textinput" children of the channel element.&lt;br /&gt; &lt;br /&gt;  &lt;br /&gt;TODO:&lt;br /&gt;  - any markup (and the content inside) in item or metadata children &lt;br /&gt;    (e.g., HTML in a &amp;lt;description&amp;gt; will be silently ignored.&lt;br /&gt;  - test suite&lt;br /&gt;  - a function (XPath-based?) to detect a channel's type and return&lt;br /&gt;    the appropriate class.&lt;br /&gt;  - pay attention to &amp;lt;rss:items&amp;gt; when appropriate.&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;__license__ = """&lt;br /&gt;Copyright (c) 2004 Mark Nottingham &amp;lt;mnot@pobox.com&amp;gt;&lt;br /&gt;&lt;br /&gt;Permission is hereby granted, free of charge, to any person obtaining a copy&lt;br /&gt;of this software and associated documentation files (the "Software"), to deal&lt;br /&gt;in the Software without restriction, including without limitation the rights&lt;br /&gt;to use, copy, modify, merge, publish, distribute, sublicense, and/or sell&lt;br /&gt;copies of the Software, and to permit persons to whom the Software is&lt;br /&gt;furnished to do so, subject to the following conditions:&lt;br /&gt;&lt;br /&gt;The above copyright notice and this permission notice shall be included in all&lt;br /&gt;copies or substantial portions of the Software.&lt;br /&gt;&lt;br /&gt;THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR&lt;br /&gt;IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,&lt;br /&gt;FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE&lt;br /&gt;AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER&lt;br /&gt;LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,&lt;br /&gt;OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE&lt;br /&gt;SOFTWARE.&lt;br /&gt;"""&lt;br /&gt;&lt;br /&gt;__version__ = "0.47"&lt;br /&gt;&lt;br /&gt;import UserDict, sys, codecs, sha, types, signal&lt;br /&gt;import xml.sax as sax&lt;br /&gt;import xml.sax.saxutils as saxutils&lt;br /&gt;import cPickle as pickle&lt;br /&gt;import cStringIO as StringIO&lt;br /&gt;try: # accommodate older versions of python.&lt;br /&gt;	from xml.sax.sax2exts import make_parser&lt;br /&gt;except ImportError:&lt;br /&gt;	from xml.sax import make_parser&lt;br /&gt;&lt;br /&gt;versionURI = 'http://www.mnot.net/python/RSS.py?version=%s' % __version__&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class _NamespaceMap:&lt;br /&gt;    """&lt;br /&gt;    Prefix &amp;lt;-&amp;gt; Namespace map.&lt;br /&gt;    &lt;br /&gt;    Hold prefix-&amp;gt;namespace mappings, and generate new prefixes when &lt;br /&gt;    necessary. Exposes prefix-&amp;gt;URI map as attributes, URI-&amp;gt;prefix&lt;br /&gt;    through getPrefix(URI).&lt;br /&gt;    """&lt;br /&gt;    &lt;br /&gt;    def __init__(self):        &lt;br /&gt;        self._nsID = 0  # seed for namespace prefix generation&lt;br /&gt;        self._prefixMap = {}&lt;br /&gt;        self.rdf = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'&lt;br /&gt;        self.rss10 = 'http://purl.org/rss/1.0/'&lt;br /&gt;        self.rss09 = 'http://my.netscape.com/rdf/simple/0.9/'&lt;br /&gt;        self.rss091 = 'http://purl.org/rss/1.0/modules/rss091/'&lt;br /&gt;        self.dc = 'http://purl.org/dc/elements/1.1/'&lt;br /&gt;        self.syn = 'http://purl.org/rss/modules/syndication/'&lt;br /&gt;        self.content = 'http://purl.org/rss/1.0/modules/content/'&lt;br /&gt;        self.admin = 'http://webns.net/mvcb/'&lt;br /&gt;        self.ag = 'http://purl.org/rss/modules/aggregation/'&lt;br /&gt;        self.annotate = 'http://purl.org/rss/1.0/modules/annotate/'&lt;br /&gt;        self.cp = 'http://my.theinfo.org/changed/1.0/rss/'&lt;br /&gt;        self.company = 'http://purl.org/rss/1.0/modules/company'&lt;br /&gt;        self.event = 'http://purl.org/rss/1.0/modules/event/'&lt;br /&gt;        self.slash = 'http://purl.org/rss/1.0/modules/slash/'&lt;br /&gt;        self.html = 'http://www.w3.org/html4/'&lt;br /&gt;        &lt;br /&gt;    def __setattr__(self, attr, value):&lt;br /&gt;        self.__dict__[attr] = value&lt;br /&gt;        if attr[0] != '_':&lt;br /&gt;            self._prefixMap[value] = attr&lt;br /&gt;&lt;br /&gt;    def getPrefix(self, URI):&lt;br /&gt;        """&lt;br /&gt;        Get the prefix for a given URI; generate one if it&lt;br /&gt;        doesn't exist.&lt;br /&gt;        """&lt;br /&gt;        try:&lt;br /&gt;            if URI == self.rss10:&lt;br /&gt;                return None  # special case&lt;br /&gt;            return self._prefixMap[URI]&lt;br /&gt;        except KeyError:&lt;br /&gt;            o = []&lt;br /&gt;            d = self._nsID  &lt;br /&gt;            while 1:&lt;br /&gt;                o.insert(0, d % 26)&lt;br /&gt;                d = d / 26&lt;br /&gt;                if not d: break&lt;br /&gt;            candidate = "".join(map(lambda a: chr(a+97), o))&lt;br /&gt;            self._nsID = self._nsID + 1&lt;br /&gt;            if candidate in self._prefixMap.values():&lt;br /&gt;                candidate = self.getPrefix(URI)&lt;br /&gt;            setattr(self, candidate, URI)&lt;br /&gt;            return candidate&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;ns = _NamespaceMap()&lt;br /&gt;&lt;br /&gt;# possible namespaces for RSS docs (None included for 0.9x)&lt;br /&gt;rssNamespaces = [ns.rss09, ns.rss10, None]&lt;br /&gt;&lt;br /&gt;# major sections of a RSS file&lt;br /&gt;rssSections = [ (ns.rss10, 'channel'), &lt;br /&gt;                (ns.rss10, 'image'), &lt;br /&gt;                (ns.rss10, 'textarea')&lt;br /&gt;              ]&lt;br /&gt;&lt;br /&gt;# RSS core element localnames&lt;br /&gt;rssElements = ['rss', 'channel', 'image', 'textarea', 'item', 'items', &lt;br /&gt;               'title', 'link', 'description', 'url']&lt;br /&gt;&lt;br /&gt;# RSS elements whose data is in an rdf:resource attribute&lt;br /&gt;rdfResources = [    (ns.rss10, 'image'), &lt;br /&gt;                    (ns.rss10, 'textarea'), &lt;br /&gt;                    (ns.admin, 'errorReportsTo'), &lt;br /&gt;                    (ns.admin, 'generatorAgent'), &lt;br /&gt;                    (ns.annotate, 'reference'), &lt;br /&gt;                    (ns.cp, 'server')&lt;br /&gt;               ]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class ChannelBase:&lt;br /&gt;    """&lt;br /&gt;    Base class for RSS Channels.&lt;br /&gt;    &lt;br /&gt;    A number of generic methods for accessing and setting channel&lt;br /&gt;    data and metadata are exposed, for the benefit of subclasses.&lt;br /&gt;    They may be used by applications as well, or the data structure&lt;br /&gt;    of the subclass may be directly manipulated.&lt;br /&gt;    """&lt;br /&gt;    &lt;br /&gt;    def __init__(self):&lt;br /&gt;        self.encoding = 'utf-8'&lt;br /&gt;        &lt;br /&gt;    def listItems(self):&lt;br /&gt;        """List the items in a channel, with a list of identifiers."""&lt;br /&gt;        pass  # override me &lt;br /&gt;            &lt;br /&gt;    def addItem(self, item, index=0):&lt;br /&gt;        """Add an item to the channel. Expects an item dictionary."""&lt;br /&gt;        pass  # override me&lt;br /&gt;&lt;br /&gt;    def getItem(self, identifier):&lt;br /&gt;        """Get the appropriate item dictionary for a given identifier."""&lt;br /&gt;        pass  # override me&lt;br /&gt;&lt;br /&gt;    def getMD(self, name):&lt;br /&gt;        """&lt;br /&gt;        Get the [name] metadata as an item dictionary, where type is&lt;br /&gt;        a tuple (typically, in the ns:rss10 namespace, with a localname of &lt;br /&gt;        channel|image|textinput). MUST return an empty dictionary if the&lt;br /&gt;        metadata isn't found.&lt;br /&gt;        """ &lt;br /&gt;        pass  # override me&lt;br /&gt;        &lt;br /&gt;    def setMD(self, name, metadata):&lt;br /&gt;        """&lt;br /&gt;        Set the [name] metadata, where name is a tuple (typically, &lt;br /&gt;        it will be in the ns:rss10 namespace, and have a localname of&lt;br /&gt;        channel|image|textinput), and metadata is an item dictionary.&lt;br /&gt;        """&lt;br /&gt;        pass  # override me&lt;br /&gt;    &lt;br /&gt;    def parse(self, url, timeout=30):&lt;br /&gt;        """&lt;br /&gt;        Fetch a channel representation from a URL and populate&lt;br /&gt;        the channel.&lt;br /&gt;        """&lt;br /&gt;        dh = RSSParser(self)&lt;br /&gt;        p = make_parser()&lt;br /&gt;        p.setContentHandler(dh)&lt;br /&gt;        p.setFeature(sax.handler.feature_namespaces, 1)&lt;br /&gt;        signal.signal(signal.SIGALRM, self._timeout)&lt;br /&gt;        signal.alarm(timeout)&lt;br /&gt;        try:&lt;br /&gt;            p.parse(str(url))  # URIs are ascii&lt;br /&gt;        finally:&lt;br /&gt;            signal.alarm(0)&lt;br /&gt;        return dh&lt;br /&gt;&lt;br /&gt;    def _timeout(self, **args):&lt;br /&gt;        raise IOError, 'timeout'&lt;br /&gt;&lt;br /&gt;    def parseFile(self, file):&lt;br /&gt;        """Parse a file and populate the channel."""&lt;br /&gt;        dh = RSSParser(self)&lt;br /&gt;        p = make_parser()&lt;br /&gt;        p.setContentHandler(dh)&lt;br /&gt;        p.setFeature(sax.handler.feature_namespaces, 1)&lt;br /&gt;        p.parseFile(file)&lt;br /&gt;        return dh&lt;br /&gt;&lt;br /&gt;    def __str__(self):&lt;br /&gt;        return self.output(self.listItems())&lt;br /&gt;    &lt;br /&gt;    def output(self, items):&lt;br /&gt;        """Return the items referred to by a list of identifiers."""&lt;br /&gt;        assert type(items) is types.ListType, "items must be a list (%s)" % \&lt;br /&gt;          type(items)&lt;br /&gt;        out = StringIO.StringIO()&lt;br /&gt;        o = _XMLGenerator(out, self.encoding, 'replace')&lt;br /&gt;        channelMD = self.getMD((ns.rss10, "channel"))&lt;br /&gt;        imageMD = self.getMD((ns.rss10, "image"))&lt;br /&gt;        textinputMD = self.getMD((ns.rss10, "textinput"))&lt;br /&gt;        channelMD[(ns.admin, 'generatorAgent')] = versionURI&lt;br /&gt;        &lt;br /&gt;        # gather namespaces, map prefixes&lt;br /&gt;        namespaces = {ns.rdf: 1}&lt;br /&gt;        namespaces.update(dict(&lt;br /&gt;          channelMD.keys() + imageMD.keys() + textinputMD.keys()))&lt;br /&gt;        [namespaces.update(dict(i.keys())) for i in map(self.getItem, items)]&lt;br /&gt;        for namespace in namespaces.keys():&lt;br /&gt;            o.startPrefixMapping(ns.getPrefix(namespace), namespace)&lt;br /&gt;            &lt;br /&gt;        # write the XML&lt;br /&gt;        o.startDocument()&lt;br /&gt;        o.startElementNS((ns.rdf, 'RDF'), None, {})&lt;br /&gt;        o.ignorableWhitespace('\n')&lt;br /&gt;        o.startElementNS(&lt;br /&gt;          (ns.rss10, 'channel'), None, &lt;br /&gt;          {(ns.rdf, 'about'): channelMD[(ns.rss10, 'link')]})&lt;br /&gt;        o.ignorableWhitespace('\n')&lt;br /&gt;        &lt;br /&gt;        # /channel&lt;br /&gt;        for name, data in channelMD.items():&lt;br /&gt;            if name in [(ns.rss10, 'items'), (ns.rss10, 'image'), &lt;br /&gt;              (ns.rss10, 'textinput')]: &lt;br /&gt;                continue&lt;br /&gt;            o.ignorableWhitespace('  ')&lt;br /&gt;            if name in rdfResources:&lt;br /&gt;                o.startElementNS(name, None, {(ns.rdf, 'resource'): data})&lt;br /&gt;            else:&lt;br /&gt;                if "&amp;lt;" in data:&lt;br /&gt;                    o.startElementNS(name, None, &lt;br /&gt;                      {(ns.rdf, "parseType"): "Literal"})&lt;br /&gt;                else:&lt;br /&gt;                    o.startElementNS(name, None, {})&lt;br /&gt;                o.characters(data)&lt;br /&gt;            o.endElementNS(name, None)&lt;br /&gt;            o.ignorableWhitespace('\n')&lt;br /&gt;            &lt;br /&gt;        # /channel/items&lt;br /&gt;        o.ignorableWhitespace('  ')&lt;br /&gt;        o.startElementNS((ns.rss10, 'items'), None, {})&lt;br /&gt;        o.startElementNS((ns.rdf, 'Seq'), None, {})&lt;br /&gt;        o.ignorableWhitespace('\n')&lt;br /&gt;        for id in items:&lt;br /&gt;            o.ignorableWhitespace('   ')&lt;br /&gt;            o.startElementNS((ns.rdf, 'li'), None, &lt;br /&gt;              {(ns.rdf, 'resource'): self.getItem(id).get((ns.rss10, 'link'), &lt;br /&gt;              _make_hash(self.getItem(id)))})&lt;br /&gt;            o.endElementNS((ns.rdf, 'li'), None)&lt;br /&gt;            o.ignorableWhitespace('\n')&lt;br /&gt;        o.ignorableWhitespace('  ')&lt;br /&gt;        o.endElementNS((ns.rdf, 'Seq'), None)&lt;br /&gt;        o.endElementNS((ns.rss10, 'items'), None)&lt;br /&gt;        o.ignorableWhitespace('\n')&lt;br /&gt;&lt;br /&gt;        # /channel/image&lt;br /&gt;        if imageMD.has_key((ns.rss10, 'url')):&lt;br /&gt;            o.startElementNS((ns.rss10, 'image'), None,&lt;br /&gt;              {(ns.rdf, 'about'): imageMD[(ns.rss10, 'url')]})&lt;br /&gt;            o.endElementNS((ns.rss10, 'image'), None)&lt;br /&gt;            o.ignorableWhitespace('\n')&lt;br /&gt;            &lt;br /&gt;        # /channel/textinput&lt;br /&gt;        if textinputMD.has_key((ns.rss10, 'link')):&lt;br /&gt;            o.startElementNS((ns.rss10, 'textinput'), None,&lt;br /&gt;              {(ns.rdf, 'about'): textinputMD[(ns.rss10, 'link')]})&lt;br /&gt;            o.endElementNS((ns.rss10, 'textinput'), None)&lt;br /&gt;            o.ignorableWhitespace('\n')&lt;br /&gt;        o.endElementNS((ns.rss10, 'channel'), None)&lt;br /&gt;        o.ignorableWhitespace('\n')&lt;br /&gt;        &lt;br /&gt;        # /image&lt;br /&gt;        if imageMD.has_key((ns.rss10, 'url')):&lt;br /&gt;            o.startElementNS((ns.rss10, 'image'), None, &lt;br /&gt;              {(ns.rdf, 'about'): imageMD[(ns.rss10, 'url')]})&lt;br /&gt;            for name, data in imageMD.items():&lt;br /&gt;                o.ignorableWhitespace('  ')&lt;br /&gt;                if name in rdfResources:&lt;br /&gt;                    o.startElementNS(name, None, {(ns.rdf, 'resource'): data})&lt;br /&gt;                else:&lt;br /&gt;                    if "&amp;lt;" in data:&lt;br /&gt;                        o.startElementNS(name, None, &lt;br /&gt;                          {(ns.rdf, "parseType"): "Literal"})&lt;br /&gt;                    else:&lt;br /&gt;                        o.startElementNS(name, None, {})&lt;br /&gt;                    o.characters(data)&lt;br /&gt;                o.endElementNS(name, None)&lt;br /&gt;                o.ignorableWhitespace('\n')&lt;br /&gt;            o.endElementNS((ns.rss10, 'image'), None)&lt;br /&gt;            o.ignorableWhitespace('\n')&lt;br /&gt;            &lt;br /&gt;        # /textinput&lt;br /&gt;        if textinputMD.has_key((ns.rss10, 'link')):&lt;br /&gt;            o.startElementNS((ns.rss10, 'textinput'), None, &lt;br /&gt;              {(ns.rdf, 'about'): textinputMD[(ns.rss10, 'link')]})&lt;br /&gt;            for name, data in textinputMD.items():&lt;br /&gt;                o.ignorableWhitespace('  ')&lt;br /&gt;                if name in rdfResources:&lt;br /&gt;                    o.startElementNS(name, None, {(ns.rdf, 'resource'): data})&lt;br /&gt;                else:&lt;br /&gt;                    if "&amp;lt;" in data:&lt;br /&gt;                        o.startElementNS(name, None, &lt;br /&gt;                          {(ns.rdf, "parseType"): "Literal"})&lt;br /&gt;                    else:&lt;br /&gt;                        o.startElementNS(name, None, {})&lt;br /&gt;                    o.characters(data)&lt;br /&gt;                o.endElementNS(name, None)&lt;br /&gt;                o.ignorableWhitespace('\n')&lt;br /&gt;            o.endElementNS((ns.rss10, 'textinput'), None)&lt;br /&gt;            o.ignorableWhitespace('\n')&lt;br /&gt;            &lt;br /&gt;        # /item&lt;br /&gt;        for id in items:&lt;br /&gt;            item = self.getItem(id)&lt;br /&gt;            o.startElementNS(&lt;br /&gt;              (ns.rss10, 'item'), None, {(ns.rdf, 'about'):&lt;br /&gt;              item.get((ns.rss10, 'link'), _make_hash(item))})&lt;br /&gt;            o.ignorableWhitespace('\n')&lt;br /&gt;            for name, data in item.items():&lt;br /&gt;                o.ignorableWhitespace('  ')&lt;br /&gt;                if name in rdfResources:&lt;br /&gt;                    o.startElementNS(name, None, {(ns.rdf, 'resource'): data})&lt;br /&gt;                else:&lt;br /&gt;                    if "&amp;lt;" in data:&lt;br /&gt;                        o.startElementNS(name, None, &lt;br /&gt;                          {(ns.rdf, "parseType"): "Literal"})&lt;br /&gt;                    else:&lt;br /&gt;                        o.startElementNS(name, None, {})&lt;br /&gt;                    o.characters(data)&lt;br /&gt;                o.endElementNS(name, None)&lt;br /&gt;                o.ignorableWhitespace('\n')&lt;br /&gt;            o.endElementNS((ns.rss10, 'item'), None)&lt;br /&gt;            o.ignorableWhitespace('\n')&lt;br /&gt;        o.endElementNS((ns.rdf, 'RDF'), None)&lt;br /&gt;        o.endDocument()&lt;br /&gt;        out.seek(0)&lt;br /&gt;        return out.read()&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class TrackingChannel(ChannelBase, UserDict.UserDict):&lt;br /&gt;    """&lt;br /&gt;    RSS Channel modeled as a URI-per-entry dictionary.&lt;br /&gt;    &lt;br /&gt;    Item identifiers are (uri, index) tuples, where uri is&lt;br /&gt;    the rdf:about or rss:link URI, and index indicates the&lt;br /&gt;    position in a list of a number of times that URI has &lt;br /&gt;    appeared in the channel.&lt;br /&gt;    &lt;br /&gt;    This allows "tracking" channels that track the state of&lt;br /&gt;    a group of resources, such as stock tickers, file state&lt;br /&gt;    changes, etc.&lt;br /&gt;&lt;br /&gt;    For example:&lt;br /&gt;    &lt;br /&gt;    {&lt;br /&gt;        (ns.rss10, "channel"):  {&lt;br /&gt;                     (ns.rss10, "title"): "the channel",&lt;br /&gt;                     (ns.rss10, "description"): "whatever",&lt;br /&gt;        },&lt;br /&gt;        (ns.rss10, "items"): &lt;br /&gt;           ["http://example.com/foo", "htp://example.com/bar", ... ],&lt;br /&gt;        "http://example.com/foo" [&lt;br /&gt;              {&lt;br /&gt;                (ns.rss10, "title"): "item 1",&lt;br /&gt;                (ns.rss10, "link"): "http://example.com/",&lt;br /&gt;                (ns.rss10, "description"): "foo",&lt;br /&gt;              },&lt;br /&gt;              {&lt;br /&gt;                (ns.rss10, "title"): "item 1 revised",&lt;br /&gt;                (ns.rss10, "link"): "http://example.com/",&lt;br /&gt;                (ns.rss10, "description"): "foo revisited",&lt;br /&gt;              },&lt;br /&gt;        ]&lt;br /&gt;                &lt;br /&gt;        "http://example.com/bar" [&lt;br /&gt;                ...&lt;br /&gt;        ]&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    """&lt;br /&gt;    &lt;br /&gt;    def __init__(self, data={}):&lt;br /&gt;        ChannelBase.__init__(self)&lt;br /&gt;        UserDict.UserDict.__init__(self, data)&lt;br /&gt;        self.data[(ns.rss10, 'items')] = []&lt;br /&gt;&lt;br /&gt;    def listItems(self):&lt;br /&gt;        return self[(ns.rss10, 'items')]&lt;br /&gt;        &lt;br /&gt;    def addItem(self, item, index=0):&lt;br /&gt;    	if index == -1: index = len(self.data[(ns.rss10, 'items')])&lt;br /&gt;        uri = item.get((ns.rss10, "link"), _make_hash(item)) # shoudn't happen&lt;br /&gt;        if not self.data.has_key(uri):&lt;br /&gt;            self.data[uri] = [item]&lt;br /&gt;        else:&lt;br /&gt;            self.data[uri].append(item)&lt;br /&gt;        self.data[(ns.rss10, 'items')].insert(index, (uri, len(self.data[uri])))&lt;br /&gt;        &lt;br /&gt;    def getItem(self, identifier):&lt;br /&gt;        (uri, index) = identifier&lt;br /&gt;        try:&lt;br /&gt;            return self.data[uri][index-1]&lt;br /&gt;        except (KeyError, IndexError):&lt;br /&gt;            return {}&lt;br /&gt;        &lt;br /&gt;    def getMD(self, name):&lt;br /&gt;        return self.data.get(name, {})&lt;br /&gt;        &lt;br /&gt;    def setMD(self, name, metadata):&lt;br /&gt;        self.data[name] = metadata&lt;br /&gt;&lt;br /&gt;            &lt;br /&gt;    &lt;br /&gt;class CollectionChannel(ChannelBase, UserDict.UserDict):&lt;br /&gt;    """&lt;br /&gt;    RSS Channel modeled as an item-per-entry dictionary.&lt;br /&gt;    &lt;br /&gt;    Each Item is hashed to create a unique entry in the &lt;br /&gt;    dictionary, no matter how many times a particular &lt;br /&gt;    URI is in the channel. &lt;br /&gt;    &lt;br /&gt;    This allows "collection" channels, which are typically&lt;br /&gt;    used for news updates, etc.&lt;br /&gt;    &lt;br /&gt;    For example:&lt;br /&gt;    &lt;br /&gt;    {&lt;br /&gt;        (ns.rss10, "channel"):  {&lt;br /&gt;                     (ns.rss10, "title"): "the channel",&lt;br /&gt;                     (ns.rss10, "description"): "whatever",&lt;br /&gt;                        },&lt;br /&gt;        (ns.rss10, "items"): ["ID1", "ID2", ... ],&lt;br /&gt;        "ID1" {&lt;br /&gt;                (ns.rss10, "title"): "item 1",&lt;br /&gt;                (ns.rss10, "link"): "http://example.com/",&lt;br /&gt;                (ns.rss10, "description"): "foo",&lt;br /&gt;              },&lt;br /&gt;        "ID2" {&lt;br /&gt;                ...&lt;br /&gt;              }&lt;br /&gt;    }&lt;br /&gt;    &lt;br /&gt;    Note that:&lt;br /&gt;    - items are keyed by a hash-data URI; metadata is keyed&lt;br /&gt;       by a (namespace, localname) tuple. &lt;br /&gt;    - (ns.rss10, items) is a property; it cannot be &lt;br /&gt;      manipulated without manipulating the corresponding &lt;br /&gt;      (sub-)items (delete, add)&lt;br /&gt;    - likewise, all item's are properties; adding, deleting,&lt;br /&gt;      appending an item modifies (ns.rss10, items) &lt;br /&gt;      correspondingly    &lt;br /&gt;    """&lt;br /&gt;    &lt;br /&gt;    def __init__(self, data={}):&lt;br /&gt;        ChannelBase.__init__(self)&lt;br /&gt;        UserDict.UserDict.__init__(self, data)&lt;br /&gt;        self.data[(ns.rss10, 'items')] = []&lt;br /&gt;           &lt;br /&gt;    def listItems(self):&lt;br /&gt;        return self.data[(ns.rss10, 'items')]&lt;br /&gt;&lt;br /&gt;    def addItem(self, item, index=0):&lt;br /&gt;        """append an item dictionary to the channel"""&lt;br /&gt;    	if index == -1: index = len(self.data[(ns.rss10, 'items')])		&lt;br /&gt;        ID = _make_hash(item)&lt;br /&gt;        self.data[ID] = item&lt;br /&gt;        self.data[(ns.rss10, 'items')].insert(index, ID)&lt;br /&gt;&lt;br /&gt;    def getItem(self, identifier):&lt;br /&gt;        return self.data.get(identifier, {})&lt;br /&gt;        &lt;br /&gt;    def getMD(self, name):&lt;br /&gt;        return self.data.get(name, {})&lt;br /&gt;        &lt;br /&gt;    def setMD(self, name, metadata):&lt;br /&gt;        self.data[name] = metadata&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;class _XMLGenerator(saxutils.XMLGenerator):&lt;br /&gt;    """&lt;br /&gt;    Modified XMLGenerator.&lt;br /&gt;&lt;br /&gt;    Allows modification of encoding error handling, and tries to&lt;br /&gt;    encode problematic characters as Latin-1 to work around some&lt;br /&gt;    implementations.&lt;br /&gt;    """&lt;br /&gt;    &lt;br /&gt;    def __init__(self, out=None, encoding='iso-8859-1', errors='strict'):&lt;br /&gt;        saxutils.XMLGenerator.__init__(self, out=out, encoding=encoding)&lt;br /&gt;        if out is None:&lt;br /&gt;            out = sys.stdout&lt;br /&gt;        self._out = codecs.lookup(encoding)[3](out, errors)&lt;br /&gt;&lt;br /&gt;    def characters(self, content):&lt;br /&gt;        try:&lt;br /&gt;            self._out.write(sax.saxutils.escape(content))&lt;br /&gt;        except UnicodeError:  # hack for broken content&lt;br /&gt;            self._out.write(sax.saxutils.escape(unicode(content, 'Latin-1')))&lt;br /&gt;        &lt;br /&gt;        &lt;br /&gt;class RSSParser(sax.handler.ContentHandler):&lt;br /&gt;    """&lt;br /&gt;    Multi-format RSS/XML Parser.&lt;br /&gt;    &lt;br /&gt;    Parse XML into RSS Channel objects. May optionally be passed a &lt;br /&gt;    Channel() instance to append to.&lt;br /&gt;    &lt;br /&gt;    Formats understood include:&lt;br /&gt;      - RSS 0.9&lt;br /&gt;      - RSS 0.91&lt;br /&gt;      - RSS 0.92&lt;br /&gt;      - RSS 1.0 (EXCEPT "rich content" modules)&lt;br /&gt;      &lt;br /&gt;    "Core" RSS elements are normalized to the RSS1.0 namespace.&lt;br /&gt;    """&lt;br /&gt;    &lt;br /&gt;    def __init__(self, channel, encoding='utf-8'):&lt;br /&gt;        sax.handler.ContentHandler.__init__(self)&lt;br /&gt;        self.channel = channel&lt;br /&gt;        self.encoding = encoding&lt;br /&gt;        self._context = []&lt;br /&gt;        self._tmp_item = {}&lt;br /&gt;        self._tmp_md = {    (ns.rss10, "channel"): {},&lt;br /&gt;                            (ns.rss10, "image"): {},&lt;br /&gt;                            (ns.rss10, "textinput"): {},&lt;br /&gt;                       }&lt;br /&gt;        self._tmp_buf = ''&lt;br /&gt;        self.version = None&lt;br /&gt;&lt;br /&gt;    def startElementNS(self, name, qname, attrs):&lt;br /&gt;        if name[1] is 'rss':  # sniff version&lt;br /&gt;            if name[0] is None:&lt;br /&gt;                self.version = attrs.get('version', None)&lt;br /&gt;            else: &lt;br /&gt;                self.version = name[0]&lt;br /&gt;        # normalize the rss namespace&lt;br /&gt;        if name[0] in rssNamespaces and name[1] in rssElements:  &lt;br /&gt;            name = (ns.rss10, name[1])&lt;br /&gt;        elif name[0] is None:&lt;br /&gt;            name = (ns.rss091, name[1])&lt;br /&gt;        self._context.append(name)&lt;br /&gt;        if name == (ns.rss10, 'item'):&lt;br /&gt;            self._tmp_item = {}&lt;br /&gt;            self._tmp_buf = ''&lt;br /&gt;        elif len(self._context) &amp;gt; 1 and \&lt;br /&gt;          self._context[-2] == (ns.rss10, 'item') and \&lt;br /&gt;          name in rdfResources:&lt;br /&gt;            self._tmp_item[name] = attrs[(ns.rdf, 'resource')]&lt;br /&gt;		&lt;br /&gt;    &lt;br /&gt;    def endElementNS(self, name, qname):&lt;br /&gt;        # normalize the rss namespace&lt;br /&gt;        if name[0] in rssNamespaces and name[1] in rssElements:  &lt;br /&gt;            name = (ns.rss10, name[1])&lt;br /&gt;        elif name[0] is None:&lt;br /&gt;            name = (ns.rss091, name[1])&lt;br /&gt;        if (ns.rss10, 'item') in self._context:&lt;br /&gt;            if self._context[-1] == (ns.rss10, 'item'):  # end of an item&lt;br /&gt;                self.channel.addItem(self._tmp_item, len(self.channel))&lt;br /&gt;                self._tmp_item = {}&lt;br /&gt;            elif self._context[-2] == (ns.rss10, 'item'):  # an item's child&lt;br /&gt;                if name not in rdfResources:&lt;br /&gt;                    self._tmp_item[name] = self._tmp_buf.strip()&lt;br /&gt;            else:  # an item's grandchild&lt;br /&gt;                pass  ###&lt;br /&gt;        elif len(self._context) &amp;gt; 2 and self._context[-2] in rssSections: &lt;br /&gt;            # metadata&lt;br /&gt;            self._tmp_md[self._context[-2]][name] = self._tmp_buf.strip()&lt;br /&gt;        self._tmp_buf = ''&lt;br /&gt;        self._context.pop()&lt;br /&gt;        &lt;br /&gt;    def endDocument(self):&lt;br /&gt;        for name, metadata in self._tmp_md.items():&lt;br /&gt;            self.channel.setMD(name, metadata)&lt;br /&gt;&lt;br /&gt;    def characters(self, content):&lt;br /&gt;        self._tmp_buf = self._tmp_buf + content.encode(self.encoding)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;def _make_hash(data):&lt;br /&gt;    return "hash-data:SHA:" + sha.new(pickle.dumps(data)).hexdigest()[:20]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;if __name__ == "__main__":&lt;br /&gt;    # a simple test&lt;br /&gt;    c = TrackingChannel()&lt;br /&gt;    c.parse(sys.argv[1])&lt;br /&gt;    print c&lt;/PRE&gt;&lt;PRE&gt;[/code]&lt;br /&gt;&lt;/PRE&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-1708732987477469872?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/1708732987477469872/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/xml-sax-%ED%8C%8C%EC%84%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-rss-%EB%B6%84%EC%84%9D%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1708732987477469872'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1708732987477469872'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/xml-sax-%ED%8C%8C%EC%84%9C%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-rss-%EB%B6%84%EC%84%9D%EA%B8%B0.html' title='xml SAX 파서를 이용한 RSS 분석기.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-647072141333964552</id><published>2010-01-24T20:33:00.000+09:00</published><updated>2010-12-21T01:33:20.743+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='일상'/><category scheme='http://www.blogger.com/atom/ns#' term='일기'/><title type='text'>요즘 블로그에 글을...</title><content type='html'>요즘 블로그에 글을 아이폰 위주로 많이 올리는 것 같다. &lt;br /&gt;워낙 아이폰이 가져다준 국내의 환경변화를 느끼다보니 &lt;br /&gt;쓸려는 글도 많아서 그런 모양이다.&lt;br /&gt;&lt;br /&gt;그래도 리눅스 강의는 계속해야하는데.. ^^;;&lt;br /&gt;조금만 더 나가면 기본강의는 모두 끝나고 전문 강의로 나갈 수 있을 듯하다.&lt;br /&gt;아자~ 조금만 힘내보자...&lt;br /&gt;&lt;br /&gt;그리고 WAS를 공부해야 할듯 하다. 내가 하고자하는 것을 위해서는 &lt;br /&gt;WAS 밖에 답이 없다. &lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-647072141333964552?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/647072141333964552/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%9A%94%EC%A6%98-%EB%B8%94%EB%A1%9C%EA%B7%B8%EC%97%90-%EA%B8%80%EC%9D%84.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/647072141333964552'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/647072141333964552'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%9A%94%EC%A6%98-%EB%B8%94%EB%A1%9C%EA%B7%B8%EC%97%90-%EA%B8%80%EC%9D%84.html' title='요즘 블로그에 글을...'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-5012712319684338882</id><published>2010-01-24T20:27:00.000+09:00</published><updated>2010-12-21T01:33:19.341+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='옴니아2'/><category scheme='http://www.blogger.com/atom/ns#' term='이야기'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='samsung'/><category scheme='http://www.blogger.com/atom/ns#' term='삼성'/><category scheme='http://www.blogger.com/atom/ns#' term='애플'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>스마트폰 만족도 '아이폰' 승.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;오늘 올라온 기사중에 흥미로운게 있다. 얼리어답터들을 대상으로 스마트폰 만족도를 조사한 결과에 대한 기사다. 결과는 아이폰의 압승. 기사에서는 여러가지로 아이폰이 이길수 밖에 없는 이유를 적어놨다. 결론을 'UI'에서 찾는 기사가 대부분이었다.&lt;br /&gt;&lt;br /&gt;하지만 나는 단순하게 UI때문이라고 생각하지 않는다. 분명 아이폰의 UI는 사용하기에 편하다. 그렇다고 해서 기타 국내의 스마트폰이 불편한가? UI의 평가는 사람마다 사용하는 용도에 따라 평가는 극명하게 달라지기 때문에 딱히 UI 때문만일까?&lt;br /&gt;&lt;br /&gt;처음 아이폰이 출시되기전에 많은 사람들은 아이폰과 국내 스마트폰의 하드웨어 제원을 놓고 입씨름을 벌였다. 하드웨어 제원을 놓고 본다면 당연히 국내 스마트폰이 앞도적으로 앞서고 있었고 아이폰이 국내에 들어온다고 하더라도 그 파급효과는 별로 없을거라는 기사까지 등장했었다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XLZ5efn1yJ.png" style="width:517px;height:287px;" alt="아이폰과 T옴니아2 스펙비교."  /&gt;&lt;p class="cap1"&gt;아이폰과 T옴니아2 스펙비교.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;하드웨어의 스펙은 스마트폰을 어떤방향으로 쓰일지에대한 기획을 볼 수 있게한다. 마치 컴퓨터를 조립할때에 인터넷만 할것인지 아니면 일반 사무용으로 할것인지, 게임용으로 할것인지에 따라서 하드웨어 스펙이 달리지는 것과 같은 것이다.&lt;br /&gt;&lt;br /&gt;T옴니아2는 아이폰에 없는 하드웨어 스펙이 많다. DivX 재생, DMB, 영상통화등이다. 거기다 비교가 되는 것이 액정인데 삼성의 경우 'AMOLED'를 채용 고화질을 구현했다. &lt;br /&gt;&lt;br /&gt;처음 이 스펙 비교표를 봤을때 나는 단번에 두 스마트폰이 타켓으로하는 것이 다르다는걸 느낄수 었다. 삼성의 경우는 스마트폰을 '엔터테이먼트'를 타켓으로 기획한 것이고 아이폰은 '비지니스와 실생활'을 타켓으로 기획한 것이라는 것을..... 아이폰의 경우는 엔터테이먼트를 위한 스펙이 아예없다. 있다면 그냥 MP3 플레이정도이다. 액정도 국내에서는 일반 휴대폰에도 채용하지도 않는 LCD를 채용하고 있다. DMB는 아예없다. DMB는 국내업체와 손을 잡았다면 얼마든지 스펙에 포함시킬수 있지만 애플 입장에서는 필요한 요소가 아니었다. 왜? 아이폰은 '비지니스와 일상생활'를 위한 스마트폰을 지향 하고 있기 때문이다. &lt;br /&gt;&lt;br /&gt;스파트폰의 등장으로 무선인터넷 시장이 활기를 띄고 있다. 기존 아이폰이 없었던 시절에는 이렇게 무선인터넷 환경이 활기를 띄었다고 볼수 없었다. 아이폰의 등장으로 무선인터넷 환경이 다시 주목을 받고 있는데 이는 매우 중요한 의미를 갖는다. 무선 인터넷은 시간과 공간을 없앨수 있다는 것은 스마트폰에 핵심 필요요소다. 아이폰은 이를 매우잘 활용한 스마트폰이다.&lt;br /&gt;&lt;br /&gt;실제로 아이폰을 구입한 사람들은 비지니스나 일상생활에 활용하는 사람도 적지 않다. 간단하게 이메일을 활용하고 신문을 읽을수 있으며 소셜 네트워킹이 매우 쉽게 구현되어 있다. 개인생활에는 여행을 한다거나 책을 읽는다거나 학습을 하는 등의 굉장히 많은 것을 아이폰을 통해서 할 수 있다. &lt;br /&gt;&lt;br /&gt;하지만 국내의 스파트폰은 '엔터테이먼트'에 치중한 면이 많다. 개인생활을 위한 애플리케이션은 거의 전멸하다 싶이하고 음악, 동영상 플레이에 치중한다. 이러한 결과는 당연히 일반 휴대폰 시장에서 형성된 포맷을 그대로 가지고 온것임에 틀림이 없다. 적은 비용으로 돈을 벌고자하는 얄팝한 수법의 기획력이 낳은 결과다.&lt;br /&gt;&lt;br /&gt;스마트폰 만족도 조사는 이를 반영한 결과라고 나는 생각한다. 국내의 스마트폰으로 엔터테이먼트 빼고 아이폰만큼 잘 사용할 수 있나를 생각해 보라. 여행정보를 보고 소셜 네트워킹이 쉽게 구현되어 있는지를 생각해보라. 현재로서는 아이폰만이 손안에 작은 PC라는 말을 할 수 있을정도라고 생각한다. &lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-5012712319684338882?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/5012712319684338882/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%8A%A4%EB%A7%88%ED%8A%B8%ED%8F%B0-%EB%A7%8C%EC%A1%B1%EB%8F%84-%EC%95%84%EC%9D%B4%ED%8F%B0-%EC%8A%B9.html#comment-form' title='4개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/5012712319684338882'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/5012712319684338882'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%8A%A4%EB%A7%88%ED%8A%B8%ED%8F%B0-%EB%A7%8C%EC%A1%B1%EB%8F%84-%EC%95%84%EC%9D%B4%ED%8F%B0-%EC%8A%B9.html' title='스마트폰 만족도 &apos;아이폰&apos; 승.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6988698445279455463</id><published>2010-01-23T02:27:00.000+09:00</published><updated>2010-12-21T01:33:16.949+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='이야기'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='스마트폰'/><category scheme='http://www.blogger.com/atom/ns#' term='애플'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><title type='text'>아이폰 시장 구조를 바꾸다.</title><content type='html'>요즘은 휴대폰보다 스마트폰이라는 말을 더 많이 듣는 듯하다. 반년전까지만 해도 스마트폰이라는 얘기보다는 특정 제조사의 값비싼 휴대폰 이름으로 나왔었고 대중들은 그져 값비싼 휴대폰 정도로만 인식했었다.&lt;br /&gt;&lt;br /&gt;그러던것이 몇달전 해외에 유명IT 업체인 애플(Apple)의 아이폰(Iphone)이 출시되면서 드디어 '스마트폰(Smart Phone)'이란 단어가 대중이 사용하게 되었다. 그렇다면 그전에는 왜 스마트폰 이라는 단어가 대중에게 그렇게 인식이 없었던 것일까?&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;스마트폰 시장 비즈니스로 이행.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;스마트폰은 손안의 작은 컴퓨터로 불리운다. 많은 전문가들은 테블릿(Tablet)을 작은 컴퓨터의 시작으로 봐야한다는 입장도 있지만 스마트폰도 엄연히 작은 컴퓨터로서 역활을 충분히 할수 있다고 생각한다. 컴퓨터로 할수 있는 것에는 제약이 없다. 음악을 듣는것은 그야말로 기본이고 게임, 인터넷, 업무처리등 나열하기도 힘들만큼 많다. 이러한 것들을 물론 스마트폰에서도 가능하다. 물론 완전 동일하게 사용하기는 힘이들지만 기본 핵심은 모두 가능하다.&lt;br /&gt;&lt;br /&gt;그런데 &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;국내에선 스마트폰 사용에있어 비지니스 영역이 없었다. 왜? 돈이 안되었기 때문&lt;/span&gt;이다. 국내의 스마트폰 사용에 있어 국내시장은 '엔터테이먼트(Entertainment)'에만 집중했다. 왜냐하면 &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;스마트폰을 휴대폰 시장의 연장으로 봤기 때문&lt;/span&gt;이다. 휴대폰 시장에서는 휴대폰 벨소리, 음악DRM, 게임, 바탕화면등의 콘텐츠로 수익을 냈었다. 국내의 통신사들은 스마트폰의 컨텐츠시장을 휴대폰 시장의 연장으로 봤다. 게임, DMB, 벨소리, 바당화면등으로 수익을 내는 구조를 그대로 가지고 가려했던 것이다. 기존의 시장이 있었고 보다 신규 투자를 하지 않더라도 수익을 계속 낼수 있다는 얄팍한 계산을 했던게 분명하다.&lt;br /&gt;&lt;br /&gt;또 &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;국내 업체는 소비자들 위에 올라 있어야 했다.&lt;/span&gt; 갑과 을의 관계에서 그들은 갑에 있어야 했다. 소비자들이 원하는 것을 충족해주기 보다는 그들이 수익을 많이 낼수 있는 독점적 시장을 구축했다. &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;다양성을 말살하고 업체가 제공하는 콘텐츠외에는 달리 선택할 수 없는 그런 구조를 만들어 소비자들 위에 굴림했다.&lt;/span&gt; 그로인해서 값비싼 기기값과 값비싼 요금을 지불해야만 했지만 소비자들은 달리 선택이 없었다. 하지만 아이폰의 국내 출시로 인해서 이러한 얄팍한 계산으로 구축된 시장이 무너지게 된것이다. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;아이폰의 도입은 이러한 국내의 독점적인 컨텐츠 구조를 바꿔놨다. &lt;/span&gt;게임, 벨소리, 음악DRM 등이 주류였던 시장을 비지니스 시장으로 바꿔놨다. 무선통신을 기반으로하는 비지니스 영역은 메일확인, RSS, 신문읽기, 주식정보, 메모기능, 간단한 오피스 기능등으로 대표되는데, 아이폰은 이러한 비지니스 영역에 중점을 둬 제작된 것이었다. 그야말로 진짜로 '스마트(Smart)'해진 것이다. &lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;철학자체가 틀린 국내업체와 해외 업체.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;아이폰 출시로 말이 많은 나라는 우리나라 밖에 없다.&lt;/span&gt; 그도 그럴것이 전세계 모바일 시장을 석권하고 있는 회사가 국내에 있기 때문이기도 하지만 그보다 더 근본적인 문제는 그동안 국내업체가 자국민에게 보여준 행태를 감추기에 급급해야 했기 때문이다. &lt;br /&gt;&lt;br /&gt;값비싼 요금에 비지니스 활용보다는 엔터테이먼트 활용만 높여온 시장구조와 소비자들의 목소리를 외면한 대가를 혹독하게 치러야 한다는 걸 국내 업체는 이미 알고 있었다. 각종 매체를 동원해 국내의 모바일과 비교를 하면서도 아이폰의 단점만 부각시켜 좋지 않은 이미지를 심어주려고 했던것만 봐도 이를 잘 알수 있다. &lt;br /&gt;&lt;br /&gt;애플(Apple)의 아이폰 시장 구조는 국내의 경우와 매우다르다. &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;많은 경영학자들이 그 동안 주장했던 지식기반 산업구조를 애플(Apple)의 아이폰은 매우 충실하게 따르고 있다.&lt;/span&gt; &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;21세기 지식기반 산업구조는 제공자와 소지자의 구분이 없어지는 것이 핵심&lt;/span&gt;이다. 처음 시작은 제공자에서 시작하지만 이를 발전시키고 확대해나가는 힘은 소비자과 제공자사이의 긴밀한 협업으로 이루어진다는 것이다. 서로간의 피드백(FeedBack)시스템은 이러한 지식의 흐름을 잘 보여주는 예다. 소비자들로부터 받아지는 피드백은 제공자가 제공하던 지식의 흐름을 소비자에게서 다시 받는 것으로 인해서 더욱 커지고 확대되어 소비자들로 다시 돌아오게 된다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;애플은 이러한 구조를 'AppStore'라는 형태로 구현했다.&lt;/span&gt; 애플은 아이폰을 판매할때에 기본적인 베이스만 깔고 판매를 한다. 전화기능, 메일연락기능, 인터넷브라우져, 메모기능등으로 정말 기본적인 요소만을 갖춰 판매하는 것이다. 나머지는 모두 'AppStore'에서 제공받아 확장하는 형태이다.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;'AppStore'는 소비자들의 세계이다. &lt;/span&gt;아이폰을 사용하는 소비자들이 필요로하는 각종 애플리케이션들을 공유하는 공간이기 때문이다. 애플은 'AppStore'에서 소비자들에게 감놔라 배놔라하질 않는다. 소비자들에 의해서 나온 지식들을 소비자들이 공유 할수 있도록하는 구조를 만들어 놓은 것이다. &lt;br /&gt;&lt;br /&gt;이를 통해서 애플이 얻는 이점은 매우 많고 다양하다. 일단 &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;모든것을 애플이 처리하지 않아도 된다.&lt;/span&gt; 소비자의 다양한 욕구를 애플이 하나하나 들어주기위해서 노력할 필요가 없다. 소비자 스스로가 해결할 수 있는 구조를 만들어줌으로써 이러한 비용을 줄인것이다. 'AppStore'에서 유료와 무료가 존재하는데 유료의 경우 판매금액의 '3:7'로 애플과 수익을 배분한다. 애플이 3, 개발자가 7인 것이다. 만일 애플이 모든것을 제공하려고 했다면 수많은 개발비용과 유지비용을 감당해야 했겠지만 이러한 구조에서는 그러한 비용이 애플에게는 전혀 발생하지 않는다.&lt;br /&gt;&lt;br /&gt;하지만 국내는 어떠했는가? &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;애플의 'AppStore'를 본떠 만든 곳이 있다. 그렇지만 운영방법이나 여러가지 측면에서 비교자체가 안된다.&lt;/span&gt; 소위 'Tstore'라고 불리우는 곳은 개발자들보다는 업체의 공간이라고 보는 시각이 지배적이다. 물론 개발업체만 있다고 해서 나쁘다라고 말하는 것이 아니다. 문제는 왜 개발업체만 존재하는지가 관건이다. 'Tstore'에서는 얄팍하게 이러한 개발업체들을 소유하려고 했던게 문제였다. 평등한 관계보다는 여전히 갑과 을의 관계를 유지하면서 독점적인 지위를 유지하려고 했다. 개발업체만 입주를 하다보니 소비자들에게는 전부 유료로만 제공되었다. 개발업체들도 피곤하긴 마찬가지였다. 개발업체가 갑이 아니라 을이 되다보니 제공자가 횡포를 부려도 속수무책 당하고 삭힐수 밖에 없는 구조였다. &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;소비자들로부터 피드백(FeedBack) 받기보다는 독점적 직위를 강화하는데에만 급급한 나머지 소비자들의 원성만 높아갔다. 그런가운데 아이폰의 등장은 이러한 독점적 직위의 시장구조에 타격을 줬다. &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;그동안 국내 기업들은 세계 일류를 외치며 기술개발 및 수출에 온힘을 다해왔지만 최근에는 국내에서 욕을 많은 먹는 상황이다. 왜? &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;소비자들을 고객으로 보기보다는 어떻게 해서든 옮아매고 돈을 쥐어짜는 접근방식을 채택했기 때문&lt;/span&gt;이다. 해외에서는 혹평을 받고 있다고 하지만 국내에서 그들이 구축한 시장구조에서 소비자는 숨통이 막혀 숨울 쉴수가 없었다. 스마트폰 시장뿐만 아니라 가전제품 시장과 자동차 시장에서도 이러한 대기업의 경영 철학으로 인한 원성이 높아지고 있다는 것이 이를 뒷받침한다. &lt;br /&gt;&lt;br /&gt;앞으로 애플뿐만 아니라 구글도 국내시장에 진출을 한다. 벌써 구굴의 모토로이 스마트폰 개통자가 나왔다는 소식도 들여온다. MS에서도 스마트폰 개발에 박차를 가하고 있다는 소식도 들려온다. &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;국내업체들도 반격을 시도하겠지만 잘되기보다는 패할 것&lt;/span&gt;이라는데에 의이를 제기할 사람은 없어 보인다.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6988698445279455463?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6988698445279455463/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%95%84%EC%9D%B4%ED%8F%B0-%EC%8B%9C%EC%9E%A5-%EA%B5%AC%EC%A1%B0%EB%A5%BC-%EB%B0%94%EA%BE%B8%EB%8B%A4.html#comment-form' title='4개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6988698445279455463'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6988698445279455463'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%95%84%EC%9D%B4%ED%8F%B0-%EC%8B%9C%EC%9E%A5-%EA%B5%AC%EC%A1%B0%EB%A5%BC-%EB%B0%94%EA%BE%B8%EB%8B%A4.html' title='아이폰 시장 구조를 바꾸다.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6107921026006056</id><published>2010-01-23T01:10:00.000+09:00</published><updated>2010-12-21T01:33:15.577+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='FileApp'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 앱스'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><title type='text'>아이폰을 사용시 필요한 것들.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;&lt;STRONG&gt;&lt;SPAN style="BACKGROUND-COLOR: #001ea1"&gt;&lt;SPAN style="BACKGROUND-COLOR: #ffffff"&gt;&lt;FONT style="BACKGROUND-COLOR: #ffffff" color=#002fff&gt;무선통신 환경.&lt;/FONT&gt;&lt;/SPAN&gt;&lt;/SPAN&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;아이폰을 구매하게되면 기존 스마트폰과는 다르다는걸 단번에 알수 있다. 아이폰의 핵심은 무선통신이다. 시간과 장소에 구애받지 않고 언제 어디서든 무선 통신을 통해서 메일, 인터넷등을 할수 있다. 아이폰 뿐만아니라 스마트폰의 핵심은 무선 통신이다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;많은 사람들이 아이폰을 사용함에 있어 무선 통신환경을 기반으로 사용을 많이 한다. 그래서 무선 통신환경은 기본이다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XFrIOqzcxX.png" style="width:320px;height:480px;" alt="RSS "  /&gt;&lt;p class="cap1"&gt;아이폰의 무선통신 환경으로 RSS 리더를 이용해 신문기사를 볼수 있다&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;최근에는 집집마다 광통신 환경이 구축이 되어있고 대부분 공유기를 사용하는 집이 많다. 최근의 공유기는 무선랜을 지원해 무선통신 환경도 함께 지원하는 경우가 많다. 그렇지 않고 무선통신 환경이 구축이 되어 있지 않다면 다양한 방법으로 무선통신 환경을 구축할 수있다. &lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;첫번째로는 USB 무선 공유기를 이용하는 방법이다. USB 무선 공유기는 컴퓨터의 USB 포트에 연결을 하면 무선통신 환경을 구축해준다. 시중에 많은 제품이 나와있고 성능도 우수하다. 다만 이를 이용하기 위해서는 컴퓨터를 반듯이 켜줘야 한다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;두번째는 유무선 공유기를 사용하는 방법이다. 마치 랜허브처럼 생겼지만 하나의 외부 WAN망을 공유할수 있도록 RJ-45 포트가 여러개 있다. 그와동시에 무선통신 환경을 지원하는 안테나도 달려있어서 유선, 무선을 모두 공유할수 있게 해준다. 외부 전원을 필요로하지만 컴퓨터에 의존하지 않기 때문에 유무선 공유기만 켜주면 일정한 범위내에서 마음대로 사용할 수 있다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;공유를 위한 Apps 들.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;아이폰이 단점이라면 '이동식 저장 장치'로 활용 할수 없다는 것이다. '이동식 저장 장치'는 USB메모리 처럼 USB포트에 연결을 하면 윈도우즈의 탐색기에서 드라이브로 잡혀 마우스 드레그&amp;amp;드레그를 활용 마음대로 파일을 옮기거나 할수 있도록 해준다. 하지만 아이폰은 이를 지원하지 않아 파일을 옮기나 하고 싶다면 반듯이 'ITunes'를 활용해야 한다. 하지만 'ITunes'의 활용도 만만치 않은게 사실이다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;이를 해결하고자 아이폰에는 Apps들이 많이 나와 있다. 무선통신 환경을 활용하는 방법이 대부분인데 이를 활용하면 FTP나 HTTP를 이용해서 파일을 올리고 내리고 할수 있다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;내가 사용하는 Apps는 'FileApp'라는 프로그램이다. 무료이고 FTP를 이용하기 때문에 대량의 파일을 옮기고 내릴때에 편하다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XDz1feHwjg.png" style="width:520px;height:167px;" alt="FileApp 프로그램." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XDz1feHwjg.png')" /&gt;&lt;p class="cap1"&gt;FTP를 이용해서 아이폰에 파일을 이동할 수 있게 해준다.&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;FileApp를 설치는 App Store를 이용하면 된다. 실행을 하게되면 'Start Here' 디렉토리가 나오고 그 안에서 파일을 업로드 하면 된다. 이 프로그램이 좋은것이 디렉토리별로 혹은 파일별로 정리해주고 날짜별로 소트해서 보여준다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XPmD9Qww5d.png" style="width:320px;height:480px;" alt="FileApp 실행"  /&gt;&lt;p class="cap1"&gt;FileApp 실행활면. 아래부분에 파일을 보는 방법이 나온다.&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;FileApp는 단순히 파일을 보관만하는것이 아니라 파일을 클릭하면 보여주는 기능도 내장되 있다. 이미지 피일을 클릭하면 이미지 뷰어, MP3를 클릭하면 플레이를해준다. FTP를 활용은 대량의 파일을 빠른시간에 옮길수 있게 해줘서 내가 자주 얘용한다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;액정보호필름, 케이스.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;액정보호필름은 아이폰 터치 스크린의 스크래치를 방지해준다. 액정보호필름에도 종류가 다양한만큼 가격대도 천차 만별이다. 액정보호필름을 좋은 것을쓰면 오래도록 사용할 수 있지만 그렇지 않은 경우는 몇달 못가 벗겨지거나 변색이 오는 경우가 있으니까 잘 생각해서 결정해서 구매하도록 하자.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;케이스는 아이폰 자체의 흠집이나 충격으로부터 보호해주는 역활을 해준다. 케이스에도 종류가 다양해서 하드케이스에서 부터 젤리처럼 말랑말랑한 케이스까지 다양하고 가격대도 천천만별이다. 디자인도 다양해서 맘에드는 것을 얼마든지 구매할 수 있다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6107921026006056?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6107921026006056/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%95%84%EC%9D%B4%ED%8F%B0%EC%9D%84-%EC%82%AC%EC%9A%A9%EC%8B%9C-%ED%95%84%EC%9A%94%ED%95%9C-%EA%B2%83%EB%93%A4.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6107921026006056'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6107921026006056'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%95%84%EC%9D%B4%ED%8F%B0%EC%9D%84-%EC%82%AC%EC%9A%A9%EC%8B%9C-%ED%95%84%EC%9A%94%ED%95%9C-%EA%B2%83%EB%93%A4.html' title='아이폰을 사용시 필요한 것들.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-7926151383477260611</id><published>2010-01-19T21:15:00.000+09:00</published><updated>2010-12-21T01:33:14.382+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='불여우'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='파이어폭스'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>파이어 폭스 설치.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;지금까지 기초명령어를 익혔다. 아무리 GUI 데스크탑으로 리눅스를 사용한다고 하지만 기초명령어는 리눅스를 사용하는데 배우지 않으면 안된다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;데스크탑 컴퓨터로 요즘에 제일 많이 하는 것이 인터넷이다. 인터넷을 하기위해서는 당연히 브라우저가 있어야 한다. CentOS를 설치할때 인터넷 브라우저를 설치했었다. 그런데 이게 문제가 좀 있다. 설치시에 X86_64 버전을 설치했다면 기본 브라우저인 '파이어폭스(FireFox)'가 64bit용이 설치가 된다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;64bit가 무슨 문제가 있나라고 생각하겠지만 어도비(Adobe)사의 플래쉬 플레이어(Flash Player)가 동작하지 않는다. 플래쉬 플레이어는 32bit용 밖에 존재하지 않기 때문에 64bit인 파이어폭스에서는 작동이 불가능한 것이다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;또한 기본으로 제공되는 파이어폭스는 최신 배포되는 것과 버전이 차이가 좀 난다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;이를위해서 파이어폭스를 직접 설치해 보자.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XTmEBKjprg.png" style="width:520px;height:462px;" alt="64bit 파이어폭스는 플래쉬 플레이어가 동작하지 않는다." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XTmEBKjprg.png')" /&gt;&lt;p class="cap1"&gt;64bit 파이어폭스는 플래쉬 플레이어가 동작하지 않는다.&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;일단 플래쉬 플레이어가 되지 않아도 기본 설치된 파이어폭스를 실한다. 그리고 나서 'http://www.mozilla.or.kr' URL을 입력하고 파이어폭스 배포 홈페이지로 접속한다. 그러면 중간에 한국어 버전의 파이어폭스를 다운로드 할수있는 버튼이 보인다. 다운로드 받자.&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XaJ76UHpTb.png" style="width:319px;height:83px;" alt="CentOS에 내장된 파이어폭스를 실행한다."  /&gt;&lt;p class="cap1"&gt;CentOS에 내장된 파이어폭스를 실행한다.&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;다운로드 위치는 홈디렉토리의 Desktop 디렉토리안에 있다. 이제부터 터미널 작업을 해야한다. 그리고 root 계정으로 작업을 하도록 한다. 현재 이글을 쓰는 시점에서 파이어폭스의 최신 버전은 '3.5.7'이다. 다음과 같이 설치해주자.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# tar xvjf firefox-3.5.7.tar.bz2&lt;br /&gt;]# ls&lt;br /&gt;firefox/&lt;br /&gt;]# mv firefox /usr/local/firefox_3.5.7&lt;br /&gt;[/code]&lt;br /&gt;&lt;/P&gt;&lt;P&gt;설치는 이것으로 끝난다. 플래쉬 플레이어도 설치해보자. 플래쉬 플레이어는 'http://get.adobe.com/kr/flashplayer/' 에서 배포한다. 접속을 한후에 'Linux 용 .tar.gz' 버전을 선택한다 후에 다운로드 한다. 설치는 다음과 같이 한다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# tar xvzf install_flash_player_10_linux.tar.gz&lt;br /&gt;]# ls &lt;br /&gt;libflashplayer.so&lt;br /&gt;]# mv libflashplayer.so /usr/local/firefox_3.5.7/plugins&lt;br /&gt;[/code]&lt;br /&gt;&lt;/P&gt;&lt;P&gt;위와같이 하면 파이어폭스의 설치와 플래쉬 플레이어설치가 모두 끝났다. 이제 실행을 해야하는데 먼저 root 계정에서 빠져나와서 일반계정으로 돌아온다. 그리고 실행중인 파이어폭스를 끈다. 그리고 다음과 같이 입력한다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]$ /usr/local/firefox_3.5.7/firefox &amp;amp;&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;이제 XFCE dock에 파이어폭스 아이콘을 넣어보자. dock에 넣는 방법은 매우 간단하다. 그림과 같이 추가해보자.&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/Xfp2hPzt3H.png" style="width:520px;height:175px;" alt="파이어폭스 XFCE dock 에 추가하기." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/Xfp2hPzt3H.png')" /&gt;&lt;p class="cap1"&gt;파이어폭스 XFCE dock 에 추가하기.&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;성공했다면 다음과 같이 파이어폭스가 XFCE dock에 추가되어 있을 것이고 누르면 실행이 되어야 한다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XXKFfuTBpF.png" style="width:352px;height:81px;" alt="Firefox의 XFCE의 dock"  /&gt;&lt;p class="cap1"&gt;Firefox의 XFCE의 dock&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-7926151383477260611?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/7926151383477260611/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%ED%8C%8C%EC%9D%B4%EC%96%B4-%ED%8F%AD%EC%8A%A4-%EC%84%A4%EC%B9%98.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7926151383477260611'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7926151383477260611'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%ED%8C%8C%EC%9D%B4%EC%96%B4-%ED%8F%AD%EC%8A%A4-%EC%84%A4%EC%B9%98.html' title='파이어 폭스 설치.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-994486691407003103</id><published>2010-01-18T00:35:00.000+09:00</published><updated>2010-12-21T01:33:13.146+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='아이튠즈'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><category scheme='http://www.blogger.com/atom/ns#' term='itunes'/><title type='text'>ITunes 제약사항 - 컴퓨터 등록.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;아이폰을 사용할때에 반듯이 필요한 소프트웨어가 ITunes 이다. 그런데 &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;ITunes는 소프트웨어임에도 불구하고 총 5대에 한해서만 아이폰과 싱크할 수 있도록 제약&lt;/span&gt;을 걸어놨습니다. 이러한 제약사항을 잘 모르는 분들이 상당하다. 이것에 대해서 좀 더 자세히 알아보겠다.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;먼저 ITunes 를 구동한후에 메뉴에서 '&lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;Store(s)-&amp;gt;컴퓨터인증, 컴퓨터인증 해제&lt;/span&gt;'가 보인다. 이게 바로 ITunes의 제약사항인 총 5대의 컴퓨터등록을 위한 메뉴이다. 컴퓨터 인증을 위해서는 애플에 계정이 있어야 한다. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XdEAgNy4DD.png" style="width:520px;height:375px;" alt="ITunes의 컴퓨터 인증과 해제" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XdEAgNy4DD.png')" /&gt;&lt;p class="cap1"&gt;ITunes의 컴퓨터 인증과 해제&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;/p&gt;컴퓨터 인증을 하고 싶다면 '컴퓨터 인증'을 해제를 하고 싶다면 '컴퓨터 인증 해제'를 하면 된다.&lt;br /&gt;&lt;br /&gt;&lt;p&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XVsYsCm4fk.png" style="width:520px;height:375px;" alt="ITunes의 컴퓨터 인증." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XVsYsCm4fk.png')" /&gt;&lt;p class="cap1"&gt;ITunes의 컴퓨터 인증.&lt;/p&gt;&lt;/div&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;'컴퓨터 인증'을 하면 다음과 같이 애플의 계정을 인증을 물어보는 팝업창이 나온다. 그와 동시에 &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;최대 5대 컴퓨터까지 인증&lt;/span&gt;할 수 있다고 나온다. 해제할때도 위와같이 애플의 계정 인증만으로 해제를 할수 있다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;해제를 하게되면 더 이상 싱크가 되지 않는다. 즉, 아이폰과 연동을 할수 없게되어서 데이터 싱크와 같은 것을 할 수 없게된다. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;만약 5대 컴퓨터를 등록하고 사용하고 있었는데 깜빡하고 컴퓨터를 포맷해버렸으면 어떻게 해야할까? 그럴때는 다음과 같이 한다. (필자가 5대의 컴퓨터를 등록하지 않아서 스크린샷을 찍을 수가 없었다.)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;1.Store(s) -&amp;gt; 내 계정 정보 보기.&lt;/p&gt;&lt;p&gt;2.로그인을 한다.&lt;/p&gt;&lt;p&gt;3.Deauthorize All 을 클릭한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;만약 &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;'Deauthorize All' 를 나타나지 않는다는 경우&lt;/span&gt;는 다음과 같다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p style="font-weight: bold; color: rgb(0, 47, 255);"&gt;1.총 5대의 컴퓨터를 등록하지 않았다.&lt;/p&gt;&lt;p style="font-weight: bold; color: rgb(0, 47, 255);"&gt;2.1년에 한번만 사용할 수 있는데 이미 한번 사용했다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;'Deauthorize All' 도 맘대로 자주 사용할 수 있는 것이 아니니까 조심해서 사용해야 한다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;그래서 &lt;span style="font-weight: bold; color: rgb(255, 0, 0);"&gt;컴퓨터를 포맷하기 전에 반듯이 꼭 ITunes의 컴퓨터 등록을 해제&lt;/span&gt;해 주도록 하자.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;참고 주소:&lt;a target="_blank" href="http://support.apple.com/kb/HT1420?viewlocale=ko_KR"&gt;http://support.apple.com/kb/HT1420?viewlocale=ko_KR&lt;/a&gt;&lt;br /&gt;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-994486691407003103?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/994486691407003103/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/itunes-%EC%A0%9C%EC%95%BD%EC%82%AC%ED%95%AD-%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%93%B1%EB%A1%9D.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/994486691407003103'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/994486691407003103'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/itunes-%EC%A0%9C%EC%95%BD%EC%82%AC%ED%95%AD-%EC%BB%B4%ED%93%A8%ED%84%B0-%EB%93%B1%EB%A1%9D.html' title='ITunes 제약사항 - 컴퓨터 등록.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-246024702374851717</id><published>2010-01-12T23:22:00.000+09:00</published><updated>2010-12-21T01:33:11.774+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='일상'/><category scheme='http://www.blogger.com/atom/ns#' term='일기'/><title type='text'>이번달내로 끝내야할 프로젝트가...</title><content type='html'>이번달 내로 끝내야할 프로젝트가 거의 끝나가고 있다. &lt;br /&gt;전사적으로 뭔가를 관리하기 위해서 하는 프로젝트인데, 요구사항이 많기보다는 좀 까다로워서 살짝 스트레스를 받기도 했었지만 이렇게 끝이 보이니까 나름 뿌듯하다.&lt;br /&gt;&lt;br /&gt;이번에 프로젝트를 하면서 python 1.5 버전도 처음 써봤는데 쓰면서 느낀거는 1.5버전이라기보다는 python의 Syntax 자체가 좀더 표준에 맞게 써야 한다는 것을 느꼈다.&lt;br /&gt;&lt;br /&gt;result.split(':') - 2.x 버전에서는 통함&lt;br /&gt;&lt;br /&gt;string.split(result,':') - 1.5 버전에서 통함.&lt;br /&gt;&lt;br /&gt;원래는 아래처럼 써야하지만 버전이 2.x 를 넘으면서 간소화 해졌다. 1.5버전을 쓰면서 나름 신기한 것도 경험해봐서 좋았던거 같고 무엇보다도 평소에 내가 해봤으면, 회사일 하면서 필요로 하는것을 한다는데에 더 의미가 있어서 열심히 했던것 같다.&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-246024702374851717?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/246024702374851717/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%9D%B4%EB%B2%88%EB%8B%AC%EB%82%B4%EB%A1%9C-%EB%81%9D%EB%82%B4%EC%95%BC%ED%95%A0-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%B0%80.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/246024702374851717'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/246024702374851717'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%9D%B4%EB%B2%88%EB%8B%AC%EB%82%B4%EB%A1%9C-%EB%81%9D%EB%82%B4%EC%95%BC%ED%95%A0-%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%EA%B0%80.html' title='이번달내로 끝내야할 프로젝트가...'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-4297664941751451750</id><published>2010-01-12T22:45:00.000+09:00</published><updated>2010-12-21T01:33:10.390+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='아이튠즈'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><category scheme='http://www.blogger.com/atom/ns#' term='itunes'/><title type='text'>아이폰 제약 사항들.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;아이폰을 사용하는데 있어서 마냥 좋은 것은 아니다. 왜냐하면 일반적으로 국내에서 사용하는 핸드폰이나 스마트폰과 같은 운영 포맷이 아니기 때문이다.&lt;br /&gt;&lt;br /&gt;일단 아이폰을 컴퓨터에 연결했을때 쓰이는 소프트웨어에서부터 문제가 된다. 제작사인 애플(Apple)에서는 &lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;아이폰뿐만 아니라 전화기능이 없는 아이팟도 전부 반듯이 아이튠즈(Itunes)를 이용해야만 하도록 제작&lt;/span&gt;했다. &lt;span style="background-color: rgb(255, 255, 255); color: rgb(0, 47, 255); font-weight: bold;"&gt;아이폰의 운영체제 업데이트, 데이터 백업과 복원, 음악 및 동영상 파일 옮기기 등을 모두 아이튠즈를 이용&lt;/span&gt;해야 한다.&lt;br /&gt;&lt;br /&gt;'별 차이 없는데?'&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XKtDoXWaYa.png" style="width:520px;height:374px;" alt="아이튠즈(Itunes)" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XKtDoXWaYa.png')" /&gt;&lt;p class="cap1"&gt;음악, 동영상 이동은 반듯이 아이튠즈(Itunes)를 통해서 싱크(Sync)해줘야 한다.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;그렇지 않다. 먼저 &lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;아이폰은 이동식 디스크를 지원하지 않는다.&lt;/span&gt; USB로 컴퓨터와 연결했다고 하더라도 이동식 디스크로 쓸수 없다. &lt;br /&gt;&lt;br /&gt;두번째, &lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;음악이나 동영상 파일을 양방향으로 쉽게 옮길 수 없다.&lt;/span&gt; 예전의 휴대폰과 비교를 해보면 뭔가를 할때에 소프트웨어를 이용하는 것에는 동일하지만, 휴대폰의 경우 데이터의 이동이 자유로웠다. 휴대폰에서 컴퓨터로 혹은 컴퓨터에서 휴대폰으로 이동이 자유자재로 마우스 드래그만으로도 이동이 간편했다. 하지만 &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;아이튠즈의 경우는 단방향 데이터 이동만 지원&lt;/span&gt;한다. &lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;아이튠즈에서 데이터를 이동하고 싶다면 먼저 이동시킬 내용을 아이튠즈 소프트웨어에 등록을 한다.&lt;/span&gt; 카테고리를 만들던지해서 등록을 해야 한다. 그리고나서 &lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;싱크(Sync)를 해준다.&lt;/span&gt; 싱크는 아이폰과 이루어진다. 이러한 방법으로 아이폰에 데이터가 전송이 되는 것이다. 그런데, 이렇게 싱크를 시키고 새로운 음악을 넣기위해서 '아~ 예전에 이미 옮겼으니까 아이튠즈의 등록한 목록은 지워야지~' 하고선 기존에 등록했던 &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;목록를 지우고 새로 작성해서 싱크를 맞추면 아이폰에서도 기존 목록은 삭제되고 새로 작성한 목록만 싱크가 된다.&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;세번째, &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;신용카드가 있어야 좋다.&lt;/span&gt; 신용카드는 반듯이 있어야 하는것은 아니다. 그런데 아이폰의 각종 애플리케이션을 사용하고자 한다면 아마 신용카드가 필요할지도 모른다. 왜냐하면 유료 애플리케이션이 많기 때문이다. 물론 무료도 상당수 많이 있다. 무료 애플리케이션도 훌륭하고 쓸만한 것들이 많지만 좀 더 많은 기능을 쓰고자 한다면 유료 애플리케이션을 구매해야 한다. 그런데 그냥 일반 신용카드가 아니라 해외결제가 가능한 비자(VISA) 카드여야 한다는 것이 또 제약사항이다. &lt;br /&gt;&lt;br /&gt;네번째, &lt;span style="font-weight: bold; color: rgb(0, 47, 255);"&gt;아이튠즈는 컴퓨터를 5대까지만 사용할 수 있다.&lt;/span&gt; 이걸 잘 모르는 사람들이 있다. 아이튠즈는 소프트웨어다. 그래서 아무 컴퓨터에서 다 설치 및 사용할 수 있다. 하지만 아이튠즈와 아이폰을 연결해서 사용하는 순간 컴퓨터를 아이튠즈 사용을 위해서 등록해줘야 한다. 등록을 하지 않으면 이용할 수 없음은 물론다. 이렇게 등록을 할 수 있는 컴퓨터 대수가 5대까지이다. 그렇다면 5대 이후로는 못 쓰는 것일까? 이를 해결 수 있는 방법이 있다. 이는 다음 기회에 좀더 자세히 설명 하도록 하겠다.&lt;br /&gt;&lt;br /&gt;다섯번째, &lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;동영상은 MP4만 지원한다.&lt;/span&gt; 최근의 나오는 동영상들은 매우 다양한 포맷으로 나온다. 그런데 아이폰은 mp4 파일만 재생할 수 있다. 이를 위해서 아이튠즈에서는 포맷 변환을 할수 있도록 되어 있다. 그런데 매번 동영상을 넣기위해서 포맷 변환을 해야 하는것은 정말 귀찮은 일이 아닐 수 없다.&lt;br /&gt;&lt;br /&gt;그런데 생각을 바꾸면 그나마 위안이 될 수 있을 듯 하다. 제약사항이라고 생각하기 보다는 그냥 규칙 정도로 생각을 박꿔보자. 사실 &lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;아이튠즈를 이용한 싱크 방법이 정말 귀찮은 방법이긴 하지만 그래도 그렇게 함으로 인해서 쓸데없는 데이터까지 모두 넣구 다니지 않아도 되고 매번 싱크를 할때마다 정말 필요한 데이터인지를 한번도 고민하게 되는듯해서 나름 괜찮다고 생각&lt;/span&gt;하고 있다.&lt;br /&gt;&lt;br /&gt;현재 위의 규칙을 잘 지키면서 잘 애용하고 있다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-4297664941751451750?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/4297664941751451750/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%95%84%EC%9D%B4%ED%8F%B0-%EC%A0%9C%EC%95%BD-%EC%82%AC%ED%95%AD%EB%93%A4.html#comment-form' title='2개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/4297664941751451750'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/4297664941751451750'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%95%84%EC%9D%B4%ED%8F%B0-%EC%A0%9C%EC%95%BD-%EC%82%AC%ED%95%AD%EB%93%A4.html' title='아이폰 제약 사항들.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-4269789075980219945</id><published>2010-01-12T12:53:00.000+09:00</published><updated>2010-12-21T01:33:09.051+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='tar'/><category scheme='http://www.blogger.com/atom/ns#' term='bzip2'/><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='gzip'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='압축해제'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>리눅스 기초 V - 묶기, 압축 및 해제.</title><content type='html'>&lt;P&gt;리눅스는 일반적으로 윈도우즈의 압축과는 약간 다르다. 윈도우즈에서는 압축을 한다고하면 여러파일을 하나로 묶어주는 기능도 함께 제공한다. 그런데 &lt;SPAN style="COLOR: rgb(0,47,255); FONT-WEIGHT: bold"&gt;리눅스에서는 압축은 진짜로 압축만&lt;/SPAN&gt;한다. 파일을 아무리 여러개 줘봤자 딱 한개만 압축을 해준다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;그래서 여러파일을 하나로 묶어주는 명령어가 따로 있다. 이번에는 이렇게 묶는 기능함께 압축과 풀기에 대해서 알아보자.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P style="FONT-WEIGHT: bold"&gt;1.tar - 묶기&lt;/P&gt;&lt;P&gt;'tar' 명령어는 여러파일을 하나의 파일로 묶어주거나 풀어준다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;유용한 옵션들은 다음과 같다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;-c: 여러 파일이나 디렉토리를 묶을때 쓴다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;-v: 진행과정을 보여준다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;-f: 묶음을 파일로 만든다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;-x: 묶음 파일을 풀어준다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;보통 위의 옵션을 조합해서 마치 하나처럼 쓴다. 예를들어 보자.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;*압축&lt;br /&gt;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# tar -cvf test.tar thumnail.jpg Desktop/ &lt;br /&gt;[/code] &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;*해제&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# tar -xvf test.tar&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;간단하다. &lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P style="FONT-WEIGHT: bold"&gt;2.gzip - 압축, 해제.&lt;/P&gt;&lt;P&gt;Gnu zip 으로 압축해준다. 인자로는 파일을 주면 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# gzip test.tar&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위와같이 하면 'test.tar.gz' 파일이 생성이 된다.&lt;br /&gt;&lt;/P&gt;&lt;P&gt;해제는 '-d' 옵션을 주면 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# gzip -d test.tar.gz&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;압출 해제는 'gunzip' 명령어를 사용해도 된다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# gunzip test.tar.gz&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P style="FONT-WEIGHT: bold"&gt;3.bzip2 - 또 다른 압축, 해제 프로그램.&lt;/P&gt;&lt;P&gt;bzip2 압축 프로그램은 gzip 보다 압축률이 좋다. 사용법은 gzip 과 동일하다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# bzip2 test.tar&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위와같이 하면 'test.tar.bz2' 파일이 생성이 된다. &lt;br /&gt;&lt;/P&gt;&lt;P&gt;해제는 '-d' 옵션을 주면 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# bzip2 -d test.tar.bz2&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P style="FONT-WEIGHT: bold"&gt;4.tar 명령어로 묶음과 압축을 동시.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;tar 명령어는 묶음과 동시에 압축을 지웒다. 압축은 gzip, bzip2를 모두 지원하다. 사용법은 다음과 같다.&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;묶음과 압축.&lt;br /&gt;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# tar -cvzf test.tar.gz test &amp;nbsp;&amp;nbsp; // gzip 을 사용할 경우 'z'옵션을 준다.&lt;br /&gt;]# tar -cvjf test.tar.gz test &amp;nbsp;&amp;nbsp; // bzip2 를 사용할 경우&amp;nbsp; 'j' 옵션을 준다.&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;해제.&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# tar -xvzf test.tar.gz test &amp;nbsp;&amp;nbsp; // gzip 을 사용할 경우 'z'옵션을 준다.&lt;br /&gt;]# tar -xvjf test.tar.gz test &amp;nbsp;&amp;nbsp; // bzip2 를 사용할 경우&amp;nbsp; 'j' 옵션을 준다.&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;tar 명령어는 매우 빈번하게 사용하는 명령어중에 하나이다. 왜냐하면 대부분의 리눅스 프로그램의 소스코드 배포는 모두 이렇게 압축해서 배포되기 때문이다. &lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-4269789075980219945?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/4269789075980219945/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88-v-%EB%AC%B6%EA%B8%B0-%EC%95%95%EC%B6%95-%EB%B0%8F-%ED%95%B4%EC%A0%9C.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/4269789075980219945'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/4269789075980219945'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88-v-%EB%AC%B6%EA%B8%B0-%EC%95%95%EC%B6%95-%EB%B0%8F-%ED%95%B4%EC%A0%9C.html' title='리눅스 기초 V - 묶기, 압축 및 해제.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-1086902641782545295</id><published>2010-01-10T22:17:00.000+09:00</published><updated>2010-12-21T01:33:08.011+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 요금제'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='i-라이트'/><title type='text'>나의 아이폰 구매 판단.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;나는 아이폰을 구매하기 전에 많은 사람들에게 아이폰을 대충 사용해봤다. KT의 아이폰 발매 이벤트때에 구매한 회사동료가 상당히 많아서 나는 아이폰을 직접 만져보고 이것저것 알아볼 수 있었다. &lt;br /&gt;&lt;br /&gt;아이폰의 인터페이스나 이런것은 이미 사진이나 유트브에서 많이 봐서 이미 많이 알고 있었다. 그래서 나는 3GS, 32GB를 구매하기로 결심했다. 3G, 3GS는 단지 속도가 빠르다는 차이외에는 다를게 없다. 3GS, 32GB의 단말기 출고가격은 94만 6천원이다. 그런데 이것을 KT에서는 24개월 요금제를 더하고 보조금을 지급하는 기준으로 판매를 하고 있다. &lt;br /&gt;&lt;br /&gt;그런데 KT의 24개월 요금제가 문제였다. 과연 어떤것이 나에게 맞는 요금제일까...&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XGkbwIlAgX.png" style="width:520px;height:355px;" alt="아이폰 단말기 할인가." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XGkbwIlAgX.png')" /&gt;&lt;p class="cap1"&gt;아이폰 단말기 할인가.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;맨 먼저, KT에서 아이폰을 구매하게 되면 요금제 말고 내야할 것이 꽤 된다. 먼저 &lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;보증금 3만원&lt;/span&gt;이 들어간다. 그리고 &lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;가입비를 3개월 분납으로 각각 8천원(총 2만 4천원)&lt;/span&gt;을 내야한다. 그러니까 일단 아이폰을 가입시에 내야하는 돈이라고 생각하고 내야할 &lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;총금액은 5만 4천원&lt;/span&gt;이 된다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XS5l7fHESF.png" style="width:520px;height:194px;" alt="KT 요금제." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XS5l7fHESF.png')" /&gt;&lt;p class="cap1"&gt;KT 요금제.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;KT의 요금제의 내야할 돈을 총합을 생각해보자. 일단 24개월 약정할인 요금제인데 단말기 할인금으로 월 할부가가 내야할 돈이다. 그리고 통신요금이 있는데 이는 기본료를 보면된다. 이렇게 해서 한달에 내야할 총합을 계산해 보면 다음과 같다.&lt;br /&gt;&lt;br /&gt;i-슬림 : 22,000 + 35000 = 57,000 &lt;br /&gt;i-라이트: 16,500 + 45,000 = 61,500&lt;br /&gt;i-미디엄: 11,000 + 65,000 = 76,000&lt;br /&gt;i-프리미엄: 5,500 + 95,000 = 100,500&lt;br /&gt;&lt;br /&gt;일단 &lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;'i-프리미엄'&lt;/span&gt; 은 보자마자 제외했다. 무슨 적금 든것도 아닌데 저렇게 한달에 내야한다는게 말이 안된다고 생각했다. 또 그만큼 쓸것도 아니고....&lt;br /&gt;&lt;br /&gt;&lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;'i-슬림'&lt;/span&gt;은 가격이 싸고 무료로 제공하는 수치도 나에게는 적당한듯 했지만 &lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;'무료Data' 100MB&lt;/span&gt;인게 문에 걸렸다. 그래서 'i-라이트' 요금이 눈에 들어왔다. '무료Data' 500MB 면 한달 실컷 쓸수 있을 것이라고 생각했다. 더군다나 '&lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;i-슬림'과 'i-라이트'와 차이는 월 '4,500' 밖에 차이&lt;/span&gt;가 안난다.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;font style="font-weight: bold; color: rgb(255, 0, 0);" size="4"&gt;(i-라이트) - (i-슬림) = 4,500 원/월&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;4,500원... 이정도면 한달에 충분히 절약하면 아낄수 있을거라 생각했다. &lt;br /&gt;&lt;br /&gt;나는 대리점에서 구매를 했는데 가입할때 내야할 금액 5만 4천원은 그냥 현찰로 당일날 내버렸다. 그리고 'i-라이트'를 선택했다. 그런데 위 요금제는 부가세 미포함된 가격이다. 'i-라이트'의 경우 부가세는 '4,500원'이다. 그래서 월 내야할 총금액은 &lt;span style="color: rgb(0, 47, 255); font-weight: bold;"&gt;'61,500 + 4,500 = 66,000' &lt;/span&gt;이 된다.&lt;br /&gt;&lt;br /&gt;&lt;div style="text-align: center;"&gt;&lt;font style="font-weight: bold;" size="3"&gt;&lt;span style="color: rgb(255, 0, 0);"&gt;i-라이트의 한달 내야할 총요금은 66,000(부가세 + 요금제) 이다.&lt;/span&gt;&lt;/font&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;나름 적당한 요금이라고 생각한다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-1086902641782545295?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/1086902641782545295/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EB%82%98%EC%9D%98-%EC%95%84%EC%9D%B4%ED%8F%B0-%EA%B5%AC%EB%A7%A4-%ED%8C%90%EB%8B%A8.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1086902641782545295'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/1086902641782545295'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EB%82%98%EC%9D%98-%EC%95%84%EC%9D%B4%ED%8F%B0-%EA%B5%AC%EB%A7%A4-%ED%8C%90%EB%8B%A8.html' title='나의 아이폰 구매 판단.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-7855117421909149520</id><published>2010-01-10T21:30:00.000+09:00</published><updated>2010-12-21T01:33:06.872+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='슈퍼유저'/><category scheme='http://www.blogger.com/atom/ns#' term='계정'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>리눅스 기초 III - 슈퍼유저(root)로 전환하기.</title><content type='html'>&lt;P&gt;&lt;SPAN style="COLOR: rgb(255,0,0); FONT-WEIGHT: bold"&gt;리눅스를 데스크탑으로 사용할때는 '일반유저'로 사용하는 것이 좋다.&lt;/SPAN&gt; 막강한 슈퍼유저인 'root'로 사용할시에는 시스템에 모든 작업을 아무런 제약없이 할 수가 있는데, 이게 잘못됐을 경우에는 문제가 된다. &lt;br /&gt;실제로 리눅스를 데스크탑으로 사용할때는 root 권한을 필요로하는 일은 그렇게 많지 않다. 처음 데스크탑 환경을 꾸밀때에만 자주 사용이되어지지 데스크탑이 안정화가 되면 root 권한은 자주 사용되지 않는다.&lt;br /&gt;&lt;br /&gt;그렇다고 해서 일반유저로 사용하다가 root 권한을 사용하고 싶다면 어떻게 할까? 이미 로그인을 해서 여러 프로그램을 사용하고 있는데 다 중단하고 로그아웃을 하고 root로 로그인을 해서 필요한 작업을 한후에, 다시 일반유저로 로그인을 한다 ?&lt;br /&gt;&lt;br /&gt;이 얼마나 비 효율적인가? 이를 위해서 리눅스에서는 &lt;SPAN style="COLOR: rgb(0,47,255); FONT-WEIGHT: bold"&gt;'su' 명령어&lt;/SPAN&gt;를 지원한다. &lt;br /&gt;&lt;br /&gt;'su'는 'root' 유저로만 전환하기 위해서 사용하는 것이 아니다. '&lt;SPAN style="COLOR: rgb(0,47,255); FONT-WEIGHT: bold"&gt;su' 명령어의 맨페이지(Man Page)를 살펴보자.&lt;/SPAN&gt;&lt;br /&gt;&lt;br /&gt;]# man su&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 이 &amp;nbsp; 맨페이지는 GNU 버전의 su 를 설명한다.&amp;nbsp; su 는 한 사용자가 잠시 다른&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 사용자가 될 수 있도록 해준다.&amp;nbsp; 실제 사용자 ID, 그룹 ID, USER의 보충적인&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 그 룹 으로 쉘을 실행한다.&amp;nbsp; USER가 주어지지 않으면 기본적으로 수퍼유저인&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; root 로 설정된다.&amp;nbsp; 실행되는 쉘은 USER의 패스워드 목록에서 찾아오거나 없&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 으 면 /bin/sh 를 수행한다.&amp;nbsp; 만약 USER에 패스워드가 있다면 su 는 실제 사&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; 용자 ID 0 (수퍼유저)가 아닌 한 패스워드를 물어온다.&lt;br /&gt;&lt;br /&gt;그러니까 'su' 명령어의 인자값으로 시스템 계정의 아이디를 주게되면 그 계정으로 잠시 전환하게 되고 인자값을 안주게되면 'root' 계정으로 전환하게 된다. 그리고 당연히 다른 사람의 계정임으로 패스워드를 물어보게 된다. 요약하자면 'su' 명령어는 다른 사용자가 될 수 있게 해준다는 것이다.&lt;br /&gt;&lt;br /&gt;그런데 사용할때는 '-'를 반듯이 해주자. 'su -' 로 사용해야 한다. '-'를 주지 않으면 전환하려는 사용자계정의 환경변수들이 세팅이 되지 않는다. 대표적으로 Path가 설정되지 않는다.&lt;br /&gt;&lt;br /&gt;실제로 사용해보자.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]$ su -&lt;br /&gt;Password:&lt;br /&gt;]# &lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&lt;br /&gt;이제 마음껏 원하는 작업을 한후에 이제 &lt;SPAN style="COLOR: rgb(0,47,255); FONT-WEIGHT: bold"&gt;본인의 계정으로 돌아오고자 한다면 'exit'를 입력&lt;/SPAN&gt;한다.&lt;br /&gt;&lt;br /&gt;[code bash]&lt;br /&gt;]# exit&lt;br /&gt;exit&lt;br /&gt;]$&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-7855117421909149520?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/7855117421909149520/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88-iii-%EC%8A%88%ED%8D%BC%EC%9C%A0%EC%A0%80root%EB%A1%9C-%EC%A0%84%ED%99%98%ED%95%98%EA%B8%B0.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7855117421909149520'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7855117421909149520'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88-iii-%EC%8A%88%ED%8D%BC%EC%9C%A0%EC%A0%80root%EB%A1%9C-%EC%A0%84%ED%99%98%ED%95%98%EA%B8%B0.html' title='리눅스 기초 III - 슈퍼유저(root)로 전환하기.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-227974896129200155</id><published>2010-01-08T13:18:00.000+09:00</published><updated>2010-12-21T01:33:05.383+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='awk'/><category scheme='http://www.blogger.com/atom/ns#' term='cut'/><category scheme='http://www.blogger.com/atom/ns#' term='언어'/><category scheme='http://www.blogger.com/atom/ns#' term='쉘프로그래밍'/><category scheme='http://www.blogger.com/atom/ns#' term='쉘스크립트'/><category scheme='http://www.blogger.com/atom/ns#' term='Bash'/><title type='text'>awk, cut 를 이용한 정해지지 않은 문자열 추출.</title><content type='html'>&lt;P&gt;예를들어 'a b c d' 라는 문자열이 있고 'c d' 이렇게 c 문자 이후 전부를 추출하고 싶다고 합니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이럴경우 방법은 다양한데 awk 에서는 다음과 같이 합니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# echo 'a b c d' | awk '{for (n=3; n&amp;lt;= NF; ++n) printf $n" " }'&lt;br /&gt;c d&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;루프문을 이용해서 추출된 문자를 찍어내도록 하는 거군요. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;printf $n &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이 구문이 신기하네요.. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;cut 를 이용하는 경우는 다음과 같습니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# echo "1 2 3 4 5" | cut -d ' ' -f3-&lt;br /&gt;3 4 5&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;근데 awk 와 cut 는 완연한 차이가 있습니다. 예를들어 볼께요~&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;awk 경우&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# echo '1:2:3:4:5' | awk '{for (n=3; n&amp;lt;= NF; ++n) printf $n }'&lt;br /&gt;345&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;cut 의 경우&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# echo '1:2:3:4:5' |&amp;nbsp; cut -d ' ' -f3-&lt;br /&gt;3:4:5&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;보면 알겠지만 awk 는 구분자를 없앤다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-227974896129200155?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/227974896129200155/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/awk-cut-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%A0%95%ED%95%B4%EC%A7%80%EC%A7%80-%EC%95%8A%EC%9D%80-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%B6%94%EC%B6%9C.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/227974896129200155'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/227974896129200155'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/awk-cut-%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%A0%95%ED%95%B4%EC%A7%80%EC%A7%80-%EC%95%8A%EC%9D%80-%EB%AC%B8%EC%9E%90%EC%97%B4-%EC%B6%94%EC%B6%9C.html' title='awk, cut 를 이용한 정해지지 않은 문자열 추출.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-633814893566106197</id><published>2010-01-04T21:57:00.000+09:00</published><updated>2010-12-21T01:33:04.265+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='계정'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>리눅스 기초 II - 계정 생성하기.</title><content type='html'>&lt;p&gt;리눅스를 처음 설치를 할때 추가로 사용자를 생성하지 않았다면 &lt;strong&gt;&lt;font color="#002fff"&gt;슈퍼유저(SuperUser)&lt;/font&gt;&lt;/strong&gt;인 root만 존재한다. root는 슈퍼유저로 모든 권한을 관리자 계정이다. 윈도우즈로 말하자면 'Administrator' 다. 이렇게 root 계정으로 리눅스를 사용한다는 것은 그만큼 위험하다. 따라서 일반 계정을 생성하고 관리자 권한이 필요할때 잠시 root로 전환해서 작업을하고 다시 일반계정으로 돌아오는 것이 훨씬 안전하다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;먼저 계정을 생성해 보자. &lt;strong&gt;&lt;font color="#ff0000"&gt;계정 생성은 root만이 가능하다.&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;]# useradd [사용할 아이디]&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;자신이 사용하고픈 아이디를 사용하면 된다. 영문 대소문자와 숫자 그리고 특수문자 몇개를 사용할수 있지만 특수문자는 사용을 권장하지 않는다. &lt;a href="mailto:%27@%27,%27/%27"&gt;'@','/'&lt;/a&gt;와 같은 특수문자를 쓴 아이디를 생성했을때 문제가 될수 있기 때문이다. &lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;위와같이 계정을 생성하면 디폴트 &lt;strong&gt;&lt;font color="#002fff"&gt;홈디렉토리(Home Directory)&lt;/font&gt;&lt;/strong&gt;로 설정된 '/home' 디렉토리에 아이디로 디렉토리가 생성된다. '/home/[아이디]' 식으로 디렉토리가 생성되는 것이다. 이 홈디렉토리는 로그인을 했을때 뿌리 사용자의 뿌리 디렉토리가 된다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;아이디를 생성했으면 패스워드도 생성해줘야 한다. 다음과 같이 한다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;]# passwd [바꿀 아이디]&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;passwd 명령어에 아이디를 인자로 준다. '[바꿀 아이디]'라고 한것은 아이디가 이미 있고 패스워드도 그 사람의 아이디를 바꾸어준다. 그래서 아이디를 잘 살펴서 입력해야 한다. 잘못해서 다른 사람의 아이디를 인자로 줘 바꿔버리면 난감하니까...&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;font color="#ff0000"&gt;&lt;strong&gt;패스워드는 일단 사전(Dictionary) 단어를 사용하는것을 피해야한다.&lt;/strong&gt;&lt;/font&gt; 왜냐하면 많은 해킹 프로그램중에 이러한 패스워드 사전 공격 프로그램이 많이 나와있어서 순식간에 계정을 탈취할 수 있기 때문이다. 영문 숫자 조합을 이용해서 쉽게 추적하지 못하도록 해야 한다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;계정 생성이 완료 되었다. 쉽지 않은가? GUI 툴이 없냐고? 당연히 있다. 하지만 난 사용하지 않는다. 왜냐하면 그다지 자주 사용하는 툴이 아니기 때문이다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;이제 root로 로그인 했다면 로그아웃하고 방금 생성한 일반 유저로 로그인을 하자. 앞으로 리눅스의 사용은 모두 일반 유저로 이루어 진다. &lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;다음은 슈퍼유저로 잠시 전환하는 방법에 대해서 알아보도록 하겠다.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-633814893566106197?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/633814893566106197/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88-ii-%EA%B3%84%EC%A0%95-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/633814893566106197'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/633814893566106197'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88-ii-%EA%B3%84%EC%A0%95-%EC%83%9D%EC%84%B1%ED%95%98%EA%B8%B0.html' title='리눅스 기초 II - 계정 생성하기.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6593964891742062011</id><published>2010-01-04T20:51:00.000+09:00</published><updated>2010-12-21T01:33:03.142+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='서울 폭설'/><category scheme='http://www.blogger.com/atom/ns#' term='폭설'/><category scheme='http://www.blogger.com/atom/ns#' term='서울'/><category scheme='http://www.blogger.com/atom/ns#' term='일상'/><category scheme='http://www.blogger.com/atom/ns#' term='일기'/><title type='text'>서울에 폭설....</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;40 몇년만에 폭설.... 25Cm 정도 쌓였다. 서울생활 3년만에 이렇게 눈이 많이 오는걸 보기는 처음이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XEeYha0Iyk.jpg" style="width:520px;height:693px;" alt="원품 밖에 눈이 수북이~" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XEeYha0Iyk.jpg')" /&gt;&lt;p class="cap1"&gt;원품 밖에 눈이 수북이~&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;처음에는 저녁인줄 알았다.. 잠을 너무 많이 자서 낮은 지나버리고 밤인줄만 알았다. 시계를 보니 오전 07:40분... 회사가 근처라서 다행이다 싶어 길을 나섰다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XQzL9sl4VQ.jpg" style="width:520px;height:693px;" alt="서울 폭설~" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XQzL9sl4VQ.jpg')" /&gt;&lt;p class="cap1"&gt;서울 폭설~&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;폭설이었다. 이건 가까워도 펭귄걸음으로 뒤뚱~뒤뚱 걸어가야 할 판이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XdytFtywg9.jpg" style="width:520px;height:693px;" alt="용자 oR 미친?" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XdytFtywg9.jpg')" /&gt;&lt;p class="cap1"&gt;용자 oR 미친?&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이런 날씨에 자동차라니.... 경의를 표한다(?)&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;눈은 그치지않고 오전 내내 왔다. 진짜 만화에서나 나올법하게 눈보라를 일으키면서 오전 내내 계속 왔다. 이게 뭐람....&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XbHajSCZPZ.jpg" style="width:520px;height:693px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XbHajSCZPZ.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;퇴근길 집앞 근처 다른 원룸... 화분에 쌓인 눈이 얼마나 많이 왔는지 짐작케 한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XAHBtqxwFp.jpg" style="width:520px;height:693px;" alt="" onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XAHBtqxwFp.jpg')" /&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;서울은 지금 완전 아수라장이다. 제설작업은 포기해야 한다. 사실 이 상황에서 제설작업 왜 안돼냐고 말하는 것자체가 무의미다. 도로가 한두개가 아니고 길이도 엄청긴데, 그걸 몇만명으로 될것도 아니고 수출입관련 도로나 철도를 중심으로 제설작업을 일단 서둘러 하고 일반 도로는 그후다. 이럴때 제설작업 왜 빨리 않하냐고 하는 사람들 보면 한심하다는 생각마져 든다. (꼬으면 지들이 하던가... )&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6593964891742062011?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6593964891742062011/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%84%9C%EC%9A%B8%EC%97%90-%ED%8F%AD%EC%84%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6593964891742062011'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6593964891742062011'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%84%9C%EC%9A%B8%EC%97%90-%ED%8F%AD%EC%84%A4.html' title='서울에 폭설....'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-2671113011894461763</id><published>2010-01-04T09:50:00.000+09:00</published><updated>2010-12-21T01:33:02.120+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='wmvare'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>CentOS 5.3 + kernel-2.6.18-164 에서 vmware 컴파일 오류</title><content type='html'>리눅스에서 커널을 교체하고 나후에 vmware를 실행시키면 vmware에서는 그 커널에 맞게 각종 모듈들을 컴파일 시키는데 CentOS 5.4에서 커널버전 kernel-2.6.18-164.el5.plus 에서 컴파일을 하다가 Network 모듈에서 오류로 중단된다.&lt;br /&gt;&lt;br /&gt;이는 CentOS 커널의 오류로 인한 것으로 vmware community 와 CentOS community에 보고가 된 상황으로 해결은 다음 파일을 다운로드 받는다.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock left" style="float: left; margin-right: 10px;"&gt;&lt;a href="http://ss.textcube.com/blog/1/17675/attach/XB94sD2ssY.tar" rel="enclosure" &gt;&lt;img src="http://ss.textcube.com/service/blog/image/extension/tar.gif" alt="" style="vertical-align: middle;" /&gt; vmnet.tar&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;위 파일을 다운로드 받아 '/usr/lib/vmware/modules/sources/' 디렉토리에 덮어 씌우고 다시 vmware를 실행하면 에러없이 컴파일이 되고 vmware를 사용할 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-2671113011894461763?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/2671113011894461763/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/centos-53-kernel-2618-164-%EC%97%90%EC%84%9C-vmware-%EC%BB%B4%ED%8C%8C%EC%9D%BC.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/2671113011894461763'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/2671113011894461763'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/centos-53-kernel-2618-164-%EC%97%90%EC%84%9C-vmware-%EC%BB%B4%ED%8C%8C%EC%9D%BC.html' title='CentOS 5.3 + kernel-2.6.18-164 에서 vmware 컴파일 오류'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-2368118359086119304</id><published>2010-01-02T19:03:00.000+09:00</published><updated>2010-12-21T01:33:01.224+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='애플'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><title type='text'>애플(Apple)의 A/S 정책.</title><content type='html'>&lt;P&gt;Iphone은 애플(Apple)에서 만든 스마트폰이다. 스마트폰이든, 뭐든간에 어떤 제품을 구매하기전에 A/S 정책은 매우 중요하다. 아무리 제품이 우수하다고 하더라도 필요로하는 A/S정책이 없다면 구매자들은 구입을 망설이게 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;Iphone이 국내에서 발매된다는 소식에 많은 사용자들이 부푼기대를 가지고 있었지만 애플의 A/S정책은 그동안 국내 기업의 A/S정책과 매우달라 많은 이들이 '않좋다'라는 인식을 지금까지도 하는 모양이다. 그 중심에는 아마 '&lt;FONT color=#002fff&gt;&lt;STRONG&gt;리퍼제품&lt;/STRONG&gt;&lt;/FONT&gt;' 때문이 아닐까 한다. 거기다 MBC 뉴스에서 '아이폰'의 A/S에 대해 '고장나면 끝장난다, 바꿔주지도 않는다'라는 듯이 방송은 사태를 더 악화시키는 듯하다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;애플의 A/S 정책을 논하기 전에 국내 기업의 A/S 정책을 살펴보자. 다들 알겠지만 국내 기업의 A/S 정책은 '교환' 이다. 무상교환. 보통 제품을 구매하면 일정기간 동안의 무상A/S 기간을 보증 받는다. 그 기간에 제품의 하자가 있을 경우 국내 업체는 거의 다 새제품으로 '교환'을 해준다. 제품의 하자라는 것이 소비자의 과오가 아닌 제품 자체의 결함으로 발생한 것을 말한다. 예를들어 노트북을 구매를 하고 3일동안 잘 사용하고 있었는데 전원에 문제가 있는 것인지 자꾸 갑자기 꺼져버리고 하는 문제가 발생했다. 그랬을 경우 A/S 센터에서는 교환을 잘 해준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;하지만 애플은 다르다. 소비자의 과오도 아닌 제품 자체의 결함으로 발생한 제품의 경우, 그것도 구매한지 일주일도 지나지 않았는데도 '교환'을 해주지 않는다. 새제품 대신에 '리퍼제품'을 주는 것이다. 리퍼제품은 고장난 제품을 고쳐서 다시 판매하는 제품을 말한다. 그러니까 누가 몇일 혹은 몇달, 몇년을 썼을 제품을 고친것을 다시 주는 것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이 얼마나 황당한가........ 고쳐서 판매하는 것은 좋지만 고쳤다고 하더라도 그외의 하드웨어 부품들은 이미 몇달동안 사용을 했던 제품이다. 하드웨어에도 수명이 있다. 그 수명이 또 얼마나 남아있을지 그리고 그 부품이 언제 고장날지는 아무도 모르는 것이다. 확실한 것은 새 제품보다 고장날 확률이 높다는 것은 확실하다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그런데 '리퍼제품'이 꼭 고장난 제품만 포함할까? 외국에서는 다음과 같은 경우에도 '리퍼제품'으로 분류해서 재 판매하고 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;1.고객 변심으로 인한 반품.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;미국의 경우 거의 대부분의 제품에는 30일 'return policy'을 보증한다. 어떠한 이유든 30일 이네에 물품을 교환하거나 반품할 수 있는 정책인데, 이렇게 반품이 되면 제조사는 다시 제품의 성능을 테스트하고나서 고장난 부분이 있으면 고치고 그냥 박스만 오픈만 상태면 박스만 다시 포장해서 &amp;nbsp;내놓게 되는데 이런것을 '리퍼제품'으로 분류한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;2.배송중 손상.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;제품을 온라인으로 구매를 하게되면 택배로 제품을 배달 받는데, 이 과정에서 제품에 이상이 생기면 당연히 고객은 이러한 제품을 반품처리하게 된다. 이랬을 경우 제조사는 이 제품을 잘 펴서 고장난 부품을 교체해서 다시 내놓는데 이런것도 '리퍼제품'으로 분류한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;3.외관 손상.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;외곤손상이라고 해석을했지만 영어로는 'Comsmetic Damage'라고 한다. 공장출구에서부터 어떤 이유로든 외관상에 문제가 있는 제품이존재한다. 이러한 제품 또한 회수를해서 문제가 되는 부품을 교체한후에 다시 내놓는데 이런것도 '리퍼제품'으로 분류한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;4.제품 생산시 발생한 문제.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;제품을 생산화는 과정에서 부품 또는 조립과정에서의 잘못으로 인해서 발생한 결함도 다시 회수해서 검사하고 고쳐서 다시 내놓게 되는데 이것을 새제품으로 내놓지 않고 '리퍼제품'으로 내놓게 된다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;5.전시 제품.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;판매 매장에서 전시품으로 사용하던 제품의 경우도 회수를해서 부품을 교체하고 다시 내놓게 되는데 이런것도 '리퍼제품'으로 분류한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;6.재고 처리.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;새로운 모델이 나와서 전 모델을 처리해야하는데 이때 가격할인을 하거나 행사를 통해서 전 모델들을 처리하게되는데 간혹 '리퍼제품'으로도 내놓게 된다. 새 제품임에도 '리퍼제품'으로 내놓는 것이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#002fff&gt;7.재포장 제품.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;어떤 이유로 인해서 사용은 하지 않았는데 박스만 뜯었던 제품도 회수를해서 다시 포장해서 내놓는데 이를 새제품으로 내놓지 않고 '리퍼제품'으로 내놓는다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;이것을 보면, 정말 해외는 많이 다르다는걸 느낀다. 해외에는 '벼룩시장'이 많이 활성화되어 있다. 사람들이 자신이 입고 쓰던 것을 다른 사람에게 판매하는 시장. 해외에서는 '재활용'이 생활인 모양이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그리고 철저함도 보인다. 포망만 뜯긴 제품을 재포장해서 새제품으로 내놓지 않는다. '리퍼제품'이다. 분명 다시 포장만하면 새제품임에는 틀림이 없지만 '리퍼제품'으로 판매를 하는걸 보면서 국내하고 많이 다르다고 느꼈다. 최근에 모 방송사에서 전시제품을 포장만 그럴사하게 해서 새제품으로 속여판다는 것과 비교해보면 제품관리 측면에서는 정말 철저하다는 생각을하게 됐다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;애플도 분명 이러한 '리퍼제품'을 내놓는다. 운좋으면 판매자가 쓰던걸 고친 '리퍼제품'이 아닌 다른 리퍼제품도 받을 수 있다는 것이다. '고장나면 끝~'이라는 생각은 버려야 한다. 그냥 재활용 제품을 쓴다고 생각하는것이 편하다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;ps, 그래도 국내의 교환정책은 좋기는 좋다. 하지만 그 교환된 제품이 새제품이라는 보장을 누가해주나? 눈앞에서 포장을 뜯지 않는 새제품을 주지 않는 이상.... 국내 기업들이 그렇게 호락호락 포장을 뜯지 않는 새제품을 줄까................&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;아이폰을 구매를 하고자하는 사람들은 대리점에서 구매를 하는게 좋다. 그것도 아침에 대리점이 열리자마자 구매하도록 하자. 왜냐하면 구매를하고 나서 당일 저녁 8시가 되기전까지 아이폰에 결함이 발견되면 그렇게 소원하던 '새제품 교환'을 해주기 때문이다. 만일 내가 저녁 6시에 아이폰을 구매를 했는데 다음날에 아이폰에 결함을 발견해도 '리퍼제품'을 받아야 한다. 6시에 구매해서 당일 8시까지는 2시간인데 2시간만에 아이폰의 결함을 발견하기란 쉽지 않다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;그래서 되도록이면 오전에 구매를하고 할수 있는 테스트는 다 해봐야한다. 통화는 잘되는지, 터치는 잘되는지, 음악은 잘 플레이 되는지.... 저녁 8시까지 문제를 발견한다면 '새제품 교환'이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-2368118359086119304?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/2368118359086119304/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%95%A0%ED%94%8Capple%EC%9D%98-as-%EC%A0%95%EC%B1%85.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/2368118359086119304'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/2368118359086119304'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%95%A0%ED%94%8Capple%EC%9D%98-as-%EC%A0%95%EC%B1%85.html' title='애플(Apple)의 A/S 정책.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6957405068536510838</id><published>2010-01-02T14:41:00.000+09:00</published><updated>2010-12-21T01:33:00.299+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='아이폰 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><title type='text'>애플에서 제작한 Iphone 3GS 가이드 동영상.</title><content type='html'>&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;애플에서 제작한 Iphone 3GS 가이드 동영상입니다.&lt;/P&gt;&lt;P&gt;누군가 한글 자막을 넣어놨네요~ 감사~ 감사~~&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/m_NoYSwl4OE?f=videos&amp;amp;app=youtube_gdata"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/m_NoYSwl4OE?f=videos&amp;amp;app=youtube_gdata" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div style="text-align: center; clear: both;"&gt;&lt;object width="425" height="355"&gt;&lt;param name="movie" value="http://www.youtube.com/v/xxXoipHEloM?f=videos&amp;amp;app=youtube_gdata"&gt;&lt;/param&gt;&lt;param name="wmode" value="transparent"&gt;&lt;/param&gt;&lt;embed src="http://www.youtube.com/v/xxXoipHEloM?f=videos&amp;amp;app=youtube_gdata" type="application/x-shockwave-flash" wmode="transparent" width="425" height="355"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;/div&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6957405068536510838?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6957405068536510838/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%95%A0%ED%94%8C%EC%97%90%EC%84%9C-%EC%A0%9C%EC%9E%91%ED%95%9C-iphone-3gs-%EA%B0%80%EC%9D%B4%EB%93%9C-%EB%8F%99%EC%98%81%EC%83%81.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6957405068536510838'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6957405068536510838'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%95%A0%ED%94%8C%EC%97%90%EC%84%9C-%EC%A0%9C%EC%9E%91%ED%95%9C-iphone-3gs-%EA%B0%80%EC%9D%B4%EB%93%9C-%EB%8F%99%EC%98%81%EC%83%81.html' title='애플에서 제작한 Iphone 3GS 가이드 동영상.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-470612220467633762</id><published>2010-01-01T23:25:00.000+09:00</published><updated>2010-12-21T01:32:59.378+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='iphone 3GS'/><category scheme='http://www.blogger.com/atom/ns#' term='iPhone'/><category scheme='http://www.blogger.com/atom/ns#' term='Mobile'/><category scheme='http://www.blogger.com/atom/ns#' term='애플'/><category scheme='http://www.blogger.com/atom/ns#' term='아이폰'/><category scheme='http://www.blogger.com/atom/ns#' term='apple'/><title type='text'>스마트폰 Iphone 3GS 구매.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;스마트폰으로 Iphone 3GS를 구매했다. 월 정액 45,000원 요금제를해서 24개월 할부다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;사실 나는 스마트폰을 사용한 적이 있다. 그것도 스마트폰이 지금처럼 활성화되기전인 2003년에 사용했었다. 매우 훌륭했던... 국내 중소기업이 만든 G-mate에서 개발한 '요피(Yopy)' 다. 리눅스 기반으로 제작되었고 통신사는 SKT로해서 온라인으로 판매가 되었었다. 리눅스 매니아를 통해서 입소를 나기 시작하면서 상당히 인기를 구가했었다. 온라인으로 공동구매를해서 150,000원이라는 파격적인 가격으로 구매했었다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;요피는 해외에서도 인기가 많아서 해외 개발자 사이트가 생길정도였다. 리눅스 기반이었기 때문에 Cross Compile만 하면 리눅스 애플리케이션(Application)들을 모두 사용할 수 있었고 능력있는 개발자들이 많은 프로그램을 개발하기도 했었다. 그런데 G-mate가 없어지면서 A/S가 막히게 되었다. 나는 그래도 요피를 2008년까지 사용했다. 2008년 가을즘에 요피가 고장이 나고 말았다. 키패드가 작동을하지 않는 것이다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;요피의 특징으로는 일반이어폰으로 통화가 가능했다. 그때당시 휴대폰들은 일반 이어폰을 사용할 수 없었다. 전용 휴대폰 이어폰을 사용했어야 했다. 서로 다른 기종끼리는 호환도 안돼서 나는 이게 상당히 불만이었다. 요피는 이어폰으로 음악, 통화까지 가능해서 차에서는 자동으로 핸즈프리가 가능했다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;거기다 다양한 애플리케이션이 아주 많았다. 능력있는 개발자들이 무료로 배포하고 공유했다. 이것은 상당한 매력이다. 요피가 사용자들로 인해서 발전을 거듭할 수 있다는 것은 매우 중요한 것이었다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;나는 이러한 스마트폰을 기달렸다. 기쁘게도 내가 눈여겨보던 기업인 애플(Apple)에서 내가 요피를 사용하면서 필요로 했던 모든기능을 탑재한 아이폰(Iphone)을 개발 발매했다. 물론 구매하기 전에 기 사용자들에게 물어보고 커뮤니티를 통해서 정보도 수집했다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;현재 구매해서 4일째 사용중이다. 지금까지 상당히 만족한다. 옛 요피의 향수를 느끼면서...... 세상 좋아졌구나......&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XVhcivAeeL.png" style="width:505px;height:480px;" alt="스마트폰 Yopy 와 Iphone"  /&gt;&lt;p class="cap1"&gt;스마트폰 Yopy 와 Iphone&lt;/p&gt;&lt;/div&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-470612220467633762?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/470612220467633762/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%8A%A4%EB%A7%88%ED%8A%B8%ED%8F%B0-iphone-3gs-%EA%B5%AC%EB%A7%A4.html#comment-form' title='1개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/470612220467633762'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/470612220467633762'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2010/01/%EC%8A%A4%EB%A7%88%ED%8A%B8%ED%8F%B0-iphone-3gs-%EA%B5%AC%EB%A7%A4.html' title='스마트폰 Iphone 3GS 구매.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>1</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-6719004345831363604</id><published>2009-12-28T22:46:00.000+09:00</published><updated>2010-12-21T01:32:58.527+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='패키지'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><title type='text'>wxGTK</title><content type='html'>pgadmin III 는 PostgreSQL의 GUI 툴이다. 이게 윈도우즈용과 리눅스용으로 rpm으로 배포가 된다. 리눅스용을 설치하기 위해서는 wxGTK가 있어야 한다. CentOS에는 없다.&lt;br /&gt;&lt;br /&gt;파일: &lt;a target="_blank" href="http://orion203.cafe24.com/wxGTK-2.8.7-2.src.rpm"&gt;wxGTK-2.8.7-2.src.rpm&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;CentOS 5.4 에서 작성되었음.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-6719004345831363604?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/6719004345831363604/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2009/12/wxgtk.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6719004345831363604'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/6719004345831363604'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2009/12/wxgtk.html' title='wxGTK'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-8012193530928516984</id><published>2009-12-28T21:41:00.000+09:00</published><updated>2010-12-21T01:32:57.644+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='센토스'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='기초'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux/Centos'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><category scheme='http://www.blogger.com/atom/ns#' term='기초 명령어'/><title type='text'>리눅스 기초 I.</title><content type='html'>데스크탑으로 리눅스를 사용한다고 하더라고 리눅스의 기초 정도는 알고 있어야 한다. 서버 운영자와 같이 전문적인 지식까지는 아니지만 기초정도는 알아야 책이나 기타 매체를 통해서 읽게되는 리눅스 관련 기사나 포스팅을 이해할 수 있기 때문이다. 또 얘기치 못한 사태(부팅이 안된다거나, 화면이 안나온다거나)가 발생했을 때 남에게 도움을 요청해야 하는데 기초 관련 지식도 없다면 도움을 받기란 여간 힘든게 아니다.&lt;br /&gt;&lt;br /&gt;리눅스는 기본적으로 터미널을 기본으로 운영된다. 그래서 마우스 보다는 키보드를 많이 사용해야 한다. 명령어를 입력해서 결과를 보는식이다. 그래서 기초를 배우는데는 기초 명령어를 배우는 것으로 시작한다.&lt;br /&gt;&lt;br /&gt;&lt;P style="FONT-WEIGHT: bold"&gt;기초 명령어.&lt;/P&gt;&lt;P&gt;리눅스를 사용하기 위해서는 명령어를 알고 있어야 한다. 윈도우즈에서와 같이 마우스로 클릭하는 형태도 있기는 하지만 여전히 리눅스는 텍스트 위주의 입력을 많이 한다. &lt;/P&gt;&lt;P&gt;그런데 명령어도 일정한 형태를 가진다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;command [option] [argument]&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;명령어가 있으면 그 명령어에 다양한 동작 방법이나 결과를 얻기 위한 옵션과 그 명령어가 어떤 것을 대상으로 수행될때 주게 되는 인자 형식으로 대부분 사용된다. 물론 옵션, 인자 없이 단독으로 사용할수 도 있다. &lt;/P&gt;&lt;P&gt;또한 리눅스는 대소문자를 구분한다는 것을 알고 있어야 한다. 같은 명령어인데 대문자인것과 소문자인 것은 리눅스는 전혀 다른 별개의 것으로 인식을 한다. &lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;DIV class=autosourcing-stub&gt;&lt;P style="FONT-WEIGHT: bold"&gt;1. ls(list)&lt;/P&gt;&lt;P&gt;ls는 현재 디렉토리에 있는 파일이나 디렉토리들을 보여 준다. &lt;/P&gt;&lt;P&gt;옵션 없이 그냥 사용하게 되면 파일들의 이름만 보여준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;유용한 옵션을 다음과 같다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-l : 파일의 퍼미션, 소유권, 용량, 수정날짜등을 파일이름과 함께 출력.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; 'ls -l'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-a : 숨긴파일을 포함해서 모든 파일을 보여준다. 리눅스에서 숨김파일은 파일 이름 앞에 '.'이 붙는다. &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 'ls -a'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-F : 디렉토리가 있는 것이 파일인지, 디렉토리인지를 구분해준다. 디렉토리라면 이름 뒤에 '/'가 붙는다. &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 'ls -F'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-n : 파일이나 디렉토리의 소유자의 UID와 GID를 보여준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 'ls -n'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-i : 파일이나 디렉토리의 Inode를 보여준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 'ls -i'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-S : 파일을 크기 순으로 정렬한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 'ls -S'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;--color : 출력에 대해서 컬러를 사용할지 않할지를 명시 할수 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 'Always', 'auto', 'yes', 'no'등을 사용할수 있다.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 'ls --color=no'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-c : 파일의 생성 날짜를 나타내 준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 'ls -c'&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-d : 디렉토리 자체에 대한 정보를 표시해준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 'ls temp' &amp;lt;----- temp라는 디렉토리속의 내용을 보여준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 'ls -ld temp' &amp;lt;----- temp라는 디렉토리 자체에 대한 정보를 보여준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;위의 옵션들은 조합해서 사용할수 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; 'ls -la', 'ls -laF', 'ls -lai' 등등~&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P style="FONT-WEIGHT: bold"&gt;2.cd&lt;/P&gt;&lt;P&gt;디렉토리 이동 명령어.&lt;/P&gt;&lt;P&gt;현재 디렉토리에서 이동하고자 하는 디렉토리 경로를 인자로 준다. 경로 지정에는 상대 지정 방법과 절대 지정 방법이 있다. &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; cd temp&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;현재 디렉토리 내의 temp 디렉토리로 이동한다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; cd ..&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;현재 디렉토리에서 상위 디렉토리로 이동한다. 쉽게 말해서 디렉토리를 빠져 나온다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; /-------/usr/local/a&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; | &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ----/sbin/z&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;| &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;|-b&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; |&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ----/temp&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;현재 디렉토리 구조가 위와 같고 현재 z에 위치해 있다고 한다면 상대 경로 지정 방법과 절대 지정 경로 방법은 아래와 같다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;a 디렉토리로 이동.&lt;/P&gt;&lt;P&gt;상대 경로 지정 방법: cd ../../usr/local/a&lt;/P&gt;&lt;P&gt;절대 경로 지정 방법: cd /usr/local/a&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;b 디렉토리로 이동&lt;/P&gt;&lt;P&gt;상대 경로 지정 방법 : cd ../b&lt;/P&gt;&lt;P&gt;절대 경로 지정 방법 : cd /sbin/b&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;temp 디렉토리로 이동&lt;/P&gt;&lt;P&gt;상대 경로 지정 방법 : cd ../../temp&lt;/P&gt;&lt;P&gt;절대 경로 지정 방법 : cd /temp&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P style="FONT-WEIGHT: bold"&gt;3.cp(copy)&lt;/P&gt;&lt;P&gt;파일 복사.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;cp &amp;lt;원본 파일명&amp;gt; &amp;lt;복사 파일명&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;cp a b&amp;nbsp; : a라는 파일을 b라는 파일로 복사하라.&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;&lt;FONT color=#ff0000&gt;주의 : 복사 파일명이 이미 존재하는 파일명과 같을 경우 물어보지 않고 그냥 덮어쓴다.&lt;/FONT&gt;&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;옵션:&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-R: 디렉토리 통체로 복사.&lt;/P&gt;&lt;P&gt;-i : 복사 파일명과 같은 파일이 이미 있을 경우 어떻게 할건지 물어본다. &lt;/P&gt;&lt;P&gt;-a : 원본 파일의 속성, 링크 정보들을 그대로 유지하면서 복사한다. &lt;/P&gt;&lt;P&gt;-p : 원본 파일이 소유주, 그룹, 권한, 시간정보들이 그대로 보존되어 복사된다. &lt;/P&gt;&lt;P&gt;-f : 만약 복사 대상 파일이 이미 있으면 강제로 지우고 복사한다. &lt;/P&gt;&lt;P&gt;-v : 복사 과정을 자세히 보여준다.&lt;SPAN style="FONT-WEIGHT: bold"&gt;&lt;br /&gt;&lt;/SPAN&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P style="FONT-WEIGHT: bold"&gt;4.rm(remove)&lt;/P&gt;&lt;P&gt;파일이나 디렉토리 삭제.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;rm &amp;lt;파일명, 디렉토디명&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;rm a : a라는 파일을 지워라.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;옵션&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-i : 각 파일을 지울때 마다 "지울까요?"라고 물어본다.&lt;/P&gt;&lt;P&gt;-r, R : 디렉토리를 지워준다. &lt;/P&gt;&lt;P&gt;-v : 지우는 정보를 자세하게 보여준다.&lt;/P&gt;&lt;P&gt;-f : 무조건 지운다. 강제 명령어.&lt;/P&gt;&lt;P style="FONT-WEIGHT: bold"&gt;&lt;br /&gt;&lt;/P&gt;&lt;P style="FONT-WEIGHT: bold"&gt;5.mv(move)&lt;/P&gt;&lt;P&gt;파일 이동 또는 이름 변경 명령.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;mv &amp;lt;원본 파일명&amp;gt; &amp;lt;변경파일명&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;변경 파일명이 경로를 포함하게 되면 이동명령이 된다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;mv a b : a라는 파일이름을 b라는 파일이름으로 변경해라.&lt;/P&gt;&lt;P&gt;mv a /usr/local : a라는 파일을 /usr/local 디렉토리로 이동 시켜라.&lt;/P&gt;&lt;P&gt;mv c/ /usr/local : c라는 디렉토리를 /usr/local로 이동시켜라.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;옵션 &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;-i : 각 파일을 지울때 마다 "지울까요?"라고 물어본다.&lt;/P&gt;&lt;P&gt;-v : 지우는 정보를 자세하게 보여준다.&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;SPAN style="FONT-WEIGHT: bold"&gt;6.mkdir(make directory)&lt;/SPAN&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;디렉토리를 만든다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;mkdir &amp;lt;디렉토리명&amp;gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;mkdir a : a라는 디렉토리를 만든다. &lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;옵션&lt;/P&gt;&lt;P&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;-p : 필요한 경우에 상위 경로까지 만든다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;7.file&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;파일이 종류를 보여준다.&lt;/P&gt;&lt;P&gt;파일이 텍스트 인지, 바이너리인지, 윈도우즈 파일인지 리눅스 파일인지를 구분해준다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;8.date&lt;/STRONG&gt;&lt;/P&gt;&lt;P&gt;오늘의 날짜와 시간, 그리고 현재 세팅된 지역시간이 어디인지를 알려준다.&lt;/P&gt;&lt;P&gt;date 명령어는 쉘스크립트(Shell Script)에서 매우 자주 사용하는 명령어이다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;일반 사용자라면 date명령어를 컴퓨터의 시간을 마출때 쓴다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;]# date -s time.bora.net&lt;/P&gt;&lt;/DIV&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-8012193530928516984?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/8012193530928516984/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2009/12/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88-i.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/8012193530928516984'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/8012193530928516984'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2009/12/%EB%A6%AC%EB%88%85%EC%8A%A4-%EA%B8%B0%EC%B4%88-i.html' title='리눅스 기초 I.'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-7128209079229827143</id><published>2009-12-28T21:23:00.000+09:00</published><updated>2010-12-21T01:32:56.737+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='일상'/><category scheme='http://www.blogger.com/atom/ns#' term='일기'/><title type='text'>ATI 9.12 버전 문제 있다!</title><content type='html'>어제 리눅스용 ATI 그래픽 카드 드라이버를 9.12버전으로 올려놓고 컴퓨터를 껐다. 퇴근후 집에 왔는데.. 왠걸...&lt;br /&gt;화면이 안나온다.. -_-;;&lt;br /&gt;커널을 바꿔 다시 설치해봤다. X-windows 설정파일도 다시 해봤다. 다 안됐다.&lt;br /&gt;그래서 결국 9.6 버전으로 롤백 했다. 뭐가 문제일까...&lt;br /&gt;&lt;br /&gt;하여간에 앞으로는 ATI 그래픽 카드 드라이버 업데이트는 조심해야겠다.&lt;br /&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-7128209079229827143?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/7128209079229827143/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2009/12/ati-912-%EB%B2%84%EC%A0%84-%EB%AC%B8%EC%A0%9C-%EC%9E%88%EB%8B%A4.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7128209079229827143'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/7128209079229827143'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2009/12/ati-912-%EB%B2%84%EC%A0%84-%EB%AC%B8%EC%A0%9C-%EC%9E%88%EB%8B%A4.html' title='ATI 9.12 버전 문제 있다!'/><author><name>타키투스</name><uri>http://www.blogger.com/profile/12109692188049770526</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-4769019860571672243.post-8821132476865640947</id><published>2009-12-27T13:38:00.000+09:00</published><updated>2010-12-21T01:32:55.787+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='OS'/><category scheme='http://www.blogger.com/atom/ns#' term='센토드'/><category scheme='http://www.blogger.com/atom/ns#' term='centos'/><category scheme='http://www.blogger.com/atom/ns#' term='Linux'/><category scheme='http://www.blogger.com/atom/ns#' term='리눅스'/><category scheme='http://www.blogger.com/atom/ns#' term='그래픽 카드'/><category scheme='http://www.blogger.com/atom/ns#' term='ATI'/><title type='text'>그래픽 드라이버 설치.</title><content type='html'>&lt;script src='http://ss.textcube.com/service/blog/script/blogger.js' type='text/javascript'&gt;&lt;/script&gt;&lt;P&gt;처음 twm 이나 XFCE4 를 실행하면 해상도가 800x600으로 실행이되고 바꿀수 없게된다. 그것은 리눅스가 그래픽 드라이버를 찾지못했기 때문에 기본 드라이버인 SVGA로 임의로 설정해서 X-Windows를 실행하기 때문이다.&lt;br /&gt;&lt;br /&gt;현재 그래픽 카드는 AMD와 NVIDIA로 양분되어 있다. 그래서 대부분의 그래픽카드라고하면 양사중에 하나를 사용하고 있을것이다. 아, 노트북의 경우는 Intel도 있다. 현재 필자는 AMD 그래픽 카드를 사용중이다. 그래서 이번 챕터에서는 AMD 그래픽 카드를 기준으로 리눅스 드라이버를 설정하는 방법에 대해서 설명해보도록 하겠다.&lt;br /&gt;&lt;br /&gt;AMD는 좀 짜증나게 하는게 있다. 그래픽 드리이버를 찾는 기능이 제대로 동작하지 않는다. 홈페이지 오른쪽 상단에 드라이버를 찾을수 있도록 만들어 놨지만 아주 빈번히 제대로 동작하지 않아서 드라이버를 찾을라고 하면 한참을 헤매야 한다.&lt;br /&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XWjUOPAdCj.png" style="width:520px;height:502px;" alt="AMD 홈페이지." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XWjUOPAdCj.png')" /&gt;&lt;p class="cap1"&gt;AMD 홈페이지.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;그래서 현재 최신의 리눅스용 그래픽 카드 드라이버를 링크 걸어놨다. 64bit 리눅스 드라이버라는 점을 주의해주기 바란다.&lt;br /&gt;&lt;br /&gt;파일: &lt;A href="http://orion203.cafe24.com/ati-driver-installer-9-6-x86.x86_64.run.gz" target=_blank&gt;ati-driver-installer-9-6-x86.x86_64.run.gz&lt;/A&gt;&lt;br /&gt;&lt;br /&gt;AMD 리눅스 그래픽 드라이버의 설치는 일단 X-windows를 필요로 한다. XFCE4로 로그인을 하고 터미널을 하나 띄우도록 하자. 터미널을 실행하는 방법은 아래의 패널(Panel) 왼쪽 두번째 아이콘을 클릭하면 터미널을 뛰울수 있다. 그리고 다음과 같이 입력하도록 하여 드라이버를 다운로드 받도록 하자.&lt;br /&gt;&lt;br /&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XSffNiR7DR.png" style="width:520px;height:328px;" alt="AMD 리눅스 그래픽 드라이버 다운로드." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XSffNiR7DR.png')" /&gt;&lt;p class="cap1"&gt;AMD 리눅스 그래픽 드라이버 다운로드.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;wget은 터미널상에서 파일을 다운로드 해준다. 다운로드 된 파일은 압축되어 있다. 다음과 같이 압축을 해제 해주고 실행권한을 주자.&lt;br /&gt;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# gunzip ati-driver-installer-9-12-x86.x86_64.run.gz&lt;br /&gt;]# chmod 755 ati-driver-installer-9-12-x86.x86_64.run&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&lt;br /&gt;이제 설치할 준비가 다 되었다. 이제 실행을 해보자.&lt;br /&gt;[code bash]&lt;br /&gt;]# ./ati-driver-installer-9-12-x86.x86_64.run&lt;br /&gt;[/code]&lt;br /&gt;&lt;br /&gt;&lt;/P&gt;&lt;P&gt;&lt;div class="imageblock center" style="text-align: center; clear: both;"&gt;&lt;img src="http://ss.textcube.com/blog/1/17675/attach/XfyAyOGhUm.png" style="width:520px;height:322px;" alt="AMD 리눅스 그래픽 드라이버 실행." onclick="TC$PRIV_open_img('http://ss.textcube.com/blog/1/17675/attach/XfyAyOGhUm.png')" /&gt;&lt;p class="cap1"&gt;AMD 리눅스 그래픽 드라이버 실행.&lt;/p&gt;&lt;/div&gt;&lt;br /&gt;드라이버 설치프로그램이 실행이 된다. 이제부터는 그냥 'Continue','Next' 를 누르기만 하면 설치가 진행된다. 그러면 재부팅을 한번 해준다.&lt;br /&gt;&lt;br /&gt;재부팅이 되고 XFCE4를 로그인을 한후에 터미널을 실행시킨다. 이제 설치된 그래픽 드라이버를 X-Windows에 이식을 시켜줘야 한다. 리눅스를 하다보면 늘 느끼는 것이지만 무엇을 바꾸기 위해서는 설정파일을 수정하고 재 시작해주는 절차를 항상 진행하게 된다. 그래픽 드라이버를 이식하는 과정도 마찬가지이다. 이식과정은 다음과 같이 실행하면 된다.&lt;br /&gt;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;]# aticonfig --initial --resolution=1600x1200,1280x1024,1024x768&lt;br /&gt;[/code]&lt;/P&gt;&lt;P&gt;&lt;br /&gt;이것을 실행하면 '/etc/X11/xorg.conf' 파일에 그래픽 드라이브를 이식하게 된다. 해상도는 자신의 모니터에 맞는 해상도를 적어주면 된다. 그리고는 다시 재부팅을 해주자.(재부팅을 하지 않아도 되지만 지금으로는 그렇게 해주자.)&lt;br /&gt;&lt;br /&gt;참고로 나의 설정 파일을 첨부한다.&lt;br /&gt;&lt;/P&gt;&lt;P&gt;[code bash]&lt;br /&gt;Section "ServerLayout"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Identifier &amp;nbsp; &amp;nbsp; "aticonfig Layout"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Screen &amp;nbsp; &amp;nbsp;&amp;nbsp; 0&amp;nbsp; "aticonfig-Screen[0]-0" 0 0&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Files"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Module"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Monitor"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Identifier &amp;nbsp; "aticonfig-Monitor[0]-0"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Option &amp;nbsp; &amp;nbsp;&amp;nbsp; "VendorName" "ATI Proprietary Driver"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Option &amp;nbsp; &amp;nbsp;&amp;nbsp; "ModelName" "Generic Autodetecting Monitor"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Option &amp;nbsp; &amp;nbsp;&amp;nbsp; "DPMS" "true"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Device"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Identifier&amp;nbsp; "aticonfig-Device[0]-0"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Driver &amp;nbsp; &amp;nbsp;&amp;nbsp; "fglrx"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; BusID &amp;nbsp; &amp;nbsp; &amp;nbsp; "PCI:1:0:0"&lt;br /&gt;EndSection&lt;br /&gt;&lt;br /&gt;Section "Screen"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Identifier "aticonfig-Screen[0]-0"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Device &amp;nbsp; &amp;nbsp; "aticonfig-Device[0]-0"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Monitor &amp;nbsp;&amp;nbsp; "aticonfig-Monitor[0]-0"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DefaultDepth &amp;nbsp; &amp;nbsp; 24&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; SubSection "Display"&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Viewport &amp;nbsp; 0 0&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Depth &amp;nbsp; &amp;nbsp; 24&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; EndSubSection&lt;br /&gt;EndSection&lt;br /&gt;[/code]&lt;br /&gt;&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/4769019860571672243-8821132476865640947?l=tacitus-textcube.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://tacitus-textcube.blogspot.com/feeds/8821132476865640947/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://tacitus-textcube.blogspot.com/2009/12/%EA%B7%B8%EB%9E%98%ED%94%BD-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2%84-%EC%84%A4%EC%B9%98.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/8821132476865640947'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/4769019860571672243/posts/default/8821132476865640947'/><link rel='alternate' type='text/html' href='http://tacitus-textcube.blogspot.com/2009/12/%EA%B7%B8%EB%9E%98%ED%94%BD-%EB%93%9C%EB%9D%BC%EC%9D%B4%EB%B2
