<?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-6153142745191547553</id><updated>2012-02-16T11:10:06.730-08:00</updated><category term='C# Tips'/><category term='JavaScript Tips'/><category term='Ruby Tips'/><category term='UTF8'/><category term='javascript'/><category term='mysql'/><category term='Ruby'/><category term='php'/><category term='JAVA Tips'/><category term='PHP Tips'/><category term='캐릭터셋'/><category term='iconv'/><category term='exe'/><category term='Java'/><category term='KSC5601'/><category term='산술오류'/><category term='Programming'/><category term='EditPlus'/><category term='오라클'/><title type='text'>비텐펠트's FastWebDev@log™</title><subtitle type='html'>비텐펠트의 WEB 작업실( Ajax,JQuery,HTML5,PHP,Ruby,MySQL)</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>13</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-2735231419095872657</id><published>2011-05-01T02:02:00.000-07:00</published><updated>2011-05-01T02:02:37.252-07:00</updated><title type='text'>1. Ajax의  개념 및 주요 기술</title><content type='html'>&lt;div class="separator" style="clear: both; text-align: left;"&gt;﻿Ajax란 어떤 새로운 기술이 아닌 지금까지 웹에서 사용되어왔던 Javascript,DHTML,XML,CSS,DOM 등의 기존 기술들을 모아 풍부한 User Interface를 구현하기 위해 정립된 기술의 집합체라고 할 수 있다.&amp;nbsp; 이는 기존 전통적인 웹 구조의 문제점을 해결하기 위해 ActiveX를 의존함으로써 발생한 특정 벤더의 기술 의존과 배포의 문제점을 해결함으로써 현재 가장 널리 쓰이는 WEB2.0의 대표적인 기술이다. &lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;이 장에서는 Ajax의 기본 개념과 주요기술에 알아보고&amp;nbsp; 전통적인 웹구조의 방식과 비교를 통해 그 차이점을 알수 있도록 하였다.&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;1.1 Ajax의&amp;nbsp;개념&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: left;"&gt;﻿&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="http://2.bp.blogspot.com/-CCABA7UwFuQ/TbuoGgvMznI/AAAAAAAAADQ/GkSj_KIIolk/s1600/1111.png" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="640" j8="true" src="http://2.bp.blogspot.com/-CCABA7UwFuQ/TbuoGgvMznI/AAAAAAAAADQ/GkSj_KIIolk/s640/1111.png" width="409" /&gt;&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/6153142745191547553-2735231419095872657?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/2735231419095872657/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2011/05/1-ajax.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/2735231419095872657'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/2735231419095872657'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2011/05/1-ajax.html' title='1. Ajax의  개념 및 주요 기술'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='http://2.bp.blogspot.com/-CCABA7UwFuQ/TbuoGgvMznI/AAAAAAAAADQ/GkSj_KIIolk/s72-c/1111.png' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-1010941220665730999</id><published>2011-03-16T18:35:00.000-07:00</published><updated>2011-05-11T00:14:23.915-07:00</updated><title type='text'>BigPipe : 성능 향상을 위한 웹 페이지 파이프라인</title><content type='html'>http://www.facebook.com/notes/facebook-engineering/bigpipe-pipelining-web-pages-for-high-performance/389414033919&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;웹 사이트의 속도는 페이스북의 가장 중요한 회사 목표 중의 하나이다.&amp;nbsp;이 글에서&amp;nbsp;설명하는 방법으로 페이스북의 속도를 2009년에 두 배로 성공적으로 개선하였다. 우리의 엔지니어링 팀은 몇 가지 핵심 아이디어에 착안하여 이를 가능하게 하였다. 이 훌륭한 기술적 성과의 토대가 되는 'BipPipe'라 불리는 비밀 무기를 여기서 설명하겠다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;BigPipe는 시스템에 제공되는 동적 웹 페이지의 근본적인 재설계이다. 이 일반적인 아이디어는 웹 페이지를 'pagelets'라 불리는 작은 조각으로 나누고 웹 서버와 브라우저의&amp;nbsp;실행 단계에 이를 파이프라인 형식으로 보내는 것이다. 이는 대부분의&amp;nbsp;마이크로프로세서가 수행하는 파이프라인 방식과 유사하다. 최고의 성능을 내기 위해&amp;nbsp;다수의 명령어가 프로세서의 각기 다른 실행유닛(execution unit)에 파이프라인 형식으로 보내진다. BigPipe는 기존 웹 서비스 프로세스의 재설계에 기초한 것이지만 기존 웹 서버나 브라우저를 변경할 필요는 없다. BigPipe는 전적으로 PHP나 JavaScript 안에서만 실행된다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Motivation&lt;br /&gt;&lt;br /&gt;BigPipe를 이해하려면 기존 동적 웹 페이지 서비스 시스템의 문제점을 살펴볼 필요가 있다. 초기 월드 와이드 웹이 만들어질 당시와 별로 달라진게 없던 시절까지의 문제점을 되돌아 보자. 근대의 웹 사이트는 10년 전에 비해서&amp;nbsp;드라마틱하게 동적이고 상호작용적으로 변했으며 전통적인&amp;nbsp;서비스 모델을 고수하는 페이지는 현재의 인터넷 속도를 감당하지 못하게 되었다. 전통적인 모델에서는 사용자 요구사항의 생명 주기가 아래와 같았다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;브라우저가 웹 서버로 HTTP&amp;nbsp;request를&amp;nbsp;보낸다.&lt;br /&gt;&lt;br /&gt;2. 웹 서버는 request를 파싱하여 데이터를 저장소에서 추출하여 HTML 문서를 구성한다. 구성한&amp;nbsp;HTML 문서는&amp;nbsp;HTTP&amp;nbsp;response를 사용하여 클라이언트에게 보낸다.&lt;br /&gt;&lt;br /&gt;3. HTTP&amp;nbsp;response는 인터넷을 통해&amp;nbsp;브라우저로 전송된다.&lt;br /&gt;&lt;br /&gt;4. 브라우저는 웹 서버의 response를 파싱하여 HTML 문서를 나타내는 DOM 트리를 구성하고 HTML 문서에서 참조하는 CSS와 JavaScript 자원을 다운로드한다.&lt;br /&gt;&lt;br /&gt;5. CSS 자원을 다운로드한 후에 브라우저는 CSS를 파싱하여 DOM 트리에 이를 적용한다.&lt;br /&gt;&lt;br /&gt;6. JavaScript 자원을 다운로드한 후에 브라우저는 JavaScript를 파싱하여 이를 실행한다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;전통적인 모델은 현재 웹 사이트에 매우 불편한 구조이다. 시스템의 많은 오퍼레이션이 순차적이고 각각의 오퍼레이션이 오버랩(overlap)될 수 없기 때문이다. JavaScript 다운로드를 지연시키거나 리소스 다운로드를 병렬적으로 진행하는 것과 같은 최적화 기술이 이런 제한을 극복하기 위한 방법으로 웹 커뮤니티에 광범위하게 적용되어 왔다. 그러나, 최적화 기술 중 아주 극소수만이 웹 서버와 브라우저의 순차적 실행 때문에 발생하는 병목 현상을 해결해 줄 뿐이다. 웹 서버가 페이지를 생성하는 작업으로 부하가 걸릴 때 브라우저는 idle 상태가 되며 아무일도 하지 않는다. 웹 서버가 페이지 생성을 완료하여 이를 브라우저에 전송하면 브라우저는 성능 병목(performance bottleneck) 상태가 되며 웹 서버는 더 이상 도움이 되지 않는다. 웹 서버의 페이지 생성 시간을 브라우저의 렌더링 시간과 오버랩하면 종단 간 지연시간을 줄일 수 있을 뿐만 아니라 웹 페이지의 초기 반응을 사용자에게 이른 시간에 보여줄 수 있다. 따라서, 사용자가 인식하는 지연 시간을 상당히 줄일 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;웹 서버의 페이지 생성 시간과 브라우저의 렌더링 시간을 오버랩하는 방법은 Facebook과 같은 리치 웹 사이트에 아주 유용한다.&amp;nbsp;&amp;nbsp;전통적인 Facebook 페이지는 친구 목록, 새&amp;nbsp;피드, 광고 등과 같이 다양한 데이터소스로부터 생성된 데이터를 포함한다.&amp;nbsp;전통적인 페이지 렌더링 모델에서는, 최종 HTML 문서가 구성되어 사용자의 컴퓨터로 전송되기 전에, 이런 데이터를 요청하는 쿼리가 데이터를 반환할 때까지 사용자는 기다려야만 했다. 하나의 느린 쿼리가 이 모든 것들을 잡고 있을 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;How BigPipe works&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;웹 서버와 브라우저의 병렬 구조를 이용하기 위해 BigPipe는 첫 번째로 웹 페이지를 'pagelets'라 불리는 작은 조각으로 분해한다. 마이크로프로세서의 파이프라인처럼 명령어의 생명 주기를 다수의 계층(instruction fetch, instruction decode, execution, register write back 등)으로 쪼개며 BigPipe는 페이지 생성 프로세스를 다음과 같은 단계로 분할한다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;1. 파싱 요청 : 웹 서버는 HTTP request가 정상임을 검사하고 이를 파싱한다.&lt;br /&gt;&lt;br /&gt;2. 데이터 페치 : 웹 서버는 데이터 소스에서 데이터를 페치한다.&lt;br /&gt;&lt;br /&gt;3. 마크업 생성 : 웹 서버는 response를 위한 HTML 마크업을 생성한다.&lt;br /&gt;&lt;br /&gt;4. 네트워크 전송 : 웹 서버에서 브라우저로 response가 전송된다.&lt;br /&gt;&lt;br /&gt;5. CSS 다운로드 : 브라우저는 페이지에 필요한 CSS를 다운로드한다.&lt;br /&gt;&lt;br /&gt;6. DOM 트리 구성과 CSS 스타일링 : 브라우저는 HTML 문서의 DOM 트리를 구성하고 CSS를 적용한다. &lt;br /&gt;&lt;br /&gt;7. JavaScript 다운로드 : 브라우저는 페이지가 참조하는 자바스크립트 자원을 다운로드한다.&lt;br /&gt;&lt;br /&gt;8. JavaScript 실행 : 브라우저는 페이지의 JavaScript 코드를 실행한다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;처음 세 개의 단계는 웹 서버가 실행하고 나머지 네 개 단계는 브라우저가 실행한다. 각 pagelet은 이 모든 단계를 순차적으로 수행해야 한다. 그러나 BigPipe는 몇 개의 pagelet을 각기 다른 단계에서 동시에 수행할 수 있게 한다. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-3jMDE4gy0RQ/TYFh1yQcfQI/AAAAAAAAACo/6Z2sek3VOXM/s1600/63_n.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="316" r6="true" src="https://lh5.googleusercontent.com/-3jMDE4gy0RQ/TYFh1yQcfQI/AAAAAAAAACo/6Z2sek3VOXM/s400/63_n.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;shapetype coordsize="21600,21600" filled="f" id="_x0000_t75" o:preferrelative="t" o:spt="75" path="m@4@5l@4@11@9@11@9@5xe" stroked="f"&gt;&lt;lock aspectratio="t" v:ext="edit"&gt;Pagelets in Facebook home page. Each rectangle corresponds to one pagelet.&lt;/lock&gt;&lt;/shapetype&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;위 그림은 웹 페이지가 어떻게 작은 pagelet으로 분해될 수 있는지 보여주는 예이다(페이스북의 홈페이지이다).&amp;nbsp;페이스북의 홈페이지는 몇 개의 pagelet으로 구성된다: 'composer pagelet', 'navigation pagelet', 'news feed pagelet', 'request box pagelet', 'ads pagelet', 'friend suggestion box', 'connection box' 등. 각 pagelet은 독립적이다. 'navigation pagelet'이 사용자에게 보여질 때 'news feed pagelet'은 서버에서 아직 생성 중일 수 있다.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;BigPipe에서 사용자 요청은&amp;nbsp;다음과&amp;nbsp;같은 생명 주기를 갖는다: &amp;nbsp;브라우저는 HTTP&amp;nbsp;request를 웹 서버로 보낸다.&amp;nbsp;HTTP&amp;nbsp;ruquest를 수신하고 이의 유효성을 판별한 후에 웹 서버는 태그와 태그의 첫 부분이 포함된 열린(unclosed)&amp;nbsp;HTML 문서를 즉시 브라우저로&amp;nbsp;보낸다. 태그는 나중에&amp;nbsp;받게 될 response의 pagelet을 해석하기 위해&amp;nbsp;BigPipe의 자바스크립트 라이브러리를 포함한다. 태그는 페이지의 논리적 구조와 pagelet의 소유 구조를 정의하는 템플릿이다. 예를 들어,&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh6.googleusercontent.com/-4vDg1wXeJRs/TYFlI_l5_vI/AAAAAAAAAC0/cR9leGNrnSk/s1600/divbp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="283" r6="true" src="https://lh6.googleusercontent.com/-4vDg1wXeJRs/TYFlI_l5_vI/AAAAAAAAAC0/cR9leGNrnSk/s320/divbp.jpg" width="320" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;첫 번째 response를 클라이언트에게 전송하고 웹 서버는 순차적으로 각 pagelet을 생성하는 작업을 계속한다. pagelet이 생성되자마자 이에 해당하는 response는 즉시 JSON 형식으로 인코딩된 객체로 클라이언트에게 전송된다. JSON 형식의 객체는 pagelet이 필요한 모든 CSS와 자바스크립트, HTML&amp;nbsp;콘텐츠, 메타데이터를 포함한다. &lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh4.googleusercontent.com/-AZU4UmNPn3E/TYFk_Imu8aI/AAAAAAAAACw/DgvFBYSJNHc/s1600/jsbp.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="55" r6="true" src="https://lh4.googleusercontent.com/-AZU4UmNPn3E/TYFk_Imu8aI/AAAAAAAAACw/DgvFBYSJNHc/s400/jsbp.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;br /&gt;클라이언트 측에서는 pagelet에 대한 response를 'onPageletArrive' 호출을 통해 받으며 이 호출을 받자마자, BigPipe의 자바스크립트 라이브러리는 CSS 자원을 먼저 다운로드하고 CSS 다운로드가 완료되면 BigPipe는 pagelet이 보여질 부분에 해당하는 Div의 innerHTML에 pagelet의 HTML 마크업을 설정하여 pagelet을 보여준다. 다수의 pagelet의 CSS는 동시에 다운로드될 수 있으며 어떤 CSS가 먼저 다운로드되는지에 따라 순서 없이 보여질 수 있다. BigPipe에서는, 자바스크립트 자원은 CSS와 콘텐츠보다 낮은 우선순위를 갖는다. 그러므로 BigPipe는 페이지의 모든 pagelet이 보여질 때까지 자바스크립트 다운로드를 시작하지 않는다. 모든 pagelet의 자바스크립트가 비동기적으로 다운로드된 후에&amp;nbsp;pagelet의 자바스크립트 설치 코드가 실행된다. 물론 먼저 다운로드된 자바스크립트 코드가 먼저 실행된다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;이렇게 높은 병렬 시스템의 결과로 몇 개의 pagelet은 다른 단계에서 동시에 실행되기도 한다. 예를 들면, 브라우저는 세 개의 pagelet에 대한 CSS를 다운로드하면서 다른 pagelet의 콘텐트를 렌더링할 수 있다. 이때 서버는 다른 pagelet의 response를 생성하고 있을 수 있다. 사용자 관점에서는 페이지는 순차적으로 렌더링된다. 페이지의 처음 부분을 이른 시간에 보여줄 수 있어 페이지의 지연 시간을 드라마틱하게 향상시킨다. 이런 차이점을 확인하고 싶다면 다음 두 개의 링크를 방문해 보라.&amp;nbsp;&lt;a href="http://www.facebook.com/home.php?big_pipe=singleflush"&gt;Traditional model&lt;/a&gt;과 &lt;a href="http://www.facebook.com/home.php?big_pipe=pipeline"&gt;BigPipe&lt;/a&gt;. 첫 번째 링크는 전통적인 한 개의 flush 모델을 사용하여 페이지를 렌더링한다. 두&amp;nbsp;번째&amp;nbsp;링크는 BigPipe의 파이프라인 모델을 사용하여 페이지를 렌더링한다. 두 개 페이지의 로딩 시간 차이는 오래된 버전의 브라우저를 사용하거나 네트워크 속도가 느리거나, 브라우저 캐시가 오염되었을때 더 극명하게 벌어진다. &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Performance results&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;아래 그래프는 75%의 사용자가 페이지에서 가장 중요한 콘텐트(news feed는 페이스북 홈페이지에서 가장 중요한 콘텐트로 취급된다)를 보는데 전통적인 모델과 BigPipe 모델에서 걸리는 지연시간을 비교한 자료이다. 이 데이터는 콜드(cold) 브라우저 캐시를 가진 브라우저를 사용하여 페이스북 홈페이지를 50번 로딩하는 방법으로 수집하였다. 이 그래프는 BigPipe가 사용자가 인식하는 지연시간을 대부분의 브라우저에서 반으로 줄여줌을 보여준다.&lt;br /&gt;&lt;br /&gt;&lt;div class="separator" style="clear: both; text-align: center;"&gt;&lt;a href="https://lh5.googleusercontent.com/-fA9jp4bKj5Y/TYFjC9jkr1I/AAAAAAAAACs/id3uvsKp5zg/s1600/65.jpg" imageanchor="1" style="margin-left: 1em; margin-right: 1em;"&gt;&lt;img border="0" height="231" r6="true" src="https://lh5.googleusercontent.com/-fA9jp4bKj5Y/TYFjC9jkr1I/AAAAAAAAACs/id3uvsKp5zg/s400/65.jpg" width="400" /&gt;&lt;/a&gt;&lt;/div&gt;&lt;div class="바탕글"&gt;&lt;br /&gt;&lt;/div&gt;&lt;br /&gt;&amp;nbsp;페이스북의 홈페이지와 상호작용하는 지연시간 &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;BigPipe가 마이크로프로세서의 파이프라인 방식에서 고안되었음은 말할 필요도 없지만, BigPipe에 의해 수행되는 파이프라인과 마이크로프로세서의 파이프라인과는 약간의 차이점이 있다. 예를 들면, BigPipe의 대부분의 단계가 한 번에 하나의 pagelet에서만 동작하지만 CSS와 자바스크립트 다운로드와 같은 어떤 단계에서는 동시에 여러 개의 pagelet에서 수행되기도 한다. 이는 수퍼스칼라 마이크로프로세서와 유사하다. 다른 중요한 차이점은, BigPipe에서는&amp;nbsp;병렬 프로그래밍에서 차용한 'barrier' 개념을 사용한다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153142745191547553-1010941220665730999?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/1010941220665730999/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2011/03/bigpipe_16.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/1010941220665730999'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/1010941220665730999'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2011/03/bigpipe_16.html' title='BigPipe : 성능 향상을 위한 웹 페이지 파이프라인'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><media:thumbnail xmlns:media='http://search.yahoo.com/mrss/' url='https://lh5.googleusercontent.com/-3jMDE4gy0RQ/TYFh1yQcfQI/AAAAAAAAACo/6Z2sek3VOXM/s72-c/63_n.jpg' height='72' width='72'/><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-7431123208221206096</id><published>2011-03-15T17:57:00.000-07:00</published><updated>2011-03-15T17:57:47.210-07:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C# Tips'/><title type='text'>notepad++ 실행파일 설정</title><content type='html'>&lt;strong&gt;notepad++\plugins\Config\npes_saved.txt&lt;/strong&gt; &lt;br /&gt;&lt;span style="color: #666699;"&gt;::JAVA Compile&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;cmd /c cd "$(CURRENT_DIRECTORY)" &amp;amp;&amp;amp; "javac" "$(FULL_CURRENT_PATH)" &amp;nbsp;&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;::JAVA Run&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;cd $(CURRENT_DIRECTORY)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;cmd /k cd $(CURRENT_DIRECTORY) &amp;amp;&amp;amp; "java" "$(NAME_PART)" &amp;amp;&amp;amp; exit&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;::C#2.0 Compile&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;cd $(CURRENT_DIRECTORY)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;cmd /k cd $(CURRENT_DIRECTORY) &amp;amp;&amp;amp;&amp;nbsp; "C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe" "$(FULL_CURRENT_PATH)" &amp;amp;&amp;amp; exit&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;cmd /k $(NAME_PART) &amp;amp;&amp;amp; exit&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;notepad++\plugins\Config\NppExec.ini&lt;/strong&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;[Console]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;Visible=0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;ShowHelp=0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;Encoding=17&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;SaveOnExecute=0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;CmdHistory=1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;SaveCmdHistory=1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;NoInternalMsgs=0&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;TextColorNormal=0(6)&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;TextColorError=A01010&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;TextColorMessage=208020&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;BackgroundColor=00&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;[Restore]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;LastSelectedScript=1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;[UserMenu]&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;NppMacrosSubmenu=1&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;0="JAVA Compile :: JAVA Compile"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;1="JAVA Run :: JAVA Run"&lt;/span&gt;&lt;br /&gt;&lt;span style="color: #666699;"&gt;2="C#2.0 Compile :: C#2.0 Compile"&lt;/span&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153142745191547553-7431123208221206096?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/7431123208221206096/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2011/03/notepad.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/7431123208221206096'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/7431123208221206096'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2011/03/notepad.html' title='notepad++ 실행파일 설정'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-704823768771004529</id><published>2010-11-12T21:01:00.000-08:00</published><updated>2011-01-11T04:58:06.759-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='C# Tips'/><title type='text'>ODP.NET를 이용한 오라클과 C#연동 샘플</title><content type='html'>&lt;BLOCKQUOTE&gt;&lt;P&gt;using System;&lt;br /&gt;using System.Collections.Generic;&lt;br /&gt;using System.Linq;&lt;br /&gt;using System.Text;&lt;br /&gt;using Oracle.DataAccess.Client;&lt;/P&gt;&lt;P&gt;namespace Oracle&lt;br /&gt;{&lt;br /&gt;&amp;nbsp; &amp;nbsp; class Class1&lt;br /&gt;&amp;nbsp; &amp;nbsp; {&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; static void Main(string[] args)&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; try&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; &amp;nbsp; &amp;nbsp; string connstring =&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; "Data Source=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=ora-002.cafe24.com)(PORT=1521))" +&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; "(CONNECT_DATA=(SID=orcl)));User Id=myID;Password=myPWD;";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; using (OracleConnection conn = new OracleConnection(connstring))&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; &amp;nbsp; &amp;nbsp; conn.Open();&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; Console.WriteLine("접속 성공");&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; string sql = "select test from testdb";&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; using (OracleCommand comm = new OracleCommand(sql, conn))&lt;br /&gt;&amp;nbsp; &amp;nbsp; &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; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; using (OracleDataReader rdr = comm.ExecuteReader())&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; {&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; while (rdr.Read())&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; {&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; Console.WriteLine(rdr.GetString(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; Console.ReadLine();&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; }&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; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; &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; }&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; catch&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; &amp;nbsp; &amp;nbsp; Console.WriteLine("접속 실패");&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; }&lt;br /&gt;&amp;nbsp; &amp;nbsp; }&lt;br /&gt;}&lt;br /&gt;&lt;/P&gt;&lt;/BLOCKQUOTE&gt;&amp;nbsp;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153142745191547553-704823768771004529?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/704823768771004529/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2010/11/odpnet%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%98%A4%EB%9D%BC%ED%81%B4%EA%B3%BC-c%EC%97%B0%EB%8F%99-%EC%83%98%ED%94%8C.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/704823768771004529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/704823768771004529'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2010/11/odpnet%EB%A5%BC-%EC%9D%B4%EC%9A%A9%ED%95%9C-%EC%98%A4%EB%9D%BC%ED%81%B4%EA%B3%BC-c%EC%97%B0%EB%8F%99-%EC%83%98%ED%94%8C.html' title='ODP.NET를 이용한 오라클과 C#연동 샘플'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-7770768587940794777</id><published>2010-11-04T03:18:00.000-07:00</published><updated>2011-01-11T04:58:05.845-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='산술오류'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript Tips'/><title type='text'>자바스크립트 산술 오류</title><content type='html'>&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;blockquote&gt;&lt;p&gt;&amp;lt;html&amp;gt;&lt;br /&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script language='javascript'&amp;gt;&lt;br /&gt;       function test(){&lt;br /&gt;                var a= 20.31;&lt;br /&gt;                var b=100;&lt;br /&gt;     &lt;br /&gt;                alert("js:" + a*b );&lt;br /&gt;                alert("vb:" + vbs(a,b));&lt;br /&gt;&lt;br /&gt;       }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script language=vbscript&amp;gt; &lt;br /&gt;       function vbs(a, b) &lt;br /&gt;                  vbs = a*b &lt;br /&gt;	              msgbox(vbs)&lt;br /&gt;       end function&lt;br /&gt;&amp;lt;/script&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;         &amp;lt;input type="button" value="javascript"  onclick="test()" &amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt; 위의 소스는 VB스크립트와 자바스크립트의 연산작동을 비교한것입니다.&lt;/p&gt;&lt;p&gt;자바스크립트에서 출력할때는 &lt;/p&gt;&lt;p&gt;&lt;br /&gt;js:2030.9999999999997&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;vb:2030.9999999999997&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;라고 나오죠. 그럼 VB스크립트에서 찍은 값은 어떻게 나올까요? &lt;/p&gt;&lt;p&gt;네.    2031 이라고 나옵니다. &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;테스트를 IE에서 해서 그런지는 모르겠지만 VB스크립트가 정확한 답을 줍니다.&lt;/p&gt;&lt;p&gt;오페라나 파이어폭스,구글크롬에서는 VB스크립트가 작동하지 않네요.&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;blockquote&gt;&lt;p&gt;&amp;lt;html&amp;gt;&lt;/p&gt;&lt;p&gt;&amp;lt;head&amp;gt;&lt;br /&gt;&amp;lt;script language='javascript'&amp;gt;&lt;br /&gt;        function test(){&lt;br /&gt;                  var a= 20.31;&lt;br /&gt;                  var b= 100;&lt;br /&gt;                 &lt;strong&gt; var  c = a*b;&lt;/strong&gt;&lt;br /&gt;                 &lt;strong&gt; d= c.toFixed(0);&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;                 &lt;strong&gt; alert("js:" + d );&lt;/strong&gt;&lt;br /&gt;                  alert("vb:" + vbs(a,b));&lt;br /&gt;&lt;br /&gt;        }&lt;br /&gt;&amp;lt;/script&amp;gt;&lt;br /&gt;&amp;lt;script language=vbscript&amp;gt; &lt;br /&gt;        function vbs(a, b) &lt;br /&gt;                    vbs = a*b &lt;br /&gt;	                msgbox(vbs)&lt;br /&gt;        end function&lt;br /&gt;&amp;lt;/script&amp;gt; &lt;br /&gt;&lt;br /&gt;&amp;lt;/head&amp;gt;&lt;br /&gt;&amp;lt;body&amp;gt;&lt;br /&gt;          &amp;lt;input type="button" value="javascript"  onclick="test()" &amp;gt;&lt;br /&gt;&amp;lt;/body&amp;gt;&lt;br /&gt;&amp;lt;/html&amp;gt;&lt;br /&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;br /&gt;굵은 부분이 수정된 부분입니다. &lt;/p&gt;&lt;p&gt;&lt;br /&gt;js:2031&lt;br /&gt;&lt;br /&gt;vb:2030.9999999999997&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;위와 같이 출력됩니다. VB스크립트는 아무런 조치를 취하지 않았습니다.&lt;/p&gt;&lt;p&gt;비교를 해보기 위해서요. &lt;br /&gt;&lt;br /&gt;밑의 VB스트립트는  2031 이라고 내뱉는군요. 정확하게...&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;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;빠른 시간내에 해결되기를 기대합니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;&lt;/p&gt;&lt;p&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/6153142745191547553-7770768587940794777?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/7770768587940794777/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2010/11/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%82%B0%EC%88%A0-%EC%98%A4%EB%A5%98.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/7770768587940794777'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/7770768587940794777'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2010/11/%EC%9E%90%EB%B0%94%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8-%EC%82%B0%EC%88%A0-%EC%98%A4%EB%A5%98.html' title='자바스크립트 산술 오류'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-3777574409779536195</id><published>2009-11-15T01:15:00.000-08:00</published><updated>2011-01-11T04:58:04.052-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='오라클'/><category scheme='http://www.blogger.com/atom/ns#' term='iconv'/><category scheme='http://www.blogger.com/atom/ns#' term='UTF8'/><category scheme='http://www.blogger.com/atom/ns#' term='캐릭터셋'/><category scheme='http://www.blogger.com/atom/ns#' term='php'/><category scheme='http://www.blogger.com/atom/ns#' term='KSC5601'/><category scheme='http://www.blogger.com/atom/ns#' term='PHP Tips'/><title type='text'>ksc5601로 된 오라클 데이터를 php에서 불러오기</title><content type='html'>&lt;P&gt;별거없습니다. &lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;iconv 를 설치 하여 불러올수만 있으면 됩니다.&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;STRONG&gt;iconv('CP949' ,'utf-8', OCI_Result($stmt,"SEQNO"));&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;오라클의 캐릭터셋이 American의 KSC5601로 된 경우 어쩐 일인지 불러오질 못하더군요.&lt;/P&gt;&lt;P&gt;데이터가 모두 깨집니다...&lt;/P&gt;&lt;P&gt;&amp;nbsp;&lt;/P&gt;&lt;P&gt;UTF8과 &amp;nbsp;EUC-KR로 해도 깨집니다.&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;KSC5601가&lt;FONT color=#ff4c4c&gt; '&lt;STRONG&gt;CP949'&lt;/STRONG&gt;&amp;nbsp;&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;헤....^_________^&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153142745191547553-3777574409779536195?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/3777574409779536195/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2009/11/ksc5601%EB%A1%9C-%EB%90%9C-%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-php%EC%97%90%EC%84%9C-%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/3777574409779536195'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/3777574409779536195'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2009/11/ksc5601%EB%A1%9C-%EB%90%9C-%EC%98%A4%EB%9D%BC%ED%81%B4-%EB%8D%B0%EC%9D%B4%ED%84%B0%EB%A5%BC-php%EC%97%90%EC%84%9C-%EB%B6%88%EB%9F%AC%EC%98%A4%EA%B8%B0.html' title='ksc5601로 된 오라클 데이터를 php에서 불러오기'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-5921106943344339868</id><published>2009-11-15T01:01:00.000-08:00</published><updated>2011-01-11T04:58:03.103-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='javascript'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='JavaScript Tips'/><title type='text'>날짜 수 계산</title><content type='html'>&lt;P&gt;//날짜 수 계산 함수&lt;/P&gt;&lt;P&gt;&lt;br /&gt;function fn_getDateDegree(){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;var DgreeDate =cld_from.Value;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;for(var i=0; i &amp;lt; 100; i++){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; DgreeDate = Adddate( DgreeDate ,1);&lt;br /&gt;&amp;nbsp; &amp;nbsp; &lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;if( DgreeDate == cld_to.Value ){&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp;return i+1 ;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; break ;&lt;br /&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;}&lt;br /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&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/6153142745191547553-5921106943344339868?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/5921106943344339868/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2009/11/%EB%82%A0%EC%A7%9C-%EC%88%98-%EA%B3%84%EC%82%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/5921106943344339868'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/5921106943344339868'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2009/11/%EB%82%A0%EC%A7%9C-%EC%88%98-%EA%B3%84%EC%82%B0.html' title='날짜 수 계산'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-4286988150457355558</id><published>2009-11-15T00:58:00.000-08:00</published><updated>2011-01-11T04:58:02.269-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><category scheme='http://www.blogger.com/atom/ns#' term='exe'/><title type='text'>루비 스크립트를 실행 파일(EXE)로 배포하기</title><content type='html'>&lt;P&gt;&lt;FONT color=#4063ff&gt;예전에 어디선가 제가 자료를 모으는 와중에 가져온거 같습니다.&lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#4063ff&gt;어느분이 쓴건지는 모르겠지만 유용한 팁 글이라 올려 놓습니다. &lt;/FONT&gt;&lt;/P&gt;&lt;P&gt;&lt;FONT color=#4063ff&gt;혹시 출처를 아시는 분이 있다면 알려주시기 바랍니다.&lt;/FONT&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;&lt;/P&gt;&lt;P&gt;&lt;A class=con_link title=Ruby href="http://rubykr.org/" target=_blank&gt;루비&lt;/A&gt;로 정말 유용한 프로그램을 만들어서 다른 사람들도 쓸 수 있도록 배포를 하고자 할 경우가 있다. 사용자의 PC에 이미 루비가 깔려 있다면 배포는 비교적 쉽다. 소스를 압축하여 배포하거나, 근래에 커뮤니티에서 인기를 끌고 있는 gem등의 형태로 패키지를 만들어서 배포할 수 있다. 하지만 루비가 깔려있는 PC에는 먼저 루비를 깔라고 해야 할까?&lt;/P&gt;&lt;br /&gt;&lt;P&gt;추천할 만한 방법은 루비 인터프리터를 포함한 하나의 실행 파일(EXE)를 만들어서 배포하는 것이다. 다행스럽게도 &lt;A class=con_link href="http://exerb.sourceforge.jp/index.en.html" target=_blank&gt;exerb&lt;/A&gt;를 이용하면 간단하게 &lt;SPAN class=caps&gt;EXE &lt;/SPAN&gt;파일을 생성할 수 있다.&lt;/P&gt;&lt;br /&gt;&lt;br /&gt;&lt;P&gt;Exerb는 루비 1.8.1을 지원하는 3.3 버전을 &lt;A class=con_link href="http://exerb.sourceforge.jp/index.en.html" target=_blank&gt;홈페이지&lt;/A&gt;에서 내려 받을 수 있다. 설치는 setup.rb 스크립트를 실행함으로써 가능하다. (자세한 설치 방법은 &lt;SPAN class=caps&gt;README.&lt;/SPAN&gt;en 참조)&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;STRONG&gt;간단한 예제&lt;/STRONG&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;1. &lt;SPAN class=caps&gt;EXE&lt;/SPAN&gt;로 변환할 루비 파일(foo.rb)을 준비하자. &lt;/P&gt;&lt;br /&gt;&lt;P&gt;2. 먼저 recipe 파일을 만들어준다. mkexr 스크립트가 자동으로 exr을 만들어준다.&lt;/P&gt;&lt;br /&gt;&lt;PRE&gt;&lt;CODE&gt;ruby -r exerb/mkexr foo.rb&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;3. 생성된 foo.rb.exr 파일을 입맛에 맞게 수정한다. 자세한 명령어에 대한 설명은 doc/recipe.en.rd를 참조하면 된다. 여기서는 자동으로 생성된 exr 파일에 set_out_filepath 명령을 사용하여 생성될 &lt;SPAN class=caps&gt;EXE &lt;/SPAN&gt;파일의 이름을 정해준다. 그리고 set_core_by_name 명령을 이용하여 코어를 선택한다. 기본 코어는 cui이지만, 이 경우 콘솔창이 뜨는 불편함이 있기 때문에 나는 gui를 선호한다.&lt;/P&gt;&lt;br /&gt;&lt;PRE&gt;&lt;CODE&gt;set_core_by_name	gui&lt;br /&gt;set_out_filepath	Foo.exe&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;4. exerb를 이용해서 &lt;SPAN class=caps&gt;EXE&lt;/SPAN&gt;를 실행한다.&lt;/P&gt;&lt;br /&gt;&lt;PRE&gt;&lt;CODE&gt;ruby exerb foo.rb.exr&lt;/CODE&gt;&lt;/PRE&gt;&lt;P&gt;5. Foo.exe를 실행해서 테스트 한다.&lt;/P&gt;&lt;br /&gt;&lt;P&gt;&lt;STRONG&gt;그 외에&lt;/STRONG&gt;&lt;/P&gt;&lt;br /&gt;&lt;P&gt;이런 커맨드가 어렵다고 생각하는 사람을 위해 Win32 &lt;SPAN class=caps&gt;GUI&lt;/SPAN&gt; Client도 지원하고 있다. (하지만 그냥 커맨드라인 툴을 사용하는 것이 더 쉽다는 생각이 든다.)&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153142745191547553-4286988150457355558?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/4286988150457355558/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2009/11/%EB%A3%A8%EB%B9%84-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC-%EC%8B%A4%ED%96%89-%ED%8C%8C%EC%9D%BCexe%EB%A1%9C-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/4286988150457355558'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/4286988150457355558'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2009/11/%EB%A3%A8%EB%B9%84-%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EB%A5%BC-%EC%8B%A4%ED%96%89-%ED%8C%8C%EC%9D%BCexe%EB%A1%9C-%EB%B0%B0%ED%8F%AC%ED%95%98%EA%B8%B0.html' title='루비 스크립트를 실행 파일(EXE)로 배포하기'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-4577683832912197414</id><published>2009-11-15T00:56:00.000-08:00</published><updated>2011-01-11T04:58:01.389-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='JAVA Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Java'/><category scheme='http://www.blogger.com/atom/ns#' term='mysql'/><title type='text'>자바-MySQL 연결</title><content type='html'>&lt;P&gt;public static String toMySQL(String strStr){&lt;/P&gt;&lt;P&gt;&amp;nbsp; try{&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; if (strStr != null)&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return new String(strStr.getBytes("KSC5601"), "8859_1");&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; else&lt;/P&gt;&lt;P&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;return null;&lt;/P&gt;&lt;P&gt;&amp;nbsp; } catch (Exception e) {&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; e.printStackTrace();&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; return null;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&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/6153142745191547553-4577683832912197414?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/4577683832912197414/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2009/11/%EC%9E%90%EB%B0%94-mysql-%EC%97%B0%EA%B2%B0.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/4577683832912197414'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/4577683832912197414'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2009/11/%EC%9E%90%EB%B0%94-mysql-%EC%97%B0%EA%B2%B0.html' title='자바-MySQL 연결'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-7106341559853191951</id><published>2009-10-16T06:14:00.000-07:00</published><updated>2011-01-11T04:57:59.880-08:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='Programming'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby Tips'/><category scheme='http://www.blogger.com/atom/ns#' term='EditPlus'/><category scheme='http://www.blogger.com/atom/ns#' term='Ruby'/><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;설치를 했다는 것을 전제로 삼고 해보죠.&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/4/40252/attach/Xa8YA3nq50.jpg" style="width:232px;height:87px;" 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;요거슨 내 에디트플러스의 버전입니다.. 3.0이상 이기를 바랍니다..&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/4/40252/attach/XDif3CE2cG.jpg" style="width:490px;height:396px;" 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;끝~&lt;/P&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153142745191547553-7106341559853191951?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/7106341559853191951/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2009/10/%EC%97%90%EB%94%94%ED%8A%B8%ED%94%8C%EB%9F%AC%EC%8A%A4%EC%97%90%EC%84%9C-%EB%A3%A8%EB%B9%84-%EC%84%A4%EC%A0%95.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/7106341559853191951'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/7106341559853191951'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2009/10/%EC%97%90%EB%94%94%ED%8A%B8%ED%94%8C%EB%9F%AC%EC%8A%A4%EC%97%90%EC%84%9C-%EB%A3%A8%EB%B9%84-%EC%84%A4%EC%A0%95.html' title='에디트플러스에서 루비 설정'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-7801626824956974221</id><published>2009-08-28T00:42:00.001-07:00</published><updated>2009-08-28T00:42:57.846-07:00</updated><title type='text'>cygwin 삭제</title><content type='html'>1. cygwin을 종료&lt;br /&gt;2. 시작 &gt; 실행 에서 regedit 입력 실행 후&lt;br /&gt;  - HKEY_CURRENT_USER\Softeare\Cygnus Solutions&lt;br /&gt;  - HKEY_LOCAL_MACHINE\Softeare\Cygnus Solutions  레지스터 폴더 삭제&lt;br /&gt;3. Cygwin 디렉토리를 옮기거나 삭제 가능&lt;br /&gt;[출처] &lt;a href="http://blog.naver.com/yohanyooo/40087370943" target="_blank"&gt;Cygwin 삭제&lt;/a&gt;작성자 &lt;a href="http://blog.naver.com/yohanyooo" target="_blank"&gt;yohanyooo&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153142745191547553-7801626824956974221?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/7801626824956974221/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2009/08/cygwin.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/7801626824956974221'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/7801626824956974221'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2009/08/cygwin.html' title='cygwin 삭제'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-5643491112099209943</id><published>2009-07-19T21:31:00.000-07:00</published><updated>2009-07-19T21:34:03.212-07:00</updated><title type='text'>파이어폭스 DB만 정리해도 속도 빨라져</title><content type='html'>&lt;p&gt;파이어폭스를 오래 사용할수록 북마크, 히스토리 등을 저장하는 SQLite 데이터베이스가 커져만 가는데요. 특히 3.0 버전 이후 히스토리와 북마크를 적극 활용하는 주소표시줄의 방문 기록 저장 기간이 기본 9일에서 90일로 늘어나면서 데이터베이스 덩치가 더욱 커졌습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;또 어떤 데이터베이스나 다 그렇겠지만 SQLite 데이터베이스도 시간이 지날수록 조각화가 심해지고 사용하지 않는 공간이 늘어나기 때문에 주기적으로 이 데이터베이스를 정리해주면 파이어폭스 시작 시간이나 RSS, 주소표시줄 같은 북마크, 히스토리 관련 작업이 한결 빠르고 가벼워집니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;1. 먼저 SQLite3를 다운로드 합니다. (&lt;a href="http://www.sqlite.org/sqlite-3_6_16.zip"&gt;윈도용&lt;/a&gt;, &lt;a href="http://www.sqlite.org/sqlite3-3.6.16-osx-x86.bin.gz"&gt;매킨토시용&lt;/a&gt;, &lt;a href="http://www.sqlite.org/sqlite3-3.6.16.bin.gz"&gt;리눅스용&lt;/a&gt;)&lt;/p&gt;&lt;p&gt;&lt;br /&gt;2. 압축을 푼 SQLite3 실행 파일을 파이어폭스 프로필 폴더로 복사합니다. 프로필 폴더 위치는 운영체제에 따라 다음과 같습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;윈도XP, 2000 : C:\Documents and Settings\Application Data\Mozilla\Firefox\Profiles\ (%APPDATA%\Mozilla\Firefox\Profiles\) 윈도 비스타, 7 : C:\USERS\APPDATA\ROAMING\MOZILLA\FIREFOX\PROFILES\ MAC OS X : ~/Library/Mozilla/Firefox/Profiles/ 또는 ~/Library/Application SUPPORT/FIREFOX/PROFILES/ 유닉스 : ~/.mozilla/firefox/ 3. 파이어폭스를 종료합니다.&lt;br /&gt;&lt;a href="http://www.ebuzz.co.kr/content/buzz_view.html?uid=80554"&gt;드디어 등장한 파이어폭스 3.5&lt;/a&gt;&lt;/p&gt;&lt;p&gt;&lt;br /&gt;4. 프로필 폴더에서 명령 프롬프트를 열어 다음 명령을 입력합니다. 마이크로소프트 Powertoy의 하나인 CmdHere(&lt;a href="http://download.microsoft.com/download/whistler/Install/2/WXP/EN-US/CmdHerePowertoySetup.exe"&gt;설치하기 클릭&lt;/a&gt;)를 설치하면 마우스 우클릭 메뉴에서 편리하게 명령 프롬프트를 열 수 있습니다.&lt;/p&gt;&lt;p&gt;&lt;br /&gt;특정 sqlite 파일을 최적화하는 명령입니다. 예) sqlite3 place.sqlite VACUUM&lt;br /&gt;이렇게 덩치가 커진 sqlite 파일을 하나하나 최적화 해줘도 되지만 아래 명령을 입력하면 한번에 윈도 프로필 폴더 내의 모든 sqlite 파일의 최적화가 가능합니다. 스크립트로 만들어서 윈도 시작 시 자동으로 실행되게 만들어 놓으면 편리하겠죠.&lt;br /&gt;for %a in (*.sqlite) do (sqlite3 %a vacuum)&lt;br /&gt;맥 OS X&lt;br /&gt;cd ~/Library/Application\ Support/Firefox/Profiles/for f in */*.sqlite; do sqlite3 $f 'VACUUM;'; done리눅스&lt;br /&gt;for f in ~/.mozilla/firefox-3.5/*/*.sqlite; do sqlite3 $f 'VACUUM;'; done참고로 명령 프롬프트가 불편한 분들은 BleachBit을 이용해 보세요. 다양한 애플리케이션의 찌꺼기를 제거하는 프로그램이지만 파이어폭스 Vacuum 기능도 제공하고 있습니다. Vacuum에 체크하고 상단의 delete 버튼을 누르면 간단하게 SQLite 데이터베이스를 최적화 합니다. BleachBit은 윈도와 리눅스를 지원합니다.&lt;br /&gt;&lt;a href="http://bleachbit-project.appspot.com/download/all/"&gt;BleachBit 다운로드 (윈도용)&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/6153142745191547553-5643491112099209943?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/5643491112099209943/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2009/07/db.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/5643491112099209943'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/5643491112099209943'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2009/07/db.html' title='파이어폭스 DB만 정리해도 속도 빨라져'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6153142745191547553.post-1691678319697085652</id><published>2009-07-16T22:05:00.001-07:00</published><updated>2009-07-16T22:05:55.251-07:00</updated><title type='text'>net3.0</title><content type='html'>Windows Vista가 드디어 RTM 버전까지 발표가 되었다.&lt;br /&gt;&lt;br /&gt; 닷넷 프레임워크 3.0도 Vista에 종속적이기 때문에 Windows Vista와 더불어 RTM 버전이 발표된 것이다. 그럼 Windows Vista와 닷넷 프레임워크 3.0은 어떤 관계를 가지고 있는지 또한 닷넷 프레임워크 3.0의 구조는 어떻게 되었는지 이번 강의에서 살펴볼 것이다, 더불어 WCF의 정의와 기본적인 아키텍쳐를 살펴 보도록 하겠다.닷넷에 열정을 가지고 여러 세미나에 두루 참석하거나 MS에서 발표한 기술자료를 열심히 살펴 본 독자라면 WinFX라는 코드명을 들어 본 적이 있을 것이다. 얼마전 WinFX는 닷넷 프레임워크 3.0으로 이름을 바꾸고 이제는 사용되지 않는 명칭이다. 다음 그림은 새롭게 발표된 닷넷 프레임워크의 구조다.  (이 그림은 초창기 닷넷 3.0이 발표될 당시의 그림으로 WCS로 표기가 되어 있지만 실제로 WCS는 사용하지 않고 Card Space라는 명칭을 사용한다)예 전에 WinFX는 닷넷 2.0 기반에서 작동하게 된다고 소개해왔다. 하지만 닷넷 프레임워크3.0은 WPF, WCF, WF, CardSpace라는 새로운 기술들이 추가돼 더 완벽한 프레임워크로 변모했다. 닷넷 프레임워크가 동작하는 환경은 다음과 같다.&lt;br /&gt;&lt;br /&gt;● Windows Vista&lt;br /&gt;● Windows "Longhorn" Server&lt;br /&gt;● Windows XP SP2, Windows Server 2003 SP1, Windows Server 2003 R2&lt;br /&gt;새롭게 발표되는 비스타나 Longhorn 서버에서는 닷넷 프레임워크3.0이 장착되어 있다. XP에서는 서비스 팩3에서 지원 될 예정이라고 한다. 비스타의 출시는 Win95 이래로 가장 큰 런칭이 된다. 무엇보다도 사용자 경험의 새로운 변화가 그 어느 때 보다 크다. 윈도우2000을 사용해 왔던 사용자가 윈도우 XP를 다루는 것은 큰 어려움이 없었지만 윈도우 Vista는 그렇지 않다. 새로운 사용자 경험이 크게 변화된 것 뿐만 아니라 가젯과 같은 새로운 개념들이 도입되기 때문이다. 윈도우 비스타에는 기본적으로 닷넷 프레임워크 3.0이 설치되어 있다. 만약 윈도우 비스타의 세대가 도래하게 되면, 그동안 번거로웠던 닷넷 프레임워크의 배포 문제가 해결될 것이다. 또한 그만큼 닷넷 개발자들을 많이 필요로 하게 될 것이며, 그만큼 닷넷 프로그래머의 가치는 높아질 수밖에 없다. 그렇기 때문에 닷넷 개발자들은 윈도우 Vista를 기대해야 된다는 것이다.[Windows Vista의 모습]&lt;br /&gt;필자 메모주 위의 개발자들을 보면 닷넷 프레임워크3.0의 탄생을 시련으로 받아들이는 개발자가 많이 있다. Microsoft사의 .NET을 사용하고 있는 개발자라면 지금의 현실이 다소 혼란스럽고 어려운 시기일지도 모른다. 이유는 닷넷2.0이 탄생한지 1년채 지나지 않아서 닷넷 3.0의 정식 발표가 될 예정이기 때문이기도 하다. 하지만 .NET을 주된 업으로 삼아 개발하고 있고, 적어도 자신의 가치를 인정받는 개발자가 되기를 원한다면 발 빠르게 움직여 변화를 대비해야 할 것이다. 개발자는 생각과 동시에 실천이 이루어져야 한다. 즉, 닷넷 프레임워크3.0 개발 환경을 설정해보고 .NET 3.0관련 기술 문서나 실행 예제를 보면서 한 번쯤은 실행해 보라는 것이다. 닷넷 3.0을 설치하는데 큰 공수가 드는 것이 아니고, 예제를 실행하는데도 크게 어려울 것이 없다. 단지, 이걸 알고 있으면서도 움직이거나 움직이지 않거나의 차이가 되는 것이다. 일찍 일어나는 새가 먹이를 먼저 잡듯이 먼저 발 빠르게 대응하고 있는 개발자에게 기회는 반드시 더 많이 찾아오기 마련이다. &lt;br /&gt;새롭게 추가된 기술&lt;br /&gt;닷넷 프레임워크 3.0에 새롭게 추가된 기술들을 간단하게 요약해 보도록 하겠다. 단 WCF는 이번 강의실에서 상세하게 알아볼 것이기 때문에 WPF, WF, CardSpace만 설명 하도록 하겠다.&lt;br /&gt;WPF(Windows Presentation Foundation)&lt;br /&gt;WPF는 닷넷 프레임워크의 가장 최전방에 있는 UI 기술이다. 윈도우 비스타는 기본적으로 3D 기반에서 동작이 된다. 그렇기 때문에 당연히 비스타 환경을 충족 시켜줄 수 있는 개발도구가 필요 할 것이다. 바로 WPF가 UI의 혁명적으로 등장한 3D 개발 기술이다. &lt;화면 2&gt;는 WPF를 실행한 화면이다.   이렇게 화려한 UI를 가지고 있는 기술이 바로 WPF이다. WPF는 XAML이라는 XML을 이용해서 UI를 정의하고, 코드는 CS로 작성하게 된다.&lt;br /&gt;WF(Windows Workflow Foundation)&lt;br /&gt;WF는Windows Workflow Foundation의 약자이다. 그럼 Workflow는 무엇인가? 이 개념을 잘 알고 있다면 WF를 이해하기 쉬울 테지만, 개발자들이 쉽게 이해하고, 적용할 수 있는 개념은 아니다. Workflow는 ‘작업 흐름’이라는 의미를 가지고 있다. 쇼핑몰을 예를 들어 보겠다. 물건이 거래가 되기 위해서는 물건을 구매하고, 입금을 확인하고, 배송을 하고, 배송확인을 받는 순서를 거쳐야 한다. 이러한 쇼핑물의 흐름이 바로 Workflow가 되는 것이다. WF는 이러한 작업 흐름을 간단하게 디자이너로 드래그 &amp;amp; 드랍으로 구현할 수 있다. &lt;화면 3&gt;에서 Visual Studio.NET에서 WF를 이용해 Workflow를 구축하고 있다.&lt;br /&gt; WF 로 작업을 하면 Workflow를 명확하게 정의 할 수 있다. 또한 Workflow가 변경 되었을 때 코드를 수정하지 않아도 간단하게 드래그 만으로 작업 흐름을 수정할 수 있기 때문에 쉽게 유지 보수를 할 수 있다는 특징을 가지고 있다고 보면 될 것이다.&lt;br /&gt;Windows CardSpace&lt;br /&gt;얼마전 한 컨퍼런스에서 빌 게이츠는 "패스워드 시대의 종말이 올 것이다" 라는 선언을 했다. 그리고 그에 대한 해결책으로 ‘인포카드’를 소개했다. 인포카드의 개념은 온라인상에서 자신의 신원정보를 제시하는 하나의 인증수단이라고 볼 수 있다.&lt;br /&gt;보통 대학교 도서관을 이용하려면 학생증과 같은 신원확인 카드를 가지고 신원확인을 한 후에 도서관을 이용할 수 있다. 도서관뿐만 아니라 그 학교의 학생을 증명하는 용도로 사용하게 된다. 인포카드는 바로 이러한 카드처럼 자신의 신상정보를 인포카드에 담아두고 온라인에서 요구하는 신원 인증을 통일해 보겠다는 것이다. 포탈 사이트에서 하나의 아이디만 갖고, 인증을 받으면 메일이나 카페, 블로그 등등 여러 서비스들을 동시에 인증을 받아서 사용할 수 있게 된다. 하지만 이건 포탈이라는 울타리 내에서만 가능할 뿐이다. 다른 포탈 사이트와 연계가 되는 것은 아니다. 하지만 인포카드는 전 세계의 웹을 통합해 보겠다는 당찬 시도를 하게 된 것이다. &lt;화면 4&gt;는 윈도우 비스타의 인포 카드를 캡쳐한 화면이다.&lt;br /&gt;[비스타의 인포카드 인증화면]&lt;br /&gt;MS는 이전에 패스포트로 온라인 계정을 통합해 보려고 했지만 실패한 전략이 되었다. 그리고 이번에 인포카드는 두 번째 시도가 되는 것이다. 그러면 Card Space는 무엇인가? WCS는 Windows CardSpace의 약자로 WCF를 이용해서 통신을 하는 부분을 담당하는 부분이 바로 이 Card Space가 된다.&lt;br /&gt;&lt;br /&gt;개발 환경 설정하기&lt;br /&gt;개발 환경을 설정해 보도록 하겠다. 필자가 책을 쓰고 있는 당시의 상황은 Visual Studio.Net 2005가 발표 되었고 닷넷 프레임워크 3.0은 베타만 나와 있는 상황이기 때문에 먼 훗날 개발환경 설정 방법이 달라 질 수 있다. 개발 환경을 설치 하기 위해서는 다음과 같은 프로그램을 차례대로 설치 하여야 한다. MS 다운로드 사이트에 가면 다음과 같은 프로그램들을 다운 받을 수 있을 것이다.&lt;br /&gt;● .NET Framework 3.0 Setup.&lt;br /&gt;● Windows SDK(Software Development Kit) Setup&lt;br /&gt;● Development Tool for .NET Framework3.0 Setup&lt;br /&gt;&lt;br /&gt;이 설치는 VS.NET 2005가 설치 된 후에 진행해야 된다. 주의할 점은 같은 버전의 개발Kit 들을 설치해야 한다. 예를 들어서 .Net Framework는 베타1인데 Windows SDK 는 베타2이거나 한다면 올바른 개발 환경을 설정할 수가 없다. 앞서서 진행한 WPF의 강좌에서도 설치 방법을 소개하고 있고, 많은 블로그들 에서도 이런 설치 하는 방법에 대해서 많이 설명을 해주고 있기 때문에 이번 강좌에서는 따로 소개하지 않는다.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6153142745191547553-1691678319697085652?l=myondal.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://myondal.blogspot.com/feeds/1691678319697085652/comments/default' title='댓글'/><link rel='replies' type='text/html' href='http://myondal.blogspot.com/2009/07/net30.html#comment-form' title='0개의 덧글'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/1691678319697085652'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6153142745191547553/posts/default/1691678319697085652'/><link rel='alternate' type='text/html' href='http://myondal.blogspot.com/2009/07/net30.html' title='net3.0'/><author><name>myondal</name><uri>http://www.blogger.com/profile/01670465636970343500</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='32' height='24' src='http://3.bp.blogspot.com/-HL6dkOq-PQk/TX3BvzUoDYI/AAAAAAAAACA/0DlWL99yutc/s220/ojw.jpg'/></author><thr:total>0</thr:total></entry></feed>
