<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>It's Myself-Hind.s.Hildebrand [하인드/하인도/인도짱 의 홈페이지]</title>
		<link>http://hind.pe.kr/</link>
		<description>[하인드/하인도/인도짱 의 홈페이지]

저만의 공간입니다.
다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다.
다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.</description>
		<language>ko</language>
		<pubDate>Thu, 24 May 2012 11:47:15 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<managingEditor>하인도</managingEditor>
		<image>
			<title>It's Myself-Hind.s.Hildebrand [하인드/하인도/인도짱 의 홈페이지]</title>
			<url>http://cfile9.uf.tistory.com/image/124A19144C044EE86D29D1</url>
			<link>http://hind.pe.kr</link>
			<description>[하인드/하인도/인도짱 의 홈페이지]

저만의 공간입니다.
다양한 소재들을 나열하는 아주 단순 무식한 홈페이지 입니다.
다양한 문서 자료도 있겠지만, 저의 푸념들도 있답니다.</description>
		</image>
		<item>
			<title>코드 정리 001 in C#</title>
			<link>http://hind.pe.kr/1146</link>
			<description>&lt;p&gt;과연 어떤 코드가 좋을까? 이 문제는 프로그래머들의 스타일과 성격에 따라 무척 다르다.&lt;/p&gt;  
&lt;p&gt;일단 내 기준으로 보았을 때 다음과 같은 코드가 있으면 일단 뜯고 싶어진다.&lt;/p&gt;  
&lt;br/&gt;
&lt;pre name=&quot;code&quot; class=&quot;c-sharp&quot;&gt;        
char[] array4 = new char[]            
{             
         '&amp;lt;'
};
text17 = text17.TrimEnd(array4);
string[] array5 = text17.Split(array4, StringSplitOptions.RemoveEmptyEntries);
text17 = &quot;&quot;;
for (int num24 = 0; num24 &amp;lt; array5.Length; num24++) 
{
       if (text17 == &quot;&quot;)
       { 
               text17 = array5[num24];
       }
       else
      { 
              text17 = text17 + &quot;.&quot; + array5[num24];  
       }
}
&lt;/pre&gt;
&lt;p&gt;변수 명은 일단 넘어가자. Visual Studio를 쓰고 있다면 간단하게 이름을 바꿔줄 수 있으니까..&lt;/p&gt;  
&lt;p&gt;일단 저 프로그램의 목적은 ‘&amp;gt;’ 가 들어간 문자열 내에 문자들을 나누어서 최종적으로 “.” 로 연결된 문장을 만들고 싶은 것이다.&lt;/p&gt;  
&lt;p&gt;예를 들면 아래와 같다.&lt;/p&gt;  
&lt;p&gt;ABC1&amp;gt;2222&amp;gt;&amp;gt;222334&amp;gt;5&amp;gt;66666666&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt;&amp;nbsp;&amp;nbsp; &lt;/p&gt;  
&lt;p&gt;를&lt;/p&gt;  
&lt;p&gt;ABC1.2222.222334.5.66666666&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;h3&gt;1. String “+” 연산자.&lt;/h3&gt;  
&lt;p&gt;C# 중급 정도 하다보면, 문자열의 “+” 연산자의 낭비를 잘 알 수 있다. 즉 문자열을 단순히 한 두번 연결하는 레벨이라면 “+” 를 써서 연결은 하겠지만, 반복문 안에서 문자열 더하기는 확실히 좋지 않다.&lt;/p&gt;  
&lt;p&gt;만일 위의 예제로 본다면, 아래와 같은 문자열들이 나오게 된다.&lt;/p&gt;  
&lt;p&gt;ABC1&amp;nbsp; /&amp;nbsp; 2222&amp;nbsp; /&amp;nbsp; 222334&amp;nbsp; /&amp;nbsp; 5&amp;nbsp; / 66666666&lt;/p&gt;  
&lt;p&gt;5개 정도의 문자열이 나오는데, 순서대로 더하게 되면 어떻게 될까?&lt;/p&gt;  
&lt;p&gt;메모리 상에서 더하는 과정을 순서대로 나열해 보겠다.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;ABC1, 2222, ABC12222&amp;nbsp;&amp;nbsp; ( ABC1, 2222 은 언젠가 지워진다.. 언젠가..) &lt;/li&gt;    &lt;li&gt;ABC1(?), 2222(?), ABC12222 , 222334, ABC12222222334 ( 마찬가지로 ABC1 부터 222334까지의 문자열은 언제가 지워진다 –_-; ) &lt;/li&gt;    &lt;li&gt;ABC1(?), 2222(?), ABC12222(?) , 222334(?), ABC12222222334, 5 ,ABC122222223345 ( ...... ) &lt;/li&gt;    &lt;li&gt;ABC1(?), 2222(?), ABC12222(?) , 222334(?), ABC12222222334(?), 5(?) ,ABC122222223345,&amp;nbsp; 66666666 , ABC12222222334566666666( ...... ) &lt;/li&gt; &lt;/ol&gt;  
&lt;p&gt;총 네번의 단계 동안 언젠가 지워져 줘야할 문자열의 갯수는 이미 상상을 초월한다.&lt;/p&gt;  
&lt;p&gt;“+” 연산자를 할 때, 특정 공간에 쭉 채워가듯 더하는 것이 아니라, 항상 문자열 공간을 새로 만들어 더하기를 하는 것이다. 저건 5 단계 정도니 저 정도 지만, 문자열의 길이가 길어지거나, 반복 횟수가 많아지기 시작하면, 언젠가 지워져야 할 문자열이 지워지기를 기다려야 될지도 모른다.&lt;/p&gt;  
&lt;p&gt;해결책은 여러가지가 있겠지만, C# 유저라면, StringBuilder를 추천한다. 사용방법은 간단하다.&lt;/p&gt;  
&lt;p&gt;StringBudiler sbReuslt = new StringBuilder();&lt;/p&gt;  
&lt;p&gt;sbResult.Append(“ABC1”);&lt;/p&gt;  
&lt;p&gt;sbResult.Append(“2222”);&lt;/p&gt;  
&lt;p&gt;sbResult.Append(“222334”);&lt;/p&gt;  
&lt;p&gt;sbResult.Append(“5”);&lt;/p&gt;  
&lt;p&gt;sbResult.Append(“66666666”);&lt;/p&gt;  
&lt;p&gt;sbResult.ToString();&lt;/p&gt;  
&lt;p&gt;매번 더해진 결과는 한 공간에 넣어서 계속 관리한다. 그 방법을 StringBuilder 가 해결해준다.&lt;/p&gt;  &lt;h3&gt;&lt;/h3&gt;  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;2. else 문과 string 비교.&lt;/h3&gt;  
&lt;p&gt;저 프로그램이 정말 하고 싶어하는 것이 무엇이길래 저런 방식으로 짠걸까?    &lt;br /&gt;한번 생각해보았다. 그러니까, 다음 세 가지의 조건이 나온다.&lt;/p&gt;  
&lt;p&gt;1. 문자열을 더할 때 그 사이에 “.” 를 넣는다.&lt;/p&gt;  
&lt;p&gt;2. 맨 마지막 문자열을 더할 때 “.”&amp;nbsp; 가 붙지 않는다.&lt;/p&gt;  
&lt;p&gt;3. 최초 문자열을 더할 때, 맨 앞에 “.” 가 붙지 않는다.&lt;/p&gt;  
&lt;p&gt;2번과 3번은 로직을 짤 때 2번을 택해도 되고, 3번을 택해도 된다. 그 이유는 문자열을 더한 뒤, 더 이상 붙여야 될 문자열이 없을 때 “.” 를 안붙이는 로직을 만들거나, 최초 문자열을 더할 때 앞쪽에 “.”를 붙이지 않고, 나머지 경우에 “.” 를 붙이는 방식이다.&amp;nbsp; 처리 방법에 따라, 2번 조건 3번 조건을 쓸 수 있다.&lt;/p&gt;  
&lt;p&gt;자 저 위의 로직을 보자. 위의 조건 중 1번과 2+3 번의 형태를 만들었다.&lt;/p&gt;  
&lt;p&gt;즉 반복문 최초에는 그냥 문자열을 대입한 뒤, 다음 반복 부터는 &lt;/p&gt;  
&lt;p&gt;이전 문자열 + “.” + 붙일 문자열 &lt;/p&gt;  
&lt;p&gt;이런 식으로 짰다. 앞서 이야기 한대로 String 의 “+”는 안쓰는게 백번 낫다고 했다.    &lt;br /&gt;그렇다면 StringBuilder로 재 구성한다고 할 때, 최소한 저 방식대로 한다면, 매번 뒤에서는 Append를 두 번해야 한다.&lt;/p&gt;  
&lt;p&gt;sbResult.Append(“.”);&lt;/p&gt;  
&lt;p&gt;sbResult.Append(array[num24]);&lt;/p&gt;  
&lt;p&gt;코드가.. 아주 그냥...   &lt;br /&gt;    &lt;br /&gt;더욱이 if 문을 보면, 문자열 비교를 한다. text17 == “” &lt;/p&gt;  
&lt;p&gt;개인적으로 숫자 비교는 용서하지만 문자열 비교는 가급적 피하고 싶다라는 개인적인 생각이다. 컴퓨터가 숫자에 대한 비교는 빠르지만, 문자열에 대한 비교는 문자열 갯수에 비례하도록 차이가 크게 발생된다. 그래서 꼭 필요한 경우가 아니라면 문자열 비교는 피하는게 좋다. ( 뭐 요즘 컴퓨터 사양은 무지하게 좋기 때문에, 무시되기도 하지만...)&lt;/p&gt;  
&lt;p&gt;또, for 문의 경우 index라는 개념이 있어서, 코드를 뭔가 알흠답지 않게 만든다. ( 100% 개인 취향 )&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;최종 무엇을 더하도록 할까? &lt;/p&gt;  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;  
&lt;p&gt;결론부터 내자면 개인적으로는 위의 코드가 아래와 같이 만들어지길 원한다.&lt;/p&gt;  
&lt;p&gt;&lt;a href=&quot;http://cfile30.uf.tistory.com/image/1405C33A4FB616D632498B&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/195B36404FB616D6011E8F&quot; width=&quot;0&quot; height=&quot;216&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  
&lt;p&gt;&amp;nbsp;&lt;/p&gt;  &lt;h3&gt;결론&lt;/h3&gt;  
&lt;p&gt;StringBuilder 만 빼면, 나머진 개인 취향이다.    &lt;br /&gt;&quot;어디를 향하든 서울만 가면 된다는” 말이 있듯이 사실 결과만 잘 나오면 된다. 어떻게 짜든 개인 취향이라는 것.     &lt;br /&gt;하지만, 최소한 나중에 유지보수를 해야 한다고 생각한다면, 간결하고, 단순하게 짜는게 더 낫지 않을까?&lt;/p&gt;  
&lt;p&gt;처음부터 저런 코드가 툭툭 떨어지진 않는다. 그래서 저렇게 코드가 안 나온다고 고민할 필요까진 없다. 다만, 시간이 될 때, 자신이 짠 코드를 뒤돌아 보면서 Refactoring을 하면서 정리해 보았으면 좋겠다.&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1146&amp;regts=1337827487&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category></category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1146</guid>
			<comments>http://hind.pe.kr/1146#entry1146comment</comments>
			<pubDate>Fri, 18 May 2012 18:31:03 +0900</pubDate>
		</item>
		<item>
			<title>Team Foundation Server(TFS) 2010 구축.</title>
			<link>http://hind.pe.kr/1145</link>
			<description>&lt;h1&gt;전제사항&lt;/h1&gt;  &lt;p&gt;제일 먼저 서버군에 대한 지식을 어느 정도 알고 있어야 합니다. Active Directory가 무엇인지, Join 이란 무엇인지, IIS 설정은 어떻게 들어가야 하는지 등등. 이에 대한 배경 지식을 쌓기가 쉽지는 않겠지만, Windows Server 2008 R2에 대한 서적을 찾아보고, 직접 Windows Server 2008 R2를 설치해서 사용하다 보면 어느 정도 파악할 수 있을 것입니다. 일부 기본적으로 파악해야 된다고 생각되는 사항은 넘어갔습니다. 가급적이면 기본적인 서버 인프라에 대한 이해는 어느정도 하셔야 할 것 같습니다.&lt;/p&gt;  &lt;h1&gt;준비 사항.&lt;/h1&gt;  &lt;p&gt;먼저 환경을 구성하기 위한 서버 제품들을 확보해야 해야 합니다. 최소한 MSDN에 가입되어 있어야 여기서 제시하는 설치방법을 진행할 수 있습니다. (단독 제품으로 구매했다면, 제약이 많거나, 예제와 달라질 수 있습니다.) &lt;/p&gt;  &lt;p&gt;필요한 서버 제품들은 다음과 같습니다.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Windows Server 2008 x64 이상 &lt;/li&gt;    &lt;li&gt;MS SQL 2008 이상. &lt;/li&gt;    &lt;li&gt;Windows SharePoint Service 3.0 이상 &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;물론 TFS 안에는 MS SQL Express 2008과 WSS 3.0 설치 파일을 가지고 있습니다. 그래서 Standalone으로 설치하면다면 자동으로 해당 제품들을 기준으로 자동 구성됩니다. 하지만 운영하는데 제약점이 될 수 있기 때문에, 가급적 Database와 SharePoint를 각기 설치하는 것이 좋습니다. &lt;/p&gt;  &lt;p&gt;여기서 예제로 구성할 땐, Windows Server 2008 R2 Standard 1 Copy, Team Foundation Server 2010&amp;#160; 1 Copy,&amp;#160; MS SQL 2008 Standard Edition, SharePoint Foudnation 2010 정도로 구성할 예정입니다.&lt;/p&gt;  &lt;p&gt;그리고 인증 서버가 반드시 필요합니다. 여기서 사용되는 인증 서버는 Active Directory 라는 환경을 사용하게 됩니다.&amp;#160; 서버간의 인증에서 부터, 사용자 관리, 권한 설정까지 모두 Active Directory를 이용하는 것입니다. 단, 주의할 점은 한 대의 서버에 모든 서비스를 담는다고 &lt;strong&gt;TFS가 설치될 서버에 ActiveDirectory를 얹어서는 안됩니다.&lt;/strong&gt; 반드시 별도의 PC를 마련해 별도의 PC 내에 Active Directory 서버를 구축하고, TFS와 완전히 물리적으로 분리되어 있어야 합니다. &lt;/p&gt;  &lt;p&gt;이 예제에서는 사내에서 사용되는 AD에 붙어서 작업할 예정입니다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;서버 설치&lt;/h1&gt;  &lt;h3&gt;운영체제 설치&lt;/h3&gt;  &lt;p&gt;MS Windows Server 2008 R2를 설치합니다. 근래 MS에서의 서버 제품 군 대부분은 x64로 동작하다 보니, 자연스럽게 운영체제 역시 x64로 설치됩니다.. 2008 R2도 별다른 표기가 안되어 있지만, 실제로 설치해보면 x64 입니다. 운영체제 설치는 여기 범위에서 벗어나므로 일단 넘어갈 예정입니다. 기본적인 설치 과정에서 벗어나는 것이 없기 때문입니다. 다만, 설치한 후 몇 가지 추가적인 설정이 있습니다.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;&lt;strong&gt;컴퓨터 이름을 설정한다.        &lt;br /&gt;&lt;/strong&gt;최초 설치할 때 설정할 수 있지만, 자동으로 설치 진행하는 경우 자동으로 만들어진 서버이름을 그대로 쓰는 경우가 있습니다. 물론 그대로 서버이름 변경없이 사용할 수도 있지만, 그 때마다 암호문 같은 이름 ( 예를들면 WIN-798FXE112&amp;#160; 같은 이름)으로 사용한다는 것도 문제가 있다고 봅니다. 물론 사용 중에 중간에 바꿀 수 있지만, 그 경우 이미 설치된 제품들이 제대로 동작되지 않는 경우가 발생될 수 있습니다. 그러므로, 구성하기 전에 컴퓨터 이름을 적절하게 설정합니다.       &lt;br /&gt;여기서는 TFSTest 라는 이름으로 설정했읍니다. &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;IE 보안 정책을 끈다.        &lt;br /&gt;&lt;/strong&gt;서버 내에서 Internet Explorer를 거의 쓸 일이 없기 때문에, 직접 서버 내에서 IE를 안전하게 쓰라고 보호막을 구성했고, 기본적으로 활성화 되어 있습니다. 하지만, 굳이 보안에 민감한 사항이 아니라면 아예 이 부분을 꺼버리는게 사용하는데 불편함이 없습니다.       &lt;br /&gt;서버 관리 콘솔에서 “Configure IE ESC” 라는 항목에 들어가서 모두 Off 해 버리면 됩니다. 나중에 실제 운영할 때, On 시켜두셔도 무방합니다.       &lt;br /&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/image/1816D3434F4C41CB2989C0&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;ieesc1&quot; border=&quot;0&quot; alt=&quot;ieesc1&quot; src=&quot;http://cfile6.uf.tistory.com/image/1828DA3F4F4C41CC233598&quot; width=&quot;644&quot; height=&quot;456&quot; /&gt;&lt;/a&gt; &lt;/li&gt;    &lt;li&gt;&lt;strong&gt;.NET Framework 3.0 Feautre 설치.&lt;/strong&gt;       &lt;br /&gt;Windows Server 2008 R2를 설치하였다면, 자체적으로 Windows 구성요소 중 .NET Framework를 가지고 있읍니다. 하지만, 보안 정책 상 자동으로 설치되어 있지 않고, 별도 패키지처럼 일일히 따로 설치해야 합니다.       &lt;br /&gt;서버 콘솔 창에서 “Features”를 클릭해서 연 뒤, “Add Features”를 클릭하면 설치 가능한 Feature들이 나옵니다.&amp;#160; 그 중 .NET Framework 3.5.1 Features를 선택하고 설치하도록 합니다. 그러면 자동으로 연관된 Feature인 IIS(Internet Information Service)가 같이 설치된다고 나오는데, 그대로 같이 설치해주기만 하면 됩니다.       &lt;br /&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/image/141490364F4C41CC0D0282&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;addfeatures&quot; border=&quot;0&quot; alt=&quot;addfeatures&quot; src=&quot;http://cfile27.uf.tistory.com/image/150D60364F4C41CD1729AB&quot; width=&quot;644&quot; height=&quot;457&quot; /&gt;&lt;/a&gt;       &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160; &lt;/li&gt; &lt;/ol&gt;  &lt;h3&gt;Active Directory로 Join&lt;/h3&gt;  &lt;p&gt;제일 먼저 Active Directory 서버에 Join을 수행합니다. &lt;/p&gt;  &lt;p&gt;서버간의 인증문제나, 사용자 계정 처리 문제를 해결하기 위해서라도, 반드시 Active Directory는 있어야 합니다. 그러므로 따로 구축한 Active Directory에 Join 하여 구성하도록 합니다.&lt;a href=&quot;http://leemcse.tistory.com/entry/%EC%BB%B4%ED%93%A8%ED%84%B0-%EA%B3%84%EC%A0%95-%EB%8F%84%EB%A9%94%EC%9D%B8%EC%97%90-%EB%93%B1%EB%A1%9D%ED%95%98%EB%8A%94-%EB%B0%A9%EB%B2%95-1&quot; target=&quot;_blank&quot;&gt;&lt;u&gt;Active Directory로 Join 하는 방법&lt;/u&gt;&lt;/a&gt;은 간단하므로, 넘어갑니다. &lt;/p&gt;  &lt;p&gt;여기서는 tfsadmin 이라는 계정을 Active Directory 상에 만들었으며, &lt;a href=&quot;http://inthereal.springnote.com/pages/636327&quot; target=&quot;_blank&quot;&gt;&lt;u&gt;이 계정을 TFS 서버에서는 Admin으로 동작하게 끔 수정&lt;/u&gt;&lt;/a&gt;했읍니다. tfsadmin 이라는 계정으로 TFS에 로그인을 합니다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;SQL 서버 구축&lt;/h3&gt;  &lt;p&gt;본격적인 서버 설치 작업입니다.&lt;/p&gt;  &lt;p&gt;TFS 뿐만 아니라, UI 역할을 하는 SharePoint 역시 이 SQL의 존재가 제일 중요합니다. 모든 데이터의 저장 뿐만 아니라, 심지어 설정 값 까지 대부분의 정보는 DB 내에 보관되게 됩니다. 그러므로 가장 기반이 되는 정보 장치로써 설치를 하도록 합니다.    &lt;br /&gt;현재 MS SQL은 2008 R2 까지 출시되었으며, 탑재된 기능 및 범위 별로 제품 Scue도 나뉘었읍니다. Express라는 무료 버전에서 Datacenter 라는 대규모 버전까지 있읍니다. Express로도 사용은 가능하지만, 내부적으로 최대 DB 크기 4G라는 제한의 벽은 나중에 운영하는데 큰 지장을 초래하므로, 가급적 Standard 버전 이상을 설치하는 것을 권장합니다.&lt;/p&gt;  &lt;p&gt;여기서는 MS SQL 2008 R2 Standard Edition x64 를 설치합니다. &lt;/p&gt;  &lt;p&gt;맨 처음 SQL Server Installation Center가 뜨는데, 여기서 “Installation”&amp;#160; -&amp;gt; “New installation or add features to an existing installation”를 선택하도록 합니다&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/image/1415FA364F4C41CD0B9AF4&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;sql001&quot; border=&quot;0&quot; alt=&quot;sql001&quot; src=&quot;http://cfile10.uf.tistory.com/image/180D72344F4C41CD1C35D2&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;     &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;자동으로 제품 설치 전 작업을 수행합니다. 간단한 내부적인 검사 및 제품 키, 라이센스 동의 그 밖에 설치용 지원 파일 설치 작업을 순서대로 수행하게 되는데 거의 Next 만 해도 진행이 됩니다. 기본적인 설치 전 단계의 작업이 완료되면, 이제 실질 적인 설치 작업이 실행되게 됩니다.&lt;/p&gt;  &lt;p&gt;이제부터 실제적인 설치 화면이 나오게 됩니다. 왼편에 보이는 항목들이 각 단계인데, 각 단계별 설명을 넣었습니다.&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Setup Support Rules&lt;/strong&gt;] 맨 처음 뜨는 설치 단계는 SQL 에 필수적으로 필요로 하는 구성요소가 제대로 있는지, 아니면 운영체제 환경이 제대로 맞는지 등을 전체적으로 검사하는 작업을 합니다. Error 만 안뜨면 큰 문제는 없지만, 최대한 모든 항목이 Pass가 나오도록 운영체제에 대한 설정을 해주는 것이 좋습니다. (예제에서는 Firewall 관련 Warning이 나왔지만, 큰 문제는 없어서 이 부분은 넘어갑니다. )&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/image/200B3B364F4C41CE1BEA9E&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;sql-001&quot; border=&quot;0&quot; alt=&quot;sql-001&quot; src=&quot;http://cfile2.uf.tistory.com/image/111631364F4C41CE0B3EF5&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Setup Role&lt;/strong&gt;] 다음으로는 설치 유형입니다. “SQL Server Feature Installation”과 “All Feature With Default”가 있는데, 굳이 번역을 하자면, “사용자 정의 설치”와 “빠른 전체 설치”로 보시면 됩니다. 즉 하나는 하나씩 설정해주는 작업이고, 다른 하나는 기본 값으로 설치를 하는 것이죠. 어느 쪽이든 상관 없지만, 여기서는 “SQL Server Feature Installation”을 선택했습니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile30.uf.tistory.com/image/184F76394F4C41CE31CFEA&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;sql-002&quot; border=&quot;0&quot; alt=&quot;sql-002&quot; src=&quot;http://cfile5.uf.tistory.com/image/1439953C4F4C41CF0FCB49&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Feature Selection&lt;/strong&gt;] 그러면 설치 할 제품 기능들이 나오는데, 필요한 기능들을 선택하시면 됩니다. 전체를 다 선택해도 되고, 설명을 읽어보시고 꼭 필요한 것만 설치하셔도 됩니다. 하지만, 반드시 Database Engine Service, Client Tools Connectivity와 Management Tools는 꼭 설치하시기 바랍니다. 예제는 아래와 같이 선택했습니다.&lt;/p&gt;  &lt;p&gt;아래에서는 Report Service를 넣기는 했지만, 반드시 필요한 경우가 아니면 빼도 상관 없습니다. 여기서는 Report Service를 사용하지 않는 형태로 구축할 예정입니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/image/165F66464F4C41CF03BF16&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;sql-003&quot; border=&quot;0&quot; alt=&quot;sql-003&quot; src=&quot;http://cfile29.uf.tistory.com/image/11335D3E4F4C41D33779BC&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;그러면 이제 자동으로 기능간의 의존관계들을 체크하는 화면입니다. 여기서는 자동으로 기능간에 빠진 기능이나, 잘못된 선택이 있는지 자동으로 판단합니다. 여기서 오류가 있다면 이전 화면에서 기능들을 다시 선택하시고 진행하시면 됩니다.&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Instance Configuration&lt;/strong&gt;] 다음은 인스턴스 설정하는 화면입니다. 변경할 사항이 있다면 변경하겠지만, 대개의 경우 특별한 설정은 필요 없습니다. 여기서도 별다른 설정 없이 넘어갑니다.&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Disk Space Requirements&lt;/strong&gt;] 저장된 곳의 용량에 대한 리포트가 뜹니다. 역시 큰 문제가 없으면 넘어갑니다.&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Server Configuration&lt;/strong&gt;] 서버 구성입니다. 각 서비스들의 동작 계정과 정렬용 기준 언어 등을 설정합니다. 예제에서는 AD 계정인 tfsadmin이 있는데, 이 계정을 서버 동작 계정으로 사용합니다. 그리고 정렬용 언어로는 Korean-Wansung-CI_AS로 설정했습니다. 각 설정은 상단 Tab에서 변경하면 설정 화면이 각기 나옵니다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/124229444F4C41D329569A&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;sql-005&quot; border=&quot;0&quot; alt=&quot;sql-005&quot; src=&quot;http://cfile24.uf.tistory.com/image/186C04384F4C41D52899ED&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Database Enginee Configuration&lt;/strong&gt;] 다음은 Database Engine 설정 화면인데, 인증 방식, 관리자 권한을 가진 계정을 설정하거나, 데이터 위치, FILESTREAM에 대한 설정이 나옵니다. 각기 원하는 설정을 해주시면 됩니다. 여기서는 계정 관련해서만 수정했는데, SQL 인증방식과 Windows 인증 방식을 동시에 사용하며, 관리자 계정을 tfsadmin 으로 설정했습니다. 그 외는 기본값으로 두었습니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/image/191DEC434F4C41D51F00BB&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;sql-006&quot; border=&quot;0&quot; alt=&quot;sql-006&quot; src=&quot;http://cfile25.uf.tistory.com/image/181A25434F4C41D625C2C1&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Reporting Service Configuration&lt;/strong&gt;] 그 다음은 Report Service 설정인데, 특별히 아는 설정이 있으면 구성하시기 바랍니다. 여기서는 기본값으로 해서 넘깁니다. &lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Error Reporting&lt;/strong&gt;] 서버 내 오류가 발생하였을 때, MS 쪽에 자동으로 에러 보고를 하는 기능에 대한 일종의 동의서 처리인데, 그냥 넘깁니다.&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Installation Configuration Rules&lt;/strong&gt;]지금까지 설정한 내용에 오류가 있는지 체크합니다. 큰 문제가 없으면 계속 진행합니다.&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Ready to Install&lt;/strong&gt;] 이제 전체 설정된 사항들을 모두 보여주는 요약화면입니다. 트리 형태로 표시되어 한눈에 전체 설정 내용을 모두 보여줍니다. 이제 “Install” 버튼을 클릭하면 실제 설치 화면이 나오게 됩니다.&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Installation Progress&lt;/strong&gt;] 이제 진행율을 보여주면서 실제 파일 복사 및 자동적인 설정 작업을 수행하게 됩니다. 모두 설치가 되면 Complete가 되고 “Finish”를 클릭하면 모두 종료됩니다.&lt;/p&gt;  &lt;p&gt;설치가 완료되면 이제 데이터베이스가 준비가 되었다고 판단하셔도 됩니다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;SharePoint Foundation 2010 설치&lt;/h3&gt;  &lt;p&gt;이 부분이 반드시 필요한 것은 아니지만, Team Foundation Server의 Web 기반 UI의 존재가 필요한 경우 설치를 해주는 것이 좋다. 자체적으로 문서 관리를 해줄 뿐만 아니라, TFS에서 발생되는 각종 값들( 버그 리포트, 작업 스케쥴 등등) Visual Studio 없이 직접 Web 상으로 볼 때는 이 부분이 꼭 필요로 합니다.&lt;/p&gt;  &lt;p&gt;기본적으로 Windows SharePoint Service 3.0 이면 되지만, 유려한 UI와 기능 업그레이드가 잘 된, SharePoint Foundation 2010으로 진행할 예정입니다. &lt;/p&gt;  &lt;p&gt;SharePoint Foundation 2010은 MS 사이트 등에서 무료로 다운로드 받을 수 있습니다. 최소한 Windows Server 2008 이상 서버에 대해서 자체적인 라이센스를 가지고 있다고 보시면 됩니다. 그래서 무료로 다운받아 사용이 가능합니다. 또 x64 버전 밖에 없기 때문에, x64 버전의 운영체제 에서만 동작합니다.&lt;/p&gt;  &lt;p&gt;다운 받은 실행 파일을 실행하면 자동 압축을 풀고 아래와 같은 화면이 뜹니다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/image/131A033A4F4C41D6218CB0&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;sharePoint002&quot; border=&quot;0&quot; alt=&quot;sharePoint002&quot; src=&quot;http://cfile23.uf.tistory.com/image/167AE8414F4C41D61BD46E&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;2010부터는 SharePoint에 필요한 환경을 자동으로 검사해서 추가적으로 필요한 구성요소들을 자동으로 구성해주는 기능이 있습니다. Windows에 탑재되어 있으면 자동으로 활성화 해주고, 없으면 외부에서 다운로드까지 해서라도 설치해주는 기능입니다. 이 기능을 실행하려면 &amp;quot;Install software prerequisites&amp;quot;를 클릭하면 됩니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/image/1202E43B4F4C41D704F7CE&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;sharePoint001&quot; border=&quot;0&quot; alt=&quot;sharePoint001&quot; src=&quot;http://cfile8.uf.tistory.com/image/172C283F4F4C41D71D3D66&quot; width=&quot;644&quot; height=&quot;482&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;그럼 자동으로 어떠한 제품들이 추가 되야 되는지를 찾아서 해당하는 패키지들을 설치합니다. 운영체제 기능에서부터 Windows Hotfix 까지 자동으로 기능을 검색하고 꼭 필요한 사항들을 완전 자동으로 설치하게 됩니다. 그냥 기다리기만 하면 됩니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/image/147683384F4C41D817727C&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile10.uf.tistory.com/image/176E18374F4C41D80D0BC5&quot; width=&quot;644&quot; height=&quot;482&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;심각한 오류가 발생되지 않는 다면 위와 같은 화면으로 대략 5~10분 정도 구성하게 됩니다. 단, 이 때, 모든 패키지를 이 설치 파일에 담겨 있지 않아, 간혹 필요한 사항들을 인터넷을 통해 다운로드 받게 됩니다. 그러므로 이 기능을 이용해 설치하는 동안에는 반드시 인터넷이 연결되어 있어야 합니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/image/125743454F4C41D8124F55&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile23.uf.tistory.com/image/156BC9374F4C41D9104FBF&quot; width=&quot;644&quot; height=&quot;482&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;정상적으로 완료되면 Complete라고 뜨고 요약화면이 나옵니다. “Finish”를 클릭해 종료합니다.&lt;/p&gt;  &lt;p&gt;이제 준비 작업은 끝났고, SharePoint Foundation을 본격적으로 설치합니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/image/143CF83D4F4C41D9252707&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;sharePoint003&quot; border=&quot;0&quot; alt=&quot;sharePoint003&quot; src=&quot;http://cfile4.uf.tistory.com/image/186FDC374F4C41D9092BEF&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;SharePoint Foundation의 설치 방법은 크게 두 가지가 있읍니다. 하나는 Standalone 이고, 다른 하나는 Server Farm 방식입니다. Standalone은 자동으로 SQL Server(내장된 Express 버전)를 설치하고 자동으로 팀 사이트까지 만들어주는 방식입니다. Server Farm은 사용자가 Server 구성요소에 대한 적절한 설정을 직접하여 설치하는 방식입니다.&lt;/p&gt;  &lt;p&gt;여기서 수행할 방법은 Server Farm 방식으로 진행할 것입니다.&lt;/p&gt;  &lt;p&gt;맨 처음 “Install SharePoint Foundation”을 시작하면 License Agreement가 뜹니다. 체크하고 Continue 합니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/image/1437953C4F4C41DA171F50&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-1&quot; border=&quot;0&quot; alt=&quot;Untitled-1&quot; src=&quot;http://cfile8.uf.tistory.com/image/161B413A4F4C41DA1E820C&quot; width=&quot;620&quot; height=&quot;504&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;다음에는 “Server Farm:을 선택합니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/image/1840773D4F4C41DB246E63&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-2&quot; border=&quot;0&quot; alt=&quot;Untitled-2&quot; src=&quot;http://cfile23.uf.tistory.com/image/1619F5344F4C41DB0E5923&quot; width=&quot;620&quot; height=&quot;504&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Server Type에서는 Complete를 선택한다. SharePoint Foundation의 모든 기술들을 설치하도록 하는 것입니다. 그래야 원하는 형태로 구성하는 작업을 수행합니다. 만일 Standalone으로 하면, 자동적으로 SQL을 설치하고 자동으로 사이트를 구축해 버립니다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/image/1558DF424F4C41DB1F5DE2&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-3&quot; border=&quot;0&quot; alt=&quot;Untitled-3&quot; src=&quot;http://cfile23.uf.tistory.com/image/18055F414F4C41DB0DE54D&quot; width=&quot;620&quot; height=&quot;504&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;그러면 설치가 들어갑니다. 하지만, 여기서는 설정 작업 없이, SharePoint Foundation을 복사하는 정도의 역할만 수행하게 됩니다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/image/12716F384F4C41DC2134ED&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-4&quot; border=&quot;0&quot; alt=&quot;Untitled-4&quot; src=&quot;http://cfile8.uf.tistory.com/image/171673364F4C41DC095AE4&quot; width=&quot;620&quot; height=&quot;504&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;완료되는 다음과 같은 화면이 뜨는데, “Run the SharePoint Products Configuration Wizard now”를 체크해놓은 상태 그대로 Finish를 클릭합니다. 그러면 자동으로 SharePoint Foundation 설정 화면으로 넘어갑니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile26.uf.tistory.com/image/1206D9344F4C41DC267411&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-5&quot; border=&quot;0&quot; alt=&quot;Untitled-5&quot; src=&quot;http://cfile10.uf.tistory.com/image/123801354F4C41DD185423&quot; width=&quot;620&quot; height=&quot;504&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;기존 설치 프로그램이 종료되고 이제 설정을 위한 프로그램이 시작 되면 아래와 같은 환영 메시지가 보입니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/image/2062E43B4F4C41DD2E4539&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-6&quot; border=&quot;0&quot; alt=&quot;Untitled-6&quot; src=&quot;http://cfile29.uf.tistory.com/image/114DBB444F4C41DD196C74&quot; width=&quot;625&quot; height=&quot;534&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;여기서는 기존에 존재하는 SharePoint가 있다면 그 SharePoint에 연결할지 여부를 결정하는 부분입니다. 지금 하는 작업은 기존 SharePoint에 연결하는 것이 아니므로, &amp;quot;Create a new server farm”을 선택합니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile28.uf.tistory.com/image/175148334F4C41DE1816B8&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-7&quot; border=&quot;0&quot; alt=&quot;Untitled-7&quot; src=&quot;http://cfile26.uf.tistory.com/image/19776A384F4C41DE1633F7&quot; width=&quot;625&quot; height=&quot;534&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;이제 Database 설정에 들어갑니다. SharePoint의 모든 설정 내용은 모두 DB에 기록되므로 이 DB 설정이 무척 중요합니다. 하지만, 중요도에 비해 크게 설정할 내용은 없읍니다. 대부분은 자동으로 수행되기 때문이죠. 그래서 DB 접속에 필요한 일부 정보만 넣으면 됩니다.&lt;/p&gt;  &lt;p&gt;다음을 참고하여 적절한 값을 넣습니다.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;Database server : MS SQL이 설치된 컴퓨터 이름을 넣으면 됩니다. 여기서는 TFS 설치용 PC안에 MS SQL도 깔았으므로 현재 구축하려는 PC 이름을 넣으면 됩니다. &lt;/li&gt;    &lt;li&gt;Database name : SharePoint 설정 저장용 DB 이름인데, 굳이 변경할 필요는 없습니다. &lt;/li&gt;    &lt;li&gt;Username : MS SQL에 접속이 가능하고, DB를 생성할 수 있는 권한을 가진 계정을 넣으면 됩니다. 반드시 AD 상의 계정만 들어갑니다.&amp;#160; &lt;/li&gt;    &lt;li&gt;Password : 위의 계정에 대한 암호를 넣습니다. &lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;입력한 정보로 Database에 연결되고, 설정 데이터용 데이터베이스가 생성되면, 정상적으로 Next가 됩니다. 만일 위의 정보로 제대로 진행되지 않는다면, 계정이 Database에 접근할 수 없는 권한이거나, Database server 이름이 잘못되었을 가능성도 있습니다. 혹여 이전에 SharePoint가 설치되었던 PC라면 Database name을 변경해야 할 수도 있습니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/image/176CCC384F4C41DE27C7D0&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-8&quot; border=&quot;0&quot; alt=&quot;Untitled-8&quot; src=&quot;http://cfile5.uf.tistory.com/image/12093F344F4C41DE2576CE&quot; width=&quot;625&quot; height=&quot;534&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;정상적으로 넘어갔다면, 이번에는&amp;#160; SharePoint 끼리 연결될 때 사용되는 암호를 넣는다. 중요하지 않으므로 적절히 넣습니다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/image/161F0D434F4C41DF1DD70C&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-9&quot; border=&quot;0&quot; alt=&quot;Untitled-9&quot; src=&quot;http://cfile28.uf.tistory.com/image/161207364F4C41DF0F03F4&quot; width=&quot;625&quot; height=&quot;534&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;마지막으로 관리자 페이지 접근용 포트 번호 설정과 로그인시 사용하는 방법들을 선택하는데, 그대로 두고 Next를 합니다. 만일 관리자용 사이트 페이지에 종종 접속하는 경우가 있다면, 포트 번호를 적당히 기록해두시면 이용하는데 도움이 됩니다. 필요하면 Port 번호를 변경해도 됩니다. &lt;a href=&quot;http://cfile6.uf.tistory.com/image/114299334F4C41DF330B3A&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-10&quot; border=&quot;0&quot; alt=&quot;Untitled-10&quot; src=&quot;http://cfile7.uf.tistory.com/image/1244A73D4F4C41DF1E5B23&quot; width=&quot;625&quot; height=&quot;534&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;모든 설정이 완료되었으면 요약화면이 뜹니다.이제 Next를 하면 자동으로 설정하기 시작합니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/156805384F4C41E02C3A13&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;sharePoint004&quot; border=&quot;0&quot; alt=&quot;sharePoint004&quot; src=&quot;http://cfile7.uf.tistory.com/image/1612DF434F4C41E037A69B&quot; width=&quot;625&quot; height=&quot;534&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;본격적으로 Database도 만들고, 구성하기 시작합니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/image/156B43414F4C41E0324BF0&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-12&quot; border=&quot;0&quot; alt=&quot;Untitled-12&quot; src=&quot;http://cfile10.uf.tistory.com/image/19704B384F4C41E122217A&quot; width=&quot;625&quot; height=&quot;534&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;모든 설정이 정상적으로 끝나면 설정 요약 내용이 나오는데, 이제 Finish를 클릭하면 됩니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/image/1538693D4F4C41E32A3A63&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-13&quot; border=&quot;0&quot; alt=&quot;Untitled-13&quot; src=&quot;http://cfile10.uf.tistory.com/image/154F85334F4C41E31F515E&quot; width=&quot;625&quot; height=&quot;534&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;그럼 자동으로 SharePoint 관리자 페이지가 뜹니다. 여기서 간단한 사이트만 만들면 됩니다. 만드는 방법은 Wizard를 따라가면 쉽게 만들 수 있습니다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h3&gt;Team Foundation Server 설치&lt;/h3&gt;  &lt;p&gt;TFS 2010 설치용 DVD를 넣고 동작시키면 다른 서버 제품과는 다르게, 자동 실행 자체가 없습니다.(물론 업데이트되면 바뀔 수 있습니다.)&lt;/p&gt;  &lt;p&gt;그래서 폴더 안에 위치한 설치 파일을 직접 실행해야 합니다. ( DVD 위치가 X:\ 라고 가정 )    &lt;br /&gt;X:\TFS-x64 위치에 있는 setup.exe를 실행한다. 그러면 Visual Studio 와 같은 Installer 화면이 뜹니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/image/201DB63A4F4C41E31AFCD4&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile10.uf.tistory.com/image/186180394F4C41E4126353&quot; width=&quot;636&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;첫 화면에서는 특별한 동작이 없으므로 다음을 클릭합니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/image/173FB43D4F4C41E427D0E7&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile24.uf.tistory.com/image/143F2C354F4C41E50E74F7&quot; width=&quot;636&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;License Agreement를 하고 다음을 클릭 합니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile6.uf.tistory.com/image/1844623C4F4C41E501E0AA&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-14&quot; border=&quot;0&quot; alt=&quot;Untitled-14&quot; src=&quot;http://cfile8.uf.tistory.com/image/130812414F4C41E6078BC4&quot; width=&quot;636&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;앞서 언급했듯이 이 단계의 설치 작업에서는 별도 설정 작업이 없습니다. 오직 파일 복사처럼 필수적으로 필요한 패키지의 메인 프로그램의 복사레벨로 생각하시면 됩니다. 실제적인 설정 작업은 이 모든 설치 프로그램이 종료되면 자동으로 실행됩니다,.그러므로, 여기에 설치한 기본적인 패키지를 설치하면 됩니다.&lt;/p&gt;  &lt;p&gt;위의 화면처럼 두 가지의 패키지를 설치하시면 됩니다. 하나는 Team Foundation Server 이고, 다른 하나는 Extentions for SharePoint Products and Technology 입니다. Team Foundation Server는 TFS를 구성하는 메인 프로그램이므로 당연히 설치를 해야 하고, 그 뒤에 따르는 Extentions for SharePoint Products and Technology는 TFS와 SharePoint와 연결할 때 사용되는 각종 웹파트, 사이트 템플릿 등을 적용할 때 필요한 패키지 입니다. &lt;/p&gt;  &lt;p&gt;이처럼 패키지를 나눈 이유는 물리적으로 서버를 분리하여 구축할 때 그 역할에 맞추어 설치할 수 있도록 하기 위함입니다. 그래서 나머지 Team Foundation Server Proxy와 Team Foundation Build Service는 나중에 다른 PC에 설치하시기 바랍니다. 만일 현재 TFS 안에 Build까지 구축하겠다고 하면 굳이 말리지는 않겠지만, 권장하지 않는다. 여러 팀원들이 동시에 접속해서 다루어야 할 서버인데, 프로그램을 빌드하기 위한 컴포넌트를 설치해 주고, 더욱이 빌드하면서 발생되는 자원 소모(빌드 할 때, CPU, RAM 등의 소요가 큰 편이다.)로 인해 서버가 원활하게 동작하지 않을 수 있기 때문입니다.&lt;/p&gt;  &lt;p&gt;2가지를 선택하고 Install 버튼을 클릭하면 자동으로 설치하게 됩니다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/image/135C4C454F4C41E60A0EEB&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile24.uf.tistory.com/image/1958E3454F4C41E61207D1&quot; width=&quot;636&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;설치가 완료되면 요약화면이 뜨는데, 여기서 “Configure” 버튼을 클릭해주시기 바랍니다. 수동으로 직접 각종 서버 설정을 할 수 있지만, 여기서는 설치 후 뜨는 마법사 화면을 이용해 작업을 설명할 예정입니다.&lt;a href=&quot;http://cfile25.uf.tistory.com/image/131BE13A4F4C41E71DA879&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile27.uf.tistory.com/image/15652C394F4C41E70DE309&quot; width=&quot;636&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;설정 프로그램 – Configuration Center –이 뜨면, 이제 TFS에 대한 본격적인 설정을 시작하게 됩니다. &lt;/p&gt;  &lt;p&gt;   &lt;br /&gt;&lt;/p&gt;  &lt;h3&gt;Team Foundation Server 구성&lt;/h3&gt;  &lt;p&gt;설치 완료 후, 설정 프로그램이 자동으로 뜨면 아래와 같은 화면이 뜹니다. 설정을 통합적으로 제공하는 기능인데, 메시지 기반의 Wizard를 제공합니다. 처음에는 낯설지만, 아이콘과 그림 남발 Wizard와는 다른 심플함을 주어 개인적으로 마음에 들긴 합니다.&lt;/p&gt;  &lt;p&gt;자 아래와 같은 화면으로 들어왔으면 맨 먼저 “Advanced”를 선택합니다.   &lt;br /&gt;그 이유 중 하나는 우리가 설치할 때, 제품별로 따로 따로 설치하는 부분도 있었고, 일부 사용하지 않는 서비스들도 있기 때문입니다. 즉 입맛에 맞게 수정하기 위해서는 Advanced 로 진행하는 것이 답일 것입니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/image/201A43434F4C41E725CB90&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;Untitled-15&quot; border=&quot;0&quot; alt=&quot;Untitled-15&quot; src=&quot;http://cfile4.uf.tistory.com/image/163CB43C4F4C41E80BC472&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Advanced Configuration Wizard가 시작되면 이제 각각 설정해야 하는 항목들이 나오기 시작합니다.왼쪽 Navigation 영역 부분이 일종의 Wizard 단계 메뉴로 생각하셔도 됩니다. 실제 왼쪽 Navigation 쪽에 나타난 경고표시(&lt;a href=&quot;http://cfile2.uf.tistory.com/image/143DAC3D4F4C41E82844C2&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;warnning&quot; border=&quot;0&quot; alt=&quot;warnning&quot; src=&quot;http://cfile6.uf.tistory.com/image/182BD2434F4C41E807D13E&quot; width=&quot;22&quot; height=&quot;19&quot; /&gt;&lt;/a&gt;)만 해결하면 실제적인 설치가 되기는 합니다. 하지만, 차근차근 설정 하나하나 체크하시기 바랍니다.&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Welcome&lt;/strong&gt;] 환영 메시지 부분입니다. 그대로 Next를 해주시면 됩니다. 체크 버튼이 있지만, MS에서 제공하는 Support를 원활하게 받을 수 없다면 의미 없죠. &lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Database&lt;/strong&gt;]&amp;#160; TFS와 연결할 Database 서버를 구성하는 부분입니다. 역시 기본값을 두시면 됩니다. 만일 SQL이 기본 인스턴스를 사용할 수 없는 경우라면, SQL Server Instance 부분에 적절하게 인스턴스를 넣어주시기 바랍니다.(예 : SQLSVR001\TFSDB ) 여기서는 기본값을 그대로 사용합니다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/image/205E6E404F4C41E81D6E9E&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;conf_wiz_db&quot; border=&quot;0&quot; alt=&quot;conf_wiz_db&quot; src=&quot;http://cfile25.uf.tistory.com/image/116E47374F4C41E90D0A26&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Account&lt;/strong&gt;] TFS Service를 동작시키기 위한 계정 정보 및 인증 방식을 결정하는 부분입니다. 특별히 변경해야 할 이유가 없다면 기본값으로 두시면 됩니다. 보안상의 이유라도 NETWORK SERIVCE라는 계정을 그대로 유지하시는게 좋으며, 인증방식도 Kerberos 와 같은 고급 인증 방식을 쓰지 않는 이상 NTLM 이 제일 편하기 때문입니다.&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Application Tier&lt;/strong&gt;] TFS 서버와 접속하기 위한 인터페이스 설정 부분입니다. 외부에서 TFS를 접속할 때, Web을 통해서 처리하게 되는데, 그 경로를 의미하는 것입니다. 여기서는 기존에 구축된 TFS 서버와 구분하기 위해 9000 번으로 변경한 것 외에는 크게 변경한 것은 없습니다. 기본값은 8080 입니다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href=&quot;http://cfile24.uf.tistory.com/image/1338A5354F4C41E918BEE7&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;conf_wiz_apptier&quot; border=&quot;0&quot; alt=&quot;conf_wiz_apptier&quot; src=&quot;http://cfile4.uf.tistory.com/image/13553C334F4C41E9113F76&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Reporting ~&lt;/strong&gt; ] Reporting 부분은 Reporting과 함께, Reporting Services, Analysis Service, Report Reader Account 등 세 가지를 추가적으로 설정해야 합니다. 하지만, 여기서는 Reporting 관련 설정을 하지 않을 예정입니다. 그래서 Report 관련 체크를 끈 상태로 진행합니다. 만일 Reporting 관련 서비스를 활성화 하고 싶다면, SQL 2008 R2를 설치할 때, Report와 Analysis 서비스 관련한 설치를 반드시 해야 합니다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/image/143A9D3C4F4C41EA0F32FD&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;conf_wiz_rep&quot; border=&quot;0&quot; alt=&quot;conf_wiz_rep&quot; src=&quot;http://cfile7.uf.tistory.com/image/18693A404F4C41EA0BB6A8&quot; width=&quot;644&quot; height=&quot;483&quot; /&gt;&lt;/a&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;SharePoint Products&lt;/strong&gt;] 여기서는 SharePoint와 TFS 간의 연결관계를 구축하기 위한 구성을 합니다. 연결이라고 해도, 별도 연결을 위한 설정이 있는 것이 아니고, SharePoint에 Site Template나, WebPart 등을 설치하고 준비하는 정도의 작업으로 보시면 됩니다. “Configure SharePoint for use with Team Foundation Server”를 체크해 놓은 상태에서 Next를 하시면 됩니다.&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;SharePoint Products – Settings&lt;/strong&gt; ] SharePoint Products 의 하위 설정으로 TFS와 연결할 SharePoint URL을 설정합니다. 대개 기본값으로 두시면 됩니다. “Next”를 누르면 자동으로 연결 테스트를 하지만, 혹시 모르니 반드시 “Test” 링크를 클릭해서 체크 버튼을 받도록 합니다.     &lt;br /&gt; 다만, 여기서는 기존에 구축한 SharePoint와 겹치지 않기 위해서 포트 번호만 변경(8888로 변경)해서 진행합니다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/image/13693C374F4C41EB1317C6&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;conf_wiz_sp&quot; border=&quot;0&quot; alt=&quot;conf_wiz_sp&quot; src=&quot;http://cfile10.uf.tistory.com/image/1725523A4F4C41EB109E0D&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[&lt;strong&gt;Project Collection&lt;/strong&gt;] 최초 서비스가 구축될 때 만들어질 Project Collection을 구축할 것인지 여부와 구축한다면 그 이름은 무엇으로 할 지를 결정하는 부분입니다. 물론 아예 시작을 아무런 구축없이 진행할 수 있지만, 가급적이면 자동으로 설정이 될 수 있게 하는 것도 편하게 프로젝트를 구성할 수 있게 됩니다.     &lt;br /&gt;최초 만들어질 때, 기본 이름은 “DefaultCollection” 인데, 자신의 프로젝트에 맞게 수정하시면 좋겠습니다. 그리고 Collection 이름이기 때문에, 안에 공백은 넣지 않도록 합니다.    &lt;br /&gt;여기서는 “TestProject”라는 이름으로 구성합니다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/image/2060A1454F4C41EC047107&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;conf_wiz_prjcol&quot; border=&quot;0&quot; alt=&quot;conf_wiz_prjcol&quot; src=&quot;http://cfile4.uf.tistory.com/image/117047374F4C41ED09F5C3&quot; width=&quot;643&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;[Review] 이제 지금까지 설정한 내용에 대한 전체 요약화면이 나옵니다. 혹시 모르니, 꼭 한번 전체 내용을 체크해보고, 설정이 맞는지 확인하시기 바랍니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/image/2057B7444F4C41ED102048&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;conf_wiz_rview&quot; border=&quot;0&quot; alt=&quot;conf_wiz_rview&quot; src=&quot;http://cfile1.uf.tistory.com/image/17437F354F4C41ED09ADEF&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;이제 Verify 버튼을 클릭하시면 전체 설정을 체크하게 됩니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/image/13651C424F4C41EE10F1D6&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;conf_wiz_vf&quot; border=&quot;0&quot; alt=&quot;conf_wiz_vf&quot; src=&quot;http://cfile3.uf.tistory.com/image/12631B404F4C41EE140FCB&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;                  &lt;p&gt;모든 체크가 Pass를 했다면 이제 Configure를 클릭하시면 자동으로 설정하기 시작합니다. 중간에 큰 문제(메모리 부족, 디스크 부족, 네트워크 단절 등등)가 없다면 자연스럽게 설정을 하게 됩니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/image/125190424F4C41F3301D1B&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;conf_wiz_vconf&quot; border=&quot;0&quot; alt=&quot;conf_wiz_vconf&quot; src=&quot;http://cfile27.uf.tistory.com/image/1643CB3C4F4C41F3029DA4&quot; width=&quot;642&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;최종적으로 모든 설치가 Sucess가 뜨면 끝납니다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;일단, 기본적인 Team Foundation Server 구축은 여기까지 입니다. 이제 만들어진 URL(위의 예제로 나타낸 것을 기준으로 한다면, &lt;a href=&quot;http://tfstest:9000/tfs&quot;&gt;http://tfstest:9000/tfs&lt;/a&gt; 가 됩니다. )로 Visual Studio 로 연결하면 됩니다. 최소한 소스 버전관리로 이용할 수 있을 것입니다. &lt;/p&gt;  &lt;p&gt;그럼 다음으로는 구축된 TFS에서 기본 제공하는 Team Foundation Server Administration Console을 활용한 기타 설정이나 구성 작업들을 간단하게 살펴 보도록 하겠습니다.&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1145&amp;regts=1330397856&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>기술자료</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1145</guid>
			<comments>http://hind.pe.kr/1145#entry1145comment</comments>
			<pubDate>Tue, 28 Feb 2012 11:54:44 +0900</pubDate>
		</item>
		<item>
			<title>Team Foundation Server (TFS) 2010 에 대해.</title>
			<link>http://hind.pe.kr/1143</link>
			<description>&lt;h1&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/image/1973FB364F3CC3FC19E5AD&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;hero_single_tfs_boxshot&quot; border=&quot;0&quot; alt=&quot;hero_single_tfs_boxshot&quot; src=&quot;http://cfile23.uf.tistory.com/image/185C9D394F3CC3FC2190DA&quot; width=&quot;240&quot; height=&quot;159&quot; /&gt;&lt;/a&gt;&lt;/h1&gt;  &lt;h1&gt;배경&lt;/h1&gt;  &lt;p&gt;MS Windows Platform 기반으로 개발을 한다면 필연적으로 Visual Studio라는 제품을 사용하게 된다. 이 제품으로 개발할 때 사용되는 언어는 C/C++, Visual Basic, C# 등 다양하게 사용할 수 있다. 또 Windows Platform에 맞게 Native 한 어셈블리 계열에서 부터 .NET Framework 까지 다양한 기반 기술 및 API를 쉽게 사용할 수 있다. 또 Visual이라는 이름에 걸맞게 GUI 기반의 IDE 도구이다. 그래서 자체적으로 소스 에디터를 보유하고 있으며, 간단한 조작만으로 만들어진 소스를 빌드 하고, 디버깅 까지 복합적인 모든 형태의 기능을 하나의 도구로 만들었다.    &lt;br /&gt;이 Visual Studio는 Windows Platform의 변화에 맞추어 변화해 왔고, 발전하여, 현재 2010 버전까지 나왔다.&lt;/p&gt;  &lt;p&gt;도구와 Platform의 발전도 발전이지만, 진정 발전을 한 것은 소프트웨어 개발 자체이다. 처음에는 까만 도스창에 실행파일 몇개와 동적 라이브러리 몇개로 구성된 단순한 Application 만으로도 충분히 동작하고, 사용했지만, 지금은 상당히 많은 기능과 동작하고, 크기 조차 엄청나게 커버렸다. 이처럼 단순한 Application 에서부터 서버 레벨의 비지니스 개발까지, 그 개발의 범위와 폭은 너무 커져갔고, 개발의 양 역시 상상의 범위를 넘을 정도로 개발됐다.    &lt;br /&gt;그러다 보니, 홀로 일당백 개발하는 시대는 저물고, 어느새 여러 사람이 협업을 하면서 개발해야 하는 단계에 이르게 되었다. 여러 사람이 하나의 목표(소프트웨어 제품)를 두고, 작은 조직을 만들어 꾸리게 되는데, 보통 이런 단위를 팀이라고 부르고, 자연스럽게 개발자들의 작은 그룹이 팀이 되어 그 팀 단위 개발을 수행하게 되었다.&lt;/p&gt;  &lt;p&gt; 공장에서야 컨베인벨트 위의 작업 형태와 작업 양에 맞춰 반복적인 작업을 위한 최초 교육을 거친 뒤, 원하는 인원을 투입해 생산 공정을 구성한다. 물론 인력 비용이라는 부분도 있기는 하지만, 최소한 인력 비용을 무시한다면, 확실히 인력 투입대비 생산량이 거의 동일하게 나오게 된다. 인력 투입 대비 생산력이 나온다는 이야기는 바로 인력을 최대한 투입하면, 투입된 만큼 제품이 나올 수 있다는 의미다.&amp;#160; &lt;br /&gt;하지만, 소프트웨어 개발은 단순 공장 노무와는 다르게 사람을 무작정 투입한다고 되지 않는다. 단순히 몇가지 반복적인 작업을 교육한 뒤 투입한다고 바로 무언가를 만들 수 있는 것이 아니기 때문이다. 위의 컨베인 벨트를 기준으로 이야기 한다면, 이 소프트웨어 개발이라는 것은 그 컨베인 벨트 자체를 만드는 공정이기 때문에 그게 쉽지만은 않다. 어떻게 컨베인벨트를 배치해야 최소 인력으로 최대의 효과로 제품을 생산할 수 있을까? 와 같은 고민을 소프트웨어 개발에서 수행하는 것이다. 이렇다보니, 무작정 인력만 우겨넣는다고 그 답이 나올리가 없다.     &lt;br /&gt;또 예전 같이 규모라도 작고 변수라도 적으면, 똑똑한 사람 몇명이면 그만이였지만, 규모가 규모인 만큼, 똑똑한 사람 몇 사람으로 해결 할 수 조차 없다. 자연스럽게 사람들은 건축, 공장화 그 모든 것들을 소프트웨어 개발에 맞춰보려 노력했지만, 그 결과가 그리 좋지 않았고, 결론적으로는 소프트웨어 개발은 다른 식으로 접근해야 되겠다고 생각하였으며, 그 결과 작은 생산 조직의 형태가 되었고, 이 역시 팀이 만들어지게 된다.&lt;/p&gt;  &lt;p&gt;팀이라는 조직을 이용해 과연 어떻게 명확한 목표와 서로간의 협력을 만들어야 할까?    &lt;br /&gt;이 부분에 대한 많은 의견이 분분했다. 앞서 이야기 한 것 처럼, 건축 방법론을 가져와 설명하고 적용해보기도 했다. 그 덕에 건축에서 사용되는 개념의 일부를 소프트웨어 개발과정에서도 활용된다. 하지만, 무언가 어색한 옷인 마냥 잘 맞지 않았다. 그를 대체할 것 처럼 나타는 공장형태도 자연스럽게 등장했다. 공장에서 처럼 표준화된 부품을 통해 생산된다면 어떨까? 물론 개념도 훌륭했으며, 많은 소프트웨어들이 그에 맞게 해보려 했지만, 사람 생각이 100이면 100 틀리다 보니, 이 역시 어색한 옷이 되어버렸다. 그러다 보니, 요즘은 누가 옳다 그르다를 따지기 자연스럽게 스스로의 맞는 스타일을 찾아 가기 시작했고, 자연스럽게 Agile에서 제시하는 실천 방법과 같은 형태를 갖추기 시작했다.    &lt;br /&gt;Agile에 대한 이야기는 다른 Agile 관련 서적이나, 사이트 등에서 참고하면 된다. &lt;/p&gt;  &lt;p&gt;이와 같은 복잡다단한 소프트웨어 개발 환경이라는 배경 속에서 MS는 Visual Studio를 제시했고, 그 제품을 이용해 팀 단위 업무를 원활하게 수행할 수 있는 환경을 제공했다. 개발자들 각자에게 제공되는 Visual Studio와 바로 연결될 수 있는 팀 협업 환경 - 서버 -를 또 하나의 제품으로 제시하였고, 그 환경이 바로 Team Foundation Server 라는 제품이다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;왜?&lt;/h1&gt;  &lt;p&gt;그럼 왜 Team Foundation Server 일까?    &lt;br /&gt;사실 이 부분의 당위성은 위의 배경에서 어느 정도 설명하기는 했다. 그렇지만 꼭 Team Foundation Server를 쓸 필요는 없다. 이미 위의 배경과 같은 문제점을 해결하기 위해 많은 소프트웨어 개발자와 설계자들은 고민했고, 그에 맞는 솔루션들을 다양하게 만들어 제시했고, Open Source로 공개적으로 제공하는 무료 솔루션도 다양하다.소스 버젼 관리라면, Subversion 이나, CVS 정도, 요구사항 및 형상관리레벨 이라면 Redmine 도 좋다. 자동 빌드라면 Hudson 정도 써주면 딱 일듯 싶다. 가격도 없다. 원하는 대로 쓰고 수정하고, 제안만 하면 된다.&amp;#160; &lt;br /&gt; 그런데 굳이 왜 Team Foundation Server 일까? 구구절절한 당위성에 대해서는 MS에서 제시하는 개발 방법론이나, 다양한 보고서, 광고 만으로도 충분히 나온다. 그런 구차한 변명을 걷어낸다면, &lt;strong&gt;그 모든 것의 결론은 MS Platform 기반으로 개발하고, Visual Studio를 쓰기 때문&lt;/strong&gt;일 것이다. Visual Studio에 딱 달라 붙어서 아주 유연하게 쓸 수 있다는 것! 바로 그 점일 것이다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/image/1834863E4F3CC3FD39EAEF&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;visual_studio_logo&quot; border=&quot;0&quot; alt=&quot;visual_studio_logo&quot; src=&quot;http://cfile23.uf.tistory.com/image/1474DF354F3CC3FD203328&quot; width=&quot;214&quot; height=&quot;32&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;또 전산 관리자 측면을 바라본다면, 유지보수를 위해서라도, 역시 한 벤더에서 그냥 한번에 모든 연계 제품을 묶는게 더 편하지 않나 싶다. &lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;무엇을 할 수 있나?&lt;/h1&gt;  &lt;p&gt;팀 협력 작업이라면 대부분의 작업을 할 수 있다.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;버전 관리&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;과거 SourceSafe 라는 약간은 원시적인 동작을 했지만, 그럭저럭 쓸만했던 제품이 있다. Visual Studio에 딱하니 붙기도 하고, 소스 DB도 단순한 형태라 백업하기도 그만이였다. 이 TFS에는 그 원시적인 도구를 조금 더 세련된 UI와 내부적인 DB를 MS SQL이라는 DBMS에 담고, Brench 같은 다른 버전관리도구에서나 제공했던 기능들도 넣었다. 애초 TFS를 쓰는 대부분의 사용자는 바로 이 소스 버전관리 하나만으로도 모든 것을 만족한다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile30.uf.tistory.com/image/18055B454F3CC3FE2749FA&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;sourceControl&quot; border=&quot;0&quot; alt=&quot;sourceControl&quot; src=&quot;http://cfile22.uf.tistory.com/image/154B043A4F3CC3FE0A77BA&quot; width=&quot;244&quot; height=&quot;165&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;작업 관리&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;어설프지만, Redmind 같은 요구사항 관리나, 형상관리를 처리할 수 있는 기능이 있다. 요청 사항들을 관리하기도 하고, 작업을 관리하며, 버그 이력을 남길 수 있다. 이 모든 작업을 Visual Studio 안에서 처리할 수 있다. 입력을 Form에서 하고, 그 결과 값을 Grid 형태로 보기도 하고, Excel로 뽑아볼 수 있으며, MS Project를 통해서 관리 할 수 있다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/image/171EB63B4F3CC3FE08758F&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;workitem&quot; border=&quot;0&quot; alt=&quot;workitem&quot; src=&quot;http://cfile3.uf.tistory.com/image/164D643A4F3CC3FF0C699F&quot; width=&quot;244&quot; height=&quot;165&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;자동 빌드&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;자체적으로 빌드 서버를 구축할 수 있다. 자동으로 최신 소스를 받아 사용자의 별다른 도움 없이 자동으로 빌드 결과물을 만들어 낼 수 있다. MS Build를 사용하는 솔루션 파일만 있으면, 그 솔루션 파일에 설정된 내용대로 자동으로 빌드하게 된다. 최초 구축이 힘들어서 그렇지 한번 구성하면 나름 쓸만한 도구 이다. 내부적으로 Test DLL이 있으면, Test까지 수행해준다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/image/155830404F3CC3FF2060FF&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;build&quot; border=&quot;0&quot; alt=&quot;build&quot; src=&quot;http://cfile9.uf.tistory.com/image/1165F5394F3CC3FF17DC84&quot; width=&quot;244&quot; height=&quot;165&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;그 외의 기능&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;SharePoint와 연동해 문서들을 올리고 관리할 수 있으며, 다양한 형태의 프로젝트 관련 Report 들을 만들어 주기도 한다. 생산성이나, 버그 경향 등을 일목 요연하게 볼 수 있다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;여기서는?&lt;/h1&gt;  &lt;p&gt;현재 저 위의 기능을 100% 완벽하게 구축해서 다 사용해 본 적은 없다. 하지만, 회사에서 사용되는 목적에 맞는 기능들을 어떻게 구축하고 사용하는지를 정리하기 위해 여기다가, 키보드로 끄적여 본다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h1&gt;방향&lt;/h1&gt;  &lt;p&gt;시간이 허락되는데 까지, 서버의 구축에서부터 사용법까지만 나열할 예정이다. 예전에 SourceSafe에 대한 어설픈 글 올린 것처럼 완결될 것 같지는 않지만, 기록이나마 남기기 위해서 적어본다. 회사의 환경을 그대로 소개하면서 설명하면 쉽겠지만, 내부 보안이라는 부분도 있으므로 별도 Virtual Machine에 구축하면서 설명할 것이다.&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1143&amp;regts=1330397857&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>기술자료</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1143</guid>
			<comments>http://hind.pe.kr/1143#entry1143comment</comments>
			<pubDate>Thu, 16 Feb 2012 17:38:26 +0900</pubDate>
		</item>
		<item>
			<title>InstallSheild Custom Function 넣기.</title>
			<link>http://hind.pe.kr/1142</link>
			<description>&lt;p&gt;InstallSheild로 여러가지 형태의 Installer를 만들지만, 대부분은 MSI 기반의 인스톨러로 만들게 됩니다.&lt;/p&gt;  &lt;p&gt;이 MSI 형식으로 만들게 되면, .NET Framework 역시 지원하며, .NET Framework를 통해 설치용 Custom Action을 만들어 추가할 수 있습니다. 하지만, Custom Action을 이해하려면, MSI 설치 순서와 그 사이 사이의 특성을 어느정도 파악해야 합니다.&lt;/p&gt;  &lt;p&gt;만일 단순히 파일을 삭제하거나, 검사하는 간단한 로직을 넣을 정도의 요량이라면, 굳이 Custom Action을 사용해 만들 필요는 없다고 생각합니다.&lt;/p&gt;  &lt;p&gt;InstallSheild에서는 특정 DLL에 포함된 특정 기능을 도출해서 쓸 수 있습니다. .NET이든, Native ( VC++ 등을 사용한 ..)든 어떠한 형태든, 표준 DLL 규칙을 가지고 있다면 어떤 형태가 되었든 사용 가능합니다. 물론 이 기능에도 수많은 기능들이 있고, 다양한 조건으로 다양한 상태에서 사용할 수 있지만, InstallSheild의 특성을 무시해서라도, 일단 설치나 제대로 되게 끔 하려하고 있다면, 필자처럼 하면 될 것입니다.&lt;/p&gt;  &lt;p&gt;1. 일단 DLL 만든다.&lt;/p&gt;  &lt;p&gt;일단 DLL 부터 만듭니다.&amp;#160; C#의 프로젝트 추가를 하시고, 프로젝트 종류를 Class Library로 하면 됩니다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/176FB7384F30A5751D47BF&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile29.uf.tistory.com/image/167FEF344F30A5753265F4&quot; width=&quot;644&quot; height=&quot;364&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;만일 설치될 PC에 .NET Framework의 버전도 꼭 설정해주시기 바랍니다. Visual Studio 2010을 사용한다면, 기본적으로 .NET Framework 4.0으로 되게 되는데, 대상 PC에 .NET Framework 4.0이 설치될 가능성이 없는 경우 2.0 정도로 맞춰주시면 최신 Windows Update를 받는다면 거의 다 동작할 것입니다.&lt;/p&gt;  &lt;p&gt;만들어진 DLL 프로젝트에서 그냥 public class에 public method를 만들기만 하면 됩니다. 적당히 이름을 붙이시기 바랍니다. 물론 InstallSheild와 쌍방 통신(InstallSheild 내의 데이터를 사용하거나, 실행 결과물을 InstallSheild에게 전달해야 되는 경우)가 필요하다면, 약간은 다르게 구성해야 겠지만, 만일 그럴 필요가 없다면, 그냥 class와 method를 public으로 만들기만 합니다.&lt;/p&gt;  &lt;p&gt;여기 예제에서는 ClearOldProducts 라는 클래스의 CleanOldProductInfo 라는 함수를 만들었습니다. &lt;/p&gt;  &lt;p&gt;적당히 안에 로직을 짜고, 컴파일 합니다. 만들어진 DLL을 이제 ISM 파일 수정에 들어가 추가해줍니다.&lt;/p&gt;  &lt;p&gt;일단 적용할 ISM 파일을 엽니다.   &lt;br /&gt;그리고 트리 메뉴에서 Custom Actions and Sequence를 엽니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/image/187654464F30A575220928&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;1&quot; border=&quot;0&quot; alt=&quot;1&quot; src=&quot;http://cfile9.uf.tistory.com/image/12033C344F30A576340520&quot; width=&quot;620&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;UI 혹은 CustomAction들이 보이는데, 그 중 Root Tree Item에서 오른쪽 버튼을 클릭합니다.   &lt;br /&gt;무척 많은 메뉴 내용이 보이는데, 그 중 &amp;quot;New Managed Code -&amp;gt; Stored in Binary table&amp;quot;을 선택합니다.    &lt;br /&gt;이미지 대상 PC에 설치되어 있거나, 이미 존재하는 파일을 가지고 하는 거면, 다른 옵션들을 활용할 수 있지만, 새롭게 설치하는 PC를 기준으로 본다면, MSI 인스톨러 안에 해당 DLL을 담고 있어야 하므로, &amp;quot;Store in Binary table&amp;quot;을 선택하는 것입니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/image/140B25364F30A5760AFB1A&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;2&quot; border=&quot;0&quot; alt=&quot;2&quot; src=&quot;http://cfile22.uf.tistory.com/image/2059E1384F30A576373D53&quot; width=&quot;644&quot; height=&quot;421&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;그러면 새로운 Custom Action이 생기는데, 그 위치에서 오른쪽 버튼을 클릭 한 뒤, &amp;quot;Custom Action Wizard...&amp;quot;를 띄웁니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/image/177CA3334F30A57701FEC6&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;3&quot; border=&quot;0&quot; alt=&quot;3&quot; src=&quot;http://cfile8.uf.tistory.com/image/1304D6384F30A5770830F4&quot; width=&quot;644&quot; height=&quot;379&quot; /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;Wizard가 뜨면 맨 처음 최초의 창은 넘어가시고...&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile21.uf.tistory.com/image/16020C384F30A5780C1656&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;4&quot; border=&quot;0&quot; alt=&quot;4&quot; src=&quot;http://cfile9.uf.tistory.com/image/1661E8414F30A5781CED25&quot; width=&quot;504&quot; height=&quot;380&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Custom Action의 설명을 추가할 것이 있으면 쓰지만, 그냥 넘어가도 됩니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/image/1936253E4F30A57903E513&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;5&quot; border=&quot;0&quot; alt=&quot;5&quot; src=&quot;http://cfile27.uf.tistory.com/image/147B14334F30A579027679&quot; width=&quot;504&quot; height=&quot;380&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Custom Action을 호출하는 방법인데, 그대로 두면 됩니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/image/1574B9364F30A579205F54&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;6&quot; border=&quot;0&quot; alt=&quot;6&quot; src=&quot;http://cfile29.uf.tistory.com/image/1977FF334F30A57936A40A&quot; width=&quot;504&quot; height=&quot;380&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;이제 그 대상이 되는 DLL을 찾아서 선택하면 된다. Browse 버튼을 클릭해서 특정 DLL을 선택해주면 됩니다.&lt;a href=&quot;http://cfile30.uf.tistory.com/image/19778A334F30A57A37C9D5&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;7&quot; border=&quot;0&quot; alt=&quot;7&quot; src=&quot;http://cfile8.uf.tistory.com/image/19685C364F30A57A532FA2&quot; width=&quot;504&quot; height=&quot;380&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/image/1151E1444F30A57A101D39&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;8&quot; border=&quot;0&quot; alt=&quot;8&quot; src=&quot;http://cfile5.uf.tistory.com/image/1560673A4F30A57B2CAC1A&quot; width=&quot;504&quot; height=&quot;380&quot; /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;DLL 선택이 되었으면, 이제 그 DLL 안에 있는 특정 함수를 선택 합니다.직접 입력해도 되지만, Browse를 클릭해서 해당 하는 클래스와 메소드를 선택하면 됩니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/image/197C80464F30A57B1C56D2&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;9&quot; border=&quot;0&quot; alt=&quot;9&quot; src=&quot;http://cfile5.uf.tistory.com/image/1778B6434F30A57B24244A&quot; width=&quot;504&quot; height=&quot;380&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/133C533C4F30A57B24BBE3&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;10&quot; border=&quot;0&quot; alt=&quot;10&quot; src=&quot;http://cfile10.uf.tistory.com/image/1478C1434F30A57C24308F&quot; width=&quot;504&quot; height=&quot;380&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;동작 방식인데, 비동기식으로 하면 인스톨 단계가 그대로 진행되면서 동작하므로, 가급적 Synchronous를 선택합니다. 그리고 exit code를 별도 제공할 예정이면 exit code를 선택하지만, 만일 없다면 Ignores exit code를 꼭 선택해야 합니다. 안그러면 종료 오류로 더 이상 처리 안되는 경우도 있습니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/image/165DF93A4F30A57C2F826F&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;11&quot; border=&quot;0&quot; alt=&quot;11&quot; src=&quot;http://cfile3.uf.tistory.com/image/173DBE444F30A57C2973DD&quot; width=&quot;504&quot; height=&quot;380&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;실행 조건인데, 그대로 두시면 됩니다. 즉시 실행이므로, 특정 조건이 되면 바로 실행되게 끔하는 것입니다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/image/2008A33B4F30A57C41640D&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;12&quot; border=&quot;0&quot; alt=&quot;12&quot; src=&quot;http://cfile10.uf.tistory.com/image/1463F3414F30A57D1AD0EB&quot; width=&quot;504&quot; height=&quot;380&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;마지막으로 이 스크립트가 실행되는 시점입니다. UI 가 있는 MSI면 Install UI Sequence에서, 없으면 Install Execute Sequence를 선택하여, 이벤트를 고릅니다. 그리고 Condition에 1이라고 넣습니다.&lt;/p&gt;  &lt;p&gt;C++ 처럼 TRUE면 1, FALSE 면 0 입니다. 만일 특정 조건(Windows 2000 이상일때 라든가, x86 CPU라든가, 별도 조건이 있는 경우)가 있다면 만들어서 넣어도 되지만, 조건에 상관없이 무조건 실행되는 거라면, 1이라고 넣어주시면 됩니다.&lt;/p&gt;      &lt;p&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/image/117557434F30A57D2E5F99&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;13&quot; border=&quot;0&quot; alt=&quot;13&quot; src=&quot;http://cfile7.uf.tistory.com/image/17391A3B4F30A57D0C2E92&quot; width=&quot;504&quot; height=&quot;380&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;요약 창이 뜨고 종료됩니다.&lt;/p&gt;  &lt;p&gt;이제 빌드 하고 동작시켜 보시면 됩니다. &lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1142&amp;regts=1328588209&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>Deployment</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1142</guid>
			<comments>http://hind.pe.kr/1142#entry1142comment</comments>
			<pubDate>Tue, 07 Feb 2012 13:15:58 +0900</pubDate>
		</item>
		<item>
			<title>WMI를 이용한 Windows XP VolumeKey 변경 스크립트.</title>
			<link>http://hind.pe.kr/1141</link>
			<description>예전에 BDD 했을 때 사용한 VB Script 인데, 혹시 몰라 올려 놓습니다.&lt;br /&gt;
지금은 대세가 Windows 7인지라...&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
&lt;div&gt;&lt;/div&gt;
&lt;blockquote&gt;&lt;div&gt;
'&lt;/div&gt;
&lt;div&gt;' WMI Script - ChangeVLKey.vbs&lt;/div&gt;
&lt;div&gt;'&lt;/div&gt;
&lt;div&gt;' This script changes the product key on the computer&lt;/div&gt;
&lt;div&gt;'&lt;/div&gt;
&lt;div&gt;'***************************************************************************&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
ON ERROR RESUME NEXT&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&lt;div&gt;if Wscript.arguments.count&amp;lt;1 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;Wscript.echo &quot;Script can't run without VolumeProductKey argument&quot;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;Wscript.echo &quot;Correct usage: Cscript ChangeVLKey.vbs ABCDE-FGHIJ-KLMNO-PRSTU-WYQZX&quot;&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;Wscript.quit&lt;/div&gt;
&lt;div&gt;end if&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
Dim VOL_PROD_KEY&lt;/div&gt;
&lt;div&gt;VOL_PROD_KEY = Wscript.arguments.Item(0)&lt;/div&gt;
&lt;div&gt;VOL_PROD_KEY = Replace(VOL_PROD_KEY,&quot;-&quot;,&quot;&quot;) 'remove hyphens if any&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
for each Obj in GetObject(&quot;winmgmts:{impersonationLevel=impersonate}&quot;).InstancesOf (&quot;win32_WindowsProductActivation&quot;)&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;nbsp; &amp;nbsp;result = Obj.SetProductKey (VOL_PROD_KEY)&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
&amp;nbsp; &amp;nbsp;if err &amp;lt;&amp;gt; 0 then&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; WScript.Echo Err.Description, &quot;0x&quot; &amp;amp; Hex(Err.Number)&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; Err.Clear&lt;/div&gt;
&lt;div&gt;&amp;nbsp; &amp;nbsp;end if&lt;/div&gt;
&lt;div&gt;&lt;br /&gt;
&lt;/div&gt;&lt;div&gt;
Next&lt;/div&gt;
&lt;div&gt;Wscript.echo &quot;Windows XP의 제품 키 변경이 완료되었습니다.&quot;&lt;/div&gt;
&lt;/blockquote&gt;&lt;div&gt;
&lt;/div&gt;&lt;div&gt;
&lt;br /&gt;&lt;/div&gt;
&amp;nbsp;원리는 간단합니다 WMI을 돌면서&amp;nbsp;win32_WindowsProductActivation 에 대한 인터페이스를 가져온 뒤, 그 안에 입력받은 볼륨키를 넣어주는 기능입니다.&lt;br /&gt;
사용방법은 위의 Script를 실행할 때, 파라미터로 볼륨키를 넣어주시면 됩니다. &amp;nbsp;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;Cscript &lt;i&gt;ChangeVLKey.vbs&lt;/i&gt;&amp;nbsp;&amp;nbsp;&lt;b&gt;ABCDE-FGHIJ-KLMNO-PRSTU-WYQZX&lt;/b&gt;&lt;br /&gt;
&lt;br /&gt;
그 중 이텔릭체로 된 부분은 위의 스크립트를 저장한 파일이름인데, 그 파일이름으로 하시면 됩니다.&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1141-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1141&amp;regts=1328588210&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>Deployment</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1141</guid>
			<comments>http://hind.pe.kr/1141#entry1141comment</comments>
			<pubDate>Fri, 03 Feb 2012 13:43:54 +0900</pubDate>
		</item>
		<item>
			<title>이제 2012.. 오늘(2011.12.30)부터 내일(2011.12.31)까지</title>
			<link>http://hind.pe.kr/1140</link>
			<description>&lt;p&gt;오늘부터 틈 날때 마다 전화를 할 예정이다.&lt;/p&gt;  &lt;p&gt;ㄱ 부터 ㅎ 까지, 연락을 다 해봐야 겠다.&lt;/p&gt;  &lt;p&gt;먼저 예전에 사용한 011-9899-7296 번호를 010으로 바꾼 상태라, 예전 번호로 저장된 분들에게는 연락이 되지 않고 있다. 그래서 기왕하는거 새해 인사도 할 겸 내 전화번호 전달도 할 겸해서 모두 연락을 할 예정이다.&lt;/p&gt;  &lt;p&gt;시간이 의외 많이 들듯! ㅋ&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1140&amp;regts=1325213751&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1140</guid>
			<comments>http://hind.pe.kr/1140#entry1140comment</comments>
			<pubDate>Fri, 30 Dec 2011 11:55:50 +0900</pubDate>
		</item>
		<item>
			<title>인터파크 비스켓, 좀 이제 변화가 필요합니다!</title>
			<link>http://hind.pe.kr/1139</link>
			<description>&lt;p&gt;앞의 포스트에서 한가득 불만을 던졌다면, 이번엔 인터파크에게 조언을 드립니다. 이 글을 찾아와서 볼 것 같지는 않지만, 최소한 내가 떠들었었다는 기록 정도로 남겨보죠. 혹시 압니다. 인터파크가 아닌 다른데서 그에 상응하는 무언가를 만들어 낼지? ㅋ&lt;/p&gt;
  &lt;p&gt;자, 그럼 이제 이야기를 풀어보겠습니다.&lt;/p&gt;
  &lt;h3&gt;1. 책 정리를 위한 북카트(책 플레이 리스트)가 필요하다!&lt;/h3&gt;  &lt;p&gt;지금 웹에서든, 비스킷 매니저든 소장하고 있는 책에 대한 관리가 전혀 불가능합니다. 먼저 웹 같은 경우에는 한페이지에 고작 10권 정도로 나누어 펼쳐지는 정도만 보여줍니다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/image/173A6D464EF418C60ADF1B&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/163141404EF418C70BC027&quot; width=&quot;440&quot; height=&quot;355&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;비스킷 매니저는 7줄 정도씩 보여준다고 보면 되겠더군요.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/image/131DBE3C4EF418C7337AE7&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/1373B8344EF418C73250E5&quot; width=&quot;439&quot; height=&quot;214&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;이건 아니라고 보죠. 사실 내가 원하는 레벨이 아니라는 거죠. 만일 1,000 여권이 넘는다고 쳐봅시다.   &lt;br /&gt;
과연 어떻게 저 많은 책을 찾아 볼 수 있다고 생각합니까?&lt;/p&gt;
  &lt;p&gt;아 혹시 Apple 의 가판대 같은 모양을 생각하고 계십니까? 그렇다면 정확하게 틀리셨습니다.   &lt;br /&gt;
보기 좋을지는 모르겠지만, 수많은 책을 관리하기에는 꽝이지 않을까 싶습니다.&lt;/p&gt;
  &lt;p&gt;제가 원하는 것은 폴더 관리가 되는 UI라는 것이죠. 원하는 형태의 Folder를 구축해서 나열하는 형태가 되어야 한다는 것입니다. 그런데, 이 때 중요한 것은 Windows Explorer의 Folder 형태라기 보다는 다양한 조건에 따른 폴더여야 한다는 것입니다. 가장 근접한 예가, ITune의 My PlayList 랄까요?&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/image/1831C8404EF418C80A0535&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/1828A43C4EF418C8272862&quot; width=&quot;448&quot; height=&quot;304&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;책들은 계속 있지만, 그 중에서 몇몇 책들은 내가 원하는 폴더로 몰아넣어서 정리하는 거죠. 읽었던 책, 나중에 읽을 책, 다시 볼 책... 얼마든지 원하는 형태대로 정리할 수 있는 논리적인 공간이 필요하다는 것입니다. 웹으로 안되서 안되겠다고요? 왜 꼭 웹으로 해야 하는지 그 것 부터 알고 싶군요. 애초 웹에서 작업할 일도 없고( 실제로 인터파크 내에서 만들어지지도 않았잖아요? ) 실제 비스킷과의 연결은 비스킷 매니저로 다 하고 있으니까요.&lt;/p&gt;
  &lt;p&gt;비스킷 매니저의 상단에 그와 비슷한 기능을 하는게 있긴 합니다. 그런데 항목이 딸랑 4개입니다.&lt;/p&gt;
  &lt;p&gt;전체보기 / 신문 / 사전 / 다운로드 가능목록.&lt;/p&gt;
  &lt;p&gt;저거 누가 눌러라도 볼까요? ( 사전은 왜 들어간거죠? ㅋㅋ)&lt;/p&gt;
  &lt;p&gt;즉, 애초 웹에서 하는 작업을 배제하고 철저하게 비스킷 매니저에 올인 했다면 깔끔했을 것 같군요.   &lt;br /&gt;
비스킷 매니저를 iTune과 똑같은 모양으로 만들지는 못하겠지만, 최소한 개념은 따라 들어갔다면 보다 쉽게 사용할 수 있지 않았을까 생각합니다. &lt;/p&gt;
  &lt;p&gt;사람마다 편하게 사용할 수 있는 방법이 다 다릅니다. 저렇게 말도 안되는 카테고리로 4개로 무조건 정하지 마시고, 사용자가 원하는대로 북카트 같은 것을 만들면 좋겠다는 것이니다.&amp;nbsp; &lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;정리하자면 개인별로 플레이 리스트 처럼, 책에 대한 북 카트 개념의 폴더를 구성할 수 있으면 좋겠습니다.     &lt;br /&gt;
&lt;/strong&gt;&lt;/p&gt;
  &lt;h3&gt;2. 검색 기능.&lt;/h3&gt;  &lt;p&gt;뭐 계속 이놈의 비스킷 매니저 이야기가 계속 될 거 같군요. ㅋㅋ.   &lt;br /&gt;
지금 비스킷 매니저에는 책을 검색할 수 있는 기능이 없습니다. 전혀!&lt;/p&gt;
  &lt;p&gt;수많은 책에서 찾는 방법은 마우스 휠을 갈궈서 최대한 밑으로 내려가는 수 밖에 없습니다. 몇 권이든 간에 말이죠.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile28.uf.tistory.com/image/173F293B4EF418C804D2DA&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/191977364EF418C91B5EE1&quot; width=&quot;458&quot; height=&quot;346&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;차라리 검색 창 같은 것을 넣어서, 제목으로 검색하거나, 작가이름 별로 검색하거나, 필터 할 수 있는 도구가 있었으면 좋겠군요. &lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;h3&gt;3. 느린 접속.&lt;/h3&gt;  &lt;p&gt;짐작은 좀 되긴 하지만, 여튼... 지금 이 비스킷 매니저를 띄워서 로그인을 한뒤, &quot;나의 eBook&quot; 화면내에, 내 책이 뜨는 시간은 대략 20여초 정도 소요 됩니다. 심하면 1분도 넘구요. 아마 인터파크 서버와 통신을 해야 되서겠죠.&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;h3&gt;4. 책 제목 나열 방식.&lt;/h3&gt;  &lt;p&gt;전에도 안건을 올린 건데... 단행본이면 모르겠지만, 시리즈물 같은 경우에는 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 .... 이런 식으로 번호가 붙죠.. &lt;/p&gt;
  &lt;p&gt;그런데, 이걸 정렬하면 어떻게 될까요?&lt;/p&gt;
  &lt;p&gt;1, 11, 12, 13, 2, 3, 4 ...&lt;/p&gt;
  &lt;p&gt;어떠세요? 1 권 본 뒤, 2권을 보려면 ...&lt;/p&gt;
  &lt;p&gt;또 있습니다. 지금 인터파크 이북의 파일이름 구조는 이렇습니다. &quot;패키지명&quot;/&quot;실제 책 이름&quot;&lt;/p&gt;
  &lt;p&gt;예를 들면 &quot;열혈강호 1-50권&quot; 패키지를 사서 보면, &quot;열혈강호 39&quot;편의 파일이름은...&lt;/p&gt;
  &lt;p&gt;열혈강호 1-50권/열혈강호 39 이렇게 나옵니다.&lt;/p&gt;
  &lt;p&gt;만일 제가 단행본으로 2권을 샀다고 치죠... 그걸 정렬해보세요..&lt;/p&gt;
  &lt;p&gt;그러면,    &lt;br /&gt;
열혈강호 2권/열혈강호 2권    &lt;br /&gt;
열혈강호 1-50권/열혈강호 50    &lt;br /&gt;
열혈강호 1-50권/열혈강호 49    &lt;br /&gt;
열혈강호 1-50권/열혈강호 48    &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; .....    &lt;br /&gt;
열혈강호 1-50권/열혈강호 4    &lt;br /&gt;
열혈강호 1-50권/열혈강호 1&lt;/p&gt;
  &lt;p&gt;웃기지 않나요?&lt;/p&gt;
  &lt;p&gt;애초 책이름으로 나와야 할 것을 내부적으로 정한 파일이름으로 무조건 깔다 보니.. 저 모양새가 나오는거죠.&lt;/p&gt;
  &lt;p&gt;방법은 2가지가 있습니다.&lt;/p&gt;
  &lt;p&gt;첫번째 방법은 책 이름(패키지이름 : 사용여부)으로 하고, 책 이름 할 때, 시리즈 번호를 &quot;0001&quot; 이렇게 해야 한다는거죠. 예를 들어보죠.&lt;/p&gt;
  &lt;p&gt;예제1) 열혈강호 0001(열혈강호 0001-0050)   &lt;br /&gt;
예제2) 한겨레신문 2010년 04월29일자(한겨레신문 : 사용안함) &lt;/p&gt;
  &lt;p&gt;이제는 정렬하면 뒤죽 박죽 이름 섞일일 없겠죠? &lt;/p&gt;
  &lt;p&gt;두번째 방법은 시리즈 번호나 상태코드 값을 책이름에서 빼서 별도 필드로 만들라는 것입니다. 책 이름은 비스킷 내부에서 알아서 조립하고, 정렬할 때, 시리즈 번호값과 상태코드값을 적절하게 표현하라는 것입니다.    &lt;br /&gt;
저거 서버에서 받아온 받아 올 때, 책이름, 책 세트 이름, 시리즈 번호,사용여부 등등 나눠서 받아서 그에 맞게 보여주라는 거죠. 책 이름에 박지 마시고...&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/image/133E94384EF418C90BAE4D&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/143F0E374EF418C9019624&quot; width=&quot;596&quot; height=&quot;194&quot; /&gt;&lt;/a&gt;    &lt;br /&gt;
    &lt;br /&gt;
&lt;a href=&quot;http://cfile23.uf.tistory.com/image/144B22354EF418CA05D87F&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/1423CD3B4EF418CA22BFD1&quot; width=&quot;596&quot; height=&quot;194&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;그리고 시리즈 물은 좀 하나로 묶어서 나타내서 단행본과는 차별화를 두세요. 저렇게 두니까.. 원.. 책 검색을 어디 할 수 있나?&lt;/p&gt;
  &lt;p&gt;&lt;span style=&quot;font-size: 14pt; font-weight: bold;&quot;&gt;5. 창 크기 변경 지원.&lt;/span&gt;&lt;/p&gt;
  &lt;p&gt;UI를 이쁘게 표현하고, MFC로 구성하는 아픔을 어느정도는 이해하지만, 그 이해는 이해고, 일단, 사용자가 편하고 유용하게 써야 되지 않을까 싶네요. 저 프로그램 창 크기 조절이 안됩니다. 즉 안의 내용을 한번에 많이 보고 싶어도, 절대 불가더군요. 딱 고정된 크기로 끝까지 써야 됩니다. 헐...&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/image/1436ED3F4EF418CA2F0660&quot;&gt;&lt;img src=&quot;http://cfile8.uf.tistory.com/image/1525183C4EF418CB29B12C&quot; width=&quot;599&quot; height=&quot;453&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;이 크기 그대로... 솔직히 책 찾을 때, 아래의 창이 작아도 아무런 불편이 없습니다. 차라리 아예 안 보이는게 답일 수도...아래보다 윗쪽의 크기가 더 커야 되지 않을까요? &lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;예쁘게 만드는것보다 더 중요한 것은 사용자의 편의성... 이거 잊지 말았으면 좋겠군요.&lt;/strong&gt;&lt;/p&gt;
      &lt;h3&gt;6. 내 보관함의 Drag &amp;amp; Drop&lt;/h3&gt;  &lt;p&gt;못 구현하시는 거죠?&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/image/191FCC3D4EF418CB095318&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/1916D33B4EF418CB2D9575&quot; width=&quot;616&quot; height=&quot;466&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;그래서 위의 그림처럼 구현 하신거죠?&amp;nbsp; 안타깝습니다. 특히나 음악 파일 같은 경우 D 드라이브에.. 뭐에 뭐에...물론 XP 에는 내 문서안에 다 들어가 있을거라.. 저리 만드셨나 본데요... 요즘은 음악 폴더를 다른 위치에 박아서 넣기도 합니다. 혹은 바탕화면에 있는 거라면.. 어떻게 한번 찾기 힘들더군요. &lt;/p&gt;
  &lt;p&gt;개발 편의성도 좋지만... 좀 ....!!!!!!&lt;/p&gt;
  &lt;p&gt;Drag &amp;amp; Drop 으로 하시던가, 아니면, 위의 Browser 구조를 Window Explorer 구조로 해주시던가, 아니면 경로를 직접 입력할 수 있는 공간이 있던가 했으면 좋겠군요. &lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;h3&gt;7. 동기화 할 내용을 좀 늘려봐요!&lt;/h3&gt;  &lt;p&gt;책을 얼마나 읽었는지, 읽었던 책인지 아닌지, 책갈피라든지.. 이런 각 개인 정보를 좀 저장해야 하지 않을까 싶네요.   &lt;br /&gt;
거 맨날 팽팽 놀고 있는 3G 기능을 쓰던지, WIFI를 쓰던지, 비스킷 매니저와 동기화 할 때 하든지...    &lt;br /&gt;
이런 정보를 서버에다 저장해서 좀 보관하세요. 저는 종종 어두운데서 글을 읽을 때는 휴대폰을 종종 사용하는데, 어디까지 읽었는지 찾는게 일이더군요. &lt;/p&gt;
  &lt;p&gt;서로 책갈피가 동기화가 안되니... 1회용인가요?&lt;/p&gt;
  &lt;p&gt;3G 기능을 쓴다고 쳐도 얼마나 되는 양(책 ID와 위치 값 정도? 끽해야 1K???)이겠습니까? 전화 비 아까우면 비스킷 매니저로 동기화 하면 동기화를 시켜주던지.. &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;h3&gt;정리&lt;/h3&gt;  &lt;p&gt;일단 이것 말고도 더 많은 제안거리들이 있지만, 시간상 문제도 있고, 쓰기도 귀찮기도 하니까.. 여기까지 하죠.&lt;/p&gt;
  &lt;p&gt;작년에는 2~3번 업데이트 하는 것 같더니, 올해 들어서는 한번도 안하더군요.&lt;/p&gt;
  &lt;p&gt;아무래도 이번에 비스킷 개발팀 해체한 것 같더군요. 즉 이제 더 이상의 업데이트는 기대 조차 못할 것 같다는....&lt;/p&gt;
  &lt;p&gt;그런데, 아시는가 모르겠군요. 그 몇 푼 아껴보려고 하는 순간, 댁들이 구축한 비스킷 시스템이 점점 황폐화 될 수 있다는 거죠. 아 물론 모바일(아이폰이나 안드로이드 폰 등등)에서 조금씩 조금씩 벌 수 있다고 생각할 수 있을지 모르겠지만, 이런 사소한 것들을 제대로 풀지도 못하면서 WIFI 버전 만들고, 새로운 모델 만든다고 깝쭉 대봐야, 소용 없다는 것입니다. &lt;/p&gt;
  &lt;p&gt;완성도 있게 사용성 있게 만들어줘야 그 다음을 기대하고 그 기대에 부응해 주는게 소비자라는 거죠.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;3~4년 쓰다가, 밧데리 자체 문제가 발생하면 뜯어서 재활용해보다가, 말고, 그냥 다른 회사 것(아마존 킨들, 아이패드, 등등)을 쓰던지, 아니면 인터파크의 비스킷2를 쓸지 여부는 이제 인터파크 하기 나름입니다.&lt;/strong&gt;&lt;/p&gt;
    &lt;p&gt;그리고 Open 하세요. 댁들이 비스킷 매니저 업그레이드 하기가 힘들면, 그냥 동기화 Component 와, 웹 서비스들을 SDK로 제공하거나 아예 기술을 Open 한 뒤에 개발자들이 개발 할 수 있게 해주세요. 그냥 기기와 책 장사에 올인하세요. 차라리 그게 더 나을지도 모르겠군요 ㅎ.&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1139&amp;regts=1324620198&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1139</guid>
			<comments>http://hind.pe.kr/1139#entry1139comment</comments>
			<pubDate>Fri, 23 Dec 2011 14:59:40 +0900</pubDate>
		</item>
		<item>
			<title>인터파크 비스킷. 각성 좀 하시죠.</title>
			<link>http://hind.pe.kr/1138</link>
			<description>&lt;h2&gt;시작&lt;/h2&gt;  &lt;p&gt;지금 저는 인터파크의 비스킷 소유하고 있습니다. 국내 책 유통 업체 최초로 만든 이북(E-Book)이여서 상당한 매력을 느꼈고, 그에 맞추어 샀죠. 그리고 많이 기대로 했습니다. 특히나 책 유통업체이니, 출판사를 상대로 하는 작업도 누구보다 수월(아이리버의 스토리)&amp;#160; 하고, 대행도 아닌(교보문고, 영풍문고) 스스로 하는 작업이기 때문에 더더욱 많은 관심을 가졌었죠.&lt;/p&gt;  &lt;p&gt;그렇게 1년을 넘게(2010년 4월 경 구매 사용)사용하면서 변화된 모습을 정리하면 아래와 같습니다.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;조루 밧데리 문제를 어느정도 개선했다.&lt;/li&gt;    &lt;li&gt;E-Book의 종류가 많이 늘었다.&lt;/li&gt;    &lt;li&gt;저렴한 책도 몇 몇개 나왔다.&lt;/li&gt;    &lt;li&gt;북씨라는 1인 출판 관련 기업과 함께 하려 노력했다.&lt;/li&gt;    &lt;li&gt;라이트 노벨도 계약해서 만들고 있다.&lt;/li&gt;    &lt;li&gt;WIFI 버전을 만드는 등, 가격이 무척 저렴해지고 있다.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;변화와는 다르게 개인적으로는 2010년 초/중반 까지는 그럭저럭 쓰다가, 2011년 11월까지 거의 서랍 속에서 오랫동안 잠을 재웠죠.(밧데리가 완전 나갈거라고 생각될정도로). 요근래, 묵향 같은 무협소설들과, 라이트 노벨 등을 구해서 보면서 요 근래 다시 사용하기 시작합니다.&lt;/p&gt;  &lt;p&gt;이렇게 사용하면서 늘 나에게 무거운 돌처럼 다가오는 불편한 것들을 이제 풀어보려 합니다.&lt;/p&gt;  &lt;h2&gt;내가 생각하는 불편한 점들.   &lt;br /&gt;&lt;/h2&gt;  &lt;h4&gt;글 읽는데 불필요한 키보드.&lt;/h4&gt;  &lt;p&gt;맨 먼저 볼 것은 바로 키보드 입니다. 사실 책을 읽을 때 키보드라는 존재는 불 필요 합니다. 정말 책 읽을 때 사용하는 키는 전원과 이전/다음 페이지 정도만으로도 충분합니다. 만일 어느 정도의 글 건너 띄기를 한다면, 여러 개의 장으로 나뉜 책에서 장을 건너 뛰는 정도가 정말 필요할지도 모르겠군요.   &lt;br /&gt;지금까지 제가 이 비스킷을 사용하면서 제대로 써본 키를 정리하면 아래와 같습니다.&lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;다음 페이지.&lt;/li&gt;    &lt;li&gt;이전 페이지&lt;/li&gt;    &lt;li&gt;HOME&lt;/li&gt;    &lt;li&gt;Back&lt;/li&gt;    &lt;li&gt;Enter&lt;/li&gt;    &lt;li&gt;커서키&lt;/li&gt;    &lt;li&gt;텍스트 사이즈 변경.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;특히 저 중에 Back 키는 책 읽다가 실수로 누른 키보드 덕에 뜬 이상한 기능들을 취소하기 위해 정말 자주 누른 것 같습니다. 진짜 완전히 엔지니어 관점에서 만드는 기능인 것 같습니다. 무슨 생각으로 넣었는지 정말 궁금할 정도랄까요?&lt;/p&gt;  &lt;h4&gt;글 읽는데 불필요한 기능들.&lt;/h4&gt;  &lt;p&gt;참 있으면 좋겠다라고 생각한 엔지니어들이 모여 생각한 것 같습니다. 기왕 파는거 좀 비싸게 팔아야 되는데, 책만 읽게 해서 쓰겠나.. 라는 생각에 불필요한 금액만 높인 기능들이라고 생각됩니다. &lt;/p&gt;  &lt;ul&gt;   &lt;li&gt;사전     &lt;br /&gt;뭐 광고에는 그럴싸하게 표현합니다. 책 내용 중 단어 위에 가면 자동으로 문맥 검사해서 해당 단어 찾아주고, 그에 해당하는 단어의 뜻을 밑의 팝업으로 보여줍니다. 우와~ 하겠죠? 그런데 말이죠. 이거 얼마나 쓸거라고 생각하는지요? 실제 책 읽을 때 사전 옆에 끼고 책 읽어본 적 있나요? 정말 그렇게 사전끼고 읽을 정도라면, 거의 분석이나 연구 목적인데... 그것을 이북 가지고 할 거라고 생각하셨나요? 훗...      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;회전 기능.     &lt;br /&gt;화면을 넓게 본다... 의도 좋습니다. 넓게 읽는 것 좋을 것 같네요. 그런데, 실제로 이 기능을 써보면, 되려 글 읽는데 방해만 됩니다. 왜냐면, E-Book의 특성 상 페이지내의 글자 크기나 위치가 변경되면, 페이지 전체 위치가 달라지게 됩니다. 문맥 끊어지는 부분도 틀려지고... 차라리 그냥 글자를 크게 보거나 작게 보는 정도면 되지, 굳이 돌려서 까지 보려 하지 않습니다. 더욱이 이전/다음 페이지 키가, 아래쪽에 다 몰려 있는데, 가로로 볼 때 그 불편함 생각해 보셨습니까?       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;다양한 파일 포맷 지원.     &lt;br /&gt;보면, HWP, DOC, PDF 등등 지원한다고 하는데... 실제 HWP나 DOC, PDF 파일의 경우 대부분 A4나 US-Letter 사이즈의 문서를 보는 경우가 많습니다. 굳이 폰트 사이즈로 본다면 9~12 사이즈의 폰트.      &lt;br /&gt;그것을 비스킷에서 본다? 그것도 A6 사이즈의 화면에서.. 정말 기가 막히고 코가 막합니다. 글자 진짜 작게 나옵니다. 간신히 돌려서라도 보겠지만, 그 확대한다 돌린다 하면서 껌뻑 껌뻑 거리면.. 정말 글읽기 싫어집니다. 즉 괜한 돈지랄 해서 괜한 기능 덧붙였다고나 할까요?       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;3G???     &lt;br /&gt;LG U+와 연계해서 내부에 3G로 통신하는 모듈을 넣었다는데.. 더욱이 통신비는 인터파크가 지불해준다.. 뭔가 통 큰 것처럼 말씀들 하시는데, 진짜 의미 없는 기능 같습니다. 뭐.. 이 부분은 나중에 다시 자세히 언급 드리죠.      &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;빠른 화면 전환?     &lt;br /&gt;이거 이전 버전까지는 되고, 현재는 기존 전자 잉크를 사용하는 대부분의 이북 처럼 되고 있습니다.       &lt;br /&gt;빠른 화면 전환이라는 게 무엇인지를 먼저 알아봐야 겠죠? 빠른 화면 전환이라는 것은 기존 이 북들의 전자잉크 방식이 가진 화면 초기화 과정을 없앤 방식입니다. 보통 이 북에서 채택된 전자잉크는 화면 전환할 때, 초기화 작업을 해야 합니다. 이 초기화 작업이라는게 뭐냐면, 화면 전체를 검게 칠한 뒤에 새로 글을 쓰는 것입니다. 그래서 화면을 넘길 때, 전체가 검게 되었다가, 하얗게 리셋되고, 그 뒤에 실제 써야 될 내용을 쓰다보니, 마치 화면이 껌뻑 껌뻑 거리는 문제죠. 이 문제를 비스킷에서는 리셋 과정 없이, 글자만 스스스~ 변환되는 형태로 되었죠.      &lt;br /&gt;그런데, 어느 순간에 이 빠른 전환 기능이 삭 사라졌습니다. 쥐도 새도 모르게. 뭐 어디 업데이트 로그에 적혀 있을지는 모르겠지만...ㅋㅋ       &lt;br /&gt;완전 낚였습니다.       &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;MP3     &lt;br /&gt;음악 들으면서 책 읽으시라고, 만든 기능 같던데요. 실제 MP3를 넣어보면 ㅋ~ 합니다. 일단 음량이 전체적으로 작습니다. 물론 중간에 패치해서 조금 더 사운드를 키우기는 했는데, 역시 삐리 합니다. 전체적으로 낮은 볼륨감으로 음악듣기 참 거시기 합니다. 조용한데서는 좀 크기가 있지만, 좀 시끄러운데서는 뭔가 횡한듯..게다가 음질도 그다지 좋은 편은 아닙니다. 물론 이건 개인차가 큰 부분이니.. 뭐 더 언급하기 싫군요.&lt;/li&gt; &lt;/ul&gt;  &lt;p&gt;저 기능들 빼면 얼마 즈음 가격 하락이 될 수 있을까요?&lt;/p&gt;  &lt;h4&gt;&lt;/h4&gt;  &lt;h4&gt;책 정리 불가능.&lt;/h4&gt;  &lt;p&gt;제가 꼽는 최악의 기능입니다. 책 정리가 전혀 불가능합니다. 마도 이 비스킷 장치와 비스킷 매니저를 만들었을 때는 미래에 대해서는 전혀 생각 치 않고 만들었다는 생각이 듭니다.&amp;#160; 일단, 왜 불편한지 살펴보도록 하죠. 제가 보유한 책은 현재(2011년12월20일 기준)까지 421권. 대략 400여권 정도인데요. 이를 비스킷 매니저를 띄워봅니다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/image/135CAB394EF0295604FBF3&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile9.uf.tistory.com/image/131BA03B4EF0295608216B&quot; width=&quot;464&quot; height=&quot;351&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;   &lt;p&gt;지금 화면이 저렇게 보이니까, 얼핏보면 괜찮은것 같지요? 그런데, 왼편에 있는 스크롤바를 보시기 바랍니다.&lt;/p&gt;    &lt;p&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/image/151CB23B4EF0295606F1CA&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile10.uf.tistory.com/image/205B15384EF0295710CD78&quot; width=&quot;171&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt; &lt;/p&gt;  &lt;p&gt;네 저 조그만한게 스크롤 바라는 것입니다. 400여권의 책을 하나의 표로 쭉 표현해보려니 저 모양이죠.   &lt;br /&gt;저 내용 중에 책을 찾는 방법은? 최근 샀던 책의 날짜로 찾거나, 제목으로 찾으라는 거죠. 어이가 상실이라고 할까요?    &lt;br /&gt;뭐 그렇다고 저 UI에 검색기능이 있는냐 하면 그것도 없습니다.     &lt;br /&gt;이건 마치, 책을 사는 족족 책상 위에다가 한 권씩 해서 400권을 차례대로 쌓고, 그 안에서 읽을 책을 찾으라는 거죠. &lt;/p&gt;  &lt;p&gt;내 나름대로의 분류라든가, 읽었던 책이라든가, 시리즈라든가, 작가라든가, 내가 놓고 싶은 폴더식으로 놓는게 아니고, 진짜 저런식으로 방치해 놓는다는 것이죠.&lt;/p&gt;  &lt;p&gt;아마도 대부분 이 비스킷 쓰시는 분은 보유한 책이 한 10~20권 정도 인가 봅니다. 아니 그렇게 비스킷 관련 시스템 제작하신 분이 간주한 것인지도 모르겠군요. &lt;/p&gt;  &lt;p&gt;혹시나 해서 가로 펼치기를 해봤는데.. .이것은 정말이지 왜 만들었나 싶은 기능입니다.   &lt;br /&gt;    &lt;br /&gt;뭐에 쓰려고 만든 기능인지 되묻고 싶군요. ( 설마 있어보여서??? )&lt;/p&gt;  &lt;h4&gt;3G ??&lt;/h4&gt;  &lt;p&gt;네 이어서 씁니다. 아마도 강력하게 지원한 기능이기도 하구요. 인터파크 내에서 통신비 전액 지원해서 한다고 명기한 기능이라고 할까요? 3G를 통해서 구입한 책을 직접 다운로드 받으라고...   &lt;br /&gt;그런데, 이거 정말 어이없는 기능이라고 할까요?     &lt;br /&gt;일단 겁나 느립니다. 스마트폰 보다 더 느립니다. 접속하는데만 30여초, 페이지 전환할때 거의 4~5초씩 딜레이 먹고, 운나쁘면 3~40초, 어쩔때는 1분 동안 화면이 안 변한 적도 있구요. 게다가, 무슨 UI가 웹페이지를 그대로 얹었는지, 화면이 꾸리 꾸리 해서 사용방법 정말 꾸리 꾸리 합니다. 또 책을 다운로드 받아봤는데, 1회에 한해서 다운가능하고, 나중에 지웠다가 다시 다운로드 받으려면, PC를 통해서 하라는 군요. 에라이.. 생색은 다 내면서 되는건... 다운한번 해봤는데, 그 속도에 답답해서 결국 PC로 하게 되더군요.    &lt;br /&gt;또 400여권의 책이 있으니, 그 중에서 책 고르는것도 일이더군요. 한번에 5권씩 표시되는데, 80여 페이지를 왔다 갔다 해야 합니다. 훗...    &lt;br /&gt;밧데리 조루의 원인이기도 하구요;;;;&lt;/p&gt;  &lt;p&gt;그냥...WIFI로 바꿔줘요. 이런 쓰레기 같은 3G 모델 달아두고, 생색내지 마시구요....&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;h2&gt;정리&lt;/h2&gt;  &lt;p&gt;현재 저는 지금 &amp;quot;망할이북&amp;quot; 이라는 이름을 붙이고 쓰고 있습니다.   &lt;br /&gt;그 표현 그대로 입니다. 잠깐, 아이패드도 써보고, 킨들 DX도 써봤거든요. 정말이지 비교되더군요.    &lt;br /&gt;어쩔 수 없다고 봅니다. 처음 만들어본거니.. &lt;/p&gt;  &lt;p&gt;하지만, 좀 더 신경써서 만들었다면 이런 불만이 해소되지 않았을까요? 아니, 늦었지만, 지금이라도, 수정하면 되지 않을까요?&amp;#160; 일단, H/W 오류는 어쩔 수 없습니다. - 키보드.. 이제와서 떼달라고 할 수도 없고.. - 하지만, 최소한 소프트웨어 적으로 해결이 가능한 부분은 좀 수정이 필요하다고 생각합니다.&lt;/p&gt;  &lt;p&gt;다음 글은 최소한 이런 점들이 바뀌었으면 좋겠다는 글로 다시 올려보려 합니다.&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1138&amp;regts=1324362661&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1138</guid>
			<comments>http://hind.pe.kr/1138#entry1138comment</comments>
			<pubDate>Tue, 20 Dec 2011 15:21:11 +0900</pubDate>
		</item>
		<item>
			<title>C#에서의 event와 Invoke.</title>
			<link>http://hind.pe.kr/1137</link>
			<description>&lt;p&gt;C#에서는 Listener 패턴을 구현하기 쉽다. 특히 event라는 예약어를 제공하고 있어서, Callback 형태의 구현이 어렵지 않다.&lt;/p&gt;  &lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;520&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;518&quot;&gt;class Test         &lt;br /&gt;{          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int m_nCurrentIndex = 0;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public delegate void IndexChangedEventHandler();          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public event IndexChangedEventHandler ChangeCurrentIndex;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void ChangePage(int nIndex)          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_nCurrentIndex = nIndex;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ChangeCurrentIndex();          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_nCurrentIndex = m_nCurrentIndex + 1;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }          &lt;br /&gt;}&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;위의 코드는 바로 그 event 형태로 어떻게 구현하는지를 나타낸다.&lt;/p&gt;  &lt;p&gt;이를 사용하는 로직은 아래와 같다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;588&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;586&quot;&gt;         &lt;p&gt;class Program           &lt;br /&gt; {            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; [STAThread]            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; static void Main()            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Test test = new Test();&lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.ChangeCurrentIndex +=&amp;#160; new IndexChangedEventHandler(test_ChangeCurrentIndex);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.ChangePage(1);&lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(“Complete!”);           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private void test_ChangeCurrentIndex()           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(“event!”);            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }            &lt;br /&gt;}&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;“test.ChangeCurrentIndex” 이렇게 쓰고 “+=” 만 추가하면, 자동으로 코드가 생성되면서 아래에 함수가 하나 생긴다.   &lt;br /&gt;이것이 바로 event 구현 작업이다. 즉 test 내부에서 “ChangeCurrentIndex()” 이 함수가 불리는 순간, 이벤트 구독한 함수로 호출을 하게 된다.&lt;/p&gt;  &lt;p&gt;즉 역으로 함수를 부르는 일종의 Callback&amp;#160; 함수로 생각하면 된다.&lt;/p&gt;  &lt;p&gt;위의 작업을 한 줄씩 실행되는 순서를 보면 아래와 같은 순서로 진행된다.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;Test test = new Test(); –&amp;gt; Test 클래스의 인스턴스를 만든다.&lt;/li&gt;    &lt;li&gt;test.ChangeCurrentIndex +=&amp;#160; new IndexChangedEventHandler(test_ChangeCurrentIndex); –&amp;gt; 이벤트를 구독한다.&lt;/li&gt;    &lt;li&gt;test.ChangePage(1); –&amp;gt; Test 클래스의 ChangePage 함수를 호출한다.&lt;/li&gt;    &lt;li&gt;m_nCurrentIndex = nIndex;&amp;#160;&amp;#160; -&amp;gt; TestClass 내부 : m_nCurrentIndex에 nIndex 값을 대입한다.&lt;/li&gt;    &lt;li&gt;ChangeCurrentIndex();&amp;#160;&amp;#160; -&amp;gt; Event를 발생시킨다.&lt;/li&gt;    &lt;li&gt;Console.WriteLine(“event!”)&amp;#160; -&amp;gt; Main 쪽의 이벤트 구독할 때 등록한 함수(test_ChangeCurrentIndex)로 들어가서 “event!” 라는 문자열을 찍는다.&lt;/li&gt;    &lt;li&gt;m_nCurrentIndex = m_nCurrentIndex + 1; –&amp;gt; +1 를 한다. 그리고 ChangePage 함수를 종료한다.&lt;/li&gt;    &lt;li&gt;Console.WriteLine(“Complete!”);&amp;#160;&amp;#160; -&amp;gt; Main 으로 돌아와서 Complete를 찍고 종료한다.&lt;/li&gt; &lt;/ol&gt;  &lt;p&gt;   &lt;br /&gt;이것을 실행하는 순서를 다이어그램으로 나타내면 아래와 같다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/image/1148F8464EE863C61E6178&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;그림2&quot; border=&quot;0&quot; alt=&quot;그림2&quot; src=&quot;http://cfile7.uf.tistory.com/image/134FD1414EE863C7309C96&quot; width=&quot;615&quot; height=&quot;289&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Test라는 클래스와 Program이라는 클래스가 서로 통신을 한다고 했을 때, 위와 같은 Listen 구조가 안된다면, 결국 Program 이라는 클래스에서 호출하는 작업이 없다면 Test가 Program으로 데이터를 보낼 방법이 없다. 만일 저 위와 같은 형태가 안되는 구조라면, Test 클래스 안에는 Program 개체의 레퍼런스를 들고 있어야 한다. &lt;/p&gt;  &lt;p&gt;class Test   &lt;br /&gt;{&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;Program m_parent = null;&lt;/strong&gt;    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int m_nCurrentIndex = 0;&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ~~~~~~~~~   &lt;br /&gt;}&lt;/p&gt;  &lt;p&gt;그리고 Program 클래스 안에는 Test를 통해 처리해야 할 함수 부분에서 private를 public 으로 바꿔야된다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;public&lt;/strong&gt; void test_ChangeCurrentIndex()    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(“event!”);    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }    &lt;br /&gt;&lt;/p&gt;  &lt;p&gt;호출할 때는 기존에 함수형태로 된 것을 Program을 통해서 부르도록 해야 된다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void ChangePage(int nIndex)   &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ~~~~~~~~~~~    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_parent .test_ChangeCurrentIndex();    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ~~~~~~~~~~~    &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;  &lt;p&gt;서로 인스턴스를 주고 받아야 저런 통신이 가능하게 되는 것이다.&lt;/p&gt;  &lt;p&gt;하지만 위와 같이 하게 되는 경우 같은 DLL 이나 EXE 의 경우면 어차피 같은 프로젝트 안에 있는 내용이니 큰 문제가 없지만, 만일 서로 다른 프로젝트로 되어 구성된 경우라면, 서로 인스턴스를 주고 받으려면 상당히 난감해 질 수 밖에 없다. &lt;/p&gt;  &lt;p&gt;이렇게 훌륭한 event 구성에도 심각한 문제가 있다.&lt;/p&gt;  &lt;p&gt;그건 바로 실행되는 순서에 있다. 실행되는 순서 중 5~7 사이를 보도록 하자.   &lt;br /&gt;만일 5-&amp;gt;7-&amp;gt;6 의 순서로 실행하고 싶다면 어떻게 해야 할까? 즉, ChangePage 함수가 종료되면 자동으로 test_ChangeCurrentIndex 가 실행되고 싶을 때라는 것이다. 간단한 구조의 프로그램이나, 구성의 경우에는 이런 부분을 신경 쓰지 않지만, Multi Thread 나 Windows UI 응용 프로그램인 경우 문제가 발생한다.&lt;/p&gt;  &lt;p&gt;왜 문제가 발생할까?&lt;/p&gt;  &lt;p&gt;만일 저 Event 구조가 연달아 실행되는 형태라면? 이라는 가정으로 시작해보자.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/image/1275D13B4EE863C7374204&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile8.uf.tistory.com/image/173617354EE863C704ABA9&quot; width=&quot;244&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;만일 저런 형태라면, E에서 부터 시작해서 A까지 모든 작업이 끝나야 실제 동작이 끝나게 된다. 이 경우 함수를 연달아 부른 구조와 별 다를게 없다. 그래서 간혹 중간에 시간이 오래 걸리는 작업이 있는 경우, 메인 프로그램의 UI가 마치 다운된 것과 같다. &lt;/p&gt;  &lt;p&gt;UI가 다운되지 않은 것처럼 하기 위해서는 E 가 완전히 끝난 뒤, D가 실행되고, 다음에는 D가 완전히 다 실행한 뒤, C가 실행되는 형태가 되어야 한다.&lt;/p&gt;  &lt;p&gt;즉 맨 위의 예제 코드를 기준으로 보면, 1-&amp;gt;2-&amp;gt;3-&amp;gt;4-&amp;gt;&lt;strong&gt;5-&amp;gt;6-&amp;gt;7-&amp;gt;8&lt;/strong&gt; 이 아니라, 1-&amp;gt;2-&amp;gt;3-&amp;gt;4-&amp;gt;&lt;strong&gt;5-&amp;gt;7-&amp;gt;6-&amp;gt;8&lt;/strong&gt; 또는 1-&amp;gt;2-&amp;gt;3-&amp;gt;4-&amp;gt;&lt;strong&gt;5-&amp;gt;7-&amp;gt;8-&amp;gt;6&lt;/strong&gt; 순으로 실행되면 되는 것이다. 어찌되었던 간에, ChangePage 메소드가 종료 된 뒤에, 실행을 요청한 코드가 실행되어야 한다는 것이다.&lt;/p&gt;  &lt;p&gt;이렇게 하려면 어떻게 해야 할까?&lt;/p&gt;  &lt;p&gt;1가지 방법은 Windows Message를 사용하는 것이다. SendMessage 나, PostMessage 같은 것으로 호출하는 방법이다. 최소한 SendMessage나 PostMessage는 Windows Message Queue에다 던지는 형식이기 때문에, Windows Message Queue에서 해당 메시지가 나올 때 까지 나머지 부분을 계속 실행하게 된다. 즉 5 번 단계의 실행에서 바로 7단계로 넘어 간 뒤에, Windows Message Queue에서 Message 가 언제 나오는지에 따라, 6 번은 그에 맞게 실행되는 것이다. &lt;/p&gt;  &lt;p&gt;이 작업은 .NET에서 Windows Message를 다루는 방법이므로 일단 이 방법은 넘어가도록 하자.&lt;/p&gt;  &lt;p&gt;순수 .NET 코드에서는 어떻게 해야 할까?&lt;/p&gt;  &lt;p&gt;바로 Invoke 라는 함수를 쓰는 것이다. &lt;/p&gt;  &lt;p&gt;Invoke의 정확한 목적은 해당 개체에 있는 함수를 강제적으로 동작하게 하는 것인데, 이것은 상대 클래스내의 함수를 무조건 실행하는 것이다. public 이든, protected 든, 심지어 private 일지라도 강제적으로 실행하는 방법이다. &lt;/p&gt;  &lt;p&gt;이 때, 중요한 것은 &lt;strong&gt;Invoke 명령어는 System.Windows.Form 네임스페이스에 있는 Control 기반의 Windows 개체만 동작&lt;/strong&gt;한다는 것이다.&amp;#160; 위의 예제 코드는 다음과 같이 다시 작성을 해야 한다. 먼저 Windows Form 기반 응용 프로그램이여야 할 것이다. &lt;/p&gt;  &lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;622&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;620&quot;&gt;         &lt;p&gt;public partial class Form1 : Form           &lt;br /&gt;{            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Test m_test = null;            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public Form1()            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; InitializeComponent();            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_test = new Test(this);            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_test.ChangeCurrentIndex +=&amp;#160; new IndexChangedEventHandler(m_test_ChangeCurrentIndex);            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; test.ChangePage(1);            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(“Complete!”);            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }&lt;/p&gt;          &lt;p&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; private void m_test_ChangeCurrentIndex()           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Console.WriteLine(“event!”);            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }            &lt;br /&gt;}&lt;/p&gt;          &lt;p&gt;&amp;#160;&lt;/p&gt; class Test          &lt;br /&gt;{          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; Form m_parent = null;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; int m_nCurrentIndex = 0;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public delegate void IndexChangedEventHandler();          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public event IndexChangedEventHandler ChangeCurrentIndex;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public Test(Form parent)          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_parent = parent;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; public void ChangePage(int nIndex)          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_nCurrentIndex = nIndex;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; ChangeCurrentIndex();          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_nCurrentIndex = m_nCurrentIndex + 1;          &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }          &lt;br /&gt;}&lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;앞서 event 기반의 Listen 패턴 관련해서 상호간 인스턴스가 필요없다고 했는데, 이번에는 필요하다. 왜냐면, event를 호출하는 로직을 할 때, Invoke를 해야 하는데, 그 Invoke를 당하는 대상의 인스턴스가 필요하기 때문이다.   &lt;br /&gt;    &lt;br /&gt;다음 로직을 보자. 이제 ChangePage 라는 함수를 수정해야 하기 때문이다.    &lt;br /&gt;    &lt;table border=&quot;1&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;624&quot;&gt;&lt;tbody&gt;       &lt;tr&gt;         &lt;td valign=&quot;top&quot; width=&quot;622&quot;&gt;public void ChangePage(int nIndex)           &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_nCurrentIndex = nIndex;            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; &lt;strong&gt;m_parent.Invoke(ChangeCurrentIndex);             &lt;br /&gt;&lt;/strong&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; m_nCurrentIndex = m_nCurrentIndex + 1;            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }            &lt;br /&gt;&lt;/td&gt;       &lt;/tr&gt;     &lt;/tbody&gt;&lt;/table&gt; &lt;/p&gt;  &lt;p&gt;앞에서는 ChageCurrentIndex 라는 이벤트를 직접 함수처럼 실행했지만, 이번에는 Invoke 라는 것을 사용해서 실행하기 때문이다. 즉 Windows개체.Invoke(delegation함수) 형태로 실행하는 것이다.&lt;/p&gt;  &lt;p&gt;m_parent.Invoke(ChangeCurrentIndex)라는 문구가 올 때, ChageCurrentIndex 에 연결된 함수가 실행되지 않고, 일단 m_parent 한테 실행하라고 지시만 한 상태가 된다. 일단 저 안의 함수 내용이 완료될 때까지는 저 Invoke가 실행되지 않는다. 그러므로 ChangeCurrentIndex에 구독한 부분은 나중에 실행되게 되고, 바로 그 아래에 있는 코드가 실행되게 된다. 그리고 그 함수가 완전히 종료되면, 그제서야 Invoke 한 함수를 실행하게 되는 것이다.&lt;/p&gt;  &lt;p&gt;이 모든 작업은 COM Component 기반의 동작이 가능한 System.Windows.Form 계열의 Windows Form, Control 등만이 가능한 기능인 것이다. &lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1137&amp;regts=1323852776&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>Windows</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1137</guid>
			<comments>http://hind.pe.kr/1137#entry1137comment</comments>
			<pubDate>Wed, 14 Dec 2011 17:52:24 +0900</pubDate>
		</item>
		<item>
			<title>TFS 2010에서 특정 Work Item을 지울 때&amp;hellip;</title>
			<link>http://hind.pe.kr/1136</link>
			<description>&lt;p&gt;TFS 2010에 Work Item을 등록하는 기능이 있다. 여기서의 WorkItem은 일종의 “작업” 같은 개념이다.&lt;/p&gt;  &lt;p&gt;처음 사용하다 보면, 이 Work Item을 테스트 식으로 등록하기도 하고, 혹은 중복해서 등록하기도 한다. 또 가끔은 중복해서 올리기도 한다. 그럴 때, 늘 윈도우 프로그램 사용하던 방식대로 지우려고 하면 지워지지 않는데, 오른쪽 버튼을 눌러 컨텍스트 메뉴를 띄워도 Delete는 보이지 않고, 그렇다고 Delete 키를 눌러도 안된다. Toolbar에서는 아예 지원이 안된다. 결국 상태 변경을 해서 “완료” 혹은 “닫힘” 그런 것으로 변경해서 쿼리에서 안 나오게 정도 밖에는 못한다.&lt;/p&gt;  &lt;p&gt;이를 확실하게 지우는 방법이 있었다.&lt;/p&gt;  &lt;p&gt;먼저 Visual Studio 2010 이나, TFS Client 가 PC 내에서 설치되어 있어야 한다.(여기서는 Visual Studio 2010을 기준으로 설명)&lt;/p&gt;  &lt;p&gt;이제 Cmmand Line 창을 띄워야 한다. 보통 Visual Studio가 설치되어 있으면 전용 Command Line 창이 있는데, 그것을 띄워도 된다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/image/1356333D4EC48669349A1D&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile1.uf.tistory.com/image/172A83444EC48669039C2F&quot; width=&quot;244&quot; height=&quot;244&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;Command Line 창이 뜨면 일단, 다음 명령을 입력한다. &lt;/p&gt;  &lt;p&gt;cd ..\Common7\IDE&lt;/p&gt;  &lt;p&gt;아이템을 삭제하기 위한 도구는 Visual Studio 2010이 설치된 폴더를 기준으로 Common7\IDE에 있다. 그래서 저 Command Line 창 최초 위치를 기준으로 해당하는 폴더로 이동하기 위한 것이다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/image/161670364EC48669348DD5&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;images0025&quot; border=&quot;0&quot; alt=&quot;images0025&quot; src=&quot;http://cfile10.uf.tistory.com/image/1669783E4EC4866A177083&quot; width=&quot;672&quot; height=&quot;435&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;이제 본격적인 아이템 지우기. 아이템을 관리하는 모든 처리는 바로 witadmin.exe 이라는 프로그램이다. Command Line 명령이다. 그 형태는 아래와 같다.&lt;/p&gt;  &lt;p&gt;witadmin destroywi /collection:{tfs 주소} /noprompt /id:{workitem id}&lt;/p&gt;  &lt;p&gt;저기서 {tfs 주소}는 TFS 의 경로를 넣어준다.&lt;/p&gt;  &lt;p&gt;TFS 서버 주소가 tfs.knoie.net 이고, 프로젝트 이름이 MyProject 라고 한다면,&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://tfs.knoie.net:8080/tfs/MyProject&quot;&gt;http://tfs.knoie.net:8080/tfs/MyProject&lt;/a&gt; &lt;/p&gt;  &lt;p&gt;가 된다. 이 주소 값은 TFS 연결할 때, 연결 정보를 열어보면 쉽게 알 수 있다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/image/153268344EC4866A053BBD&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;images0023&quot; border=&quot;0&quot; alt=&quot;images0023&quot; src=&quot;http://cfile1.uf.tistory.com/image/142486344EC4866A12888E&quot; width=&quot;589&quot; height=&quot;416&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;{workitem ID}는 지우려는 workitem이 가진 고유 ID 값을 넣는다. 보통 이 아이디 값은 1 부터 시작하는 단순한 번호 나열이므로, 쉽게 찾을 수 있다. 쿼리를 하면 나열 되는데, 아래 그림의 붉은 색 상자 안의 ID 값을 의미한다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/image/1928CE354EC4866B063372&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;images0024&quot; border=&quot;0&quot; alt=&quot;images0024&quot; src=&quot;http://cfile7.uf.tistory.com/image/11439A3A4EC4866B308DAB&quot; width=&quot;644&quot; height=&quot;187&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;저 안의 내용 중 367 번을 지운다면,&lt;/p&gt;  &lt;p&gt;witadmin destroywi /collection:&lt;a href=&quot;http://tfs.knoie.net:8080/tfs/MyProject&quot;&gt;http://tfs.knoie.net:8080/tfs/MyProject&lt;/a&gt; /noprompt /id:367&lt;/p&gt;  &lt;p&gt;이라고 입력하면 된다.&lt;/p&gt;        &lt;p&gt;실행하면 아래처럼 표시된다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/image/1165263B4EC4866B156696&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;images0026&quot; border=&quot;0&quot; alt=&quot;images0026&quot; src=&quot;http://cfile5.uf.tistory.com/image/17064C404EC4866B2AED0C&quot; width=&quot;672&quot; height=&quot;435&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1136&amp;regts=1321502853&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>기술자료</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1136</guid>
			<comments>http://hind.pe.kr/1136#entry1136comment</comments>
			<pubDate>Thu, 17 Nov 2011 12:58:36 +0900</pubDate>
		</item>
		<item>
			<title>[퍼온글-출처:요셉] 나경원 후보를 반대하는 두번째 이유는 이념적인 경직성입니다.</title>
			<link>http://hind.pe.kr/1135</link>
			<description>&lt;p&gt;역시 퍼온 글입니다. 두번째 이유도 올라왔더군요.&lt;/p&gt;
  &lt;p&gt;   &lt;/p&gt;
&lt;hr&gt;원본글 URL : &lt;a href=&quot;http://josephforyou.blog.me/140861052&quot;&gt;http://josephforyou.blog.me/140861052&lt;/a&gt;&lt;p&gt;&lt;/p&gt;
  &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;637&quot;&gt;
&lt;tbody&gt;     &lt;tr&gt;
       &lt;td valign=&quot;top&quot; width=&quot;635&quot;&gt;         &lt;p&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;선거법에서 어느정도 후보자에 대한 반대의견 진술을 허용하는지는 잘 모르겠습니다만,&lt;/p&gt;
          &lt;p&gt;저는 나경원의원을 인격적으로, 인간적으로 비방할 생각은 없습니다.&lt;/p&gt;
          &lt;p&gt;제가 국회에서 업무를 수행하는 과정에서의 객관적인 상황, 있었던 그대로를 근거로 반대하는 이유를 이야기하고 싶습니다.&lt;/p&gt;
          &lt;p&gt;앞선 글에서도 언급했다시피, 저는 성실함, 근면함이라는 면에서 나경원 후보를 본받아야겠다고 생각하고 있습니다.&lt;/p&gt;
          &lt;p&gt;나경원의원, 그분은 의정활동을 사법시험을 준비하는 자세로 성실하게 해왔다고 합니다.&lt;/p&gt;
          &lt;p&gt;그런 성실성을 가진 정치인은 그 자체만으로도 긍정적인 것입니다.&lt;/p&gt;
          &lt;p&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;암튼 그럼에도 불구하고, 7년만에, 도와줄 사람이 부족하다 도움을 달라는 나경원 의원님 요청을 받아 전당대회 선거의 기획책임자로까지 참여했던 것은 나경원의원께서 그동안의 의정활동 속에서 더 많이 듣고 공부하고 성장하셔서, 보다 이념적으로 유연하고, 또 포용성을 가진 대중정치인으로 성장하셨기를 기대하는 마음이 있었기 때문입니다. 저는 그동안 나경원 의원은 분명히 달라지셨기를 기대했습니다.&lt;/p&gt;
          &lt;p&gt;그러나, 올해 여름 한나라당 전당대회를 통해서 확인한 나경원 의원님의 생각은 이런 것이었습니다.&lt;/p&gt;
          &lt;p&gt;'표를 의식해서 한나라당이 좌클릭하는 것을 반대한다. 한나라당의 정체성을 찾아야 한다.'&lt;/p&gt;
          &lt;p&gt;'무상급식은 포퓰리즘이다.'&lt;/p&gt;
          &lt;p&gt;특히 이 무상급식의 문제는 매우 중요한 사안이기 때문에 저는 기획담당자로서, &quot;이미 오세훈 시장도 무상급식이냐 아니냐가 아니라, 전면적 무상급식이냐 단계적 무상급식이냐로 후퇴한 국면입니다. 아이들 밥먹이는 문제입니다. 어머니로서 공감합니다라는 말씀을 하셨으면 좋겠다&quot;는 제언을 드렸습니다만, 이 문제에 대한 나경원 후보의 입장은 단호했습니다.&lt;/p&gt;
          &lt;p&gt;7년만에 만난 나경원의원은 이제 '보수의 가치'를 지켜내기 위한 한나라당의 잔다르크를 자임하고 계셨습니다.&lt;/p&gt;
          &lt;p&gt;저와 대화를 하면서 '보수의 가치'가 무엇이라고 생각하고 계시는지를 이야기나눈 적이 있습니다.&lt;/p&gt;
          &lt;p&gt;안타깝게도 나경원의원께는 지키고자 하는 그 가치에 대한 확고한 정리, 그 보수의 가치가 무엇인지가 아직 없으셨습니다.&lt;/p&gt;
          &lt;p&gt;결국 대중정치인으로서의 이념적 포용성도 없고, 국민들은 판단력 제로라고 보며 무상급식이라는 포퓰리즘에 휘둘리는 어리석은 '대중'으로 생각하는 국민에 대한 그릇된 인식을 가지고 있는 것이 아닌지, 또 보수와 진보에 대한 정확한 본인의 생각조차도 제대로 서있지 않으면서 어쨋든 극명한 선명한 보수라는 입장만을 붙잡고 계시는 것으로 저는 판단했습니다.&lt;/p&gt;
          &lt;p&gt;저는 이런 면에서,&lt;/p&gt;
          &lt;p&gt;듣고 안고 조정해야 하는 서울시장의 자리에&lt;/p&gt;
          &lt;p&gt;이념적인 경직성을 가진 나경원 후보는 바람직하지 않다는 판단을 하고 있는 것입니다.&lt;/p&gt;
          &lt;p&gt;&lt;strong&gt;[출처]&lt;/strong&gt; &lt;a href=&quot;http://blog.naver.com/josephforyou/140861052&quot;&gt;나경원 후보를 반대하는 두번째 이유는 이념적인 경직성입니다.&lt;/a&gt;|&lt;strong&gt;작성자&lt;/strong&gt; &lt;a href=&quot;http://blog.naver.com/josephforyou&quot;&gt;요셉&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://blog.naver.com/josephforyou&quot;&gt;&lt;/a&gt;&lt;/p&gt;
       &lt;/td&gt;
     &lt;/tr&gt;
   &lt;/tbody&gt;&lt;/table&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1135&amp;regts=1319101436&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category></category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1135</guid>
			<comments>http://hind.pe.kr/1135#entry1135comment</comments>
			<pubDate>Thu, 20 Oct 2011 18:03:02 +0900</pubDate>
		</item>
		<item>
			<title>[퍼온글-출처:요셉] 저는 나경원 서울시장 후보를 반대합니다.</title>
			<link>http://hind.pe.kr/1134</link>
			<description>&lt;p&gt;이 글을 퍼온 글입니다. 좋은 글입니다. 지워지기 전에 한번 옮겨 봅니다. 제 블로그야, 제한적으로 오시는 분들만 보는 곳인지라, 정치권에서 다가오지 않을거 같으니깐요 ㅎㅎ&lt;/p&gt;
  &lt;hr&gt;원본글 URL : &lt;a href=&quot;http://josephforyou.blog.me/140774308&quot;&gt;http://josephforyou.blog.me/140774308&lt;/a&gt;  &lt;br /&gt;
  &lt;br /&gt;
  &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;616&quot;&gt;
&lt;tbody&gt;     &lt;tr&gt;
       &lt;td valign=&quot;top&quot; width=&quot;614&quot;&gt;         &lt;p&gt;&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;블로그 이웃여러분들 가운데에서 아시는 분들은 아시겠지만, &lt;/p&gt;
          &lt;p&gt;저는 초선의원이던 나경원 의원의 보좌관도 했었고,&lt;/p&gt;
          &lt;p&gt;올해는 나경원 의원을 한나라당 최고위원으로 만든 전당대회에서&lt;/p&gt;
          &lt;p&gt;나경원 의원의 기획본부장을 맡았던 사람입니다.&lt;/p&gt;
          &lt;p&gt;저는 이번 서울시장 선거를 두고 너무 많은 고민을 했습니다.&lt;/p&gt;
          &lt;p&gt;저는 지금 어느 당의 당원도 아닙니다.&lt;/p&gt;
          &lt;p&gt;2007년말 열린우리당 국회의원의 보좌관을 끝으로 국회를 떠난 뒤 올초까지 정치권을 떠나 있으려고&lt;/p&gt;
          &lt;p&gt;참 많이 노력했던 사람입니다.&lt;/p&gt;
          &lt;p&gt;그런 입장에서, 저는 개인적인 경험과 판단으로는 나경원 의원은 절대 서울시장이 되어서는 안된다고 생각하고 있습니다.&lt;/p&gt;
          &lt;p&gt;안된다고 혼자만 생각하고 있어야 하는지 너무 고민스러웠습니다.&lt;/p&gt;
          &lt;p&gt;정치적인 입장은 다르더라도&lt;/p&gt;
          &lt;p&gt;한때 자신이 모셨던 국회의원을 반대하는 것이 도의적으로 비난받을 일은 아닐른지,&lt;/p&gt;
          &lt;p&gt;그래 혹시 시장에 당성될지도 모르니 그냥 가만히 있자,&lt;/p&gt;
          &lt;p&gt;이런 생각 때문에 너무도 괴로웠습니다.&lt;/p&gt;
          &lt;p&gt;저는 항상 무슨 판단을 할 때,&lt;/p&gt;
          &lt;p&gt;제 아이들을 봅니다.&lt;/p&gt;
          &lt;p&gt;저 아이들에게 떳떳한 일이 무엇일지,&lt;/p&gt;
          &lt;p&gt;저 아이들의 미래가 계속 지금과 같아서는 안된다.&lt;/p&gt;
          &lt;p&gt;저는 그런 생각을 합니다.&lt;/p&gt;
          &lt;p&gt;나경원의원이 좋은 집안에서 자라고 실패를 모르고 살았고 뭐 기타 등등의 이유때문에 서울시장이 되어서는 안된다는 이야기를 제가 하는 것은 아닙니다. 그것은 정치적으로나 할 수 있는 이야기고, 사람됨을 잘 아는 사람이 할 이야기는 아니라고 생각합니다.&lt;/p&gt;
          &lt;p&gt;저는 나경원의원의 성실함을 높게 평가합니다. 그리고 어찌되었든 장애아이들을 위한 정책에 나름 노력하시는 것을 잘 알고 있습니다.&lt;/p&gt;
          &lt;p&gt;그럼에도 불구하고, 저는 나경원의원이 국회의원 이상의 정치적인 책임을 가지는 것은 옳지 않다고 생각합니다.&lt;/p&gt;
          &lt;p&gt;정치적인 지도자는 자신의 판단에 의해 국민을 이끌어가야 하는 자리입니다.&lt;/p&gt;
          &lt;p&gt;서울시장이라면 서울시민들의 내일을 책임지고 이끌어가야 하는 지도자입니다.&lt;/p&gt;
          &lt;p&gt;그런 지도자는 최소한 올바른 판단으로 대중을 이끌어 갈 수 있어야 합니다. 그러나, 제가 아는 나경원 의원님은 그만한 판단력이 없다고 생각합니다. 여러분이 잘 아시다시피, 나경원의원은 자위대 창립행사에 참석하셨습니다. 이명박 대통령 후보의 대변인으로서 '주어가 없으므로 아니라는' 논평도 냈습니다. 노무현 대통령의 사저를 아방궁이라고 논평하신 것도 논란이 되고 있는 것 같습니다.&lt;/p&gt;
          &lt;p&gt;제가 아는 한 이런 것은 나의원님 이야기한대로 모르고 하신 한나라당 대변인이라서 어쩔 수 없이 하신 일은 맞습니다. 그런데, 문제는 무엇을 몰랐느냐 대변인이라면 그렇게 하는 것이 옳은지 하는 것입니다.&lt;/p&gt;
          &lt;p&gt;예컨대 자위대 행사인지 모른 것이 아니라, 그렇게 하는 것이 옳은지 그른지를 모른 것이 문제입니다.&lt;/p&gt;
          &lt;p&gt;이런 판단력의 부재는 지도자의 흠결로서는 아주 큰 것입니다.&lt;/p&gt;
          &lt;p&gt;정책적인 결단을 해야할 때, 무엇이 옳은지 모르고 결론을 내리게 된다는 것, 이것은 서울시민, 그리고 앞으로 나의원께서 서울시장 이후에 꿈꾸고 계시는 더 큰 꿈을 꿀 때 대상이 될 우리 국민 모두에게는 몹시 불행하고 위험천만한 일입니다.&lt;/p&gt;
          &lt;p&gt;인사에 대한 결단을 해야 할 때, 누가 바른 사람이고 아닌지를 스스로 판단해낼 능력에도 문제가 있다면, '인사가 만사'라는 것을 생각하더라도 일천만 서울시민의 미래, 그리고 나아가서 대한국민의 미래를 맡길 지도자로서의 판단력은 가지고 있지 않으시다고 저는 생각합니다. 스스로 부족하면 좋은 사람을 들어쓰면 된다지만, 좋은 사람을 골라내는 판단력 역시 '판단력'입니다.&lt;/p&gt;
          &lt;p&gt;아울러, 더욱 제 이런 판단을 굳히게 된 것은 7년전에 보좌관으로서 보았던 나경원의원이 올해 한나라당의 전당대회 과정에서 보았을 때에도 전혀 변하거나 성장하시지 않았다는 점 때문입니다. 제게 일할 사람이 없어서 기획본부장이라는 자리를 맡겼지만, 저는 선거에 출마해야 할지 말지, 선거의 구도를 어떻게 가는 것이 옳은지, 선거의 예산이 어느 정도 들게 될 것인지, 후보는 무엇을 하고 캠프는 뭘 해야하는지, 선거전략을 어떻게 잡아야 할지, 나를 지지하는 사람들이 있는지 없는지, 정말 나를 도울 내 사람이 있는지, 나를 돕는 저 사람은 무슨 생각에서 돕는 것인지, 이런 것들에 대한 판단력을 저는 나경원 의원으로부터 전혀 확인하지 못했습니다.&lt;/p&gt;
          &lt;p&gt;저는 국회의원으로서 성실하게 자신의 소신을 가지고서 노력하시는 것으로서,&lt;/p&gt;
          &lt;p&gt;나경원의원의 달란트는 충분하고 또 적합한 것이라고 생각합니다.&lt;/p&gt;
          &lt;p&gt;몸에 맞지 않는 옷은 옷을 상하게 하고 나아가서 몸도 상하게 할 수 있습니다.&lt;/p&gt;
          &lt;p&gt;제가 나경원의원이 서울시장이 되는 것에 반대하는 이유는 너무 많지만, 우선 첫번째가 바로 이 판단능력입니다.&lt;/p&gt;
          &lt;p&gt;저는 나경원 후보가 서울시장이 되는 것을 반대합니다. &lt;/p&gt;
          &lt;p&gt;&lt;strong&gt;[출처]&lt;/strong&gt; &lt;a href=&quot;http://blog.naver.com/josephforyou/140774308&quot;&gt;저는 나경원 서울시장 후보를 반대합니다.&lt;/a&gt;|&lt;strong&gt;작성자&lt;/strong&gt; &lt;a href=&quot;http://blog.naver.com/josephforyou&quot;&gt;요셉&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;&lt;p&gt;&lt;a href=&quot;http://blog.naver.com/josephforyou&quot;&gt;&lt;/a&gt;&lt;/p&gt;
       &lt;/td&gt;
     &lt;/tr&gt;
   &lt;/tbody&gt;&lt;/table&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1134&amp;regts=1319101413&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1134</guid>
			<comments>http://hind.pe.kr/1134#entry1134comment</comments>
			<pubDate>Thu, 20 Oct 2011 17:58:42 +0900</pubDate>
		</item>
		<item>
			<title>시장에서 본 박원순 후보자와 삿!</title>
			<link>http://hind.pe.kr/1133</link>
			<description>&lt;p&gt;어제 집사람과 함께, 시장을 갔다가, 우연히 보게되었다. 주말이니 당연히 유권자들과 만나기 위해 직접 만나는.. 많은 취재진들과 구경꾼들과 함께 있었다. 나는 항상 이름이나, TV에서만 접하던 사람을 생얼로 본다는 신기한 기분에 그 분을 찍기 위해 샷을 날렸는데, 왠걸.. 유세 지원 오신 박영선님만 제대로 찍힌 것.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/image/18741D394E9BA9AF1A3DDF&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/176F32394E9BA9AF2457DC&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;다시 시도했으나, 얼굴이 안찍히는 슬픔!!!!!&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile26.uf.tistory.com/image/205B68374E9BA9B00BD4CC&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/1655353F4E9BA9B00B9FD4&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;아쉬운 마음에 발걸음을 돌릴까 하다가, 용기를 내어 다가가서 한 컷 양해를 구했더니, 바로 자세 잡아주시는 후보님! ㅋ (지금 보니, 꼭 무슨 인계된 느낌 ㅎㅎ)&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/image/114A87384E9BA9B20784A6&quot;&gt;&lt;img src=&quot;http://cfile30.uf.tistory.com/image/167E83334E9BA9B31F123D&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;찍은 기쁨에 잽싸게 올릴려고 했더니, 박영선님이 기왕이면 10번 포즈까지 찍으시라는 권유. 덕분에 한컷 더 찍었다. ㅎㅎ&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile8.uf.tistory.com/image/113C073E4E9BA9B31929DD&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/205A45444E9BA9B312A229&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;지금 보면 볼 수록 역시 자연스럽게 웃으시는 모습이 짱이신듯!&lt;/p&gt;
  &lt;p&gt;이런 직샷은 다른 이들의 직샷같은 것은 다른 세계 이야기처럼 들릴 정도로 엔간한 노력 없으면 불가능할 거 같았는데, 너무 우연하게 얻은 기회라 신기했다. &lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1133&amp;regts=1318824519&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<category>구로동 시장</category>
			<category>기회</category>
			<category>박영선</category>
			<category>박원순</category>
			<category>사진</category>
			<category>시장 후보</category>
			<category>직샷</category>
			<category>후보 유세</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1133</guid>
			<comments>http://hind.pe.kr/1133#entry1133comment</comments>
			<pubDate>Mon, 17 Oct 2011 13:06:12 +0900</pubDate>
		</item>
		<item>
			<title>검색 엔진 비교.</title>
			<link>http://hind.pe.kr/1132</link>
			<description>&lt;p&gt;말도 많고 탈도 많은 NAVER. 예전 연예인을 필두로 TV 광고도 좀 하고, 각종 다양한 업체들이 인터넷으로 광고하고 NAVER 질문 답변 컨텐츠들로 한동안 인터넷 초보자들로 부터 표준 아닌 표준 검색이 되었다. 최소한 내가 보아왔던 컴퓨터 초보 분들중 대부분은 시작 페이지가 네이버인 경우가 많고, 또 특정 문제가 발생할 때도 네이버에 검색해서 그 결과값을 마치 정답인양 역으로 전문가들을 공격하기도 한다.&lt;/p&gt;  &lt;p&gt;오늘 hind.pe.kr URL 수리 후 과연 몇 명이나 유입되었나 보는데, 신기한 것을 보았다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/1563FF334E978D36183C67&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;Image0001&quot; border=&quot;0&quot; alt=&quot;Image0001&quot; src=&quot;http://cfile2.uf.tistory.com/image/1638623F4E978D3605ED89&quot; width=&quot;354&quot; height=&quot;149&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;유입경로라는건, 내 홈페이지를 과연 어디를 통해서 들어오셨나 하는 부분이였다. 저기서 “2010파워포인트 1935어셈블리 구성요소 설치..] 라는 항목. 내 블로그 내용을 전체다 기억하는 것은 아니지만, 파워포인트 관련된 글이 그다지 없고, 저런 문제도 없을텐데 하면서 들어가보았더니…이런 결과물.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/image/143FB5394E978D360A454D&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;Image0002&quot; border=&quot;0&quot; alt=&quot;Image0002&quot; src=&quot;http://cfile23.uf.tistory.com/image/192A6E394E978D362F7674&quot; width=&quot;644&quot; height=&quot;441&quot; /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;SharePoint Foundation 2010 설치 에서 2010 설치로 찾았따는 말.&lt;/p&gt;  &lt;p&gt;진짜.. 헐 이라는 느낌.&lt;/p&gt;  &lt;p&gt;이 참에 한번 더 검색해봤다. 이번에는 DAUM.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/image/202DE03C4E978D370A337A&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;Image0003&quot; border=&quot;0&quot; alt=&quot;Image0003&quot; src=&quot;http://cfile1.uf.tistory.com/image/132ED5444E978D371828D0&quot; width=&quot;644&quot; height=&quot;450&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;진짜 뭐야 이건.. 이란 느낌. 20세기 웹검색 결과를 본 기분. 달랑 2개라니?&lt;/p&gt;  &lt;p&gt;GOOGLE에서 검색해봤다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/image/16077E424E978D3734E0CF&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;Image0005&quot; border=&quot;0&quot; alt=&quot;Image0005&quot; src=&quot;http://cfile24.uf.tistory.com/image/147B6E384E978D370341E0&quot; width=&quot;639&quot; height=&quot;751&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;많다고 좋은 것은 아니지만, 최소한 다양한 부분을 체크해볼 수 있지 않은가…&lt;/p&gt;  &lt;p&gt;실제 해결에 도움되는 문서의 URL은 &lt;a href=&quot;http://support.microsoft.com/kb/926804/ko&quot;&gt;http://support.microsoft.com/kb/926804/ko&lt;/a&gt; 로 MS 사이트에 있는데, 이 정보를 제대로 들고 온 것은 DAUM과 GOOGLE. 내가 봤을 땐 DAUM은 왠지 GOOGLE에서 훔쳐 온듯 싶지만, 어쨌던. 검색. 이젠 가급적 GOOGLE로 해주었으면 한다. 그저 NAVER나 DAUM 으로 검색한 결과를 가지고 나에게 평가 잣대로 쓰지 않아주셨으면 한다. 만일 그들의 정보가 너무 옳바르다 생각되면, 시시비비를 가리지 말고, 그냥 그 NAVER나, DAUM의 정보를 써주셨으면 한다.&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1132&amp;regts=1318554952&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1132</guid>
			<comments>http://hind.pe.kr/1132#entry1132comment</comments>
			<pubDate>Fri, 14 Oct 2011 10:15:36 +0900</pubDate>
		</item>
		<item>
			<title>헐.. 아이네임즈...네임서버.</title>
			<link>http://hind.pe.kr/1131</link>
			<description>아침에 잠시 홈페이지에 들어가려고 하니까, 왠걸 접속이 안되는 것이였다.&lt;br /&gt;
더욱이 hind.pe.kr을 조회하니, 조회가 안되는 것.&lt;br /&gt;
&lt;br /&gt;이건 대체 무슨일인가 싶었다.&lt;br /&gt;
&lt;br /&gt;그런데, 확인해본 결과 hind.pe.kr 에 대한 네임서버를 아이네임즈 것을 사용했었는데,&lt;br /&gt;
이 네임서버를 통해 조회가 안되는 것이였다.&lt;br /&gt;
해킹을 당한건지, 아니면 관리자의 실수인지는 도무지 알길은 없지만,&lt;br /&gt;
결국 실망감만 가득 안게 했다.&lt;br /&gt;
&lt;br /&gt;포기. 포기. (어쩐지 어제 접속수가 2자리 수더니만...)&lt;br /&gt;
&lt;br /&gt;&lt;br /&gt;
그래서 오늘 dnsever 쪽으로 옮겼다.&amp;nbsp;&lt;br /&gt;
옮기니까, 바로 되는 구먼... 헐.&lt;br /&gt;
&lt;br /&gt;여튼, 아이네임즈 조만간 망할지도 모르겠다 싶다. ㅎㅎ&lt;br /&gt;
&amp;nbsp;&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-1131-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-fr/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-fr/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1131&amp;regts=1318472649&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<category>hind.pe.kr</category>
			<category>네임서버</category>
			<category>아이네임즈</category>
			<category>오류</category>
			<category>접속불가</category>
			<category>홈페이지</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1131</guid>
			<comments>http://hind.pe.kr/1131#entry1131comment</comments>
			<pubDate>Thu, 13 Oct 2011 11:23:45 +0900</pubDate>
		</item>
		<item>
			<title>마우스 G5 셀프 A/S</title>
			<link>http://hind.pe.kr/1130</link>
			<description>&lt;p&gt;지금 집에서는 좀 비싼 마우스를 사용하고 있다. 로지텍 G5 라는 모델의 마우스로 기왕 사는거 나중에 A/S를 한번 받아보려고 샀다. 그리고 한참을 이용했는데, 어느날 보니까, 마우스가 잘 움직이지 않는 것이다. 어떤 자세에서는 연결되서 제대로 연결되는데, 어느자세에서는 제대로 연결되서 사용할 수 있었다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile30.uf.tistory.com/image/123296404E924659098154&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;IMG_20111007_134116&quot; border=&quot;0&quot; alt=&quot;IMG_20111007_134116&quot; src=&quot;http://cfile8.uf.tistory.com/image/193068374E92465A05FA14&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;그러다 갑자기 아예 연결자체가 안되더니, 결국 완전 침묵을 했다. 이 기회에 드디어 A/S를 받아 보려고 했다. 고객지원실 전화는 00798-601-8207 이였다. 일단 이 제품을 A/S 받기 위해서는 P/N 이라든가, 파트번호 등의 정보가 필요하다고 해서 마우스를 가지고 와서 전화를 했다.&lt;/p&gt;  &lt;p&gt;그런데, 결과는 아주 예상 가능 레벨로 참담했다.&lt;/p&gt;  &lt;p&gt;1년 내에 구매한 제품이면 A/S가 가능하나, 3년 내 구매한 제품은 영수증 및 구매한 증명 문서가 필요하다고 한다. 헐… 도데체… 2년 전 내가 구매한 내역을 뽑아달라고 하니 이 참…&lt;/p&gt;  &lt;p&gt;뭐 상담 받는 애들이 뭐라 하겠는가? 그래봐야 메뉴얼 대로 대응할 뿐..&lt;/p&gt;  &lt;p&gt;내 생각에는 결국 로지텍이든, MS 든, &lt;strong&gt;&lt;font size=&quot;3&quot;&gt;뭐가 되든, A/S를 고려한 고가 마우스를 구입하겠다면 절대 말린다. &lt;font color=&quot;#ff0000&quot;&gt;마우스든, 키보드든, 결국 소모품이다&lt;/font&gt;! 라는 생각으로 구매를 할 것&lt;/font&gt;&lt;/strong&gt;. 퀄리티가 아닌 지속적으로 오래 사용할 마음이면, 절대 고가를 사지 말았으면 한다.&lt;/p&gt;  &lt;p&gt;아무리 좋아도, A/S 받으려면, 신경을 많이 써야 된다. ㅋ&lt;/p&gt;  &lt;p&gt;서론이 길었고, 스스로 A/S 하는 방법을 소개한다.&lt;/p&gt;  &lt;h2&gt;1. 마우스 분해&lt;/h2&gt;  &lt;p&gt;일단 원인을 찾아봤다. 그러기 위해서는 마우스를 분해해야 한다. 이를 위해서는 몇가지 수고 스러운 짓을 해야 한다.&lt;/p&gt;  &lt;p&gt;밑바닥에서 다음 그림 처럼 붉은색 박스 부분의 나사를 뜯어내야 한다. 특히 맨 아래쪽과 맨 위쪽은 서퍼를 뜯어내야 그 안에 담긴 나사를 뺄 수 있다. 총 4 개를 뜯으면 된다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/image/163B84434E92465A09C529&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;Untitled&quot; border=&quot;0&quot; alt=&quot;Untitled&quot; src=&quot;http://cfile30.uf.tistory.com/image/165BF33C4E92465B269622&quot; width=&quot;644&quot; height=&quot;400&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;그러자 문제가 생긴 부분을 찾을 수 있었다.&lt;/p&gt;  &lt;h2&gt;2. 나의 문제는?&lt;/h2&gt;  &lt;p&gt;무척 간단했다.   &lt;br /&gt;아래의 그림에서 붉은 색 박스 안의 선 부분의 단선이였다. 그 자랑하는 천으로 감싸서 외부 충격에 강하게 만든것은 좋지만, 결국 천 부분이 꼬이더니, 결국 멋대로 빙글 빙글 돌다가 결국 USB 선 자체가 끊어졌다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/image/11196F384E92465C03B755&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;IMG_20111007_134217&quot; border=&quot;0&quot; alt=&quot;IMG_20111007_134217&quot; src=&quot;http://cfile30.uf.tistory.com/image/206EEB394E92465E0E3263&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;      &lt;p&gt;결국 이 선을 따로 구매하면 좋을 텐데, 우리나라에서는 저 선은 따로 구매할 방법을 못찾았다. 찾아보니, G1 마우스 케이블은 쉽게 찾을 수 있는데 말이다. 결국 저 끊어진 부분은 강제로 연결하는 수 밖에 없었고, 안의 선을 까서, 납땜으로 연결해버렸다. &lt;/p&gt;  &lt;p&gt;내부는 대략 아래 처럼 생겼다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/image/1132D7464E92465E356F11&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;IMG_20111007_134207&quot; border=&quot;0&quot; alt=&quot;IMG_20111007_134207&quot; src=&quot;http://cfile8.uf.tistory.com/image/146F6B444E92465F026614&quot; width=&quot;644&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;    &lt;p&gt;생각 보다 뜯는 것은 어렵지 않고, 적당하게 문제해결을 할 수 있다.&lt;/p&gt;  &lt;p&gt;마지막으로 마우스 밑면의 서퍼를 붙여야 되는데, 이 부분은 별도 구매를 통해서 처리해야 한다.   &lt;br /&gt;(로지텍에서는 파는 곳이 없는 듯.) 찾아본 결과,&lt;/p&gt;  &lt;p&gt;&lt;a title=&quot;http://www.rantopad.co.kr&quot; href=&quot;http://www.rantopad.co.kr&quot;&gt;http://www.rantopad.co.kr&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;라는 업체를 통해 구매를 하면 된다. &lt;/p&gt;  &lt;p&gt;찝찝한 A/S를 스스로 하고 난 뒤, 훗 .. .하고 웃고 만다.&lt;/p&gt;  &lt;p&gt;다음에는 절대 비싼 마우스 사지 않는다… 이게 내가 내린 결론!&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1130&amp;regts=1318299924&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<category>a/s</category>
			<category>G5</category>
			<category>USB 단선</category>
			<category>로지텍</category>
			<category>마우스</category>
			<category>사후처리</category>
			<category>셀프</category>
			<category>수리</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1130</guid>
			<comments>http://hind.pe.kr/1130#entry1130comment</comments>
			<pubDate>Mon, 10 Oct 2011 10:11:59 +0900</pubDate>
		</item>
		<item>
			<title>Steve Jobs.</title>
			<link>http://hind.pe.kr/1129</link>
			<description>&lt;p&gt;나와는 큰 인연은 없었다. &lt;/p&gt;  &lt;p&gt;아이폰이 있지도, 아이패드도 없었다. 단지, 맥북 만이 나와의 연결점.&lt;/p&gt;  &lt;p&gt;하지만, 인문학을 배경으로 한 다양한 새로운 개념, 제품, 이야기들은 접점이 그다지 없는 내게도 상당한 매력으로 다가 왔다. 더욱이 췌장암 이야기에서 iOS5 소개에 나왔을 때 삐쩍 마른 그를 바라볼 때만 하더라도, 그런가 했다&lt;/p&gt;  &lt;p&gt;그런데, 그가 막상 이렇게 가니, 이제 미래의 그림은 누가 그려 줄까라는 미묘한 두려움이 같이 왔다.&lt;/p&gt;  &lt;p&gt;과연 이제 누가 엉뚱하고 재미난 이야기와 제품과 흥분된 호기심을 자아내 줄까?&lt;/p&gt;  &lt;p&gt;아직 한참 남은 내 생애에 볼 수 있을까?&lt;/p&gt;  &lt;p&gt;삼가 고인의 명복을 빕니다. Hero.&lt;/p&gt;  &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;6&quot;&gt;Steve Jobs&amp;#160; &lt;/font&gt;&lt;/strong&gt;&lt;strong&gt;&lt;font size=&quot;4&quot;&gt;1955 - 2011&lt;/font&gt;&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/image/1733A0344E8DA2DB269D61&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;t_hero&quot; border=&quot;0&quot; alt=&quot;t_hero&quot; src=&quot;http://cfile27.uf.tistory.com/image/1543C23B4E8DA2DC336498&quot; width=&quot;530&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1129&amp;regts=1318299926&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category></category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1129</guid>
			<comments>http://hind.pe.kr/1129#entry1129comment</comments>
			<pubDate>Thu, 06 Oct 2011 21:44:31 +0900</pubDate>
		</item>
		<item>
			<title>Tistory IP 변경</title>
			<link>http://hind.pe.kr/1128</link>
			<description>&lt;p&gt;간만에 관리자 모드로 들어오니 2차 도메인 DNS 호스트 IP 이용 제한 안내 글이 떴다. (&lt;a title=&quot;http://notice.tistory.com/1686&quot; href=&quot;http://notice.tistory.com/1686&quot;&gt;http://notice.tistory.com/1686&lt;/a&gt;). 예전에 RUKXER 님의 블로그를 보고, 2차 DNS 도메인 설정을 그럭저럭 구성했는데, 그 때 자신의 블로그를 연결하는 방법에서 이렇게 이야기했다&lt;/p&gt;
  &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;561&quot;&gt;
&lt;tbody&gt;     &lt;tr&gt;
       &lt;td valign=&quot;top&quot; width=&quot;559&quot;&gt;         &lt;p&gt;(1) DNSever의 네임서버 : DNSever 홈페이지에서 간단히 확인 가능            &lt;br /&gt;
(2) 티스토리의 IP 주소 :             &lt;br /&gt;
[시작]-&amp;gt;[실행]을 눌러 cmd를 치고 엔터를 누르면 콘솔 창이 뜹니다. 여기서 다음 명령어를 칩니다.             &lt;br /&gt;
nslookup (2차 도메인을 연결할 티스토리 계정 ex : rukxer).tistory.com             &lt;br /&gt;
몇 줄이 출력되는데, 봐야할 부분은 non-authoritative answer 아래의 address 부분입니다. 여기에 IP가 뜨는데, 티스토리 회원들이면 공통적으로 211.172.252.15가 뜹니다. 굳이 따로 확인하실 필요없이 211.172.252.15를 사용하셔도 관계 없습니다.             &lt;br /&gt;
※ (101129)             &lt;br /&gt;
DDoS 공격에 대한 대비책으로 인해 티스토리에서 공식적으로 IP를 다른 것으로 사용하길 권하는 공지가 떴습니다.             &lt;br /&gt;
211.172.252.15 대신에 121.254.206.21 를 사용하시기 바랍니다.             &lt;br /&gt;
기본적인 원리는 변함이 없습니다.&lt;/p&gt;
          &lt;p&gt;※ (110830)            &lt;br /&gt;
한 번 더 변경이 되었습니다.             &lt;br /&gt;
110.45.229.135 / 180.70.134.239&amp;nbsp; &lt;br /&gt;
211.172.252.15, 121.254.206.21 IP는 추후 사용이 제한될 예정이라고 합니다.&lt;/p&gt;
       &lt;/td&gt;
     &lt;/tr&gt;
   &lt;/tbody&gt;&lt;/table&gt;
  &lt;p&gt;뭐 장황한 부분은 제외하면, 지금 내 사이트를 기준으로 정리하자면, neohind.tistory.com 해서 나오는 IP 주소를 &lt;a href=&quot;http://www.hind.pe.kr&quot;&gt;www.hind.pe.kr&lt;/a&gt; 로 연결하라는 것이였다. &lt;/p&gt;
  &lt;p&gt;그런데, 이번에 Tistory 에서 외부 접속 IP를 2개로 줄였고, 그에 맞추어서 설정을 바꿔 달라는 것이였다.&lt;/p&gt;
  &lt;p&gt;즉 지금까지 &lt;a href=&quot;http://www.hind.pe.kr&quot;&gt;www.hind.pe.kr&lt;/a&gt; 을 121.254.206.21 로 연결되어 있던 것을 다음 IP 중 한개를 선택하면 된다.&lt;/p&gt;
  &lt;p&gt;&lt;strong&gt;110.45.229.135 / 180.70.134.239 &lt;/strong&gt;&lt;/p&gt;
  &lt;p&gt;한참 동안 어떻게 해야 되는지 헷갈렸다는…&lt;/p&gt;
  &lt;p&gt;바꾸고 나니까, 정말 사이트 속도가 올라간듯 싶다.&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1128&amp;regts=1318472666&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<category>2차도메인</category>
			<category>ip주소</category>
			<category>Tistroy</category>
			<category>변경</category>
			<category>통합처리</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1128</guid>
			<comments>http://hind.pe.kr/1128#entry1128comment</comments>
			<pubDate>Thu, 06 Oct 2011 21:38:03 +0900</pubDate>
		</item>
		<item>
			<title>SharePoint Foundation 2010 설치.</title>
			<link>http://hind.pe.kr/1127</link>
			<description>&lt;p&gt;이 설치는 SharePoint Foundation을 간략하게 설치하거나, 개발 환경 정도로 구성할 때 사용한다. 실제 운영하거나, SharePoint Server 2010 Standard 이상 버전의 서버 군 설치와는 다르다. &lt;/p&gt;
  &lt;p&gt;이 작업을 위해 필요한 환경은 아래와 같다.&lt;/p&gt;
  &lt;p&gt;Hardware&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;x64를 지원하는 PC 혹은 가상 머신&lt;/li&gt;
    &lt;li&gt;RAM 4G 이상.&lt;/li&gt;
    &lt;li&gt;HDD 80G 이상.&lt;/li&gt;
    &lt;li&gt;인터넷이 연결 가능한 네트워크 &lt;/li&gt;
 &lt;/ul&gt;
  &lt;p&gt;Software&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;MS Windows Server 2008 R2 Standard 혹은 Enterprise Edition.&lt;/li&gt;
    &lt;li&gt;SharePoint Foundation 2010 ( &lt;a href=&quot;http://download.microsoft.com&quot;&gt;http://download.microsoft.com&lt;/a&gt; 에서 다운 가능 )&lt;/li&gt;
    &lt;li&gt;MS SQL 2008 R2 Express with Tools ( &lt;a href=&quot;http://download.microsoft.com&quot;&gt;http://download.microsoft.com&lt;/a&gt; 에서 다운 가능 )      &lt;br /&gt;
- 그냥 Express 버전은 Management Tool 이 없어서, DB 설정이나, 구성을 할 때 사용하는 도구가 없다. &lt;/li&gt;
 &lt;/ul&gt;
  &lt;h2&gt;Overview&lt;/h2&gt;  &lt;p&gt;전체적인 설치 순서는 다음과 같다. 이 순서대로 캡쳐 화면과 함께 소개할 예정이다.&lt;/p&gt;
  &lt;ol&gt;
   &lt;li&gt;MS Windows Server 2008 R2 설치.&lt;/li&gt;
    &lt;li&gt;Windows 관련 설정.&lt;/li&gt;
    &lt;li&gt;SharePoint Foundation 설치.&lt;/li&gt;
    &lt;li&gt;SQL 2008 R2 로 업그레이드 및 DB 관리도구 설치.&lt;/li&gt;
    &lt;li&gt;SharePoint Foundation 구성.&lt;/li&gt;
    &lt;li&gt;기타..&lt;/li&gt;
 &lt;/ol&gt;
  &lt;p&gt;이제 위의 순서대로 설치하는 방법을 나열할 것이다.&lt;br /&gt;
캡쳐된 화면은 1024 * 768의 화면을 캡쳐했는데, 블로그의 표시 해상도 상 사이즈를 많이 줄였다.&lt;br /&gt;
만일 제대로 확인이 불가능하면, 해당 그림을 클릭해서 확대해서 보면 된다.&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;h2&gt;&lt;/h2&gt;  &lt;h2&gt;MS Windows Server 2008 R2 설치&lt;/h2&gt;  &lt;p&gt;Windows Server 2008 R2 미디어를 준비한다. 그리고 필요하면 CD-Key 정도는 확보해야 한다. 정품인증을 하지 않아도&amp;nbsp; 대략 30일 정도는 사용할 수 있지만, 그 이후에는 여러 가지 문제가 발생할 수 있다. 또한 Windows Update 부분에서도 일부 불이익을 받을 수 있다.&amp;nbsp; 만일 단순 테스트 용도라면 굳이 정품 인증이 필요 없다.&lt;/p&gt;
  &lt;p&gt;먼저 일반적인 Windows 설치와 마찬가지로, 미디어를 넣고 시작한다. Windows Server 2008 R2는 Windows 7 기반과 동일한 비슷한 구조로 되어 있어 시작화면도 Windows 7과 비슷하다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/image/113E37374E8520B01CEC3B&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/123024374E8520B033FEA8&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/image/120AD4414E8520B01B5F95&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/130B32354E8520B10486DD&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;p&gt;본격적인 서버 설치 화면은 다음과 같다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/20363A3B4E8520B11ECBEC&quot;&gt;&lt;img src=&quot;http://cfile8.uf.tistory.com/image/18291E3C4E8520B2132000&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;로딩이 완료되면 제품을 선택하는 화면이 나온다. 이 중, Standard 혹은 Enterprise를 선택한다. 또한 주의할 점이 (Server Core Installation) 이라는 항목들이 있는데, 이것은 피하도록 하자. 반드시 (Full Installation)을 선택한다. (Server Core Installation)은 진짜 Server의 핵심적인 모듈만 설치하기 때문에, UI가 전혀 없고, 도스 창 하나만 달랑 나오기 때문에, 진짜 운영용 서버를 만드는게 아니면 피하는게 상책이다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/image/16345E374E8520B22FF799&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/113ED3394E8520B221E254&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;p&gt;만일 HDD Disk가 여러 개인 경우나, 파티션이 나눠져 있거나, 혹은 기존에 설치된 운영체제가 있는 경우에는 디스크 관련 도구가 뜬다. 그 부분은 상황에 맞춰서 적절하게 설치위치를 잡아준다.&lt;/p&gt;
  &lt;p&gt;설치가 본격적으로 진행되면 다음과 같은 화면이 나타나면서 자동으로 설치가 진행된다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/image/187A77354E8520B61B1077&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/16120D344E8520B62EA38A&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/image/1927A1424E8520B72DB9CA&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/154476404E8520B7153042&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;설치가 완료되면 Administrator의 암호가 설정되지 않았다고 나오면서 암호를 넣어달라고 한다. 이 암호를 만든 후에, 그 암호로 로그인을 하도록 한다. 그러면 Windows Server 설치는 완료된다.&lt;/p&gt;
  &lt;h2&gt;Windows Server 설정&lt;/h2&gt;  &lt;p&gt;반드시 필요하다고 하면 필요하고 필요 없다고 하면 필요 없지만, 일단 간단한 설정을 해주도록 한다.&lt;/p&gt;
  &lt;p&gt;먼저 Internet Explorer의 보안설정을 끄도록 한다. 여기서는 약자로 IE ESC 라고 하는데, 이 항목들을 모두 Off로 해줘야 한다. 안 그러면 보안 설정으로 인해 웹사이트 접속이 어렵기도 하고, SharePoint 내의 검색 엔진이 정상적으로 동작하지 않게 된다. &lt;/p&gt;
  &lt;p&gt;서버 관리자를 띄우면 바로 볼 수 있다. 아래의 그림에서 왼편에 있는 Configure IE ESC링크를 누르면 창이 뜨는데, 그 안의 내용에 모든 Off 부분에 설정하면 된다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/160EDE364E8520B80DCAF3&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/122DAA3C4E8520B80C347D&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;다음 작업들은 반드시 필요한 것은 아니지만, 관리 및 작업의 편의상 해주면 좋은 정도이다. &lt;/p&gt;
  &lt;h5&gt;Windows Update 비활성화.&lt;/h5&gt;  &lt;p&gt;MS의 Windows Update 설정은 대부분 완전 자동으로 하는 것을 추천한다. 하지만, 서버 제품 군은 가급적 이 설정을 끄는 것이 좋다. 특히 예상치 못한 시점에 갑자기 꺼지는 경우도 있기 때문이다. &lt;/p&gt;
  &lt;p&gt;설정 방법은 간단하다.먼저 제어판에 들어간다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/image/1812C3414E8520B81211C0&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/133DEE3B4E8520B80F5965&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;다음은 System and Security에 들어간다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/image/142C453B4E8520B9259B93&quot;&gt;&lt;img src=&quot;http://cfile4.uf.tistory.com/image/1329F03C4E8520B911A0E1&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Windows Update 항목에 들어간 뒤,&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/image/143EF03B4E8520B90EF6D0&quot;&gt;&lt;img src=&quot;http://cfile26.uf.tistory.com/image/166963354E8520BA37DFAA&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;왼편에 조그만하게 있는 Chnage Settings에 들어간다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/image/1119B7414E8520BA0AF36C&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/1665E1334E8520BA03A05D&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;선택상자에서 Never check for updates를 선택하고 OK를 클릭한다.&lt;a href=&quot;http://cfile25.uf.tistory.com/image/124F78334E8520BB376BDF&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/20256C384E8520BB20B577&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;h5&gt;User Account Control 비활성화&lt;/h5&gt;  &lt;p&gt;UAC(User Account Control) 이란, Windows에서 동작하게 되는 중요한 자원(시스템 파일 혹은 레지스트리 정보, 설치된 프로그램 파일 등등)이 자동적으로 프로그램에서 손대게 될 때, 사용자에게 확인 작업을 하는 보안 기능이다. 특히 트로이의 목마 같이 사용자 몰래 동작해서 Windows의 주요 파일들을 멋대로 변조하거나, 시스템 감시를 하는 짓과 같은 것을 원천 차단하게 된다. 이 기능은 Windows의 최 중심부인 Kernel 레벨에서 원천 차단하기 때문에, 화면이 완전히 멈추고, 사용자 확인을 요청하는 확인, 취소 버튼만 보이게 된다. 그래서 보안 설정 상 이 부분을 그래도 두는것을 권장한다. &lt;/p&gt;
  &lt;p&gt;하지만, 매번 작업할 때마다, 화면이 잠기게 되면 매번 확인을 눌러주는 것도 일이 되는데다가, 원격에서 작업하는데 미묘하게 화면이 잠겨서 더이상애로사항이 꽃피게 된다. 가급적 이 옵션을 설정하는게 편하다. 물론 화면이 잠겨도 아무런 문제가 없다면 켜 놓는게 좋다.&lt;/p&gt;
  &lt;p&gt;먼저 제어판에 들어간다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/image/1746713D4E8520BB2CA144&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/1250B9334E8520BB361446&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;제어판 항목 중, User Account 항목을 선택한다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/image/1133F3424E8520BC1AEE31&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/130DE5364E8520BC0FE260&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;User Accounts 안의 User Account를 선택한다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/image/123520384E8520BD04A7F7&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/13474B3B4E8520BD02EA84&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
        &lt;p&gt;User Account 안에 맨 아래에 위치한 Change User Account Control Settings 를 클릭한다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/image/207CA53F4E8520BD1C0F4C&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/134190404E8520BD172026&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;그러면 UAC(User Account Control) 설정화면이 나오는데, 여기서 맨 아래 단계로 맞추고 OK를 클릭한다&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/image/131DD0384E8520C02E22E8&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/1350993D4E8520C01B7C7E&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
      &lt;h2&gt;&amp;nbsp;&lt;/h2&gt;  &lt;h2&gt;SharePoint Foundation 설치.&lt;/h2&gt;  &lt;p&gt;이제 본격적인 SharePoint 설치가 되겠다. SharePoint 에서 설치 작업은 크게 파일 자체 설치와 DB 구성 설치로 나눌 수 있다. 그에 맞추어 설명한다.&lt;/p&gt;
  &lt;p&gt;먼저 SharePoint Foundation 설치 파일을 실행한다. 대개 &lt;a href=&quot;http://download.microsoft.com&quot;&gt;http://download.microsoft.com&lt;/a&gt; 에서 SharePoint Foundation 이라고 치면 설치파일을 쉽게 찾을 수 있다. 이 파일을 받아 설치를 하면 된다. 더블 클릭하면, 자동으로 압축을 풀고 설치진행이 시작된다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile3.uf.tistory.com/image/124F82464E8520C017CDFA&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/1734E8374E8520C12D2D77&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;이 SharePoint Foundation도 나름 서버 제품이기 때문에, 서버 제품 특유의 Autorun 화면이 나온다.    &lt;br /&gt;
그 중 “Install software prerequisites” 라는 항목을 클릭해서 실행한다. (Install 바로 다음에 있는 항목)&lt;/p&gt;
  &lt;p&gt;예전에는 설치를 진행할 때, 설치에 필요한 필수 항목들을 설치해 달라고 오류가 나거나, 별도 메시지 창을 제공했는데, 이번에는 별도 도구를 제공해서 한번에 필요한 요소들을 모조리 설정해주는 편리한 도구가 생겼는데, 바로 그것이 “Install software prerequisites”&amp;nbsp; 이다. &lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/image/1547053D4E8520C1258FF6&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/1550DB394E8520C10ED84E&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;실행하면 다음과 같은 항목들을 알아서 구성해준다.&lt;/p&gt;
  &lt;ul&gt;
   &lt;li&gt;Application Server Role, Web Server (IIS) Role&lt;/li&gt;
    &lt;li&gt;Microsoft SQL Server 2008 Native Client&lt;/li&gt;
    &lt;li&gt;Hotfix for Microsoft Windows (KB976462)&lt;/li&gt;
    &lt;li&gt;Windows Identity Foundation (KB974405)&lt;/li&gt;
    &lt;li&gt;Microsoft Sync Framework Runtime v1.0 (x64)&lt;/li&gt;
    &lt;li&gt;Microsoft Chart Controls for Microsoft .NET Framework 3.5&lt;/li&gt;
    &lt;li&gt;Microsoft Filter Pack 2.0&lt;/li&gt;
    &lt;li&gt;Microsoft SQL Server 2008 Analysis Services ADOMD.NET&lt;/li&gt;
    &lt;li&gt;Microsoft Server Speech Platform Runtime (x64)&lt;/li&gt;
    &lt;li&gt;Microsoft Server Speech Recognition Language - TELE(en-US)&lt;/li&gt;
    &lt;li&gt;SQL 2008 R2 Reporting Services SharePoint 2010 Add-in&lt;/li&gt;
 &lt;/ul&gt;
  &lt;p&gt;먼저 설치되어 있으면 건너뛰고, 없으면 설치하도록 되어 있다.   &lt;br /&gt;
이 모든 진행은 마법사 화면으로 되어 있으며, Next만 누르면 거의 완료된다.&lt;/p&gt;
  &lt;p&gt;설치 중간에 재 시작이 될 수 있는데, 로그인만 하면 자동으로 실행되므로, 반드시 설치했던 계정으로 계속 로그인 하도록 한다. (대개 특별한 계정을 만들지 않으면 Administrator 계정일 것이다. )&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile25.uf.tistory.com/image/1849DC464E8520C224CE84&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/152639434E8520C226A68A&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/image/116CC4354E8520C32F96FD&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/17296A434E8520C3238677&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/image/194D79334E8520C33C9EEB&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/15381A374E8520C4315EB4&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
    &lt;p&gt;모든 설치가 완료되면 다음과 같은 요약화면이 뜬다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile21.uf.tistory.com/image/1928383C4E8520C413EC2F&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/116561334E8520C4058C01&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;완료가 되었으면 이제 SharePoint 자체를 설치한다.&amp;nbsp; &lt;br /&gt;
아래와 같은 초기 화면이 닫혔다면 다시 설치파일을 실행해서 화면에 나오게 한다.&lt;/p&gt;
  &lt;p&gt;이제 앞서 클릭했던 “Install software prerequisites” 다음 항목인 “Install SharePoint Foundation”을 선택하도록 한다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/image/143EDE394E8520C522FAAD&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/141129364E8520C5096704&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
      &lt;p&gt;자동으로 새로운 설치 진행 준비가 완료되면 다음과 같이 설치 종류를 물어본다. 하나는 Standalone 설치이고 다른 하나는 Server Farm 설치이다. SQL DB를 별도로 구성하려면 Server Farm을 해야 되지만, 이를 위해서는 Active Directory 까지 준비가 되어 있어야 한다. 그 정도 되면 여기서 설명하는 범위가 벗어나므로 그냥 Standalone으로 구성한다. 자동으로 SQL DB와 SharePoint 모듈이 모두 설치되며, 심지어는 자동으로 팀 사이트까지 만들어 놓게 된다. &lt;/p&gt;
  &lt;p&gt;여튼 Standalone을 선택한다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/image/1720FE384E8520C6254F10&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/172C6B434E8520C61DF35F&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;모든 설치는 자동으로 진행된다, 끝날 때까지 기다리면 된다.&lt;/p&gt;
    &lt;p&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/image/1758B3454E8520C71BBE5A&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/1167D63E4E8520C721A9D5&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/1744FA394E8520C72163DC&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/155901464E8520C8137CC4&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;완료가 되면, 체크 박스와 함께 Finish 버튼이 나오는데, 체크 박스를 끄고 Finish를 한다. 다음 단계는 SharePoint 구성인데, 이 체크 박스의 체크의 의미가 그 SharePoint 구성 도구를 자동으로 띄울 것인지를 묻는 것이다. &lt;/p&gt;
  &lt;p&gt;우리는 SharePoint 구성 전에 , SQL Server 2008 R2에 대한 업데이트를 먼저 진행할 것이다.&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;h2&gt;SQL 2008 R2로 업그레이드 및 DB 관리도구 설치&lt;/h2&gt;  &lt;p&gt;SharePoint 가 2010이 되면서 SQL Server 2008 R2를 지원하게 되었는데, 이를 통해 업데이트 된 사항이 바로, FILESTREAM이라는 기능이다. 이 기능은 BLOB 즉 대용량 바이너리 파일을 DB에 직접 넣지 않고, 공유 폴더 같은 곳에 넣어주는 기능이다. SharePoint의 최대의 단점이 바로 이 바이너리 파일을 직접 DB에 넣는 문제라고 볼 수 있는데, 이 부분을 상당 부분 개선할 수 있다.&lt;/p&gt;
  &lt;p&gt;그렇지만, 이 FILESTREAM 기능을 사용하려면, SQL DB 자체의 설정 변경이 반드시 필요하다. 그 작업을 위해서는 당연한 것이지만, SQL Server가 2008 R2 이여야 하며, 또한 SQL Management Studio 가 필요하다.&lt;/p&gt;
  &lt;p&gt;이제부터 그 작업이라고 보면 된다.&lt;/p&gt;
  &lt;p&gt;먼저 MS SQL Server 2008 R2 Express with Tools 라는 것을 받는다. 반드시 With Tools 버전을 받는다. 다른 Express 버전과는 다르게, 이 버전은 SQL Managment Studio가 탑재되어 있다. 물론 별도로 받아 설치할 수 있지만, 한번에 받는 것이 더 편하다. &lt;/p&gt;
  &lt;p&gt;먼저 SQL Server 2008 R2로 업그레이드부터 한다.&lt;/p&gt;
  &lt;h5&gt;SQL Server 2008 R2로 업그레이드&lt;/h5&gt;  &lt;p&gt;이 작업도 많이 애매한 편인데, 요즘 등록된 SharePoint Foundation 2010 에는 2008 R2 버전이 탑재되어 있다. 예전에 받아놓았던 SharePoint Foundation 설치 파일에는 그냥 2008만 담겨 있다.여튼 R2든 그냥 2008이든, 업그레이드 과정을 먼저 시도한다.&lt;/p&gt;
  &lt;p&gt;설치용 실행파일을 실행하면 Server 설치도구가 뜬다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/image/1645AF394E8520C8198AF3&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/160B40444E8520C80D0050&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;좀 메뉴가 복잡하게 되어 있는데, 왼편 Installation 항목을 클릭해서 화면을 전환한 뒤, 3가지 항목 중에 가운데에 위치한, Upgrade from SQL Server 2000, SQL Server 2005 or SQL Server 2008 을 클릭하도록 한다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/1274233F4E8520C9229D54&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/165657464E8520C915623E&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;    &lt;br /&gt;
&lt;/p&gt;  &lt;p&gt;그러면 EUL 승인 화면이 뜨는데, 적당히 하고 Next를 하면, 대부분의 화면에서는 자동으로 넘어간다.&lt;/p&gt;
    &lt;p&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/image/14201A344E8520C91901D2&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/171023364E8520CA0A9697&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/15099D364E8520CA12050D&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/131C26344E8520CA2172AB&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;완료되면 정리된 요약 화면이 뜬다. 해당 서버 설정에 따라 Reboot를 요청하기도 하는데, Reboot를 해주도록 한다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile26.uf.tistory.com/image/1125E63A4E8520CB1DAF74&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/1540A5394E8520CB29764F&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;다시 서버 설치용 도우미 화면으로 돌아가도록 한다. 그리고 난 뒤, 이번에는 “New Insatllation or add features to an existing installation” 항목을 클릭한다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile24.uf.tistory.com/image/1975C43E4E8520CC12A0F6&quot;&gt;&lt;img src=&quot;http://cfile9.uf.tistory.com/image/17456D3B4E8520CC04305C&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;무언가 자동으로 설정을 체크하고 자동으로 휙휙 넘어간다. EUL 화면이 뜨면 반드시 승인하고 넘어가도록 한다.&lt;/p&gt;
  &lt;p&gt;그러면 아래와 같은 선택화면이 나오는데, 모두 선택하도록 하자. 굳이 분리해서 구성할 정도로 옵션이 많지도 않기 때문에, 체크 박스 모두 선택한 뒤 Next를 클릭한다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/image/1620893A4E8520CC2BB1F8&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/1314C4344E8520CD2B4738&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;다음은 SQL의 인스턴스를 선택하는 부분인데, 여기서는 기존에 있는 인스턴스에 덧붙이는 형태로 한다. 그래서 선택 버튼에서도 Named Instance로 선택되어 있다. 특별히 변경하지 않고 그대로 진행한다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile5.uf.tistory.com/image/153CA43B4E8520CD1234D3&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/1364283E4E8520CD1D76D8&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;다음은 서비스 동작 계정인데, 이 부분 역시 기본값으로 둔다.&lt;a href=&quot;http://cfile22.uf.tistory.com/image/2004A9444E8520CE12C831&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/147E88444E8520CE124184&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;이부분은 SQL 인증 방식인데, 만일 원격에서(다른 PC에서)해당 SQL DB를 열여볼 일이 있다면,반드시 아래 화면과 같이 설정한다. Windows authentication mode는 AD 계정이 아닌 이상 내부에서 밖에는 열 수가 없다. 그러므로 반드시 Mixed Mode를 선택하도록 한다. 그리고 암호를 설정한다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/112927434E8520CE23871B&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/174595394E8520CF20E7AF&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;같은 화면의 탭에서 FILESTREAM을 선택하는데, 여기 안의 모든 항목을 체크하도록 한다.&lt;a href=&quot;http://cfile27.uf.tistory.com/image/134FEE394E8520CF127CA1&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/1450BC334E8520CF334EA7&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;Next를 클릭하면, 역시 오류 사항 자동 보고 인데 역시 그냥 두고 Next&lt;a href=&quot;http://cfile27.uf.tistory.com/image/1834593A4E8520CF0A53A0&quot;&gt;&lt;img src=&quot;http://cfile30.uf.tistory.com/image/13040E354E8520D01090DD&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;자동으로 구성되면서 무엇인가 열심히 설치된다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile10.uf.tistory.com/image/207BB9444E8520D01DDE23&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/111555344E8520D02A79AD&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;완료되면 완료 보고 페이지가 뜬다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/image/170E33364E8520D00FA595&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/1922DB3A4E8520D125A620&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;h2&gt;SharePoint Foundation 구성&lt;/h2&gt;  &lt;p&gt;이제 본격적인 SharePoint 구성이다. 원래 이 부분은 Server Farm 인 경우 복잡다단하게 되지만, Standalone으로 하는 경우에는 대부분의 설정이 자동으로 구성되기 때문에, 지켜 바라만 봐도 된다. &lt;/p&gt;
  &lt;p&gt;실행 방법은 Start –&amp;gt; All Programs –&amp;gt; Microsoft SharePoint 2010 Product 에 있는 SharePoint 2010 Products Configuration Wizard 를 실행하면 된다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile22.uf.tistory.com/image/1444D5394E8520D11858F8&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/16598A454E8520D11ADAD4&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;간단한 형태의 마법사가 뜬다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile2.uf.tistory.com/image/174B67374E8520D10F0E27&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/152856344E8520D10AF88F&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile1.uf.tistory.com/image/114E25394E8520D21529CD&quot;&gt;Next를 누르면 경고 메시지가 뜨는데, 그냥 Yes를 클릭한다. 이 작업에서 자동으로 설정되고, 자동으로 껏다가 켜지는 항목들을 나열하는 부분인데, 운영 중이 아닌 경우에는 무시해도 되는 항목들이다. &lt;img src=&quot;http://cfile4.uf.tistory.com/image/205FB0454E8520D2143D82&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;이제 설치를 가만히 지켜본다.&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile9.uf.tistory.com/image/1543B1394E8520D2243BC9&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/1638403B4E8520D31A8978&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;완료되면 Finish를 클릭한다. 그러면 자동으로 만들어진 웹사이트가 뜬다. 웹사이트 주소는 http://컴퓨터이름 이다.&lt;/p&gt;
  &lt;p&gt;현재 로그인한 계정의 ID와 암호로 로그인하면 된다. &lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile4.uf.tistory.com/image/1774F53F4E8520D31EB9DB&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/166C163E4E8520D31A4861&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile6.uf.tistory.com/image/1866123E4E8520D325D5DE&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/114DCA3D4E8520D324FCE7&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/image/172B31434E8520D41F66D8&quot;&gt;&lt;img src=&quot;http://cfile10.uf.tistory.com/image/140B7C444E8520D40CB872&quot; width=&quot;354&quot; height=&quot;266&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
  &lt;p&gt;&amp;nbsp;&lt;/p&gt;
  &lt;p&gt;간단하게 구성한 SharePoint는 여기까지. 설치 작업은 예전 WSS 3.0 보다 훨씬 간단해지고, 단순해진 것 같다.    &lt;br /&gt;
더욱이 자동적으로 설치 환경을 꾸며주는 기능은 칭찬을 주고 싶다.&lt;/p&gt;
  &lt;p&gt;이 외에도 실제로 활용하려면, 몇몇 부분을 손봐야 겠지만, 당장 사용하는데에는 큰 문제가 없을 것이다.&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1127&amp;regts=1317347692&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>SharePoint</category>
			<category>2010</category>
			<category>FileStream</category>
			<category>Management Studio</category>
			<category>SharePoint</category>
			<category>SharePoint Foundation</category>
			<category>SQL 2008 R2 Express</category>
			<category>구성</category>
			<category>설치</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1127</guid>
			<comments>http://hind.pe.kr/1127#entry1127comment</comments>
			<pubDate>Fri, 30 Sep 2011 10:52:21 +0900</pubDate>
		</item>
		<item>
			<title>SharePoint 2010에서 WCF 인터페이스 구축하기.</title>
			<link>http://hind.pe.kr/1126</link>
			<description>&lt;P&gt;예전 2007 시절에는 asmx 파일을 적당히 올려서 웹서비스를 구축했다. 특히 javascript를 이용해서 데이터를 전달할 때는 aspx 파일로 적당히 만들어 JSON으로 Return 하는 식으로 만들곤 했다. 그런데, 이번에 SharePoint 2010으로 넘어오면서 기존에 Copy&amp;amp;Paste 식의 배포가 아닌 SharePoint 솔루션 방식으로 하다 보니, 위의 방식으로 하기에는 왠지 폼이 나지 않았다. 게다가 WCF 라는 나름 유연한 통신 방식을 활용하고 싶다는 생각도 들었다.&lt;/P&gt;
&lt;P&gt;그래서 WCF 인터페이스를 어떻게 WSP로 싸서 업로드 하고 그 내용을 Client를 통해 제어를 하는지 살펴보려고 한다.&lt;/P&gt;
&lt;P&gt;이 모든 작업은 SharePoint 2010 을 기준으로 하며, 개발 도구는 Visual Studio 2010 으로 한다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;1. SharePoint Project 만들기.&lt;/H2&gt;
&lt;P&gt;새 SharePoint Project를 만든다. 템플릿 트리에서는 Visual C# –&amp;gt; SharePoint –&amp;gt; 2010 을 선택하고, 목록에서는 Empty SharePoint Project 를 선택한다. 적당한 위치에 프로젝트 이름과 위치를 결정하고 생성한다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile27.uf.tistory.com/image/1617CD374E7BFC2A28E95E&quot;&gt;&lt;img src=&quot;http://cfile1.uf.tistory.com/image/203D31384E7BFC2B11FD31&quot; height=&quot;313&quot; /&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;그리고 난 뒤, 배포 위치를 설정한다. &lt;br /&gt;
URL이 있는데, 이 URL은 디버그를 하기 위한 URL이다. 가급적 로컬로 잡는 것이 작업하는데 편하다. 굳이 이 부분의 URL에 연연하지 않아도 된다. 그리고 그 밑에 솔루션 유형을 선택하는 부분이 있는데, 그 중 “Deploy as a farm solution”을 선택한다. &lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile23.uf.tistory.com/image/1844E2364E7BFC2B355C87&quot;&gt;&lt;img src=&quot;http://cfile24.uf.tistory.com/image/130FD4374E7BFC2B34A9C9&quot; height=&quot;440&quot; /&gt;&lt;/A&gt;&amp;nbsp; &lt;/P&gt;
&lt;P&gt;WCF를 설치하는 작업은 _vti_bin 과 같은 시스템 쪽 위치의 가상 디렉터리를 활용할 예정이기 때문에, 제한된 형태로 구성되는 Sandboxed solution 으로는 무리가 있다. 그러므로 farm solution 으로 선택한다.&lt;/P&gt;
&lt;P&gt;다 구성되면 다음과 같은 솔루션 구성을 보여준다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile29.uf.tistory.com/image/1936D4384E7BFC2C228358&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/14031B344E7BFC2C13D1B3&quot; height=&quot;408&quot; /&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;2. WCF 파일 구성.&lt;/H2&gt;
&lt;P&gt;먼저 WCF 파일을 담을 위치를 구성한다. 구성하는 방법은 배포용 폴더 위치를 추가해주면 된다. 웹 서비스나, WCF와 같은 외부 노출된 실행 모듈은 대부분 /_vti_bin 에 위치해 있다. 이 폴더는 SharePoint 설정 및 도구가 있는 14 폴더 중 ISAPI 이다. ( 예 C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\14\ISAPI )&lt;/P&gt;
&lt;P&gt;배포 도구에서 해당 위치에 파일을 하기 위해서는 해당 배포 위치를 구성해줘야 하는데, 배포 폴더를 하나 추가해줘야 한다. 추가하려면, 프로젝트 위에서 오른쪽 클릭을 해서 Context Menu를 띄운다. 그리고, Add –&amp;gt; SharePoint Mapped Folder... 를 선택한다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile27.uf.tistory.com/image/1607C83A4E7BFC2D2869E6&quot;&gt;&lt;img src=&quot;http://cfile22.uf.tistory.com/image/175D0B3C4E7BFC2D37DE2A&quot; height=&quot;443&quot; /&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;SharePoint Mapped Folder를 클릭하면, Add SharePoint Mapped Folder 창이 뜨면, 그 중에 ISAPI를 선택한다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile29.uf.tistory.com/image/1539FC394E7BFB6401DA44&quot;&gt;&lt;img src=&quot;http://cfile26.uf.tistory.com/image/191D5E3B4E7BFB640292B7&quot; height=&quot;454&quot; /&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;이제 WCF용 파일들을 만들어야 된다. 이 파일들을 직접 cs 파일들과 svc 파일을 만들어도 되지만, WCF 프로젝트를 잠시 추가해서 템플릿을 받아 사용하는 것이 좋다. &lt;/P&gt;
&lt;P&gt;솔루션에서 새로운 프로젝트를 추가하고, 프로젝트 중에서 WCF Service Library를 선택한다. &lt;br /&gt;
&amp;nbsp;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile22.uf.tistory.com/image/151D9D334E7BFC2D0A7ECD&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/17066E444E7BFC2D044C87&quot; height=&quot;313&quot; /&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;템플릿을 통해 만들어진 다음 2개의 파일을 SharePoint의 프로젝트에 복사한다. &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Service1.cs &lt;/LI&gt;
&lt;LI&gt;IService.cs &lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;적당한 폴더를 만들어 구성할 수도 있고, 아니면 프로젝트 루트에 복사할 수도 있다.&lt;/P&gt;
&lt;P&gt;이 파일은 WCF를 구성하기 위한 구성요소들로 IService.cs는 Contract를 담당하는 Interface 파일과 다른 하나는 그 Contract를 구현하는 구현 코드가 담기는 파일이다. 그 내용은 다음과 같다.&lt;/P&gt;
&lt;TABLE border=2 cellSpacing=0 cellPadding=5 width=550&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=546&gt;
&lt;P&gt;&lt;STRONG&gt;IService1.cs &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;using System; &lt;br /&gt;
using System.Collections.Generic; &lt;br /&gt;
using System.Linq; &lt;br /&gt;
using System.Runtime.Serialization; &lt;br /&gt;
using System.ServiceModel; &lt;br /&gt;
using System.Text; &lt;/P&gt;
&lt;P&gt;namespace WcfServiceLibrary1 &lt;br /&gt;
{ &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // NOTE: You can use the &quot;Rename&quot; command on the &quot;Refactor&quot; menu to change the interface name &quot;IService1&quot; in both code and config file together. &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [ServiceContract] &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public interface IService1 &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [OperationContract] &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string GetData(int value); &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [OperationContract] &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; CompositeType GetDataUsingDataContract(CompositeType composite); &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // TODO: Add your service operations here &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; } &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Use a data contract as illustrated in the sample below to add composite types to service operations &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [DataContract] &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public class CompositeType &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; bool boolValue = true; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; string stringValue = &quot;Hello &quot;; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; [DataMember] &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public bool BoolValue &lt;br /&gt;
&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; get { return boolValue; } &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; set { boolValue = value; } &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; [DataMember] &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string StringValue &lt;br /&gt;
&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; get { return stringValue; } &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; set { stringValue = value; } &lt;br /&gt;
&amp;nbsp;&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;/TD&gt;&lt;/TR&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=546&gt;
&lt;P&gt;&lt;STRONG&gt;Service1.cs &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;using System; &lt;br /&gt;
using System.Collections.Generic; &lt;br /&gt;
using System.Linq; &lt;br /&gt;
using System.Runtime.Serialization; &lt;br /&gt;
using System.ServiceModel; &lt;br /&gt;
using System.Text; &lt;/P&gt;
&lt;P&gt;namespace WcfServiceLibrary1 &lt;br /&gt;
{ &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; // NOTE: You can use the &quot;Rename&quot; command on the &quot;Refactor&quot; menu to change the class name &quot;Service1&quot; in both code and config file together. &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; public class Service1 : IService1 &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; { &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; public string GetData(int value) &lt;br /&gt;
&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; return string.Format(&quot;You entered: {0}&quot;, value); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp; public CompositeType GetDataUsingDataContract(CompositeType composite) &lt;br /&gt;
&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; if (composite == null) &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; { &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; throw new ArgumentNullException(&quot;composite&quot;); &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; } &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; if (composite.BoolValue) &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; { &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; composite.StringValue += &quot;Suffix&quot;; &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; } &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; return composite; &lt;br /&gt;
&amp;nbsp;&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;P&gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;적당한 위치에 추가하면 다음과 같은 솔루션 구성을 볼 수 있다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile25.uf.tistory.com/image/1532F8354E7BFB652D96F7&quot;&gt;&lt;img src=&quot;http://cfile23.uf.tistory.com/image/110F753F4E7BFB651E03A8&quot; height=&quot;234&quot; /&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;/P&gt;
&lt;P&gt;지금까지 구성한 내용은 WCF의 알맹이 부분이라면, 이제 외부에 노출되는 페이지를 만들어야 한다. 즉 ASMX나 ASPX 파일을 만들어야 되는 것이다. WCF에서는 이런 역할을 하는 파일이 SVC 파일이다. 그러나 현재 SharePoint 템플릿에서는 SVC 파일을 독자적으로 추가할 수 없으므로, 텍스트 파일로 추가하여 확장자를 SVC로 변경하는 것이다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile4.uf.tistory.com/image/187A9D3B4E7BFC2E382558&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/11788A414E7BFC2E2E5DC7&quot; width=&quot;554&quot; height=&quot;324&quot; /&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile30.uf.tistory.com/image/137F0B3C4E7BFC2E01D7ED&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/1560BA3E4E7BFC2F33C167&quot; width=&quot;554&quot; height=&quot;313&quot; /&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;이제 새롭게 열린 파일 안에 다음과 같은 항목을 추가한다.&lt;/P&gt;
&lt;TABLE border=2 cellSpacing=0 cellPadding=5 width=600&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=596&gt;
&lt;P&gt;&amp;lt;%@ ServiceHost Language=&quot;C#&quot; Debug=&quot;true&quot; &lt;br /&gt;
Factory=&quot;Microsoft.SharePoint.Client.Services.MultipleBaseAddressBasicHttpBindingServiceHostFactory &lt;br /&gt;
,Microsoft.SharePoint.Client.ServerRuntime, Version=14.0.0.0, Culture=neutral &lt;br /&gt;
, PublicKeyToken=71e9bce111e9429c&quot; &lt;br /&gt;
Service=&quot;&lt;STRONG&gt;WcfServiceLibrary1.Service1&lt;/STRONG&gt;, $SharePoint.Project.AssemblyFullName$&quot; %&amp;gt;&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;위의 내용을 추가할 때, Service 항목 내에 위에서 추가한 WCF 메인 모듈의 네임스페이스와 클래스이름을 연결해서 구성한다. (필자는 특별히 바꾼게 없으므로 위와 같이 적었다.)&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;3. 참조(References) 구성&lt;/H2&gt;
&lt;P&gt;지금까지 파일들을 추가했으면, 이제 WCF를 구성하기 위해 필요한 DLL 참조를 구성해야 한다.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;System.ServiceModel &lt;/LI&gt;
&lt;LI&gt;System.ServiceModel.Web &lt;/LI&gt;
&lt;LI&gt;System.Runtime.Serialization &lt;/LI&gt;
&lt;LI&gt;Micosoft.SharePoint.Client.ServerRuntime &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;1, 2, 3번은 Add Reference를 한 뒤, .NET 탭에서 찾으면 금방 찾을 수 있다. 그런데, 문제는 4번 Assembly다. 저 Assembly는 .NET이나, COM에서 절대 찾을 수 없다. 직접 Folder를 따라가는 수 밖에 없다. 이를 위해서는 Browse 탭으로 넘어간다. &lt;/P&gt;
&lt;P&gt;그리고 난 뒤, C:\ –&amp;gt; Windows –&amp;gt; Assembly –&amp;gt; GAC_MSIL –&amp;gt; Micosoft.SharePoint.Client.ServerRuntime –&amp;gt; 14.0.0.0__71e9bce111e9429c –&amp;gt; Microsoft.SharePoint.Client.ServerRuntime.dll 로 들어가서 Microsoft.SharePoint.Client.ServerRuntime.dll을 선택한다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile25.uf.tistory.com/image/17659D3C4E7BFB66221125&quot;&gt;&lt;img src=&quot;http://cfile6.uf.tistory.com/image/1617CD374E7BFB6725F182&quot; height=&quot;381&quot; /&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;4. Attribute 설정하기.&lt;/H2&gt;
&lt;P&gt;원래 WCF에서 Address 설정부터, Binding, 인증 처리 등을 설정하기 위해서는 web.config를 통해서 설정하게 된다. 그런데, 현재 구성하려는 SharePoint 패키지 프로젝트에서는 특정 web.config 부분을 일일히 수정할 수 없다. 그것을 .NET Attribute 기능을 이용해서 적용할 수 있다.&lt;/P&gt;
&lt;P&gt;이 부분은 구현하는 CS 파일( 위의 예제로 보면, Service1.cs 파일 )에서 적용한다. &lt;br /&gt;
여기서 사용하는 Attribute는 BasicHttpBindingServiceMetadataExchangeEndpointAttribute 와 AspNetCompatibilityRequirements 를 사용한다.&lt;/P&gt;
&lt;P&gt;적용하는 코드 부분만을 보면 아래와 같다.&lt;/P&gt;
&lt;TABLE border=2 cellSpacing=0 cellPadding=5 width=550&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=546&gt;
&lt;P&gt;&lt;STRONG&gt;Service1.cs &lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;using System; &lt;br /&gt;
using System.Collections.Generic; &lt;br /&gt;
using System.Linq; &lt;br /&gt;
using System.Runtime.Serialization; &lt;br /&gt;
using System.ServiceModel; &lt;br /&gt;
using System.Text; &lt;br /&gt;
&lt;STRONG&gt;using Microsoft.SharePoint.Client.Services; &lt;br /&gt;
using System.ServiceModel.Activation; &lt;br /&gt;
using Microsoft.SharePoint.Security;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;namespace WcfServiceLibrary1 &lt;br /&gt;
{ &lt;br /&gt;
&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&amp;nbsp; &lt;STRONG&gt;[BasicHttpBindingServiceMetadataExchangeEndpointAttribute] &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)]&amp;nbsp;&amp;nbsp;&amp;nbsp; &lt;br /&gt;
&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public class Service1 : IService1 &lt;br /&gt;
&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; public string GetData(int value) &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;&amp;nbsp;&amp;nbsp;&amp;nbsp; return string.Format(&quot;You entered: {0}&quot;, value); &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp;&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;&amp;nbsp;&amp;nbsp;&amp;nbsp; public CompositeType GetDataUsingDataContract(CompositeType composite) &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;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (composite == null) &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; { &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;&amp;nbsp;&amp;nbsp; throw new ArgumentNullException(&quot;composite&quot;); &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; if (composite.BoolValue) &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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; composite.StringValue += &quot;Suffix&quot;; &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; return composite; &lt;br /&gt;
&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; } &lt;br /&gt;
}&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;using으로 세가지를 추가하고, class 위에 attribute로 두 개를 추가해주면 된다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;5. 프로젝트 파일 설정 변경.&lt;/H2&gt;
&lt;P&gt;프로젝트 자체가 SharePoint 구성요소에 대한 설정만 자동으로 추가된다. 그래서 WCF의 svc 파일 처리가 불가능하다. 이를 위해서는 수동적인 방법을 통해서 처리해야 한다.&lt;/P&gt;
&lt;P&gt;먼저 SharePoint 프로젝트를 Text 파일로 열어 그 안의 XML 파일을 연다. csproj 파일을 메모장 같은 도구로 열면 된다. 그리고 Project –&amp;gt;PropertyGroup 엘리멘트 안에 &amp;lt;TokenReplacementFileExtensions&amp;gt;svc&amp;lt;/TokenReplacementFileExtensions&amp;gt; 라는 엘리멘트를 추가하면 된다.&lt;/P&gt;
&lt;TABLE border=2 cellSpacing=0 cellPadding=5 width=550&gt;
&lt;TBODY&gt;
&lt;TR&gt;
&lt;TD vAlign=top width=546&gt;
&lt;P&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt; &lt;br /&gt;
&amp;lt;Project ToolsVersion=&quot;4.0&quot; DefaultTargets=&quot;Build&quot; xmlns=&quot;&lt;A href=&quot;http://schemas.microsoft.com/developer/msbuild/2003%22&quot;&gt;http://schemas.microsoft.com/developer/msbuild/2003&quot;&lt;/A&gt;&amp;gt; &lt;br /&gt;
&amp;nbsp; &amp;lt;PropertyGroup&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Configuration Condition=&quot; '$(Configuration)' == '' &quot;&amp;gt;Debug&amp;lt;/Configuration&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;Platform Condition=&quot; '$(Platform)' == '' &quot;&amp;gt;AnyCPU&amp;lt;/Platform&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SchemaVersion&amp;gt;2.0&amp;lt;/SchemaVersion&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ProjectGuid&amp;gt;{6EDE3191-D412-4B0A-917A-09BA91DAD509}&amp;lt;/ProjectGuid&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;OutputType&amp;gt;Library&amp;lt;/OutputType&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;AppDesignerFolder&amp;gt;Properties&amp;lt;/AppDesignerFolder&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;RootNamespace&amp;gt;Nocson.EzSearch&amp;lt;/RootNamespace&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;AssemblyName&amp;gt;Nocson.EzSearch&amp;lt;/AssemblyName&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TargetFrameworkVersion&amp;gt;v3.5&amp;lt;/TargetFrameworkVersion&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;FileAlignment&amp;gt;512&amp;lt;/FileAlignment&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;ProjectTypeGuids&amp;gt;{BB1F664B-9266-4fd6-B973-E1E44974B511};{14822709-….&amp;lt;/ProjectTypeGuids&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SandboxedSolution&amp;gt;False&amp;lt;/SandboxedSolution&amp;gt; &lt;br /&gt;
&lt;STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;TokenReplacementFileExtensions&amp;gt;svc&amp;lt;/TokenReplacementFileExtensions&amp;gt; &lt;br /&gt;
&lt;/STRONG&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SccProjectName&amp;gt;SAK&amp;lt;/SccProjectName&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SccLocalPath&amp;gt;SAK&amp;lt;/SccLocalPath&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SccAuxPath&amp;gt;SAK&amp;lt;/SccAuxPath&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;SccProvider&amp;gt;SAK&amp;lt;/SccProvider&amp;gt; &lt;br /&gt;
&amp;nbsp; &amp;lt;/PropertyGroup&amp;gt; &lt;br /&gt;
&amp;nbsp; &amp;lt;PropertyGroup Condition=&quot; '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' &quot;&amp;gt; &lt;br /&gt;
&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;lt;De…&lt;/P&gt;&lt;/TD&gt;&lt;/TR&gt;&lt;/TBODY&gt;&lt;/TABLE&gt;
&lt;P&gt;저장한 뒤에 해당 프로젝트를 다시 로드 한다.&lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;6. 배포 하고 테스트.&lt;/H2&gt;
&lt;P&gt;SharePoint 프로젝트의 특징은 역시 자동으로 .WSP라는 SharePoint 솔루션으로 만들어 주고 그것을 Debug로 설정한 사이트로 자동으로 업로드 해준다. &lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile7.uf.tistory.com/image/206BBB454E7BFB6709DE9C&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/1814A6434E7BFB6729B608&quot; height=&quot;300&quot; /&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;배포가 성공적으로 되면 웹사이트에서 &lt;A href=&quot;http://localhost/_vti_bin/WCFTest.svc/MEX&quot;&gt;http://localhost/_vti_bin/WCFTest.svc/MEX&lt;/A&gt; 를 입력한다.(꼭 맨 뒤에 /MEX가 있어야 정상적으로 접속이 가능하다.) &lt;/P&gt;
&lt;P&gt;정상적으로 읽어오면 아래와 같은 화면이 뜬다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile29.uf.tistory.com/image/170160344E7BFC2F1BFF43&quot;&gt;&lt;img src=&quot;http://cfile2.uf.tistory.com/image/18199A394E7BFC2F246B49&quot; width=&quot;554&quot; height=&quot;451&quot; /&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;&amp;nbsp;&lt;/P&gt;
&lt;H2&gt;7. 정리&lt;/H2&gt;
&lt;P&gt;이 연결하는 작업을 전부 수동으로 만들면 그리 문제 없이 설정하고 구성할 수 있다. 하지만, SharePoint의 솔루션으로 포함시켜서 만들려면 몇 가지 씩 손봐야 된다. 그런데도 굳이 SharePoint의 솔루션으로 작업하는 이유는 나중에 Uninstall이나 업그레이드를 보다 간단하게 수행할 수 있기 때문이다. &lt;/P&gt;
&lt;P&gt;위의 글들은 아래의 문서들을 참고로 직접 적용 후 정리했다.&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Creating a Custom WCF Service in SharePoint Foundation &lt;br /&gt;
( &lt;A href=&quot;http://msdn.microsoft.com/en-us/library/ff521581.aspx&quot;&gt;http://msdn.microsoft.com/en-us/library/ff521581.aspx&lt;/A&gt; ) &lt;/LI&gt;
&lt;LI&gt;SharePoint 2010: Create Custom WCF Service &lt;br /&gt;
( &lt;A href=&quot;http://ranaictiu-technicalblog.blogspot.com/2011/03/sharepoint-2010-create-custom-wcf.html&quot;&gt;http://ranaictiu-technicalblog.blogspot.com/2011/03/sharepoint-2010-create-custom-wcf.html&lt;/A&gt; ) &lt;/LI&gt;
&lt;LI&gt;Customizing WCF Services in SharePoint 2010 &lt;br /&gt;
( &lt;A href=&quot;http://answers.oreilly.com/topic/1404-how-to-customize-wcf-services-in-sharepoint-2010/&quot;&gt;http://answers.oreilly.com/topic/1404-how-to-customize-wcf-services-in-sharepoint-2010/&lt;/A&gt; ) &lt;/LI&gt;
&lt;LI&gt;WCF 확장 &lt;br /&gt;
( &lt;A href=&quot;http://msdn.microsoft.com/ko-kr/library/ms733848(VS.90).aspx&quot;&gt;http://msdn.microsoft.com/ko-kr/library/ms733848(VS.90).aspx&lt;/A&gt; ) &lt;/LI&gt;&lt;/UL&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1126&amp;regts=1316748499&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>SharePoint</category>
			<category>CUSTOM</category>
			<category>SharePoint</category>
			<category>SharePoint Project</category>
			<category>SOLUTION</category>
			<category>Visual Studio 2010</category>
			<category>WCF</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1126</guid>
			<comments>http://hind.pe.kr/1126#entry1126comment</comments>
			<pubDate>Fri, 23 Sep 2011 12:22:16 +0900</pubDate>
		</item>
		<item>
			<title>SharePoint 2010 사용하기 - 0</title>
			<link>http://hind.pe.kr/1125</link>
			<description>&lt;p&gt;전에 Windows SharePoint Service 3.0 으로 협업을 해보자라는 글을 올린 적이 있다. 그 때 SharePoint 개발 회사에서 그만 두고 난 뒤 더 이상 쓰질 못했다. 물론 직접 돌려보면서 이런 저런 사용방법을 적을 수도 있지만, 너무 게으른 성품 때문에 결국 다 쓰지 못한 채 연재를 더 이상하지 못했다.&lt;/p&gt;  &lt;p&gt;그 즈음 SharePoint 2010 이 나오고 있었고, 지금은 공식 판매 한지 벌써 1년 정도 지났다. 지금은 다시 회사를 옮기게 되었고, 어찌 어찌 하다 보니, 다시 SharePoint를 만지게 되었다. 오랜만에 SharePoint를 만지다 보니까, 예전 2007 시절에서 사용하던 방법은 더 이상 활용하기가 무리가 있다고 생각된다. 그래서 지금은 완전히 처음부터 다시 만진다는 느낌으로 하나씩 손 대보려고 한다. &lt;/p&gt;  &lt;p&gt;그런데 지금 주 거래처가 미쿡이다 보니, 지금 사용하는 SharePoint는 영문판이다.    &lt;br /&gt;그래서 캡쳐되는 화면도 영문판으로 진행될 것 같다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/image/1825DF454E66AADB022FED&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile10.uf.tistory.com/image/151B01364E66AADB08D11E&quot; width=&quot;505&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1125&amp;regts=1315351260&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>SharePoint</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1125</guid>
			<comments>http://hind.pe.kr/1125#entry1125comment</comments>
			<pubDate>Wed, 07 Sep 2011 08:21:00 +0900</pubDate>
		</item>
		<item>
			<title>WinQual을 통해 Verisign 할인 받는 법.</title>
			<link>http://hind.pe.kr/1124</link>
			<description>&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/1107&quot;&gt;앞의 포스트(Verisign에서 인증서 받기)&lt;/A&gt;에서 Verisign 인증서를 받는 소개를 할 때, Windows Logo 프로그램을 통하면, $99로 받을 수 있다는 점을 언급했습니다.&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/1107&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/1810D9484E3B8DB4292854&quot; width=&quot;640&quot; height=&quot;84&quot; /&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;그런데, 이 부분을 명확히 해야 할 점이 있는데요.&lt;/P&gt;
&lt;P&gt;저 프로모션을 사용하는 조건은 바로 Windows Logo에서 사용하라고 하는 점입니다. Windows Logo에서는 단순히 회사 인증만 하면 되기 때문에, 1년 짜리를 한 개 받으면 평생 회사 인증용으로 사용할 수 있습니다. 그래서 이 &lt;STRONG&gt;&lt;FONT color=#ff0000&gt;프로모션을 통해서 얻을 수 있는 인증서는 오로지 Code Sign용 인증서고 그 유효기간이 딱 1년 짜리라는 것&lt;/FONT&gt;&lt;/STRONG&gt;입니다. &lt;br /&gt;
그러므로 https를 위한 SSL 인증서나, 3~5년 짜리 인증서를 받을 때는 아무 소용이 없다는 점을 꼭 기억해주세요.&lt;/P&gt;
&lt;P&gt;얻는 방법은 아래와 같습니다.&lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;먼저 &lt;A href=&quot;http://winqual.microsoft.com/&quot;&gt;http://winqual.microsoft.com&lt;/A&gt; 을 접속합니다. &lt;br /&gt;
오른쪽에 있는 Digital IDs 부분에 “Offer details are avaliable here” 라는 문장이 있는데, 그 중 “here” 이라는 링크로 들어갑니다. &lt;br /&gt;
&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile9.uf.tistory.com/image/117A7F4B4E3B8DB42CD2EA&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/20154C484E3B8DB521E5B4&quot; width=&quot;644&quot; height=&quot;350&quot; /&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;그러면 Winqual 에 대한 도움말 페이지가 뜹니다. 스크롤을 내려 맨 아래쪽에 보면, “Verisign ‘Microsoft Authenticode’ Code Signing Digital Certificate” 라는 문장이 있는데, 이 링크를 클릭합니다. &lt;br /&gt;
&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile3.uf.tistory.com/image/1729F2474E3B8DB505B9BE&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/11553C494E3B8DB528689C&quot; width=&quot;644&quot; height=&quot;350&quot; /&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;그러면 Verisign에서 Promotion 코드가 자동으로 들어간 페이지가 뜹니다. 여기서 One Year를 선택한 상태에서 계속 진행하시면 됩니다. &lt;br /&gt;
&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile1.uf.tistory.com/image/201A89524E3B8DB610B08C&quot;&gt;&lt;img src=&quot;http://cfile25.uf.tistory.com/image/1957F94A4E3B8DB617687C&quot; width=&quot;600&quot; height=&quot;484&quot; /&gt;&lt;/A&gt;&lt;/LI&gt;
&lt;LI&gt;나머지는 이전 Post 내용을 참고하세요.&lt;/LI&gt;&lt;/OL&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1124&amp;regts=1316748654&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>ETC</category>
			<category>$99</category>
			<category>Microsoft</category>
			<category>VeriSign</category>
			<category>WinQual</category>
			<category>인증서</category>
			<category>프로모션</category>
			<category>할인</category>
			<category>회사 인증서</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1124</guid>
			<comments>http://hind.pe.kr/1124#entry1124comment</comments>
			<pubDate>Fri, 05 Aug 2011 15:29:11 +0900</pubDate>
		</item>
		<item>
			<title>사용자 정의 Windows Message ID 정의</title>
			<link>http://hind.pe.kr/1123</link>
			<description>&lt;p&gt;예전 Windows App을 API 기반의 C 로 만들거나, MFC로 만들 때, 각종 Event 처리를 위해, 독자적인 ID를 만들었다. 그런데, 미처 인식을 못한 것이, 어떤 ID를 사용해서 운영을 해야 겹치는 경우 없이 제대로 되는지 정하지 않고 임의대로 했다. &lt;/p&gt;  &lt;p&gt;그 중 WM_USER 값이다.    &lt;br /&gt;WM_USER는 사용자가 정의해서 쓸 수 있는 ID 정도로만 인식하고 있었다. 이 값으로 시작해서 최대 0x7c00 까지 정의해서 쓸 수 있다. 10진수로 한다면, 1024 ~ 31744 까지 정의해서 쓸 수 있다. 그래서 예전에는 사용할 ID 값을 아래와 같이 정의하곤 했다.&lt;/p&gt;  &lt;p&gt;#define WM_CUSTOMUPDATE &lt;strong&gt;WM_USER + 100&lt;/strong&gt;&lt;/p&gt;  &lt;p&gt;즉 1024 + 100 = 1124 를 WM_CUSTOMUPDATE 라는 이벤트 ID로 사용한다는 의미.   &lt;br /&gt;하지만, 내가 안 쓰더라도, 별도로 사용되는 컨트롤이나, 3th-Party의 컨트롤의 경우 저 이벤트를 사용하는 경우가 종종 있어 자칫 종종 겹치는 경우가 있었다. 그래서 위 처럼 + 100 정도가 아닌, 5000 정도로 팍팍 띄워서 정의하기도 했다. &lt;/p&gt;  &lt;p&gt;그런데, 알고 보니, WM_APP 라는 값이 있었다. 이 값은 최소한 컨트롤 같은 곳에서 사용하지 않는 완전 App 개발자 용으로 남겨놓은 영역이라고 한다. 이 값은 0x8000 ~ 0xBFFF 값이다. 10진수로 한다면 32768 ~ 49151 으로 볼 수 있다. &lt;/p&gt;  &lt;p&gt;이번에 C#으로 이것저것 만들다가, 결국 unmanaged code들을 짜게 되었는데, 이 때 Windows Message를 주로 핸들링 하게 되었는데, 이벤트 ID를 대충 대충 정해서 구현한 것 같았다. 가급적 저 ID 정의 Rule에 맞추어서 정의해야 할 것 같다.&lt;/p&gt;  &lt;p&gt;이 내용은 아래 링크에서 참고해&amp;#160; 정리했다.(EUC-KR 이여서, 일부 Web Browser에서 종종 깨져 보인다.)&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://winapi.co.kr/reference/Message/WM_USER.htm&quot;&gt;http://winapi.co.kr/reference/Message/WM_USER.htm&lt;/a&gt;&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1123&amp;regts=1318301776&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>Windows</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1123</guid>
			<comments>http://hind.pe.kr/1123#entry1123comment</comments>
			<pubDate>Wed, 20 Jul 2011 14:16:07 +0900</pubDate>
		</item>
		<item>
			<title>Google Calendar 음력 기념일 입력기 제작시작.</title>
			<link>http://hind.pe.kr/1122</link>
			<description>&lt;P&gt;만들고 싶은게 무척 많은데, 간단한 것 부터 출발하자는 생각으로 시작했다.&lt;/P&gt;
&lt;P&gt;메인 아이디어는 Google Calendar의 기념일 관리도구를 하나 만들려고 한다. &lt;br /&gt;
다만, 음력으로 된 기념일을 등록/수정/삭제가 가능한 도구이라는 것.&lt;/P&gt;
&lt;P&gt;전에 ical 파일을 만들어 이 파일을 Google Calendar에 등록하는 방법이 있어 해봤다. &lt;br /&gt;
원리는 음력의 기념일을 기준으로 매년 양력일자를 ical 내에 미리 넣어주는 방법. &lt;br /&gt;
그래서 해당 양력일자의 일정을 Google Calendar에 우겨 넣는 것이다.&lt;/P&gt;
&lt;P&gt;다 좋은데, 문제는 일정 수정이나 삭제할 때, 우겨 넣은 모든 일정을 일일히 찾아 지워야 한다는 점이다.&lt;/P&gt;
&lt;P&gt;예를 들어 음력 6월 1일이라고 하면, 그에 맞는 양력 일자를 2011년, 2012년, 2013년... 2020년 양력 날짜가 쫙 생긴다. 11년에서 20년까지면 무려 9개. 그 9개의 날짜가 조금만 틀려도 매년 달력으로 넘어가서 수정/삭제를 해줘야 한다. &lt;br /&gt;
기념일이 한 개정도면 귀찮아서 그렇지 그냥 그냥 하면 되지만, 이게 20개 정도만 되면, 슬슬 머리가 아파오기 시작한다. &lt;/P&gt;
&lt;P&gt;그래서 이것을 Windows 기반의 어플리케이션으로 만들어 관리하려고 한다. 그리고 그 관리도구를 만들기 위한 장소를 네이버 개발자에 넣었고, 네이버 개발자 사이트에서 제공하는 SVN에 등록하려고 한다.&lt;/P&gt;
&lt;P&gt;사이트는 &lt;A class=externalLink href=&quot;http://dev.naver.com/projects/googlecalendarm&quot;&gt;http://dev.naver.com/projects/googlecalendarm&lt;/A&gt; 이며, 틈 나는 대로 적용하려고 한다.&lt;/P&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1122&amp;regts=1316748597&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<category>Claendar</category>
			<category>Google</category>
			<category>naver</category>
			<category>개발</category>
			<category>음력</category>
			<category>제작</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1122</guid>
			<comments>http://hind.pe.kr/1122#entry1122comment</comments>
			<pubDate>Tue, 19 Jul 2011 10:18:37 +0900</pubDate>
		</item>
		<item>
			<title>Google Calendar API for .NET</title>
			<link>http://hind.pe.kr/1121</link>
			<description>&lt;p&gt;Google 에서 제공되는 서비스들은 거의 대부분 API를 제공하고 있다.   &lt;br /&gt;ATOM - 우리가 보통 말하는 SOAP과 같은 형태로 규격화된 XML로 구성된 형태와 JavaScript에서 쓰기 편한 JSON 형태들, 결과값도 다양한 형태로 제공한다.    &lt;br /&gt;(우리나라 포털은 이런 것과는 전혀 반대로 가고 있다. 뭐 다음이나, 네이버에는 개발자 들이 많으니, 외부 개발자들이 끼어들 필요가 없어서 그런듯... 애플 앱스토어 같은 성공 모델도, 이들에게는 큰 감흥이 없는 것 같다.)&lt;/p&gt;  &lt;p&gt;이 중 Google Calendar 값을 가져와서 편집하려는 .NET 기반 툴을 만들려고 생각 중이였다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;a href=&quot;http://code.google.com/apis/calendar/data/2.0/developers_guide_protocol.html&quot;&gt;http://code.google.com/apis/calendar/data/2.0/developers_guide_protocol.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;난 맨처음 ATOM 기반의 데이터를 보았기 때문에, XMLDocument Reader로 읽어서 원하는 값들을 뽑으려고 했다.   &lt;br /&gt;하지만, 내용이 너무 방대하고 많아서 이 내용들을 정리할 생각에 뒷목이 뻣뻣함이 느껴졌는데,     &lt;br /&gt;알고보니까, 언어별로 이미 패키지화 해버렸다.    &lt;br /&gt;패키지는 다음 URL에서 받으면 된다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://code.google.com/p/google-gdata/downloads/list&quot;&gt;http://code.google.com/p/google-gdata/downloads/list&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;MSI 파일로 설치를 하면 기본 경로로 C:\Program Files\Google\Google Data API SDK 위치에 설치된다.   &lt;br /&gt;Calendar 뿐만 아니라, Google 에서 제공하는 각종 기능들을 다룰 때 사용하는 대부분의 기능들을 담은 패키지를 제공한다. &lt;/p&gt;  &lt;p&gt;그 중 완벽 정리된, .NET 코드로 작성하는 방법은 아래의 URL에서 참고하면 된다.&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://code.google.com/apis/calendar/data/2.0/developers_guide_dotnet.html&quot;&gt;http://code.google.com/apis/calendar/data/2.0/developers_guide_dotnet.html&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;거의 완벽 정리. ( 문제는 언어 장벽! ㅠ.ㅠ )&lt;/p&gt;  &lt;p&gt;각종 Open API 기반 서비스는 Google 기반으로 동작하게 할 수 밖에 없을 것 같다.   &lt;br /&gt;다음도, 네이버도 결국 이런 서비스를 제공하는 것은 요원한 일이 될테니.. &lt;/p&gt;  &lt;p&gt;구글 서비스나 잘 구성해서 써야 겠다.&lt;/p&gt;  &lt;p&gt;&amp;#160;&lt;/p&gt;  &lt;p&gt;Google Calendar 내용을 모두 열어 보는 코드를 간단하게 짜보면 아래와 같다.&lt;/p&gt;  &lt;table border=&quot;2&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;648&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;644&quot;&gt;         &lt;br /&gt;Google.GData.Client.GDataCredentials m_credential&amp;#160; &lt;br /&gt; = new Google.GData.Client.GDataCredentials(&amp;quot;구글아이디&amp;quot;, &amp;quot;구글암호&amp;quot;);          &lt;br /&gt;          &lt;p&gt;Google.GData.Calendar.CalendarService svc = new Google.GData.Calendar.CalendarService(&amp;quot;지금 만들고 있는 프로그램의 이름&amp;quot;);           &lt;br /&gt;svc.Credentials = m_credential;&lt;/p&gt;          &lt;p&gt;Google.GData.Calendar.EventQuery query           &lt;br /&gt; = new Google.GData.Calendar.EventQuery(&lt;a href=&quot;http://www.google.com/calendar/feeds/default/private/full&quot;&gt;http://www.google.com/calendar/feeds/default/private/full&lt;/a&gt;);&lt;/p&gt;          &lt;p&gt;query.StartDate = DateTime.MinValue;           &lt;br /&gt;query.EndDate = DateTime.MaxValue;            &lt;br /&gt;Google.GData.Calendar.EventFeed feed = svc.Query(query);&lt;/p&gt;          &lt;p&gt;foreach (Google.GData.Calendar.EventEntry entry in feed.Entries)           &lt;br /&gt;{            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; if (entry.Times.Count &amp;gt; 0)            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160; {            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; entry.Times[0].AllDay;&amp;#160; // 종일 이벤트인지?            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; entry.Times[0].StartTime;&amp;#160; // 시작일            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; entry.Times[0].EndTime;&amp;#160;&amp;#160; // 종료일            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; }            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; entry.Title.Text; // 이벤트 제목            &lt;br /&gt;}&lt;/p&gt;                 &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;저 코드면 맨 마지막에 나오는 값들로 표시를 하거나 정리를 할 수 있게 된다.&lt;/p&gt;  &lt;p&gt;그런데 특이한 점은 일정에서 날짜와 시간이 반드시 들어갈 줄 알았는데, 알고 보니까,   &lt;br /&gt;외부에서 파일을 import 해서 넣은 일정들은 저 entry.Times 값이 없는 경우가 있다.    &lt;br /&gt;그래서 entry.Times 에서 갯수를 파악한 뒤 내용을 꺼냈다.&amp;#160; - 주의가 필요 -&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1121&amp;regts=1310945627&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>Web</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1121</guid>
			<comments>http://hind.pe.kr/1121#entry1121comment</comments>
			<pubDate>Fri, 08 Jul 2011 17:22:36 +0900</pubDate>
		</item>
		<item>
			<title>Prezi 라는 프리젠테이션 도구.</title>
			<link>http://hind.pe.kr/1120</link>
			<description>&lt;p&gt;어제 우연히 웹 검색을 하다가, &lt;a href=&quot;http://www.gsong.pe.kr&quot; target=&quot;_blank&quot;&gt;Gsong's Blog&lt;/a&gt;에 방문하게 되었는데, 아주 재미있는 포스팅을 보았다.&lt;/p&gt;  &lt;p&gt;URL은 &lt;a title=&quot;http://www.gsong.pe.kr/wp/?p=3959&quot; href=&quot;http://www.gsong.pe.kr/wp/?p=3959&quot;&gt;http://www.gsong.pe.kr/wp/?p=3959&lt;/a&gt; 인데, 제목이 SFE Prezi sildes 라는 포스팅.&lt;/p&gt;  &lt;p&gt;시나리오 기반 개발이라는 내용의 프리젠테이션인데, Play 버튼을 클릭하면(한번 누르면 계속 진행되는게 아니고, 계속 눌러줘야 한다.) 이야기가 시작되는데, 자신이 원하는 포인트에 줌인 하고, 이동할 때는 줌 아웃하다가, 다음 위치에서 줌인 되는 스타일.&lt;/p&gt;  &lt;p&gt;말로 설명을 하면 좀 이상하긴 한데, 뭔가 역동적인 슬라이드라고나 할까?&lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://cfile29.uf.tistory.com/image/185F27494E16765D1C1D90&quot;&gt;&lt;img style=&quot;background-image: none; border-right-width: 0px; margin: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile8.uf.tistory.com/image/111174484E16765E244E41&quot; width=&quot;244&quot; height=&quot;196&quot; /&gt;&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;기반은 Flash 기반으로 되어 있다. &lt;/p&gt;  &lt;p&gt;&lt;a title=&quot;http://prezi.com/&quot; href=&quot;http://prezi.com/&quot;&gt;http://prezi.com/&lt;/a&gt; dp 에 가면 나오는데, 여기서 자신의 슬라이드를 그릴 수 있다. &lt;/p&gt;  &lt;p&gt;나중에 내 생각을 이런 곳에다 그려보는것도 즐거울듯.&lt;/p&gt;  &lt;p&gt;무료로 사용하면, 이 Prezi 슬라이드 파일이 무조건 공개되고, 해당 파일은 반드시 Prezi 서버에 저장된다. 그것도 100Mb 한도로.&lt;/p&gt;  &lt;p&gt;나중에 Professional 서비스를 신청하면, 오프라인 버전도 쓸 수 있다는데.. 모르겠다.&lt;/p&gt;  &lt;p&gt;잘 쓸 수나 있는지 체크해보고. 생각해 봐야 할듯.&lt;/p&gt;  &lt;p&gt;예제 Prezi 가 아래와 같다.&lt;/p&gt;  &lt;div class=&quot;prezi-player&quot;&gt;&lt;style type=&quot;text/css&quot; media=&quot;screen&quot;&gt;
.prezi-player { width: 550px; } .prezi-player-links { text-align: center; }&lt;/style&gt;&lt;object id=&quot;prezi_jipjiqvj6dsc&quot; name=&quot;prezi_jipjiqvj6dsc&quot; classid=&quot;clsid:D27CDB6E-AE6D-11cf-96B8-444553540000&quot; width=&quot;550&quot; height=&quot;400&quot;&gt;&lt;param name=&quot;movie&quot; value=&quot;http://prezi.com/bin/preziloader.swf&quot; /&gt;&lt;param name=&quot;allowfullscreen&quot; value=&quot;true&quot; /&gt;&lt;param name=&quot;allowscriptaccess&quot; value=&quot;always&quot; /&gt;&lt;param name=&quot;bgcolor&quot; value=&quot;#ffffff&quot; /&gt;&lt;param name=&quot;flashvars&quot; value=&quot;prezi_id=jipjiqvj6dsc&amp;amp;lock_to_path=0&amp;amp;color=ffffff&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0&quot; /&gt;&lt;embed id=&quot;preziEmbed_jipjiqvj6dsc&quot; name=&quot;preziEmbed_jipjiqvj6dsc&quot; src=&quot;http://prezi.com/bin/preziloader.swf&quot; type=&quot;application/x-shockwave-flash&quot; allowfullscreen=&quot;true&quot; allowscriptaccess=&quot;always&quot; width=&quot;550&quot; height=&quot;400&quot; bgcolor=&quot;#ffffff&quot; flashvars=&quot;prezi_id=jipjiqvj6dsc&amp;amp;lock_to_path=0&amp;amp;color=ffffff&amp;amp;autoplay=no&amp;amp;autohide_ctrls=0&quot;&gt;&lt;/embed&gt;&lt;/object&gt;    &lt;div class=&quot;prezi-player-links&quot;&gt;     &lt;p&gt;&lt;a title=&quot;Why move beyond slides&quot; href=&quot;http://prezi.com/jipjiqvj6dsc/about-perspective/&quot;&gt;About perspective...&lt;/a&gt; on &lt;a href=&quot;http://prezi.com&quot;&gt;Prezi&lt;/a&gt;&lt;/p&gt;   &lt;/div&gt; &lt;/div&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1120&amp;regts=1310945625&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1120</guid>
			<comments>http://hind.pe.kr/1120#entry1120comment</comments>
			<pubDate>Fri, 08 Jul 2011 12:15:42 +0900</pubDate>
		</item>
		<item>
			<title>다음 클라우드!</title>
			<link>http://hind.pe.kr/1119</link>
			<description>&lt;p&gt;전에 미국 쪽에 계시는 이사님과의 원활한 자료 송수신을 위해 DropBox를 사용했다. 일단 DropBox 자체가 미국에 있는 서버다 보니, 파일 송수신을 할 때, 미국에서 그나마 접근하기 쉽다는 이유 때문일듯.&lt;/p&gt;
&lt;p&gt;DropBox의 기본 개념은 하나의 폴더를 동기화라는 개념으로 자동적으로 서버와 동기화를 한다. 그래서 다른 위치의 다른 컴퓨터에서 DropBox를 설치하면, 최소한 서버와 동기화를 갖춘 파일들은 모조리 동기화를 한다. 파일이 변하거나, 파일이 추가되거나, 삭제되면 그 즉시 Dropbox가 설치된 컴퓨터에서는 동일한 반응을 보인다. &lt;br /&gt;
더욱이 이 DropBox의 훌륭한 점은 다양한 플랫폼의 지원이다. PC는 물론이고, MAC도 지원을 하며, 안드로이드 폰에 아이폰까지 다방면의 미디어로 사용할 수 있다. 보통 이 DropBox의 최대 활용점은 스마트폰에 파일을 송수신 하는 것. PC나 MAC에서 생산된 자료들을 동기화 설정된 폴더에 옮겨만 놓으면, 원하는 스마트폰 장치에서 쉽게 접근하여 받을 수 있다. (물론 스마트폰과 같은 용량적/통신적 제약이 있는데서는 파일이 변했다고해서 반드시 변경사항이 적용된 파일을 그 즉시 받지는 않는다.). 역으로 스마트폰 장치에서 만들어진 파일 ( 특히 사진 )들을 DropBox에 얹으면, 그 즉시 DropBox가 설치/연결된 PC와 MAC에서도 볼 수 있다.&lt;/p&gt;
&lt;p&gt;하지만, 최대의 단점이 있으니, 바로 속도. 짐작컨데, 미국으로 연결되는 경우 그 속도는 가히 환상적으로 환장하게 만드는 경우가 있다. 얼마 크지도 않은 파일이 동기화를 하는데 최대 10분 이상 소요되는 경우도 발생한다. (물론 요즘은 즉시 즉시 반영되기도 한다.) 또 하나는 용량. 기본적으로 주는 용량이, 2G 이다. 사실 상당히 큰 용량이라고 볼 수도 있지만, 최소한 국내 클라우드 업체들이 제공하는 기본 용량에 비하면 턱없이 부족한 양이다. 광고에도 나오지 않는가? 50G.....&lt;/p&gt;
&lt;p&gt;그래서 뒤적 뒤적 찾던 중, UCloud 를 설치해봤는데, Dropbox의 개념이 아닌, Backup&amp;amp;Restore 개념에 가까웠다. 원하는 PC의 특정 폴더들(기본적으로 내 문서, 내 음악, 내 사진 등등)을 설정하면, 그 PC에 대해서 파일이 변하면 자동으로 동기화를 한다. 위급한 상황이 닥치거나 아무 생각 없이 Format 한 이후에 원상복귀할 때는 좋을 것 같다. &lt;br /&gt;
하지만, 위에서 언급한 Dropbox 처럼 쓰기가, 참 애매했다. 스마트폰에서 파일 접근하기도 수월치 않고, 파일을 서로 동기화 시켜서 정리할 수도 없었다.&lt;/p&gt;
&lt;p&gt;그러던 중 다음 클라우드를 보았고, 잠시 사용해봤다. 완전히 한국형 DropBox. 동일한 기능에 무려 50G. 서버는 당근 한국에 있으니 속도적인 우위도 차지할 듯.&lt;/p&gt;
&lt;p&gt;자세한 찌라시는 &lt;a href=&quot;http://daummail.tistory.com/319&quot;&gt;http://daummail.tistory.com/319&lt;/a&gt; 를 보면 된다.&lt;/p&gt;
&lt;p&gt;중요 개념 설명용 이미지는 이런 것!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile22.uf.tistory.com/image/200FD5494E0A87D419ACD2&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/1215A54B4E0A87D5380B95&quot; width=&quot;644&quot; height=&quot;282&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;여기에 스마튼 까지.&lt;/p&gt;
&lt;p&gt;처음에 내가 잘못 본 건지, 처음에는 Windows만 지원하는 것으로 알고 있었는데, 오늘 들어가보니, MAC와 Linux까지 지원. 훌륭했다.&lt;/p&gt;
&lt;p&gt;그래서 지금 낼름 설치하고, 기존에 Dropbox를 통해서 송수신했던 파일들을 정리하고 있다.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile25.uf.tistory.com/image/2066FB554E0A87D5344627&quot;&gt;&lt;img src=&quot;http://cfile3.uf.tistory.com/image/1705534A4E0A87D6101992&quot; width=&quot;257&quot; height=&quot;484&quot; /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;만족 만족!!&lt;/p&gt;
&lt;p&gt;50G의 여유는 쉽게 소진될 것 같지만, 지금 내가 가진 넥서스S자체가 16G 밖에 안되기에, 굳이 큰 용량이 필요로 하지않는다. 또 서버에 올리는 파일도 대부분은 10M 안쪽이고..훗훗.&lt;/p&gt;
&lt;p&gt;일단, 파일들을 완존 정리를 해봐야 겠다. &lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile5.uf.tistory.com/image/162FB34B4E0A87D6076634&quot;&gt;&lt;img src=&quot;http://cfile29.uf.tistory.com/image/1906D94A4E0A87D60E3A18&quot; width=&quot;644&quot; height=&quot;457&quot; /&gt;&lt;/a&gt;&lt;/p&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1119&amp;regts=1310945621&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<category>다음 클라우드</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1119</guid>
			<comments>http://hind.pe.kr/1119#entry1119comment</comments>
			<pubDate>Wed, 29 Jun 2011 11:03:03 +0900</pubDate>
		</item>
		<item>
			<title>모바일에서도 이제 글을 올릴 수 있네..</title>
			<link>http://hind.pe.kr/1118</link>
			<description>드디어 모바일에서도 글을 올릴 수 있군요.&lt;br /&gt;
전에는 보기만 가능했는데..&lt;br /&gt;
장족의 발전이라고 해야하나?&lt;br /&gt;
&lt;br /&gt;
이벤트라고해서 @tistory.com 메일을 만들면 200기가 용량을 추첨해서 준다고 하는데&lt;br /&gt;
뭐 그 용량이 필요할지는 모르겠지만..&lt;br /&gt;
&lt;br /&gt;
여튼 모바일에서 직접 글을 올릴 수 있다는데 ㅋ 이제 앱으로만 나오면 딱 일듯&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1118&amp;regts=1310945610&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>공개일기</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1118</guid>
			<comments>http://hind.pe.kr/1118#entry1118comment</comments>
			<pubDate>Mon, 27 Jun 2011 11:59:46 +0900</pubDate>
		</item>
		<item>
			<title>Log Viewer - log tail view</title>
			<link>http://hind.pe.kr/1117</link>
			<description>&lt;P&gt;로그 파일을 읽는 경우가 종종 있는데, 로그 중에 계속 쌓이는 로그를 연속으로 볼 때가 있다. &lt;br /&gt;
이 경우 tail viewer 혹은 log tail viewer 들이 있는데, 그 툴을 활용하면, 계속 쌓이는 로그를 실시간으로 볼 수 있다. &lt;br /&gt;
과거 떠돌이 프로젝트 수행 중에 받았던 파일이 있다. WinTail 이라는 프로그램 인데, 그 프로그램이 그런 역할을 수행해줬다. 속도도 빠르고 좋았던 기억.&lt;/P&gt;
&lt;P&gt;문제는 한글이 깨져서 나온다. 한글로 적힌 로그가 나오면 그대로 깨져서 나온다는.. &lt;br /&gt;
아마도 C++로 만든거 같은데, 과거 인코딩과 거리가 멀던 그 시절에 만들어진 프로그램 같다. &lt;br /&gt;
이번에 작성 중인 프로그램도 로그 파일을 쌓고 있는데, 문제는 로그 내용을 한글로 적었다는 것. &lt;br /&gt;
&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile24.uf.tistory.com/image/11678F534E07CDEB2C3EEF&quot;&gt;&lt;img src=&quot;http://cfile5.uf.tistory.com/image/2001C94C4E07CDEB09AC77&quot; width=&quot;656&quot; height=&quot;405&quot; /&gt;&lt;/A&gt; &lt;br /&gt;
결국 무슨 말인지 알 길이 없어서, 직접 만들어야 겠다는 생각이 들었다. &lt;/P&gt;
&lt;P&gt;.NET Framework 2.0을 기반으로 하며, C#으로 짰다. 모든 Visual Studio 2010 에서 작업했다. &lt;br /&gt;
&lt;/P&gt;
&lt;P&gt;처음에는 ListBox를 사용하여 로그 파일을 열었다.&amp;nbsp; &lt;br /&gt;
최소한 내가 만드는 로그 보는데는 문제가 없었다. &lt;br /&gt;
그래서 자신만만(?)하게 지인인 호박양에게 전달했는데, &lt;br /&gt;
왠걸...IIS 로그를 넣어 봤는데, All Stop 이라고 Report 해줬다.&lt;/P&gt;
&lt;P&gt;즉, NET 기본 컨트롤로는 로그 Viewer로 쓰기에는 너무나 부적합했다는 것이다. 결국 이렇게 저렇게 검색을 하다가 우연히 발견한 오픈소스 기반의 Text Viewer인 &lt;A href=&quot;http://www.scintilla.org/&quot; target=_blank&gt;Scintilla&lt;/A&gt; 를 찾았다. 이 Viewer는 C++로 되어 있으며, Win32와 GTK+ 기반으로 되어 있다. 소스 코드 에디터 처럼 특정 문자에 색을 입히거나, 코드를 묶어서 접고 펼치기 등, 다양한 소스코드 관련 Editor Viewer로 활용되는 유명한 솔루션. (현재 2.27 버전이며, 2011년 6월 20일이 최종 수정)&lt;/P&gt;
&lt;P&gt;그것을 .NET으로 포팅한 프로젝트가 있었으니, 그것이 &lt;A href=&quot;http://scintillanet.codeplex.com/&quot; target=_blank&gt;ScintillaNET&lt;/A&gt; 이였다. &lt;br /&gt;
일단 ScinitillaNET의 코드를 특별히 수정할 필요는 없었고, Binary 파일( &lt;A title=http://scintillanet.codeplex.com/releases/view/34393#DownloadId=88753 href=&quot;http://scintillanet.codeplex.com/releases/view/34393#DownloadId=88753&quot;&gt;http://scintillanet.codeplex.com/releases/view/34393#DownloadId=88753&lt;/A&gt; )을 직접 받았다. 이 구성요소를 가지고 프로그래밍을 하려면, 최소한 SciLexer.dll 파일이 System32 에 위치해야 한다. 그리고 ScintillaNet.dll 파일을 프로젝트에 Reference를 걸어주면 된다. 물론 배포 할 때는 저 두 개의 파일이 실행되는 파일과 같은 경로에만 있으면 된다. &lt;/P&gt;
&lt;P&gt;그래서 한번 돌려봤더니..&lt;/P&gt;
&lt;P&gt;&lt;A href=&quot;http://www.hind.pe.kr/script/powerEditor/pages/http://cfile23.uf.tistory.com/image/1960F1534E07CDEB2EA45B&quot;&gt;&lt;img src=&quot;http://cfile30.uf.tistory.com/image/113BF64F4E07CDEC064126&quot; width=&quot;644&quot; height=&quot;386&quot; /&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;특정 경로의 파일을 열고, Start 하면 된다. 중간에 화면 Clear가 필요하면 Clear 로그를, Log 파일 내용을 완전히 지우고 싶으면 Trunc 로그를 하면 된다. &lt;/P&gt;
&lt;P&gt;사용법은 그렇게 어려운편은 아니니 Pass.&lt;/P&gt;
&lt;P&gt;소스 파일과 실행파일 묶음은 첨부로 올린다. &lt;br /&gt;
아, 이거 돌릴려면 최소한 .NET Framework 2.0 이상이 설치되어 있어야 한다.&lt;br /&gt;
&lt;br /&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://neohind.tistory.com/attachment/cfile26.uf@176D054D4E07CF900ED344.zip&quot;&gt;&lt;img src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; LogViewer.zip&lt;/a&gt;&lt;/div&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://neohind.tistory.com/attachment/cfile25.uf@176C5B4D4E07CF920F45F1.zip&quot;&gt;&lt;img src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/blog/image/extension/zip.gif&quot; alt=&quot;&quot; style=&quot;vertical-align: middle;&quot; /&gt; LogViewer_Src.zip&lt;/a&gt;&lt;/div&gt;&lt;/P&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1117&amp;regts=1309134744&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>기술자료</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1117</guid>
			<comments>http://hind.pe.kr/1117#entry1117comment</comments>
			<pubDate>Mon, 27 Jun 2011 09:25:16 +0900</pubDate>
		</item>
		<item>
			<title>TFS 2010 자동 빌드 오류 - 이미 연결된 Workspace 문제.</title>
			<link>http://hind.pe.kr/1116</link>
			<description>&lt;p&gt;자동 빌드를 적용 중에 자주 설정을 바꾸게 되는데, 이상하게 다음과 같은 문제가 자주 발생된다.&lt;/p&gt;  &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;839&quot;&gt;&lt;tbody&gt;     &lt;tr&gt;       &lt;td valign=&quot;top&quot; width=&quot;837&quot;&gt;         &lt;p&gt;&lt;strong&gt;&lt;font size=&quot;4&quot;&gt;Summary&lt;/font&gt;&lt;/strong&gt;            &lt;br /&gt;&lt;strong&gt;Other Errors and Warnings&lt;/strong&gt;            &lt;br /&gt; 1 error(s), 0 warning(s)            &lt;br /&gt;&amp;#160;&amp;#160;&amp;#160;&amp;#160;&amp;#160; -&amp;gt; The path D:\BuildPlace\BuildProcessTemplates is already mapped in workspace 18_23_builder-PC.&lt;/p&gt;       &lt;/td&gt;     &lt;/tr&gt;   &lt;/tbody&gt;&lt;/table&gt;  &lt;p&gt;특정 소스 위치가 이미 연결된 상태라며 문제가 발생하는 것 같다. 그래서 더 이상 빌드가 안된다. 이 문제는 아마도 빌드 전에 모든 Source를 Get Lasted Version을 하게 되는데, 그 연결이 남아 있는 상태로 다시 받으려니 문제가 발생되는 문제이다. &lt;/p&gt;  &lt;p&gt;안그래도 이 내용을 구글을 통해서 찾아 보니까, 아래와 같은 URL을 찾을 수 있었다. &lt;/p&gt;  &lt;p&gt;&lt;a href=&quot;http://stackoverflow.com/questions/226288/team-build-error-the-path-is-already-mapped-to-workspace&quot;&gt;http://stackoverflow.com/questions/226288/team-build-error-the-path-is-already-mapped-to-workspace&lt;/a&gt;&lt;/p&gt;  &lt;p&gt;TF.EXE 라는 Team Explorer 에서 제공하는 유틸리티를 이용해서 처리할 수 있다는 것이다. &lt;/p&gt;  &lt;p&gt;처리 방법은 아래와 같다.&lt;/p&gt;  &lt;ol&gt;   &lt;li&gt;먼저 Visual Studio 에서 제공하는 CMD창을 띄운다.     &lt;br /&gt;&lt;/li&gt;    &lt;li&gt;다음은 다음 명령어를 넣는다. 그러면 현재 MAP 된 정보를 모두 보여준다.      &lt;br /&gt;      &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;400&quot;&gt;&lt;tbody&gt;         &lt;tr&gt;           &lt;td valign=&quot;top&quot; width=&quot;400&quot;&gt;             &lt;pre&gt;&lt;code&gt;c:\&amp;gt;tf workspaces /owner:*&lt;/code&gt;&lt;/pre&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;

    &lt;br /&gt;&lt;a href=&quot;http://cfile23.uf.tistory.com/image/193A0E4C4DF94A522E7698&quot;&gt;&lt;img style=&quot;background-image: none; border-bottom: 0px; border-left: 0px; padding-left: 0px; padding-right: 0px; display: inline; border-top: 0px; border-right: 0px; padding-top: 0px&quot; title=&quot;image&quot; border=&quot;0&quot; alt=&quot;image&quot; src=&quot;http://cfile24.uf.tistory.com/image/173F6A4B4DF94A520546DF&quot; width=&quot;511&quot; height=&quot;150&quot; /&gt;&lt;/a&gt;

    &lt;br /&gt;맨 앞부분이 Workspace 이름이고, 그 다음이 Workspace를 생성한 계정. 그리고 그 다음이 Workspace가 생성된 PC 이름이다.&lt;/li&gt;

  &lt;li&gt; 위의 정보를 가지고 하나씩 삭제 한다. 삭제하는 방법은 CMD 창에 아래와 같이 입력한다.
    &lt;br /&gt;

    &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;400&quot;&gt;&lt;tbody&gt;
        &lt;tr&gt;
          &lt;td valign=&quot;top&quot; width=&quot;400&quot;&gt;
            &lt;pre&gt;&lt;code&gt;C:\&amp;gt;tf workspace /delete workspace_name&lt;/code&gt;&lt;/pre&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
만일 5_15_builder_pc 라는 Workspace를 삭제하려면 아래와 같이 입력하면 된다.

    &lt;br /&gt;

    &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;400&quot;&gt;&lt;tbody&gt;
        &lt;tr&gt;
          &lt;td valign=&quot;top&quot; width=&quot;400&quot;&gt;
            &lt;pre&gt;&lt;code&gt;C:\&amp;gt;tf workspace /delete 5_15_builder_pc&lt;/code&gt;&lt;/pre&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;
혹시 현재 로그인 한 계정이 다르다면 아래와 같이 추가적으로 입력한다. 

    &lt;br /&gt;

    &lt;table border=&quot;0&quot; cellspacing=&quot;0&quot; cellpadding=&quot;2&quot; width=&quot;400&quot;&gt;&lt;tbody&gt;
        &lt;tr&gt;
          &lt;td valign=&quot;top&quot; width=&quot;400&quot;&gt;
            &lt;pre&gt;&lt;code&gt;C:\&amp;gt;tf workspace /delete 5_15_builder_pc /login:tfsadmin&lt;/code&gt;&lt;/pre&gt;
          &lt;/td&gt;
        &lt;/tr&gt;
      &lt;/tbody&gt;&lt;/table&gt;

    &lt;br /&gt;암호 입력은 별도로 띄우게 되는 NTLM 창이 뜨는데, 그 곳에다 넣으면 된다.&lt;/li&gt;
&lt;/ol&gt;&lt;div style='text-align: center; margin: 10px auto; height: 91px; overflow: hidden; clear: both;'&gt;&lt;iframe title='mixUP 위젯' src='http://mixsh.com/widget/new_mixup/loader_plugin.html?domain=hind.pe.kr&amp;media_type=10&amp;guid=hind.pe.kr%2F1116&amp;regts=1309134435&amp;showhitcnt=1&amp;platform=10' frameBorder='0' scrolling='no' allowTransparency='true' width='402' height='130'&gt;&lt;/iframe&gt;&lt;/div&gt;</description>
			<category>Deployment</category>
			<author>하인도</author>
			<guid>http://hind.pe.kr/1116</guid>
			<comments>http://hind.pe.kr/1116#entry1116comment</comments>
			<pubDate>Thu, 16 Jun 2011 09:12:02 +0900</pubDate>
		</item>
	</channel>
</rss>
