<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>보다 더 나은 내일의 나를 위해</title>
    <link>https://lightchan.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 31 May 2026 02:33:38 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>cg0826</managingEditor>
    <item>
      <title>[H2] org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database may be already in use: 오류</title>
      <link>https://lightchan.tistory.com/162</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;H2 DB 연동 중에 다음과 같은 오류가 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;729&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbsgyB/btrVGZ5uhCD/uCy85HYiiWb5hbT4oETpj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbsgyB/btrVGZ5uhCD/uCy85HYiiWb5hbT4oETpj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbsgyB/btrVGZ5uhCD/uCy85HYiiWb5hbT4oETpj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbsgyB%2FbtrVGZ5uhCD%2FuCy85HYiiWb5hbT4oETpj1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;420&quot; height=&quot;729&quot; data-origin-width=&quot;919&quot; data-origin-height=&quot;729&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그림1. H2 Console 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H2 콘솔 설정은 다음과 같이 연결 후에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인텔리제이에서 아래와 같이 테스트 코드를 작성 하고 돌리면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;445&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqjvcc/btrVAtmywfK/Kkvxze9zOD6Ta34TcrN211/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqjvcc/btrVAtmywfK/Kkvxze9zOD6Ta34TcrN211/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqjvcc/btrVAtmywfK/Kkvxze9zOD6Ta34TcrN211/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbqjvcc%2FbtrVAtmywfK%2FKkvxze9zOD6Ta34TcrN211%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;448&quot; height=&quot;445&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;445&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같은 오류가 발생하였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;21&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yD0Mr/btrVz99DmDL/teV92yxHrmZwuepD7ZSCs1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yD0Mr/btrVz99DmDL/teV92yxHrmZwuepD7ZSCs1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yD0Mr/btrVz99DmDL/teV92yxHrmZwuepD7ZSCs1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyD0Mr%2FbtrVz99DmDL%2FteV92yxHrmZwuepD7ZSCs1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;677&quot; height=&quot;21&quot; data-origin-width=&quot;677&quot; data-origin-height=&quot;21&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오류 내용 : org.h2.jdbc.JdbcSQLNonTransientConnectionException: Database may be already in use&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결 방법 :&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H2 콘솔 페이지에서 연결을 해제하고 하면 오류가 발생하지 않았다. 하지만 H2 콘솔과 인텔리제이에서 동시에 접속이 가능해야 했기때문에 방법을 찾아보았고, 해결 방법은 다음과 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;application.properties&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
#spring.datasource.url=jdbc:h2:~/Db명 # 수정 전
spring.datasource.url=jdbc:h2:tcp://localhost/~/Db명 # 수정 후
spring.datasource.driverClassName=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;H2 콘솔 접속 페이지&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;910&quot; data-origin-height=&quot;635&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1ILqb/btrVI7hTOtU/7vCgZSFvUhs0bTkf68bXqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1ILqb/btrVI7hTOtU/7vCgZSFvUhs0bTkf68bXqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1ILqb/btrVI7hTOtU/7vCgZSFvUhs0bTkf68bXqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1ILqb%2FbtrVI7hTOtU%2F7vCgZSFvUhs0bTkf68bXqK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;420&quot; height=&quot;293&quot; data-origin-width=&quot;910&quot; data-origin-height=&quot;635&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>내 시간을 잡아먹는 에러</category>
      <category>H2</category>
      <category>Spring</category>
      <category>springboot</category>
      <category>tcp</category>
      <category>스프링</category>
      <category>스프링부트</category>
      <category>콘솔</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/162</guid>
      <comments>https://lightchan.tistory.com/162#entry162comment</comments>
      <pubDate>Sun, 8 Jan 2023 20:29:35 +0900</pubDate>
    </item>
    <item>
      <title>[SQL] Mybatis XML 작성 시 SQL 별로 LIKE 동적 쿼리 사용 방법</title>
      <link>https://lightchan.tistory.com/161</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- MySQL , postgreSQL, MariaDB&lt;/p&gt;
&lt;pre id=&quot;code_1652768428226&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM 테이블이름
	WHERE 컬럼명 LIKE CONCAT(&amp;lsquo;%&amp;rsquo;, #{파라미터}, &amp;lsquo;%&amp;rsquo;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Oracle&lt;/p&gt;
&lt;pre id=&quot;code_1652768589739&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM 테이블명
	WHERE 컬럼명 LIKE '%'||#{파라미터}||'%'&lt;/code&gt;&lt;/pre&gt;</description>
      <category>SQL</category>
      <category>like</category>
      <category>MariaDB</category>
      <category>mybatis</category>
      <category>MySQL</category>
      <category>oracle</category>
      <category>PostgreSQL</category>
      <category>SQL</category>
      <category>xml</category>
      <category>동적쿼리</category>
      <category>쿼리</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/161</guid>
      <comments>https://lightchan.tistory.com/161#entry161comment</comments>
      <pubDate>Tue, 17 May 2022 18:23:39 +0900</pubDate>
    </item>
    <item>
      <title>[에러] The content of elements must consist of well-formed character data ormarkup.</title>
      <link>https://lightchan.tistory.com/160</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;sql.xml&lt;/p&gt;
&lt;pre id=&quot;code_1650292569981&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;select id=&quot;Dao랑 매핑시킬 ID&quot; parameterType=&quot;파라미터 type&quot; resultType=&quot;반환할 결과 type&quot;&amp;gt;
	SELECT CONCAT(T1.컬림A, ' &amp;gt; ', T1.컬럼B) FROM 테이블 T1
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같이 xml 파일에 쿼리문을 작성 할 떄, 다음과 같은 오류가 발생하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650292819707&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Multiple annotations found at this line:

- The content of elements must consist of well-formed character data or markup.

- Start tag of element &amp;lt;select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 오류가 발생하는 이유는 XML 에서 부등호를 문자열이 아닌 &amp;lt;select&amp;gt; &amp;lt;/select&amp;gt;와 같이 시작과 끝을 알리는 TAG로 인식하기 때문입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650292840650&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;select id=&quot;Dao랑 매핑시킬 ID&quot; parameterType=&quot;파라미터 type&quot; resultType=&quot;반환할 결과 type&quot;&amp;gt;
	&amp;lt;![CDATA[
		SELECT CONCAT(T1.컬림A, ' &amp;gt; ', T1.컬럼B) FROM 테이블 T1
	]]&amp;gt;
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부등호를 사용 할 쿼리문에 &lt;u&gt;&lt;b&gt;&amp;lt;![CDATA[ ]]&amp;gt;&lt;/b&gt;&lt;/u&gt; 를 사용해주면 오류가 발생하지 않습니다.&lt;/p&gt;</description>
      <category>내 시간을 잡아먹는 에러</category>
      <category>CDATA</category>
      <category>mybatis</category>
      <category>query</category>
      <category>Spring</category>
      <category>SQL</category>
      <category>xml</category>
      <category>문자열</category>
      <category>부등호</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/160</guid>
      <comments>https://lightchan.tistory.com/160#entry160comment</comments>
      <pubDate>Mon, 18 Apr 2022 23:41:38 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] FileUpload 썸네일 확장자 dependency</title>
      <link>https://lightchan.tistory.com/159</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;파일 업로드를 할 때, TIF , TIFF와 같은 썸네일을 뽑아내야 하는 상황이 생겼습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처음에는 단순하게&lt;/p&gt;
&lt;pre id=&quot;code_1650011032484&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import javax.imageio.ImageIO;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 제공되는 위 라이브러리만 불러와서 사용하면 되는줄 알았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 모든 확장자에 대해 가능한 것이 아닌 대중적으로 사용하는 JPEG, PNG, BMP ..등등 에 대한 것만 가능하다는 것을 알게되었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 조금 해매다가 얻은 결과로는 추가적으로 라이브러리가 필요하다는 정보를 얻었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://mvnrepository.com/artifact/com.twelvemonkeys.imageio&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://mvnrepository.com/artifact/com.twelvemonkeys.imageio&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 사이트에서 필요한 파일 확장자에 대해서만 maven에 등록하여도 되고, 그냥 전체적으로 파일에 대한 모든 확장자들을 추가하고싶으면&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Maven 프로젝트의 경우&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1650011368942&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;com.twelvemonkeys.imageio&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;imageio-core&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;3.8.2&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의 내용을 pom.xml 에 추가해주시고,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gadle 프로젝트의 경우&lt;/p&gt;
&lt;pre id=&quot;code_1650011439605&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation group: 'com.twelvemonkeys.imageio', name: 'imageio-core', version: '3.8.2'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 내용을 build.gradle 에 추가해주시면 될 것 같습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 라이센스 제공 사이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/haraldk/TwelveMonkeys#license&quot;&gt;https://github.com/haraldk/TwelveMonkeys#license&lt;/a&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1650010878102&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - haraldk/TwelveMonkeys: TwelveMonkeys ImageIO: Additional plug-ins and extensions for Java's ImageIO&quot; data-og-description=&quot;TwelveMonkeys ImageIO: Additional plug-ins and extensions for Java's ImageIO - GitHub - haraldk/TwelveMonkeys: TwelveMonkeys ImageIO: Additional plug-ins and extensions for Java's ImageIO&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/haraldk/TwelveMonkeys#license&quot; data-og-url=&quot;https://github.com/haraldk/TwelveMonkeys&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Ltu7O/hyN330snEK/n1XjLQjIjizxwK5qSpjDKk/img.png?width=640&amp;amp;height=320&amp;amp;face=0_0_640_320&quot;&gt;&lt;a href=&quot;https://github.com/haraldk/TwelveMonkeys#license&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/haraldk/TwelveMonkeys#license&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Ltu7O/hyN330snEK/n1XjLQjIjizxwK5qSpjDKk/img.png?width=640&amp;amp;height=320&amp;amp;face=0_0_640_320');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - haraldk/TwelveMonkeys: TwelveMonkeys ImageIO: Additional plug-ins and extensions for Java's ImageIO&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;TwelveMonkeys ImageIO: Additional plug-ins and extensions for Java's ImageIO - GitHub - haraldk/TwelveMonkeys: TwelveMonkeys ImageIO: Additional plug-ins and extensions for Java's ImageIO&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring/새롭게 얻은 정보들</category>
      <category>File</category>
      <category>fileupload</category>
      <category>thumbnail</category>
      <category>섬네일</category>
      <category>썸네일</category>
      <category>업로드</category>
      <category>파일</category>
      <category>파일업로드</category>
      <category>확장자</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/159</guid>
      <comments>https://lightchan.tistory.com/159#entry159comment</comments>
      <pubDate>Fri, 15 Apr 2022 17:31:18 +0900</pubDate>
    </item>
    <item>
      <title>[Javascript] IE에서 replaceAll 사용하는 방법</title>
      <link>https://lightchan.tistory.com/158</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;추가 기능 개발 후 테스트 중에 크롬에서는 replaceAll이 정상적으로 먹었지만, IE에서는 에러가 발생하는 현상을 볼 수 있었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 찾아본 결과 정규식을 통해서 변경해야 했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 사진은 IE의 디버깅 모드에서 해본 화면입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;60&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNkvkl/btrn4rap48F/YHCQEBa1HcIH0ckmdimGeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNkvkl/btrn4rap48F/YHCQEBa1HcIH0ckmdimGeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNkvkl/btrn4rap48F/YHCQEBa1HcIH0ckmdimGeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNkvkl%2Fbtrn4rap48F%2FYHCQEBa1HcIH0ckmdimGeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;702&quot; height=&quot;60&quot; data-origin-width=&quot;702&quot; data-origin-height=&quot;60&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #2b2b2b;&quot;&gt;g : 전역에서 발생할 모든 패턴에 대한 검색&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #2b2b2b;&quot;&gt;i : 대/소문자 미구분&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #2b2b2b;&quot;&gt;m : 여러 줄 검색&lt;/span&gt;&lt;/p&gt;</description>
      <category>JS&amp;middot;JQuery&amp;middot;AJAX</category>
      <category>IE</category>
      <category>JavaScript</category>
      <category>JS</category>
      <category>Replace</category>
      <category>replaceAll</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/158</guid>
      <comments>https://lightchan.tistory.com/158#entry158comment</comments>
      <pubDate>Thu, 16 Dec 2021 23:58:51 +0900</pubDate>
    </item>
    <item>
      <title>[IntelliJ] java.lang.IllegalStateException: Failed to load ApplicationContext</title>
      <link>https://lightchan.tistory.com/157</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;오류 상황 : 스프링 부트와 AWs로 혼자 구현하는 웹 서비스를 따라 하던 도중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;제목과 같은 오류가 발생하였다. 처음에는 저자분의 깃허브를 가서 동일하게 적용해보았으나 해결되지 않았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 이후 구글링을 하였을 때, 다른 사람들이 해결한 방법 몇 가지는 다음과 같았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 클래스에 &lt;span style=&quot;color: #555555;&quot;&gt;@WebAppConfiguration를 추가해주자.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #555555;&quot;&gt;-&amp;gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;실패&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;-&amp;gt; 저는 jUnit5로 테스트를 진행중이였는데, 위 방법은 jUnit4를 사용하는 환경에서 사용중이였습니다. 4버전과 5버전에 따라 차이가 있는지까지는 좀 더 공부해야 할 것 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테스트 클래스에 @ContextConfiguration() 를 추가해주자.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1번과 같은 이유로 &lt;span style=&quot;color: #ee2323;&quot;&gt;실패&lt;/span&gt;하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;메인 Application을 실행하여, h2-database 서버를 실행 후 다시 테스트를 돌려보자.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;-&amp;gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;성공&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;h2 데이터베이스 서버를 실행 후 다시 테스트를 하니 성공적으로 실행 되었습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>내 시간을 잡아먹는 에러</category>
      <category>ApplicationContext</category>
      <category>Failed to load</category>
      <category>IllegalStateException</category>
      <category>IntelliJ</category>
      <category>인텔리제이</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/157</guid>
      <comments>https://lightchan.tistory.com/157#entry157comment</comments>
      <pubDate>Thu, 7 Oct 2021 23:32:29 +0900</pubDate>
    </item>
    <item>
      <title>[BOJ] 1037번 약수 ver. Python</title>
      <link>https://lightchan.tistory.com/155</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1037&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.acmicpc.net/problem/1037&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1613658848788&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;1037번: 약수&quot; data-og-description=&quot;첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되&quot; data-og-host=&quot;www.acmicpc.net&quot; data-og-source-url=&quot;https://www.acmicpc.net/problem/1037&quot; data-og-url=&quot;https://www.acmicpc.net/problem/1037&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ozGRq/hyJjKFSlzi/xAiU3zttWBlHsV0kbCJUXK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://www.acmicpc.net/problem/1037&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.acmicpc.net/problem/1037&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ozGRq/hyJjKFSlzi/xAiU3zttWBlHsV0kbCJUXK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;1037번: 약수&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;첫째 줄에 N의 진짜 약수의 개수가 주어진다. 이 개수는 50보다 작거나 같은 자연수이다. 둘째 줄에는 N의 진짜 약수가 주어진다. 1,000,000보다 작거나 같고, 2보다 크거나 같은 자연수이고, 중복되&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.acmicpc.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mCdSI/btqXTmRUzQS/kwZVHzws7knkfryTBv7Ju0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mCdSI/btqXTmRUzQS/kwZVHzws7knkfryTBv7Ju0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mCdSI/btqXTmRUzQS/kwZVHzws7knkfryTBv7Ju0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmCdSI%2FbtqXTmRUzQS%2FkwZVHzws7knkfryTBv7Ju0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 문제는 N의 진짜 약수가 구해진다고 하였기 때문에 간단하게 가장 작은 수와 가장 큰 수를 곱하면 그 수가 N이 된다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1613658997515&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;n = int(input())
N = list(map(int, input().split()))

N_max = max(N)
N_min = min(N)

print(N_max * N_min)&lt;/code&gt;&lt;/pre&gt;
&lt;div id=&quot;gtx-trans&quot; style=&quot;position: absolute; left: 249px; top: 1109px;&quot;&gt;
&lt;div class=&quot;gtx-trans-icon&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>1037번</category>
      <category>백준</category>
      <category>알고리즘</category>
      <category>약수</category>
      <category>코딩테스트</category>
      <category>코테</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/155</guid>
      <comments>https://lightchan.tistory.com/155#entry155comment</comments>
      <pubDate>Fri, 19 Feb 2021 21:39:14 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 개인 게시판 만들기 (5) - 게시판 글 검색</title>
      <link>https://lightchan.tistory.com/153</link>
      <description>&lt;p&gt;이번에는 게시판에 적힌 글을 조회하는 포스팅을 하도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 reviewVo에 조회할 때 필요한 조회 종류를 추가해주도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviweVo.java&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2NerW/btqRI776V56/wePfKzaL4J0NAmhWthzpzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2NerW/btqRI776V56/wePfKzaL4J0NAmhWthzpzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2NerW/btqRI776V56/wePfKzaL4J0NAmhWthzpzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2NerW%2FbtqRI776V56%2FwePfKzaL4J0NAmhWthzpzK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;조회 기능까지 추가된 후의 reviewVo.java&lt;/p&gt;
&lt;pre id=&quot;code_1609158266041&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.mall.domain;


public class reviewVo {

	/*
	 CREATE TABLE reviewTable (
	reNum INT AUTO_INCREMENT PRIMARY key,
	reTitle VARCHAR(20) NOT null,
	reContent text not null,
	reUser VARCHAR(20) NOT null,
	reregisterDate DATE DEFAULT NOW(),
	reCnt INT DEFAULT 0 # 조회수
	
	  
	 */
	
	private int reNum;
	private String reTitle;
	private String reContent;
	private String reUser;
	private String reregisterDate;
	private int reCnt;
	
	private String searchName, searchValue; // 이름별 검색, 제목별 검색
	public String getSearchName() {
		return searchName;
	}
	public void setSearchName(String searchName) {
		this.searchName = searchName;
	}
	public String getSearchValue() {
		return searchValue;
	}
	public void setSearchValue(String searchValue) {
		this.searchValue = searchValue;
	}
	public int getReNum() {
		return reNum;
	}
	public void setReNum(int reNum) {
		this.reNum = reNum;
	}
	public String getReTitle() {
		return reTitle;
	}
	public void setReTitle(String reTitle) {
		this.reTitle = reTitle;
	}
	
	public String getReContent() {
		return reContent;
	}
	public void setReContent(String reContent) {
		this.reContent = reContent;
	}
	public String getReUser() {
		return reUser;
	}
	public void setReUser(String reUser) {
		this.reUser = reUser;
	}
	public String getReregisterDate() {
		return reregisterDate;
	}
	public void setReregisterDate(String reregisterDate) {
		this.reregisterDate = reregisterDate;
	}
	public int getReCnt() {
		return reCnt;
	}
	public void setReCnt(int reCnt) {
		this.reCnt = reCnt;
	}
	
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;reviewMapper.xml&lt;/p&gt;
&lt;pre id=&quot;code_1609158295001&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- 게시글 검색하기 --&amp;gt;
	&amp;lt;select id=&quot;selectsearch&quot; resultType=&quot;reviewVo&quot;&amp;gt;
		select * from reviewTable where ${searchName} like concat('%',#{searchValue},'%') &amp;lt;!-- #은 데이터값 --&amp;gt;
	&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewmapper.java&lt;/p&gt;
&lt;pre id=&quot;code_1609158314544&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 게시글 검색하기
	public List&amp;lt;reviewVo&amp;gt; selectsearch(reviewVo reviewvo) throws Exception;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewService.java&lt;/p&gt;
&lt;pre id=&quot;code_1609158331520&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 게시글 제목 또는 작성자로 검색하기
	public List&amp;lt;reviewVo&amp;gt; selectsearch(reviewVo reviewvo) throws Exception {
		return reviewmapper.selectsearch(reviewvo);
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;view에 검색할 수 있는 form 양식 작성&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;list.jsp&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzbJga/btqRQSbdoPw/uDTkZuk5bEjeBtv9UOn6tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzbJga/btqRQSbdoPw/uDTkZuk5bEjeBtv9UOn6tK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzbJga/btqRQSbdoPw/uDTkZuk5bEjeBtv9UOn6tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzbJga%2FbtqRQSbdoPw%2FuDTkZuk5bEjeBtv9UOn6tK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;기능 검색 추가된 list.jsp&lt;/p&gt;
&lt;pre id=&quot;code_1609158384271&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot;%&amp;gt;


&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
게시글 불러오기 
&amp;lt;br&amp;gt;
&amp;lt;table border=&quot;2&quot;&amp;gt;
&amp;lt;tr&amp;gt;
	&amp;lt;th&amp;gt;글번호&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;제목&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;내용&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;작성자&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;등록일&amp;lt;/th&amp;gt;&amp;lt;th&amp;gt;조회수&amp;lt;/th&amp;gt;
&amp;lt;/tr&amp;gt;
&amp;lt;c:forEach var=&quot;item&quot; items=&quot;${relist}&quot;&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;${item.reNum}&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;a href=&quot;detailreview?reNum=${item.reNum}&quot;&amp;gt;${item.reTitle}&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;${item.reContent}&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;${item.reUser}&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;${item.reregisterDate}&amp;lt;/td&amp;gt;
&amp;lt;td&amp;gt;${item.reCnt}&amp;lt;/td&amp;gt;
&amp;lt;/c:forEach&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;a href=&quot;write&quot;&amp;gt;글쓰기&amp;lt;/a&amp;gt;
&amp;lt;form action=&quot;search&quot;&amp;gt;
&amp;lt;table&amp;gt;
&amp;lt;tr&amp;gt;
&amp;lt;td&amp;gt;&amp;lt;select name=&quot;searchName&quot;&amp;gt;
		&amp;lt;option value=&quot;reUser&quot;&amp;gt;작성자&amp;lt;/option&amp;gt;
		&amp;lt;option value=&quot;reTitle&quot;&amp;gt;글제목&amp;lt;/option&amp;gt;
		&amp;lt;/select&amp;gt;&amp;lt;/td&amp;gt;
	&amp;lt;td colspan=&quot;2&quot;&amp;gt;
	&amp;lt;input type=&quot;text&quot; name=&quot;searchValue&quot;&amp;gt;
	&amp;lt;/td&amp;gt;
	&amp;lt;td&amp;gt;
	&amp;lt;input type=&quot;submit&quot; value=&quot;검색&quot;&amp;gt;
	&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;	
&amp;lt;/table&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결과창&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tu9oL/btqRL2yGC0B/ojprGuQ4XgpPT2f1lskBA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tu9oL/btqRL2yGC0B/ojprGuQ4XgpPT2f1lskBA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tu9oL/btqRL2yGC0B/ojprGuQ4XgpPT2f1lskBA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ftu9oL%2FbtqRL2yGC0B%2FojprGuQ4XgpPT2f1lskBA0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;작성자 '롤'이 들어가는 글자로 검색해보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/csXEic/btqROeyPVsA/tOuxqlEXyurTgwogelFy0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/csXEic/btqROeyPVsA/tOuxqlEXyurTgwogelFy0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/csXEic/btqROeyPVsA/tOuxqlEXyurTgwogelFy0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcsXEic%2FbtqROeyPVsA%2FtOuxqlEXyurTgwogelFy0k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kLixj/btqRx0CdjeP/4vbFTwIl0ErmmDkxK7kEK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kLixj/btqRx0CdjeP/4vbFTwIl0ErmmDkxK7kEK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kLixj/btqRx0CdjeP/4vbFTwIl0ErmmDkxK7kEK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkLixj%2FbtqRx0CdjeP%2F4vbFTwIl0ErmmDkxK7kEK1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring/Spring 게시판 만들기</category>
      <category>Java</category>
      <category>JSP</category>
      <category>Spring</category>
      <category>springboot</category>
      <category>SQL</category>
      <category>검색</category>
      <category>게시판</category>
      <category>글쓰기</category>
      <category>조회</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/153</guid>
      <comments>https://lightchan.tistory.com/153#entry153comment</comments>
      <pubDate>Mon, 28 Dec 2020 21:28:00 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 개인 게시판 만들기 (4) - 게시판 글 조회수 증가</title>
      <link>https://lightchan.tistory.com/152</link>
      <description>&lt;p&gt;게시글을 클릭하면 조회수가 올라가도록 하는 글을 포스팅 하도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewMapper.xml&lt;/p&gt;
&lt;pre id=&quot;code_1609143516780&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	&amp;lt;!-- 조회수 올리기 --&amp;gt;
	&amp;lt;update id=&quot;updatereviewcnt&quot;&amp;gt;
		update reviewTable set reCnt = reCnt + 1 where reNum = #{reNum}
	&amp;lt;/update&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;update문으로 조회수(reCnt)를 1씩 증가시켜주도록 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewmapper.java&lt;/p&gt;
&lt;pre id=&quot;code_1609143564892&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 문의글 조회수 올리기
	public int updatereviewcnt(String reNum);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;reviewService.java&lt;/p&gt;
&lt;pre id=&quot;code_1609143587260&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 조회수 올리기
	public int updatereviewcnt(String reNum) throws Exception {
		return reviewmapper.updatereviewcnt(reNum);
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewController.java&lt;/p&gt;
&lt;pre id=&quot;code_1609143628796&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 게시글 자세히보기
	@RequestMapping(value=&quot;/detailreview&quot;)
	public ModelAndView detail(@RequestParam(&quot;reNum&quot;) String reNum) throws Exception {
		
		// 기존의 게시글 자세히 보기에서 추가된 부분
		reviewservice.updatereviewcnt(reNum);
		
		return new ModelAndView(&quot;detail&quot;,&quot;detail1&quot;,reviewservice.detail(reNum));
	}
    
    // 추가된 부분
    // reviewservice.updatereviewcnt(reNum);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;글을 누르기 전&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw0eQm/btqRAk8ajA8/IXu5nn1Z80l4sOmwNk2l5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw0eQm/btqRAk8ajA8/IXu5nn1Z80l4sOmwNk2l5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw0eQm/btqRAk8ajA8/IXu5nn1Z80l4sOmwNk2l5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw0eQm%2FbtqRAk8ajA8%2FIXu5nn1Z80l4sOmwNk2l5k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;글을 누른 후&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n6DP4/btqRI8lw6ak/JkMrj2KBAhiYNFWSEx51KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n6DP4/btqRI8lw6ak/JkMrj2KBAhiYNFWSEx51KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n6DP4/btqRI8lw6ak/JkMrj2KBAhiYNFWSEx51KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn6DP4%2FbtqRI8lw6ak%2FJkMrj2KBAhiYNFWSEx51KK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwZC9I/btqROfxCKLY/9pfkCFEkh5DUkcKKHJprSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwZC9I/btqROfxCKLY/9pfkCFEkh5DUkcKKHJprSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwZC9I/btqROfxCKLY/9pfkCFEkh5DUkcKKHJprSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwZC9I%2FbtqROfxCKLY%2F9pfkCFEkh5DUkcKKHJprSk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring/Spring 게시판 만들기</category>
      <category>Java</category>
      <category>mapper</category>
      <category>mybatis</category>
      <category>Spring</category>
      <category>springboot</category>
      <category>SQL</category>
      <category>게시글</category>
      <category>조회수</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/152</guid>
      <comments>https://lightchan.tistory.com/152#entry152comment</comments>
      <pubDate>Mon, 28 Dec 2020 17:21:58 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 개인 게시판 만들기 (4) - 게시판 글 등록,수정,삭제</title>
      <link>https://lightchan.tistory.com/151</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;게시판 글쓰기 기능&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;글 등록하기&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewController.java&lt;/p&gt;
&lt;pre id=&quot;code_1609068472965&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 게시판 글쓰기 기능
	@GetMapping(&quot;/write&quot;)
	public String writeform() throws Exception{
		return &quot;/writeform&quot;;
	}
	@PostMapping(&quot;insert&quot;)
	public String insertreview(reviewVo reviewvo) throws Exception{
		boolean result = reviewservice.insertreview(reviewvo);
		if (result) {
			return &quot;success&quot;;
		} else {
			return &quot;error&quot;;
		}
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewMapper.xml&lt;/p&gt;
&lt;pre id=&quot;code_1609068484668&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	&amp;lt;!-- 게시판 글쓰기 기능 --&amp;gt;
	&amp;lt;insert id=&quot;insertreview&quot;&amp;gt;
		insert into reviewTable(reTitle, reContent, reUser)  values(#{reTitle}, #{reContent}, #{reUser})
	&amp;lt;/insert&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;reviewmapper.java&lt;/p&gt;
&lt;pre id=&quot;code_1609068499259&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 문의 글 쓰기
	public boolean insertreview(reviewVo reviewvo) throws Exception;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;reviewService.java&lt;/p&gt;
&lt;pre id=&quot;code_1609068525661&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 게시글 작성 
	public boolean insertreview(reviewVo reviewvo) throws Exception {
		return reviewmapper.insertreview(reviewvo);
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;writeform.jsp&lt;/p&gt;
&lt;pre id=&quot;code_1609068604835&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
** 글쓰기 **
&amp;lt;form action=&quot;insert&quot; method=&quot;post&quot;&amp;gt;
글제목: &amp;lt;input type=&quot;text&quot; name=&quot;reTitle&quot;&amp;gt;&amp;lt;br&amp;gt;
작성자: &amp;lt;input type=&quot;text&quot; name=&quot;reUser&quot;&amp;gt;&amp;lt;br&amp;gt;
글내용: &amp;lt;textarea rows=&quot;5&quot; cols=&quot;30&quot; name=&quot;reContent&quot;&amp;gt;&amp;lt;/textarea&amp;gt;
&amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
&amp;lt;input type=&quot;submit&quot; value=&quot;저장&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kS9UT/btqRv9MffTi/O7CVmEnAva3PR5yKlQ1emk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kS9UT/btqRv9MffTi/O7CVmEnAva3PR5yKlQ1emk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kS9UT/btqRv9MffTi/O7CVmEnAva3PR5yKlQ1emk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkS9UT%2FbtqRv9MffTi%2FO7CVmEnAva3PR5yKlQ1emk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&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;list.jsp의 내용을 변경&lt;/p&gt;
&lt;pre id=&quot;code_1609068846757&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;td&amp;gt;&amp;lt;a href=&quot;detailreview?reNum=${item.reNum}&quot;&amp;gt;${item.reTitle}&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewService.java 추가&lt;/p&gt;
&lt;pre id=&quot;code_1609068875548&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 게시글 상세보기
	public reviewVo detail(Integer reNum) throws Exception {
		return reviewmapper.detail(reNum);
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewController.java 내용 추가&lt;/p&gt;
&lt;pre id=&quot;code_1609068922211&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 게시글 자세히보기
	@RequestMapping(value=&quot;/detailreview&quot;)
	public ModelAndView detail(@RequestParam(&quot;reNum&quot;) int reNum) throws Exception {
		
		// 
		return new ModelAndView(&quot;detail&quot;,&quot;detail&quot;,reviewservice.detail(reNum));
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewmapper.java 내용 추가&lt;/p&gt;
&lt;pre id=&quot;code_1609068951474&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 문의글 상세 보기
	public reviewVo detail(Integer reNum) throws Exception;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewMapper.xml 내용 추가&lt;/p&gt;
&lt;pre id=&quot;code_1609068972098&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	&amp;lt;!-- 게시글 상세보기 --&amp;gt;
	&amp;lt;select id=&quot;detail&quot; resultType=&quot;reviewVo&quot;&amp;gt;
		select * from reviewTable where reNum = #{reNum}
	&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;detail.jsp&lt;/p&gt;
&lt;pre id=&quot;code_1609068992147&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
window.onload = function() {
	document.getElementById(&quot;btnList&quot;).onclick = function() {
		location.href=&quot;/&quot;;
	}
	document.getElementById(&quot;btnUpdate&quot;).onclick = function() {
		
		if(confirm(&quot;정말수정할까요&quot;)) {
	
			frm.action=&quot;/updatereview&quot;;
			frm.submit();
		}
	}
	document.getElementById(&quot;btnDelete&quot;).onclick = function() {
		if(confirm(&quot;정말 삭제할까요?&quot;)) {
			frm.action=&quot;deletereview&quot;;
			frm.submit();
		}
	}
}
&amp;lt;/script&amp;gt;

&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
** 상세보기 **
&amp;lt;br&amp;gt;
&amp;lt;form name=&quot;frm&quot; method=&quot;get&quot;&amp;gt;
&amp;lt;table border=&quot;2&quot;&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;번호&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;${detail1.reNum}&amp;lt;/td&amp;gt;
		&amp;lt;input type=&quot;hidden&quot; value=&quot;${detail1.reNum}&quot; name=&quot;reNum&quot;&amp;gt;
		
	&amp;lt;/tr&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;작성자&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;${detail1.reUser}&amp;lt;/td&amp;gt;	
	&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;제목&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;${detail1.reTitle}&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;글내용&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;${detail1.reUser}&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
	&amp;lt;/tr&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;작성일&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;${detail1.reregisterDate}&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;조회수&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;${detail1.reCnt}&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
		&amp;lt;tr colspan=&quot;3&quot;&amp;gt;
		&amp;lt;td&amp;gt;
		&amp;lt;input type=&quot;button&quot; value=&quot;목록&quot; id=&quot;btnList&quot;&amp;gt;
		&amp;lt;input type=&quot;button&quot; value=&quot;수정&quot; id=&quot;btnUpdate&quot;&amp;gt;
		&amp;lt;input type=&quot;button&quot; value=&quot;삭제&quot; id=&quot;btnDelete&quot;&amp;gt;
		&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;글을 눌렀을때 나오는 결과 페이지&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/exSHI9/btqRqaMd0kk/zuk94Uyw6eSuD78xBBkke0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/exSHI9/btqRqaMd0kk/zuk94Uyw6eSuD78xBBkke0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/exSHI9/btqRqaMd0kk/zuk94Uyw6eSuD78xBBkke0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FexSHI9%2FbtqRqaMd0kk%2Fzuk94Uyw6eSuD78xBBkke0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2isaE/btqRqbEndgM/LA789hnlivLLLIXJvPZee1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2isaE/btqRqbEndgM/LA789hnlivLLLIXJvPZee1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2isaE/btqRqbEndgM/LA789hnlivLLLIXJvPZee1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2isaE%2FbtqRqbEndgM%2FLA789hnlivLLLIXJvPZee1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;글 수정하기&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;우선 상세보기에 사용하였던 메소드를 수정할 jsp 폼에 불러옵니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewController.java&lt;/p&gt;
&lt;pre id=&quot;code_1609076119692&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	@GetMapping(&quot;/updatereview&quot;)
	// 여기서 RequestParam(&quot;num&quot;)은 detail.jsp에서 input 값의 reNum
	public ModelAndView update(@RequestParam(&quot;reNum&quot;) String reNum) throws Exception {
		
		return new ModelAndView(&quot;upform&quot;,&quot;up&quot;,reviewservice.detail(reNum));
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;upform.jsp&lt;/p&gt;
&lt;pre id=&quot;code_1609076146460&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;Insert title here&amp;lt;/title&amp;gt;
&amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
window.onload = function() {

	document.getElementById(&quot;btnUpdate&quot;).onclick = function() {
		
		if(confirm(&quot;정말수정할까요&quot;)) {
	
			frm.action=&quot;updatereviewcommit&quot;;
			frm.submit();
		}
	}
}
&amp;lt;/script&amp;gt;

&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
** 수정하기 **
&amp;lt;br&amp;gt;
&amp;lt;form name=&quot;frm&quot; method=&quot;post&quot;&amp;gt;
&amp;lt;table border=&quot;2&quot;&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;번호&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;${up.reNum}&amp;lt;/td&amp;gt;
		&amp;lt;input type=&quot;hidden&quot; value=&quot;${up.reNum}&quot; name=&quot;reNum&quot;&amp;gt;
		
	&amp;lt;/tr&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;작성자&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;${up.reUser}&amp;lt;/td&amp;gt;	
	&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;제목&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;&amp;lt;input type=&quot;text&quot; value=&quot;${up.reTitle}&quot; name=&quot;reTitle&quot;&amp;gt;&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
		&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;글내용&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;&amp;lt;textarea rows=&quot;5&quot; cols=&quot;50&quot; name=&quot;reContent&quot;&amp;gt;${up.reContent}&amp;lt;/textarea&amp;gt;&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
	&amp;lt;/tr&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;작성일&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;${up.reregisterDate}&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
	&amp;lt;tr&amp;gt;
		&amp;lt;td&amp;gt;조회수&amp;lt;/td&amp;gt;
		&amp;lt;td&amp;gt;${up.reCnt}&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
		&amp;lt;tr colspan=&quot;3&quot;&amp;gt;
		&amp;lt;td colspan=&quot;3&quot;&amp;gt;
		&amp;lt;input type=&quot;button&quot; value=&quot;수정&quot; id=&quot;btnUpdate&quot; style=&quot;margin: auto; width: 100%;&quot;&amp;gt;
		&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
&amp;lt;/table&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GoUXl/btqRqR6JFcH/3emPNGDI5CX2fwTgi2sXJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GoUXl/btqRqR6JFcH/3emPNGDI5CX2fwTgi2sXJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GoUXl/btqRqR6JFcH/3emPNGDI5CX2fwTgi2sXJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGoUXl%2FbtqRqR6JFcH%2F3emPNGDI5CX2fwTgi2sXJk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 제목과 내용을 수정 후 수정하기 버튼을 클릭 하면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;reviewMapper.xml&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1609076266012&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 문의글 수정하기
	int updatereview(reviewVo vo) throws Exception;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;reviewmapper.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1609076290363&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 문의글 수정하기
	int updatereview(reviewVo vo) throws Exception;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;reviewService.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1609076245523&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 게시글 수정하기
	public int updatereview(reviewVo vo) throws Exception {
		return reviewmapper.updatereview(vo);
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;reviewController.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1609076303053&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	@PostMapping(&quot;/updatereviewcommit&quot;)
	public String updatesubmit(reviewVo vo) throws Exception {
		int result = reviewservice.updatereview(vo);
		System.out.println(&quot;result &quot; + result);
		if ( result &amp;gt; 0 )
			return &quot;redirect:/&quot;;
		else
			return &quot;error&quot;;
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;현재 10번 글을 수정해보겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cSfp11/btqRqRFGB9u/8kCJp5Zqm3OH3EXAd0F59k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cSfp11/btqRqRFGB9u/8kCJp5Zqm3OH3EXAd0F59k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cSfp11/btqRqRFGB9u/8kCJp5Zqm3OH3EXAd0F59k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcSfp11%2FbtqRqRFGB9u%2F8kCJp5Zqm3OH3EXAd0F59k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvEysJ/btqRI7TV0mz/l9ICyVBZHodVfyYxV9wo6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvEysJ/btqRI7TV0mz/l9ICyVBZHodVfyYxV9wo6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvEysJ/btqRI7TV0mz/l9ICyVBZHodVfyYxV9wo6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvEysJ%2FbtqRI7TV0mz%2Fl9ICyVBZHodVfyYxV9wo6k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baepHz/btqRCUU9Zrh/5qKyfPXCKwd2pmvALFV5Y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baepHz/btqRCUU9Zrh/5qKyfPXCKwd2pmvALFV5Y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baepHz/btqRCUU9Zrh/5qKyfPXCKwd2pmvALFV5Y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaepHz%2FbtqRCUU9Zrh%2F5qKyfPXCKwd2pmvALFV5Y1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;글 삭제하기&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;reviewMapper.xml&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1609076810267&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	&amp;lt;!-- 글 삭제하기 --&amp;gt;
	&amp;lt;delete id=&quot;deletereview&quot;&amp;gt;
		delete from reviewTable where reNum = #{reNum}
	&amp;lt;/delete&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;reviewmapper.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1609076826627&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 게시글 삭제하기
	public int deletereview(String num) throws Exception;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;reviewService.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1609076843187&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	// 게시글 삭제하기
	public int deletereview(String num) throws Exception {
		// TODO Auto-generated method stub
		return reviewmapper.deletereview(num);
	}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;reviewController.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1609076856626&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	
	// 게시글 삭제하기
	@GetMapping(&quot;/deletereview&quot;)
	public String del(@RequestParam(&quot;reNum&quot;) String num) throws Exception {
		int delresult = reviewservice.deletereview(num);
		if(delresult &amp;gt; 0 )
			return &quot;redirect:/&quot;;
		else
			return &quot;error&quot;;
	}
	&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uprVI/btqRCU8FTYh/jg13OlBdDV02MxwtQVFu80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uprVI/btqRCU8FTYh/jg13OlBdDV02MxwtQVFu80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uprVI/btqRCU8FTYh/jg13OlBdDV02MxwtQVFu80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuprVI%2FbtqRCU8FTYh%2Fjg13OlBdDV02MxwtQVFu80%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현재 글이 10번까지 있는 것을 확인 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;10번 글을 지우도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lvr4Q/btqRAjAUK34/pRVV8YacXKzh8iOWxay5XK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lvr4Q/btqRAjAUK34/pRVV8YacXKzh8iOWxay5XK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lvr4Q/btqRAjAUK34/pRVV8YacXKzh8iOWxay5XK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flvr4Q%2FbtqRAjAUK34%2FpRVV8YacXKzh8iOWxay5XK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;삭제가 정상적으로 된 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring/Spring 게시판 만들기</category>
      <category>Delete</category>
      <category>insert</category>
      <category>mapper</category>
      <category>mybatis</category>
      <category>springboot</category>
      <category>SQL</category>
      <category>Update</category>
      <category>게시판</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/151</guid>
      <comments>https://lightchan.tistory.com/151#entry151comment</comments>
      <pubDate>Sun, 27 Dec 2020 20:25:50 +0900</pubDate>
    </item>
    <item>
      <title>o.s.w.s.r.ResourceHttpRequestHandler : Path with &amp;quot;WEB-INF&amp;quot; or &amp;quot;META-INF&amp;quot;:</title>
      <link>https://lightchan.tistory.com/147</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/143&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/12/17 - [Spring/Spring 개인 프로젝트 도전] - [Spring] 개인 프로젝트 쇼핑몰 만들어보기 (2) - STS 이용 프로젝트 환경 설정, DB연동&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1608313331163&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Spring] 개인 프로젝트 쇼핑몰 만들어보기  (2) - STS 이용 프로젝트 환경 설정, DB연동&quot; data-og-description=&quot;1. 우선 STS를 설치하였다는 전제하에 글을 작성하고있습니다. 다음과 같이 실행되는 장면을 볼 수 있습니다. 자 다음과 같이 어디에 설치 할지 경로를 잡아 주도록 합니다. 2. [File] &amp;gt; [New] &amp;gt; [Spring S&quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/143&quot; data-og-url=&quot;https://lightchan.tistory.com/143&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bODOj5/hyICWMrrxd/yQ7kcbCLNXfVUrdD8HlW4K/img.png?width=800&amp;amp;height=384&amp;amp;face=0_0_800_384,https://scrap.kakaocdn.net/dn/eHM4HR/hyIB8ubuJX/pmxPnf5ts2gmmlHbNQY7V0/img.png?width=800&amp;amp;height=384&amp;amp;face=0_0_800_384,https://scrap.kakaocdn.net/dn/F3W7O/hyIB8HJo1U/CX4oRdTV07C1DZsrn1GRW1/img.png?width=646&amp;amp;height=741&amp;amp;face=0_0_646_741&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/143&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/143&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bODOj5/hyICWMrrxd/yQ7kcbCLNXfVUrdD8HlW4K/img.png?width=800&amp;amp;height=384&amp;amp;face=0_0_800_384,https://scrap.kakaocdn.net/dn/eHM4HR/hyIB8ubuJX/pmxPnf5ts2gmmlHbNQY7V0/img.png?width=800&amp;amp;height=384&amp;amp;face=0_0_800_384,https://scrap.kakaocdn.net/dn/F3W7O/hyIB8HJo1U/CX4oRdTV07C1DZsrn1GRW1/img.png?width=646&amp;amp;height=741&amp;amp;face=0_0_646_741');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Spring] 개인 프로젝트 쇼핑몰 만들어보기 (2) - STS 이용 프로젝트 환경 설정, DB연동&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;1. 우선 STS를 설치하였다는 전제하에 글을 작성하고있습니다. 다음과 같이 실행되는 장면을 볼 수 있습니다. 자 다음과 같이 어디에 설치 할지 경로를 잡아 주도록 합니다. 2. [File] &amp;gt; [New] &amp;gt; [Spring S&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>내 시간을 잡아먹는 에러</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/147</guid>
      <comments>https://lightchan.tistory.com/147#entry147comment</comments>
      <pubDate>Sat, 19 Dec 2020 02:42:14 +0900</pubDate>
    </item>
    <item>
      <title>[에러] Failed to configure a DataSource: 'url' attribute is not specified</title>
      <link>https://lightchan.tistory.com/146</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/143&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/12/17 - [Spring/Spring 개인 프로젝트 도전] - [Spring] 개인 프로젝트 쇼핑몰 만들어보기 (2) - STS 이용 프로젝트 환경 설정, DB연동&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1608313255406&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Spring] 개인 프로젝트 쇼핑몰 만들어보기  (2) - STS 이용 프로젝트 환경 설정, DB연동&quot; data-og-description=&quot;1. 우선 STS를 설치하였다는 전제하에 글을 작성하고있습니다. 다음과 같이 실행되는 장면을 볼 수 있습니다. 자 다음과 같이 어디에 설치 할지 경로를 잡아 주도록 합니다. 2. [File] &amp;gt; [New] &amp;gt; [Spring S&quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/143&quot; data-og-url=&quot;https://lightchan.tistory.com/143&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bODOj5/hyICWMrrxd/yQ7kcbCLNXfVUrdD8HlW4K/img.png?width=800&amp;amp;height=384&amp;amp;face=0_0_800_384,https://scrap.kakaocdn.net/dn/eHM4HR/hyIB8ubuJX/pmxPnf5ts2gmmlHbNQY7V0/img.png?width=800&amp;amp;height=384&amp;amp;face=0_0_800_384,https://scrap.kakaocdn.net/dn/F3W7O/hyIB8HJo1U/CX4oRdTV07C1DZsrn1GRW1/img.png?width=646&amp;amp;height=741&amp;amp;face=0_0_646_741&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/143&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/143&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bODOj5/hyICWMrrxd/yQ7kcbCLNXfVUrdD8HlW4K/img.png?width=800&amp;amp;height=384&amp;amp;face=0_0_800_384,https://scrap.kakaocdn.net/dn/eHM4HR/hyIB8ubuJX/pmxPnf5ts2gmmlHbNQY7V0/img.png?width=800&amp;amp;height=384&amp;amp;face=0_0_800_384,https://scrap.kakaocdn.net/dn/F3W7O/hyIB8HJo1U/CX4oRdTV07C1DZsrn1GRW1/img.png?width=646&amp;amp;height=741&amp;amp;face=0_0_646_741');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Spring] 개인 프로젝트 쇼핑몰 만들어보기 (2) - STS 이용 프로젝트 환경 설정, DB연동&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 우선 STS를 설치하였다는 전제하에 글을 작성하고있습니다. 다음과 같이 실행되는 장면을 볼 수 있습니다. 자 다음과 같이 어디에 설치 할지 경로를 잡아 주도록 합니다. 2. [File] &amp;gt; [New] &amp;gt; [Spring S&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 포스팅한 글에 작성 !&lt;/p&gt;</description>
      <category>내 시간을 잡아먹는 에러</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/146</guid>
      <comments>https://lightchan.tistory.com/146#entry146comment</comments>
      <pubDate>Sat, 19 Dec 2020 02:41:10 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 개인 게시판 만들기 (3) - DB 생성, Mybatis 설정 후 웹 출력</title>
      <link>https://lightchan.tistory.com/145</link>
      <description>&lt;p&gt;가장 기본적인 테이블인 고객 테이블이랑 상품 테이블부터 만들도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1608638155638&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Maria DB - 데이터베이스 테이블 만들기&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;userTable&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1608450259897&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE userTable (
	userId VARCHAR(20),
	userPw VARCHAR(20) NOT null,
	userPw1 VARCHAR(20) NOT null,
	userTel VARCHAR(20) NOT NULL,
	userGender VARCHAR(10) NOT NULL,
	userEmail VARCHAR(50) NOT NULL,
	userAddr1 VARCHAR(20) NOT NULL,
	userAddr2 VARCHAR(20) NOT NULL,
	registerDate DATE DEFAULT NOW(),
 	CONSTRAINT userTable_userId_pk PRIMARY KEY(userId)
	) charset=UTF8;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;용도 : 회원 가입시에 사용하기 위함&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;userTable 구성 :&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;span style=&quot;color: #333333;&quot;&gt;- 고객성별&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 고객 이메일&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;productTable&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1608450279753&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE productTable (
	prdNum INT auto_increment,
	prdName VARCHAR(20) NOT null,
	categoryCode VARCHAR(20) NOT null,
	prdPrice int,
	prdCount int,
	prdinfor VARCHAR(300) NOT NULL,
	prdImg VARCHAR(200) NOT NULL,
	prdregisterDate DATE DEFAULT NOW(),
 	CONSTRAINT productTable_prdNum_pk PRIMARY KEY(prdNum)
	) charset=UTF8;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;용도 : 상품들을 홈페이지에 노출 시키고 등록하기 위함&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;productTable 구성:&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;&lt;b&gt;reviewTable&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1608640380431&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE reviewTable (
	reNum INT AUTO_INCREMENT PRIMARY key,
	reTitle VARCHAR(20) NOT null,
	reUser VARCHAR(20) NOT null,
	reregisterDate DATE DEFAULT NOW(),
	reCnt INT DEFAULT 0 # 조회수
	) charset=UTF8;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;옹도 : 고객들의 문의 게시판&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reviewTable 구성&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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1608638328561&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;MariaDB를 사용하기 위한 Pom.xml 설정&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1608638340746&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client --&amp;gt;
		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.mariadb.jdbc&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;mariadb-java-client&amp;lt;/artifactId&amp;gt;
		&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1608638287138&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Java 파일 생성&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DRltw/btqReQel0fg/H5YzfZRUJFegwk1X6wKKAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DRltw/btqReQel0fg/H5YzfZRUJFegwk1X6wKKAk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DRltw/btqReQel0fg/H5YzfZRUJFegwk1X6wKKAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDRltw%2FbtqReQel0fg%2FH5YzfZRUJFegwk1X6wKKAk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;userVo.java&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cg9tNb/btqQXBwDynL/DSHgkLh98zWvnEK5R9lS6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cg9tNb/btqQXBwDynL/DSHgkLh98zWvnEK5R9lS6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cg9tNb/btqQXBwDynL/DSHgkLh98zWvnEK5R9lS6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcg9tNb%2FbtqQXBwDynL%2FDSHgkLh98zWvnEK5R9lS6K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;productVo.java&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wwkbf/btqQ3hkaV0v/QEAVdjerrZzKBSK0JWKTtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wwkbf/btqQ3hkaV0v/QEAVdjerrZzKBSK0JWKTtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wwkbf/btqQ3hkaV0v/QEAVdjerrZzKBSK0JWKTtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwwkbf%2FbtqQ3hkaV0v%2FQEAVdjerrZzKBSK0JWKTtk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;reviewVo.java&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nlj7V/btqQ1Mq8UsJ/PqAMPk1X1yyoFgbUzVxP40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nlj7V/btqQ1Mq8UsJ/PqAMPk1X1yyoFgbUzVxP40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nlj7V/btqQ1Mq8UsJ/PqAMPk1X1yyoFgbUzVxP40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNlj7V%2FbtqQ1Mq8UsJ%2FPqAMPk1X1yyoFgbUzVxP40%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 각각 3개씩 만들었지만 우선 게시판과 하는 일이 비슷한 리뷰 테이블로 테스트 해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1608638539240&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Mapper 설정&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;pom.xml 추가 Mybatis 연동을 위한 설정&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1608643754925&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.mybatis.spring.boot&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;mybatis-spring-boot-starter&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;2.1.2&amp;lt;/version&amp;gt;
		&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;- 위치 : src/main/resources/mappers/reviewMapper.xml&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&amp;nbsp;- 쿼리문의 id와 mapper interface의 메서드명과 일치시킬 것&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1608639213250&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt; 
&amp;lt;!DOCTYPE mapper PUBLIC &quot;-//mybatis.org//DTD Mapper 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis-3-mapper.dtd&quot;&amp;gt;
&amp;lt;mapper namespace=&quot;com.example.mall.mapper.reviewmapper&quot;&amp;gt;
	&amp;lt;select id=&quot;reviewlist&quot; resultType=&quot;reviewVo&quot;&amp;gt;
		select * from reviewTable 
	&amp;lt;/select&amp;gt;
&amp;lt;/mapper&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;application.properties 내용 추가&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1608644021701&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# mybatis entity scan packages 뜻 Model Class Package 경로
# 선택사항입니다. 하지만 사용하지 않으면 mapper 쿼리문마다 Model 클래스 경로 작성
mybatis.type-aliases-package=com.example.mall.domain

# where mapper
# mybatis.mapper-locations : mapper.xml 경로 작성
# 현재 저는 resources경로 밑에 mappers 폴더 하위 전부를 포함하는 의미로 사용했습니다.
mybatis.mapper-locations=mappers/**/*.xml
&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1608640344624&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;com.example.mall.mappers.userMapper는 src/main/resources 밑에 mappers폴더를 만들고 xml 파일명&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위치 : src/main/java 밑에 mapper 폴더 생성 후 아래와 같이 작성&lt;/p&gt;
&lt;p&gt;&lt;b&gt;reviewmapper.java&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1608640647240&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.mall.mapper;

import java.util.List;

import com.example.mall.domain.reviewVo;

public interface reviewmapper {
	
	// 문의 글 조회
	public List&amp;lt;reviewVo&amp;gt; reviewlist() throws Exception;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;reviewService.java&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;위치 src/main/java 밑에 repository 폴더 생성 후 아래와 같이 작성&lt;/p&gt;
&lt;pre id=&quot;code_1608645281371&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.mall.repository;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import com.example.mall.domain.reviewVo;
import com.example.mall.mapper.reviewmapper;


@Service
public class reviewService {

	@Autowired
	private reviewmapper reviewmapper;
	
	// 게시글 조회
	public List&amp;lt;reviewVo&amp;gt; reviewlist() throws Exception {
		// mapper 패키지 안의 reviewmapper.java의 문의글 조회  reviewlist메소드와 일치
		return reviewmapper.reviewlist();
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1608645341380&quot; class=&quot;css&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Controller 작성&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1608645353356&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.mall.controller;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.servlet.ModelAndView;

import com.example.mall.domain.reviewVo;
import com.example.mall.repository.reviewService;

@Controller
@EnableAutoConfiguration
public class reviewController {
	
	@Autowired
	private reviewService reviewservice;
	
	@GetMapping(&quot;/&quot;)
	public ModelAndView relist() throws Exception{
		ModelAndView mav = new ModelAndView(&quot;list&quot;);
		List&amp;lt;reviewVo&amp;gt; reviewlist = reviewservice.reviewlist();
		mav.addObject(&quot;relist&quot;,reviewlist);
		
		return mav;
	}
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1608645388620&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Spring boot 의 templates 에서 jsp가 작동하지 않으므로 다음과 같이 설정&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;pom.xml 에 내용 추가&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1608645431379&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.apache.tomcat.embed&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;tomcat-embed-jasper&amp;lt;/artifactId&amp;gt;
			&amp;lt;scope&amp;gt;provided&amp;lt;/scope&amp;gt;
		&amp;lt;/dependency&amp;gt;
		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;javax.servlet&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;jstl&amp;lt;/artifactId&amp;gt;
		&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;b&gt;추가 후 src/main 폴더 밑에 차례대로 폴더를 생성해줍니다.&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1608645547907&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;webapp -&amp;gt; WEB-INF -&amp;gt; views&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bldNh1/btqQXARZuQJ/a63lDK6WOkOfU0V6WIYGw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bldNh1/btqQXARZuQJ/a63lDK6WOkOfU0V6WIYGw1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bldNh1/btqQXARZuQJ/a63lDK6WOkOfU0V6WIYGw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbldNh1%2FbtqQXARZuQJ%2Fa63lDK6WOkOfU0V6WIYGw1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;application.properties에 다음의 내용 추가&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1608645595524&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring.mvc.view.prefix=/WEB-INF/views/
spring.mvc.view.suffix=.jsp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;총 폴더는 다음과 같다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/br4T2h/btqQ8Mcbpmj/JOlUgl4tEgeCbO0u7opus0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/br4T2h/btqQ8Mcbpmj/JOlUgl4tEgeCbO0u7opus0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/br4T2h/btqQ8Mcbpmj/JOlUgl4tEgeCbO0u7opus0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbr4T2h%2FbtqQ8Mcbpmj%2FJOlUgl4tEgeCbO0u7opus0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현재 제 reviewTable의 값들은 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSSiBI/btqQ3gr2ZSg/K9AVwGqO5QtKfMYkdZJKwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSSiBI/btqQ3gr2ZSg/K9AVwGqO5QtKfMYkdZJKwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSSiBI/btqQ3gr2ZSg/K9AVwGqO5QtKfMYkdZJKwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSSiBI%2FbtqQ3gr2ZSg%2FK9AVwGqO5QtKfMYkdZJKwk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;jsp 파일 생성 후 웹상으로 출력하도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;list.jsp&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYNeJS/btqReQSUw5O/WnspTjeZlK9MkT1pThkD40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYNeJS/btqReQSUw5O/WnspTjeZlK9MkT1pThkD40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYNeJS/btqReQSUw5O/WnspTjeZlK9MkT1pThkD40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYNeJS%2FbtqReQSUw5O%2FWnspTjeZlK9MkT1pThkD40%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;출력 결과&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/czVizt/btqRawAD6cM/EXLENZPEuSFkn6ffy4dR6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/czVizt/btqRawAD6cM/EXLENZPEuSFkn6ffy4dR6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/czVizt/btqRawAD6cM/EXLENZPEuSFkn6ffy4dR6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FczVizt%2FbtqRawAD6cM%2FEXLENZPEuSFkn6ffy4dR6K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;휴 성공,,&lt;/p&gt;
&lt;p&gt;+ 추가적으로 콘솔에 SQL문이 실행되는지 보고싶다면&lt;/p&gt;
&lt;p&gt;pom.xml 에 다음 내용을 추가&lt;/p&gt;
&lt;pre id=&quot;code_1608700208710&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;		&amp;lt;!-- MyBatis sql pretty --&amp;gt;
		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.bgee.log4jdbc-log4j2&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;log4jdbc-log4j2-jdbc4&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;1.16&amp;lt;/version&amp;gt;
		&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;resources 폴더 밑에 2개의 파일은 만들어줍니다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VvudL/btqRcGCZAjX/0Kf6SKbaEf8kZx2mqCsM90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VvudL/btqRcGCZAjX/0Kf6SKbaEf8kZx2mqCsM90/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VvudL/btqRcGCZAjX/0Kf6SKbaEf8kZx2mqCsM90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVvudL%2FbtqRcGCZAjX%2F0Kf6SKbaEf8kZx2mqCsM90%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;b&gt;log4jdbc.log4j2.properties&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1608700261750&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;logback-spring.xml&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1608700281102&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;configuration&amp;gt;
  &amp;lt;appender name=&quot;STDOUT&quot; class=&quot;ch.qos.logback.core.ConsoleAppender&quot;&amp;gt;
    &amp;lt;encoder&amp;gt;
      &amp;lt;pattern&amp;gt;%d{yyyyMMdd HH:mm:ss.SSS} [%thread] %-3level %logger{5} - %msg %n&amp;lt;/pattern&amp;gt;
    &amp;lt;/encoder&amp;gt;
  &amp;lt;/appender&amp;gt;
  
  &amp;lt;logger name=&quot;jdbc&quot; level=&quot;OFF&quot;/&amp;gt;
  
  &amp;lt;logger name=&quot;jdbc.sqlonly&quot; level=&quot;OFF&quot;/&amp;gt;
  &amp;lt;logger name=&quot;jdbc.sqltiming&quot; level=&quot;DEBUG&quot;/&amp;gt;
  &amp;lt;logger name=&quot;jdbc.audit&quot; level=&quot;OFF&quot;/&amp;gt;
  &amp;lt;logger name=&quot;jdbc.resultset&quot; level=&quot;OFF&quot;/&amp;gt;
  &amp;lt;logger name=&quot;jdbc.resultsettable&quot; level=&quot;DEBUG&quot;/&amp;gt;
  &amp;lt;logger name=&quot;jdbc.connection&quot; level=&quot;OFF&quot;/&amp;gt;
  
  &amp;lt;root level=&quot;INFO&quot;&amp;gt;
    &amp;lt;appender-ref ref=&quot;STDOUT&quot; /&amp;gt;
  &amp;lt;/root&amp;gt;
  
&amp;lt;/configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;콘솔 로그창&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kN6UD/btqQ8NWXAzt/HtEf6hTxTPQKPwweGGyov0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kN6UD/btqQ8NWXAzt/HtEf6hTxTPQKPwweGGyov0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kN6UD/btqQ8NWXAzt/HtEf6hTxTPQKPwweGGyov0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkN6UD%2FbtqQ8NWXAzt%2FHtEf6hTxTPQKPwweGGyov0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;gtx-trans&quot; style=&quot;position: absolute; left: -51px; top: 10228px;&quot;&gt;
&lt;div class=&quot;gtx-trans-icon&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Spring/Spring 게시판 만들기</category>
      <category>db</category>
      <category>get</category>
      <category>Set</category>
      <category>Vo</category>
      <category>테이블</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/145</guid>
      <comments>https://lightchan.tistory.com/145#entry145comment</comments>
      <pubDate>Sat, 19 Dec 2020 02:39:48 +0900</pubDate>
    </item>
    <item>
      <title>[에러] the selection did not contain any resources that can run on a server</title>
      <link>https://lightchan.tistory.com/144</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;에러명 : the selection did not contain any resources that can run on a server&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rZppw/btqQu30U2lO/6Nh85qwCTWUI7LIs8p3DhK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rZppw/btqQu30U2lO/6Nh85qwCTWUI7LIs8p3DhK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rZppw/btqQu30U2lO/6Nh85qwCTWUI7LIs8p3DhK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrZppw%2FbtqQu30U2lO%2F6Nh85qwCTWUI7LIs8p3DhK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;519&quot; height=&quot;148&quot; data-origin-width=&quot;519&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 프로젝트 우클릭후 들어가준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;307&quot; data-origin-height=&quot;693&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cg4AgW/btqQu5qM6eL/BRt5wlzf7HW8a3NhFaRky1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cg4AgW/btqQu5qM6eL/BRt5wlzf7HW8a3NhFaRky1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cg4AgW/btqQu5qM6eL/BRt5wlzf7HW8a3NhFaRky1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcg4AgW%2FbtqQu5qM6eL%2FBRt5wlzf7HW8a3NhFaRky1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;307&quot; height=&quot;693&quot; data-origin-width=&quot;307&quot; data-origin-height=&quot;693&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;533&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ees4cl/btqQCAiZts3/80ksRi8rXFmES2hcNoxGHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ees4cl/btqQCAiZts3/80ksRi8rXFmES2hcNoxGHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ees4cl/btqQCAiZts3/80ksRi8rXFmES2hcNoxGHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fees4cl%2FbtqQCAiZts3%2F80ksRi8rXFmES2hcNoxGHk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;767&quot; height=&quot;533&quot; data-origin-width=&quot;767&quot; data-origin-height=&quot;533&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음과 같이 [Project Facets] 에서 Dynamic Web Module 체크 후 저장해준다.&lt;/p&gt;
&lt;div id=&quot;gtx-trans&quot; style=&quot;position: absolute; left: 752px; top: 70px;&quot;&gt;
&lt;div class=&quot;gtx-trans-icon&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>내 시간을 잡아먹는 에러</category>
      <category>스프링</category>
      <category>에러</category>
      <category>웹</category>
      <category>이클립스</category>
      <category>자바</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/144</guid>
      <comments>https://lightchan.tistory.com/144#entry144comment</comments>
      <pubDate>Fri, 18 Dec 2020 02:50:16 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] 개인 게시판 만들기  (2) - STS 이용 프로젝트 환경 설정, DB연동</title>
      <link>https://lightchan.tistory.com/143</link>
      <description>&lt;p&gt;1. 우선 STS를 설치하였다는 전제하에 글을 작성하고있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음과 같이 실행되는 장면을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SRXpD/btqQDFdhyHA/e0Y9ZWr7kXufEXPhMurZXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SRXpD/btqQDFdhyHA/e0Y9ZWr7kXufEXPhMurZXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SRXpD/btqQDFdhyHA/e0Y9ZWr7kXufEXPhMurZXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSRXpD%2FbtqQDFdhyHA%2Fe0Y9ZWr7kXufEXPhMurZXK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;자 다음과 같이 어디에 설치 할지 경로를 잡아 주도록 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oyWL9/btqQu5qKDfW/6flA9OJZdmYmTJIdCmgkDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oyWL9/btqQu5qKDfW/6flA9OJZdmYmTJIdCmgkDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oyWL9/btqQu5qKDfW/6flA9OJZdmYmTJIdCmgkDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoyWL9%2FbtqQu5qKDfW%2F6flA9OJZdmYmTJIdCmgkDK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GgwKh/btqQCyS2nZJ/crEFldv7KF4yalJ1AsjKd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GgwKh/btqQCyS2nZJ/crEFldv7KF4yalJ1AsjKd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GgwKh/btqQCyS2nZJ/crEFldv7KF4yalJ1AsjKd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGgwKh%2FbtqQCyS2nZJ%2FcrEFldv7KF4yalJ1AsjKd0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. [File] &amp;gt; [New] &amp;gt; [Spring Starter Project]&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IYenM/btqQptFYLcD/19kz9tIVU2SRwyfLMjWuyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IYenM/btqQptFYLcD/19kz9tIVU2SRwyfLMjWuyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IYenM/btqQptFYLcD/19kz9tIVU2SRwyfLMjWuyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIYenM%2FbtqQptFYLcD%2F19kz9tIVU2SRwyfLMjWuyk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. 설정 화면 필요한 것들을 넣어주도록 한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mM1m8/btqQCAcixTj/fEJNngSFuAjYVYhV7fTkKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mM1m8/btqQCAcixTj/fEJNngSFuAjYVYhV7fTkKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mM1m8/btqQCAcixTj/fEJNngSFuAjYVYhV7fTkKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmM1m8%2FbtqQCAcixTj%2FfEJNngSFuAjYVYhV7fTkKK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Penx2/btqQCyMfiPM/pL8ZUt44vXKbtRmkZGbdI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Penx2/btqQCyMfiPM/pL8ZUt44vXKbtRmkZGbdI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Penx2/btqQCyMfiPM/pL8ZUt44vXKbtRmkZGbdI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPenx2%2FbtqQCyMfiPM%2FpL8ZUt44vXKbtRmkZGbdI0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. 실행 해주도록 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/91uq2/btqQssNHqoc/YAqtNfVs5MKmr33b381Q9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/91uq2/btqQssNHqoc/YAqtNfVs5MKmr33b381Q9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/91uq2/btqQssNHqoc/YAqtNfVs5MKmr33b381Q9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F91uq2%2FbtqQssNHqoc%2FYAqtNfVs5MKmr33b381Q9k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3fKvH/btqQt6jgfid/38sDzgvb59kfhGI2lauhf0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3fKvH/btqQt6jgfid/38sDzgvb59kfhGI2lauhf0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3fKvH/btqQt6jgfid/38sDzgvb59kfhGI2lauhf0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3fKvH%2FbtqQt6jgfid%2F38sDzgvb59kfhGI2lauhf0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;위와 같은 에러가 나타났습니다. 해당 오류는 Gradle 프로젝트 생성 후 DB 관련 dependencies를 설정하지 않아서 뜨는 오류입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;u&gt;해결 방법:&amp;nbsp;&lt;/u&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;build.gradle 파일에 아래와 같은 내용을 추가해줍니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NGBCf/btqQps1tQt6/E2o0waGqwzNyLMUekVD3k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NGBCf/btqQps1tQt6/E2o0waGqwzNyLMUekVD3k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NGBCf/btqQps1tQt6/E2o0waGqwzNyLMUekVD3k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNGBCf%2FbtqQps1tQt6%2FE2o0waGqwzNyLMUekVD3k1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;그리고, /src/main/resources/application.properties 안에 다음과 같은 DB 정보를 입력해주도록 합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NrMfk/btqQCz5vSlW/T1pMB5M8JHwSF8RdBq6PSK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NrMfk/btqQCz5vSlW/T1pMB5M8JHwSF8RdBq6PSK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NrMfk/btqQCz5vSlW/T1pMB5M8JHwSF8RdBq6PSK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNrMfk%2FbtqQCz5vSlW%2FT1pMB5M8JHwSF8RdBq6PSK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이후에 다시 실행해주면 성공하는 코드가 나타나야 합니다 !&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qx7g2/btqQE87p7Pg/oLnilpZIYFvHmJUTU3LVlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qx7g2/btqQE87p7Pg/oLnilpZIYFvHmJUTU3LVlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qx7g2/btqQE87p7Pg/oLnilpZIYFvHmJUTU3LVlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqx7g2%2FbtqQE87p7Pg%2FoLnilpZIYFvHmJUTU3LVlK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;5. 이제 jsp 파일을 생성해서 실행해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래와 같이 없는 디렉토리들을 생성해준 후 views 디렉토리 아래 테스트해볼 jsp파일을 생성해주고 안에 내용은 자신의 기호에 맞게 작성해주도록 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxTD5N/btqQKuCT7Tb/CkGKcR1LIAMNVTFTXNZgQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxTD5N/btqQKuCT7Tb/CkGKcR1LIAMNVTFTXNZgQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxTD5N/btqQKuCT7Tb/CkGKcR1LIAMNVTFTXNZgQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxTD5N%2FbtqQKuCT7Tb%2FCkGKcR1LIAMNVTFTXNZgQ0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;저는 아래와 같이 만들어 주었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;spring.jsp&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dhmeqR/btqQCzFNGtz/UsNZWttLVzhhnLQZkX9D2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dhmeqR/btqQCzFNGtz/UsNZWttLVzhhnLQZkX9D2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dhmeqR/btqQCzFNGtz/UsNZWttLVzhhnLQZkX9D2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdhmeqR%2FbtqQCzFNGtz%2FUsNZWttLVzhhnLQZkX9D2k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그 다음으로 controller 파일을 생성해주도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;* 중간에 디자인이 바뀐점은 제가 테마를 바꿔서 그렇습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lptww/btqQKtRz9rK/XqkPC6xjfsoJ3E1XaHDbv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lptww/btqQKtRz9rK/XqkPC6xjfsoJ3E1XaHDbv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lptww/btqQKtRz9rK/XqkPC6xjfsoJ3E1XaHDbv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flptww%2FbtqQKtRz9rK%2FXqkPC6xjfsoJ3E1XaHDbv1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;lt;testcontroller.java&amp;gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcEzCF/btqQLlFIBOH/t9P4y37QIcNa8nJcAH02q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcEzCF/btqQLlFIBOH/t9P4y37QIcNa8nJcAH02q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcEzCF/btqQLlFIBOH/t9P4y37QIcNa8nJcAH02q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcEzCF%2FbtqQLlFIBOH%2Ft9P4y37QIcNa8nJcAH02q0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;6. /src/main/resources/application.properties 에 다시 아래와 같은 내용을 추가 해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blx0hu/btqQJD0979P/QK7aUOm7i8TKUY5X6qCdrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blx0hu/btqQJD0979P/QK7aUOm7i8TKUY5X6qCdrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blx0hu/btqQJD0979P/QK7aUOm7i8TKUY5X6qCdrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fblx0hu%2FbtqQJD0979P%2FQK7aUOm7i8TKUY5X6qCdrK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이렇게 하고 실행이 되어야하는데 이러한 에러와 로그가 발생합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chsgzO/btqQIV14YA6/hAR8TtQxWg1ozBxkevvyH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chsgzO/btqQIV14YA6/hAR8TtQxWg1ozBxkevvyH1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chsgzO/btqQIV14YA6/hAR8TtQxWg1ozBxkevvyH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchsgzO%2FbtqQIV14YA6%2FhAR8TtQxWg1ozBxkevvyH1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zwM8D/btqQJElt422/xGZXCaTkfJK6QKdBF8Trl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zwM8D/btqQJElt422/xGZXCaTkfJK6QKdBF8Trl1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zwM8D/btqQJElt422/xGZXCaTkfJK6QKdBF8Trl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzwM8D%2FbtqQJElt422%2FxGZXCaTkfJK6QKdBF8Trl1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;&lt;b&gt;해결 방법 :&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;build.gradle&amp;nbsp; dependencies 안에 내용을 추가해줍니다.&lt;/p&gt;
&lt;p&gt;제가 공부하고자 포스팅하지만 혹시나 검색 도중 필요하신 분이 계시다면 복사 붙여넣기가 가능하실 수 있게 스크린샷이 아닌 코드블럭으로 작성하겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1608312534289&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;	compile('org.apache.tomcat.embed:tomcat-embed-jasper')
	compile('javax.servlet:jstl:1.2')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;* 주의 * 작성하신 후 해당 프로젝트 우클릭 [Gradle] -&amp;gt; [Refresh Gradle Project] 해주셔야합니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cqzDfn/btqQBG59Bet/zoYvdeGQkFvxRqLVe5cCfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cqzDfn/btqQBG59Bet/zoYvdeGQkFvxRqLVe5cCfK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cqzDfn/btqQBG59Bet/zoYvdeGQkFvxRqLVe5cCfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcqzDfn%2FbtqQBG59Bet%2FzoYvdeGQkFvxRqLVe5cCfK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같이 자신이 views 안에 만든 .jsp 파일이 정상적으로 실행되면 성공한 것입니다.&lt;/p&gt;</description>
      <category>Spring/Spring 게시판 만들기</category>
      <category>db</category>
      <category>gradle</category>
      <category>JSP</category>
      <category>MariaDB</category>
      <category>spring boot</category>
      <category>STS</category>
      <category>webproject</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/143</guid>
      <comments>https://lightchan.tistory.com/143#entry143comment</comments>
      <pubDate>Thu, 17 Dec 2020 23:59:00 +0900</pubDate>
    </item>
    <item>
      <title>[MaBatis] MyBatis 란?</title>
      <link>https://lightchan.tistory.com/140</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;MyBatis 란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;자바 오브젝트와 SQL문 사이의 자동 매핑기능을 지원하는 ORM 프레임워크이다.&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- MyBatis는 SQL을 별도의 파일로 분리해서 관리&lt;/p&gt;
&lt;p&gt;- JDBC 코드의 불편함을 해소 해줌&lt;/p&gt;
&lt;p&gt;- SQL이 변경되어도 자바 코드를 수정할 필요가 없다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;MyBatis 컴포넌트&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;- SqlMapConfig.xml : DB 접속 주소 정보나 Mapping 파일의 경로 제공&lt;/p&gt;
&lt;p&gt;- SqlSession FactoryBuilder : MyBatis 설정 파일을 바탕으로 SqlSessionFactory를 생성&lt;/p&gt;
&lt;p&gt;- SqlSessionFactory : SqlSession을 생성&lt;/p&gt;
&lt;p&gt;- SqlSession : SQL 실행 또는 트랜잭션 관리&lt;/p&gt;
&lt;p&gt;- Mapping 파일 : SQL문과 ORM 설정&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;MyBatis-Spring의 컴포넌트&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;- sqlMapConfig.xml : VO 객체의 정보 설정&lt;/p&gt;
&lt;p&gt;- SqlSessionFactoryBean : MyBatis 설정파일을 바탕으로 SqlSessionFactory 생성 후 Spring Bean으로 등록&lt;/p&gt;
&lt;p&gt;- SqlSessionTemplate SQL 실행이나 트랜잭션 관리&lt;/p&gt;
&lt;p&gt;- Mapping 파일 : SQL문과 ORM 설정&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- Bean 파일 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;SqlSessionFactoryBean&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;SqlSessionTemplate을 Bean으로 설정&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Spring/새롭게 얻은 정보들</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/140</guid>
      <comments>https://lightchan.tistory.com/140#entry140comment</comments>
      <pubDate>Tue, 15 Dec 2020 01:00:23 +0900</pubDate>
    </item>
    <item>
      <title>[에러] java.lang.ClassNotFoundException: org.springframework.util.ConcurrentReferenceHashMap</title>
      <link>https://lightchan.tistory.com/133</link>
      <description>&lt;p&gt;Maven 프로젝트로 게시판을 짜던 도중 아래와 같은 오류가 발생하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JCoo5/btqPldbOUrz/Xcxt22gT8Ho6E68pC1miiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JCoo5/btqPldbOUrz/Xcxt22gT8Ho6E68pC1miiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JCoo5/btqPldbOUrz/Xcxt22gT8Ho6E68pC1miiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJCoo5%2FbtqPldbOUrz%2FXcxt22gT8Ho6E68pC1miiK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해결 방법 :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;servlet을 찾지 못하는 에러로 해결 방법은 기존의 dependency 들의 버젼을 아래 그림과 같이 변경해주도록합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;pom.xml 의 spring 버전 3.1.1에서 5.0.0 으로 바꿔주었더니 해결이 가능하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YGh7W/btqPdTF3IZx/7eQHgATxa7ysBL9NqZkP40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YGh7W/btqPdTF3IZx/7eQHgATxa7ysBL9NqZkP40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YGh7W/btqPdTF3IZx/7eQHgATxa7ysBL9NqZkP40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYGh7W%2FbtqPdTF3IZx%2F7eQHgATxa7ysBL9NqZkP40%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>내 시간을 잡아먹는 에러</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/133</guid>
      <comments>https://lightchan.tistory.com/133#entry133comment</comments>
      <pubDate>Sun, 6 Dec 2020 23:11:39 +0900</pubDate>
    </item>
    <item>
      <title>[에러] java: package org.springframework.jdbc.datasource does not exist</title>
      <link>https://lightchan.tistory.com/132</link>
      <description>&lt;p&gt;인프런에서 김영한 강사님께서 진행해주시는 &quot;&lt;span style=&quot;color: #333333;&quot;&gt;스프링 입문 - 코드로 배우는 스프링 부트, 웹 MVC, DB 접근 기술&quot; 과정을 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;들으면서 예제 소스코드를 따라하던 중 DB 연결 도중 아래와 같은 import 과정에서 오류가 발생하였습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bNdpLV/btqO7h7rk5T/ZhU0oCUhRZ3XcSm72kOLCK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bNdpLV/btqO7h7rk5T/ZhU0oCUhRZ3XcSm72kOLCK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bNdpLV/btqO7h7rk5T/ZhU0oCUhRZ3XcSm72kOLCK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbNdpLV%2FbtqO7h7rk5T%2FZhU0oCUhRZ3XcSm72kOLCK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxiciF/btqPdS6AOZf/HF0Sb1KphFUCkXQv6hSF9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxiciF/btqPdS6AOZf/HF0Sb1KphFUCkXQv6hSF9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxiciF/btqPdS6AOZf/HF0Sb1KphFUCkXQv6hSF9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxiciF%2FbtqPdS6AOZf%2FHF0Sb1KphFUCkXQv6hSF9k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그래서 인터넷도 검색하고 하였지만, maven은 아래와 같은 방법으로 web.xml을 수정한다고 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1607067866114&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; &amp;lt;dependency&amp;gt;
 &amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;
 &amp;lt;artifactId&amp;gt;spring-jdbc&amp;lt;/artifactId&amp;gt;
 &amp;lt;version&amp;gt;${org.springframework-version}&amp;lt;/version&amp;gt;
 &amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;하지만, 저는 maven 형태가 아닌 grdle 형식으로 프로젝트를 생성하여 web.xml 을 찾을 수 없었다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그런데 저와 같은 오류가 뜨는 분이 수강생분 중에 계셨고, 김영한 강사님께 직접 질문하여 해답을 받았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;프로젝트의 'build.gradle' 의 파일의 내용에 다음과 같은 내용을 추가해주어야한다고 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 링크 참고 : &lt;a href=&quot;https://www.inflearn.com/questions/98874&quot;&gt;https://www.inflearn.com/questions/98874&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1607068169843&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;org.springframework.jdbc 패키지 import 오류 - 인프런&quot; data-og-description=&quot;질문 - org.springframework.jdbc 패키지 import 오류 선생님~! 아래에 패키지를 import를 하지 못하는 오류가 발생하여,&amp;nbsp; 질문드립니다. import org.springframework.jdbc.datasource.DataSourceUtils; 해결방법을 구글링하&quot; data-og-host=&quot;www.inflearn.com&quot; data-og-source-url=&quot;https://www.inflearn.com/questions/98874&quot; data-og-url=&quot;https://www.inflearn.com/questions/98874&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fjv5j/hyIslsZQ0B/pqOPnchEKynz5QDetCcf80/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/bMHAyb/hyIsdobT2y/YIwwQGXTQI8vNoZB7n2RkK/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/pYvZL/hyIsqnv7wH/e4iAuLaahxRyMk9i1YUxqK/img.png?width=661&amp;amp;height=220&amp;amp;face=0_0_661_220&quot;&gt;&lt;a href=&quot;https://www.inflearn.com/questions/98874&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.inflearn.com/questions/98874&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fjv5j/hyIslsZQ0B/pqOPnchEKynz5QDetCcf80/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/bMHAyb/hyIsdobT2y/YIwwQGXTQI8vNoZB7n2RkK/img.png?width=600&amp;amp;height=315&amp;amp;face=0_0_600_315,https://scrap.kakaocdn.net/dn/pYvZL/hyIsqnv7wH/e4iAuLaahxRyMk9i1YUxqK/img.png?width=661&amp;amp;height=220&amp;amp;face=0_0_661_220');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;org.springframework.jdbc 패키지 import 오류 - 인프런&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;질문 - org.springframework.jdbc 패키지 import 오류 선생님~! 아래에 패키지를 import를 하지 못하는 오류가 발생하여,&amp;nbsp; 질문드립니다. import org.springframework.jdbc.datasource.DataSourceUtils; 해결방법을 구글링하&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;www.inflearn.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;pre id=&quot;code_1607068002531&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation 'org.springframework.boot:spring-boot-starter-jdbc'&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVAlLB/btqO7hGl8bN/v0mAE8sgAk0wwtQHd6YqwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVAlLB/btqO7hGl8bN/v0mAE8sgAk0wwtQHd6YqwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVAlLB/btqO7hGl8bN/v0mAE8sgAk0wwtQHd6YqwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVAlLB%2FbtqO7hGl8bN%2Fv0mAE8sgAk0wwtQHd6YqwK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 코드를 복사 붙여 넣기 해준 후 다시 실행 하였더니 문제 없이 해결 되었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;* 혹시 위와 같은 과정을 진행하여도 안되실 경우 한번 껏다 켜주시면 정상적으로 작동합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>내 시간을 잡아먹는 에러</category>
      <category>DataSource</category>
      <category>DB연동</category>
      <category>import</category>
      <category>JDBC</category>
      <category>오류</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/132</guid>
      <comments>https://lightchan.tistory.com/132#entry132comment</comments>
      <pubDate>Fri, 4 Dec 2020 16:50:37 +0900</pubDate>
    </item>
    <item>
      <title>[IntelliJ] Git 과 연동하는 방법</title>
      <link>https://lightchan.tistory.com/131</link>
      <description>&lt;p&gt;1) &quot;File&quot; 의 &quot;Settings...&quot;에 들어가줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCNmZb/btqO12I6EX5/KR5sXo5bqX0ONfvXxxWKQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCNmZb/btqO12I6EX5/KR5sXo5bqX0ONfvXxxWKQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCNmZb/btqO12I6EX5/KR5sXo5bqX0ONfvXxxWKQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCNmZb%2FbtqO12I6EX5%2FKR5sXo5bqX0ONfvXxxWKQk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;2) Git이 설치되어 있는 경로를 잡아줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bXZmol/btqO72nK0CN/ZI9lQuJ7yGrV1uTebhvuhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bXZmol/btqO72nK0CN/ZI9lQuJ7yGrV1uTebhvuhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bXZmol/btqO72nK0CN/ZI9lQuJ7yGrV1uTebhvuhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbXZmol%2FbtqO72nK0CN%2FZI9lQuJ7yGrV1uTebhvuhk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;3) GitHub 계정 연동시키기&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsQe3N/btqPaUW3vfT/FaPk9jTMpkecHxi5WM0NgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsQe3N/btqPaUW3vfT/FaPk9jTMpkecHxi5WM0NgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsQe3N/btqPaUW3vfT/FaPk9jTMpkecHxi5WM0NgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsQe3N%2FbtqPaUW3vfT%2FFaPk9jTMpkecHxi5WM0NgK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot;Add Account...&quot; 를 눌러 준 후 아래와 같은 과정을 진행해주도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cj8stN/btqO0f9XVsE/ctJIak6IJQ14cAUKu8K9Zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cj8stN/btqO0f9XVsE/ctJIak6IJQ14cAUKu8K9Zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cj8stN/btqO0f9XVsE/ctJIak6IJQ14cAUKu8K9Zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcj8stN%2FbtqO0f9XVsE%2FctJIak6IJQ14cAUKu8K9Zk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4) 인텔리제이에서 만들었던 프로젝트명으로 깃허브에 리포지토리를 생성하여 업로딩&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z04SI/btqPaU3O1Zn/oya3UVG7DKgFKft7Y8P3Vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z04SI/btqPaU3O1Zn/oya3UVG7DKgFKft7Y8P3Vk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z04SI/btqPaU3O1Zn/oya3UVG7DKgFKft7Y8P3Vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz04SI%2FbtqPaU3O1Zn%2Foya3UVG7DKgFKft7Y8P3Vk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ECjf3/btqO6hFK2x0/Odyf9OsyxPCNhHXwj4KFy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ECjf3/btqO6hFK2x0/Odyf9OsyxPCNhHXwj4KFy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ECjf3/btqO6hFK2x0/Odyf9OsyxPCNhHXwj4KFy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FECjf3%2FbtqO6hFK2x0%2FOdyf9OsyxPCNhHXwj4KFy0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;** 여기서 처음하시는 분들은 다음과 같은 오류가 뜰 수도 있다고 합니다. 다음과 같은 오류를 해결하기 위해서는&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IUENa/btqO8V2ZLFv/4AwCFuLX25rDEptKot5PHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IUENa/btqO8V2ZLFv/4AwCFuLX25rDEptKot5PHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IUENa/btqO8V2ZLFv/4AwCFuLX25rDEptKot5PHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIUENa%2FbtqO8V2ZLFv%2F4AwCFuLX25rDEptKot5PHk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- ssh-heygen 으로 키를 생성&lt;/p&gt;
&lt;p&gt;git bash 를 실행해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1607016633212&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ ssh-keygen&lt;/code&gt;&lt;/pre&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;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/COdcy/btqO6f82z4b/Q4VMjH3QyO4e3Vr2UPuT9K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/COdcy/btqO6f82z4b/Q4VMjH3QyO4e3Vr2UPuT9K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/COdcy/btqO6f82z4b/Q4VMjH3QyO4e3Vr2UPuT9K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCOdcy%2FbtqO6f82z4b%2FQ4VMjH3QyO4e3Vr2UPuT9K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;키가 저장된 해당 위치로 가서 키를 확인해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1607016640753&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ cat 키가 저장된 경로&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1ugA3/btqO8XmcXRe/vkGDE21VcX5MbJE2jjWUC0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1ugA3/btqO8XmcXRe/vkGDE21VcX5MbJE2jjWUC0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1ugA3/btqO8XmcXRe/vkGDE21VcX5MbJE2jjWUC0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1ugA3%2FbtqO8XmcXRe%2FvkGDE21VcX5MbJE2jjWUC0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위와 같은 키가 쭉 나오면 ssh-rsa부터 끝까지 복사 하신 후 github ssh key에 등록해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crkYg0/btqO3yVfS69/hfz3B9dPZHZaDrKeTdSvc0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crkYg0/btqO3yVfS69/hfz3B9dPZHZaDrKeTdSvc0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crkYg0/btqO3yVfS69/hfz3B9dPZHZaDrKeTdSvc0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrkYg0%2FbtqO3yVfS69%2Fhfz3B9dPZHZaDrKeTdSvc0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;5) 이 과정을 거친 후 다시 처음부터 진행하면 정상적으로 올라가는 것을 확인 할 수 있습니다.&lt;/p&gt;</description>
      <category>개발도구/IntelliJ</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/131</guid>
      <comments>https://lightchan.tistory.com/131#entry131comment</comments>
      <pubDate>Fri, 4 Dec 2020 02:09:46 +0900</pubDate>
    </item>
    <item>
      <title>Git 환경설정</title>
      <link>https://lightchan.tistory.com/130</link>
      <description>&lt;p&gt;이번 포스팅에서는 윈도우에서 Git 을 사용하려면 필수적으로 진행해야 할 환경 설정에 대해 정리해보도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1) 사용자명과 이메일을 작성해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1607016669634&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ git config --global user.name 사용자명

$ git config --global user.email 사용자 이메일&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZsagZ/btqPaVuS9Bx/2bE8FeihhzWih8b6v5mk40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZsagZ/btqPaVuS9Bx/2bE8FeihhzWih8b6v5mk40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZsagZ/btqPaVuS9Bx/2bE8FeihhzWih8b6v5mk40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZsagZ%2FbtqPaVuS9Bx%2F2bE8FeihhzWih8b6v5mk40%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발도구/Git</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/130</guid>
      <comments>https://lightchan.tistory.com/130#entry130comment</comments>
      <pubDate>Fri, 4 Dec 2020 01:37:06 +0900</pubDate>
    </item>
    <item>
      <title>Git 설치 방법</title>
      <link>https://lightchan.tistory.com/129</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) &lt;a href=&quot;https://git-scm.com/&quot;&gt;https://git-scm.com/&lt;/a&gt;&lt;/h3&gt;
&lt;figure id=&quot;og_1607011669224&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Git&quot; data-og-description=&quot;&quot; data-og-host=&quot;git-scm.com&quot; data-og-source-url=&quot;https://git-scm.com/&quot; data-og-url=&quot;https://git-scm.com/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b4gpCu/hyIrnyz242/m8fxRkoKMRyPO9q177vfAK/img.png?width=778&amp;amp;height=502&amp;amp;face=0_0_778_502&quot;&gt;&lt;a href=&quot;https://git-scm.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://git-scm.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b4gpCu/hyIrnyz242/m8fxRkoKMRyPO9q177vfAK/img.png?width=778&amp;amp;height=502&amp;amp;face=0_0_778_502');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Git&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;git-scm.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;위 사이트에 접속해주도록 합니다.&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) &quot;Download&quot; 버튼을 클릭해주도록 합니다.&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7IKSP/btqO8WU7yjJ/9AkKhVZ17aGWvFSkdhDWj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7IKSP/btqO8WU7yjJ/9AkKhVZ17aGWvFSkdhDWj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7IKSP/btqO8WU7yjJ/9AkKhVZ17aGWvFSkdhDWj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7IKSP%2FbtqO8WU7yjJ%2F9AkKhVZ17aGWvFSkdhDWj1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) 다음과 같은 창으로 넘어가면서 다운로드 화면이 나옵니다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3mFAm/btqO0eQNiFG/BLzlU8AoUXyjKp0nxOC230/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3mFAm/btqO0eQNiFG/BLzlU8AoUXyjKp0nxOC230/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3mFAm/btqO0eQNiFG/BLzlU8AoUXyjKp0nxOC230/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3mFAm%2FbtqO0eQNiFG%2FBLzlU8AoUXyjKp0nxOC230%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4) 다운로드가 완료되면 다음과 같은 과정을 거쳐줍니다.&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LrBIH/btqO0fvlwjV/oDMrFDyBqdjvzivwN7qbOk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LrBIH/btqO0fvlwjV/oDMrFDyBqdjvzivwN7qbOk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LrBIH/btqO0fvlwjV/oDMrFDyBqdjvzivwN7qbOk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLrBIH%2FbtqO0fvlwjV%2FoDMrFDyBqdjvzivwN7qbOk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c2Kxlt/btqO0StcdUO/gXu7TzxMJr4CwCstlBz1u0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c2Kxlt/btqO0StcdUO/gXu7TzxMJr4CwCstlBz1u0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c2Kxlt/btqO0StcdUO/gXu7TzxMJr4CwCstlBz1u0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc2Kxlt%2FbtqO0StcdUO%2FgXu7TzxMJr4CwCstlBz1u0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b6Ek4A/btqO14fQO5i/9CeCak44JkCIWxbiVCQUA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b6Ek4A/btqO14fQO5i/9CeCak44JkCIWxbiVCQUA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b6Ek4A/btqO14fQO5i/9CeCak44JkCIWxbiVCQUA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb6Ek4A%2FbtqO14fQO5i%2F9CeCak44JkCIWxbiVCQUA1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKoRvQ/btqO7jwwKPm/65y7m2K9w6lKaUTABNvEak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKoRvQ/btqO7jwwKPm/65y7m2K9w6lKaUTABNvEak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKoRvQ/btqO7jwwKPm/65y7m2K9w6lKaUTABNvEak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKoRvQ%2FbtqO7jwwKPm%2F65y7m2K9w6lKaUTABNvEak%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bavWSx/btqO12vAIJH/cKQOFkuAI2DGU3tY1aln0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bavWSx/btqO12vAIJH/cKQOFkuAI2DGU3tY1aln0k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bavWSx/btqO12vAIJH/cKQOFkuAI2DGU3tY1aln0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbavWSx%2FbtqO12vAIJH%2FcKQOFkuAI2DGU3tY1aln0k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkN4oP/btqO0TS6kQj/nrbkupNujIIXDxFKiuadwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkN4oP/btqO0TS6kQj/nrbkupNujIIXDxFKiuadwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkN4oP/btqO0TS6kQj/nrbkupNujIIXDxFKiuadwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbkN4oP%2FbtqO0TS6kQj%2FnrbkupNujIIXDxFKiuadwk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/n5bA8/btqO7hyF8To/YftpXNtJBb9nxklJ9iIUD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/n5bA8/btqO7hyF8To/YftpXNtJBb9nxklJ9iIUD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/n5bA8/btqO7hyF8To/YftpXNtJBb9nxklJ9iIUD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fn5bA8%2FbtqO7hyF8To%2FYftpXNtJBb9nxklJ9iIUD0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDLimh/btqO6g07E3R/P5gS5I4Csi0yIouFHmlKWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDLimh/btqO6g07E3R/P5gS5I4Csi0yIouFHmlKWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDLimh/btqO6g07E3R/P5gS5I4Csi0yIouFHmlKWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDLimh%2FbtqO6g07E3R%2FP5gS5I4Csi0yIouFHmlKWk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dbH5Of/btqO13Vtj6d/NZPn0K8N5tuO5M55V8k7v1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dbH5Of/btqO13Vtj6d/NZPn0K8N5tuO5M55V8k7v1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dbH5Of/btqO13Vtj6d/NZPn0K8N5tuO5M55V8k7v1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdbH5Of%2FbtqO13Vtj6d%2FNZPn0K8N5tuO5M55V8k7v1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kJNO8/btqO13urpTr/8AWFcKFMbYLmDeiu5sKhVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kJNO8/btqO13urpTr/8AWFcKFMbYLmDeiu5sKhVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kJNO8/btqO13urpTr/8AWFcKFMbYLmDeiu5sKhVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkJNO8%2FbtqO13urpTr%2F8AWFcKFMbYLmDeiu5sKhVk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRmQwD/btqO0S7MJJd/hT1gU2DwkzNRSPymi5nnCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRmQwD/btqO0S7MJJd/hT1gU2DwkzNRSPymi5nnCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRmQwD/btqO0S7MJJd/hT1gU2DwkzNRSPymi5nnCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRmQwD%2FbtqO0S7MJJd%2FhT1gU2DwkzNRSPymi5nnCk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Onnmo/btqO6f81Eak/wGxC7n9qsD01QN1K1dEH50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Onnmo/btqO6f81Eak/wGxC7n9qsD01QN1K1dEH50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Onnmo/btqO6f81Eak/wGxC7n9qsD01QN1K1dEH50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOnnmo%2FbtqO6f81Eak%2FwGxC7n9qsD01QN1K1dEH50%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5) 설치가 완료 되었다면, 정상적으로 설치되었나 확인해주도록 합니다.&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dsI3bQ/btqO6hyWjXu/imFGTwfPodmKJMbjYzvXUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dsI3bQ/btqO6hyWjXu/imFGTwfPodmKJMbjYzvXUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dsI3bQ/btqO6hyWjXu/imFGTwfPodmKJMbjYzvXUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdsI3bQ%2FbtqO6hyWjXu%2FimFGTwfPodmKJMbjYzvXUk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbxDmV/btqO3zmlBLI/ZiGHhcA9QpCZRyDdoXG09K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbxDmV/btqO3zmlBLI/ZiGHhcA9QpCZRyDdoXG09K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbxDmV/btqO3zmlBLI/ZiGHhcA9QpCZRyDdoXG09K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbxDmV%2FbtqO3zmlBLI%2FZiGHhcA9QpCZRyDdoXG09K%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;</description>
      <category>개발도구/Git</category>
      <category>Git</category>
      <category>Git 설치</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/129</guid>
      <comments>https://lightchan.tistory.com/129#entry129comment</comments>
      <pubDate>Fri, 4 Dec 2020 01:30:17 +0900</pubDate>
    </item>
    <item>
      <title>[Python] (8) Numpy  배열 결합</title>
      <link>https://lightchan.tistory.com/116</link>
      <description>&lt;p&gt;Numpy 배열 결합&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592153063896&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 배열 결합
print(x, end='\n\n')
print(y, end='\n\n')

arrhap = np.concatenate([x,y])
print(arrhap, end='\n\n')
x1, x2 = np.split(arrhap,2)
print(x1, end='\n\n')
print(x2, end='\n\n')

a = np.arange(1, 17).reshape(4,4)
print(a, end='\n\n')

x1, x2 = np.hsplit(a,2)
print(x1, end='\n\n')
print(x2, end='\n\n')

x1, x2 = np.vsplit(a,2)
print(x1, end='\n\n')
print(x2, end='\n\n')



# 출력 결과

[1 2 3]

[4 5 6]

[1 2 3 4 5 6]

[1 2 3]

[4 5 6]

[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]
 [13 14 15 16]]

[[ 1  2]
 [ 5  6]
 [ 9 10]
 [13 14]]

[[ 3  4]
 [ 7  8]
 [11 12]
 [15 16]]

[[1 2 3 4]
 [5 6 7 8]]

[[ 9 10 11 12]
 [13 14 15 16]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1차원 배열인 x와 y 배열을 생성해줍니다.&lt;/p&gt;
&lt;p&gt;arrhap 에 x,y 배열을 합친후 결과를 출력한 결과 1차원 배열을 리스트로 반환해주었습니다.&lt;/p&gt;
&lt;p&gt;이것을 다시 x1과 x2에 split 함수를 사용하여 분리해주었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;더 잘게 split을 사용할 경우 앞에 사용할 변수 명을 추가해준 다음,&lt;/p&gt;
&lt;p&gt;split함수 옵션에 (나눌배열,나눌개수)를 사용해주도록 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;a에 1~16의 숫자를 입력 후 4x4 행렬로 생성 후&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;hspit(나눌배열, 나눈배열그룹개수) : 지정한 배열을 수평(행) 방향으로 분할&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;vsplit(나눌배열, 나눈 배열 그룹 개수) :&amp;nbsp;지정한 배열을 수직(열) 방향으로 분할&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 2그룹씩 분할을 하였기때문에 위와같은 결과가 생성됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>CONCATENATE</category>
      <category>hsplit</category>
      <category>numpy</category>
      <category>Python</category>
      <category>Split</category>
      <category>vsplit</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/116</guid>
      <comments>https://lightchan.tistory.com/116#entry116comment</comments>
      <pubDate>Mon, 15 Jun 2020 01:56:53 +0900</pubDate>
    </item>
    <item>
      <title>[Python] (7) Numpy 배열 행 열 추가 및 삭제 , 내장함수</title>
      <link>https://lightchan.tistory.com/115</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Numpy 배열 행 열 추가 및 삭제&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592140678085&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 배열에 행열 추가 삭제
import numpy as np

aa = np.eye(3)
print(aa, end='\n\n')
bb = np.c_[aa, aa[2]] # 열 추가 2번째 열을 하나 더 추가 후 출력
print(bb, end='\n\n')

cc = np.r_[aa, [aa[2]]] # 2번째 행 추가 후 출력
print(cc, end='\n\n')

a = np.array([1,2,3])
print(a, end='\n\n')
print(np.c_[a], end='\n\n')
print(a.reshape(3,1), end='\n\n')


# 출력 결과

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]

[[1. 0. 0. 0.]
 [0. 1. 0. 0.]
 [0. 0. 1. 1.]]

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]
 [0. 0. 1.]]

[1 2 3]

[[1]
 [2]
 [3]]

[[1]
 [2]
 [3]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;eye 함수는 이전에 포스팅하였습니다!&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/106&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/05/31 - [python] - [Python] Numpy (2) - zeros, ones, full, eye, 난수&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1592140701262&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Python] Numpy (2) - zeros, ones, full, eye, 난수&quot; data-og-description=&quot;2020/05/28 - [python] - [python] Numpy [python] Numpy Numpy 란? C언어로 개발되었으며, 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 필요한 기능을 제공합니다. Numpy 데이터 타입 # numpy : ndarra..&quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/106&quot; data-og-url=&quot;https://lightchan.tistory.com/106&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jToht/hyGoNeYtcU/tZbXwKkcR5aKBvHVmcN6hK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bYHW2p/hyGoMf4RQT/TTFsxLN9mTrLe8AH9q30vK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/106&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/106&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jToht/hyGoNeYtcU/tZbXwKkcR5aKBvHVmcN6hK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bYHW2p/hyGoMf4RQT/TTFsxLN9mTrLe8AH9q30vK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Python] Numpy (2) - zeros, ones, full, eye, 난수&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;2020/05/28 - [python] - [python] Numpy [python] Numpy Numpy 란? C언어로 개발되었으며, 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 필요한 기능을 제공합니다. Numpy 데이터 타입 # numpy : ndarra..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;eye 함수로 3 x 3 행렬을 생성 후,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;.c_ 를 사용하면 열을 추가한다는 의미&lt;/span&gt;로,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 소스코드에서는 aa 배열의 열에 2번째 열을 추가해주겠다는 의미입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;.r_ 를 사용하면 행을 추가해주겠다는 의미&lt;/span&gt;로, 위 소스코드에서는 2번째 행을 aa 행렬에 추가해주겠다는 의미입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592152320775&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a = np.array([1,2,3])

print(a, end='\n\n')
#b = np.append(a,[4,5])
b = np.append(a, [4,5], axis = 0)
print(b, end='\n\n')

c = np.insert(a,0, [6,7], axis=0) 
print(c, end='\n\n')

d = np.delete(a, 1) # 1열 삭제
d = np.delete(a,[1])
print(d, end='\n\n')


# 출력 결과

[1 2 3]

[1 2 3 4 5]

[6 7 1 2 3]

[1 3]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;append 함수 : &amp;nbsp;리스트의 맨 마지막에 값을 추가해주는 함수이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;위 소스에서 a라는 1차원 배열 리스트에 4와 5를 추가해주었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;insert 함수 : 리스트에 요소를 추가해주는 함수로 0 번째 위치에 6과 7을 더해준다는 의미입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;delete 함수 : 1차원 배열 a의 1열을 삭제한다는 의미입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592152643968&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aa = np.arange(1, 10).reshape(3,3) # 2차원 배열
print(aa, end='\n\n')

print(np.insert(aa, 1, 99), end='\n\n')
print(np.insert(aa,1, 99, axis=0), end='\n\n')


# 출력 결과
[[1 2 3]
 [4 5 6]
 [7 8 9]]

[ 1 99  2  3  4  5  6  7  8  9]

[[ 1  2  3]
 [99 99 99]
 [ 4  5  6]
 [ 7  8  9]]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;aa라는 변수에 1차원 배열 1부터 9까지 삽입 후 reshape 함수를 통해 2차원배열인 3x3로 변경해주었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고, insert 함수에 axis 옵션을 주지 않으면 1차원 배열로 1번째 위치의 값을 99로 변경하는 의미입니다.&lt;/p&gt;
&lt;p&gt;그 다음 출력문에는 axis=0 으로 행을 의미하며 1행 전부의 값을 99로 변환하는 의미입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;delete문은 insert 함수와 반대로 생각하시면 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592152795379&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(aa, end='\n\n')
print(np.delete(aa, 1), end='\n\n') # 0행 1열 값을 지움
print(np.delete(aa, 1, axis = 0), end='\n\n') # 1행을 지움
print(np.delete(aa, 1, axis = 1), end='\n\n') # 1열을 지움


# 출력 결과

[[1 2 3]
 [4 5 6]
 [7 8 9]]

[1 3 4 5 6 7 8 9]

[[1 2 3]
 [7 8 9]]

[[1 3]
 [4 6]
 [7 9]]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Numpy 내장 함수&lt;/h3&gt;
&lt;pre id=&quot;code_1592152909880&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ex =  np.random.randn(5,4)
print(ex, end='\n\n')

print('1행의 합과 최대값')
print(np.sum(ex[0],))
print(np.max(ex[0],), end='\n\n')

print('2행의 합과 최대값')
print(np.sum(ex[1],))
print(np.max(ex[1],), end='\n\n')

print('3행의 합과 최대값')
print(np.sum(ex[2],))
print(np.max(ex[2],), end='\n\n')


c = np.zeros((6, 6))
print(c, end='\n\n')

num = 1
for i in range(len(c[0])):
  for j in range(len(c[0])):
    c[i][j] = num
    num += 1

print('1~36 채우기')
print(c, end='\n\n')

print('2번째 행 전체 원소 출력')
print(c[1], end='\n\n')

print('5번째 열 전체 원소 출력')
print(c[:,4], end='\n\n')

print('부분 출력')
print(c[2:5,2:5], end='\n\n')


print('2-2번')

b = np.zeros((6,4))
c = np.random.randint(20, 100, 6)

for i in range(6):
  for j in range(3):
       b[i][0] = c[i]
       b[i][j+1] = b[i][j]+1
 

print(b)

b[0] = 1000
b[5] = 6000

print(b)


print('3번')
ex1 =  np.random.randn(4,5)
print(ex1, end='\n\n')

print('평균 : ',np.mean(ex1), end='\n\n')
print('합계 : ',np.sum(ex1), end='\n\n')
print('표준편차 : ',np.std(ex1), end='\n\n')
print('분산 : ',np.var(ex1), end='\n\n')
print('최대값 : ',np.max(ex1), end='\n\n')
print('최소값 : ',np.min(ex1), end='\n\n')
print('1사분위 : ',np.percentile(ex1,25), end='\n\n')
print('2사분위 : ',np.percentile(ex1,50), end='\n\n')
print('3사분위 : ',np.percentile(ex1,75), end='\n\n')
print('요소값누적합 : ',np.cumsum(ex1), end='\n\n')


# 출력 결과

[[-0.99017343 -1.26807787  0.61941937  0.40683047]
 [-1.03161855 -1.23595668  1.54022423 -0.74237974]
 [-1.55127342  1.67563386 -0.97895193  1.70391295]
 [-1.23341949  0.09689477 -0.50175499 -0.63970651]
 [ 0.17859581 -1.74168996 -0.8277483   0.23756665]]

1행의 합과 최대값
-1.2320014629208895
0.6194193744851698

2행의 합과 최대값
-1.4697307416436023
1.5402242284791654

3행의 합과 최대값
0.8493214631503689
1.7039129520342273

[[0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]
 [0. 0. 0. 0. 0. 0.]]

1~36 채우기
[[ 1.  2.  3.  4.  5.  6.]
 [ 7.  8.  9. 10. 11. 12.]
 [13. 14. 15. 16. 17. 18.]
 [19. 20. 21. 22. 23. 24.]
 [25. 26. 27. 28. 29. 30.]
 [31. 32. 33. 34. 35. 36.]]

2번째 행 전체 원소 출력
[ 7.  8.  9. 10. 11. 12.]

5번째 열 전체 원소 출력
[ 5. 11. 17. 23. 29. 35.]

부분 출력
[[15. 16. 17.]
 [21. 22. 23.]
 [27. 28. 29.]]

2-2번
[[0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]
 [0. 0. 0. 0.]]

3번
[[ 0.21862159  2.23607505 -0.56159948  2.0627482  -1.35312291]
 [-0.45196089  2.38118527  0.54214996  0.29531398 -1.3756751 ]
 [ 0.11210441  1.60344909  0.71672278  1.10790232  0.41659081]
 [-1.28873769 -0.26544286  0.01087163 -1.22702418  0.02647448]]

평균 :  0.2603323229168358

합계 :  5.206646458336715

표준편차 :  1.1396837454447413

분산 :  1.298879039630954

최대값 :  2.38118527114613

최소값 :  -1.3756751031190795

1사분위 :  -0.4793705371100291

2사분위 :  0.16536299941867438

3사분위 :  0.8145176683660762

요소값누적합 :  [0.21862159 2.45469664 1.89309716 3.95584536 2.60272245 2.15076156
 4.53194683 5.07409679 5.36941077 3.99373567 4.10584008 5.70928917
 6.42601195 7.53391427 7.95050508 6.66176739 6.39632453 6.40719616
 5.18017198 5.20664646]
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>python</category>
      <category>.c_</category>
      <category>.r_</category>
      <category>Python</category>
      <category>내장함수</category>
      <category>배열 행열 추가</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/115</guid>
      <comments>https://lightchan.tistory.com/115#entry115comment</comments>
      <pubDate>Mon, 15 Jun 2020 01:42:15 +0900</pubDate>
    </item>
    <item>
      <title>[Python] (6) Numpy broadcasting (브로드캐스팅)</title>
      <link>https://lightchan.tistory.com/114</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Numpy broadcasting&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;벡터의 내적을 구할 때는 차원이 서로 같아야만 하는 조건이있었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 이번 브로드캐스트는 다른 차원의 연산이 가능한 점에서 차이가 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 3가지 방법을 소개해드리면 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;1번 for문 // 2번 tile 함수 이용 // 마지막으로 자동 브로드 캐스팅 방법이있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;numpy.empty(배열, dtype='조건')&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;b&gt;특정한 값으로 초기화하지 않는 배열을 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;numpy.empty_like(배열, dtype='조건')&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;- &lt;/span&gt;&lt;b&gt;배열의 크기와 동일하며 특정한 값으로 초기화하지 않는 배열을 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592131892300&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np

x = np.arange(1, 10).reshape(3,3)
y = np.array([1,0,1])
z = np.empty_like(x)

print(x, end='\n\n')
print(y, end='\n\n')
print(z, end='\n\n')

# x + y
for i in range(3):
  z[i] = x[i] + y
print(z, end='\n\n')  

# 방법 2 tile()
kbs = np.tile(y, (3,1))
print(kbs, end='\n\n')
z = x + kbs
print(z, end='\n\n')

# 방법 3 nuympy 의 broadcast
mbc = x + y
print(mbc + 100, end='\n\n')


# 출력 결과

[[1 2 3]
 [4 5 6]
 [7 8 9]]

[1 0 1]

[[1 2 3]
 [4 5 6]
 [7 8 9]]

[[ 2  2  4]
 [ 5  5  7]
 [ 8  8 10]]

[[1 0 1]
 [1 0 1]
 [1 0 1]]

[[ 2  2  4]
 [ 5  5  7]
 [ 8  8 10]]

[[102 102 104]
 [105 105 107]
 [108 108 110]]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;x 행렬을 다음과 같이 주고 empty_like 함수를 사용하여 z 행렬을 그대로 복사하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이후, 1번 방법 for문을 사용한 경우 각 행의 자리에 맞춰 1차원 배열인 y 값들을 더해 준 것을 확인 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;방법 2번 tile을 이용하여 구조를 맞추는 방식으로 3행과 길이는 1로 2차원 배열을 생성한 후 z 배열에 더한 것입니다.&lt;/p&gt;
&lt;p&gt;만약 길이를 2로 주었다면 [ 1 0 1 1 0 1 ] 이 3행까지 반복되어서 출력되었을 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;방법 3번 자동 브로드 캐스팅 사용&lt;/p&gt;
&lt;p&gt;자동으로 자리를 맞추어 값을 계산하여 출력합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592134141991&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# broadcast ex
v = np.array([1,2,3])
w = np.array([4,5])

print(np.reshape(v, (3,1))*w, end='\n\n')
print(np.reshape(w, (2,1))*v, end='\n\n')

x = np.array([[1,2,3],[4,5,6]])
print(x, end='\n\n')
print(x+y, end='\n\n')
#print(x+w, end='\n\n') # 브로드캐스팅 불가능
print(x.T , end='\n\n')
print(x.T + w, end='\n\n')
print((x.T + w).T, end='\n\n')


# 출력 결과

[[ 4  5]
 [ 8 10]
 [12 15]]

[[ 4  8 12]
 [ 5 10 15]]

[[1 2 3]
 [4 5 6]]

[[2 2 4]
 [5 5 7]]
 
 [[1 4]
 [2 5]
 [3 6]]

[[ 5  9]
 [ 6 10]
 [ 7 11]]

[[ 5  6  7]
 [ 9 10 11]]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;1행 3열 배열을 3행 1열로 바꾸어 내적하여 계산하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 다음 라인에서는 w의 1행 2열 배열을 2행 1열로 내적하여 계산하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;행열의 구조를 변경하는 방법으로 .T 를 사용할 수도 있습니다.&lt;/p&gt;
&lt;p&gt;x 행렬은 2행 3열짜리 배열로 구조를 잡아주었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;x.T 를 사용하여 3행 2열짜리의 배열로 구조가 변경 된 것을 확인 하실 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>.T</category>
      <category>broadcasting</category>
      <category>empty_like</category>
      <category>FOR</category>
      <category>Python</category>
      <category>tile</category>
      <category>브로드캐스팅</category>
      <category>열 변경</category>
      <category>행 변경</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/114</guid>
      <comments>https://lightchan.tistory.com/114#entry114comment</comments>
      <pubDate>Sun, 14 Jun 2020 20:39:08 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Numpy (5) 집합, 전치</title>
      <link>https://lightchan.tistory.com/109</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;Numpy Sum 함수&lt;/h3&gt;
&lt;p&gt;말 그대로 각각의 값들을 더하는 함수입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1592120549529&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;x = np.array([[1,2], [3,4]])
print(x, end='\n\n')
print(np.sum(x), end='\n\n')
# axis = 0 열 기준으로 계산 // axis = 1 행 기준으로 계산
print(np.sum(x, axis = 0), end='\n\n') # 1 + 3 = 4 , 2 + 4 = 6 
print(np.sum(x, axis = 1), end='\n\n')
print(np.cumsum(x), end='\n\n')


# 출력 결과

[[1 2]
 [3 4]]

10

[4 6]

[3 7]

[ 1  3  6 10]&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;해당 소스코드에서 &lt;span style=&quot;color: #f89009;&quot;&gt;SUM 함수는 각각의 행과 열에 있는 값들을 다 더한 것&lt;/span&gt;을 확인하실 수 있습니다.&lt;/p&gt;
&lt;p&gt;행과 열을 각각 따로 더하고 싶다면 뒤에 axis 조건을 주어 0인 경우 열을 기준으로 더하고 1인 경우 행을 기준으로 더합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Numpy 집합&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;각각의 집합관련 함수는 다음과 같습니다.&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;unique(x) : 배열 값들 중 중복된 원소 제거하고, 유일한 원소를 반환&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;intersect1d(x, y) : 두 배열 x, y 의 교집합을 반환&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;union1d(x, y) : 두 배열 x, y의 합집합을 반환&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;setdiff1d(x, y) : x 배열 로 부터 배열 y를 뺀 차집합을 반환&lt;/span&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;setxor1d(x, y) : x, y 배열의 합집합에서 교집합을 뺀 대칭차집합을 반환&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592120680019&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;x = np.array(['a','b','a','c'])
y = np.array(['a','d','e'])

# unique
print('unique', ' ',np.unique(x), end='\n\n') # 중복되는 값은 1개만 출력

# 차집합
print('setdiff1d ', np.setdiff1d(x,y), end='\n\n')

print(set(x), end='\n\n') # 

# 교집합 합집합
# 교집합 , 중복되는 값만 출력 assume_unique 작성시 중복가능
print('intersect1d ' , ' ', np.intersect1d(x, y, assume_unique=True), end='\n\n')
# 합집함 , 중복을 허용하지 않고 5개의 값 다 출력
print('union1d ' , ' ' , np.union1d(x, y), end='\n\n') 



# 출력 결과

unique   ['a' 'b' 'c']

setdiff1d  ['b' 'c']

{'b', 'c', 'a'}

intersect1d    ['a' 'a']

union1d    ['a' 'b' 'c' 'd' 'e']&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;* arange함수와 reshape 함수&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;arange 함수는 range는 리스트로 반환합니다. arange 함수는 range 함수와 사용하는 방법은 동일하나 리턴을 배열로합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;reshape 함수는 예를 들어 1차원 배열로 출력한 것을 reshape 함수를 통해 2차원 배열로 변경하는데 사용되곤 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592120854114&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;aa = np.arange(12) # 1차원 배열
bb = aa.reshape(3,4) # 1차원 배열인 a를 2차원 배열로 변경
print(aa, end='\n\n') # 1차원 배열
print(bb, end='\n\n')

# 출력 결과

[ 0  1  2  3  4  5  6  7  8  9 10 11]

[[ 0  1  2  3]
 [ 4  5  6  7]
 [ 8  9 10 11]]&lt;/code&gt;&lt;/pre&gt;</description>
      <category>python</category>
      <category>arange</category>
      <category>reshape</category>
      <category>교집합</category>
      <category>전치</category>
      <category>집합</category>
      <category>차집합</category>
      <category>합집합</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/109</guid>
      <comments>https://lightchan.tistory.com/109#entry109comment</comments>
      <pubDate>Tue, 2 Jun 2020 11:55:49 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Numpy (4) - 배열 연산 , 벡터 내적</title>
      <link>https://lightchan.tistory.com/108</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Numpy 배열 연산&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1590969287262&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 배열 연산
import numpy as np

x = np.array([[1,2], [3,4]])
y = np.arange(5, 9).reshape((2,2)) 
y = y.astype(np.float32)
print(x, type(x), x.dtype)

print(y, type(y), end='\n\n')

print(x+y, end='\n\n') # + 연산

print(np.add(x,y), end='\n\n') # + 연산

print(np.subtract(x,y), end='\n\n') # - 연산

print(x-y, end='\n\n') # - 연산

print(np.divide(x,y), end='\n\n') # / 연산

print(x*y, end='\n\n') # * 연산


# 출력 결과

[[1. 2.]
 [3. 4.]]
 
[[5. 6.]
 [7. 8.]]

[[ 6.  8.]
 [10. 12.]]

[[ 6.  8.]
 [10. 12.]]

[[-4. -4.]
 [-4. -4.]]

[[-4. -4.]
 [-4. -4.]]

[[0.2        0.33333334]
 [0.42857143 0.5       ]]

[[ 5. 12.]
 [21. 32.]]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;행렬의 연산은 자리끼리 연산해주기 때문에 쉽게 해결하실 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;연산 결과를 보기에 앞서, reshape 라는 함수가 존재합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;reshape 함수란 배열의 차원의 크기를 변경하는 방법으로, 배열의 요소의 개수는 동일하고 배열의 차원만 변경해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;덧셈 -&amp;gt; add(배열1, 배열2) , add 대신 + 사용 가능합니다.&lt;/p&gt;
&lt;p&gt;뺄셈 -&amp;gt; subtract(배열1, 배열2)&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;, subtract 대신 - 사용 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;곱셉 -&amp;gt; multiply(배열1, 배열2)&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;, multiply 대신 * 사용 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;나눗셈 -&amp;gt; divide(배열1, 배열2)&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;, divide 대신 / 사용 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Numpy 벡터의 내적&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;벡터의 내적 함수에 대하셔 내적 계산시에는 dot 메소드를 필요로합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;형태는 다음과 같습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1590975126403&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;z = dot(x,y)
z = dot(x,y,dim)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 내적 함수를 계산하려면 열과 행이 일치하여야하고 만약, 일치하지 않는다면 가공을 필요로 하고 T(transform)를 이용합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 2차원 배열을 벡터 계산하면 1차 배열의 결과가 나오고, 1차 배열을 벡터계산하면 스칼라 결과가 출력됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1591029351376&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np
v = np.array([9,10])
w = np.array([11,12])

x = np.array([[1,2], [3,4]])
y = np.arange(5, 9).reshape((2,2))

print(v.dot(w), end='\n\n') 
print(np.dot(v, w), end='\n\n') 

print(np.dot(x, y), end='\n\n')


# 출력 결과

219

219

[[19. 22.]
 [43. 50.]]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;v.dot(w) 의 경우 v와 w의 내적함수를 구한 것으로 (9 *11) + (10*12) 를 하여 219가 출력된 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위와 동일한 식으로 np.dot(v, w) 가 있습니다. 위와 계산 방식은 동일하기에 출력 결과도 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2차원 배열의 경우&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;( 1 * 5 ) + ( 2 * 7 ) = 19 값은 1행 1열에 저장&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;( 1 * 6 ) + ( 2 * 8 ) = 22 값은 1행 2열에 저장&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;( 3 * 5 ) + ( 4 * 7 ) = 43 값은 2행 1열에 저장&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;( 3 * 6 ) + ( 4 * 8 ) = 50 값은 2행 2열에 저장이 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>dot</category>
      <category>numpy</category>
      <category>내적</category>
      <category>배열</category>
      <category>배열 연산</category>
      <category>벡터</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/108</guid>
      <comments>https://lightchan.tistory.com/108#entry108comment</comments>
      <pubDate>Mon, 1 Jun 2020 16:36:46 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Numpy (3) - 슬라이싱 , 서브배열</title>
      <link>https://lightchan.tistory.com/107</link>
      <description>&lt;p&gt;배열 관련 포스팅&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/105&quot;&gt;2020/05/28 - [python] - [python] Numpy 데이터타입, 메모리저장, 배열&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1591067271656&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[python] Numpy 데이터타입, 메모리저장, 배열&quot; data-og-description=&quot;Numpy 란? C언어로 개발되었으며, 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 필요한 기능을 제공합니다. Numpy 데이터 타입 # numpy : ndarray import numpy as np nn = [1, 2, 3.5] nn1 = (6,7,8,9)..&quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/105&quot; data-og-url=&quot;https://lightchan.tistory.com/105&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bkoWUM/hyGhEtObvs/sFY5f3G0Ch7vuLcWYzcrF0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/1lnRw/hyGhFztHiM/zZf0v8ABFVP0o9Mk4kPWQk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/105&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/105&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bkoWUM/hyGhEtObvs/sFY5f3G0Ch7vuLcWYzcrF0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/1lnRw/hyGhFztHiM/zZf0v8ABFVP0o9Mk4kPWQk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[python] Numpy 데이터타입, 메모리저장, 배열&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Numpy 란? C언어로 개발되었으며, 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 필요한 기능을 제공합니다. Numpy 데이터 타입 # numpy : ndarray import numpy as np nn = [1, 2, 3.5] nn1 = (6,7,8,9)..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Numpy 슬라이싱&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1590928869104&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a = np.array([1,2,3,4,5])
print(a, type(a), end='\n\n')
print(a[1], end='\n\n')
print(a[1:5:2], end='\n\n')
print(a[-5:-2], end='\n\n')
print(a[1:], ' ' , a[:3], end='\n\n')

print('==========================')

a = np.array([[1,2,3,4], [5 ,6,7,8], [9,10,11,12]])
print(a, a.shape, end='\n\n')
#print(a[:])
print(a[1:], end='\n\n')
print(a[0], a[0][0],a[0,0], a[[0]], end='\n\n')
print(a[0,0], end='\n\n')


print(a[1:], end='\n\n')
print(a[1:, 0:2], end='\n\n')


b = a
print(b, end='\n\n')


# 출력 결과

[1 2 3 4 5] &amp;lt;class 'numpy.ndarray'&amp;gt;

2

[2 4]

[1 2 3]

[2 3 4 5]   [1 2 3]

[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]] (3, 4)

[[ 5  6  7  8]
 [ 9 10 11 12]]

[1 2 3 4] 1 1 [[1 2 3 4]]

1

[[ 5  6  7  8]
 [ 9 10 11 12]]

[[ 5  6]
 [ 9 10]]

[[ 1  2  3  4]
 [ 5  6  7  8]
 [ 9 10 11 12]]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;소스코드의 일부를 보시면 a[값1:값2] 로 작성되어있는 의미는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;1차원 배열의 자료를 출력하고, 값1+1로 시작하여 값2의 범위까지 출력&lt;/span&gt;&lt;/b&gt;하는 것을 뜻합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 밑의 출력 문장을 보시면 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;a[값1:값2:값3] 으로 값3까지 있는 문장에서는 값3만큼 띄어넘어 출력&lt;/span&gt;&lt;/b&gt;하는 것을 뜻합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 여기서는 1:5 만 출력한다면 2 3 4 5가 출력되겠지만 값3에 2를 넣엇기때문에 2 4 가 출력됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;shape 함수는 해당하는 배열이 몇행 몇열의 배열인지 출력해주는 함수&lt;/span&gt;&lt;/b&gt;입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;2차원 배열에서는 행과 열로 구성되고 있기 때문에 [값1:값2 , 값3,값4] 의 범위로 지정&lt;/b&gt;&lt;/span&gt;하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;a[값1 : ] 의 경우는 값1의 행부터 마지막 행까지 출력되는 것을 의미&lt;/b&gt;&lt;/span&gt;하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Numpy 복사하기&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1590932887446&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a = np.array([[1,2,3,4], [5 ,6,7,8], [9,10,11,12]])

b = a # 이건 주소치환
b[0][0] = 100
print(a)
print()
print(b)
print('**' * 10)
print()
c = np.copy(a) # 원본을 가지고 또 다른 배열주소 하나 만들어서 저장
c[0][0] = 200
print(a)
print('**'*10)
print(c)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;a 배열을 만든후 주소 치환을 이용하여 b에 그대로 복사하여 동일하게 출력 된 것을 확인 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 다음 np.copy() 를 이용하여 c 에 2차원 배열 a를 다른 주소를 통하여 c에 복사하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 복사한 2차원 배열 c 의 값이 바뀌더라도 기존 a 배열에는 영향이 없습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Numpy 의 서브Array&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1590935877469&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;d=a[:2, 1:3]
print(a, end='\n\n') # 2   3 이 부분을 서브 array라고 한다
print(d, end='\n\n') # 6   7

print(a) 


# 출력 결과

[[100   2   3   4]
 [  5   6   7   8]
 [  9  10  11  12]]

[[2 3]
 [6 7]]

[[100   2   3   4]
 [  5   6   7   8]
 [  9  10  11  12]]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;d 배열에 a 배열의 1 ~ 2행과 2 ~ 3 열의 값을 d 배열에 저장하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그에따른 결과는 다음과 같으며 이것을 서브배열이라고 칭합니다. 이후 다시 a 배열을 출력해보면&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;기존 a 배열에는 영향이 없는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 외 추가 예제&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1590967515854&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;a = np.array([[1,2,3,],[4,5,6],[7,8,9]])
r1 = a[1, :] 
print(r1)
print(r1, r1.shape)
print()

r2 = a[1:2, :]
print(r2, r2.shape)
print()


# 출력 결과

[4 5 6]
[4 5 6] (3,)

[[4 5 6]] (1, 3)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위에서 설명 드렸던 것처럼 .shape() 함수는 행렬의 차원을 개념으로 표현하는 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; r1 의 a[1, :] 는 &lt;/b&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;a[1,] 과 동일한 의미&lt;/b&gt;&lt;/span&gt;로 해석 될 수 있습니다. 출력이 [4 5 6] 이지만 (3, )과 같이 출력 되는 이유는 &lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1차원 배열 형태&lt;/b&gt;&lt;/span&gt;로 출력하였기 때문입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;그 차이를 비교하기 위해 r2 를 확인해보시면 쉽게 이해하실 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;위에 설명을 보시면 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;2차원 배열의 경우 (값1 : 값2 , 값3 : 값4 ) 로 범위를 지정&lt;/b&gt;&lt;/span&gt;하여 이번에는 (1, 3) 과 같이 출력 된 것을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>python</category>
      <category>numpy</category>
      <category>shape</category>
      <category>slicing</category>
      <category>subarray</category>
      <category>배열</category>
      <category>서브</category>
      <category>서브배열</category>
      <category>슬라이싱</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/107</guid>
      <comments>https://lightchan.tistory.com/107#entry107comment</comments>
      <pubDate>Mon, 1 Jun 2020 01:42:30 +0900</pubDate>
    </item>
    <item>
      <title>[Python] Numpy (2) - zeros, ones, full, eye, 난수</title>
      <link>https://lightchan.tistory.com/106</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/105&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/05/28 - [python] - [python] Numpy&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1590928360197&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[python] Numpy&quot; data-og-description=&quot;Numpy 란? C언어로 개발되었으며, 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 필요한 기능을 제공합니다. Numpy 데이터 타입 # numpy : ndarray import numpy as np nn = [1, 2, 3.5] nn1 = (6,7,8,9)..&quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/105&quot; data-og-url=&quot;https://lightchan.tistory.com/105&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cVgBy3/hyGeHTg3zt/YBecbCpqhxVrF7SGkKMltk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/czWfcp/hyGeNlFIK1/WKdKnPUmxxBkhKU8SdXKl1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/105&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/105&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cVgBy3/hyGeHTg3zt/YBecbCpqhxVrF7SGkKMltk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/czWfcp/hyGeNlFIK1/WKdKnPUmxxBkhKU8SdXKl1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[python] Numpy&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;Numpy 란? C언어로 개발되었으며, 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 필요한 기능을 제공합니다. Numpy 데이터 타입 # numpy : ndarray import numpy as np nn = [1, 2, 3.5] nn1 = (6,7,8,9)..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;Numpy에서 zeros / ones / full / eye 함수&amp;nbsp;&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1590928306519&quot; class=&quot;python&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np

c = np.zeros((2, 2))
print(c, end = '\n\n')

d = np.ones((2,2))
print(d, end = '\n\n')
d = np.full((2,2 ), 10)
print(d, end = '\n\n')

e = np.eye(3) # 3행 3열짜리 단위행렬
print(e, end = '\n\n')


# 출력 결과

[[0. 0.]
 [0. 0.]]

[[1. 1.]
 [1. 1.]]

[[10 10]
 [10 10]]

[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;np.zeros((2,2)) 는 2 행 2 열 짜리 2차원 배열을 0 으로 초기화 하겠다는 의미입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;np.ones ((2,2)) 는 2행 2열 짜리 2차원 배열을 1로 초기값을 설정해주는 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;np.full ((2,2), 10) 의 경우는 2행 2열 짜리 2차원 배열을 10으로 초기화 하겠다는 의미입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;저 위치에 다른 정수를 넣을 경우 해당 정수로 초기화하며 출력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;np.eye(3) 의 경우 단위 행렬을 만드는 함수로 안의 정수값에 해당하는 단위 행렬을 출력해줍니다. 여기서는 3,3ㄷ의 단위 행렬을 출력해줍니다.현재는 3단위 행렬이지만, np.eye(2)를 할 경우, 2x2 행렬이 만들어집니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3&gt;&lt;b&gt;Numpy 난수 값 얻기&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1590928306520&quot; class=&quot;python&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;np.random.seed(0) 

print(np.random.rand(3), end = '\n\n') 

print(np.random.randn(5), end = '\n\n')

print(np.random.randint(3, size=6), end = '\n\n')
print(np.random.randint(3, size=(3,4)), end = '\n\n')
print(np.random.randint(3, size=(3,4,5)), end = '\n\n')


print(list(range(3)), end = '\n\n')
print(np.arange(3), end = '\n\n')

f = {i:np.random.randn() for i in range(3)}
print(f, end = '\n\n')



# 출력 결과

[0.5488135  0.71518937 0.60276338]

[-2.2683282   1.33354538 -0.84272405  1.96992445  1.26611853]

[2 0 1 1 1 1]

[[0 1 0 0]
 [1 2 0 2]
 [0 1 1 2]]

[[[0 1 1 1 0]
  [2 0 2 2 0]
  [2 0 0 0 1]
  [1 2 0 0 1]]

 [[0 1 2 2 0]
  [1 1 1 1 2]
  [2 2 0 2 1]
  [0 1 2 0 0]]

 [[2 0 0 0 0]
  [0 0 2 0 2]
  [1 1 1 0 1]
  [1 1 0 1 2]]]

[0, 1, 2]

[0 1 2]

{0: -0.5058765397605117, 1: 0.42539339846964996, 2: -0.027971183469780222}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;np.random.seed&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;0&lt;/span&gt;&lt;span&gt;) 란 임의의 시드&lt;span&gt;를 생성합니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;seed 안에 값을 넣으면&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;항상 같은 결과를 반환&lt;/span&gt;합니다&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;np.random.rand(3) 란&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;난수 발생 균등분포를 따르기 때문에 음수 값은 출력되지 않습니다&lt;/span&gt;&lt;/b&gt;.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;np.dandom.randn(5) 란&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;표준 정규분포를 따르는 난수&lt;/span&gt;&lt;/b&gt;를 발생시킵니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;rand() 와는 다르게 음수도 출력&lt;/b&gt;&lt;/span&gt;합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;맨 처음 seed에 0을 넣줬기 때문에 현재는 반복하여 출력하여도 같은 결과만 출력하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;매 출력 다른 결과를 원하신다면 seed(0)에서 0을 빼시면 됩니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;np.random.randint()는&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;randint(정수값)의 범위 내에서 균일분포의 정수난수를 발생&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;시킵니다. 여기서&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;np.random.randint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp;size=&lt;/span&gt;&lt;span&gt;6&lt;/span&gt;&lt;span&gt;) 는 0~2 사이의 정수난수를 발생기키고 size는 6개를 받도록 하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;np.random.randint&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;&amp;nbsp;size=&lt;/span&gt;&lt;span&gt;(&lt;/span&gt;&lt;span&gt;3&lt;/span&gt;&lt;span&gt;,&lt;/span&gt;&lt;span&gt;4&lt;/span&gt;&lt;span&gt;) 의 경우는 범위는 위와 동일하지만, size는 2행 3열의 2차원 배열을 출력합니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>python</category>
      <category>eye</category>
      <category>full</category>
      <category>numpy</category>
      <category>Python</category>
      <category>rand</category>
      <category>randint</category>
      <category>randn</category>
      <category>SEED</category>
      <category>ZEROS</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/106</guid>
      <comments>https://lightchan.tistory.com/106#entry106comment</comments>
      <pubDate>Sun, 31 May 2020 21:32:43 +0900</pubDate>
    </item>
    <item>
      <title>[python] Numpy 데이터타입, 메모리저장, 배열</title>
      <link>https://lightchan.tistory.com/105</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Numpy 란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;C언어로 개발되었으며, 계산을 위한 라이브러리로서 다차원 배열을 처리하는데 필요한 기능을 제공합니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Numpy 데이터 타입&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1590653665544&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# numpy : ndarray
import numpy as np

nn = [1, 2, 3.5]
nn1 = (6,7,8,9)
ss1 = ['tom', 'james', 'oscar']
ss2 = {'a' , 'b', 'c'}

print(nn, ' ', type(nn))
print(nn1, ' ' , type(nn1))
print(ss1, ' ' , type(ss1))
print(ss2, ' ' , type(ss2))

# 출력 결과

[1, 2, 3.5]   &amp;lt;class 'list'&amp;gt;
(6, 7, 8, 9)   &amp;lt;class 'tuple'&amp;gt;
['tom', 'james', 'oscar']   &amp;lt;class 'list'&amp;gt;
{'a', 'b', 'c'}   &amp;lt;class 'set'&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;변수에 할당한 데이터와 출력 된 값 및 데이터 타입 형태를 보면 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;들어간 타입의 형태로 출력&lt;/b&gt;&lt;/span&gt; 되는 것을 알 수 있스니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;서로 성격이 다른 타입일 경우 상위 타입을 따라서 출력됩니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;- 바깥쪽이 가장 큰 상위 타입&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;str ( somplex ( float ( int ) ) )&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span&gt;Numpy 메모리 저장&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;파이썬과 Numpy가 차지하는 메모리에는 차이가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;파이썬은 값에 상관없이 다 다른 메모리를 차지하는 특징&lt;/b&gt;&lt;/span&gt;이있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590654330168&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;li = list(range(1,10))
print(li) # list 형태

print(id(li[0]), id(li[1]), id(li[2]), id(li[3]), id(li[4]), id(li[5]), id(li[6]), id(li[7]), id(li[8]))


# 출력 결과

[1, 2, 3, 4, 5, 6, 7, 8, 9]
10914496 10914528 10914560 10914592 10914624 10914656 10914688 10914720 10914752&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;출력 결과를 보시면 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;id 값이 전부 다른&lt;/b&gt;&lt;/span&gt; 것을 확인 할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;반면, &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;Numpy 의 경우 C의 배열을 사용하기 때문에 하나의 메모리 안에 데이터를 하나씩 쌓아두는 특징을 가지고 있습&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1590654398537&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;numpy_arr = np.array(li)

print(id(numpy_arr[0]), id(numpy_arr[1]), id(numpy_arr[2]), id(numpy_arr[3]), id(numpy_arr[4]))


# 출력 결과

139921874137520 139921874137520 139921874137520 139921874137520 139921874137520&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;출력 되는 id의 값이 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;전부 동일&lt;/b&gt;&lt;/span&gt;한 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;결과적으로, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;데이터 분석을 할 경우 들어오는 데이터의 양이 많기 떄문에 python 의 list 를 사용하는 것이 아니라 &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Numpy의 array 배열을 사용하는 것이 더 적합한 것&lt;/b&gt;&lt;/span&gt;을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;추가 - 위에 특징들로인해 python의 list 값에 *값 을 해주면 list를 값 만큼 반복하지만 Numpy 의 경우 각 요소들에 * 값&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;을 해주는 특징&lt;/span&gt;을 가집니다.&lt;/p&gt;
&lt;pre id=&quot;code_1590654753637&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print('a ' * 10)

for i in li:
  print(i*10, end = ' ')
  

# 출력 결과

a a a a a a a a a a 
10 20 30 40 50 60 70 80 90 &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Numpy 배열&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;넘파이에서 사용하는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;배열은 주로&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt; 벡터와 행렬을 사용하는 선형대수 계산에 사용&lt;/span&gt;&lt;/b&gt;됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;1차원 배열 -&amp;nbsp;리스트를 넣으면 배열로 변환&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591068288962&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exarr = np.array([1,2,3,4,5,6,7,8,9])


# 출력 결과

[1 2 3 4 5 6 7 8 9]   &amp;lt;class 'numpy.ndarray'&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;2차원 배열 - &lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;리스트의 리스트(list of list)를 이용하는 경우 2차원 배열을 생성할 수 있습니다. 가로는 행의 개수 세로는 열의 개수&lt;/b&gt;&lt;/span&gt;가 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1591074239181&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exarr1 = np.array([[1,2,3,4],[5,6,7,8]])
print(exarr1, ' ' , type(exarr1))


# 출력 결과

[[1 2 3 4]
 [5 6 7 8]]   &amp;lt;class 'numpy.ndarray'&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Numpy 에서의 배열은 다른 배열과는 다른 차이점을 가지고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예를들어 아래 소스에서도 보여드리겠지만, arr[0] 과 arr[[0]] dms 다른 점을 가지고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;&lt;b&gt;arr[0] 은 1차원 배열 , arr[[0]] 은 2차원 배열&lt;/b&gt;&lt;/u&gt;&lt;/span&gt;이라는 특징을 가지고 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1590865558859&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import numpy as np

arr1 = np.array([[10,20,30], [40,50,60]], dtype='float32')
print(type(arr1), ' ' , arr1.dtype, ' ' , arr1.shape, ' ' , arr1.ndim, ' ' , arr1.size, end = '\n')

print(arr1, end = '\n\n')

print(arr1[0,0], arr1[0, 1], end = '\n\n')
arr1[0] = 10
print(arr1[0,1], arr1[0,2], end = '\n\n')

print('-------------------------')

print(arr1, end = '\n\n')

print(arr1[[0]], end = '\n\n')

print(arr1[[0,1]], end = '\n\n')

print(arr1[0], end = '\n\n')


# 출력결과

&amp;lt;class 'numpy.ndarray'&amp;gt;   float32   (2, 3)   2   6
[[10. 20. 30.]
 [40. 50. 60.]]

10.0 20.0

10.0 10.0

-------------------------

[[10. 10. 10.]
 [40. 50. 60.]]

[[10. 10. 10.]]

[[10. 10. 10.]
 [40. 50. 60.]]

[10. 10. 10.]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위에 소스를 보시면 arr1[0]은 &lt;span style=&quot;color: #f89009;&quot;&gt;&lt;b&gt;1차원 배열로 list 형태&lt;/b&gt;&lt;/span&gt;인 것을 알 수 있으며,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 다음 줄 &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;arr1[[0]] 인 경우는 arr1[0]과 다르게 0 행 1열의 2차원 배열&lt;/span&gt;&lt;/b&gt;을 의미하며 [[10. 10. 10]] 을 출력하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>eye</category>
      <category>numpy</category>
      <category>ones</category>
      <category>Python</category>
      <category>넘파이</category>
      <category>배열</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/105</guid>
      <comments>https://lightchan.tistory.com/105#entry105comment</comments>
      <pubDate>Thu, 28 May 2020 10:13:37 +0900</pubDate>
    </item>
    <item>
      <title>[Django] GET &amp;amp; POST 방식 웹 출력</title>
      <link>https://lightchan.tistory.com/104</link>
      <description>&lt;p&gt;GET과 POST의 &lt;span style=&quot;color: #f89009;&quot;&gt;공통점&lt;/span&gt;은 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;서버에 Request 요청을 하는 메소드&lt;/span&gt;&lt;/b&gt;라점입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ex) 홈페이지에 로그인 등의 작업을 처리할때 사용자(클라이언트)가 폼을 작성후 요청(Request)하는 동작을 의미합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;GET이 POST와의&lt;span style=&quot;color: #ee2323;&quot;&gt; &lt;u&gt;차이점&lt;/u&gt;&lt;/span&gt;은 &lt;span style=&quot;color: #ee2323; background-color: #f3c000;&quot;&gt;&lt;u&gt;클라이언트의 요청이 URL 뒤에 추가되어서 요청되는 점&lt;/u&gt;&lt;/span&gt;입니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;GET 방식(&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;가져온다&lt;/b&gt;&lt;/span&gt;) 의 특징으로는 SELECT 쿼리문과 유사한 성격을 가지며, POST보다 전송속도가 빠르다.&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;왜냐하면, GET 방식은 캐싱(한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓는다) 에 의하여 빠른효과를 나타냅니다.&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ex) www.xxx.com&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;?id=aaa&amp;amp;bbb=111&lt;/u&gt;&lt;/span&gt; 과 같이 작성됩니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 예와 같이 도메인 뒤에 ?가 붙여지며 ?&amp;nbsp; 뒤는 데이터가 들어온다는 것을 의미합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;u&gt;URL 형태로 출력되기 때문에 특정 페이지를 타인이 접속 가능하며, URL의 길이가 한정되어있기 때문에 보내는 양의 한계가 존재&lt;/u&gt;&lt;/span&gt;합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;반면, &lt;b&gt;POST 방식&lt;span style=&quot;color: #ee2323;&quot;&gt;(수행한다&lt;/span&gt;)&lt;/b&gt;은 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;URL이 아닌 BODY에 데이터를 넣어서 숨겨진 상태로 전송해주는 방식입니다.&lt;/u&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;u&gt;보통 HTML에서 form 형태를 이용하여 submit을 사용&lt;/u&gt;&lt;/span&gt;합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1590470319679&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;h3&amp;gt; * 방명록 글쓰기 *&amp;lt;/h3&amp;gt;
&amp;lt;form action=&quot;/guest/insertok&quot; method=&quot;post&quot;&amp;gt; &amp;lt;!-- 위조 방지로 다음 문장 작성 --&amp;gt; {% csrf_token %} 
  &amp;lt;table&amp;gt;
    &amp;lt;tr&amp;gt;
      &amp;lt;td&amp;gt;제목&amp;lt;/td&amp;gt;
	  &amp;lt;td&amp;gt;&amp;lt;input type=&quot;text&quot; name=&quot;title&quot; size=&quot;50&quot;&amp;gt;&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
	&amp;lt;tr&amp;gt;
	  &amp;lt;td&amp;gt;글내용&amp;lt;/td&amp;gt;
	  &amp;lt;td&amp;gt;&amp;lt;textarea rows='5' cols='50' name=&quot;content&quot;&amp;gt;&amp;lt;/textarea&amp;gt;&amp;lt;/td&amp;gt;
	&amp;lt;/tr&amp;gt;
	&amp;lt;tr&amp;gt;
	  &amp;lt;td colspan=&quot;2&quot; style=&quot;text-align: center;&quot;&amp;gt;
	  &amp;lt;input type=&quot;submit&quot; value = &quot;등록&quot;&amp;gt;
	  &amp;lt;/td&amp;gt;
    &amp;lt;/tr&amp;gt;
	&amp;lt;/table&amp;gt;
&amp;lt;/form&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZIcVp/btqEoBbo9iv/EdlwKLtY2leOADiWUKSpc1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZIcVp/btqEoBbo9iv/EdlwKLtY2leOADiWUKSpc1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZIcVp/btqEoBbo9iv/EdlwKLtY2leOADiWUKSpc1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZIcVp%2FbtqEoBbo9iv%2FEdlwKLtY2leOADiWUKSpc1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;위 작성한 Template 소스중 하나입니다. 여기서 제목 내용을 작성후 submit을 누르면 아래의 view를 거치도록 되어있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Django에서 POST 방식을 수행하고 싶은 경우, 사이버공격으로부터 방어하기 위해 Spring 프레임워크와 다르게 form 태그 끝에 {% csrf_token %} 을 작성해주어야한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;csrf란&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;특정 사용자를 대상으로 하지 않고, 불특정 다수를 대상으로 로그인된 사용자가 자신의 의지와는 무관하게 공격자가 의도한 행위(수정, 삭제, 등록, 송금 등)를 하게 만드는 공격&lt;/span&gt;을 뜻합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590470512845&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def InsertOkFunc(request):
    if request.method == 'POST':
        #print(request.POST.get('title')) # 밑과 같은 뜻
        #print(request.POST['title'])
        Guest(
                title = request.POST.get('title'), #.POST['title'],
                content = request.POST.get('content'),
                regdate = datetime.now()
                
        ).save() # ORM추가
        return HttpResponseRedirect('/guest') # 추가후 목록 보기로 돌아감
    else:
        return HttpResponseRedirect('/guest/insert')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;View에서 POST방식으로 request 받은 내용들을 ORM 함수중 하나인 .save() 를 거쳐서 DB에 저장되도록 하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Django</category>
      <category>django</category>
      <category>get</category>
      <category>post</category>
      <category>Request</category>
      <category>서버</category>
      <category>장고</category>
      <category>캐싱</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/104</guid>
      <comments>https://lightchan.tistory.com/104#entry104comment</comments>
      <pubDate>Thu, 21 May 2020 17:45:25 +0900</pubDate>
    </item>
    <item>
      <title>[Django] URLS</title>
      <link>https://lightchan.tistory.com/103</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/05/19 - [Django] - [Django] Application&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1590029825246&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Django] Application&quot; data-og-description=&quot;각각의 역할에 대해 간단하게 정리한 내용은 아래 포스팅글 참고해주세요 2020/05/18 - [Django] - Django 란 ? Django 란 ? 각각의 .py 파일들이 하는 역할은 다음과 같습니다. urls.py - URL 요청을 처리, URL을.&quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/98&quot; data-og-url=&quot;https://lightchan.tistory.com/98&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cJmw28/hyF7m2DUBu/jHkSCzCHKcp8lUkptAdPkk/img.png?width=210&amp;amp;height=99&amp;amp;face=0_0_210_99,https://scrap.kakaocdn.net/dn/7uaZ0/hyF7iMGX6j/ThGGxUKIlAw5iZ1Z9RZhk0/img.png?width=210&amp;amp;height=99&amp;amp;face=0_0_210_99,https://scrap.kakaocdn.net/dn/bmmiTa/hyF7qKKTpQ/1WWlb28B1au2rJ46Nluiu1/img.png?width=609&amp;amp;height=358&amp;amp;face=0_0_609_358&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/98&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cJmw28/hyF7m2DUBu/jHkSCzCHKcp8lUkptAdPkk/img.png?width=210&amp;amp;height=99&amp;amp;face=0_0_210_99,https://scrap.kakaocdn.net/dn/7uaZ0/hyF7iMGX6j/ThGGxUKIlAw5iZ1Z9RZhk0/img.png?width=210&amp;amp;height=99&amp;amp;face=0_0_210_99,https://scrap.kakaocdn.net/dn/bmmiTa/hyF7qKKTpQ/1WWlb28B1au2rJ46Nluiu1/img.png?width=609&amp;amp;height=358&amp;amp;face=0_0_609_358');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Django] Application&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;각각의 역할에 대해 간단하게 정리한 내용은 아래 포스팅글 참고해주세요 2020/05/18 - [Django] - Django 란 ? Django 란 ? 각각의 .py 파일들이 하는 역할은 다음과 같습니다. urls.py - URL 요청을 처리, URL을.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/100&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/05/19 - [Django] - [Django] Template&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;URLS 를 어떤 용도로 사용하는지 이전 포스팅을 참고하면 좋을 것 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;urls의 형태는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1590029990125&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;urlpatterns = [
    path(url경로, view, {key:values}, name),
]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span&gt;path의 1번째 위치는 url경로,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;2번째 위치는 출력할 view,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;3번째 위치는 딕셔너리 형태인 {key:values}&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;4번째 위치는 장고의 위치의 상관 없이 참조할 이름을 정해줍니다.&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;앞의 2개는 필수지만 뒤에 2개는 옵션 선택사항입니다&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;아래 사진을 보시면 urls가 2개가 생성되어있습니다. 그 이유는 프로젝트에 여러개의 APP이 존재하는데 모든 urls의 내용을 프로젝트 root의 urls에 다 넣으면 복잡해지고 찾기 힘들어 지기 때문에 각각의 APP 안에 urls를 만들어주면 보다 더 효율적으로 사용할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tdvOi/btqEkM21EqK/t1s4OaP5KqlK8dS9L4koVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tdvOi/btqEkM21EqK/t1s4OaP5KqlK8dS9L4koVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tdvOi/btqEkM21EqK/t1s4OaP5KqlK8dS9L4koVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtdvOi%2FbtqEkM21EqK%2Ft1s4OaP5KqlK8dS9L4koVK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;프로젝트의 root urls.py 의 url 매핑을 다음과 같이 해줍니다.&lt;/p&gt;
&lt;pre id=&quot;code_1590030215845&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;urlpatterns = [
    path('admin/', admin.site.urls),
    
    path('', views.Main), # myboard의 views의 Main
    path('board/', include('myboard.urls')),

]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;3번째에 작성되어있는 path 경로를 보시면&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;path('board/, include('myboard.urls')) 라고 작성되어있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;이 뜻은 url뒤에 board/를 만나면 myboard 폴더의 urls.py 를 찾아가는 의미&lt;/span&gt;가 되겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Django</category>
      <category>django</category>
      <category>Python</category>
      <category>URL</category>
      <category>urls</category>
      <category>장고</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/103</guid>
      <comments>https://lightchan.tistory.com/103#entry103comment</comments>
      <pubDate>Thu, 21 May 2020 11:51:40 +0900</pubDate>
    </item>
    <item>
      <title>[Dango] DB 연결 및 Migrate</title>
      <link>https://lightchan.tistory.com/102</link>
      <description>&lt;p&gt;앞서 포스팅한 APP 생성, Template 설정, Model 구성이 완료가 되었다면,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;DB 설정 및 makemigrations -&amp;gt; migrate 과정을 수행해주도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;- makemigrations , migrate 작업&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;모델에 만든 클래스들에 맞는 스키마를 생성하고 수정 가능하도록 하기 위해 다음과 같은 명령어를 차례대로 실행합니다&lt;/p&gt;
&lt;p&gt;해당 명령어를 수행하면 APP 하위 폴더에 있는 migrations 폴더에 파일이 생성된 것을 확인 하실 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1590022513123&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py makemigrations
python manage.py migrate&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Yx0GS/btqEjo9Ne08/YP3LkTps81x9UTaiKT7AR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Yx0GS/btqEjo9Ne08/YP3LkTps81x9UTaiKT7AR1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Yx0GS/btqEjo9Ne08/YP3LkTps81x9UTaiKT7AR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYx0GS%2FbtqEjo9Ne08%2FYP3LkTps81x9UTaiKT7AR1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;0001_inital.py&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chYiS9/btqEkabYK3R/PkYvhYdLBHpKWi1443bcI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chYiS9/btqEkabYK3R/PkYvhYdLBHpKWi1443bcI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chYiS9/btqEkabYK3R/PkYvhYdLBHpKWi1443bcI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchYiS9%2FbtqEkabYK3R%2FPkYvhYdLBHpKWi1443bcI1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;- DB 설정 변경&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;urls.py 로 가서 다음과 같은 부분을 변경해주도록 합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJu97o/btqEh69SvWO/4vAuyA2Wfx1yq4TbPUFNG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJu97o/btqEh69SvWO/4vAuyA2Wfx1yq4TbPUFNG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJu97o/btqEh69SvWO/4vAuyA2Wfx1yq4TbPUFNG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJu97o%2FbtqEh69SvWO%2F4vAuyA2Wfx1yq4TbPUFNG1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;ALLOWED_HOSTS = [] 부분에는 자신의 ip 또는 127.0.0.1 을 기재 해주시거나 둘다 해당 가능하게 하고 싶다면 위의 사진처럼 '*'로 해주도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;INSTALLED_APPS = [] 영역에는 자신이 만든 APP 이름을 작성해주도록 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQ8Whd/btqEh6WiN9Q/Yaziw59locOfpwd8T38fKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQ8Whd/btqEh6WiN9Q/Yaziw59locOfpwd8T38fKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQ8Whd/btqEh6WiN9Q/Yaziw59locOfpwd8T38fKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQ8Whd%2FbtqEh6WiN9Q%2FYaziw59locOfpwd8T38fKK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음으로 이 부분을 수정해주도록 합니다. 현재는 프로젝트 생성시 기본을 sqlite3으로 지정했기 때문에 다음과 같이 작성되어있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;저는 다음과 같이 수정하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dQ3moe/btqEh7nrnhz/8XcEsGUrauQ6ikDNRCls2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dQ3moe/btqEh7nrnhz/8XcEsGUrauQ6ikDNRCls2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dQ3moe/btqEh7nrnhz/8XcEsGUrauQ6ikDNRCls2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdQ3moe%2FbtqEh7nrnhz%2F8XcEsGUrauQ6ikDNRCls2k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;u&gt;'ENGINE' 영역 mysql 또는 mariadb 인경우 저처럼 작성해주고, 오라클의 경우에는 mysql 대신 oracle이라고 작성해주시면 됩니다.&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;u&gt;'NAME' 에는 자신이 사용할 DB명을 입력해주도록 합니다.&lt;/u&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;그 외의 것들은 생략하도록 하겠습니다.&lt;/p&gt;</description>
      <category>Django</category>
      <category>db</category>
      <category>django</category>
      <category>Migration</category>
      <category>mirate</category>
      <category>Python</category>
      <category>장고</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/102</guid>
      <comments>https://lightchan.tistory.com/102#entry102comment</comments>
      <pubDate>Thu, 21 May 2020 10:28:33 +0900</pubDate>
    </item>
    <item>
      <title>[Django] Model</title>
      <link>https://lightchan.tistory.com/101</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/100&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/05/19 - [Django] - [Django] Template&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Model이란?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 장고에서 모델은 레이아웃 역할을 담당하고 있으며, 클래스로 테이블의 역할을 한다고 이해하면 될 것 같습니다.&lt;/p&gt;
&lt;p&gt;- 해당 소스코드는 models.py 에 작성&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음과 같은 형태로 작성되는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ltAuG/btqEh7noWZ8/wRdhwk2UEMfxXyRsHkK2EK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ltAuG/btqEh7noWZ8/wRdhwk2UEMfxXyRsHkK2EK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ltAuG/btqEh7noWZ8/wRdhwk2UEMfxXyRsHkK2EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FltAuG%2FbtqEh7noWZ8%2FwRdhwk2UEMfxXyRsHkK2EK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;models에서 사용하는 대표적인 데이터 타입&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style5&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;CharField()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;제한을 둘 수 있는 문자형 타입&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;'max_length = 숫자'를 입력하면 그 길이만큼 제한&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;TextField&lt;span style=&quot;color: #333333;&quot;&gt;TextField()&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;데이터의 길이가 큰 경우 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;IntegerField()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;32비트의 정수형 형태&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;BooleanField()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;True False 의 경우 사용하며, Null은 앞에 Null을 추가해준다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DateTimeField()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;날짜와 시간 나타낼 때 사용. 날짜만 사용하고 싶다면 DateField, 시간만 사용하고 싶다면 TimeField를 사용한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;DecimalField()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;소수점을 이용해야 하는 경우 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Django</category>
      <category>APP</category>
      <category>django</category>
      <category>model</category>
      <category>Python</category>
      <category>template</category>
      <category>View</category>
      <category>장고</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/101</guid>
      <comments>https://lightchan.tistory.com/101#entry101comment</comments>
      <pubDate>Wed, 20 May 2020 17:57:19 +0900</pubDate>
    </item>
    <item>
      <title>[Django] Template</title>
      <link>https://lightchan.tistory.com/100</link>
      <description>&lt;p&gt;Template 란?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 얻은 데이터들을 포함한 웹 HTML 파일입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- App 폴더 밑에 &quot;templates&quot; 라는 폴더를 만들고 그 안에 파일(*.html)을 생성&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 이는 App이 1개이거나 동일 템플릿명이 없을때 사용할 수 있다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vmx79/btqEeqgdCEp/2jYnt9I0zduV0j5KUa6dDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vmx79/btqEeqgdCEp/2jYnt9I0zduV0j5KUa6dDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vmx79/btqEeqgdCEp/2jYnt9I0zduV0j5KUa6dDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvmx79%2FbtqEeqgdCEp%2F2jYnt9I0zduV0j5KUa6dDK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 view로 가서 어떻게 데이터를 가공할 뿌려줄지 정의할 함수를 만들어줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;형태는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589858456359&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def 함수명(request):
	return render(request, '템플릿파일', 'Optional로 dict type 데이터 전달')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;템플릿에서 사용하는 것들&lt;/h4&gt;
&lt;p&gt;템플릿 변수&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;템플릿 변수는 {{&amp;nbsp; }} 의 형태로 만들어 값이 해당 위치인 {{ }} 안에서 치환되며,&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;변수에는 변수 혹은 객체의 속성을 가질 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590034945166&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; Name : {{ name }}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;템플릿 태그&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1590035829544&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;if문의 경우

{% if 조건 %}
	소스코드
{% else %}
	소스코드
{% endif %}



for문의 경우


{% for d in data %}
	반복할 소스코드
{% endfor %}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;템플릿 태그 사용 후, 해킹 방지를 위해서&lt;/p&gt;
&lt;pre id=&quot;code_1590035869791&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; {% csrf_token %}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;를 추가해주셔야 합니다&lt;/p&gt;</description>
      <category>Django</category>
      <category>Python</category>
      <category>template</category>
      <category>{%%}</category>
      <category>{{}}</category>
      <category>장고</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/100</guid>
      <comments>https://lightchan.tistory.com/100#entry100comment</comments>
      <pubDate>Tue, 19 May 2020 12:21:04 +0900</pubDate>
    </item>
    <item>
      <title>[Django] View</title>
      <link>https://lightchan.tistory.com/99</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/05/19 - [Django] - [Django] Application&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589857323669&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Django] Application&quot; data-og-description=&quot;각각의 역할에 대해 간단하게 정리한 내용은 아래 포스팅글 참고해주세요 2020/05/18 - [Django] - Django 란 ? Django 란 ? 각각의 .py 파일들이 하는 역할은 다음과 같습니다. urls.py - URL 요청을 처리, URL을.&quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/98&quot; data-og-url=&quot;https://lightchan.tistory.com/98&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eMZSq/hyF6mgKrTc/8630ey84Otjm4Hu5yH23UK/img.png?width=210&amp;amp;height=99&amp;amp;face=0_0_210_99,https://scrap.kakaocdn.net/dn/e6Gbv/hyF6iel4zo/Vum4lFK5KPXyqczItLv7KK/img.png?width=210&amp;amp;height=99&amp;amp;face=0_0_210_99,https://scrap.kakaocdn.net/dn/YRECf/hyF6m8TQ7J/k0tmIP7r8m7Xpnk9cSVbQk/img.png?width=609&amp;amp;height=358&amp;amp;face=0_0_609_358&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/98&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/98&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eMZSq/hyF6mgKrTc/8630ey84Otjm4Hu5yH23UK/img.png?width=210&amp;amp;height=99&amp;amp;face=0_0_210_99,https://scrap.kakaocdn.net/dn/e6Gbv/hyF6iel4zo/Vum4lFK5KPXyqczItLv7KK/img.png?width=210&amp;amp;height=99&amp;amp;face=0_0_210_99,https://scrap.kakaocdn.net/dn/YRECf/hyF6m8TQ7J/k0tmIP7r8m7Xpnk9cSVbQk/img.png?width=609&amp;amp;height=358&amp;amp;face=0_0_609_358');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Django] Application&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;각각의 역할에 대해 간단하게 정리한 내용은 아래 포스팅글 참고해주세요 2020/05/18 - [Django] - Django 란 ? Django 란 ? 각각의 .py 파일들이 하는 역할은 다음과 같습니다. urls.py - URL 요청을 처리, URL을.&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Django에서 View 역할 ?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- MVC 패턴의 웹 개발에서 Controller와 비슷한 역할을 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- View는 적절한 데이터를 모델로부터 얻어와 웹 페이지 결과를 도출할 수 있도록 컨트롤하는 역할을 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- views.py 에 각 함수는 각각의 View를 정의해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589855558643&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def MainFunc(request):
    return render(request, 'main.html')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 함수에서는 요청이 들어오면 'main.html'로 가도록 설정되어있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;장고는 MTV( &lt;span style=&quot;color: #666666;&quot;&gt;Model, Template, View ) 패턴을 따르고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Model &lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- 클래스를 만드는 역할이며, 데이터를 출력 시키는 모델을 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- 하나의 클래스는 DB에서 테이블 역할도 해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Template&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- HTML 파일로 화면에 출력해줄 웹 페이지를 해당 위치에 만들어줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;View&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&lt;span&gt;- 메소드를 통하여 받으며, HTTPRequest를 받아 HTTPResponse로 응답해줍니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Django</category>
      <category>django</category>
      <category>model</category>
      <category>mtv</category>
      <category>Python</category>
      <category>template</category>
      <category>View</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/99</guid>
      <comments>https://lightchan.tistory.com/99#entry99comment</comments>
      <pubDate>Tue, 19 May 2020 12:02:07 +0900</pubDate>
    </item>
    <item>
      <title>[Django] Application</title>
      <link>https://lightchan.tistory.com/98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 역할에 대해 간단하게 정리한 내용은 아래 포스팅글 참고해주세요&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/96&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/05/18 - [Django] - Django 란 ?&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589854595155&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Django 란 ?&quot; data-og-description=&quot;각각의 .py 파일들이 하는 역할은 다음과 같습니다. urls.py - URL 요청을 처리, URL을 기준으로 HTTP 요청을 알맞은 view 에 전달해주기 위해 사용합니다. 추가로, URL 매퍼(mapper)는 패턴(숫자 또는 문자)�&quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/96&quot; data-og-url=&quot;https://lightchan.tistory.com/96&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b1GMjH/hyF6iZGxJZ/FK3qcbuDvSBP5vTGga7yjK/img.png?width=800&amp;amp;height=425&amp;amp;face=0_0_800_425,https://scrap.kakaocdn.net/dn/gRqHc/hyF6lvkRIH/WpgD4yeo8j8gGd3Z4KR9a1/img.png?width=800&amp;amp;height=425&amp;amp;face=0_0_800_425,https://scrap.kakaocdn.net/dn/bdBSpi/hyF6la1tqP/CLRr8mmoaimSyGb0ZLM6V0/img.png?width=862&amp;amp;height=459&amp;amp;face=0_0_862_459&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/96&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/96&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b1GMjH/hyF6iZGxJZ/FK3qcbuDvSBP5vTGga7yjK/img.png?width=800&amp;amp;height=425&amp;amp;face=0_0_800_425,https://scrap.kakaocdn.net/dn/gRqHc/hyF6lvkRIH/WpgD4yeo8j8gGd3Z4KR9a1/img.png?width=800&amp;amp;height=425&amp;amp;face=0_0_800_425,https://scrap.kakaocdn.net/dn/bdBSpi/hyF6la1tqP/CLRr8mmoaimSyGb0ZLM6V0/img.png?width=862&amp;amp;height=459&amp;amp;face=0_0_862_459');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;Django 란 ?&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;각각의 .py 파일들이 하는 역할은 다음과 같습니다. urls.py - URL 요청을 처리, URL을 기준으로 HTTP 요청을 알맞은 view 에 전달해주기 위해 사용합니다. 추가로, URL 매퍼(mapper)는 패턴(숫자 또는 문자)�&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Django에서 Project와 APP의 역할&lt;/h3&gt;
&lt;p&gt;&lt;br /&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;1개의 프로젝트 안에 다양한 기능들이 있고, 기능들을 수행하는 여러개의 App으로 관리&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- Django App 만드는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1589852197188&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py startapp 만들app이름&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ROhY3/btqEeqtE0dr/YQEmuDsbNtIVLAXLriANZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ROhY3/btqEeqtE0dr/YQEmuDsbNtIVLAXLriANZK/img.png&quot; data-alt=&quot;startapp을 통해 myapp 생성&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ROhY3/btqEeqtE0dr/YQEmuDsbNtIVLAXLriANZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FROhY3%2FbtqEeqtE0dr%2FYQEmuDsbNtIVLAXLriANZK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;startapp을 통해 myapp 생성&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;- 만든 App을 사용 가능하게 하기&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사용하여 '안녕하세요 Django App 사용해보기' 를 출력을 위해 views.py로 가서 다음과 같이 작성해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;views.py&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1589853624240&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.shortcuts import render

# Create your views here.
def MainFunc(request):
    return render(request, 'main.html')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;그 다음 'main.html'이라는 웹에서 출력되어야하기 때문에 setting.py 와 urls.py 를 수정해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWTQeF/btqEfqfH1Nr/AIdB1k2osVPCRPpJLgV5U1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWTQeF/btqEfqfH1Nr/AIdB1k2osVPCRPpJLgV5U1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWTQeF/btqEfqfH1Nr/AIdB1k2osVPCRPpJLgV5U1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWTQeF%2FbtqEfqfH1Nr%2FAIdB1k2osVPCRPpJLgV5U1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;settings.py&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctKwXx/btqEeXY8k5h/wVN5oPGvkSbNgN3whtbCkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctKwXx/btqEeXY8k5h/wVN5oPGvkSbNgN3whtbCkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctKwXx/btqEeXY8k5h/wVN5oPGvkSbNgN3whtbCkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctKwXx%2FbtqEeXY8k5h%2FwVN5oPGvkSbNgN3whtbCkk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;urls.py&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V2Xgi/btqEg2dSgjf/RDubkOp3WkcsCIvXRmu3K0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V2Xgi/btqEg2dSgjf/RDubkOp3WkcsCIvXRmu3K0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V2Xgi/btqEg2dSgjf/RDubkOp3WkcsCIvXRmu3K0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV2Xgi%2FbtqEg2dSgjf%2FRDubkOp3WkcsCIvXRmu3K0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서&lt;span style=&quot;color: #ee2323;&quot;&gt; import 추가 한 부분은 생성한 APP이름을 임포트 하고, 경로 설정은 자신이 설정한 'views.함수명'을 입력해주도록 합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이러한 과정이 끝나셨다면 프로젝트를 실행 후 웹에서 해당 주소를 입력후 접속하면 다음과 같이 정상 출력되는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qFbAA/btqEfqmsoDd/MB6QLghQTkI7PU6fkk51zK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qFbAA/btqEfqmsoDd/MB6QLghQTkI7PU6fkk51zK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qFbAA/btqEfqmsoDd/MB6QLghQTkI7PU6fkk51zK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqFbAA%2FbtqEfqmsoDd%2FMB6QLghQTkI7PU6fkk51zK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/99&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/05/19 - [Django] - [Django] View&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589857340825&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Django] View&quot; data-og-description=&quot;2020/05/19 - [Django] - [Django] Application [Django] Application 각각의 역할에 대해 간단하게 정리한 내용은 아래 포스팅글 참고해주세요 2020/05/18 - [Django] - Django 란 ? Django 란 ? 각각의 .py 파일..&quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/99&quot; data-og-url=&quot;https://lightchan.tistory.com/99&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cVCgW5/hyF6l3dNz5/IjrdW9U46dU2OuFKKdmTk1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cBKtHx/hyF6f9KClP/BbnZjUpj4Q6Mbjur4gSZf1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/99&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/99&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cVCgW5/hyF6l3dNz5/IjrdW9U46dU2OuFKKdmTk1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cBKtHx/hyF6f9KClP/BbnZjUpj4Q6Mbjur4gSZf1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;[Django] View&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;2020/05/19 - [Django] - [Django] Application [Django] Application 각각의 역할에 대해 간단하게 정리한 내용은 아래 포스팅글 참고해주세요 2020/05/18 - [Django] - Django 란 ? Django 란 ? 각각의 .py 파일..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Django</category>
      <category>APP</category>
      <category>django</category>
      <category>Eclipse</category>
      <category>Python</category>
      <category>Templates</category>
      <category>urls</category>
      <category>views</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/98</guid>
      <comments>https://lightchan.tistory.com/98#entry98comment</comments>
      <pubDate>Tue, 19 May 2020 11:16:40 +0900</pubDate>
    </item>
    <item>
      <title>[Django] 프로젝트 설정 준비</title>
      <link>https://lightchan.tistory.com/97</link>
      <description>&lt;p&gt;이클립스로 설정을 하고 공부하기 때문에, 이클립스로 하실분들중에 준비가 되지 않으신 분들께서는 아래 글을 먼저 참고해주시기 바랍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/65&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/05/06 - [python] - python - 특징 &amp;amp; 설치&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589790702880&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;python - 특징 &amp;amp; 설치&quot; data-og-description=&quot;파이썬을 어디에 사용하면 좋을까 ? - 시스템 유틸리티 시스템 명령어를 사용할 수 있는 각종 도구를 갖추고 있기 때문에 이를 바탕으로 갖가지 시스템 유틸리티를 만들 수 있다. - GUI 화면에 또 &quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/65&quot; data-og-url=&quot;https://lightchan.tistory.com/65&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bOFDj7/hyF4VRVZFh/MOuvw7vwZKTWLCYzkap1zK/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/dnTQwv/hyF40Z0f0f/d5Zvkcgev7sWIHDu0xrfqK/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/zUobc/hyF45NLhhS/V59xnWKLF4oI5k3d6g4FOK/img.png?width=2034&amp;amp;height=1642&amp;amp;face=0_0_2034_1642&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/65&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/65&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bOFDj7/hyF4VRVZFh/MOuvw7vwZKTWLCYzkap1zK/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/dnTQwv/hyF40Z0f0f/d5Zvkcgev7sWIHDu0xrfqK/img.png?width=800&amp;amp;height=622&amp;amp;face=0_0_800_622,https://scrap.kakaocdn.net/dn/zUobc/hyF45NLhhS/V59xnWKLF4oI5k3d6g4FOK/img.png?width=2034&amp;amp;height=1642&amp;amp;face=0_0_2034_1642');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;python - 특징 &amp;amp; 설치&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;파이썬을 어디에 사용하면 좋을까 ? - 시스템 유틸리티 시스템 명령어를 사용할 수 있는 각종 도구를 갖추고 있기 때문에 이를 바탕으로 갖가지 시스템 유틸리티를 만들 수 있다. - GUI 화면에 또&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;step 1&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AGgIG/btqEeq09LAW/jLkncXBptzDpBKLWPndb81/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AGgIG/btqEeq09LAW/jLkncXBptzDpBKLWPndb81/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AGgIG/btqEeq09LAW/jLkncXBptzDpBKLWPndb81/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAGgIG%2FbtqEeq09LAW%2FjLkncXBptzDpBKLWPndb81%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7l1NG/btqEd9rQsnC/nManjWtRLoUFndGHQk70sK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7l1NG/btqEd9rQsnC/nManjWtRLoUFndGHQk70sK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7l1NG/btqEd9rQsnC/nManjWtRLoUFndGHQk70sK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7l1NG%2FbtqEd9rQsnC%2FnManjWtRLoUFndGHQk70sK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0LZQ8/btqEfXqqZsW/JxUiUxDpMxAIOckGkerxt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0LZQ8/btqEfXqqZsW/JxUiUxDpMxAIOckGkerxt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0LZQ8/btqEfXqqZsW/JxUiUxDpMxAIOckGkerxt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0LZQ8%2FbtqEfXqqZsW%2FJxUiUxDpMxAIOckGkerxt0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;설정을 다 하신 후 Next -&amp;gt; Next -&amp;gt; 하시게되면 다음과 같은 창에서 Finish 를 클릭해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GgbIJ/btqEeY4sOgh/9pLCxSOk9QkvvpDvy0XoKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GgbIJ/btqEeY4sOgh/9pLCxSOk9QkvvpDvy0XoKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GgbIJ/btqEeY4sOgh/9pLCxSOk9QkvvpDvy0XoKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGgbIJ%2FbtqEeY4sOgh%2F9pLCxSOk9QkvvpDvy0XoKK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트 생성을 마치시면 프로젝트 창에 다음과 같이 생성된 것을 확인하실 수 있습니다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AtPUG/btqEfryvxp8/Cv5guHa2a2Rz4NdoOZyJKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AtPUG/btqEfryvxp8/Cv5guHa2a2Rz4NdoOZyJKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AtPUG/btqEfryvxp8/Cv5guHa2a2Rz4NdoOZyJKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAtPUG%2FbtqEfryvxp8%2FCv5guHa2a2Rz4NdoOZyJKk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로젝트에서 기본적으로 사용할 명령어는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;장고 APP 생성하는 방법&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;# 아나콘다와 같은 가상환경 또는 타 프롬포트를 사용할 경우&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589791480893&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd 해당 경로
python manage.py startapp 'APP이름'

ex)
cd django_practice100
python manage.py startapp myapp
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bSDBW1/btqEd8foDD9/vPAOlzLFFRRUkMMZ0Df0K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bSDBW1/btqEd8foDD9/vPAOlzLFFRRUkMMZ0Df0K1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bSDBW1/btqEd8foDD9/vPAOlzLFFRRUkMMZ0Df0K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbSDBW1%2FbtqEd8foDD9%2FvPAOlzLFFRRUkMMZ0Df0K1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;또는 이클립스에서 사용 하는 방법&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cI6cm4/btqEggDkzNw/kc7klk3B89kxaSBfS5kvk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cI6cm4/btqEggDkzNw/kc7klk3B89kxaSBfS5kvk0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cI6cm4/btqEggDkzNw/kc7klk3B89kxaSBfS5kvk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcI6cm4%2FbtqEggDkzNw%2Fkc7klk3B89kxaSBfS5kvk0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cazYJM/btqEgQ5saeq/v1VQCNdkecJcpIncG83LYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cazYJM/btqEgQ5saeq/v1VQCNdkecJcpIncG83LYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cazYJM/btqEgQ5saeq/v1VQCNdkecJcpIncG83LYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcazYJM%2FbtqEgQ5saeq%2Fv1VQCNdkecJcpIncG83LYK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터베이스의 변경 사항 적용 방법&lt;/h3&gt;
&lt;pre id=&quot;code_1589791827340&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py migrate&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cf6lRa/btqEdxl7IZ4/ja8R5noDbYGXwcKf2DeAS1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cf6lRa/btqEdxl7IZ4/ja8R5noDbYGXwcKf2DeAS1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cf6lRa/btqEdxl7IZ4/ja8R5noDbYGXwcKf2DeAS1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcf6lRa%2FbtqEdxl7IZ4%2Fja8R5noDbYGXwcKf2DeAS1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;또는 이클립스의 경우&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHdmpC/btqEfXKKB06/OU0EjEpuqpYvv0Ua83nzpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHdmpC/btqEfXKKB06/OU0EjEpuqpYvv0Ua83nzpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHdmpC/btqEfXKKB06/OU0EjEpuqpYvv0Ua83nzpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHdmpC%2FbtqEfXKKB06%2FOU0EjEpuqpYvv0Ua83nzpk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;장고 프로젝트 실행 방법&lt;/p&gt;
&lt;pre id=&quot;code_1589791976732&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;python manage.py runserver&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dTz89Z/btqEeX5xUOH/4C1hKLRx0Jj00tbuZpzut0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dTz89Z/btqEeX5xUOH/4C1hKLRx0Jj00tbuZpzut0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dTz89Z/btqEeX5xUOH/4C1hKLRx0Jj00tbuZpzut0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdTz89Z%2FbtqEeX5xUOH%2F4C1hKLRx0Jj00tbuZpzut0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이클립스에서 사용할 경우&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FOep2/btqEfrFnJZs/t3UjWF8phWUXCqNqxEOGdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FOep2/btqEfrFnJZs/t3UjWF8phWUXCqNqxEOGdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FOep2/btqEfrFnJZs/t3UjWF8phWUXCqNqxEOGdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFOep2%2FbtqEfrFnJZs%2Ft3UjWF8phWUXCqNqxEOGdK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Django</category>
      <category>django</category>
      <category>migrate</category>
      <category>mygrations</category>
      <category>Python</category>
      <category>runserver</category>
      <category>가상환경</category>
      <category>장고</category>
      <category>파이선</category>
      <category>파이썬</category>
      <category>환경설정</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/97</guid>
      <comments>https://lightchan.tistory.com/97#entry97comment</comments>
      <pubDate>Mon, 18 May 2020 17:41:14 +0900</pubDate>
    </item>
    <item>
      <title>Django 란 ?</title>
      <link>https://lightchan.tistory.com/96</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WFVrY/btqEfXw7Zpy/ciV6Ojo42M1A5GdPmClLbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WFVrY/btqEfXw7Zpy/ciV6Ojo42M1A5GdPmClLbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WFVrY/btqEfXw7Zpy/ciV6Ojo42M1A5GdPmClLbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWFVrY%2FbtqEfXw7Zpy%2FciV6Ojo42M1A5GdPmClLbk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;각각의 .py 파일들이 하는 역할은 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;urls.py&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;- URL 요청을 처리, URL을 기준으로 HTTP 요청을 알맞은 view 에 전달해주기 위해 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;추가로, URL 매퍼(mapper)는 패턴(숫자 또는 문자)을 맞추고 뷰 함수에 전달합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589786908320&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;urlpatterns = [
    path('', views.Main),
    path('list1', views.List1),
]&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;위 예시에서&lt;/p&gt;
&lt;pre id=&quot;code_1589787025238&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;path('', views.Main),&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;이 문장이 뜻하는바는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;URL에 ' 해당 URL/ ' 와 같이 ' 해당 URL ' 다음 아무것도 찍히지 않으면,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;&amp;nbsp;views.py 의 'Main' 함수를 실행한다는 의미&lt;/span&gt;입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589787426631&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;path('list1', views.List1),&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;그렇다면 위의 한줄은 URL에 '해당URL/' 다음에 'list1'이 찍히면,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;views.py의 'List1'함수를 실행한다는 의미입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;views.py&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;- HTTP request(요청) 수신하고 response(응답) 반환 역할을합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;models.py을 통해 요청에 적절할 데이터를 가져옵니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589787591584&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def Main(request):
    return render(request, 'main.html')

def List1(request):
    makers = Maker.objects.all()
    return render(request, 'list1.html', {'makers':makers})&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;해당 소스코드를 살펴보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589787786367&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def Main(request):
    return render(request, 'main.html')
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;urls.py 에서 보셨듯이, path가 '' 경우 Main 함수로 와야한다고 하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;Main 함수는 main.html로 보내는 것을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589787894807&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def List1(request):
    makers = Maker.objects.all()
    return render(request, 'list1.html', {'makers':makers})&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;urls.py 에서 list1을 만난 경우 'List1' 함수를 통해 'list.html'에 model로 부터 알맞은 데이터를dict 형식으로 makers라는 sql 파일을 가져오는 것을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;models.py&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;- APP의 구조 정의 및 DB 기록 추가,수정,삭제 기능을 하며, query를 제공하는 파이썬 객체 설정&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589788176384&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Maker(models.Model): 
    mname = models.CharField()
    tel = models.CharField()
    addr = models.CharField()&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Maker라는 클래스에 models.Model을 상속받아, 파이썬 객체를 설정한 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Templates 폴더 내 html 파일&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;- 파일 구조 및 css과 같은 디자인을 담당하는 HTML 페이지, 내용을 보여주는데 필요한 텍스트 파일입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589788475831&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{% for m in makers %}
&amp;lt;tr&amp;gt;
	&amp;lt;td&amp;gt;{{m.id}}&amp;lt;/td&amp;gt;
	&amp;lt;td&amp;gt;&amp;lt;a href=&quot;/list3?id={{m.id}}&quot;&amp;gt;{{m.mname}}&amp;lt;/a&amp;gt;&amp;lt;/td&amp;gt;
	&amp;lt;td&amp;gt;{{m.tel}}&amp;lt;/td&amp;gt;
	&amp;lt;td&amp;gt;{{m.addr}}&amp;lt;/td&amp;gt;
&amp;lt;/tr&amp;gt;
{% endfor %}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;장고에서 사용하는 문법으로 HTML 페이지에 필요한 내용을 출력해주는 것을 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;결론:&lt;/h4&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;view는 HTML 파일을 이용하여 HTML 페이지를 작성하고 model에서 얻어온 데이터로 채웁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ㅇ&lt;/p&gt;</description>
      <category>Django</category>
      <category>django</category>
      <category>Models</category>
      <category>Python</category>
      <category>urls</category>
      <category>View</category>
      <category>views</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/96</guid>
      <comments>https://lightchan.tistory.com/96#entry96comment</comments>
      <pubDate>Mon, 18 May 2020 16:09:31 +0900</pubDate>
    </item>
    <item>
      <title>python - Thread ( 스레드 ) (1)</title>
      <link>https://lightchan.tistory.com/94</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;스레드란 ?&lt;/b&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- 1개의 프로세스가 1개의 일을 하지만,&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스레드를 이용하면 동시에 여러 일을 수행 가능하게 해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;- Light Weight Process라고도 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;스레드의 특징 및 장점&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;# process와 달리 값은 process 내에서 자원을 메소드 / 함수 자원을 공유합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;# 멀티 스레드를 사용하면 멀티테스킹이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;# CPU의 유효시간을 최소화 시킬 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;# idle time을 최소화하면서 메소드 단위로 진행 할 경우 메모리 절약, 여러개 응용프로그램을 동시 조작 가능&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;스레드를 사용하기 위해선 다음과 같은 모듈을 호출합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1589527561095&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import threading&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Ex 1) 스레드를 사용한 경우와 사용하지 않은 경우 차이점 알기&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589529229040&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def run(id):
    for i in range(1,4):
        print('id : {} --&amp;gt; {}'.format(id, i))

# thread를 사용하지 않는 경우
# 순서대로 출력합니다. -&amp;gt; 일 3번찍고 둘 3번찍고
run('일')
run('둘')        
print()


# 출력 결과

id : 일 --&amp;gt; 1
id : 일 --&amp;gt; 2
id : 일 --&amp;gt; 3
id : 둘 --&amp;gt; 1
id : 둘 --&amp;gt; 2
id : 둘 --&amp;gt; 3

프로그램종료&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;우선, 스레드를 사용하지 않은 소스코드입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;for문이 1부터 3번을 반속 수행하는데 스레드를 사용 하지 않았기 때문에, 하나의 작업을 끝마친후 다음 작업을 진행하는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번에는 스레드를 사용한 경우&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- 여기서 스레드를 사용할 경우 랜덤으로 실행되지만, 실행 순서를 정해줄 순 없다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1589529649548&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;변수명 = threading.Thread(target=스레드 진행할 함수, args=(돌릴 인자))

변수명.start() : 스레드 시작시 사용

변수명.join() : 스레드가 종료되길 기다릴 경우

변수명.run() : 스레드의 동작을 정의&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589529695568&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import threading

def run(id):
    for i in range(1,4):
        print('id : {} --&amp;gt; {}'.format(id, i))
        time.sleep(0.3) # 동시에 돌아가는것을 보여주기위해 작성

th1 = threading.Thread(target=run, args=('일'))
th2 = threading.Thread(target=run, args=('둘'))

th1.start()
th2.start()

th1.join()
th2.join()


# 출력 결과

id : 일 --&amp;gt; 1
id : 둘 --&amp;gt; 1
id : 일 --&amp;gt; 2
id : 둘 --&amp;gt; 2
id : 일 --&amp;gt; 3
id : 둘 --&amp;gt; 3
프로그램종료&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;th1 스레드 1번 th2 스레드 1번 이 과정을 반복하여 실행되는 결과를 볼 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음으로 join() 함수를 사용하지 않고, 출력한 경우의 출력 결과입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1589530153816&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 출력 결과

id : 일 --&amp;gt; 1
id : 둘 --&amp;gt; 1
프로그램종료
id : 일 --&amp;gt; 2
id : 둘 --&amp;gt; 2
id : 둘 --&amp;gt; 3
id : 일 --&amp;gt; 3
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;차이점은 다음과 같습니다.&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;join 함수를 사용하지 않으면 스레드가 끝나길 기다리지 않고, print() 문의 '프로그램종료' 를 출력 후 다시 작동하는 것을 볼 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;반면 join() 함수를 사용한 경우 스레드 과정을 다 마친 후에 print() 문을 출력한 사실을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;Ex 2) thread와 time 모듈을 이용하여 날짜 및 시간을 출력하기&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1589530538527&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import time
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;time 모듈의 localtime() 함수를 가지고 존재하는 속성값&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 77.3256%; height: 413px;&quot; border=&quot;1&quot; data-ke-style=&quot;style7&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;tm_year&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;년도(4자리 작성)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;tm_mon&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;
&lt;p&gt;&lt;span&gt;월(1~12)&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;tm_mday&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 10px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;일(1~31)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;tm_hour&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;시(0~23)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;tm_min&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;분(0~59)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;tm_sec&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;초(0~60)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;tm_wday&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;각 요일을 숫자로 나타냅니다. (월요일= '0')&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;
&lt;p&gt;&lt;span&gt;&lt;b&gt;tm_yday&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1월 1일부터 오늘까지 일 수 (1~365)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589531151825&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 이 소스코드는 스레드를 사용하지 않았습니다.

now = time.localtime()

print('현재는{}년  {}월 {}일'.format(now.tm_year, now.tm_mon, now.tm_mday))
print('{}시 {}분  {}초'.format(now.tm_hour, now.tm_min, now.tm_sec))
print('오늘은  {} 요일 이고 올해  {} 번째 날'.format(now.tm_wday, now.tm_yday))


# 출력 결과

현재는2020년  5월 15일
17시 25분  53초
오늘은  4 요일 이고 올해  136 번째 날
프로그램  종료
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;thread를 사용하여 현재 진행중인 시간 1초마다 반복 출력&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589531311896&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import time
import threading

def cal_show():
    now = time.localtime()
    print('현재 {} 년  {} 월 {} 일'.format(now.tm_year, now.tm_mon, now.tm_mday), end = ' ')
    print('{} 시  {} 분   {} 초'.format(now.tm_hour, now.tm_min, now.tm_sec))

def myRun():
    while True:
        now2 = time.localtime()
        if now2.tm_min == 34: break
        cal_show()
        time.sleep(1)
  
th = threading.Thread(target=myRun)
th.start()
th.join()

print('프로그램  종료')


# 출력 결과

현재 2020 년  5 월 15 일 17 시  28 분   6 초
현재 2020 년  5 월 15 일 17 시  28 분   7 초
현재 2020 년  5 월 15 일 17 시  28 분   8 초
현재 2020 년  5 월 15 일 17 시  28 분   9 초
현재 2020 년  5 월 15 일 17 시  28 분   10 초
현재 2020 년  5 월 15 일 17 시  28 분   11 초
현재 2020 년  5 월 15 일 17 시  28 분   12 초
현재 2020 년  5 월 15 일 17 시  28 분   13 초
현재 2020 년  5 월 15 일 17 시  28 분   14 초
현재 2020 년  5 월 15 일 17 시  28 분   15 초
현재 2020 년  5 월 15 일 17 시  28 분   16 초
현재 2020 년  5 월 15 일 17 시  28 분   17 초
현재 2020 년  5 월 15 일 17 시  28 분   18 초
현재 2020 년  5 월 15 일 17 시  28 분   19 초
현재 2020 년  5 월 15 일 17 시  28 분   20 초&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>Python</category>
      <category>thread</category>
      <category>멀티프로세스</category>
      <category>스레드</category>
      <category>쓰레드</category>
      <category>파이썬</category>
      <category>프로세스</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/94</guid>
      <comments>https://lightchan.tistory.com/94#entry94comment</comments>
      <pubDate>Thu, 14 May 2020 14:04:21 +0900</pubDate>
    </item>
    <item>
      <title>python - DataBase 연동 &amp;amp; SQL 작업</title>
      <link>https://lightchan.tistory.com/93</link>
      <description>&lt;table id=&quot;protectTable&quot; style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;
&lt;p&gt;&lt;b&gt;* 윈도우에서 python용 MySql(MariaDB) 드라이버 설치 방법&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;버전별 드라이버 다운로드&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://www.lfd.uci.edu/~gohlke/pythonlibs/&quot;&gt;http://www.lfd.uci.edu/~gohlke/pythonlibs/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;사이트에서&amp;nbsp;mysqlclient&lt;span&gt;&amp;nbsp;로 검색하여 원하는 파일(&amp;nbsp;&lt;/span&gt;mysqlclient-1..-cp3*-cp3*m-win_amd64.whl&lt;span&gt;&amp;nbsp;)을 다운로드하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;확장자를 zip으로 변경하고 압축을 풀어준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;풀린 파일과 폴더들을 복사한 후&amp;nbsp;&lt;/span&gt;C:\Python3*\Lib\site-packages 에 붙여넣기 하면 된다.&lt;/p&gt;
&lt;p&gt;또는&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;pip install ...&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;해주면 된다.&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;이클립스에서 MariaDB를 연결하는 방법은 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;방법 1.&lt;/p&gt;
&lt;pre id=&quot;code_1589358348710&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;conn = MySQLdb.connect(host = '127.0.0.1', user = '사용자이름', password='비밀번호', database='DB명')

ex)
conn = MySQLdb.connect(host = '127.0.0.1', user = 'root', password='123', database='test')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;또는 다음과 같이 작성해주시면됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589358464053&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;config = {

    'host':'127.0.0.1',
    'user':'사용자이름',
    'password':'비밀번호',
    'database':'DB명',
    'port':3306,
    'charset':'utf8',
    'use_unicode':True
}

ex)

config = {

    'host':'127.0.0.1',
    'user':'root',
    'password':'123',
    'database':'test',
    'port':3306,
    'charset':'utf8',
    'use_unicode':True

}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번에는 제가 만든 테이블에 데이터를 삽입하고 결과를 출력해보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;table prac&lt;/p&gt;
&lt;pre id=&quot;code_1589424969175&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;CREATE TABLE prac(num INT(255) NOT NULL PRIMARY KEY,
NAME VARCHAR(20),
HOUR INT(11),
pay INT(11))
COLLATE='utf8_general_ci'
ENGINE=InnoDB
;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 DB연결 코드 밑에 데이터 삽입 SQL문을 넣고 결과를 보겠습니다&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589425122065&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;try:
    conn = MySQLdb.connect(**config)
    print(conn) # DB가 잘 연결되었는지 확인
    cursor = conn.cursor() # SQL문 수행을 위한 커서 객체 생성
    
   
        
except Exception as e:
    print('err : ',  e) 
    
finally:
    cursor.close()
    conn.close()

# print(conn) 의 출력 결과
&amp;lt;_mysql.connection open to '127.0.0.1' at 0000025181F6F578&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;try문 내의 코드는 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- import MySQLdb 를 하여 MySQLdb 모듈을 불러옵니다.&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- MySQLdb.connect(**config) 메소드를 통하여 MySQL에 연결해줍니다. 호스트명, 사용자명, 암호, 접속할 DB, 포트, 등을 기재합니다.&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- DB 접속이 성공하면, Connection 객체로부터 cursor() 메서드를 호출하여 Cursor 객체를 가져옵니다.&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- cursor 객체를 생성하였다면 이제 이 객체로 SQL의 DML 명령어들을 다 수행할 수 있습니다.&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 자료를 추가하고 수정하고 삭제하는 DML 명령어들을 작성해보겠습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;지금부터 작성되는 내용들은 try ~ except 안에 추가로 작성해주시면됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 자료 추가 ( insert ) , 자료 조회 ( select )&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;방법 1.&lt;/p&gt;
&lt;pre id=&quot;code_1589425841960&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 자료 추가
    sql = &quot;insert into prac(num, NAME, HOUR, pay) values (1, '홍길동',3,8000)&quot;
    cursor.execute(sql) # 결과가 1이면 commit한다 아니면 rollback execute에 사실 리턴값이 존재
    conn.commit()
    
#select 전체자료 읽기
    sql = 'select * from prac'
    cursor.execute(sql)
    
    # 출력1 튜플 타입으로 출력된다
    for data in cursor.fetchall():
        print(data)
        
        
# 출력결과

(1, '홍길동', 3, 8000)

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;insert 문을 사용하여 각각의 컬럼에 맞게 값들을 입력해주었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;이후 cursor객체에 execute를 사용해&amp;nbsp; 실행할 sql문이 들어있는 변수를 입력해줍니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;그 후 commit() 과정을 해주어야 합니다. &lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;그 이유는 Autocommit 이 아니기때문입니다. 자동으로 commit 실행을 하고싶다면, connect() 메서드 호출시 autocommit=True 를 지정해줍니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;insert문이 잘 실행되었는지 보기 위해 select 문도 작성하고, 반복문 for을 통해 데이터가 잘 삽입 되었는지 출력해보았습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번에는 다른 방법으로 insert 문과 select문을 사용해보겠습니다.&lt;/p&gt;
&lt;p&gt;방법 2.&lt;/p&gt;
&lt;pre id=&quot;code_1589426824796&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; sql = &quot;insert into prac values(%s,%s,%s,%s)&quot; # 자바는 values에 ?가 들어감
    sql_data = (2, 'insert2','5', 9000)
    cursor.execute(sql, sql_data)
    conn.commit()
    
    
    
     # 출력 2 
     # 반복문 for에 cursor 객체 값들을 r에 넣고 출력
     # list로 출력
    for r in cursor: 
    
     # 배열에 저장되는 값들은 다음과 같습니다.
        print([r[0], r[1], r[2], r[3]]) # r[0] = num값 r[1] name값 r[2] HOUr값 r[3] pay값 저장     
        
# 출력 결과

[1, '홍길동', 3, 8000]
[2, 'insert2', 5, 9000]


&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;방법 3.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589427565744&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    sql = &quot;insert into prac values(%s,%s,%s,%s)&quot; # 자바는 values에 ?가 들어감
    sql_data = '3','insert3',5,6000
    cursor.execute(sql, sql_data)
    conn.commit()

# 출력 3
# 이번에는 매핑을 이용하여 서로 값이 일치하게 저장되도록 합니다.
    for (num, NAME, HOUR, pay) in cursor:
        print(num, NAME, HOUR, pay)
       	print()

# 출력4
    for (a, b, c, d) in cursor: # 매핑한거라 값은 같게 출력
        print(a, b, c, d)

# 출력 결과

1 홍길동 3 8000
2 insert2 5 9000
3 insert3 5 6000

1 홍길동 3 8000
2 insert2 5 9000
3 insert3 5 6000
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;update / delete 문 사용 후 출력 방식은 출력 1에서 사용한 방법으로 출력하도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. UPDATE&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1589432029745&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 자료 수정

    sql = &quot;update prac set NAME = %s, HOUR=%s, pay=%s where num=%s&quot;
    sql_data = ('홍씨에서이씨', 5, 10000, 1)
    cursor.execute(sql, sql_data)
    conn.commit()


    #select 전체자료 읽기
    sql = 'select * from prac'
    cursor.execute(sql)
    
    # 출력1

    for data in cursor.fetchall():
        print(data)
        
        
# 출력 결과

(1, '홍씨에서이씨', 5, 10000)
(2, 'insert2', 5, 9000)
(3, 'insert3', 5, 6000)
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. DELETE&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;방법 1)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589432223845&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    # 자료 삭제 
    num = '1'
    sql = &quot;delete from prac where num = &quot; + num #권장x
    cursor.execute(sql)
    conn.commit()


	# 출력 결과
    
    (2, 'insert2', 5, 9000)
	(3, 'insert3', 5, 6000)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;방법 2)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589432274141&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    num = '2'

    sql = &quot;delete from prac where num='{0}'&quot;.format(num) 
    cursor.execute(sql)
    conn.commit()
    
    
    # 출력 결과
    
    (3, 'insert3', 5, 6000)&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;방법 3)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589432400405&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    num = '3'

    sql = &quot;delete from prac where num=%s&quot; #가장많이 쓰는 방법 밑에 cursor와 매핑 할땐 튜플형태로 줘라
    cursor.execute(sql, (num, ))
    conn.commit()
    
    
    # 출력 결과
    
    &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;참고사이트&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://cafe.daum.net/flowlife&quot;&gt;https://cafe.daum.net/flowlife&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>database</category>
      <category>db</category>
      <category>Delete</category>
      <category>dml</category>
      <category>insert</category>
      <category>pyhon</category>
      <category>SQL</category>
      <category>Update</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/93</guid>
      <comments>https://lightchan.tistory.com/93#entry93comment</comments>
      <pubDate>Wed, 13 May 2020 12:37:07 +0900</pubDate>
    </item>
    <item>
      <title>python - 예외처리</title>
      <link>https://lightchan.tistory.com/91</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;예외처리란 ?&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문법 또는 여러가지 이유로 오류가 발생하지만 오류를 무시하고 싶을 때 파이썬은 try, except를 사용해서 예외적으로 오류를 처리할 수 있게 해주는 것이 예외처리 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예외처리 형식은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1589243891347&quot; class=&quot;python&quot; style=&quot;display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;try:
    실행할 소스코드
except [발생 오류[as 오류 메시지 변수]]:
    오류 일경우 출력 하고 싶다면 작성&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예제 ZeroDivisionError - 0으로 나눌경우 예외처리&lt;/h3&gt;
&lt;pre id=&quot;code_1589174865540&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 예외처리 try ~ except

def divide(a,b):
    return a / b


try:
    #c = divide(5,2)
    c = divide(5,0)

except ZeroDivisionError:
    print('두번째 숫자는 0을 빼고 주세요')


print('종료')


출력 결과

작업 후
두번째 숫자는 0을 주지 마시오
종료
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;소스코드에서 다음과 같은 함수를 주었습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;a / b 의 계산을 하는데 0으로 나눌경우 ZeroDivisionError라는 예외처리를 하였습니다.&lt;/p&gt;
&lt;p&gt;c = divide(5,0)을 작성할 경우 5 나누기 0을 의미하는 거이기 떄문에 위의 에러로 인한 예외처리가 발생하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;0이 아닌 divide(5,2)를 주면 출력 결과는 당연히 예외처리 부분을 제외한 나머지가 출력될 것입니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehbvWr/btqD2H30EMP/JPCKJMmcxkSCWTpleQzyLk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehbvWr/btqD2H30EMP/JPCKJMmcxkSCWTpleQzyLk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehbvWr/btqD2H30EMP/JPCKJMmcxkSCWTpleQzyLk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FehbvWr%2FbtqD2H30EMP%2FJPCKJMmcxkSCWTpleQzyLk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예외처리 IndexError - 참조 범위 오류&lt;/h3&gt;
&lt;pre id=&quot;code_1589245799903&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 예외처리 try ~ except

def divide(a,b):
    return a / b

try:

    aa = [1,2]
    print(aa[0])

except IndexError as e:
    print('참조 범위 오류 : ', e)
    
except Exception as err:
    print('기타에러' + str(err)) 

print('종료')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번에는 참조 범위를 벗어나면 예외처리를 해보겠습니다. 배열 aa는 1과 2를 저장하였고,&lt;/p&gt;
&lt;p&gt;print 출력에서 0번째를 출력하도록 하였습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;현재는 출력하면 1이 출력될 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;하지만 다음과 같이 바꿔주면&lt;/p&gt;
&lt;pre id=&quot;code_1589246267086&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(aa[3])&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;aa배열의 3번째는 없기때문에&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boUnFZ/btqD6QR9PYK/aBnI5CZYI4BgxeLEPyTw01/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boUnFZ/btqD6QR9PYK/aBnI5CZYI4BgxeLEPyTw01/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boUnFZ/btqD6QR9PYK/aBnI5CZYI4BgxeLEPyTw01/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboUnFZ%2FbtqD6QR9PYK%2FaBnI5CZYI4BgxeLEPyTw01%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;다음과 같은 예외처리가 발생합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;finally&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;finally문은 try 수행 도중 예외 발생 여부에 상관없이 수행되는 문장입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt; 보통 close해야 할 때에 많이 사용합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;형태는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1589258569907&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;try:
	소스코드
    
except Exception as e:
    print('err : ' + e) 
    
finally:
    cursor.close()
    conn.close()&lt;/code&gt;&lt;/pre&gt;</description>
      <category>python</category>
      <category>except</category>
      <category>Python</category>
      <category>TRY</category>
      <category>예외처리</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/91</guid>
      <comments>https://lightchan.tistory.com/91#entry91comment</comments>
      <pubDate>Mon, 11 May 2020 14:27:58 +0900</pubDate>
    </item>
    <item>
      <title>python - OS  &amp;amp; pickle</title>
      <link>https://lightchan.tistory.com/88</link>
      <description>&lt;p&gt;외장함수중 하나인 OS 모듈이란 ?&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 환경 변수나 디렉터리, 파일 등의 OS 자원을 제어한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;디렉터리의 위치를 돌려받고 싶은 경우 - os.getcwd()&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1589159319944&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os

print(os.getcwd())



출력 결과
자신이 사용하고 있는 파이썬 저장 경로가 출력됩니다
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파일 읽기&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;파일을 불러올 txt 파일&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;ftest.txt&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1589159438177&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;푸른하늘
은하수
하얀 쪽배에&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589159189978&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os

print(os.getcwd())

try:
    print(os.getcwd())

    print('파일 읽기')
    f1 = open(r'ftest.txt', mode='r', encoding='utf-8') # open 장치 열고
    print(f1.read())
    f1.close()
    
    
    
except Exception as e:
    print(e)
        
    
    
출력 결과

파일 읽기
푸른하늘
은하수
하얀 쪽배에&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파일 저장&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589159495048&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os

print(os.getcwd())

try:
    print(os.getcwd())
    
    print('파일 저장 ')
    f2 = open('ftest2.txt', mode='w', encoding='utf-8')
    f2.write('kbs\n')
    f2.write('월요일 아침\n')
    f2.write('mbc11')
    f2.close()
    print('저장성공')
    
    
except Exception as e:
    print(e)
        
    
    
출력 결과

파일 저장 
저장성공
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다음과 같이 출력이 되면서 해당 경로에&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;ftest2.txt 파일이 생성됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YAhqM/btqD2vhrCy6/WyNCCLHXQnZTMDEEoGszK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YAhqM/btqD2vhrCy6/WyNCCLHXQnZTMDEEoGszK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YAhqM/btqD2vhrCy6/WyNCCLHXQnZTMDEEoGszK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYAhqM%2FbtqD2vhrCy6%2FWyNCCLHXQnZTMDEEoGszK1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파일 추가&lt;/p&gt;
&lt;pre id=&quot;code_1589159598928&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import os

print(os.getcwd())

try:
    print(os.getcwd())
print('파일 추가')
    f3 = open('ftest2.txt', mode='a', encoding='utf-8')
    f3.write('sbs\n')
    f3.write('홍길동\n')
    f3.close()
    print(' 추가 성공')
    
    
except Exception as e:
    print(e)
        
        
출력 결과

파일 추가
 추가 성공&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위와 같은 출력 결과가 나타나면서 파일이 추가 된 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbzgsM/btqD4Vzh7Ee/p6IIsR7BcViEonB8NytBK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbzgsM/btqD4Vzh7Ee/p6IIsR7BcViEonB8NytBK1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbzgsM/btqD4Vzh7Ee/p6IIsR7BcViEonB8NytBK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbzgsM%2FbtqD4Vzh7Ee%2Fp6IIsR7BcViEonB8NytBK1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여러 종류의 객체 저장 및 읽는 방법은 pickle 외장 함수를 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;pickle 이란 ?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 객체의 형태를 그대로 유지하고, 파일에 저장하고 읽기가 가능한 모듈이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589160416435&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pickle
        
try:        
    dicdata = {'tom':'111-1111', '길동':'222-2222'}
    listdata = ['마우스','키보드']
    tupledata = (dicdata, listdata) # 복합 개체
    
    with open('hi.dat', 'wb') as ff3:
        pickle.dump(tupledata, ff3)
        pickle.dump(listdata, ff3)
        
    print('읽기')
    with open('hi.dat', 'rb') as ff4:
        a,b = pickle.load(ff4)
        print(a)
        print(b)
    
except Exception as err:
    print('에러 : ',err)
    
   
   
출력 결과

{'tom': '111-1111', '길동': '222-2222'}
['마우스', '키보드']&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;소스코드에서 딕셔너리 자료와 리스트 자료를 만들고 튜플 자료에 두개의 개체를 넣어서 복합 개체로 정의해주었습니다.&lt;/p&gt;
&lt;p&gt;그리고 그 파일자료를 읽으면 &lt;span style=&quot;color: #000000;&quot;&gt;어떤 자료형이든저장하고 불러올 수 있고, 위와 같은 결과가 나타납니다.&lt;/span&gt;납니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>OS</category>
      <category>Python</category>
      <category>모듈</category>
      <category>외장함수</category>
      <category>파이썬</category>
      <category>파일 읽기</category>
      <category>파일 저장</category>
      <category>파일 추가</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/88</guid>
      <comments>https://lightchan.tistory.com/88#entry88comment</comments>
      <pubDate>Mon, 11 May 2020 10:18:47 +0900</pubDate>
    </item>
    <item>
      <title>python - 상속 (2)</title>
      <link>https://lightchan.tistory.com/87</link>
      <description>&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/86&quot;&gt;2020/05/10 - [python] - python - 상속&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589272068591&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;python - 상속&quot; data-og-description=&quot;클래스에서 상속이란 ? - 부모 클래스의 내용을 받는 자식클래스가 받아서 사용하게 되는 것입니다. - 형태는 다음과 같습니다. class 부모클래스: 소스코드 class 자식클래스(부모클래스): 소스코��&quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/86&quot; data-og-url=&quot;https://lightchan.tistory.com/86&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bhjzWp/hyF1F1JAvH/7X67c0obnFYos4msRruxK1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/biutA2/hyF1BE2w7o/i1LSX78QqcKJBMYn6qES4K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/86&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/86&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bhjzWp/hyF1F1JAvH/7X67c0obnFYos4msRruxK1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/biutA2/hyF1BE2w7o/i1LSX78QqcKJBMYn6qES4K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;python - 상속&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;클래스에서 상속이란 ? - 부모 클래스의 내용을 받는 자식클래스가 받아서 사용하게 되는 것입니다. - 형태는 다음과 같습니다. class 부모클래스: 소스코드 class 자식클래스(부모클래스): 소스코��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이전 포스팅 글에 의어서&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;상속 예제를 들어보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589267903968&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Person:
    say = '안녕하세요 제 나이는 '
    nai = 20
    
    def __init__(self, nai):
        print('Persion 생성자')
        self.nai = nai
        
    def PrintInfo(self):
        print('이야기 :{} {}'.format(self.say, self.nai))
        
p = Person('22')
p.PrintInfo()


출력 결과

Persion 생성자
이야기 :안녕하세요 제 나이는  22&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 Person 이라는 클래스를 생성하고, 생성자에 nai라는 변수를 주었습니다.&lt;/p&gt;
&lt;p&gt;이후 p 객체를 생성하기 위에선 nai가 필요하기 때문에 나이를 22로 주었고 그에 따른 해당 출력 결과는&lt;/p&gt;
&lt;p&gt;위와 같이 출력됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그럼 이제 자식 클래스를 만들어서 상속받아겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589268345606&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Student(Person):
    say = '공부하는 '
    subject = '학생'
    
    def __init__(self):
        print('Student 생성자생성')
        
    def PrintInfo(self):
        print('Student의 PrintInfo')    
                
    def EprintInfo(self):
        print(self.say, ' ' , super().say)
        super().PrintInfo() # super() 붙어서 처음부터 부모꺼
        self.PrintInfo() # 자기꺼 있으면 자기꺼 없으면 부모꺼
        
e = Student()
print(e.say, ' ' , e.nai, '살 ' , e.subject)
        
e.EprintInfo()  


출력 결과

Student 생성자생성
공부하는    20 살  학생
공부하는    안녕하세요 제 나이는 
이야기 :공부하는  20
Student의 PrintInfo&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;소스코드를 보시면&lt;/p&gt;
&lt;p&gt;Student 클래스는 Person 부모클래스로부터 상속 받고있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그리고 Student 생성자를 생성하는 함수가 작성되어있습니다. 여기서 생성자가 작성되어있지 않다면 부모 클래스의 생성자를 따라가게 되어있습니다. 그렇다면 부모클래스의 생성자는 nai를 받기 떄문에&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Student 클래스에서 e 라는 변수로 객체를 생성할때 e = Student(나이값) 과 같이 나이 값을 넣어주어야 오류가 발생하지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biOyeD/btqD3JgfJEV/cQEVbxnm1A3DmJ4h1LYWd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biOyeD/btqD3JgfJEV/cQEVbxnm1A3DmJ4h1LYWd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biOyeD/btqD3JgfJEV/cQEVbxnm1A3DmJ4h1LYWd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiOyeD%2FbtqD3JgfJEV%2FcQEVbxnm1A3DmJ4h1LYWd1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;EprintInfo() 함수에서 부모클래스의 say를 받아서 출력하는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;super() 여기서 super()는 부모클래스의 내용을 자식클래스에서 사용하고 싶은 경우 쓸 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번에는 다중 상속에 대해 알아보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;다중 상속이란?&lt;/p&gt;
&lt;p&gt;2개 이상의 클래스를 받아 사용하는 것을 뜻합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;우선 부모 클래스로 사용할 클래스 2개를 만들어보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589269679686&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class A:
    data = '파이썬'
    
    def Std(self):
        print('파이썬 공부')
        
    def Std1(self):
        print('파이썬 공부는 재밌다.')
        
        
class B:
    def Std(self):
        print('자바 공부')
        
    def dif(self):
        print('자바 공부는 어렵다')
        
    def kbs(self): 
        pass # 필수는 아니지만 다형성을 위해 강요 가능함&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;부모클래스 A와 B를 생성하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이제 이 부모클래스를 호출할 자식 클래스를 만들어서 호출해보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589269727283&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class C(A, B):
    pass        

aa = C()

# 중복일 경우 먼저 상속한 값으로 가져옴 그래서 A.Std() 가져옴
aa.Std()
aa.Std1()
aa.dif()
print(aa.data)


출력 결과

파이썬 공부
파이썬 공부는 재밌다.
자바 공부는 어렵다
파이썬&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;자식클래스 C를 생성하였습니다.&lt;/p&gt;
&lt;p&gt;부모 클래스 A에서 Std 함수가 존재하고 부모 클래스 B에도 Std 함수가 존재한다.&lt;/p&gt;
&lt;p&gt;하지만 출력 결과를 보면 주석에도 언급하였듯, 먼저 상속받은 클래스의 함수를 출력 시키는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번에는 자식클래스 D를 만들어 C클래스와 반대로 해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1589270050805&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class D(B, A):
    data = '프로그래밍 천국'
    
    def Play(self):
        self.Std()
        super().Std()
        
    def dif(self):
        print('어려워도 열심히하려한다.')
        
bb = D()
# 중복일 경우 먼저 상속한 값으로 가져옴 그래서 B.Std() 가져옴
bb.Play()
bb.dif()


출력 결과

자바 공부
자바 공부
어려워도 열심히하려한다.
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;먼저 호출한 부모클래스의 함수를 가져오는 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;추상 클래스&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;추상 클래스란?&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;추상 클래스는 기본골격을 만들고 상속받는 클래스에서 그 구현을 강제로 시키는 클래스입니다.&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;형식을 다음과 같습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589270218012&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from abc import *
class 추상클래스이름(metaclass=ABCMeta):

     @abstractmethod
        def 추상메소드(self):
            pass
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;바로 예제로 들어가도록 하겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;추상클래스 AbstractCalss&lt;/p&gt;
&lt;pre id=&quot;code_1589271215005&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from abc import *

class AbstractClass(metaclass=ABCMeta):
    # ABCMeta 클래스의 서브 클래스는 추상 클래스
    
    @abstractclassmethod
    def abcMethod(self): # 추상 메소드
        pass
    
    
    def normalMethod(self):
        print('AbstractClass 클래스의 일반 메소드')
        &lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이 추상 클래스를 받아서 사용할 Child1 클래스&lt;/p&gt;
&lt;pre id=&quot;code_1589271250925&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Child1(AbstractClass):
    name = 'Child1입니다.'

    def abcMethod(self):
        print('추상메소드를 오버라이딩')

c1 = Child1()

print(c1.name)

c1.abcMethod()
c1.normalMethod()


출력 결과

Child1입니다.
추상메소드를 오버라이딩
AbstractClass 클래스의 일반 메소드&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;AbstractClass 추상클래스에서 abcMethod를 추상메소드로 주었고,&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Child1 클래스에서 위 추상클래스를 받아서 사용 하도록 하였습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위와 같이 작성하면 추상클래스의 미구현 메소드를 받아 사용하였기 때문에 아무런 문제가 없이 잘 출력됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번에는 추상클래스를 좀 더 자세히 보기 위해 Child1 클래스에서 받았던 미구현 추상메소드를 지워보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589271893678&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Child1(AbstractClass):
    name = 'Child1입니다.'

c1 = Child1()

print(c1.name)

c1.abcMethod()
c1.normalMethod()
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;그럼 다음과 같은 오류 메세지를 출력합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bwyCwW/btqD3HCSCV6/7jbxpKY7zK7YgWwOVW0sZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bwyCwW/btqD3HCSCV6/7jbxpKY7zK7YgWwOVW0sZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bwyCwW/btqD3HCSCV6/7jbxpKY7zK7YgWwOVW0sZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbwyCwW%2FbtqD3HCSCV6%2F7jbxpKY7zK7YgWwOVW0sZ0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이러한 에러를 출력하는 이유는 임포트 과정에서 에러를 출력하진 않지만 추상클래스에서 미구현 메소드를 Child1 클래스에서 받지 않고 객체 생성을 하려했기 때문에 객체 생성 과정에서 오류가 발생하는 것입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/86&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/05/10 - [python] - python - 상속&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589269275142&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;python - 상속&quot; data-og-description=&quot;클래스에서 상속이란 ? - 부모 클래스의 내용을 받는 자식클래스가 받아서 사용하게 되는 것입니다. - 형태는 다음과 같습니다. class 부모클래스: 소스코드 class 자식클래스(부모클래스): 소스코��&quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/86&quot; data-og-url=&quot;https://lightchan.tistory.com/86&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bhjzWp/hyF1F1JAvH/7X67c0obnFYos4msRruxK1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/biutA2/hyF1BE2w7o/i1LSX78QqcKJBMYn6qES4K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/86&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/86&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bhjzWp/hyF1F1JAvH/7X67c0obnFYos4msRruxK1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/biutA2/hyF1BE2w7o/i1LSX78QqcKJBMYn6qES4K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;python - 상속&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;클래스에서 상속이란 ? - 부모 클래스의 내용을 받는 자식클래스가 받아서 사용하게 되는 것입니다. - 형태는 다음과 같습니다. class 부모클래스: 소스코드 class 자식클래스(부모클래스): 소스코��&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>Python</category>
      <category>부모클래스</category>
      <category>상속</category>
      <category>생성자</category>
      <category>자식클래스</category>
      <category>추상클래스</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/87</guid>
      <comments>https://lightchan.tistory.com/87#entry87comment</comments>
      <pubDate>Sun, 10 May 2020 23:52:45 +0900</pubDate>
    </item>
    <item>
      <title>python - 상속</title>
      <link>https://lightchan.tistory.com/86</link>
      <description>&lt;p&gt;클래스에서 상속이란 ?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- 부모 클래스의 내용을 받는 자식클래스가 받아서 사용하게 되는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;- 형태는 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589115036928&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class 부모클래스:
	소스코드
    
class 자식클래스(부모클래스):
	소스코드&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589115094719&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Animal: # 부모클래스
    def __init__(self):
        print('animal 생성자')
        
    def move(self):
        print('움직이는 동물')
        
class Dog(Animal):  # 자식클래스
    def __init__(self): # 해당 클래스의 생성자가 없으면 부모 생성자를 부르고 생성자가 있으면 자신을 호출한다.
        print('Dog 생성자')
    
    def my(self):
        print('나는 개')

dog1 = Dog()

dog1.my()
dog1.move()


출력 결과

Dog 생성자
나는 개
움직이는 동물&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;부모클래스 Aninal의 '움직이는 동물'을 자식클래스 Dog가 가져다가 사용하여 위와 같은 출력 결과를 가지고 온 것을 알 수 있습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;여기서 부모클래스의 생성자를 가지고 오지 않는 이유는 주석에도 알 수 있듯이, 자식클래스에서 생성자가 있기 때문입니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;오버라이딩&amp;nbsp;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;부모 클래스의 메소드를 자식 클래스에서 재정의 하는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span&gt;다형성&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;- 부모 클래스로부터 물려받은 내용을 자식 클래스 내에서 오버라이딩하여 사용하는 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589115426447&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Parent: # overriding
    def Prindata(self):
        pass
    
class Child1(Parent):
    def Prindata(self):
        print('Child1에서 overrding')
            
            
class Child2(Parent):
    def Prindata(self):
        print('Child2에서 재정의')
        
    def abc(self):
        print('Child2 고유 메소드')
        
c1 = Child1()
c1.Prindata()

c2 = Child2()
c2.Prindata()   


출력 결과


Child1에서 overrding
Child2에서 재정의&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;부모클래스인 Child1 에서 Printdata 메소드는 'child1에서 overrding'을 출력해준다.&lt;/p&gt;
&lt;p&gt;하지만 오버라이딩 성질을 이용하면 Child2에서 Printdata 메소드의 출력문인 'Child2에서 재정의' 를 출력해줍니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://lightchan.tistory.com/87&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;2020/05/10 - [python] - python - 상속 (2)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1589272053033&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;python - 상속 (2)&quot; data-og-description=&quot;이전 포스팅 글에 의어서 상속 예제를 들어보겠습니다. class Person: say = '안녕하세요 제 나이는 ' nai = 20 def __init__(self, nai): print('Persion 생성자') self.nai = nai def PrintInfo(self): print('..&quot; data-og-host=&quot;lightchan.tistory.com&quot; data-og-source-url=&quot;https://lightchan.tistory.com/87&quot; data-og-url=&quot;https://lightchan.tistory.com/87&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bmgrlS/hyF1FgrlGO/0dCftqdCqKPybYxUmMwnb1/img.png?width=635&amp;amp;height=39&amp;amp;face=0_0_635_39,https://scrap.kakaocdn.net/dn/bsdXbk/hyF1u63is3/fZdeJEeMmANuVkuOqH04F0/img.png?width=635&amp;amp;height=39&amp;amp;face=0_0_635_39&quot;&gt;&lt;a href=&quot;https://lightchan.tistory.com/87&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://lightchan.tistory.com/87&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bmgrlS/hyF1FgrlGO/0dCftqdCqKPybYxUmMwnb1/img.png?width=635&amp;amp;height=39&amp;amp;face=0_0_635_39,https://scrap.kakaocdn.net/dn/bsdXbk/hyF1u63is3/fZdeJEeMmANuVkuOqH04F0/img.png?width=635&amp;amp;height=39&amp;amp;face=0_0_635_39');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot;&gt;python - 상속 (2)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;이전 포스팅 글에 의어서 상속 예제를 들어보겠습니다. class Person: say = '안녕하세요 제 나이는 ' nai = 20 def __init__(self, nai): print('Persion 생성자') self.nai = nai def PrintInfo(self): print('..&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;lightchan.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>Python</category>
      <category>다형성</category>
      <category>상속</category>
      <category>오버라이딩</category>
      <category>클래스</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/86</guid>
      <comments>https://lightchan.tistory.com/86#entry86comment</comments>
      <pubDate>Sun, 10 May 2020 22:12:48 +0900</pubDate>
    </item>
    <item>
      <title>python - 클래스</title>
      <link>https://lightchan.tistory.com/84</link>
      <description>&lt;p&gt;클래스란 ?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 객체의 구조를 나타낸다.&lt;/p&gt;
&lt;p&gt;- 클래스에 의해 만들어진 객체를 인스턴스라고도 부른다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;객체와 인스턴스의 차이&lt;/p&gt;
&lt;p&gt;- 객체는 클래스 정의시 메소드 밖에 존재하며, 클래스명.변수명 으로 사용한다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 인스턴스는 메소드 안에서 사용하며, self.변수명으로 사용한다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589109244814&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 모듈의 멤버로 클래스

class TestClass:
    kk = 1 # 멤버변수 ( 전역 )
    
    def __init__(self):
        print('생성자')
        
    def __del__(self):
        print('소멸자')
        
    def printMsg(self): # 메소드 (public)
        name = '한국인' # 지역변수
        print(name)
        print(self.kk)
        
test = TestClass() # 생성자 호출. instance
print(test.kk) # 1을 출력
print(TestClass.kk) # prototype(원형) 클래스의 멤버 직접 호출
 
print()

test.printMsg() # Bound Method call
# TestClass.printMsg() # 이렇게 주면 아규먼트를 주지 않아서 ERR
print()
TestClass.printMsg(test) # UnBound Method call


출력 결과

생성자
1
1

한국인
1

한국인
1

소멸자&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;# Bound Method Call는 self가 붙은 쪽에 사용하고, UnBound Method Call 이란 self 를 안 붙은 쪽을 말합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파이썬에서 사용하는 특별한 메소드&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# __init__ :&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 초기화(initialize) 메서드라고도 합니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 어떤 클래스의 객체가 만들어질 때 자동으로 호출되어서 그 객체가 갖게 될 여러 가지 성질을 정해주는 역할을 함&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 위 소스에서는 TestClass() 를 작성하여 TestClass 객체를 생성하자마자 초기화가 되고 '생성자'를 출력하였습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;# __del__ :&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 객체가 없어질때 사용하는 메소드입니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 위 소스에서는 그래서 맨 마지막에 '소멸자'가 출력되었습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에는 __init__ 메소드에 인자를 받아야만 생성자가 생성되는 예제를 들어보겠습니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589111016231&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class Car:
    handle = 0
    speed = 0

    def __init__(self, name, speed):
        self.speed = speed
        self.name = name
        
    def showData(self):
        km = '킬로미터'
        msg = '속도:' + str(self.speed) + km
        return msg
    
print(Car.handle)
print(Car.speed)
#print(Car.name) # type object 'Car' has no attribute 'name'
print()
car1 = Car('tom',10)
print(car1.handle, car1.name, car1.speed)
print('------')
car2 = Car('james',20)
print(car2.handle, car2.name, car2.speed)

print()
print(car1.showData())
print(car2.showData())
car1.speed = 88
car2.speed = 100
print(car1.showData())
print(car2.showData())

Car.handle = 1
print(car1.handle)
print(car2.handle)


출력 결과

0
0

0 tom 10
------
0 james 20

속도:10킬로미터
속도:20킬로미터
속도:88킬로미터
속도:100킬로미터
1
1&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 소스코드는 __init__ 생성자에 self, name, speed 를 주었기 때문에 새로운 객체를 생성할때 name,과 speed를 가지고 가야 생성이 가능합니다. 그렇지 않으면 다음과 같은 에러를 출력합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnb4PZ/btqD2cvv8ld/dw4vNOlsKPLfrr832W9olk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnb4PZ/btqD2cvv8ld/dw4vNOlsKPLfrr832W9olk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnb4PZ/btqD2cvv8ld/dw4vNOlsKPLfrr832W9olk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbnb4PZ%2FbtqD2cvv8ld%2Fdw4vNOlsKPLfrr832W9olk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;car1 객체와 car2 객체를 생성 한 후에는 speed 값을 기존 10에서 각각 88과 100으로 변경해주었습니다.&lt;/p&gt;
&lt;p&gt;그 출력 결과 속도들의 변경된 점을 확인 가능했습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;# 클래스는 포함자원의 재활용 목적으로 다른 클래스를 불러다가 사용 가능합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;handle.py&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589258946691&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 다른 클래스에서 공유할 클래스

class PohamHandle:
    quantity = 0
    
    def LeftTurn(self, quantity): # self에 quantity 가 들어옴
        self.quantity = quantity
        
        return '좌로 돌아';
    
    def RightTurn(self, quantity): # self에 quantity 가 들어옴
        self.quantity = quantity
        
        return '우로 돌아';&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;PohanCar.py&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589258976193&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import etc.handle

class PohanCar:
    turnShow = '정지'
    
    def __init__(self, ownerName):
        self.ownerName = ownerName
        self.handle = etc.handle.PohamHandle()
        
        
    def TurnHandle(self, q):
        if q &amp;gt; 0:
            self.turnShow = self.handle.RightTurn(q)
        elif q &amp;lt; 0:
            self.turnShow = self.handle.LeftTurn(q)
        else:
            self.turnShow = '직진'
            
if __name__ == '__main__':
    tom = PohanCar('tom')
    tom.TurnHandle(10)
    print(tom.ownerName + ' 의 회전량은 ' + tom.turnShow + str(tom.handle.quantity))            
    
    print()
    james = PohanCar('james')
    james.TurnHandle(0)
    print(james.ownerName + ' 의 회전량은 ' + james.turnShow + str(james.handle.quantity))&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;출력 결과&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lRMDL/btqD5JsSZ6J/n4iuRcLOKWzzeXUjKDI7Q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lRMDL/btqD5JsSZ6J/n4iuRcLOKWzzeXUjKDI7Q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lRMDL/btqD5JsSZ6J/n4iuRcLOKWzzeXUjKDI7Q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlRMDL%2FbtqD5JsSZ6J%2Fn4iuRcLOKWzzeXUjKDI7Q1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>python</category>
      <category>Python</category>
      <category>객체</category>
      <category>인스턴스</category>
      <category>클래스</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/84</guid>
      <comments>https://lightchan.tistory.com/84#entry84comment</comments>
      <pubDate>Sun, 10 May 2020 20:35:09 +0900</pubDate>
    </item>
    <item>
      <title>python - 재귀함수</title>
      <link>https://lightchan.tistory.com/83</link>
      <description>&lt;p&gt;재귀함수란 ?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;- 함수 안에서 자신을 다시 호출하는 방법입니다.&lt;/p&gt;
&lt;p&gt;- 함수 내에서 자신을 다시 호출한 후 함수가 끝나는 이후에는 종료 조건을 붙여주어야 무한루프에 빠지지 않습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589098451445&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def CountDown(n):
    if n == 0:
        print('완료')
        
    else:
        print(n, end=' ')
        CountDown(n - 1)
 
CountDown(5)


출력 결과

5 4 3 2 1 완료&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;CountDown 함수에 5가 들어간후 if문을 실행합니다. n == 5이기 때문에 else 문을 실행하고,&lt;/p&gt;
&lt;p&gt;그 다음 n - 1 을 통해 n는 4가 되고 다시 if문을 거쳐 else 문을 실행하게 됩니다.&lt;/p&gt;
&lt;p&gt;이 과정을 반복하다가 n이 0이 될 경우 완료를 출력하고 빠져나오게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예제 2)&lt;/p&gt;
&lt;pre id=&quot;code_1589098896282&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def fact(a):
    if a== 1: return 1
    print(a)
    return a * fact(a-1)

result2 = fact(5)
print('5! : ' + str(result2))


출력 결과
5! : 120&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dKLHjk/btqD2wmTqqU/SyVfhcmUzvT1Aycfw2XWv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dKLHjk/btqD2wmTqqU/SyVfhcmUzvT1Aycfw2XWv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dKLHjk/btqD2wmTqqU/SyVfhcmUzvT1Aycfw2XWv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdKLHjk%2FbtqD2wmTqqU%2FSyVfhcmUzvT1Aycfw2XWv0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;예제 3)&lt;/p&gt;
&lt;pre id=&quot;code_1589099461518&quot; class=&quot;python&quot; style=&quot;margin: 20px auto 0px; display: block; overflow: auto; padding: 15px; color: #383a42; background: #f6f7f8; font-size: 14px; border-radius: 3px; font-family: Menlo, Consolas, Monaco, monospace; border: 1px solid #dddddd; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def tot(n):
    if n == 1:
        print('탈출')
        return 1
    return n + tot(n-1)
result = tot(10)
print('합은' + str(result))


출력 결과

탈출
합은 55&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위 예제는 if문을 주었지만 이번 예제는 루프 과정을 반복하다가 n이 1을 만나면 탈출하는 예제입니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이번 예제는 위와 동일한 원리입니다.&lt;/p&gt;</description>
      <category>python</category>
      <category>pyhon</category>
      <category>재귀함수</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/83</guid>
      <comments>https://lightchan.tistory.com/83#entry83comment</comments>
      <pubDate>Sun, 10 May 2020 17:22:05 +0900</pubDate>
    </item>
    <item>
      <title>python - 함수 장식자 ( Decorator )</title>
      <link>https://lightchan.tistory.com/82</link>
      <description>&lt;p&gt;Decorator 란?&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;함수 A를 다른 명령을 받아 또 다른 함수 B로 호출 하는 것이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;바로 예를 들어보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1589051819692&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 함수 장식자(decorator
def make2(fn):
    return lambda:'파이썬 ' + fn() # '파이썬'과 fn() 함수를 합쳐서 리턴

def make1(fn):
    return lambda:'공부를 '+fn()

def hello():
    return '열심히'

hi = make2(make1(hello))
print(hi())

# 출력 결과

파이썬 공부를 열심히&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;기존 hello() 함수는 '열심히' 만을 반환하는 함수입니다.&lt;/p&gt;
&lt;p&gt;하지만 이 함수를 mak1이라는 함수에 씌워주고, 그 겉에는 또 다시 make2라는 함수로 덮어주었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;그 말은 make2함수의 '파이썬'을 출력하고 그 안에 호출할 함수 make1 에서 '공부를' 호출 후 hello의 '열심히' 를 호출하게 됩니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;위와 같은 방법이 아닌 다른 방법으로는 '@' 키워드를 사용하여도 적용 가능합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;함수를 데코레이션('@')으로 사용할 경우&lt;/p&gt;
&lt;pre id=&quot;code_1590642832696&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def make6(fn):
    return lambda:'공부를 '+fn()

@make6
def hello1():
    return '열심히'

print((hello1()))


# 출력 결과

공부를 열심히
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;클래스를 데코레이션('@') 으로 사용할 경우&lt;/p&gt;
&lt;pre id=&quot;code_1590643306197&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class prac(object):
    def __init__(self, fn):
        self.fn = fn

    def __call__(self, *args, **kwargs):
        result = self.fn(*args, **kwargs)
        print(f'Result: {result}')
        return result

@prac
def add(a, b):
    return a + b

add(5,1)

# 출력 결과


Result: 6&lt;/code&gt;&lt;/pre&gt;</description>
      <category>python</category>
      <category>decorator</category>
      <category>pyhon</category>
      <category>장식자</category>
      <category>파이썬</category>
      <category>함수</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/82</guid>
      <comments>https://lightchan.tistory.com/82#entry82comment</comments>
      <pubDate>Sun, 10 May 2020 04:19:57 +0900</pubDate>
    </item>
    <item>
      <title>python - 파이썬은 1급 함수인가 ?</title>
      <link>https://lightchan.tistory.com/81</link>
      <description>&lt;p&gt;1급 함수의 조건 3가지&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;대부분의 프로그래밍 언어는 1급함수의 조건에 충족합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;파이썬 또한 이 3가지를 충족합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ex 1)&lt;/p&gt;
&lt;pre id=&quot;code_1588927866614&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def fun1(a, b):
    return a + b
fun2 = fun1
print(fun2(3,4))

def fun3(func):
    def fun4(): # 함수 안에 함수
        print('내부함수 출력')
    fun4()
    return func # 반환값이 함수
abc = fun3(fun1) # 인자로 함수 전달




출력 결과

7
내부함수 출력&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;조건1. 함수 안에 함수를 호출 할 수 있다.&lt;/p&gt;
&lt;p&gt;func3 함수는 내부에서 fun4 함수를 호출하여 충족합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;조건2. 인자 abc로 함수 fun3을 호출하여 조건2을 충족합니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;조건3. 반환값이 func으로 마지막 조건을 충족합니다.&lt;/p&gt;</description>
      <category>python</category>
      <category>1급함수</category>
      <category>3가지</category>
      <category>Python</category>
      <category>인수</category>
      <category>인자</category>
      <category>일급함수</category>
      <category>파이썬</category>
      <category>함수</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/81</guid>
      <comments>https://lightchan.tistory.com/81#entry81comment</comments>
      <pubDate>Fri, 8 May 2020 17:51:37 +0900</pubDate>
    </item>
    <item>
      <title>python - 가변인수</title>
      <link>https://lightchan.tistory.com/80</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;가변인수란 ?&lt;/h2&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;함수 호출시 , 함수에 정의된 매개변수 개수만큼 인자를 전달해주어야 하지만&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;가변 인수라는 것을 사용하면 하나의 매개변수로 인자의 개수를 맞춰주지 않고 처리 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이유는 가변 인수가 튜플 형식으로 처리하기 때문이다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;바로 예를 들어보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ex 1)&lt;/p&gt;
&lt;pre id=&quot;code_1588927035715&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def func1(*ar):
    print(ar)
    for i in ar:
        print('음식: ' + i)
func1('비빔램명','물냄명','돌솥빔빔팝')



출력 결과

('비빔램명', '물냄명', '돌솥빔빔팝')
음식: 비빔램명
음식: 물냄명
음식: 돌솥빔빔팝&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;소스코드를 보시면 매개변수 앞에 * 표시를 해주었습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ex 2)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1588927174882&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def func2(*ar):
    print(ar)
    
func2('비빔밥', '공기밥', '주먹밥')


출력 결과

('비빔밥', '공기밥', '주먹밥')&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;키워드 가변 인수&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;키워드 가변 인수는 매개변수 앞에 **을 붙여주면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;키워드 가변 인수는 DICT 형태로 전달되며 key : values 형태로 저장됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;이것도 예제를 바로 들어보겠습니다.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Ex 1)&lt;/p&gt;
&lt;pre id=&quot;code_1588927387897&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print()
def func3(**v2):

print(v2)
    

func3(m=6, n=7)


출력 결과

{'m': 6, 'n': 7}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>Python</category>
      <category>가변인수</category>
      <category>키워드 가변인수</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/80</guid>
      <comments>https://lightchan.tistory.com/80#entry80comment</comments>
      <pubDate>Fri, 8 May 2020 17:43:39 +0900</pubDate>
    </item>
    <item>
      <title>python - range</title>
      <link>https://lightchan.tistory.com/79</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;range 함수란 ?&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 함수는 입력받은 숫자에 해당하는 범위 값을 반복 가능한 객체로 만들어준다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;아래 소스코드를 기준으로 인수가 1개일때, 2개일때, 등등 풀어보겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1588926194067&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def ShowGugu(start, end = 5):
    for dan in range(start, end+1):
        print(str(dan) + '단출력')&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;인수가 1개일 때,&lt;/p&gt;
&lt;pre id=&quot;code_1588926509959&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 인수가 1개일 때
ShowGugu(3)

출력 결과

3단출력
4단출력
5단출력
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;인수가 2개일 때,&lt;/p&gt;
&lt;pre id=&quot;code_1588926540914&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 인수가 2개 일때
ShowGugu(2,3)
print()

출력 결과

2단출력
3단출력&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;u&gt;&lt;i&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;* 주의점 끝 숫자는 해당 범위에 포함되지 않는다&lt;/span&gt;&lt;/b&gt;&lt;/i&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;인수의 시작을 2 끝을 4로 주었을 경우&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1588926588666&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 인수의 시작이 2부터 끝인 4까지
ShowGugu(start=2, end=4)
print()

출력 결과

2단출력
3단출력
4단출력&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>Python</category>
      <category>RANGE</category>
      <category>내장함수</category>
      <category>파이썬</category>
      <author>cg0826</author>
      <guid isPermaLink="true">https://lightchan.tistory.com/79</guid>
      <comments>https://lightchan.tistory.com/79#entry79comment</comments>
      <pubDate>Fri, 8 May 2020 16:01:11 +0900</pubDate>
    </item>
  </channel>
</rss>