<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>My Name is sooop</title>
	<atom:link href="http://sooop.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://sooop.wordpress.com</link>
	<description>Just another WordPress.com weblog</description>
	<lastBuildDate>Tue, 17 Mar 2009 18:08:13 +0000</lastBuildDate>
	<language>ko</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='sooop.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://s2.wp.com/i/buttonw-com.png</url>
		<title>My Name is sooop</title>
		<link>http://sooop.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://sooop.wordpress.com/osd.xml" title="My Name is sooop" />
	<atom:link rel='hub' href='http://sooop.wordpress.com/?pushpress=hub'/>
		<item>
		<title>0000012 :: netsh를 통해 네트워크 설정 변경하기</title>
		<link>http://sooop.wordpress.com/2009/03/18/0000012-netsh%eb%a5%bc-%ed%86%b5%ed%95%b4-%eb%84%a4%ed%8a%b8%ec%9b%8c%ed%81%ac-%ec%84%a4%ec%a0%95-%eb%b3%80%ea%b2%bd%ed%95%98%ea%b8%b0/</link>
		<comments>http://sooop.wordpress.com/2009/03/18/0000012-netsh%eb%a5%bc-%ed%86%b5%ed%95%b4-%eb%84%a4%ed%8a%b8%ec%9b%8c%ed%81%ac-%ec%84%a4%ec%a0%95-%eb%b3%80%ea%b2%bd%ed%95%98%ea%b8%b0/#comments</comments>
		<pubDate>Tue, 17 Mar 2009 18:08:13 +0000</pubDate>
		<dc:creator>sooop25</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[네트워크 구성 명령줄]]></category>
		<category><![CDATA[ip변경]]></category>
		<category><![CDATA[netsh]]></category>

		<guid isPermaLink="false">http://sooop.wordpress.com/?p=58</guid>
		<description><![CDATA[ netsh.exe는 네트워크 설정을 변경할 수 있도록 해 주는 명령줄 도구이다. 노트북을 가지고 다니면서 유선랜을 반복적으로 바꿔서 설정해야 하는 불편함이 있는 사람에게 최적의 도구이다. 명령줄 프롬프트 상에서 netsh 라고 입력하면 쉘 형태로 실행되면서 하위 문맥 구조를 추가로 입력할 수 있게 끔 설정되어 있다. 다른 부분은 아직 어떻게 사용하는지 잘 모르겠고, 여기서 필요한 것은 IP를 변경하도록 하는 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sooop.wordpress.com&amp;blog=1851722&amp;post=58&amp;subd=sooop&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p> netsh.exe는 네트워크 설정을 변경할 수 있도록 해 주는 명령줄 도구이다. 노트북을 가지고 다니면서 유선랜을 반복적으로 바꿔서 설정해야 하는 불편함이 있는 사람에게 최적의 도구이다. 명령줄 프롬프트 상에서 netsh 라고 입력하면 쉘 형태로 실행되면서 하위 문맥 구조를 추가로 입력할 수 있게 끔 설정되어 있다. 다른 부분은 아직 어떻게 사용하는지 잘 모르겠고, 여기서 필요한 것은 IP를 변경하도록 하는 것이므로 차근 차근 따라해 보도록 하겠다.</p>
<p>먼저 명령 프롬프트 상에서 netsh를 입력하면 다음과 같이 프롬프트가 생성된다.</p>
<p style="padding-left:30px;"><span style="color:#339966;">netsh&gt;</span></p>
<p>먼저 우리가 변경해야할 유선랜 인터페이스를 찾아보도록 하겠다. 보통은 &#8216;로컬 영역 연결&#8217;이라고 이름 붙여져 있는 것 같다. 먼저 interface 관련 설정을 확인할 것이므로 interface를 입력한다</p>
<p style="padding-left:30px;"><span style="color:#339966;">netsh&gt; <span style="color:#0000ff;">interface</span><br />
netsh interface&gt;</span></p>
<p>그러면 위와 같이 쉘 프롬프트가 변경된다. interface 레벨까지 진입했다는 의미이다. 이제 interface 목록을 확인해보자. 이 레벨에서 사용할 수 있는 명령어는 show 이다.</p>
<p>netsh interface &gt; show interface</p>
<p>그러면 아래와 같이 인터페이스의 종류(네트워크 연결의 종류)가 나열된다. 우리가 쓰고자하는 &#8216;로컬 영역 연결&#8217;을 확인할 수 있다.</p>
<p style="padding-left:30px;"><span style="color:#339966;">관리 상태      상태           종류             인터페이스 이름</span></p>
<p style="padding-left:30px;"><span style="color:#339966;">&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</span></p>
<p style="padding-left:30px;"><span style="color:#339966;">사용                            전용               로컬 영역 연결<br />
사용                            전용               {5B7A9DA3-673E-41D0-AE02-490BA44EF116}<br />
사용                            전용               무선 네트워크 연결<br />
사용                            내부               내부<br />
사용                            루프백              루프백</span></p>
<p>이제 ip 주소를 변경해본다.ip 주소 관련 레벨로 내려가기 위해 ip를 입력한다.</p>
<p style="padding-left:30px;"><span style="color:#339966;">n</span><span style="color:#339966;">etsh interface&gt;<span style="color:#0000ff;"> ip</span><br />
netsh interface ip&gt; </span></p>
<p>변경하는 명령어는 set 을 사용한다. set &lt;바꿀것&gt; &lt;연결이름&gt; &lt;속성1&gt; &#8230;. 순으로 정리하는데, 여기서는 ip주소를 바꿀 것이므로 다음과 같이 입력한다.</p>
<p style="padding-left:30px;"><span style="color:#339966;">netsh interface ip &gt; </span><span style="color:#0000ff;">set address name= &#8220;로컬 영역 연결&#8221; static 111.222.111.101 255.255.255.0 111.222.111.1 1</span></p>
<p>뒤에 이어진 숫자는 순서대로 ip,서브넷 마스크,게이트 웨이 주소이며, 마지막은 매트릭 번호이다. 보통은 &#8216;자동 매트릭&#8217;으로 설정하던데, 여기서는 매트릭 값을 꼭 주어야 에러없이 처리가 된다.</p>
<p>위와 같이 입력하면 약간의 시간이 경과한 후 별다른 문제가 없을 시 &#8216;확인됨&#8217;이라는 메세지를 출력한다.</p>
<p>ip만 바꾸었다고 인터넷 접속이 제대로 될리가 만무하므로, 다음과 같이 dns도 변경해준다.</p>
<p style="padding-left:30px;"><span style="color:#0000ff;">netsh interface ip&gt; set dns name= &#8220;로컬 영역 연결&#8221; static 111.222.10.51 primary</span></p>
<p>1차 dns 주소를 설정하고 반드시 primary라고 입력해 둔다. 2차 주소를 입력하고 싶다면 위의 명령을 한 번 더 사용하고, secondary를 사용하면 된다.</p>
<p>이러한 작업은 명령줄 창에서 한 줄로 입력이 가능한데, 프롬프트의 내용을 한 줄에 나열하여 쓰면 된다. 결국, 위에서 말한 절차는</p>
<p style="padding-left:30px;"><span style="color:#0000ff;">netsh interface ip set address name= &#8220;로컬 영역 연결&#8221; static 111.222.111.101 255.255.255.0 111.222.111.1 1</span></p>
<p>와 같이 한 줄 그리고 이어서</p>
<p style="padding-left:30px;"><span style="color:#0000ff;">netsh interface ip set dns= &#8220;로컬 영역 연결&#8221; static 111.222.10.51 primary</span></p>
<p>와 같이 입력하고 각각에 대해 &#8216;확인됨&#8217; 이 출력되면 정상적으로 네트워크 설정이 변경되었음을 확인할 수 있다.</p>
<p>이러한 2번의 과정은 결국 bat 파일을 작성하는 것으로 해결할 수 있는데, 다음과 같이 메모장에 작성하거나, 명령프롬프트 상에서는 &#8216;copy con 파일이름&#8217; 이라고 입력하고 다음의 내용을 모두 기술한다.</p>
<p style="padding-left:30px;"><span style="color:#3366ff;">@echo off<br />
echo 로컬 영역 연결 ip 변경<br />
netsh interface ip set address name= &#8220;로컬 영역 연결&#8221; static 111.222.111.101 255.255.255.0 111.222.111.1 1<br />
echo DNS 변경<br />
netsh interface ip set dns name= &#8220;로컬 영역 연결&#8221; static 111.222.51.10 primary</span></p>
<p>IP 자동 구성(DHCP)의 경우에는 조금 짧은데, 다음의 내용으로 bat 파일을 만든다 </p>
<p style="padding-left:30px;"><span style="color:#3366ff;">@echo off<br />
echo 로컬 영역 연결 ip 자동 구성<br />
netsh interface ip set address name= &#8220;로컬 영역 연결&#8221; source= dhcp<br />
echo DNS 자동 구성<br />
netsh interface ip set dns name= &#8220;로컬 영역 연결&#8221; source= dhcp</span></p>
<p>이런 형태로 배치파일을 만들어두면 더블클릭 한 번으로도 IP 구성을 변경할 수 있다.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sooop.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sooop.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sooop.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sooop.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sooop.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sooop.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sooop.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sooop.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sooop.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sooop.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sooop.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sooop.wordpress.com/58/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sooop.wordpress.com/58/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sooop.wordpress.com/58/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sooop.wordpress.com&amp;blog=1851722&amp;post=58&amp;subd=sooop&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sooop.wordpress.com/2009/03/18/0000012-netsh%eb%a5%bc-%ed%86%b5%ed%95%b4-%eb%84%a4%ed%8a%b8%ec%9b%8c%ed%81%ac-%ec%84%a4%ec%a0%95-%eb%b3%80%ea%b2%bd%ed%95%98%ea%b8%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e91eae1e2d8b8c9ad4edd0a2e090b19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sooop25</media:title>
		</media:content>
	</item>
		<item>
		<title>0000011 :: Python &#8211; 주민번호검사하기</title>
		<link>http://sooop.wordpress.com/2009/03/14/0000011-python-%ec%a3%bc%eb%af%bc%eb%b2%88%ed%98%b8%ea%b2%80%ec%82%ac%ed%95%98%ea%b8%b0/</link>
		<comments>http://sooop.wordpress.com/2009/03/14/0000011-python-%ec%a3%bc%eb%af%bc%eb%b2%88%ed%98%b8%ea%b2%80%ec%82%ac%ed%95%98%ea%b8%b0/#comments</comments>
		<pubDate>Sat, 14 Mar 2009 08:13:19 +0000</pubDate>
		<dc:creator>sooop25</dc:creator>
				<category><![CDATA[1]]></category>
		<category><![CDATA[주민번호]]></category>
		<category><![CDATA[python]]></category>

		<guid isPermaLink="false">http://sooop.wordpress.com/?p=56</guid>
		<description><![CDATA[주민번호는 각자리수에 2,3,4,5,6,7,8,9,2,3,4,5 를 곱하여 각각의 합을 11로 나눈 나머지를 11에서 뺀 숫자가 마지막 숫자와 일치하는 지를 검사한다. 이를 파이썬 코드로 표현하면 아래와 같다.    #-*-coding:utf-8 def  jumin_valid():     a = raw_input(u&#8216;주민번호를 입력하세요 :&#8217;)     nla = []     s = 0     for x in list(a):         if x in &#8217;0123456789&#8242;:    [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sooop.wordpress.com&amp;blog=1851722&amp;post=56&amp;subd=sooop&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>주민번호는 각자리수에 2,3,4,5,6,7,8,9,2,3,4,5 를 곱하여 각각의 합을 11로 나눈 나머지를 11에서 뺀 숫자가 마지막 숫자와 일치하는 지를 검사한다. 이를 파이썬 코드로 표현하면 아래와 같다. </p>
<p> </p>
<p style="padding-left:60px;"><span style="color:#a20701;">#-*-coding:utf-8</span></p>
<p style="padding-left:60px;"><span style="color:#3366ff;">def</span>  jumin_valid():</p>
<p style="padding-left:60px;">    a = <span style="color:#3366ff;">raw_input</span>(<span style="color:#339966;">u</span><span style="color:#339966;">&#8216;주민번호를 입력하세요 :&#8217;</span>)</p>
<p style="padding-left:60px;">    nla = []</p>
<p style="padding-left:60px;">    s = 0</p>
<p style="padding-left:60px;">    <span style="color:#3366ff;">for</span> x <span style="color:#3366ff;">in list</span>(a):</p>
<p style="padding-left:60px;">        <span style="color:#3366ff;">if</span> x <span style="color:#3366ff;">in</span><span style="color:#00ff00;"> <span style="color:#339966;">&#8217;0123456789&#8242;</span></span>:</p>
<p style="padding-left:60px;">            nla.<span style="color:#3366ff;">append</span>(x)</p>
<p style="padding-left:60px;">        <span style="color:#3366ff;">if len</span>(nla)==13:</p>
<p style="padding-left:60px;">            <span style="color:#3366ff;">break</span></p>
<p style="padding-left:60px;">    p = (2,3,4,5,6,7,8,9,2,3,4,5)</p>
<p style="padding-left:60px;">   <span style="color:#3366ff;"> for</span> x <span style="color:#3366ff;">in range</span>(12):</p>
<p style="padding-left:60px;">        s = s + <span style="color:#3366ff;">int</span>(nla[x])*<span style="color:#3366ff;">int</span>(p[x])</p>
<p style="padding-left:60px;">    m = 11 &#8211; (s % 11)</p>
<p style="padding-left:60px;">    <span style="color:#3366ff;">if </span>m&gt;9 :</p>
<p style="padding-left:60px;">        m = m%10</p>
<p style="padding-left:60px;">    <span style="color:#3366ff;">if </span>m == <span style="color:#3366ff;">int</span>(nla[-1]):</p>
<p style="padding-left:60px;">        <span style="color:#3366ff;">print</span> <span style="color:#339966;">u&#8217;유효한 번호&#8217;</span></p>
<p style="padding-left:60px;">    <span style="color:#3366ff;">else</span>:</p>
<p style="padding-left:60px;">        <span style="color:#3366ff;">print </span><span style="color:#339966;">u&#8217;잘못된 번호&#8217;</span></p>
<p style="padding-left:60px;"><span style="color:#3366ff;">if</span><span style="color:#3366ff;"> </span>__name__ == <span style="color:#339966;">&#8220;__main__&#8221;</span>:</p>
<p style="padding-left:60px;">    jumin_valid()</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sooop.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sooop.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sooop.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sooop.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sooop.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sooop.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sooop.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sooop.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sooop.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sooop.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sooop.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sooop.wordpress.com/56/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sooop.wordpress.com/56/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sooop.wordpress.com/56/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sooop.wordpress.com&amp;blog=1851722&amp;post=56&amp;subd=sooop&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sooop.wordpress.com/2009/03/14/0000011-python-%ec%a3%bc%eb%af%bc%eb%b2%88%ed%98%b8%ea%b2%80%ec%82%ac%ed%95%98%ea%b8%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e91eae1e2d8b8c9ad4edd0a2e090b19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sooop25</media:title>
		</media:content>
	</item>
		<item>
		<title>0000010 :: 서비스 정리 노가다 스크립트</title>
		<link>http://sooop.wordpress.com/2009/02/10/0000010-%ec%84%9c%eb%b9%84%ec%8a%a4-%ec%a0%95%eb%a6%ac-%eb%85%b8%ea%b0%80%eb%8b%a4-%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8a%b8/</link>
		<comments>http://sooop.wordpress.com/2009/02/10/0000010-%ec%84%9c%eb%b9%84%ec%8a%a4-%ec%a0%95%eb%a6%ac-%eb%85%b8%ea%b0%80%eb%8b%a4-%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8a%b8/#comments</comments>
		<pubDate>Mon, 09 Feb 2009 17:33:06 +0000</pubDate>
		<dc:creator>sooop25</dc:creator>
				<category><![CDATA[TIP]]></category>

		<guid isPermaLink="false">http://sooop.wordpress.com/?p=49</guid>
		<description><![CDATA[다운로드 : http://cid-9a2a1991fc5129b7.skydrive.live.com/self.aspx/%ec%9c%a0%ed%8b%b8/config%7C_services.7z 불필요한 윈도 서비스를 일일이 찾아서 시작 유형을 설정하는 것이 여간 번거로운 일이 아니라 만들게 되었다. 압축을 풀고 make_config.exe 파일을 실행하면 현재 시스템에 설치된 모든 서비스를 찾아서 아래와 같은 형태로 정리해서 config.ini 파일을 만들어 준다. 서비스 이름 , 서비스 표시 이름 ,       이 줄에 마지막에 0: 자동  , 1:수동 , 2:사용안함 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sooop.wordpress.com&amp;blog=1851722&amp;post=49&amp;subd=sooop&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>다운로드 : <a href="http://cid-9a2a1991fc5129b7.skydrive.live.com/self.aspx/%ec%9c%a0%ed%8b%b8/config%7C_services.7z" target="_blank">http://cid-9a2a1991fc5129b7.skydrive.live.com/self.aspx/%ec%9c%a0%ed%8b%b8/config%7C_services.7z</a></p>
<p>불필요한 윈도 서비스를 일일이 찾아서 시작 유형을 설정하는 것이 여간 번거로운 일이 아니라 만들게 되었다. 압축을 풀고 make_config.exe 파일을 실행하면 현재 시스템에 설치된 모든 서비스를 찾아서 아래와 같은 형태로 정리해서 config.ini 파일을 만들어 준다.</p>
<p>서비스 이름 , 서비스 표시 이름 ,      </p>
<p>이 줄에 마지막에 0: 자동  , 1:수동 , 2:사용안함 중에서 선택하여 숫자를 붙여주고 잘 모르는 서비스는 해당 라인을 삭제하거나 맨 앞에 #을 붙여 주석처리 한다.</p>
<p>준비가 완료되면 service_setting.exe 파일을 실행하면 config.ini 파일에 정의된 내용대로 윈도우즈 서비스가 한방에 정리된다.</p>
<p>(어차피 마지막에 숫자를 붙이지 않은 행은 에러처리되어 무시된다)</p>
<ol>
<li>윈도 XP 환경에서만 테스트 되었다.</li>
<li>본 프로그램을 사용하면 서비스의 설정이 변경되어  윈도우가 정상적으로 작동하지 못하거나 원하는 기능을 사용할 수 없게 될 수 있지만, 이는 전적으로 사용자의 책임이다.</li>
<li>불필요한 서비스를 구분하기 위해서는 도아님이 작성하신 <a href="http://qaos.com/sections.php?op=viewarticle&amp;artid=183" target="_blank">&#8216;윈도우즈 서비스 완벽 가이드&#8217;</a>를 참고하면 된다. 물론 해당 팁을 적용한 후 발생하는 결과는 전적으로 사용자 본인이 지는 것이다.</li>
</ol>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sooop.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sooop.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sooop.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sooop.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sooop.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sooop.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sooop.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sooop.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sooop.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sooop.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sooop.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sooop.wordpress.com/49/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sooop.wordpress.com/49/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sooop.wordpress.com/49/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sooop.wordpress.com&amp;blog=1851722&amp;post=49&amp;subd=sooop&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sooop.wordpress.com/2009/02/10/0000010-%ec%84%9c%eb%b9%84%ec%8a%a4-%ec%a0%95%eb%a6%ac-%eb%85%b8%ea%b0%80%eb%8b%a4-%ec%8a%a4%ed%81%ac%eb%a6%bd%ed%8a%b8/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e91eae1e2d8b8c9ad4edd0a2e090b19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sooop25</media:title>
		</media:content>
	</item>
		<item>
		<title>0000009  :: Django 시작하기 &#8211; 2</title>
		<link>http://sooop.wordpress.com/2009/01/28/0000009-django-%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-2/</link>
		<comments>http://sooop.wordpress.com/2009/01/28/0000009-django-%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-2/#comments</comments>
		<pubDate>Tue, 27 Jan 2009 16:06:58 +0000</pubDate>
		<dc:creator>sooop25</dc:creator>
				<category><![CDATA[1]]></category>

		<guid isPermaLink="false">http://sooop.wordpress.com/?p=46</guid>
		<description><![CDATA[지난 시간까지 우리는 Django를 설치하고 프로젝트를 어떻게 시작하며, 어플리케이션을 어떻게 시작하는지 살펴 보았다. 물론자신의 부족함으로 인해 그리 많지도 않은 내용이 장황하게 쓰여져 알아보기 힘든 글이 되기는 하였지만, 역시나 본 포스팅은 스스로가 공부하는 것을 기록하는 내용이므로 그냥 패스하도록 하겠다. Model이란 무엇인가 어플리케이션을 구성하는 중요한 2개의 파일은 models.py와 views.py이다. 이는 어플리케이션의 front-end와 back-end라고 칭할 수가 있겠다. 즉 Django는 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sooop.wordpress.com&amp;blog=1851722&amp;post=46&amp;subd=sooop&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>지난 시간까지 우리는 Django를 설치하고 프로젝트를 어떻게 시작하며, 어플리케이션을 어떻게 시작하는지 살펴 보았다. 물론자신의 부족함으로 인해 그리 많지도 않은 내용이 장황하게 쓰여져 알아보기 힘든 글이 되기는 하였지만, 역시나 본 포스팅은 스스로가 공부하는 것을 기록하는 내용이므로 그냥 패스하도록 하겠다.</p>
<h3>Model이란 무엇인가</h3>
<p>어플리케이션을 구성하는 중요한 2개의 파일은 models.py와 views.py이다. 이는 어플리케이션의 front-end와 back-end라고 칭할 수가 있겠다. 즉 Django는 DB에 저장될 데이터를 마치 하나의 객체처럼 취급할 수 있도록 mapping해 주는 데 이것을 수행하는 것이 models.py이다. 여기서는 class를 정의하고 class 속에 함께 저장될 데이터와 그 데이터의 형식을 지정한다. 또한 각각의 단위 데이터 집합인 model이 포함해야할 함수도 함께 정의할 수 있다. 그리고 &#8216;함수 객체&#8217;를 제외한 데이터들은 추후에 manage.py의 기능을 통해 DB 테이블과 column으로 변환되도록 DB가 자동으로 구성된다.</p>
<p>models에 상응하는 개념은 views이다. 뷰는 모델에서 정의한 형태대로 차곡차곡 쌓여진 데이터를 불러들여서 실제로 사용자 앞에서는 어떻게 그려줄 것인가를 지정하는 내용을 포함한다. 데이터 구조와 프론트를 분리하여 독립적으로 수정, 유지할 수 있다는 장점이 있어 보인다. 어쨌든 개념은 대략 이 정도만 알아 두고 계속 진행하도록 해 보자.</p>
<h3>Model 생성하기</h3>
<p>polls 디렉터리 내에 models.py 파일을 편집기로 편집한다. 처음에는 아래와 같이 내용이 생성되어 있다.</p>
<p><span style="color:#ff0000;">from django.db import models</span></p>
<p>Django에서 지원하는 models 모듈을 반입했다. 그리고 투표를 위해 필요한 데이터 모델은 총 2개로 나눌 수 있으며 그것은 다음과 같다.</p>
<ul>
<li>투표 : 개별적인 투표 주제(질문)가 된다.</li>
<li>선택지 : 투표를 할 때 선택하는 선택지가 된다. 투표시 마다 다른 선택지가 생성되므로 투표와는 별도의 모델로 생성한다.</li>
</ul>
<p>그리고 각각의 모델은 그 아래에 다음과 같은 정보가 필요할 것이다.</p>
<ul>
<li>투표
<ul>
<li>질문 : 투표가 단일 질문으로만 구성된다고 가정하면, 하나의 투표는 결국 하나의 질문으로 대체할 수 있다. (텍스트)</li>
<li>생성일 : 해당 투표 건을 생성한 날짜가 되겠다.(날짜)</li>
</ul>
</li>
<li>선택지
<ul>
<li>외부키 : 선택지 하나는 질문에 대해 고를 수 있는 예시 중의 하나가 되고, 따라서 이 선택지가 어떤 질문에 대한 선택지 인지를 구분하는 값이 필요하다. 즉 선택지와 투표를 연결해 주는 키 값이다. (키)</li>
<li>선택지 내용 : 실제적으로 &#8216;보기&#8217; 중에서 어떤 내용으로 표시되는 가 하는 정보이다. (텍스트)</li>
<li>선택 수 : 그래서 이 선택지에 얼마나 표가 갔는지를 집계하여 저장하는 부분이다. (정수)</li>
</ul>
</li>
</ul>
<p>위의 내용으로 2개의 클래스를 생성해 보겠다. 파이썬 코드는 다음과 같다.</p>
<p> </p>
<pre style="padding-left:30px;"><span class="k"><span style="color:#0000ff;">class</span></span><span style="color:#0000ff;"> </span><span class="nc"><span style="color:#ff0000;">Poll</span></span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
    <span class="n">question</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mf">200</span><span class="p">)</span>
    <span class="n">pub_date</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">DateTimeField</span><span class="p">(</span><span class="s">'date published'</span><span class="p">)</span>

<span class="k"><span style="color:#0000ff;">class</span></span><span style="color:#0000ff;"> </span><span class="nc"><span style="color:#ff0000;">Choice</span></span><span class="p">(</span><span class="n">models</span><span class="o">.</span><span class="n">Model</span><span class="p">):</span>
    <span class="n">poll</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">ForeignKey</span><span class="p">(</span><span class="n">Poll</span><span class="p">)</span>
    <span class="n">choice</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">CharField</span><span class="p">(</span><span class="n">max_length</span><span class="o">=</span><span class="mf">200</span><span class="p">)</span>
    <span class="n">votes</span> <span class="o">=</span> <span class="n">models</span><span class="o">.</span><span class="n">IntegerField</span><span class="p">()</span></pre>
<p>models.py 파일을 우선 저장한 후 다시 처음에 편집해 본 적 있는 settings.py 파일을 연다. 세팅 항목 중 INSTALLED_APPS 항목에 poll을 추가한다.</p>
<p style="padding-left:60px;"><span style="color:#3366ff;">INSTALLED_APPS = (<br />
&#8216;django.contrib.auth&#8217;,<br />
&#8216;django.contrib.contenttypes&#8217;,<br />
&#8216;django.contrib.sessions&#8217;,<br />
&#8216;django.contrib.sites&#8217;,<br />
&#8216;mysite.polls&#8217;<br />
)</span></p>
<p>settings.py 파일을 저장하고 나면 mysite 프로젝트에 polls 어플리케이션이 포함되는 것이다. 해당 내용이 DB에는 어떻게 반영되는지 확인해보자. </p>
<p><span style="color:#339966;">&gt; manage.py sql polls</span></p>
<p>위의 명령은 polls 어플리케이션을 위해 DB에 어떤 쿼리가 전송될 것인지를 미리 확인하게 해준다. 결과는 대략 다음과 같다.</p>
<p style="padding-left:30px;"><span style="color:#ff0000;">BEGIN;<br />
CREATE TABLE &#8220;polls_poll&#8221; (<br />
    &#8221;id&#8221; integer NOT NULL PRIMARY KEY,<br />
    &#8221;question&#8221; varchar(200) NOT NULL,<br />
    &#8221;pub_date&#8221; datetime NOT NULL<br />
);</span></p>
<p><span style="color:#ff0000;">     CREATE TABLE &#8220;polls_choice&#8221; (<br />
           &#8220;id&#8221; integer NOT NULL PRIMARY KEY,<br />
           &#8220;poll_id&#8221; integer NOT NULL REFERENCES &#8220;polls_poll&#8221; (&#8220;id&#8221;),<br />
           &#8220;choice&#8221; varchar(200) NOT NULL,<br />
          &#8221;votes&#8221; integer NOT NULL<br />
     )<br />
     ;</span></p>
<p><span style="color:#ff0000;">COMMIT;</span></p>
<p> </p>
<p>manage.py 툴의 sql 명령은 실제 쿼리를 실행하기 전에 어떤 쿼리를 작성하게 될 것인지 미리 표시해주는 기능이다.  아직 DB파일에 위의 테이블들이 생성되지는 않았다. 현제 프로젝트 내의 DB 내용에 변경이 가해졌으므로 이를 DB 파일에 반영한다. 앞 글에서도 한 번 언급한 바 있는 명령을 사용한다.</p>
<p><span style="color:#339966;">&gt; manage.py syncdb</span></p>
<p>이제 DB에 해당 정보를 입력할 수 있는 테이블들이 생성되었다. 다음은 쉘에서 이렇게 등록된 어플리케이션에 어떻게 접근할 수 있는지 확인해 보도록 하자.</p>
<h3>API 확인하기</h3>
<p>파이썬 쉘을 실행하기 위해서는 통상 python.exe를 실행했지만, 앞서 작성한 poll 어플리케이션의 내용을 반입하는 것은 꽤나 신경 쓰이는 작업일 수 있으므로,Django에서 작성 중인 프로젝트의 내용을 제대로 반영하기 위해서는 manage.py를 이용하자.</p>
<p><span style="color:#339966;">&gt; manage.py shell</span></p>
<p>보통 파이썬 대화형 쉘이 실행된 것과 그다지 달라보이지 않는 화면이 표시된다. 그렇다 실제로 파이썬 쉘이 실행된 상태다. 물론, 우리가 작성 중인 프로젝트의 위치를 파이썬 쉘이 먼저 알고 있다는 것이 조금 다른 점이라면 다른 점이겠다.</p>
<p>만들어 놓은 model 들을 반입해보도록 하자.</p>
<p style="padding-left:30px;">&gt;&gt;&gt;<span style="color:#0000ff;">from </span>mysite.polls.models <span style="color:#0000ff;">import </span>Poll, Choice</p>
<p>지금 만들어진 Poll 이 혹시 있나 살펴보자면&#8230;</p>
<p style="padding-left:30px;"><span style="color:#339966;">&gt;&gt;&gt;Poll.objects.all()</span></p>
<p style="padding-left:30px;"><span style="color:#339966;">[]</span></p>
<p>당연히 들어있는 내용이 없다.</p>
<p>이제 DB에 등록된 테이블의 내용을 객체로 다루는 방법을 살펴보자. Poll 클래스를 통해 새로운 객체 p를 생성해 보겠다.</p>
<p style="padding-left:30px;"><span style="color:#339966;">&gt;&gt;&gt; p = Poll(question= &#8216;What is the weather  like?&#8217;)</span></p>
<p>이렇게 하여 하나의 투표 객체가 생성이 되었다. 투표 객체의 내용 중에는 생성일이 있는데, 이 부분을 작성하기 위해서는 지금 날짜를 알아야 하니 다음과 같이 해보자.</p>
<p style="padding-left:30px;">&gt;&gt;&gt; <span style="color:#0000ff;">import </span>datetime</p>
<p style="padding-left:30px;"><span style="color:#339966;">&gt;&gt;&gt; p.pub_date = datetime.datetime.now()</span></p>
<p>이상으로 하나의 투표 객체에 담아야 하는 정보들을 모두 담았다면, 이제는 DB에 저장을 해보도록 하자.</p>
<p style="padding-left:30px;"><span style="color:#339966;">&gt;&gt;&gt;p.save()</span></p>
<p>비록 제대로 된 웹 폼은 아니지만, 대화형 방식으로 투표 객체를 생성하고 DB에 저장까지 해보았다. 문제는 허무할만큼 너무 간단하다는 것일까. 저장된 내용을 확인하기 위해서 다시 한 번 쉡에서 확인해보자.</p>
<p style="padding-left:30px;"><span style="color:#339966;">&gt;&gt;&gt; Poll.objects.all()</span></p>
<p style="padding-left:30px;"><span style="color:#339966;">[&lt;Poll : Poll object&gt;]</span></p>
<p>리스트가 비어있지 않고 방금 생성한 Poll 객체로 저장이 되어 있음을 알 수 있다.</p>
<p>Poll 객체들만 계속 생성, 저장이 될 것이므로, shell에서 이들을 선뜻 구분하기가 쉽지 않다. 따라서 이런 경우에는 Poll 객체내에 <span style="color:#ff0000;">__unicode__ </span>함수를 정의해서 어떤 값을 돌려줄지 결정하면 된다. 즉, models.py 파일을 열고 Poll 객체의 내부(즉 들여쓰기가 끝나지 않은 지점에)에 아래와 같은 줄을 추가한다.</p>
<p style="padding-left:30px;">#Poll class in models.py</p>
<p style="padding-left:30px;"><span style="color:#0000ff;">class </span>Poll():<br />
~~</p>
<p style="padding-left:60px;"><span style="color:#0000ff;">def  </span>__unicode__(self): </p>
<p style="padding-left:90px;"><span style="color:#0000ff;">return </span>self.question</p>
<p>이제 다시 쉘을 실행하여 모델을 반입하고 Poll 객체를 살펴보면 아까와는 다르게 보일 것이다.</p>
<p style="padding-left:30px;"><span style="color:#339966;">&gt;&gt;&gt; Poll.objects.all()</span></p>
<p style="padding-left:30px;"><span style="color:#339966;">[&lt;Poll : what is the weather like?&gt;]</span></p>
<p> </p>
<p>이렇듯 shell을 통해서 객체를 이리 저리 가져오고, 만들고 저장하는 방법에 대해서는 좀 연습이 더 필요할 듯 하다. 그리고 각 모델에서 정의한 데이터의 유형에 따라서도 어떤 함수들이 존재해서 그러한 함수들을 사용할 수 있는지도 공부가 필요하다. 어떻게 보면 앞으로 여기서 살펴볼 내용들 보다 더 중요한 핵심적인 내용은 shell을 잘 쓰는 곳에 있지 않을까 예상되지만 지금은 필자도 알고 있는 내용이 거의 없으므로 다음을 기약해야 겠다.</p>
<p>진도가 쉽사리 나가지 않는데, 다음 편에는 자동으로 생성되는 어드민을 어떻게 만드는지 살펴볼 것이다. 튜터리얼에서는 어드민 사이트를 커스터 마이징하는 방법을 몇 가지 소개하고 있는데, 여기서는 그런 자세한 부분까지는 생략하고 어떻게 어드민 사이트를 만들고, url을 정리하고 view는 또 어떻게 구성하는지에 대한 내용들을 살펴볼 예정이다.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sooop.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sooop.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sooop.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sooop.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sooop.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sooop.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sooop.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sooop.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sooop.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sooop.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sooop.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sooop.wordpress.com/46/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sooop.wordpress.com/46/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sooop.wordpress.com/46/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sooop.wordpress.com&amp;blog=1851722&amp;post=46&amp;subd=sooop&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sooop.wordpress.com/2009/01/28/0000009-django-%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0-2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e91eae1e2d8b8c9ad4edd0a2e090b19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sooop25</media:title>
		</media:content>
	</item>
		<item>
		<title>Django 시작하기</title>
		<link>http://sooop.wordpress.com/2009/01/22/django-%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0/</link>
		<comments>http://sooop.wordpress.com/2009/01/22/django-%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0/#comments</comments>
		<pubDate>Thu, 22 Jan 2009 02:56:26 +0000</pubDate>
		<dc:creator>sooop25</dc:creator>
				<category><![CDATA[HOW TO]]></category>

		<guid isPermaLink="false">http://sooop.wordpress.com/?p=42</guid>
		<description><![CDATA[Django(이하 장고)를 설치하고 튜터리얼에 나온 내용을 차곡 차곡 따라해보는 시간을 갖도록 하겠다. 여기서 사용된 버전은 1.0.2  최종 버전이며, 파이썬 버전은 2.5.2를 사용했다. (파이썬 2.5의 최종 버전은 현재 2.5.4이다.) 다시 한 번 말하지만 본 포스팅은 Django 튜터리얼을 기반으로 거의 그대로 따라가는 내용이다. 전적으로 본인이 공부하는 것을 기록하기 위한 목적이며, 개발자를 위한 문서는 결코 아니다. *원활한 사용을 [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sooop.wordpress.com&amp;blog=1851722&amp;post=42&amp;subd=sooop&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Django(이하 장고)를 설치하고 <a href="http://docs.djangoproject.com/en/dev/intro/tutorial01/#intro-tutorial01">튜터리얼에 나온 내용</a>을 차곡 차곡 따라해보는 시간을 갖도록 하겠다. 여기서 사용된 버전은 <a href="http://www.djangoproject.com/download/">1.0.2  최종 버전</a>이며, 파이썬 버전은 2.5.2를 사용했다. (<a href="http://www.python.org/download/releases/2.5.4/" target="_self">파이썬 2.5의 최종 버전은 현재 2.5.4이다.</a>) 다시 한 번 말하지만 본 포스팅은 Django 튜터리얼을 기반으로 거의 그대로 따라가는 내용이다. 전적으로 본인이 공부하는 것을 기록하기 위한 목적이며, 개발자를 위한 문서는 결코 아니다.</p>
<p>*원활한 사용을 위해서 시스템의 환경 변수 중 파이썬 디렉터리와 파이썬 스크립트 디렉터리를 패스로 등록한다. 등록할 패스는 <span style="color:#800080;">;C:\python25\;C:\python25\scripts; </span>이며, 반드시 앞에 ;를 붙여서 이미 지정된 패스에 추가되도록 한다. 스크립트 폴더까지 지정해 주어야 보다 쉽게 Django를 사용할 수 있다. 귀찮지 않다면 <strong><span style="color:#800080;">PATHEXT</span></strong>에 .PY 항목도 추가하여 파이썬 파일을 명령 프롬프트에서 보다 쉽게 실행하도록 하자. 이곳에서 사용한 모든 명령은 이상의 조치가 처해진 것을 가정한다. </p>
<h3>Django의 설치</h3>
<p>설치를 위해서는 내려 받은 파일의 압축을 적당한 위치에 풀어준다. 그런 다음 명령 프롬프트를 통해 해당 디렉터리로 이동한다. 만약 C:\Dajngo-1.0.2-final 에 압축을 풀었다면 아래와 같이 입력한다.</p>
<p style="padding-left:30px;"><span style="color:#339966;">&gt; cd c:\django-1.-.2-final<br />
&gt; setup.py install</span></p>
<p> 글자들이 좌르륵 쏟아지듯 흘러가며 Django의 설치가 완료되었다. 만약, setuptools가 설치되어 있다면 링크를 타고 가서 내려 받을 필요 없이easy_install django 라고 실행하여 바로 설치할 수 도 있다.</p>
<h3>DB는 어떤 걸 쓰나</h3>
<p> 아시다시피 Django는 웹 프레임워크이다. 어지간한 웹 서비스는 DB와 웹서버는 필수적으로 사용한다고 본다. Django는 MySql등과 같은 널리 쓰이는 DB를 지원하는데, SQLite도 지원한다. 파이썬 2.5.x 이상의 버전에는 SQLite3가 기본적으로 들어있으므로 테스트를 위해서는 별다른 DB를 설치하지 않겠다. MySQL을 쓰고 싶다면, 국내에서 개발(?)된 RWAPM을 추천한다. (안타깝게도 현재는 개발이 중단되었지만, 여전히 쓸만하고, 별도의 번거로운 설치과정이 필요없다.) 여기선 귀찮기도 하니 그냥 SQLite를 사용하겠다. </p>
<h3>웹 서버는 어떤 걸 쓰나</h3>
<p>Django로 개발할 때에는 별다른 웹 서버도 필요없다. 프로젝트를 하나 시작하고 나면, Django가 제공하는 미니 웹서버를 사용할 수 있다. 특히 Django의 미니 웹 서버는 프로젝트 내의 파일이 갱신되면 자동으로 재시작되어 브라우저를 통해 바로바로 바뀐 결과를 반영할 수 있다. 이 미니 웹 서버는 순수 파이썬 코드로 작성되었다. 단 튼튼하고 내실있는 본격 상용 웹서버를 생각하면 곤란하다. 다시 한 번 말하지만 Django는 웹 프레임워크이지 웹 서버가 아니다.</p>
<h3>프로젝트를 시작하자</h3>
<p>이제 프로젝트를 시작하면 된다. 프로젝트의 관리는 django-admin.py 파일을 통해 할 수 있는데, 이 파일이 위에서 잠깐 언급한 파이썬 스크립트 디렉터리에 존재한다. 따라서 프로젝트를 생성하고 싶은 위치로 이동한 다음, 명령 프롬프트에서 다음을 실행한다.</p>
<p style="padding-left:30px;"><span style="color:#339966;">&gt;django-admin startproject myproj</span></p>
<p>짠 프로젝트가 시작되었다. 뭐냐구? 궁금하면 dir 명령을 통해 뭐가 바뀌었나 확인해본다. myproj 라는 디렉토리가 생겼을 것이다. 이 디렉터리에서 프로젝트가 시작된다. 그리고 곧 생성해보게 되겠지만 프로젝트의 하위 개념으로 어플리케이션이 존재한다. 꼭 들어맞는 것은 아니지만 &#8216;하나의 그룹으로 묶을 수 있는 기능 단위 집합&#8217;을 어플리케이션으로 정의한다면, 이러한 어플리케이션이 모여서 이루는 조금더 큰 범위의 &#8216;서비스&#8217;가 프로젝트에 견줄 수 있는 개념으로 보여진다. 어쨌든 myproj 디렉터리 아래에는 다음과 같은 파일들이 존재한다.</p>
<ul>
<li><span style="color:#ff6600;">__init__.py</span> : 생성된 디렉토리가 파이썬 패키지임을 나타내는 비어있는 파일. </li>
<li><span style="color:#ff6600;">manage.py </span>: 프로젝트를 관리하기 위해 Django와 상호작용할 수 있는 명령줄 실행 도구</li>
<li><span style="color:#ff6600;">settings.py</span> : 프로젝트의 설정값을 담은 파일</li>
<li><span style="color:#ff6600;">urls.py</span> : url을 깔끔하게 정리할 수 있도록 해주는 파일</li>
</ul>
<p>이중 manage.py를 먼저 살펴보도록 하자.</p>
<p> </p>
<h3>웹 서버를 시작해보자</h3>
<p>웹 서버를 시작하는 것은 위에서 언급한 manage.py 파일을 통해 할 수 있다. 다음과 같이 실행해본다.</p>
<p style="padding-left:30px;"><span style="color:#339966;">&gt;manage.py runserver 8080</span></p>
<p>메세지가 나오면서 에러 없이 잘 실행되었다고 할 것이다. 웹 브라우저로 http://127.0.0.1:8080/에 접속해보면 파스텔 톤으로 &#8216;It Works!&#8217;라고 자뻑하는 페이지를 만나게 된다. 미니 웹 서버가 잘 돌아간다는 뜻이다. 8080은 포트번호로 주기 나름이고 기본 값은 8000번이다.</p>
<p>이렇게 시작된 django 웹 서버는 프로젝트 내의 파일이 변경되면 자동으로 서버가 재시작되어 변경 사항이 바로 반영될 수 있다. 다만 프로젝트 내에 새로운 파일이 생성되는 것은 자동으로 감지하지 못하므로, 이와 관련하여서는 수동으로 서버를 재시작 해주어야 한다. 웹 서버를 중지하기 위해서는 Ctrl+C를 입력하면 된다.</p>
<p> </p>
<h3>DB 세팅하기</h3>
<p>이번에는 DB를 세팅해보도록 하자. myproj 디렉터리 내에 있는 settings.py 파일을 편집기로 열어본다. 몇 줄 내려가지 않아서 다음과 같은 DB 관련한 세팅 내용이 눈에 띌 것이다. 해당 항목들은 다음과 같다.</p>
<p style="padding-left:30px;"><span style="color:#0000ff;">DATABASE_ENGINE</span> : DB 엔진의 종류를 말한다. &#8216;postgresql_psycopg2&#8242;,&#8217;mysql&#8217;,'sqlite3&#8242;등과 같은 DB 백엔드가 기본적으로 지원되며, Django 1.0에서 부터는 외부 DB도 지원된다고 한다. 여기서는 그냥 값에 &#8216;sqlite3&#8242;을 넣어준다.</p>
<p style="padding-left:30px;"><span style="color:#0000ff;">DATABASE_NAME</span> : DB 이름을 지정한다. sqlite3 을 선택한 경우에는 DB 파일 이름을 풀 패스로 입력한다. 만약 존재하지 않는 파일이면 Django는 자동으로 파일을 생성해준다. &#8216;C:\\myproj\\sqlite3.db&#8217; 와 같이 입력해주면 된다. </p>
<p style="padding-left:30px;"><span style="color:#0000ff;">DATABASE_USER</span> : DB에 접근할 계정 명이다. sqlite3을 선택한 경우, 쓰지 않아도 된다.</p>
<p style="padding-left:30px;"><span style="color:#0000ff;">DATABASE_PASSWORD</span> : DB에 접근할 패스워드다. 물론 sqlite3의 경우 비워둔다.</p>
<p style="padding-left:30px;"><span style="color:#0000ff;">DATABASE_HOST </span>: DB 서버의 주소이다. 로컬호스트인 경우나, 혹은 내장 sqlite3을 쓰는 경우는 공란으로 둔다.</p>
<p style="padding-left:30px;"><span style="color:#0000ff;">DATABASE_PORT </span>: DB 서버로 접근하기 위한 포트이다. 역시 이 경우는 공란으로 둔다.</p>
<p>DB 관련 정보를 입력하였다면 파일을 저장하고, 명령 프롬프트에서 다음과 같이 입력한다.</p>
<p style="padding-left:30px;"><span style="color:#339966;">&gt;manage.py syncdb</span></p>
<p>syncdb 명령은 파일에서 적용한 DB 관련 변경사항을 실제 DB에 반영하는 것이다. 명령을 실행하면 관련 내용을 바탕으로 DB를 생성하고, superuser 계정을 만들 것인지 물어본다. 이는 후에 유용하게 사용할 것이 분명하므로 꼭 만들어 두자. </p>
<p> </p>
<h3>어플리케이션 시작하기</h3>
<p>프로젝트는 생성이 되었고, 어플리케이션을 만들어 볼 차례다.  Django 튜토리얼은 간단한 투표 어플리케이션을 만드는 것을 소개한다. 이 글은 전적으로 해당 문서의 내용을 근간으로 하고 있으므로 똑같이 따라해 본다.</p>
<p style="padding-left:30px;"><span style="color:#339966;">&gt;manage.py startapp polls</span></p>
<p>이 명령으로 어플리케이션을 시작할 수 있다. 프로젝트를 시작할 때와 마찬가지로 어플리케이션을 시작하고 나면 polls 라는 디렉토리가 생겨있는 것을 확인할 수 있다. 어플리케이션을 처음 생성하면 다음과 같은 파일들이 있는 것을 확인할 수 있다.</p>
<p style="padding-left:30px;"><span style="color:#3366ff;">mysite&gt;polls&gt;</span></p>
<p style="padding-left:60px;"><span style="color:#3366ff;">__init__.py </span></p>
<p style="padding-left:60px;"><span style="color:#3366ff;">models.py</span></p>
<p style="padding-left:60px;"><span style="color:#3366ff;">views.py</span></p>
<p>눈에 띄는 두 가지 파일은 models.py와 views.py이다. 먼저 우리는 models.py를 살펴볼 예정인데, 이는 Django라는 프레임워크가 데이터를 어떻게 다룰 수 있게 하는지와 관련이 있다. 그리고 당연히, 관련한 내용은 다음 포스팅에서 잇도록 하겠다.</p>
<br />  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/sooop.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/sooop.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/sooop.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/sooop.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/sooop.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/sooop.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/sooop.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/sooop.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/sooop.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/sooop.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/sooop.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/sooop.wordpress.com/42/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/sooop.wordpress.com/42/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/sooop.wordpress.com/42/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=sooop.wordpress.com&amp;blog=1851722&amp;post=42&amp;subd=sooop&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://sooop.wordpress.com/2009/01/22/django-%ec%8b%9c%ec%9e%91%ed%95%98%ea%b8%b0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7e91eae1e2d8b8c9ad4edd0a2e090b19?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">sooop25</media:title>
		</media:content>
	</item>
	</channel>
</rss>
