<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>지금도 개발중</title>
    <link>https://milkoon1.tistory.com/</link>
    <description>개발 블로그입니다</description>
    <language>ko</language>
    <pubDate>Thu, 7 May 2026 02:49:07 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>홍시쿼카</managingEditor>
    <image>
      <title>지금도 개발중</title>
      <url>https://tistory1.daumcdn.net/tistory/3111437/attach/a8cb9d02765e4a4a8d91c39867ca83c6</url>
      <link>https://milkoon1.tistory.com</link>
    </image>
    <item>
      <title>Vue.js : Vue 개발환경 세팅하기</title>
      <link>https://milkoon1.tistory.com/138</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-02-10 오후 12.47.54.png&quot; data-origin-width=&quot;1305&quot; data-origin-height=&quot;774&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/caNO4X/btsMb1lfqWb/vfDu8W3MqKMBoyNagOaUzk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/caNO4X/btsMb1lfqWb/vfDu8W3MqKMBoyNagOaUzk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/caNO4X/btsMb1lfqWb/vfDu8W3MqKMBoyNagOaUzk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcaNO4X%2FbtsMb1lfqWb%2FvfDu8W3MqKMBoyNagOaUzk%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;1305&quot; height=&quot;774&quot; data-filename=&quot;스크린샷 2025-02-10 오후 12.47.54.png&quot; data-origin-width=&quot;1305&quot; data-origin-height=&quot;774&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;1. Visual Studio Code 설치&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;VSCode 설치는 크게 어렵지 않으니 본인의 OS에 맞게 설치를 진행하시면 됩니다.&lt;br /&gt;- 참고로 VSCode에서 추가적인 Extensions 사용 및 디버깅을 하기 위해서 크롬(Chrome)도 필요합니다.&lt;/p&gt;
&lt;figure id=&quot;og_1739159521171&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Download Visual Studio Code - Mac, Linux, Windows&quot; data-og-description=&quot;Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experience a redefined code editor, optimized for building and debugging modern web and cloud applications.&quot; data-og-host=&quot;code.visualstudio.com&quot; data-og-source-url=&quot;https://code.visualstudio.com/download&quot; data-og-url=&quot;https://code.visualstudio.com/Download&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/xPlqT/hyYf0lOOyb/t2xAnPKgsboGCFh9PaX24k/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://code.visualstudio.com/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://code.visualstudio.com/download&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/xPlqT/hyYf0lOOyb/t2xAnPKgsboGCFh9PaX24k/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; data-ke-size=&quot;size16&quot;&gt;Download Visual Studio Code - Mac, Linux, Windows&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Visual Studio Code is free and available on your favorite platform - Linux, macOS, and Windows. Download Visual Studio Code to experience a redefined code editor, optimized for building and debugging modern web and cloud applications.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;code.visualstudio.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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-02-10 오후 1.05.32.png&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;899&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/raBlV/btsMd4OpmUl/OhysHbpZNW4lkJvFB9Rkfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/raBlV/btsMd4OpmUl/OhysHbpZNW4lkJvFB9Rkfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/raBlV/btsMd4OpmUl/OhysHbpZNW4lkJvFB9Rkfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FraBlV%2FbtsMd4OpmUl%2FOhysHbpZNW4lkJvFB9Rkfk%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;1470&quot; height=&quot;899&quot; data-filename=&quot;스크린샷 2025-02-10 오후 1.05.32.png&quot; data-origin-width=&quot;1470&quot; data-origin-height=&quot;899&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;2. Node.js 설치&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;Vue.js 개발을 위해서는 반드시 Node가 필요합니다.&lt;br /&gt;만약 프로젝트 내에 따로 원하는 버전이 있으면 해당 버전은 공식홈페이지에서 선택할 수 있으니&lt;br /&gt;환경에 맞는걸로 선택하시면 될 것 같습니다.&lt;br /&gt;- 2025년 2월 기준 최신 버전은 v22입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1739160870519&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 터미널
node -v
-- 콘솔
node --version&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;node버전 확인은 터미널(콘솔)에서 확인해보시면 바로 알 수 있습니다.&lt;br /&gt;만약 버전 확인이 잘 안된다면 환경변수 설정 및 재부팅한 다음 다시 확인해주세요.&lt;/p&gt;
&lt;figure id=&quot;og_1739160707283&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Node.js &amp;mdash; Node.js&amp;reg; 다운로드&quot; data-og-description=&quot;Node.js&amp;reg; is a JavaScript runtime built on Chrome's V8 JavaScript engine.&quot; data-og-host=&quot;nodejs.org&quot; data-og-source-url=&quot;https://nodejs.org/ko/download&quot; data-og-url=&quot;https://nodejs.org/ko/download&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bcJEib/hyYf42PiOF/h0t7KN3UXHRNclSijXHj9K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/cwdmHR/hyYfW4M8OS/8jl69ObG5XakNaxFKfMim1/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256&quot;&gt;&lt;a href=&quot;https://nodejs.org/ko/download&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nodejs.org/ko/download&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bcJEib/hyYf42PiOF/h0t7KN3UXHRNclSijXHj9K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/cwdmHR/hyYfW4M8OS/8jl69ObG5XakNaxFKfMim1/img.png?width=224&amp;amp;height=256&amp;amp;face=0_0_224_256');&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;Node.js &amp;mdash; Node.js&amp;reg; 다운로드&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Node.js&amp;reg; is a JavaScript runtime built on Chrome's V8 JavaScript engine.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nodejs.org&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;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;3. VSCode 실행 및 Extensions 설치&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;VSCode를 설치하면 기본적으로 설정된 것들도 있는데 더욱 쓰기 편함을 위해 아래와 같은 플러그인을 권장합니다.&lt;br /&gt;필수로 설치해야 하는 것은 아닙니다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 290px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;플러그인 명&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;상세&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Vue VSCode Snippets&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Vue&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Vue&amp;nbsp;3&amp;nbsp;Snippets&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Vue&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Error Lens&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Code상의 Error, Warning 표시해주는 플러그인&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;ESLint&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Code Style&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Stylelint&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Code Style&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Prettier&amp;nbsp;-&amp;nbsp;Code&amp;nbsp;formatter&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Code Style&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Night&amp;nbsp;Owl&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Code Theme&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;aries&amp;nbsp;Theme&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Theme&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Material&amp;nbsp;Theme&amp;nbsp;Icons&amp;nbsp;&amp;mdash;&amp;nbsp;Free&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Tool Style&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Material&amp;nbsp;Icon&amp;nbsp;Theme&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Tool Style&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Import&amp;nbsp;Cost&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;import하는 패키지에 대한 사이즈 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;GitLens&amp;nbsp;&amp;mdash;&amp;nbsp;Git&amp;nbsp;supercharged&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Git관련 플러그인&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Git&amp;nbsp;History&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Git관련 플러그인&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Git&amp;nbsp;Graph&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Git관련 플러그인&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Commit&amp;nbsp;Message&amp;nbsp;Editor&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Git관련 플러그인&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Git을 쓰시는분들은 Git관련 플러그인도 같이 참고하시면 좋을 것 같네요!&lt;/p&gt;</description>
      <category>프론트/Vue</category>
      <category>vue</category>
      <category>vue프로젝트</category>
      <category>vue환경설정</category>
      <category>vue환경세팅</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/138</guid>
      <comments>https://milkoon1.tistory.com/138#entry138comment</comments>
      <pubDate>Mon, 10 Feb 2025 13:55:16 +0900</pubDate>
    </item>
    <item>
      <title>선형 자료구조 : 스택(Stack)과 큐(Queue)에 대해 파악하기</title>
      <link>https://milkoon1.tistory.com/137</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;스택(Stack)과 큐(Queue)는 프로그래밍에서 자주 사용되는 선형 자료구조로, &lt;br /&gt;데이터의 삽입과 삭제 순서가 서로 다릅니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2025-02-04 오후 2.18.53.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QtMpY/btsL6sQsFgb/3xFqfcWSaIdRzTPefBgUG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QtMpY/btsL6sQsFgb/3xFqfcWSaIdRzTPefBgUG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QtMpY/btsL6sQsFgb/3xFqfcWSaIdRzTPefBgUG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQtMpY%2FbtsL6sQsFgb%2F3xFqfcWSaIdRzTPefBgUG0%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;640&quot; height=&quot;355&quot; data-filename=&quot;스크린샷 2025-02-04 오후 2.18.53.png&quot; data-origin-width=&quot;640&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 스택(Stack)&lt;/b&gt;&lt;br /&gt;스택은 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;후입선출(LIFO, Last In First Out)&lt;/b&gt;&lt;/span&gt; 원칙을 따르는 선형 자료구조로,&lt;br /&gt;데이터의 삽입(push)과 삭제(pop)가 한쪽 끝(top)에서만 이루어집니다.&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;이는 책을 쌓아 놓고 가장 위에 있는 책을 먼저 꺼내는 것과 같이 마지막에 추가된 요소가 가장 먼저 제거됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 주요연산&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;'push' : 스택의 최상단(top)에 요소 추가&lt;/li&gt;
&lt;li&gt;'pop' : 최상단 요소 제거 및 반환&lt;/li&gt;
&lt;li&gt;'peek' /&amp;nbsp; 'top' : 최상단 요소 확인 (제거하지 않음)&lt;/li&gt;
&lt;li&gt;'isEmpty' : 스택이 비었는지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1738643727437&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 배열기반 : 고정된 크기로 구현이 간단하지만, 동적 크기 조절이 어려움
stack = []
stack.append(1) # push
stack.pop()     # pop

# 연결 리스트 기반 : 동적 메모리 관리가 가능하지만 구현 복잡도가 높음
class Node:
	def __init__(self, data):
    	self.data = data
        self.next = None&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 구현 : 배열이나 연결 리스트로 구현 가능하며, 'top' 포인터로 최상단 위치를 추적&lt;br /&gt;&lt;span style=&quot;background-color: #ffc1c8;&quot;&gt;&amp;rarr;&amp;nbsp;스택은 상대적으로 구현이 간단함&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start; background-color: #ffc1c8;&quot;&gt;&amp;rarr;&amp;nbsp;단순한 구조로 인해 메모리 사용이 효율적&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 사용예시&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;브라우저 뒤로 가기 기능&lt;/li&gt;
&lt;li&gt;함수 호출 스택(재귀 함수 실행)&lt;/li&gt;
&lt;li&gt;실행 취소(Undo)기능&lt;/li&gt;
&lt;/ul&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-filename=&quot;스크린샷 2025-02-04 오후 2.26.25.png&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;591&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5jMXa/btsL6mW1mix/b2R8HWqsIK2fJcs5yvS4Zk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5jMXa/btsL6mW1mix/b2R8HWqsIK2fJcs5yvS4Zk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5jMXa/btsL6mW1mix/b2R8HWqsIK2fJcs5yvS4Zk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5jMXa%2FbtsL6mW1mix%2Fb2R8HWqsIK2fJcs5yvS4Zk%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;671&quot; height=&quot;591&quot; data-filename=&quot;스크린샷 2025-02-04 오후 2.26.25.png&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;591&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 큐(Queue)&lt;/b&gt;&lt;br /&gt;큐는 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;선입선출(FIFO, First In First Out)&lt;/b&gt; &lt;/span&gt;원칙을 따르는 자료구조이며, &lt;br /&gt;데이터가 들어오는 쪽을 rear(뒤), 나가는 쪽을(front)라고 합니다.&lt;br /&gt;새로운 요소는 큐의 뒤쪽(rear)에 추가되고, 요소를 제거할 때는 앞쪽(front)에서 이루어지기에&lt;br /&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;가장 먼저 추가된 요소가 가장 먼저 제거됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 주요연산&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;'enqueue' : 큐의 후단(rear)에 요소 추가&lt;/li&gt;
&lt;li&gt;'dequeue' : 전단(front) 요소 제거 및 반환&amp;nbsp;&lt;/li&gt;
&lt;li&gt;'peek' / 'front' : 전단(front) 요소를 확인(제거하지 않음)&lt;/li&gt;
&lt;li&gt;isEmpty : 큐가 비었는지 확인&lt;/li&gt;
&lt;li&gt;isFull : 큐가 가득 찼는지 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) 구현 : 배열 또는 연결 리스트로 구현되며, 'front'와 'rear' 두 개의 포인터를 사용&lt;br /&gt;&lt;span style=&quot;background-color: #ffc1c8; color: #000000;&quot;&gt;&amp;rarr;&amp;nbsp;큐는 두 개의 포인터를 관리해야 하므로 구현이 더 복잡함&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffc1c8; color: #000000;&quot;&gt;&amp;rarr;&amp;nbsp;front와 rear 포인터 관리로 인해 메모리 사용이 덜 효율적일 수 있다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3) 사용예시&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;프린터 작업 대기열&lt;/li&gt;
&lt;li&gt;CPU 작업 스케줄링&lt;/li&gt;
&lt;li&gt;은행 번호표 시스템&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;스택 VS 큐 차이점&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 120px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;구분&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;스택(Stack)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;큐(Queue)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;작동원리&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;LIFO(Last In First Out)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;FIFO(First In First Out)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;삽입/삭제&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;한 끝(top)에서만 발생&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;삽입은 rear, 삭제는 front에서 발생&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;포인터&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;'top'&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;'front'&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;연산 이름&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;Push, Pop&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;Enqueue, Dequeue&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;사용 사례&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;실행 취소, 함수 호출관리&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;작업 대기열, 데이터 버퍼링&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;요약정리&lt;/b&gt;&lt;br /&gt;1. 스택은 마지막에 추가된 데이터를 우선 처리할 때 유용합니다.(예 : 최근 작업 취소)&lt;br /&gt;2. 큐는 순서대로 처리해야 하는 작업에 적합합니다.(예 : 주문 처리 시스템)&lt;br /&gt;3. 두 구조 모두 데이터의 순차적 접근을 관리하지만, 삽입/삭제 지점과 처리 순서에서 근본적인 차이가 있습니다.&lt;/p&gt;</description>
      <category>IT/잡다한지식</category>
      <category>선형자료구조</category>
      <category>스택</category>
      <category>스택개념</category>
      <category>스택과큐의차이점</category>
      <category>큐</category>
      <category>큐개념</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/137</guid>
      <comments>https://milkoon1.tistory.com/137#entry137comment</comments>
      <pubDate>Tue, 4 Feb 2025 14:29:27 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript : map, filter</title>
      <link>https://milkoon1.tistory.com/136</link>
      <description>&lt;pre id=&quot;code_1704694499071&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;          // result [] 배열인 경우
          result = result.map(item =&amp;gt; {
            let stateColor = &quot;&quot;
            let stateName = &quot;&quot;
            if (item.state === &quot;0&quot; || item.state === &quot;1&quot; || item.state === &quot;8&quot;) {
              stateName = &quot;대기&quot;
              stateColor = &quot;gray&quot;
            } else if (
              item.state === &quot;3&quot; ||
              item.state === &quot;4&quot; ||
              item.state === &quot;6&quot; ||
              item.state === &quot;7&quot; ||
              item.state === &quot;9&quot;
            ) {
              stateName = &quot;취소&quot;
              stateColor = &quot;red&quot;
            } else {
              stateName = &quot;완료&quot;
              stateColor = &quot;blue&quot;
            }
            return {
              ...item,
              처리상태: item.state,
              결과명: stateName,
              결과컬러: stateColor
            }
          })
        }
        const redData = result?.filter(item =&amp;gt; item.결과컬러 === &quot;red&quot;)
        console.log(redData)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프론트/JavaScript</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/136</guid>
      <comments>https://milkoon1.tistory.com/136#entry136comment</comments>
      <pubDate>Mon, 8 Jan 2024 15:16:07 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript : for문, forEach문 차이점</title>
      <link>https://milkoon1.tistory.com/135</link>
      <description>&lt;pre id=&quot;code_1682489679052&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// for문
for(let i=0; i&amp;lt;length; i++) {
 ...
}

// foreach문
object.forEach(function(var) {
 ...
});
또는
object.forEach(function(var) =&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;b&gt;1. 동기(sync), 비동기(async)의 차이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;for문은 동기(sync) 방식이기 때문에 for문 안에서 오류가 나면 에러난 위치 이후의 이벤트들은 동작하지 않고 멈춰버립니다. foreach문은 ES6문법으로 콜백함수를 뿌리기 때문에 비동기(async) 방식으로 진행됩니다. 그래서 foreach문 안에 에러가 발생하더라도 멈추지 않고 그 다음 프로세스를 진행합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 성능차이&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;forEach문은 for문의 향상된 버전이라고 칭할 수 있습니다. 가변적인 배열이나 리스트 크기를 따로 구할 필요가 없어 복잡한 반복문에서 사용성이 용이합니다. 또한 인덱스를 생성하여 접근하는 for문보다 수행속도가 빠릅니다. 단, 반복문 내에서 배열이나 리스트 값을 변경하거나 추가할 수 없다는 점과 읽기 전용으로 불러오기때문에 데이터를 수정하는 행위가 불가능합니다. 또한 배열을 역순으로 탐색할 수 없다라는 단점이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프론트/JavaScript</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/135</guid>
      <comments>https://milkoon1.tistory.com/135#entry135comment</comments>
      <pubDate>Wed, 26 Apr 2023 15:24:46 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript : 자바스크립트 Errors (Try, Catch, Finally, Throw)</title>
      <link>https://milkoon1.tistory.com/134</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ JavaScript Errors&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Try : 실행할 코드 블록을 정의합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Catch : 오류를 처리하기 위한 코드 블록을 정의합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Finally : 명령문 결과와 관계없이 실행할 코드 블록을 정의합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Throw : 사용자 정의 오류를 정의합니다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1647409605869&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 일반적인
try {
  Block of code to try
}
catch(err) {
  Block of code to handle errors
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1647408413290&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;p&amp;gt;Please input a number between 5 and 10:&amp;lt;/p&amp;gt;

&amp;lt;input id=&quot;demo&quot; type=&quot;text&quot;&amp;gt;
&amp;lt;button type=&quot;button&quot; onclick=&quot;myFunction()&quot;&amp;gt;Test Input&amp;lt;/button&amp;gt;

&amp;lt;p id=&quot;p01&quot;&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;script&amp;gt;
function myFunction() {
  const message = document.getElementById(&quot;p01&quot;);
  message.innerHTML = &quot;&quot;;
  let x = document.getElementById(&quot;demo&quot;).value;
  try { 
    if(x == &quot;&quot;)  throw &quot;is empty&quot;; //빈 값인 경우
    if(isNaN(x)) throw &quot;is not a number&quot;; // 숫자가 아닌 다른 값을 넣을 경우
    x = Number(x);
    if(x &amp;gt; 10)   throw &quot;is too high&quot;; // 10보다 큰 경우
    if(x &amp;lt; 5)  throw &quot;is too low&quot;; // 5보다 작은 경우
  }
  catch(err) {
    message.innerHTML = &quot;Input &quot; + err;
  }
  finally {
  	document.getElementById(&quot;p01&quot;).innerHTML = document.getElementById(&quot;demo&quot;).value;
    document.getElementById(&quot;demo&quot;).value = &quot;&quot;;
  }
}
&amp;lt;/script&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ Error 오류&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Error Name&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Description&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;EvalError&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;eval()함수에서 에러&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;RangeError&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;범위를 벗어난 숫자 발생&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;ReferenceError&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;잘못된 참조&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;SyntaxError&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;구문 오류&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;TypeError&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;유형 오류&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;URIError&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;encodeURI()에서 오류&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1647411661875&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// RangeError
let num = 1;
try {
  num.toPrecision(500);   // A number cannot have 500 significant digits
}
catch(err) {
  document.getElementById(&quot;demo&quot;).innerHTML = err.name;
}

// referenceError
let x = 5;
try {
  x = y + 1;   // y cannot be used (referenced)
}
catch(err) {
  document.getElementById(&quot;demo&quot;).innerHTML = err.name;
}

// SyntaxError
try {
  eval(&quot;alert('Hello)&quot;);   // Missing ' will produce an error
}
catch(err) {
  document.getElementById(&quot;demo&quot;).innerHTML = err.name;
}

// TypeError
let num = 1;
try {
  num.toUpperCase();   // You cannot convert a number to upper case
}
catch(err) {
  document.getElementById(&quot;demo&quot;).innerHTML = err.name;
}

// URIError
try {
  decodeURI(&quot;%%%&quot;);   // You cannot URI decode percent signs
}
catch(err) {
  document.getElementById(&quot;demo&quot;).innerHTML = err.name;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프론트/JavaScript</category>
      <category>javascript</category>
      <category>javaScriptError</category>
      <category>오류종류</category>
      <category>자바스크립트오류</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/134</guid>
      <comments>https://milkoon1.tistory.com/134#entry134comment</comments>
      <pubDate>Wed, 16 Mar 2022 15:22:51 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript : 자바스크립트 Set(), Map()</title>
      <link>https://milkoon1.tistory.com/133</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ Set()&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Set()은 value들로 이루어진 컬렉션&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Array와는 다르게 Set은 같은 value를 2번 포함할 수 없다. 따라서 Set에 이미 존재하는 값을 추가하려고 하면 아무 일도 없다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 172px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20.6977%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Method&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.3023%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.6977%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;new Set()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.3023%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;새로운 Set을 생성&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.6977%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;add()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.3023%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Set안에 있는 새 요소를 추가&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.6977%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;delete()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.3023%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Set에 있는 요소 삭제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.6977%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;has()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.3023%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Set에 해당 요소가 있으면 true를 반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20.6977%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;forEach()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.3023%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Set 각 요소에 대한 콜백을 호출&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20.6977%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;values()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.3023%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Set의 모든 값이 있는 반복자 반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 20.6977%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Property&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.3023%; height: 18px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.6977%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;size&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 79.3023%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Set안에 있는 요소들의 수를 return&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1647323701204&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
const letters = new Set();	//1. 새로운 set을 만든다.
letters.add('a');		//2. 새로운 요소를 추가한다.
letters.add('b');
letters.add('c');
letters.add('a'); 		// 이미 존재하는 값을 넣어도 Array처럼 추가되지 않는다.
// letters.size : 3
// letters.has('a') : true

// 3. forEach()
let text = &quot;&quot;;
letters.forEach (function(value) {
  text += value + &quot;&amp;lt;br&amp;gt;&quot;;
})
document.getElementById(&quot;demo&quot;).innerHTML = text;
// text 결과
/*
a
b
c
*/

// 4. values()
let text = &quot;&quot;;
for (const x of letters.values()) {
  text += x + &quot;&amp;lt;br&amp;gt;&quot;;
}
document.getElementById(&quot;demo&quot;).innerHTML = text;

&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;※ has()는 indexOf()보다 빠르다고 하지만, Set에는 index가 존재하지 않기 때문에 index를 가지고 value를 접근할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ Map()&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Map()은 키가 모든 데이터의 유형이 될 수 있는 키-값으로 이루어진 컬렉션&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Map()은 키의 원래 삽입 순서를 기억한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;key를 사용해서 value를 get, set할 수 있다. key들은 중복될 수 없다. 하나의 key에는 하나의 value만 존재한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 180px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Method&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;new Map()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;새로운 Map을 생성&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;set()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Map의 키 값을 설정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;get()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Map의 키 값을 가져오기&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;delete()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;키로 지정된 Map요소 삭제&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;has()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;해당 키가 Map에 있으면 true반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;forEach()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Map의 각 키/값 쌍에 대한 함수를 호출&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;entries()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Map에서 [key, value] 쌍이 있는 반복자를 반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Property&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;Description&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;size&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Map의 요소 수를 반환&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1647328631367&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
// 1. Map생성
const fruits = new Map([
  [&quot;apples&quot;, 500],
  [&quot;bananas&quot;, 300],
  [&quot;oranges&quot;, 200]
]);

document.getElementById(&quot;demo&quot;).innerHTML = fruits.get(&quot;apples&quot;);
// 결과값 : 500

// 2. Map set사용
fruits.set(&quot;apples&quot;, 500);

// 3. Map get사용
fruits.get(&quot;apples&quot;); // 500 return

// 4.그 외
fruits.size 	// 3 return
fruits.delete(&quot;apples&quot;);	//apples없어지고 나머지 보임
fruits.has(&quot;apples&quot;);	//있으면 true, 없으면 false
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ Map과 Object의 차이&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 108px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style11&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Object&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Map&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;반복&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;직접 반복할 수 없음&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;직접 반복이 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;크기&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;크기 속성이 없다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;크기 속성이 있다&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;키 유형&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;키는 문자열(또는 symbol)이어야 한다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;키는 모든 데이터 유형이 될 수 있다&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;키 순서&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;키가 정렬되어 있지 않다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;키는 삽입 순서로 정렬된다&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 18px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;기본값&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;기본 키 보유&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 18px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;기본 키가 없다&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1647329715366&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Create a Map
const fruits = new Map([
  [&quot;apples&quot;, 500],
  [&quot;bananas&quot;, 300],
  [&quot;oranges&quot;, 200]
]);

let text = &quot;&quot;;
fruits.forEach (function(value, key) {
  text += key + ' = ' + value + &quot;&amp;lt;br&amp;gt;&quot;
})

document.getElementById(&quot;demo&quot;).innerHTML = text;
/* 결과
apples = 500
bananas = 300
oranges = 200
*/&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1647329742483&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;
// Create a Map
const fruits = new Map([
  [&quot;apples&quot;, 500],
  [&quot;bananas&quot;, 300],
  [&quot;oranges&quot;, 200]
]);

let text = &quot;&quot;;
for (const x of fruits.entries()) {
  text += x + &quot;&amp;lt;br&amp;gt;&quot;;
}

document.getElementById(&quot;demo&quot;).innerHTML = text;
/* 결과
apples,500
bananas,300
oranges,200
*/
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프론트/JavaScript</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/133</guid>
      <comments>https://milkoon1.tistory.com/133#entry133comment</comments>
      <pubDate>Tue, 15 Mar 2022 14:55:12 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript : 자바스크립트 조건문, 반복문</title>
      <link>https://milkoon1.tistory.com/132</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ JavaScript 조건문(if else / else if)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646268701534&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const time = new Date().getHours();
let greeting;

// 시간이 10:00 미만이면 &quot;Good morning&quot; 인사말을 만들고, 
// 그렇지 않은 경우 시간이 20:00 미만이면 &quot;Good day&quot; 인사말을 만들고, 
// 그렇지 않으면 &quot;Good morning&quot;을 만듭니다.
if (time &amp;lt; 10) {		// 조건문1이 true이면
  greeting = &quot;Good morning&quot;;
} else if (time &amp;lt; 20) {		// 조건문1은 false, 조건문2가 true이면
  greeting = &quot;Good day&quot;;
} else {			// 조건문1,2 false
  greeting = &quot;Good evening&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ JavaScript 조건문(switch)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646270016315&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let text;
switch (new Date().getDay()) {
  case 4:
  case 5:
    text = &quot;Soon it is Weekend&quot;;
    break;
  case 0:
  case 6:
    text = &quot;It is Weekend&quot;;
    break;
  default:
    text = &quot;Looking forward to the Weekend&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;switch는 일치하는 항목이 있으면 연결된 코드블록이 실행됩니다. 만약 일치하는 항목이 없으면 default 기본 코드블록이 실행됩니다. 또한 여러 케이스가 일치하는 경우 첫 번째 케이스가 선택됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ JavaScript 반복문&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;JavaScript는 다양한 종류의 루프를 지원합니다. for, for/in, for/of, while, do/while&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;for - 크도 블록을 여러 번 반복&lt;/li&gt;
&lt;li&gt;for/in - 객체의 속성을 통해 루프&lt;/li&gt;
&lt;li&gt;for/of - 반복 가능한 객체의 값을 반복&lt;/li&gt;
&lt;li&gt;while - 지정된 조건이 참인 동안 코드 블록을 반복&lt;/li&gt;
&lt;li&gt;do/while - 또한 지정된 조건이 참인 동안 코드 블록을 반복&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ JavaScript - for문&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646272243831&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 일반적인 for문 예시
const cars = [&quot;BMW&quot;, &quot;Volvo&quot;, &quot;Saab&quot;, &quot;Ford&quot;];
let i, len, text;
for (i = 0, len = cars.length, text = &quot;&quot;; i &amp;lt; len; i++) {
  text += cars[i] + &quot;&amp;lt;br&amp;gt;&quot;;
}

// 루프가 시작되기 전에 값이 설정된 경우에는 문1을 생략할 수 있습니다.
const cars = [&quot;BMW&quot;, &quot;Volvo&quot;, &quot;Saab&quot;, &quot;Ford&quot;];
let i = 2;
let len = cars.length;
let text = &quot;&quot;;

for (; i &amp;lt; len; i++) {
  text += cars[i] + &quot;&amp;lt;br&amp;gt;&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ JavaScript - for..in 문&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646272635190&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// for..in문 기본 - object
const person = {fname:&quot;John&quot;, lname:&quot;Doe&quot;, age:25}; 

let txt = &quot;&quot;;
for (let x in person) {
  txt += person[x] + &quot; &quot;;
}

// for..in - array
const numbers = [45, 4, 9, 16, 25];

let txt = &quot;&quot;;
for (let x in numbers) {
  txt += numbers[x] + &quot;&amp;lt;br&amp;gt;&quot;; 
}

// forEach
const numbers = [45, 4, 9, 16, 25];

let txt = &quot;&quot;;
numbers.forEach(myFunction);
document.getElementById(&quot;demo&quot;).innerHTML = txt;

function myFunction(value) {
  txt += value + &quot;&amp;lt;br&amp;gt;&quot;; 
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ JavaScript - for..of문&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646275296519&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// for..of문
const cars = [&quot;BMW&quot;, &quot;Volvo&quot;, &quot;Mini&quot;];

let text = &quot;&quot;;
for (let x of cars) {
  text += x + &quot;&amp;lt;br&amp;gt;&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* for..in문과 for..of문의 차이 : 둘다 반복문으로 사용되는데 for..in은 객체를 탐색하고, for..of문은 배열 요소를 탐색합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646275772905&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// for ...in (객체 순환)
var obj = {
  a: 1000,
  b: 2000,
  c: 3000
};

for (var item in obj) {
  console.log(item) // a, b, c
}

for (var item of obj) {
  console.log(item) // 오류가 남.
}
//---------------------------------------------------------------
// for ...of (배열 순환)
var arr = [1, 2, 3];

for (var item of arr) {
  console.log(item); // 1, 2, 3
}

for (var item in arr) {
  console.log(item); // 0, 1, 2
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ JavaScript - while문&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646275964979&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// while문은 지정된 조건이 true인 한 코드 블록을 반복합니다.
let text = &quot;&quot;;
let i = 0;
while (i &amp;lt; 10) {
  text += &quot;&amp;lt;br&amp;gt;The number is &quot; + i;
  i++;
}

// 결과값
The number is 0
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5
The number is 6
The number is 7
The number is 8
The number is 9&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ JavaScript - Do while문&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Do while문은 while문의 변형입니다. 이 루프는 조건이 참인지 확인하기 전에 코드블록을 한 번 실행한 다음 조건이 true인 동안 루프를 반복합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646276065701&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let text = &quot;&quot;
let i = 0;

do {
  text += &quot;&amp;lt;br&amp;gt;The number is &quot; + i;
  i++;
}
while (i &amp;lt; 10);

// 결과값
The number is 0
The number is 1
The number is 2
The number is 3
The number is 4
The number is 5
The number is 6
The number is 7
The number is 8
The number is 9&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프론트/JavaScript</category>
      <category>forin문</category>
      <category>forof문</category>
      <category>자바스크립트forinforof차이</category>
      <category>자바스크립트for문</category>
      <category>자바스크립트반복문</category>
      <category>자바스크립트조건문</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/132</guid>
      <comments>https://milkoon1.tistory.com/132#entry132comment</comments>
      <pubDate>Thu, 3 Mar 2022 11:55:37 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript : 날짜함수(Date Get Methods), 공식(Math)</title>
      <link>https://milkoon1.tistory.com/131</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;▶ JavaScript Date get Method&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646136059105&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;const d = new Date();	// 2022-03-01 기준
document.getElementById(&quot;demo&quot;).innerHTML = d.getTime();		// 1646135932392
document.getElementById(&quot;demo&quot;).innerHTML = d.getFullYear(); 		// 2022 년
document.getElementById(&quot;demo&quot;).innerHTML = d.getMonth() + 1; 		// 3 월
let month = months[d.getMonth()];
document.getElementById(&quot;demo&quot;).innerHTML = month;				// March 3월
document.getElementById(&quot;demo&quot;).innerHTML = d.getDate();			// 1 일
document.getElementById(&quot;demo&quot;).innerHTML = d.getHours();			// 20 시
document.getElementById(&quot;demo&quot;).innerHTML = d.getMinutes();			// 0 분
document.getElementById(&quot;demo&quot;).innerHTML = d.getSeconds();			// 32 초
document.getElementById(&quot;demo&quot;).innerHTML = d.getMilliseconds();		// 99
document.getElementById(&quot;demo&quot;).innerHTML = d.getDay();				// 2&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;▶ JavaScript Math&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646203135971&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Math.E        // returns Euler's number
Math.PI       // returns PI
Math.SQRT2    // returns the square root of 2
Math.SQRT1_2  // returns the square root of 1/2
Math.LN2      // returns the natural logarithm of 2
Math.LN10     // returns the natural logarithm of 10
Math.LOG2E    // returns base 2 logarithm of E
Math.LOG10E   // returns base 10 logarithm of E&lt;/code&gt;&lt;/pre&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 180px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style5&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 23.6046%; height: 20px;&quot;&gt;Math.round(x)&lt;/td&gt;
&lt;td style=&quot;width: 76.2791%; height: 20px;&quot;&gt;가장 가까운 정수로 반올림된 x를 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 23.6046%; height: 20px;&quot;&gt;Math.ceil(x)&lt;/td&gt;
&lt;td style=&quot;width: 76.2791%; height: 20px;&quot;&gt;가장 가까운 정수로 반올림된 x를 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 23.6046%; height: 20px;&quot;&gt;Math.floor(x)&lt;/td&gt;
&lt;td style=&quot;width: 76.2791%; height: 20px;&quot;&gt;가장 가까운 정수로 내림한 x를 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 23.6046%; height: 20px;&quot;&gt;Math.trunc(x)&lt;/td&gt;
&lt;td style=&quot;width: 76.2791%; height: 20px;&quot;&gt;x의 정수 부분을 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 23.6046%; height: 20px;&quot;&gt;Math.sign(x)&lt;/td&gt;
&lt;td style=&quot;width: 76.2791%; height: 20px;&quot;&gt;x가 음수, null 또는 양수이면 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 23.6046%; height: 20px;&quot;&gt;Math.pow(x, y)&lt;/td&gt;
&lt;td style=&quot;width: 76.2791%; height: 20px;&quot;&gt;x의 값을 y의 거듭제곱으로 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 23.6046%; height: 20px;&quot;&gt;Math.sqrt(x)&lt;/td&gt;
&lt;td style=&quot;width: 76.2791%; height: 20px;&quot;&gt;x의 제곱근을 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 23.6046%; height: 20px;&quot;&gt;Math.abs(x)&lt;/td&gt;
&lt;td style=&quot;width: 76.2791%; height: 20px;&quot;&gt;x의 절대값(양수)를 반환합니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 23.6046%; height: 20px;&quot;&gt;Math.min(), Math.max()&lt;/td&gt;
&lt;td style=&quot;width: 76.2791%; height: 20px;&quot;&gt;인수 목록에서 가장 낮거나 높은 값을 찾는 데 사용할 수 있습니다.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프론트/JavaScript</category>
      <category>자바스크립트</category>
      <category>자바스크립트날짜</category>
      <category>자바스크립트날짜get</category>
      <category>자바스크립트날짜형식</category>
      <category>자바스크립트수학</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/131</guid>
      <comments>https://milkoon1.tistory.com/131#entry131comment</comments>
      <pubDate>Tue, 1 Mar 2022 21:01:56 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript : 데이터형식, 이벤트, 템플릿 이용 방법</title>
      <link>https://milkoon1.tistory.com/130</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;▶ JavaScript Data Type&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;JavaScript의 데이터 유형에 대해서 말하자면,&lt;b&gt; Number, String, Object, Array&lt;/b&gt; 등이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645102132133&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;h2&amp;gt;JavaScript Strings&amp;lt;/h2&amp;gt;

&amp;lt;p&amp;gt;You can use quotes inside a string, as long as they don't match the quotes surrounding the string:&amp;lt;/p&amp;gt;

&amp;lt;p id=&quot;demo&quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;script&amp;gt;
let length = 16;                               // Number
let lastName = &quot;Johnson&quot;;                      // String
let x = {firstName:&quot;John&quot;, lastName:&quot;Doe&quot;};    // Object
const cars = [&quot;Saab&quot;,&quot;Volvo&quot;,&quot;BMW&quot;];	   	// Array
	
document.getElementById(&quot;demo&quot;).innerHTML =
length + &quot;&amp;lt;br&amp;gt;&quot; + 
lastName + &quot;&amp;lt;br&amp;gt;&quot; + 
x + &quot;&amp;lt;br&amp;gt;&quot; + // 그대로 x라고 넣어버리면 [object Object]로 보여준다.
x.firstName + &quot;&amp;lt;br&amp;gt;&quot; + //값을 보기 위해서는 x.firstName
cars[0] + &quot;&amp;lt;br&amp;gt;&quot;;  // 배열은 index 위치를 설정해줘야한다.

/* 결과값
16
Johnson
[object Object]
John
Saab
* /
&amp;lt;/script&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1418&quot; data-origin-height=&quot;522&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l8CJ5/btrtDDu4DHx/C83xv8kkcAKVOSuZq35dak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l8CJ5/btrtDDu4DHx/C83xv8kkcAKVOSuZq35dak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l8CJ5/btrtDDu4DHx/C83xv8kkcAKVOSuZq35dak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl8CJ5%2FbtrtDDu4DHx%2FC83xv8kkcAKVOSuZq35dak%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;1418&quot; height=&quot;522&quot; data-origin-width=&quot;1418&quot; data-origin-height=&quot;522&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1645102827410&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;h2&amp;gt;JavaScript Arrays&amp;lt;/h2&amp;gt;

&amp;lt;p&amp;gt;Adding elements with high indexes can create undefined &quot;holes&quot; in an array.&amp;lt;/p&amp;gt;

&amp;lt;p id=&quot;demo&quot;&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;script&amp;gt;
const a = 0;
const fruits = [&quot;Banana&quot;, &quot;Orange&quot;, &quot;Apple&quot;];
const person = {firstName:&quot;John&quot;, lastName:&quot;Doe&quot;, age:46};
document.getElementById(&quot;demo&quot;).innerHTML = 
fruits[0] + &quot;&amp;lt;br&amp;gt;&quot; + 
fruits[a] + &quot;&amp;lt;br&amp;gt;&quot; + 		// a가 숫자이기에 사용이 가능하다.
fruits[&quot;Banana&quot;] + &quot;&amp;lt;br&amp;gt;&quot; + 	// Object처럼 사용하면 undefined
person + &quot;&amp;lt;br&amp;gt;&quot; + 		// 그대로 쓰면 [object Object]로 보여준다.
person.firstName + &quot;&amp;lt;br&amp;gt;&quot; + 
person[&quot;firstName&quot;];  		// John이 출력된다.
&amp;lt;/script&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Array와 Object쓰는 방식에 대해 헷갈리시면 안됩니다. Array는 cars[0] 괄호 안에 index(숫자)만 사용이 가능하며 0부터 시작합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;▶ JavaScript와 jQuery의 이벤트&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 240px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.1938%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Event&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.4728%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Description&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;jQuery 비교&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.1938%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;onchange&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.4728%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;HTML 요소가 변경되었을 때&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 120px;&quot;&gt;
&lt;td style=&quot;width: 20.1938%; height: 120px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;onclick&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.4728%; height: 120px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자가 HTML요소를 클릭했을 때&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 120px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #a52a2a;&quot;&gt;&quot;p&quot;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;click&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0000cd;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;(){&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #008000;&quot;&gt;// action goes here!!&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;});&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;$(&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #a52a2a;&quot;&gt;&quot;p&quot;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;dblclick&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;(&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0000cd;&quot;&gt;function&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;(){&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;&amp;nbsp; $(&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #0000cd;&quot;&gt;this&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;).&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;hide&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;();&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;});&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.1938%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;onmouseover&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.4728%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자가 HTML요소 위로 마우스를 이동 했을 때&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.1938%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;onmouseout&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.4728%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자가 HTML요소에서 마우스를 멀리 이동했을 때&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.1938%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;onkeydown&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.4728%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용자가 키보드 키를 누를 때&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.1938%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;onload&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 46.4728%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;브라우저가 페이지 로드를 완료했을 때&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 20px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1645104323627&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// jQuery의 on()메서드는 선택한 요소에 대해 하나 이상의 이벤트 핸들러를 연결합니다.
$(document).ready(function(){
  $(&quot;p&quot;).on({
    mouseenter: function(){
      $(this).css(&quot;background-color&quot;, &quot;lightgray&quot;);
    },  
    mouseleave: function(){
      $(this).css(&quot;background-color&quot;, &quot;lightblue&quot;);
    }, 
    click: function(){
      $(this).css(&quot;background-color&quot;, &quot;yellow&quot;);
    }  
  });
});&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;▶ JavaScript 문자열&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646133419798&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// slice(strat, end)
// 문자열의 일부를 추출하고 추출된 부분을 새 문자열로 반환
let str = &quot;Apple, Banana, Kiwi&quot;;
document.getElementById(&quot;demo&quot;).innerHTML = str.slice(7,13); //Banana
document.getElementById(&quot;demo&quot;).innerHTML = str.slice(7); //Banana, Kiwi

// substring(start, end)
// slice()와 비슷한 substring(). 차이점으로 음수 인덱스를 허용할 수 없다는 차이점이 있다.
document.getElementById(&quot;demo&quot;).innerHTML = str.substring(7,13); // Banana

// substr(start, length)
// 두 번째 매개변수 가 추출된 부분 의 길이를 지정한다.
document.getElementById(&quot;demo&quot;).innerHTML = str.substr(7,6);

// replace(old, new)
// 지정된 값을 문자열의 다른 값으로 바꾼다.
let text = &quot;Please visit Microsoft!&quot;;
let newText = text.replace(&quot;Microsoft&quot;, &quot;W3Schools&quot;);

// trim()
// 문자열의 양쪽에서 공백을 제거
let text1 = &quot;      Hello World!      &quot;;
let text2 = text1.trim();

// split()
// 문자열을 배열로 변환
let text = &quot;a,b,c,d,e,f&quot;;
const myArray = text.split(&quot;,&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1645104802169&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;

&amp;lt;h2&amp;gt;JavaScript Template Literals&amp;lt;/h2&amp;gt;

&amp;lt;p&amp;gt;Template literals allows variables in strings:&amp;lt;/p&amp;gt;

&amp;lt;p id=&quot;demo&quot;&amp;gt;&amp;lt;/p&amp;gt;

&amp;lt;p&amp;gt;Template literals are not supported in Internet Explorer.&amp;lt;/p&amp;gt;

&amp;lt;script&amp;gt;
//일반적으로 쓰는 방식
let firstName = &quot;John&quot;;
let lastName = &quot;Doe&quot;;
let text = `Welcome ${firstName}, ${lastName}!`;
document.getElementById(&quot;demo&quot;).innerHTML = text;

//배열에 있는 값을 뽑아서 쓰는 방식
let tags = [&quot;template literals&quot;, &quot;javascript&quot;, &quot;es6&quot;];
let text = `Welcome ${tags[0]}`;
document.getElementById(&quot;demo&quot;).innerHTML = text;

&amp;lt;/script&amp;gt;

&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;▶ JavaScript 숫자&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646134082753&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;let x = 3.14;    // A number with decimals
let y = 3;       // A number without decimals

let x = 100;         // x is a number
let y = &quot;100&quot;;       // y is a string

// toString()
// 문자열로 반환
let x = 123;
x.toString();
(123).toString();

// toExponential()
// toExponential()반올림되고 지수 표기법을 사용하여 작성된 숫자가 있는 문자열을 반환
let x = 9.656;
document.getElementById(&quot;demo&quot;).innerHTML =
  x.toExponential() + &quot;&amp;lt;br&amp;gt;&quot; + 		// 9.656e+0
  x.toExponential(2) + &quot;&amp;lt;br&amp;gt;&quot; + 	// 9.66e+0
  x.toExponential(4) + &quot;&amp;lt;br&amp;gt;&quot; + 	// 9.6560e+0
  x.toExponential(6);			// 9.656000e+0
  
// toFixed()
// 지정된 소수 자릿수로 작성된 숫자와 함께 문자열을 반환
let x = 9.656;
document.getElementById(&quot;demo&quot;).innerHTML =
  x.toFixed(0) + &quot;&amp;lt;br&amp;gt;&quot; +		// 10
  x.toFixed(2) + &quot;&amp;lt;br&amp;gt;&quot; +		// 9.66
  x.toFixed(4) + &quot;&amp;lt;br&amp;gt;&quot; +		// 9.6560
  x.toFixed(6);					// 9.656000

// Number(), parseFloat(), parseInt()
document.getElementById(&quot;demo&quot;).innerHTML = 
  Number(true) + &quot;&amp;lt;br&amp;gt;&quot; +			// 1
  Number(false) + &quot;&amp;lt;br&amp;gt;&quot; +			// 0
  parseInt(&quot;  10&quot;) + &quot;&amp;lt;br&amp;gt;&quot; +		// 10
  Number(&quot;10.33&quot;) + &quot;&amp;lt;br&amp;gt;&quot; + 		// 10.33
  parseInt(&quot;10.33&quot;) + &quot;&amp;lt;br&amp;gt;&quot; + 		// 10
  parseFloat(&quot;11.1&quot;) + &quot;&amp;lt;br&amp;gt;&quot; + 	// 11.1
  Number(&quot;John&quot;);					// NaN&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;▶ JavaScript 배열&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1646135396624&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// toString();
// 배열을 (쉼표로 구분된) 배열 값의 문자열로 변환
const fruits = [&quot;Banana&quot;, &quot;Orange&quot;, &quot;Apple&quot;, &quot;Mango&quot;];
document.getElementById(&quot;demo&quot;).innerHTML = fruits.toString();

// join()
// 모든 배열 요소를 문자열로 결합
const fruits = [&quot;Banana&quot;, &quot;Orange&quot;, &quot;Apple&quot;, &quot;Mango&quot;];
document.getElementById(&quot;demo&quot;).innerHTML = fruits.join(&quot; * &quot;); // Banana * Orange * Apple * Mango

// pop()
// 배열에서 마지막 요소를 제거
const fruits = [&quot;Banana&quot;, &quot;Orange&quot;, &quot;Apple&quot;, &quot;Mango&quot;];
fruits.pop(); // Banana,Orange,Apple

// push()
// 배열에 새 요소를 추가합니다(끝에)
const fruits = [&quot;Banana&quot;, &quot;Orange&quot;, &quot;Apple&quot;, &quot;Mango&quot;];
fruits.push(&quot;Kiwi&quot;); // Banana,Orange,Apple,Mango,Kiwi

// shift()
// 첫 번째 배열 요소를 제거하고 다른 모든 요소를 ​​더 낮은 인덱스로 &quot;이동&quot;합니다
const fruits = [&quot;Banana&quot;, &quot;Orange&quot;, &quot;Apple&quot;, &quot;Mango&quot;];
fruits.shift(); // Orange,Apple,Mango

// unshift()
// 배열에 새 요소를 추가하고(처음에) 이전 요소를 &quot;이동 해제&quot;
const fruits = [&quot;Banana&quot;, &quot;Orange&quot;, &quot;Apple&quot;, &quot;Mango&quot;];
document.getElementById(&quot;demo1&quot;).innerHTML = fruits;
fruits.unshift(&quot;Lemon&quot;); // Lemon,Banana,Orange,Apple,Mango

// delete
// 배열 삭제()
const fruits = [&quot;Banana&quot;, &quot;Orange&quot;, &quot;Apple&quot;, &quot;Mango&quot;];
delete fruits[0];

// concat()
const myGirls = [&quot;Cecilie&quot;, &quot;Lone&quot;];
const myBoys = [&quot;Emil&quot;, &quot;Tobias&quot;, &quot;Linus&quot;];
const myChildren = myGirls.concat(myBoys);	// Cecilie,Lone,Emil,Tobias,Linus&lt;/code&gt;&lt;/pre&gt;</description>
      <category>프론트/JavaScript</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/130</guid>
      <comments>https://milkoon1.tistory.com/130#entry130comment</comments>
      <pubDate>Thu, 17 Feb 2022 22:40:54 +0900</pubDate>
    </item>
    <item>
      <title>JavaScript : 자바스크립트 기초 배우기 with jQuery</title>
      <link>https://milkoon1.tistory.com/129</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;jQuery의 목적은 웹사이트에서 JavaScript를 훨씬 더 쉽게 사용할 수 있도록 도와주는 경량 JavaScript 라이브러리입니다. jQuery를 이용하면 AJAX 호출 및 DOM 조작과 같은 JavaScript의 복잡한 많은 부분을 단순화시켜줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;* jQuery 라이브러리 기능&lt;/b&gt; : HTML/DOM조작, CSS조작, HTML이벤트메소드, 효과 및 애니메이션, AJAX 등&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vamlo/btrtut1gIGJ/IWSKdt1jLXCFniNW7k1Z6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vamlo/btrtut1gIGJ/IWSKdt1jLXCFniNW7k1Z6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vamlo/btrtut1gIGJ/IWSKdt1jLXCFniNW7k1Z6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvamlo%2Fbtrtut1gIGJ%2FIWSKdt1jLXCFniNW7k1Z6k%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;1500&quot; height=&quot;618&quot; data-origin-width=&quot;1500&quot; data-origin-height=&quot;618&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1645012071240&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;!-- JavaScript onClick를 이용해서 content를 직접 변경--&amp;gt;
&amp;lt;p id=&quot;memo&quot;&amp;gt;JavaScript&amp;lt;/p&amp;gt;
&amp;lt;button type=&quot;&quot; onclick='document.getElementById(&quot;memo&quot;).innerHTML = &quot;Hello JavaScript!&quot;'&amp;gt; JavaScript Button&amp;lt;/button&amp;gt;

&amp;lt;p id=&quot;memo2&quot;&amp;gt;jQuery&amp;lt;/p&amp;gt;
&amp;lt;button id=&quot;btn&quot;&amp;gt;jQuery Button&amp;lt;/button&amp;gt;
&amp;lt;/body&amp;gt;

&amp;lt;!-- jQuery를 사용하기 위해선 import --&amp;gt;
&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
&amp;lt;!-- $(document).ready(function(){ 쓰는 이유는 문서 로드가 완료되기 전 jQuery코드가 실행되는 것을 방지하기 위함입니다 --&amp;gt;
$(document).ready(function(){
  $(&quot;#btn&quot;).click(function(){
      $(&quot;#memo2&quot;).text(&quot;Hello jQuery!&quot;);
  });
});
&amp;lt;/script&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;위의 소스는 JavaScript를 이용해서 &amp;lt;p&amp;gt;의 text를 바꾸는 방법과 jQuery를 이용해서 바꾸는 방법을 비교해보았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1495&quot; data-origin-height=&quot;565&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8CqzO/btrtwHraJ2J/K0Cj7IikK9QiPdihd1FT8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8CqzO/btrtwHraJ2J/K0Cj7IikK9QiPdihd1FT8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8CqzO/btrtwHraJ2J/K0Cj7IikK9QiPdihd1FT8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8CqzO%2FbtrtwHraJ2J%2FK0Cj7IikK9QiPdihd1FT8k%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;1495&quot; height=&quot;565&quot; data-origin-width=&quot;1495&quot; data-origin-height=&quot;565&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1645012381177&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;p id=&quot;memo&quot;&amp;gt;JavaScript&amp;lt;/p&amp;gt;
&amp;lt;!-- onclick에 직접 입력이 아닌 function으로 빼서 작업 --&amp;gt;
&amp;lt;button type=&quot;&quot; onclick=&quot;javaScriptFunction()&quot;&amp;gt; JavaScript Button&amp;lt;/button&amp;gt;

&amp;lt;p id=&quot;memo2&quot;&amp;gt;jQuery&amp;lt;/p&amp;gt;
&amp;lt;button id=&quot;btn&quot;&amp;gt;jQuery Button&amp;lt;/button&amp;gt;
&amp;lt;/body&amp;gt;

&amp;lt;script src=&quot;https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js&quot;&amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;script&amp;gt;
&amp;lt;!-- JavaScript Button을 클릭 시 호출되는 함수 --&amp;gt;
function javaScriptFunction() {
	document.getElementById(&quot;memo&quot;).innerHTML = &quot;Paragraph changed.&quot;;
};

$(document).ready(function(){
  $(&quot;#btn&quot;).click(function(){
      $(&quot;#memo2&quot;).text(&quot;Hello jQuery!&quot;);
  });
});
&amp;lt;/script&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;물론 JavaScript도 jQuery에서 사용한 function처럼 함수를 만들어 사용할 수 있습니다. 참고로 JavaScript는 &amp;lt;head&amp;gt;, &amp;lt;body&amp;gt; 등 HTML 페이지 섹션 어디에든 배치할 수 있으며, 외부 파일에 배치할 수도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ JavaScript구문과 jQuery구문&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645012804036&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/* JavaScript 구문
 * JavaScript 구문은 두 가지 유형의 값을 정의합니다.
 * 고정값, 변수값
 */
var x, y;
x = 5 + 6;
y = x * 10;
 
/* jQuery 구문
 * 기본 구문은 $( 선택기 )입니다. 액션 ()
 * jQuery를 정의/액세스하기 위한 $ 기호
 * HTML 요소 &quot;쿼리(또는 찾기)&quot;를 위한 ( 선택기 )
 * 요소에 대해 수행할 jQuery 작업 ()
 */
$(this).hide()- 현재 요소를 숨깁니다.
$(&quot;p&quot;).hide()- 모든 &amp;lt;p&amp;gt; 요소를 숨깁니다.
$(&quot;.test&quot;).hide()- class=&quot;test&quot;인 모든 요소를 ​​숨깁니다.
$(&quot;#test&quot;).hide()- id=&quot;test&quot;인 요소를 숨깁니다.&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ JavaScript 키워드&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;Keyword&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;Description&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;var&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;변수 선언&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;변수는 데이터를 저장하기 위한 컨테이너&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;let&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;블록 변수 선언&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;변수의 값이 변경될 수 있으면 let&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* let으로 정의된 변수는 재선언할 수 없음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;const&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;블록 상수 선언&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;일반적인 규칙을 원할 경우 const&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;if&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;조건에서 실행할 명령문 블록을 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;switch&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;다른 경우에 실행할 명령분 블록을 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;for&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;루프에서 실행할 명령문 블록을 표시&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;function&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;함수 선언&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;return&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;기능 종료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;try&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;명령문 블록에 대한 오류 처리를 구현&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;* var, let, const 차이점 체크하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1645015706164&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// var는 변수를 다시 선언하면 문제가 발생할 수 있다.
var  x = 10;
// Here x is 10
{  
var x = 2;
// Here x is 2
}
// Here x is 2
//--------------------------------------------------------
// let은 재선언할 수는 없지만
// 블록 내부에 선언된 변수는 블록 외부에서 엑세스할 수 없기 때문에
// 내부에 변수를 다시 선언해도 문제가 발생하지 않는다.
let  x = 10;
// Here x is 10
{  
  let x = 2;
  // Here x is 2
}
// Here x is 10
//--------------------------------------------------------
// const는 재할당할 수가 없다.
const PI = 3.141592653589793;
PI = 3.14;      // This will give an error
PI = PI + 10;   // This will also give an error&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;▶ jQuery 선택기 예시&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 193px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;Syntax&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;Description&lt;/span&gt;&lt;/b&gt;&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;span style=&quot;background-color: #ffffff; color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;$(&quot;*&quot;)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Selects all elements&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;$(this)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Selects the current HTML element&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 13px;&quot;&gt;
&lt;td style=&quot;width: 50%; height: 13px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;$(&quot;p.intro&quot;)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 13px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Selects all &amp;lt;p&amp;gt; elements with class=&quot;intro&quot;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;$(&quot;[href]&quot;)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Selects all elements with an href attribute&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프론트/JavaScript</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/129</guid>
      <comments>https://milkoon1.tistory.com/129#entry129comment</comments>
      <pubDate>Wed, 16 Feb 2022 21:55:51 +0900</pubDate>
    </item>
    <item>
      <title>Node.js : webkitSpeechRecognition 를 이용해서 Speech-to-text</title>
      <link>https://milkoon1.tistory.com/128</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이번 글에서는 google의 Speech-to-Text API 정보를 찾아보다가 알게 된 webkitSpeechRecognition에 대해 포스팅해보도록 하겠습니다. webkitSpeechRecognition을 이용하면 내가 녹음하는 동안 연결했던 html의 text에 자동으로 출력되는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1) html에 녹음버튼과 결과값 출력할 text 만들기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1643110674323&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;a href=&quot;#&quot; id=&quot;record_start&quot; style=&quot;text-decoration:none;color:black;&quot;&amp;gt;녹음시작&amp;lt;/a&amp;gt; 
&amp;lt;span id=&quot;record_msg&quot; style=&quot;margin-left: 50px;&quot;&amp;gt;&amp;lt;/span&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;2) webitSpeechRecognition으로 출력하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1643110696831&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var r=document.getElementById('record_msg');

        function webkitSpeech()
        {
            if('webkitSpeechRecognition'in window){
                //Web speech API Function
                var speechRecognizer = new webkitSpeechRecognition();
                speechRecognizer.continuous = true;
                speechRecognizer.interimResults = true;
                //lang : language (ko-KR : Korean, en-IN : englist)
                speechRecognizer.lang=&quot;ko-KR&quot;;
                speechRecognizer.start();
    
                var finalTranscripts = '';
                speechRecognizer.onresult=function(event){
                    var interimTranscripts='';
                    for(var i=event.resultIndex; i &amp;lt; event.results.length; i++)
                    {
                        var transcript=event.results[i][0].transcript;
                        transcript.replace(&quot;\n&quot;,&quot;&amp;lt;br&amp;gt;&quot;);

                        //isFinal : if speech recognition is finished, isFinal = true
                        if(event.results[i].isFinal){
                            finalTranscripts+=transcript;
                        }
                        else{
                            interimTranscripts+=transcript;
                        }
                    }
                    //insert into HTML
                    r.innerHTML=finalTranscripts+'&amp;lt;span style=&quot;color:#999&quot;&amp;gt;'+interimTranscripts+'&amp;lt;/span&amp;gt;';
                };
                speechRecognizer.onerror = function(event){
                };
            }
            else{
                //if browser don't support this function. this message will show in your web
                r.innerHTML =&quot;your browser is not supported. If google chrome. Please upgrade!&quot;;
            }
        }&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어/Node.js</category>
      <category>speechAPI</category>
      <category>speechtoText</category>
      <category>webkitrecognition</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/128</guid>
      <comments>https://milkoon1.tistory.com/128#entry128comment</comments>
      <pubDate>Tue, 25 Jan 2022 20:39:22 +0900</pubDate>
    </item>
    <item>
      <title>MS-SQL : PRIMARY 파일 그룹이 꽉 찼으므로 데이터베이스 tempdb 공간 할당 오류</title>
      <link>https://milkoon1.tistory.com/127</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1516&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Jjt7x/btq9NXHEawN/6h5dcY9u9lFWU7RkkKe1tK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Jjt7x/btq9NXHEawN/6h5dcY9u9lFWU7RkkKe1tK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Jjt7x/btq9NXHEawN/6h5dcY9u9lFWU7RkkKe1tK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJjt7x%2Fbtq9NXHEawN%2F6h5dcY9u9lFWU7RkkKe1tK%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;1516&quot; height=&quot;325&quot; data-origin-width=&quot;1516&quot; data-origin-height=&quot;325&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;'PRIMARY' 파일 그룹이 꽉 찼으므로 데이터베이스 'tempdb'의 개체 'dbo.SORT ~ '에 공간을 할당할 수 없습니다. 필요없는 파일을 삭제하거나, 파일 그룹의 개체를 삭제하거나, 파일 그룹에 파일을 추가하거나, 파일 그룹의 기존 파일에 대해 자동 증가를 설정하여 디스크 공간을 만드십시오.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;원인 : 하드 디스크 공간 또는 디비 파일자동증가가 설정되지 않은 이유&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;해결방법 : 디비 파일 자동증가 설정을 하거나, 하드디스크 확보, 로그파일 삭제가 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1) 로그파일 줄이기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1626668166438&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 디비의 ㅍ로그파일명과 줄이고자 하는 파일의 사이즈를 입력합니다.
BACKUP LOG [디비명] WITH NO_LOG
DBCC SHRINKFILE ([디비로그파일], [파일사이즈KB])

-- 로그파일 줄이는 예시
EX) BACKUP LOG tempdb WITH NO_LOG
DBCC SHRINKFILE (templog, 512)

-- db size 체크하는 쿼리
Sp_helpdb 'tempdb'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase/MS-SQL</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/127</guid>
      <comments>https://milkoon1.tistory.com/127#entry127comment</comments>
      <pubDate>Mon, 19 Jul 2021 13:18:03 +0900</pubDate>
    </item>
    <item>
      <title>HTTP 상태 코드</title>
      <link>https://milkoon1.tistory.com/126</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;모든 HTTP 응답 코드는 5개의 클래스(분류)로 구분된다. 상태 코드의 첫 번째 숫자는 응답의 클래스를 정의한다. 마지막 두 자리는 클래스나 분류 역할을 하지 않는다. 첫자리에 대한 5가지 값들은 다음과 같습니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;1xx (정보): 요청을 받았으며 프로세스를 계속한다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;2xx (성공): 요청을 성공적으로 받았으며 인식했고 수용하였다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;5xx (서버 오류): 서버가 명백히 유효한 요청에 대해 충족을 실패했다&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1xx (조건부 응답 - Information Responses)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이 상태의 상태 코드는 상태-라인과 선택적 헤더(컴퓨터에서 출력될 때 각 페이지 맨 윗부분에 자동으로 붙는 부분)만을 포함하는 임시의 응답을 나타내고 빈 라인에 의해서 종결된다. HTTP/1.0이래로 어떤 1XX 상태 코드들도 정의 되지 않았다. 서버들은 1XX 응답을 실험적인 상태를 제외하고 HTTP/1.0 클라이언트(서버에 연결된 컴퓨터)로 보내면 안 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;100(&lt;b&gt;Continue, &lt;/b&gt;계속)&lt;/b&gt; : 요청자는 요청을 계속해야 한다. 서버는 이 코드를 제공하여 요청의 첫 번째 부분을 받았으며 나머지를 기다리고 있음을 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;101(&lt;b&gt;Switching Protocol, &lt;/b&gt;프로토콜 전환)&lt;/b&gt; : 요청자가 서버에 프로토콜 전환을 요청했으며 서버는 이를 승인하는 중이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;102(&lt;b&gt;Processing WebDAV, &lt;/b&gt;처리)&lt;/b&gt; : 이 코드는 서버가 요청을 수신하였으며 이를 처리하고 있지만, 아직 제대로 된 응답을 알려줄 수 없음을 알려준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2xx (성공 - Successful Responses)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이 클래스의 상태 코드는 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킨다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;200(&lt;b&gt;OK, &lt;/b&gt;성공) &lt;/b&gt;: 서버가 요청을 제대로 처리했다는 뜻이다. 이는 주로 서버가 요청한 페이지를 제공했다는 의미로 쓰인다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;201(&lt;b&gt;Created, &lt;/b&gt;작성됨)&lt;/b&gt; : 성공적으로 요청되었으며 서버가 새 리소스를 작성했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;202(&lt;b&gt;Accepted, &lt;/b&gt;허용됨)&lt;/b&gt; : 서버가 요청을 접수했지만 아직 처리하지 않았다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;203(&lt;b&gt;Non-Authoritative Information, &lt;/b&gt;신뢰할 수 없는 정보)&lt;/b&gt; : 서버가 요청을 성공적으로 처리했지만 다른 소스에서 수신된 정보를 제공하고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;204(&lt;b&gt;No Content, &lt;/b&gt;콘텐츠 없음)&lt;/b&gt; : 서버가 요청을 성공적으로 처리했지만 콘텐츠를 제공하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;205(&lt;b&gt;Reset Content, &lt;/b&gt;콘텐츠 재설정)&lt;/b&gt; : 서버가 요청을 성공적으로 처리했지만 콘텐츠를 표시하지 않는다. 204 응답과 달리 이 응답은 요청자가 문서 보기를 재설정할 것을 요구한다(예: 새 입력을 위한 양식 비우기).&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;206(&lt;b&gt;Partial Content, &lt;/b&gt;일부 콘텐츠)&lt;/b&gt; : 서버가 GET 요청의 일부만 성공적으로 처리했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;207(&lt;b&gt;Multi-Status, &lt;/b&gt;다중 상태)&lt;/b&gt; : 다중 상태는 여러 리소스가 여러 상태 코드인 상황이 적절한 경우에 해당되는 정보를 전달한다. 해당 코드는 WebDAV(Web Distributed Authoring Versioning)에 사용된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;208(&lt;b&gt;Already Reported, &lt;/b&gt;이미 보고됨)&lt;/b&gt; : prostat(property와 status의 합성어) 응답 속성으로 동일 컬렉션으로 바인드된 복수의 내부 멤버를 반복적으로 열거하는 것을 피하기 위해 사용된다. 해당 코드는 WebDAV(Web Distributed Authoring Versioning)에 사용된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;226(IM Used - HTTP Delta encoding)&lt;/b&gt; : 서버가 GET요청에 대한 리소스의 의무를 다 했고, 그리고 응답이 하나 또는 그 이상의 인스턴스 조작이 현재 인스턴스에 적용되었음을 알려준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3xx (리다이렉션 완료 - Redirection Messages)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;300(&lt;b&gt;Multiple Choice, &lt;/b&gt;여러 선택항목)&lt;/b&gt; : 서버가 요청에 따라 여러 조치를 선택할 수 있다. 서버가 사용자 에이전트에 따라 수행할 작업을 선택하거나, 요청자가 선택할 수 있는 작업 목록을 제공한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;301(&lt;b&gt;Moved Permanently, &lt;/b&gt;영구 이동)&lt;/b&gt; : 요청한 페이지를 새 위치로 영구적으로 이동했다. GET 또는 HEAD 요청에 대한 응답으로 이 응답을 표시하면 요청자가 자동으로 새 위치로 전달된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;302(&lt;b&gt;Found, &lt;/b&gt;임시 이동)&lt;/b&gt; : 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청 시 원래 위치를 계속 사용해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;303(&lt;b&gt;See Other, &lt;/b&gt;기타 위치 보기)&lt;/b&gt; : 요청자가 다른 위치에 별도의 GET 요청을 하여 응답을 검색할 경우 서버는 이 코드를 표시한다. HEAD 요청 이외의 모든 요청을 다른 위치로 자동으로 전달한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;304(&lt;b&gt;Not Modified, &lt;/b&gt;수정되지 않음)&lt;/b&gt; : 마지막 요청 이후 요청한 페이지는 수정되지 않았다. 서버가 이 응답을 표시하면 페이지의 콘텐츠를 표시하지 않는다. 요청자가 마지막으로 페이지를 요청한 후 페이지가 변경되지 않으면 이 응답(If-Modified-Since HTTP 헤더라고 함)을 표시하도록 서버를 구성해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;305(&lt;b&gt;Use Proxy, &lt;/b&gt;프록시 사용)&lt;/b&gt; : 요청자는 프록시를 사용하여 요청한 페이지만 액세스할 수 있다. 서버가 이 응답을 표시하면 요청자가 사용할 프록시를 가리키는 것이기도 하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;s&gt;&lt;b&gt;306(unused)&lt;/b&gt;&lt;/s&gt; : 이 응답 코드는 더 이상 사용되지 않으며, 현재는 추후 사용을 위해 예약되어 있다. 이것은 HTTP 1.1 기술사양 이전 버전에서 사용되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;307(&lt;b&gt;Temporary Redirect, &lt;/b&gt;임시 리다이렉션)&lt;/b&gt; : 현재 서버가 다른 위치의 페이지로 요청에 응답하고 있지만 요청자는 향후 요청 시 원래 위치를 계속 사용해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;308(&lt;b&gt;Permanent Redirect, &lt;/b&gt;영구 리다이렉션)&lt;/b&gt; : 이것은 리소스가 이제 HTTP 응답 헤더의 Location에 명시된 영구히 다른 URI에 위치하고 있음을 의미한다. 이것은 301 Moved Permanently HTTP 응답 코드와 동일한 의미를 가지고 있으며, 사용자 에이전트가 반드시 HTTP 메소드를 변경하지 말아야 하는 점만 다르다. 만약 첫 요청에 POST가 사용되었다면, 두번째 요청도 반드시 POST를 사용해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;4xx (요청 오류 Client Error Responses)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;4xx 클래스의 상태 코드는 클라이언트에 오류가 있음을 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;400(&lt;b&gt;Bad Request, &lt;/b&gt;잘못된 요청)&lt;/b&gt; : 서버가 요청의 구문을 인식하지 못했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;401(&lt;b&gt;Unauthorized, &lt;/b&gt;권한 없음)&lt;/b&gt; : 이 요청은 인증이 필요하다. 서버는 로그인이 필요한 페이지에 대해 이 요청을 제공할 수 있다. 상태 코드 이름이 권한 없음(Unauthorized)으로 되어 있지만 실제 뜻은 인증 안됨(Unauthenticated)에 더 가깝다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;402(&lt;b&gt;Payment Required, &lt;/b&gt;결제 필요)&lt;/b&gt; : 이 요청은 결제가 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;403&lt;/b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;b&gt;(Forbidden, 금지됨)&lt;/b&gt; : 서버가 요청을 거부하고 있다. 예를 들자면, 사용자가 리소스에 대한 필요 권한을 갖고 있지 않다. (401은 인증 실패, 403은 인가 실패라고 볼 수 있음)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;404(Not Found, 찾을 수 없음) &lt;/b&gt;: 서버가 요청한 페이지(Resource)를 찾을 수 없다. 예를 들어 서버에 존재하지 않는 페이지에 대한 요청이 있을 경우 서버는 이 코드를 제공한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;405(Method Not Allowed, 허용되지 않는 방법)&lt;/b&gt; : 요청에 지정된 방법을 사용할 수 없다. 예를 들어 POST 방식으로 요청을 받는 서버에 GET 요청을 보내는 경우, 또는 읽기 전용 리소스에 PUT 요청을 보내는 경우에 이 코드를 제공한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;406(Not Acceptable, 허용되지 않음)&lt;/b&gt; : 요청한 페이지가 요청한 콘텐츠 특성으로 응답할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;407(Proxy Authentication Required, 프록시 인증 필요)&lt;/b&gt; : 이 상태 코드는 401(권한 없음)과 비슷하지만 요청자가 프록시를 사용하여 인증해야 한다. 서버가 이 응답을 표시하면 요청자가 사용할 프록시를 가리키는 것이기도 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;408(Request Timeout, 요청 시간초과)&lt;/b&gt; : 서버의 요청 대기가 시간을 초과하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;409(Conflict, 충돌)&lt;/b&gt; : 서버가 요청을 수행하는 중에 충돌이 발생했다. 서버는 응답할 때 충돌에 대한 정보를 포함해야 한다. 서버는 PUT 요청과 충돌하는 PUT 요청에 대한 응답으로 이 코드를 요청 간 차이점 목록과 함께 표시해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;410(Gone, 사라짐)&lt;/b&gt; : 서버는 요청한 리소스가 영구적으로 삭제되었을 때 이 응답을 표시한다. 404(찾을 수 없음) 코드와 비슷하며 이전에 있었지만 더 이상 존재하지 않는 리소스에 대해 404 대신 사용하기도 한다. 리소스가 영구적으로 이동된 경우 301을 사용하여 리소스의 새 위치를 지정해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;411(Length Required, 길이 필요)&lt;/b&gt; : 서버는 유효한 콘텐츠 길이 헤더 입력란 없이는 요청을 수락하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;412(Precondition Failed, 사전조건 실패)&lt;/b&gt; : 서버가 요청자가 요청 시 부과한 사전조건을 만족하지 않는다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;413(Payload Too Large, 요청 속성이 너무 큼)&lt;/b&gt; : 요청이 너무 커서 서버가 처리할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;414(URI Too Long, 요청 URI가 너무 긺)&lt;/b&gt; : 요청 URI(일반적으로 URL)가 너무 길어 서버가 처리할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;415(Unsupported Media Type, 지원되지 않는 미디어 유형)&lt;/b&gt; : 요청이 요청한 페이지에서 지원하지 않는 형식으로 되어 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;416(Requested Range Not Satisfiable, 처리할 수 없는 요청범위)&lt;/b&gt; : 요청이 페이지에서 처리할 수 없는 범위에 해당되는 경우 서버는 이 상태 코드를 표시한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;417(Expectation Failed, 예상 실패)&lt;/b&gt; : 서버는 Expect 요청 헤더 입력란의 요구사항을 만족할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;418(I'm a teapot)&lt;/b&gt; : 서버는 커피를 찻 주전자에 끓이는 것을 거절합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;421(Misdirected Request)&lt;/b&gt; : 서버로 유도된 요청은 응답을 생성할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;422(Unprocessable Entity, 처리할 수 없는 엔티티, WebDAV)&lt;/b&gt; : 요청은 잘 만들어졌지만, 문법 오류로 인하여 따를 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;423(Locked 잠김, WebDAV)&lt;/b&gt; : 접근하려는 리소스가 잠겨 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;424(Failed Dependency 실패된 의존성, WebDAV)&lt;/b&gt; : 이전 요청이 실패하였기 때문에 지금의 요청도 실패하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;&lt;s&gt;425(정렬되지 않은 컬렉션, 인터넷 초안)&lt;/s&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;426(Upgrade Required, 업그레이드 필요)&lt;/b&gt; : 클라이언트는 업그레이드 헤더 필드에 주어진 프로토콜로 요청을 보내야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;428(Precondition Required, 전제조건 필요)&lt;/b&gt; : 오리진 서버는 요청이 조건적이어야 한다. 클라이언트가 리소스를 GET해서 수정하고 그리고 PUT으로 서버에 돌려놓는 동안 서드파티가 서버의 상태를 수정하여 발생하는 충돌인 '업데이트 상실'을 예방하기 위한 목적이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;429(Too Many Rquests, 너무 많은 요청)&lt;/b&gt; : 사용자가 일정 시간 동안 너무 많은 요청을 보냈다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;431(Request Header Fields Too Large, 요청 헤더 필드가 너무 큼) &lt;/b&gt;: 요청한 헤더 필드가 너무 크기 때문에 서버는 요청을 처리하지 않는다. 요청은 크기를 줄인 다음에 다시 전송해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;s&gt;&lt;b&gt;444(응답 없음, Nginx)&lt;/b&gt;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;s&gt;&lt;b&gt;449(다시 시도, 마이크로소프트)&lt;/b&gt;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;s&gt;&lt;b&gt;450(윈도 자녀 보호에 의해 차단됨, 마이크로소프트)&lt;/b&gt;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;451(Unavailable For Legal Reasons, 법적인 이유로 이용 불가, 인터넷 초안)&lt;/b&gt; : 사용자가 요청한 것은 정부에 의해 검열된 웹 페이지와 같은 불법적인 리소스이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;s&gt;&lt;b&gt;494(요청 헤더가 너무 큼, Nginx)&lt;/b&gt;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;s&gt;&lt;b&gt;495(Cert 오류, Nginx)&lt;/b&gt;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;s&gt;&lt;b&gt;496(Cert 없음, Nginx)&lt;/b&gt;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;s&gt;&lt;b&gt;497(HTTP to HTTPS, Nginx)&lt;/b&gt;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;s&gt;&lt;b&gt;499(클라이언트가 요청을 닫음, Nginx)&lt;/b&gt;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;5xx (서버 오류)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;500(Internal Server Error, 내부 서버 오류)&lt;/b&gt; : 서버에 오류가 발생하여 요청을 수행할 수 없다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;501(Not Implemented, 구현되지 않음)&lt;/b&gt; : 서버에 요청을 수행할 수 있는 기능이 없다. 예를 들어 서버가 요청 메소드를 인식하지 못할 때 이 코드를 표시한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;502(Bad Gateway, 불량 게이트웨이)&lt;/b&gt; : 서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 잘못된 응답을 받았다. 인터넷상의 서버가 다른 서버로부터 유효하지 않은 응답을 받은 경우 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;503(Service Unabailable, 서비스를 사용할 수 없음)&lt;/b&gt; : 서버가 요청을 처리할 준비가 되지 않았다. 일반적인 원인은 유지보수를 위해 작동이 중단되거나 과부하가 걸린 서버이다. 이 응답과 함께 문제를 설명하는 사용자 친화적인 페이지가 전송되어야 한다는 점에 유의. 이 응답은 임시 조건에 사용되어야 하며, Retry-After:HTTP 헤더는 가능하면 서비스를 복구하기 전 예상 시간을 포함해야 한다. 웹마스터는 또한 이러한 일시적인 조건 응답을 캐시하지 않아야 하므로 이 응답과 함께 전송되는 캐싱 관련 헤더에 대해서도 주의해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;504(Gateway Timeout, 게이트웨이 시간초과)&lt;/b&gt; : 서버가 게이트웨이나 프록시 역할을 하고 있거나 또는 업스트림 서버에서 제때 요청을 받지 못했다. 이 오류는 대개 인터넷상의 서버 간의 네트워크 오류이거나 실제 서버의 문제이다. 컴퓨터, 장치 또는 인터넷 연결에 문제가 아닐 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;505(HTTP Version Not Supported, HTTP 버전이 지원되지 않음)&lt;/b&gt; : 서버가 요청에 사용된 HTTP 프로토콜 버전을 지원하지 않는다. 대부분의 웹 브라우저는 웹 서버가 1.x버전의 HTTP 프로토콜을 지원한다고 가정한다. 실제로 1.0이하의 매우 오래된 버전은 요즘 거의 사용하지 않는다. 특히 최신 버전의 프로토콜보다 보안 및 성능이 좋지 않기 때문이다. 따라서 웹 브라우저에서 이 오류가 표시되는 경우 웹 서버 소프트웨어에서 지원하는 HTTP 버전을 확인해봐야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;506(Variant Also Negotiates)&lt;/b&gt; : 서버에 내부 구성 오류가 있는 경우 발생한다. 요청을 위한 투명한 컨텐츠 협상이 순환 참조로 이어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;507(Insufficient Storage, 용량 부족, WebDAV)&lt;/b&gt; : 서버에 내부 구성 오류가 있는 경우 발생한다. 요청을 위한 투명한 컨텐츠 협상이 순환 참조로 이어진다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;508(Loop Detected, 루프 감지됨, WebDAV)&lt;/b&gt; : 서버가 요청을 처리하는 동안 무한 루프를 감지한 경우 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;s&gt;&lt;b&gt;509(대역폭 제한 초과, Apache bw/limited extension)&lt;/b&gt;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;510(Not Extended, 확장되지 않음)&lt;/b&gt; : 서버가 요청을 이행하려면 요청에 대한 추가 확장이 필요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;511(Network Authentication Required, 네트워크 인증 필요)&lt;/b&gt; : 511 상태코드는 클라이언트가 네트워크 엑세스를 얻기 위해 인증할 필요가 있음을 나타낸다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;520(Unknown Error, 알 수 없음)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;598(네트워크 읽기 시간초과 오류, 알 수 없음)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;599(네트워크 연결 시간초과 오류, 알 수 없음)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/잡다한지식</category>
      <category>HTTP상태코드</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/126</guid>
      <comments>https://milkoon1.tistory.com/126#entry126comment</comments>
      <pubDate>Wed, 14 Jul 2021 17:51:15 +0900</pubDate>
    </item>
    <item>
      <title>C# : Clickonce does not support the request execution level 'requireadministrator'</title>
      <link>https://milkoon1.tistory.com/125</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;592&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/brf1Cw/btq6k5vYhvX/ZiIRzWEsIfaRhQXcVFNYp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/brf1Cw/btq6k5vYhvX/ZiIRzWEsIfaRhQXcVFNYp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/brf1Cw/btq6k5vYhvX/ZiIRzWEsIfaRhQXcVFNYp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbrf1Cw%2Fbtq6k5vYhvX%2FZiIRzWEsIfaRhQXcVFNYp1%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;1306&quot; height=&quot;592&quot; data-origin-width=&quot;1306&quot; data-origin-height=&quot;592&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;595&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v31pQ/btq6oDZszn2/K9RrjKkXbEWkuGuUBf5Pd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v31pQ/btq6oDZszn2/K9RrjKkXbEWkuGuUBf5Pd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v31pQ/btq6oDZszn2/K9RrjKkXbEWkuGuUBf5Pd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv31pQ%2Fbtq6oDZszn2%2FK9RrjKkXbEWkuGuUBf5Pd0%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;1300&quot; height=&quot;595&quot; data-origin-width=&quot;1300&quot; data-origin-height=&quot;595&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;136&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rIqYI/btq6p8SeBzQ/QSHlyEMMxcivU4A3rEOUcK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rIqYI/btq6p8SeBzQ/QSHlyEMMxcivU4A3rEOUcK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rIqYI/btq6p8SeBzQ/QSHlyEMMxcivU4A3rEOUcK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrIqYI%2Fbtq6p8SeBzQ%2FQSHlyEMMxcivU4A3rEOUcK%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;521&quot; height=&quot;136&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;136&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1622618098265&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&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;asmv1:assembly manifestVersion=&quot;1.0&quot; xmlns=&quot;urn:schemas-microsoft-com:asm.v1&quot; xmlns:asmv1=&quot;urn:schemas-microsoft-com:asm.v1&quot; xmlns:asmv2=&quot;urn:schemas-microsoft-com:asm.v2&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;&amp;gt;
  &amp;lt;assemblyIdentity version=&quot;1.0.0.0&quot; name=&quot;MyApplication.app&quot; /&amp;gt;
  &amp;lt;trustInfo xmlns=&quot;urn:schemas-microsoft-com:asm.v2&quot;&amp;gt;
    &amp;lt;security&amp;gt;
      &amp;lt;requestedPrivileges xmlns=&quot;urn:schemas-microsoft-com:asm.v3&quot;&amp;gt;
        &amp;lt;!-- UAC 매니페스트 옵션
             Windows 사용자 계정 컨트롤 수준을 변경하려면 
             requestedExecutionLevel 노드를 다음 중 하나로 바꾸십시오.

        &amp;lt;requestedExecutionLevel  level=&quot;asInvoker&quot; uiAccess=&quot;false&quot; /&amp;gt;
        &amp;lt;requestedExecutionLevel  level=&quot;requireAdministrator&quot; uiAccess=&quot;false&quot; /&amp;gt;
        &amp;lt;requestedExecutionLevel  level=&quot;highestAvailable&quot; uiAccess=&quot;false&quot; /&amp;gt;

            이전 버전과의 호환성을 위해 파일 및 레지스트리 가상화를 사용하려면 
            requestedExecutionLevel 노드를 삭제하십시오.
        --&amp;gt;
        &amp;lt;requestedExecutionLevel level=&quot;requireAdministrator&quot; uiAccess=&quot;false&quot; /&amp;gt;
      &amp;lt;/requestedPrivileges&amp;gt;
      &amp;lt;applicationRequestMinimum&amp;gt;
        &amp;lt;defaultAssemblyRequest permissionSetReference=&quot;Custom&quot; /&amp;gt;
        &amp;lt;PermissionSet class=&quot;System.Security.PermissionSet&quot; version=&quot;1&quot; Unrestricted=&quot;true&quot; ID=&quot;Custom&quot; SameSite=&quot;site&quot; /&amp;gt;
      &amp;lt;/applicationRequestMinimum&amp;gt;
    &amp;lt;/security&amp;gt;
  &amp;lt;/trustInfo&amp;gt;
&amp;lt;/asmv1:assembly&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biZW4n/btq6qSuDWsh/XpK8d1z9lGDFUSKRjyN2O1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biZW4n/btq6qSuDWsh/XpK8d1z9lGDFUSKRjyN2O1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biZW4n/btq6qSuDWsh/XpK8d1z9lGDFUSKRjyN2O1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiZW4n%2Fbtq6qSuDWsh%2FXpK8d1z9lGDFUSKRjyN2O1%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;1200&quot; height=&quot;199&quot; data-origin-width=&quot;1200&quot; data-origin-height=&quot;199&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;</description>
      <category>언어/C#</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/125</guid>
      <comments>https://milkoon1.tistory.com/125#entry125comment</comments>
      <pubDate>Wed, 2 Jun 2021 17:58:33 +0900</pubDate>
    </item>
    <item>
      <title>C# : 이 행은 이미 다른 테이블에 속해있습니다. System.ArgumentException 오류</title>
      <link>https://milkoon1.tistory.com/124</link>
      <description>&lt;pre id=&quot;code_1619408610769&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DataTable dt = flexGrid1.DataTable.Copy();
COPY_DT = dt.Clone();
// 이미 갖고 있는 DataTable에 특정 index의 Row만 add하고 싶은 경우
COPY_DT.Rows.Add(dt.Rows[index]);
COPY_DT.AcceptChanges();&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;172&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biqRcJ/btq3r04gbqB/vH5cRWhPG1cInLxFH2uNlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biqRcJ/btq3r04gbqB/vH5cRWhPG1cInLxFH2uNlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biqRcJ/btq3r04gbqB/vH5cRWhPG1cInLxFH2uNlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiqRcJ%2Fbtq3r04gbqB%2FvH5cRWhPG1cInLxFH2uNlK%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;454&quot; height=&quot;172&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;172&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;예시 소스와 같이 dt.Rows[index]를 해버리면, [이 행은 이미 다른 테이블에 속해 있습니다] 라는 System.ArgumentException 오류가 발생하게 됩니다. 이런 경우에는 dt.Rows.Add에 바로 dt.Rows[index]를 넣지 말고 다른 방법으로 add를 해주어야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1619408886880&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;1. COPY_DT.ImportRow(dt.Rows[index]); 
2. COPY_DT.Rows.Add(dt.Rows[index].ItemArray); &lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어/C#</category>
      <category>ArgumentException</category>
      <category>다른테이블에속해있습니다</category>
      <category>이행은이미다른</category>
      <category>이행은이미다른테이블에속해있습니다</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/124</guid>
      <comments>https://milkoon1.tistory.com/124#entry124comment</comments>
      <pubDate>Mon, 26 Apr 2021 12:46:43 +0900</pubDate>
    </item>
    <item>
      <title>C# : Convert 금액 정수 형식의 특성</title>
      <link>https://milkoon1.tistory.com/123</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;440&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bYdTDx/btq2HH4LOXJ/Mh9MuxftCgkUIMbBObe1x1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bYdTDx/btq2HH4LOXJ/Mh9MuxftCgkUIMbBObe1x1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bYdTDx/btq2HH4LOXJ/Mh9MuxftCgkUIMbBObe1x1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbYdTDx%2Fbtq2HH4LOXJ%2FMh9MuxftCgkUIMbBObe1x1%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;1002&quot; height=&quot;440&quot; data-origin-width=&quot;1002&quot; data-origin-height=&quot;440&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;sbyte, byte경우 기본값은 short, ushort, int, uint, long, ulong, 0입니다. char 기본값은 '\x0000', float 기본값은 0.0f, double 기본값은 0.0d, decimal 기본값 0.0m 입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvCV7R/btq2GVWInkO/06R3CeHoqaKkNuYL05D3J0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvCV7R/btq2GVWInkO/06R3CeHoqaKkNuYL05D3J0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvCV7R/btq2GVWInkO/06R3CeHoqaKkNuYL05D3J0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvCV7R%2Fbtq2GVWInkO%2F06R3CeHoqaKkNuYL05D3J0%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;980&quot; height=&quot;618&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;618&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;461&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9mTSV/btq2C5ssOQd/0gecOeKmipNEZy7V9rsgak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9mTSV/btq2C5ssOQd/0gecOeKmipNEZy7V9rsgak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9mTSV/btq2C5ssOQd/0gecOeKmipNEZy7V9rsgak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9mTSV%2Fbtq2C5ssOQd%2F0gecOeKmipNEZy7V9rsgak%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;975&quot; height=&quot;461&quot; data-origin-width=&quot;975&quot; data-origin-height=&quot;461&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;figure id=&quot;og_1618466666013&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Types - C# language specification&quot; data-og-description=&quot;형식Types 이 문서의 내용 --&amp;gt; C # 언어의 형식은 value types _ 및 _참조 형식*_ 이라는 두 가지 주요 범주로 구분 됩니다.The types of the C# language are divided into two main categories: value types _ and _reference types*. &quot; data-og-host=&quot;docs.microsoft.com&quot; data-og-source-url=&quot;https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/language-specification/types#the-decimal-type&quot; data-og-url=&quot;https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/language-specification/types&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/SZDeP/hyJTzXj0br/d19yM8AoRUGUlPAEUHujM1/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/language-specification/types#the-decimal-type&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.microsoft.com/ko-kr/dotnet/csharp/language-reference/language-specification/types#the-decimal-type&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/SZDeP/hyJTzXj0br/d19yM8AoRUGUlPAEUHujM1/img.png?width=420&amp;amp;height=420&amp;amp;face=0_0_420_420');&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;Types - C# language specification&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;형식Types 이 문서의 내용 --&amp;gt; C # 언어의 형식은 value types _ 및 _참조 형식*_ 이라는 두 가지 주요 범주로 구분 됩니다.The types of the C# language are divided into two main categories: value types _ and _reference types*.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/잡다한지식</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/123</guid>
      <comments>https://milkoon1.tistory.com/123#entry123comment</comments>
      <pubDate>Thu, 15 Apr 2021 15:07:52 +0900</pubDate>
    </item>
    <item>
      <title>CMD : Shutdown 명령어 정리</title>
      <link>https://milkoon1.tistory.com/122</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;shutdown 명령어&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;shutdown -s : 시스템 종료&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;shutdown -r : 시스템 리부팅&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;shutdown -s -f : 실행 중인 응용프로그램을 강제로 종료하고 시스템 종료&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;shutdown -s -t 0 : 시스템 즉시 종료&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;shutdown -r -t 0 : 즉시 리부팅&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;shutdown -r -t 60 : 1분 후에 시스템 리부팅&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;shutdown -s -t 3600 : 1시간 후에 시스템 종료&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;shutdown -r -f -t 0 : 실행 중인 응용프로그램을 강제로 종료하고 시스템 리부팅&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;shutdown&amp;nbsp;-a&amp;nbsp;:&amp;nbsp;shutdown&amp;nbsp;명령&amp;nbsp;취소&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;206&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Prqyt/btq2AGFCI0Z/xxQ7VqXGCXBhpKKHcG9HWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Prqyt/btq2AGFCI0Z/xxQ7VqXGCXBhpKKHcG9HWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Prqyt/btq2AGFCI0Z/xxQ7VqXGCXBhpKKHcG9HWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPrqyt%2Fbtq2AGFCI0Z%2FxxQ7VqXGCXBhpKKHcG9HWk%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;982&quot; height=&quot;206&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;206&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;391&quot; data-origin-height=&quot;192&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dprLO2/btq2CJhxpQV/CQGsfo8YLKB6zjUQ7BJVB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dprLO2/btq2CJhxpQV/CQGsfo8YLKB6zjUQ7BJVB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dprLO2/btq2CJhxpQV/CQGsfo8YLKB6zjUQ7BJVB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdprLO2%2Fbtq2CJhxpQV%2FCQGsfo8YLKB6zjUQ7BJVB0%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;391&quot; height=&quot;192&quot; data-origin-width=&quot;391&quot; data-origin-height=&quot;192&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;cmd창에서 shutdown -r -t 3600을 입력했을 때 60분 후 windows가 종료됩니다.라는 알림이 정상적으로 뜨는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/CMD</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/122</guid>
      <comments>https://milkoon1.tistory.com/122#entry122comment</comments>
      <pubDate>Wed, 14 Apr 2021 15:59:01 +0900</pubDate>
    </item>
    <item>
      <title>C# : 실행프로그램(exe)만 있어도 BouncyCastle.CryptoExt.dll 참조 가능하도록 설정 (dll을 포함한 단일 exe배포)</title>
      <link>https://milkoon1.tistory.com/121</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ouvNn/btq1sATu35L/XHBIkAcQGVhYiYgczynq60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ouvNn/btq1sATu35L/XHBIkAcQGVhYiYgczynq60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ouvNn/btq1sATu35L/XHBIkAcQGVhYiYgczynq60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FouvNn%2Fbtq1sATu35L%2FXHBIkAcQGVhYiYgczynq60%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;374&quot; height=&quot;399&quot; data-origin-width=&quot;374&quot; data-origin-height=&quot;399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이번 글에서는 실행프로그램(&lt;span style=&quot;color: #333333;&quot;&gt;exe)만 있어도 dll참조하여 사용할 수 있는 dll포함 단일 exe배포방법에 대해서 공부하도록 하겠습니다. &lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;저 같은 경우 BouncyCastle.CryptoExt.dll때문에 이번 공부를 하게 되었는데요. 다양한 방법을 정리하여 올려놓았으니 원하시는 방법으로 사용하시면 될 듯 싶습니다!&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. Assembly를 이용한 dll참조 단일 실행프로그램(exe)만들기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;사용하고자하는 dll(예시 BouncyCastle.CryptoExt.dll)을 우선 프로젝트에 참조 추가합니다. 그 다음 프로그램 진입점(Program.cs)에 코드를 아래와 같이 변경합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1617079746182&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[STAThread]
static void Main()
{
    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(ResolveAssembly);

    Application.EnableVisualStyles();
    //Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new MainForm());
}

// .NET 4.0 이상
static Assembly ResolveAssembly(object sender, ResolveEventArgs args) {
  Assembly thisAssembly = Assembly.GetExecutingAssembly();
  var name = args.Name.Substring(0, args.Name.IndexOf(',')) + &quot;.dll&quot;;

  var resources = thisAssembly.GetManifestResourceNames().Where(s =&amp;gt; s.EndsWith(name));
  if (resources.Count() &amp;gt; 0) {
      string resourceName = resources.First();
      using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName)) {
          if (stream != null) {
              byte[] assembly = new byte[stream.Length];
              stream.Read(assembly, 0, assembly.Length);
              Console.WriteLine(&quot;Dll file load : &quot; + resourceName);
              return Assembly.Load(assembly);
          }
      }
  }
  return null;
}

// LINQ가 지원되지 않는 .NET 버전
static Assembly ResolveAssembly(object sender, ResolveEventArgs args)
{
    Assembly thisAssembly = Assembly.GetExecutingAssembly();
    string resourceName = null;
    string fileName = args.Name.Substring(0, args.Name.IndexOf(',')) + &quot;.dll&quot;;
    foreach (string name in thisAssembly.GetManifestResourceNames())
    {
        if (name.EndsWith(fileName))
        {
            resourceName = name;
        }
    }

    
    if (resourceName != null)
    {
        using (Stream stream = thisAssembly.GetManifestResourceStream(resourceName))
        {
            if (stream != null)
            {
                byte[] assembly = new byte[stream.Length];
                stream.Read(assembly, 0, assembly.Length);
                Console.WriteLine(&quot;Dll file load : &quot; + resourceName);
                return Assembly.Load(assembly);
            }
        }
    }
    return null;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;단, 위의 소스는 exe파일과 Application이 호출하는 dll파일이 동일한 경로에 위치해 있어야 한다는 기준입니다. 만약 exe파일 경로가 아닌 다른 경로의 dll파일을 사용하고 싶은 경우 Assembly의 경로를 다르게 지정해주시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1617081747424&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Assembly thisAssembly = Assembly.GetExecutingAssembly();
string AppPath = @&quot;특정 경로&quot;;
if (System.IO.File.Exists(String.Format(&quot;{0}{1}&quot;, AppPath,  &quot;BouncyCastle.CryptoExt.dll&quot;)))
{
    thisAssembly = Assembly.LoadFile(String.Format(&quot;{0}{1}&quot;, AppPath, &quot;BouncyCastle.CryptoExt.dll&quot;));
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. EnterpriseServices Internal Publish에서 GacInstall을 이용하여 특정경로의 dll 참조걸기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1617079992290&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[STAThread]
static void Main()
{
    string AppPath = @&quot;&quot;;
    System.EnterpriseServices.Internal.Publish dllImport = new System.EnterpriseServices.Internal.Publish();
    dllImport.GacInstall(String.Format(&quot;{0}{1}&quot;, AppPath, &quot;BouncyCastle.CryptoExt.dll&quot;));
            
    Application.Run(new MainForm());
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;단, 위의 방법을 사용하기 위해서는 &lt;b&gt;특정경로에 해당 dll이 필수&lt;/b&gt;로 있어야 하며, System.EnterpriseServices를 참조해야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;* GACInstall : 전역 어셈블리 캐시에 어셈블리를 설치하는 방식 GacInstall(string AsssemblyPath) : 해당 메소드를 사용하시려면 실행프로그램(exe)이 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;관리자 권한으로 실행&lt;/b&gt;&lt;/span&gt;되어야 합니다. 권한이 없는경우 SecurityException 오류가 발생할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot; data-ttu-id=&quot;08e8e-159&quot;&gt;* SecurityException : 호출 체인에 있는 호출자에게 비관리 코드에 액세스할 수 있는 권한이 없는 경우&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어/C#</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/121</guid>
      <comments>https://milkoon1.tistory.com/121#entry121comment</comments>
      <pubDate>Tue, 30 Mar 2021 14:26:06 +0900</pubDate>
    </item>
    <item>
      <title>C# : HttpWebRequest sync 동기식, async 비동기식</title>
      <link>https://milkoon1.tistory.com/120</link>
      <description>&lt;pre id=&quot;code_1616990892939&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//------------------------------------------------------------------
// http - sync 동기식
//------------------------------------------------------------------
HttpWebRequest httpReq = (HttpWebRequest)HttpWebRequest.Create(TargetURi);
httpReq.Method = &quot;POST&quot;;
httpReq.ContentType = &quot;application/json;&quot;;
using (StreamWriter streamWriter = new StreamWriter(httpReq.GetRequestStream()))
{
    streamWriter.Write(RequestJson);
    streamWriter.Flush();
    streamWriter.Close();
}

httpRes = (HttpWebResponse)httpReq.GetResponse();
Stream RESULT_STREAM = httpRes.GetResponseStream();&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1616991068134&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//------------------------------------------------------------------
// http - async 비동기식
//------------------------------------------------------------------
httpReq = (HttpWebRequest)HttpWebRequest.Create(TargetURi);
httpReq.Method = &quot;POST&quot;;
httpReq.ContentType = &quot;application/json;&quot;;

// 비동기식 방법을 사용하게 될 경우 두 번이상의 호출 프로세스를 가질 수 있기 때문에
// 런타임 오류 발생 가능성이 있다. 한 UITread에서 하나의 HttpWebRequest를 허용하기 ㄸ때문에
// 그러므로, request가 종료되기 전에 새로운 request가 발생하지 않도록 로직 주의
httpReq.BeginGetRequestStream(new AsyncCallback((IAsyncResult reqAsyncResult) =&amp;gt;
{
    try
    {
        HttpWebRequest request = (HttpWebRequest)reqAsyncResult.AsyncState;

        // End the operation
        Stream postStream = request.EndGetRequestStream(reqAsyncResult);

        // Convert the string into a byte array.
        byte[] byteArray = Encoding.UTF8.GetBytes(RequestJson);

        // Write to the request stream.
        postStream.Write(byteArray, 0, byteArray.Length);
        postStream.Close();

    }
    catch (Exception e)
    {
        Trace.WriteLine(e.ToString());
    }

}), httpReq);


httpReq.BeginGetResponse(new AsyncCallback((IAsyncResult resAsyncResult) =&amp;gt;
{
    try
    {
        using (HttpWebResponse response = (HttpWebResponse)httpReq.EndGetResponse(resAsyncResult))
        {
            Stream RESULT_STREAM = response.GetResponseStream();
            response.Close();
        }
    }
    catch (Exception e)
    {
        Trace.WriteLine(e.ToString());
    }

}), httpReq);
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어/C#</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/120</guid>
      <comments>https://milkoon1.tistory.com/120#entry120comment</comments>
      <pubDate>Mon, 29 Mar 2021 13:09:23 +0900</pubDate>
    </item>
    <item>
      <title>C# : MDIControl TabControl안에 자식 프레임 MDIForm 넣기</title>
      <link>https://milkoon1.tistory.com/119</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이번 글에서는 메인프레임 안에 여러 개의 자식프레임을 가질 수 있게 MDI형태를 만들어 보도록 하겠습니다. 단, MDI는 TabControl로 구성할 것이며, 자식프레임은 TabPage별로 개별화면을 생성하도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;* MDI(Multiple Document Interface)&lt;/b&gt; &lt;/span&gt;: MDI는 메인프레임에 여러 개의 자식프레임(도큐먼트)를 가지고 있는 형태를 말합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lguHn/btq0YimH03V/Xc61OzWmZNwKCfjjkz6dqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lguHn/btq0YimH03V/Xc61OzWmZNwKCfjjkz6dqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lguHn/btq0YimH03V/Xc61OzWmZNwKCfjjkz6dqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlguHn%2Fbtq0YimH03V%2FXc61OzWmZNwKCfjjkz6dqk%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;1273&quot; height=&quot;434&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;1. 새로운 프로젝트 생성&lt;/b&gt; : TestProject라는 이름의 프로젝트를 생성하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;296&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eVKBIn/btq0XOMTiyh/ao5xYRZkbRQGyiGgLQj2HK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eVKBIn/btq0XOMTiyh/ao5xYRZkbRQGyiGgLQj2HK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eVKBIn/btq0XOMTiyh/ao5xYRZkbRQGyiGgLQj2HK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeVKBIn%2Fbtq0XOMTiyh%2Fao5xYRZkbRQGyiGgLQj2HK%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;1272&quot; height=&quot;296&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;296&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;2. 메인폼 디자인 변경 및 메뉴추가&lt;/b&gt; : 초기 화면크기로는 화면을 비교하기에 너무 작은 것 같아 화면크기를 조금 키웠습니다. 그리고 MDIForm들이 잘 들어갔는지 비교하기 위해 메뉴바(MneuStrip)도 추가로 넣었습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1259&quot; data-origin-height=&quot;548&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buTDj9/btq0XO7iz9l/dqvbacG32Krd0PACAEcO41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buTDj9/btq0XO7iz9l/dqvbacG32Krd0PACAEcO41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buTDj9/btq0XO7iz9l/dqvbacG32Krd0PACAEcO41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuTDj9%2Fbtq0XO7iz9l%2FdqvbacG32Krd0PACAEcO41%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;1259&quot; height=&quot;548&quot; data-origin-width=&quot;1259&quot; data-origin-height=&quot;548&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;533&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPxrEk/btq0Y4u4WKC/isjd6kk2oCFeKLSlFwUuq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPxrEk/btq0Y4u4WKC/isjd6kk2oCFeKLSlFwUuq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPxrEk/btq0Y4u4WKC/isjd6kk2oCFeKLSlFwUuq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPxrEk%2Fbtq0Y4u4WKC%2Fisjd6kk2oCFeKLSlFwUuq0%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;1248&quot; height=&quot;533&quot; data-origin-width=&quot;1248&quot; data-origin-height=&quot;533&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;3. MDIControl, MDIForm 생성&lt;/b&gt; : TabControl로 사용할 MDIControl와 TabPage로 사용할 MDIForm을 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1616659625572&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TestProject
{
    public partial class MDIControl : TabControl
    {
        public MDIControl()
        {

        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1616659635523&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TestProject
{
    public partial class MDIForm : TabPage
    {
        public MDIForm()
        {

        }

    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;class&amp;nbsp;파생클래스이름&amp;nbsp;:&amp;nbsp;접근제어지시자&amp;nbsp;기초클래스이름[,&amp;nbsp;접근제어지시자&amp;nbsp;기초클래스이름,&amp;nbsp;...]{}&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;MDIControl은 앞서 말씀드린 것과 같이 TabControl, MDIForm은 TabPage의 파생클래스가 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dZPQ0e/btq03vrWgE0/oNc4kkOu20FA5y46YBQUZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dZPQ0e/btq03vrWgE0/oNc4kkOu20FA5y46YBQUZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dZPQ0e/btq03vrWgE0/oNc4kkOu20FA5y46YBQUZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdZPQ0e%2Fbtq03vrWgE0%2FoNc4kkOu20FA5y46YBQUZk%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;1279&quot; height=&quot;512&quot; data-origin-width=&quot;1279&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1459&quot; data-origin-height=&quot;633&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/emt9ZI/btq04MNRtVO/MzPyPlsdP9HCPCKtk8Jp61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/emt9ZI/btq04MNRtVO/MzPyPlsdP9HCPCKtk8Jp61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/emt9ZI/btq04MNRtVO/MzPyPlsdP9HCPCKtk8Jp61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Femt9ZI%2Fbtq04MNRtVO%2FMzPyPlsdP9HCPCKtk8Jp61%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;1459&quot; height=&quot;633&quot; data-origin-width=&quot;1459&quot; data-origin-height=&quot;633&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;4&lt;/b&gt;&lt;b&gt;. MainForm에 MDIControl 추가&lt;/b&gt; : 메인폼 안에 자식폼들을 띄우려면 MDIControl이 밑바탕에 깔려져있어야 합니다. MainForm 디자인에 들어가서 TestProject 구성요소에 있는 MDIControl을 추가해주세요. 추가하시면 MDIControl는 TabControl을 파생하는 클래스이기에 화면과 같이 TabControl이 생기는 것을 확인할 수 있습니다. TabPage1, TabPage2는 TabControl을 추가하면 default로 나오는 페이지이기에 없애도록 하겠습니다. TabPage 제거는 디자인의 TabPages의 (컬렉션)에서 제거하실 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;437&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kSvMy/btq03GGPGn2/Ramcte8hbbW22YkHbO4oz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kSvMy/btq03GGPGn2/Ramcte8hbbW22YkHbO4oz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kSvMy/btq03GGPGn2/Ramcte8hbbW22YkHbO4oz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkSvMy%2Fbtq03GGPGn2%2FRamcte8hbbW22YkHbO4oz0%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;1273&quot; height=&quot;437&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;437&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1487&quot; data-origin-height=&quot;669&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blRlpA/btq04LOWJK8/EUfpPnJXmrrF0H6IS0BsRk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blRlpA/btq04LOWJK8/EUfpPnJXmrrF0H6IS0BsRk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blRlpA/btq04LOWJK8/EUfpPnJXmrrF0H6IS0BsRk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblRlpA%2Fbtq04LOWJK8%2FEUfpPnJXmrrF0H6IS0BsRk%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;1487&quot; height=&quot;669&quot; data-origin-width=&quot;1487&quot; data-origin-height=&quot;669&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1282&quot; data-origin-height=&quot;652&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTMIgR/btq03Gm3YQV/lzb2gzAsNa67bCiz50K6o0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTMIgR/btq03Gm3YQV/lzb2gzAsNa67bCiz50K6o0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTMIgR/btq03Gm3YQV/lzb2gzAsNa67bCiz50K6o0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTMIgR%2Fbtq03Gm3YQV%2Flzb2gzAsNa67bCiz50K6o0%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;1282&quot; height=&quot;652&quot; data-origin-width=&quot;1282&quot; data-origin-height=&quot;652&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;5. 자식폼(SiteForm, DownLoadForm) 생성&lt;/b&gt; : 앞서 만들었던 &lt;span style=&quot;color: #333333;&quot;&gt;MneuStrip의 &lt;/span&gt;메뉴를 클릭하면 해당 메뉴의 화면을 메인폼의 TabPage에 뿌려주도록 하겠습니다. 우선 자식폼으로 사용할 Form들을 생성합니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1616662034285&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 자식폼이 TabPage와 어울릴 수 있도록 디자인 수정
1. FormBorderStyle을 None으로 설정
2. MaximizeBox, MinmizeBox False로 설정
3. ShowIcon, ShowInTaskbar False로 설정&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;저는 자식폼으로 DownLoadForm과 SiteForm을 생성해보았습니다. 그리고 각각의 자식폼을 구분하기 위해 Label을 하나씩 붙였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1457&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDDzm3/btq0YiOsExb/e0QwYdFz1muxVzFm4RKxJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDDzm3/btq0YiOsExb/e0QwYdFz1muxVzFm4RKxJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDDzm3/btq0YiOsExb/e0QwYdFz1muxVzFm4RKxJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDDzm3%2Fbtq0YiOsExb%2Fe0QwYdFz1muxVzFm4RKxJ0%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;1457&quot; height=&quot;598&quot; data-origin-width=&quot;1457&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;6. MDIControl(TabControl)의 MDIForm(TabPage)에 자식폼(DownLoadForm, SiteForm) 추가&lt;/b&gt; : MDIControl CS소스에서 MDIForm 생성자를 생성 후 그 안에 자식폼들을 Add시키는 메소드를 만듭니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1616716348997&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TestProject
{
    public partial class MDIControl : TabControl
    {
        public MDIControl()
        {

        }

        public int Add(Form sb)
        {
            if (sb == null)
                return -1;

            sb.TopLevel = false;

            MDIForm page = new MDIForm();
            page.Text = sb.Text + &quot;        &quot;;
            page.Controls.Clear();
            page.Controls.Add(sb);
            base.TabPages.Add(page);
            sb.Show();

            base.SelectedTab = page;

            return 0;
        }

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;645&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRtsUy/btq04L9gXYs/kZgb7FEKe4UXz4eglImer1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRtsUy/btq04L9gXYs/kZgb7FEKe4UXz4eglImer1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRtsUy/btq04L9gXYs/kZgb7FEKe4UXz4eglImer1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRtsUy%2Fbtq04L9gXYs%2FkZgb7FEKe4UXz4eglImer1%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;1460&quot; height=&quot;645&quot; data-origin-width=&quot;1460&quot; data-origin-height=&quot;645&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;7. MainForm CS소스에 자식폼들 Add&lt;/b&gt; : 이제 메인폼 CS소스에 들어가서 MenuItem Click 이벤트 안에 각각 Add할 자식폼들을 연결시킵니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1616716481485&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace TestProject
{
    public partial class MainForm : Form
    {

        SiteForm sf = new SiteForm();
        DownLoadForm df = new DownLoadForm();

        public MainForm()
        {
            InitializeComponent();
        }

        private void MainForm_Load(object sender, EventArgs e)
        {

        }

        private void 사이트ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // SiteForm을 호출할 예정

            mdiControl1.Add(sf);
        }

        private void 다운로드목록ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            // DownLoadForm을 호출할 예정
            mdiControl1.Add(df);
        }

    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uj6Q5/btq039idXmv/nzFdwYIPLXRtYQkQetFQdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uj6Q5/btq039idXmv/nzFdwYIPLXRtYQkQetFQdk/img.png&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;595&quot; style=&quot;width: 49.3766%; margin-right: 10px;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uj6Q5/btq039idXmv/nzFdwYIPLXRtYQkQetFQdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuj6Q5%2Fbtq039idXmv%2FnzFdwYIPLXRtYQkQetFQdk%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;789&quot; height=&quot;595&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WXYKs/btq0iAOBaHI/073VRm9LkYEPFOGSILP1qK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WXYKs/btq0iAOBaHI/073VRm9LkYEPFOGSILP1qK/img.png&quot; data-origin-width=&quot;793&quot; data-origin-height=&quot;597&quot; style=&quot;width: 49.4606%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WXYKs/btq0iAOBaHI/073VRm9LkYEPFOGSILP1qK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWXYKs%2Fbtq0iAOBaHI%2F073VRm9LkYEPFOGSILP1qK%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;793&quot; height=&quot;597&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;그럼 정상적으로 자식폼들이 TabControl에 추가되는 것을 확인할 수 있습니다!&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;이번 글을 TabControl, TabPage 파생클래스 MDIControl, MDIForm을 이용해서 Tab별로 자식폼이 생기는 것을 공부해보았습니다. &lt;b&gt;단, 해당 글은 MDI의 기초적인 부분만 다룬 것이라 자식폼에 대한 싱글톤이나 다른 추가적인 기능에 대해서는 다루지 않았으니 참고하여 주시기바랍니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어/C#</category>
      <category>howtocreateMDI</category>
      <category>MDI</category>
      <category>MDICotnrol</category>
      <category>MDIForm</category>
      <category>MDI만드는방법</category>
      <category>MDI생성방법</category>
      <category>MDI자식폼</category>
      <category>MDI자식프레임</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/119</guid>
      <comments>https://milkoon1.tistory.com/119#entry119comment</comments>
      <pubDate>Fri, 26 Mar 2021 08:56:55 +0900</pubDate>
    </item>
    <item>
      <title>C# : DataGridView DataSource를 DB에서 가져온 DataTable 정보로 세팅</title>
      <link>https://milkoon1.tistory.com/118</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/beWUHa/btqZPGooUtM/7HLiXvSWXKpitPxO1sSwU1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/beWUHa/btqZPGooUtM/7HLiXvSWXKpitPxO1sSwU1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/beWUHa/btqZPGooUtM/7HLiXvSWXKpitPxO1sSwU1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbeWUHa%2FbtqZPGooUtM%2F7HLiXvSWXKpitPxO1sSwU1%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;613&quot; height=&quot;409&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;DB에서 가져온 데이터를 DataTable에 담아서 DataGridView에 DataSource를 했는데 내가 원하는 방향대로 매핑되는 것이 아니라 위의 사진과 같이 나온다면 DataGridView 옵션 중 DataPropertyName를 확인해주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;409&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8mMgD/btqZMoBMNdh/yczao2tS3Jd3MgNs5BRRbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8mMgD/btqZMoBMNdh/yczao2tS3Jd3MgNs5BRRbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8mMgD/btqZMoBMNdh/yczao2tS3Jd3MgNs5BRRbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8mMgD%2FbtqZMoBMNdh%2Fyczao2tS3Jd3MgNs5BRRbK%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;313&quot; height=&quot;409&quot; data-origin-width=&quot;313&quot; data-origin-height=&quot;409&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1615433794223&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dgvLogList.Columns.Add(&quot;log_date&quot;, &quot;로그일자&quot;);
dgvLogList.Columns.Add(&quot;log_time&quot;, &quot;로그시간&quot;);
dgvLogList.Columns.Add(&quot;log_time_msec&quot;, &quot;로밀리세컨드&quot;);
dgvLogList.Columns[0].DataPropertyName = &quot;log_date&quot;;
dgvLogList.Columns[1].DataPropertyName = &quot;log_time&quot;;
dgvLogList.Columns[2].DataPropertyName = &quot;log_time_msec&quot;;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>언어/C#</category>
      <category>DataGridView</category>
      <category>DataGridviewDatasource</category>
      <category>Datasource</category>
      <category>gridviewDatasource</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/118</guid>
      <comments>https://milkoon1.tistory.com/118#entry118comment</comments>
      <pubDate>Thu, 11 Mar 2021 12:35:26 +0900</pubDate>
    </item>
    <item>
      <title>C# : 체크콤보박스 창사이즈 늘리기 CheckedComboBoxEdit  Popup Resize</title>
      <link>https://milkoon1.tistory.com/117</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;867&quot; data-origin-height=&quot;218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c49uGY/btqY2tQWaKi/GkC69ilWmeekkeGrXYgXCk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c49uGY/btqY2tQWaKi/GkC69ilWmeekkeGrXYgXCk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c49uGY/btqY2tQWaKi/GkC69ilWmeekkeGrXYgXCk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc49uGY%2FbtqY2tQWaKi%2FGkC69ilWmeekkeGrXYgXCk%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;867&quot; height=&quot;218&quot; data-origin-width=&quot;867&quot; data-origin-height=&quot;218&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 내가 만든 CheckComboBox의 창이 작아 데이터가 짤려서 보인다면 우리는 &lt;b&gt;Properties의 PopupFormSize 옵션&lt;/b&gt;을 통해 사이즈를 조절할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;355&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbVkI1/btqY2sxIw8j/JBtQhYyeKeg0ZkPIjyL4VK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbVkI1/btqY2sxIw8j/JBtQhYyeKeg0ZkPIjyL4VK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbVkI1/btqY2sxIw8j/JBtQhYyeKeg0ZkPIjyL4VK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbVkI1%2FbtqY2sxIw8j%2FJBtQhYyeKeg0ZkPIjyL4VK%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;457&quot; height=&quot;355&quot; data-origin-width=&quot;457&quot; data-origin-height=&quot;355&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;디자인으로 들어가서 CheckComboBox를 클릭 후 [속성]-[Properties]-[PopupFormSize]를 조정해주세요. Width는 가로 사이즈의 너비, Height는 세로 사이즈의 높이를 뜻합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EK6xH/btqY7ouJwZS/9lrJ5Ggxf5BXQ1eOun9Og0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EK6xH/btqY7ouJwZS/9lrJ5Ggxf5BXQ1eOun9Og0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EK6xH/btqY7ouJwZS/9lrJ5Ggxf5BXQ1eOun9Og0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEK6xH%2FbtqY7ouJwZS%2F9lrJ5Ggxf5BXQ1eOun9Og0%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;1071&quot; height=&quot;280&quot; data-origin-width=&quot;1071&quot; data-origin-height=&quot;280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;CheckComboBox는 컬럼의 수가 높이를 초과하게 되면 자동으로 스크롤이 생기기에 높이는 따로 지정하지 않았습니다. Width만 제가 원하는 사이즈로 조절하니 위의 사진과 같이 모든 글이 다 보이는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어/C#</category>
      <category>checkcombobox</category>
      <category>checkcomboboxPopupsize</category>
      <category>checkcombobox창사이즈</category>
      <category>체크콤보박스창조절</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/117</guid>
      <comments>https://milkoon1.tistory.com/117#entry117comment</comments>
      <pubDate>Wed, 3 Mar 2021 12:42:20 +0900</pubDate>
    </item>
    <item>
      <title>C# : LookUpEdit SelectIndex=0 첫 번째 Row 선택하기</title>
      <link>https://milkoon1.tistory.com/116</link>
      <description>&lt;pre id=&quot;code_1614738444148&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private void set콤보박스()
{
    DataTable dt조회데이터 = null;

    // 콤보박스는 key, value 형식으로 column을 생성하였습니다.
    DataTable dt콤보박스 = new DataTable();
    DataHelper.DataTable_AddColumn(dt콤보박스, &quot;key&quot;, &quot;&quot;);
    DataHelper.DataTable_AddColumn(dt콤보박스, &quot;value&quot;, &quot;&quot;);

    DataRow dr = dt콤보박스.NewRow();
    dr[&quot;value&quot;] = string.Empty;
    dr[&quot;key&quot;] = &quot;- 전체 -&quot;;
    dt콤보박스.Rows.Add(dr);

    // 만약 DB상에서 가져온 조회 데이터를 넣고 싶은 경우
    if (dt조회데이터 == null)
    {
        return;
    }

    for (int i = 0; i &amp;lt; dt조회데이터.Rows.Count; i++)
    {
        dr = dt콤보박스.NewRow();
        dr[&quot;value&quot;] = dt조회데이터.Rows[i][&quot;value&quot;];
        dr[&quot;key&quot;] = dt조회데이터.Rows[i][&quot;key&quot;];
        dt콤보박스.Rows.Add(dr);
    }

    cbo콤보박스.Properties.DataSource = dt콤보박스;
    cbo콤보박스.Properties.ValueMember = &quot;value&quot;;
    cbo콤보박스.Properties.DisplayMember = &quot;key&quot;;
    cbo콤보박스.Properties.DropDownRows = dt콤보박스.Rows.Count + 1; // 해당 코드를 안넣으면 스크롤 생김
    cbo콤보박스.ItemIndex = 0; // 제일 첫번째 row로 보여줌
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;LookUpEdit에는 SelectIndex 옵션이 아닌&lt;b&gt; ItemIndex&lt;/b&gt;를 사용해야 합니다. 또한 해당 메소드는 생성자 안에 넣지 않고 &lt;b&gt;Form_Load()&lt;/b&gt;와 같은 폼 로드 메소드에 넣어야 정상적으로 selectIndex = 0이 되는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어/C#</category>
      <category>lookupedit</category>
      <category>lookupeditSelectindex</category>
      <category>lookupeditSelectRow</category>
      <category>lookupedit첫번째선택</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/116</guid>
      <comments>https://milkoon1.tistory.com/116#entry116comment</comments>
      <pubDate>Wed, 3 Mar 2021 11:27:22 +0900</pubDate>
    </item>
    <item>
      <title>C# : DataGridView Cell 밑줄 넣기 Underline</title>
      <link>https://milkoon1.tistory.com/115</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;199&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfemKT/btqYJ9RxC6j/mIKvPXA1ibUcz9XEupTKx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfemKT/btqYJ9RxC6j/mIKvPXA1ibUcz9XEupTKx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfemKT/btqYJ9RxC6j/mIKvPXA1ibUcz9XEupTKx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfemKT%2FbtqYJ9RxC6j%2FmIKvPXA1ibUcz9XEupTKx0%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;1074&quot; height=&quot;199&quot; data-origin-width=&quot;1074&quot; data-origin-height=&quot;199&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;만약 DataGridView에서 특정 Cell들만 밑줄(underline)을 넣고 싶은 경우 참고하시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1614322446861&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 내가원하는 Columns의 index값과 기본 font의 값이 필요
DataGridView.Columns[i].DefaultCellStyle.Font = new Font(DataGridView.Columns[i].DefaultCellStyle.Font, FontStyle.Underline);

// 만약 특정 셀의 Font가 없는 경우는 아래의 코드 참고
DataGridView.Columns[i].DefaultCellStyle.Font = new Font(DataGridView.DefaultCellStyle.Font, FontStyle.Underline);

// 실제 예시
dgvODBCList.Columns[1].DefaultCellStyle.Font = new Font(dgvODBCList.DefaultCellStyle.Font, FontStyle.Underline);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>언어/C#</category>
      <category>cellunderline</category>
      <category>howtoinsertunderlinedatagridview</category>
      <category>underline</category>
      <category>밑줄넣기datagridview</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/115</guid>
      <comments>https://milkoon1.tistory.com/115#entry115comment</comments>
      <pubDate>Fri, 26 Feb 2021 15:53:23 +0900</pubDate>
    </item>
    <item>
      <title>레드마인 텍스트 포맷 바꾸기 : Redmine Textile formatting</title>
      <link>https://milkoon1.tistory.com/114</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. 폰트 스타일&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&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;1133&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQjRcS/btqXwbY2D7W/bBb4DkqShaOJz8DOWbEi4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQjRcS/btqXwbY2D7W/bBb4DkqShaOJz8DOWbEi4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQjRcS/btqXwbY2D7W/bBb4DkqShaOJz8DOWbEi4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQjRcS%2FbtqXwbY2D7W%2FbBb4DkqShaOJz8DOWbEi4k%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;1133&quot; height=&quot;469&quot; data-origin-width=&quot;1133&quot; data-origin-height=&quot;469&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1613522564408&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;h1. h1의 크기

h2. h2의 크기

h3. h3의 크기

*굵게*

_기울임_

+밑줄+

-취소선-

@코드@

* 글머리 기호

# 번호 매기기 

&amp;gt; 인용

&amp;lt;pre&amp;gt;
있는 그대로 표현
&amp;lt;/pre&amp;gt;

[[Wiki 페이지에 연결]]

!그림!

:) 이모티콘
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;참고로&amp;nbsp;&amp;lt;pre&amp;gt;&amp;lt;/pre&amp;gt;&amp;nbsp;안에서는&amp;nbsp;*굵게*&amp;nbsp;와&amp;nbsp;같은&amp;nbsp;폰트&amp;nbsp;스타일을&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;없습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2.&amp;nbsp; 색상&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&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;1017&quot; data-origin-height=&quot;154&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boHQwL/btqXxeOLfl6/OXcdayGc5pz51nPgRQMhWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boHQwL/btqXxeOLfl6/OXcdayGc5pz51nPgRQMhWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boHQwL/btqXxeOLfl6/OXcdayGc5pz51nPgRQMhWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboHQwL%2FbtqXxeOLfl6%2FOXcdayGc5pz51nPgRQMhWk%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;1017&quot; height=&quot;154&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;154&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1613524984651&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;* %{color:red}red% %{color:green}green% %{color:yellow}yellow% %{color:#82B6E1}blue'ish%

* %{color:red}red%&amp;lt;notextile&amp;gt;&amp;lt;/notextile&amp;gt;%{color:green}green%&amp;lt;notextile&amp;gt;&amp;lt;/notextile&amp;gt;%{color:yellow}yellow%&amp;lt;notextile&amp;gt;&amp;lt;/notextile&amp;gt;%{color:#82B6E1}blue'ish%

* %{background:lightgreen}Lightgreen Background% %{background:yellow}Yellow Background%

* %{background:lightgreen}Lightgreen Background%&amp;lt;notextile&amp;gt;&amp;lt;/notextile&amp;gt;%{background:yellow}Yellow Background%&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. 단락&lt;/b&gt;&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;1409&quot; data-origin-height=&quot;218&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XTprO/btqXrCpmP9b/F4BmYmW5p7XgWoAvPvGew0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XTprO/btqXrCpmP9b/F4BmYmW5p7XgWoAvPvGew0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XTprO/btqXrCpmP9b/F4BmYmW5p7XgWoAvPvGew0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXTprO%2FbtqXrCpmP9b%2FF4BmYmW5p7XgWoAvPvGew0%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;1409&quot; height=&quot;218&quot; data-origin-width=&quot;1409&quot; data-origin-height=&quot;218&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1613525060058&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;p. 왼쪽 정렬

p(. 왼쪽 정렬에서 1칸 들여쓰기

p((. 왼쪽 정렬에서 2칸 들여쓰기

p&amp;gt;. 오른쪽 정렬

p)))&amp;gt;. 오른쪽 정렬에서 3칸 들여쓰기

p=. 가운데 정렬&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;4. 표 생성&lt;/b&gt;&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;1212&quot; data-origin-height=&quot;223&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eMzM2p/btqXD27Fvtd/t0m2hjQ4KlfENrp5lghF41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eMzM2p/btqXD27Fvtd/t0m2hjQ4KlfENrp5lghF41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eMzM2p/btqXD27Fvtd/t0m2hjQ4KlfENrp5lghF41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeMzM2p%2FbtqXD27Fvtd%2Ft0m2hjQ4KlfENrp5lghF41%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;1212&quot; height=&quot;223&quot; data-origin-width=&quot;1212&quot; data-origin-height=&quot;223&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1613525703020&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;|_.UserID      |_.Name          |_.Group     |_. attribute list   |
|Starting with | a              |   simple   |row                 |
|\3=.IT                                      |&amp;lt;. align left       |
|1             |Artur Pirozhkov |/2.Users    |&amp;gt;. align right      |
|2             |Vasya Rogov     |=. center   |
|3             |John Smith      |Admin
                                 (root)      |^. valign top       |
|4             |-               |Nobody
                                 (anonymous) |~. valign bottom    |&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;참고사항 : &lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.redmine.org/projects/redmine/wiki/KoreanWikiFormatting&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;www.redmine.org/projects/redmine/wiki/KoreanWikiFormatting&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1613525738383&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;KoreanWikiFormatting - Redmine&quot; data-og-description=&quot;KoreanWikiFormatting&amp;para; 텍스트 서식(작업중:Working)&amp;para; 링크 넣기&amp;para; 레드마인에 링크넣기&amp;para; 레드마인에는 어디에나 텍스트 형식의 리소스(일감, 변경내용, 위키 페이지...)에 하이퍼 링크를 사용하실 수 있&quot; data-og-host=&quot;www.redmine.org&quot; data-og-source-url=&quot;https://www.redmine.org/projects/redmine/wiki/KoreanWikiFormatting&quot; data-og-url=&quot;https://www.redmine.org/projects/redmine/wiki/KoreanWikiFormatting&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.redmine.org/projects/redmine/wiki/KoreanWikiFormatting&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.redmine.org/projects/redmine/wiki/KoreanWikiFormatting&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;KoreanWikiFormatting - Redmine&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;KoreanWikiFormatting&amp;para; 텍스트 서식(작업중:Working)&amp;para; 링크 넣기&amp;para; 레드마인에 링크넣기&amp;para; 레드마인에는 어디에나 텍스트 형식의 리소스(일감, 변경내용, 위키 페이지...)에 하이퍼 링크를 사용하실 수 있&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.redmine.org&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>기타/Information</category>
      <category>Redmine</category>
      <category>redmineTable</category>
      <category>레드마인table</category>
      <category>레드마인표생성</category>
      <category>표생성</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/114</guid>
      <comments>https://milkoon1.tistory.com/114#entry114comment</comments>
      <pubDate>Wed, 17 Feb 2021 10:34:46 +0900</pubDate>
    </item>
    <item>
      <title>러스트 프로그래밍 언어 (Rust Programming Language)</title>
      <link>https://milkoon1.tistory.com/113</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;러스트(Rust)는 모질라 리서치에서 개발한 범용 프로그래밍 언어로, C, C++, Go언어와 같이 컴파일 기반의 언어이자 시스템 프로그래밍 언어에 속한다. 러스트(Rust)와 Go는 비슷한 시기에 등장하고 두 언어 모두 C, C++을 서로 다른 방향에서 대체하려 한다는 점때문에 많이들 이 두 언어를 비교한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;러스트(Rust)는 인터넷에서 실행되는 서버 및 클라이언트 프로그램을 개발하는데 적합한 언어를 목표로 설계되었다. 그렇기에 러스트 = 안전하고, 병렬적이며, 실용적인 언어. 순수 함수형 프로그래밍, 액터 기반 병렬 프로그래밍, 명령형 프로그래밍, 객체 지향 프로그래밍 스타일을 지원.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;* Rust의 장점들&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 230px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style7&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 10px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;빠르다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 10px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;러스트 코드는 여러 플랫폼에 걸쳐 기본 시스템 코드로 컴파일된다. 바이너리는 자체 포함되며 런타임이 없고, 생성된 코드는 C 또는 C++로 작성된 코드와 함께 기능한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;안전하다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;러스트는 안전하지 않은 메모리 사용을 시도하는 프로그램을 컴파일링 하지 않는다. 대부분의 메모리 오류는 프로그램이 실행 중일 때&amp;nbsp;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;발견된다. 러스트의 구문과 언어 은유는 다른 언어에서 흔히 나타나는 메모리 관련 문제(null 또는 댕글링 포인터, 데이터 레이스 등)가&amp;nbsp;&lt;/span&gt;절대 생산까지 영향을 미치지 않도록 보장한다. 컴파일러는 이러한 이슈에 플래그를 지정하고 프로그램이 실행되기 전에 수정하도록 강제한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;간접비용이 적게 발생한다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;러스트는&amp;nbsp;엄격한&amp;nbsp;규칙을&amp;nbsp;통해&amp;nbsp;메모리&amp;nbsp;관리를&amp;nbsp;통제한다.&amp;nbsp;러스트의&amp;nbsp;메모리&amp;nbsp;관리&amp;nbsp;시스템은&amp;nbsp;'소유'라고&amp;nbsp;불리는&amp;nbsp;메타포를&amp;nbsp;통해&amp;nbsp;언어&amp;nbsp;구문으로&amp;nbsp;표현된다.&amp;nbsp;러스트&amp;nbsp;언어에서&amp;nbsp;주어진&amp;nbsp;가치는&amp;nbsp;한&amp;nbsp;번에&amp;nbsp;하나의&amp;nbsp;변수에&amp;nbsp;의해서만&amp;nbsp;소유되거나&amp;nbsp;유지,&amp;nbsp;조작될&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;러스트&amp;nbsp;프로그램의&amp;nbsp;모든&amp;nbsp;메모리는&amp;nbsp;소유권&amp;nbsp;메타포를&amp;nbsp;통해&amp;nbsp;추적되고&amp;nbsp;자동으로&amp;nbsp;방출된다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;융통성이 있다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;러스트는&amp;nbsp;필요하다면&amp;nbsp;어느&amp;nbsp;정도의&amp;nbsp;위험도&amp;nbsp;감수할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;되어&amp;nbsp;있다.&amp;nbsp;러스트의&amp;nbsp;안전&amp;nbsp;장치는&amp;nbsp;C,&amp;nbsp;C++의&amp;nbsp;'raw&amp;nbsp;pointer'와&amp;nbsp;같이&amp;nbsp;메모리를&amp;nbsp;직접적으로&amp;nbsp;조작해야&amp;nbsp;하는&amp;nbsp;경우&amp;nbsp;부분적으로&amp;nbsp;비활성화&amp;nbsp;시키는&amp;nbsp;것이&amp;nbsp;가능하다.&amp;nbsp;러스트의&amp;nbsp;메모리&amp;nbsp;안전&amp;nbsp;오퍼레이션은&amp;nbsp;절대로&amp;nbsp;완전히&amp;nbsp;비활성화&amp;nbsp;될&amp;nbsp;수&amp;nbsp;없다.&amp;nbsp;안전&amp;nbsp;오퍼레이션을&amp;nbsp;부분적으로&amp;nbsp;비활성화&amp;nbsp;한다고&amp;nbsp;해도&amp;nbsp;일반적인&amp;nbsp;사용&amp;nbsp;사례에서는&amp;nbsp;'안전벨트'를&amp;nbsp;풀을&amp;nbsp;필요가&amp;nbsp;거의&amp;nbsp;없으므로,&amp;nbsp;결과적으로는&amp;nbsp;안전의&amp;nbsp;기본&amp;nbsp;값이&amp;nbsp;훨씬&amp;nbsp;높은&amp;nbsp;소프트웨어가&amp;nbsp;탄생하게&amp;nbsp;된다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;사용하기 쉽다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;러스트&amp;nbsp;바이너리를&amp;nbsp;생산하는&amp;nbsp;데&amp;nbsp;필요한&amp;nbsp;모든&amp;nbsp;것은&amp;nbsp;같은&amp;nbsp;패키지에&amp;nbsp;담겨&amp;nbsp;있다.&amp;nbsp;GCC와&amp;nbsp;같은&amp;nbsp;외부&amp;nbsp;컴파일러는&amp;nbsp;러스트&amp;nbsp;생태계(소스로부터&amp;nbsp;컴파일하는&amp;nbsp;C&amp;nbsp;라이브러리&amp;nbsp;등)&amp;nbsp;밖에서&amp;nbsp;다른&amp;nbsp;구성요소를&amp;nbsp;컴파일하는&amp;nbsp;경우에만&amp;nbsp;필요하다.&amp;nbsp;마이크로소프트&amp;nbsp;윈도우&amp;nbsp;사용자들&amp;nbsp;역시&amp;nbsp;이등&amp;nbsp;시민&amp;nbsp;취급을&amp;nbsp;받지&amp;nbsp;않아도&amp;nbsp;된다.&amp;nbsp;러스트&amp;nbsp;툴&amp;nbsp;체인은&amp;nbsp;윈도우에서도&amp;nbsp;리눅스&amp;nbsp;및&amp;nbsp;맥OS에서와&amp;nbsp;같은&amp;nbsp;기능을&amp;nbsp;한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;크로스-플랫폼 언어이다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;러스트는&amp;nbsp;리눅스,&amp;nbsp;윈도우&amp;nbsp;및&amp;nbsp;맥OS의&amp;nbsp;세&amp;nbsp;가지&amp;nbsp;주요&amp;nbsp;플랫폼에서&amp;nbsp;모두&amp;nbsp;작동한다.&amp;nbsp;만약&amp;nbsp;개발자가&amp;nbsp;교차&amp;nbsp;컴파일하거나,&amp;nbsp;현재&amp;nbsp;실행하고&amp;nbsp;있는&amp;nbsp;것과&amp;nbsp;다른&amp;nbsp;아키텍처나&amp;nbsp;플랫폼에&amp;nbsp;대한&amp;nbsp;바이너리를&amp;nbsp;생산하고&amp;nbsp;싶다면&amp;nbsp;조금&amp;nbsp;더&amp;nbsp;많은&amp;nbsp;작업이&amp;nbsp;수반되지만,&amp;nbsp;러스트의&amp;nbsp;일반적인&amp;nbsp;임무&amp;nbsp;중&amp;nbsp;하나는&amp;nbsp;그러한&amp;nbsp;작업에&amp;nbsp;필요한&amp;nbsp;무거운&amp;nbsp;짐을&amp;nbsp;덜어&amp;nbsp;주는&amp;nbsp;것이다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;강력한 언어 기능을 제공한다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;기존&amp;nbsp;사용하던&amp;nbsp;익숙한&amp;nbsp;언어보다&amp;nbsp;더&amp;nbsp;적은,&amp;nbsp;혹은&amp;nbsp;빈약한&amp;nbsp;기능을&amp;nbsp;가진&amp;nbsp;새로운&amp;nbsp;언어를&amp;nbsp;가지고&amp;nbsp;작업하고&amp;nbsp;싶어&amp;nbsp;하는&amp;nbsp;개발자는&amp;nbsp;거의&amp;nbsp;없을&amp;nbsp;것이다.&amp;nbsp;C++&amp;nbsp;같은&amp;nbsp;언어와&amp;nbsp;비교했을&amp;nbsp;때,&amp;nbsp;러스트가&amp;nbsp;지닌&amp;nbsp;기능들은&amp;nbsp;훨씬&amp;nbsp;개발자의&amp;nbsp;구미를&amp;nbsp;당기게&amp;nbsp;할&amp;nbsp;만하다.&amp;nbsp;매크로(Macros),&amp;nbsp;일반론(generics),&amp;nbsp;패턴&amp;nbsp;매칭(patternmatching)&amp;nbsp;및&amp;nbsp;구성은&amp;nbsp;러스트의&amp;nbsp;중요&amp;nbsp;기능들이다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;유용한 표준 라이브러리를 가지고 있다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;러스트의 주요 목표 중 하나는 C와 C++ 개발자들이 가능하면 러스트를 사용하도록 장려하는 것이다. 그러나 C와 C++ 사용자는 컨테이너, 컬렉션 및 반복기를 사용하고, 문자열 조작을 수행하고, 프로세스와 스레딩을 관리하고, 네트워크 및 파일 I/O를 수행하는 등 적절한 표준 라이브러리를 원하고 있다. 러스트는 그 모든 것, 그리고 그 이상을 표준 라이브러리 안에서 할 수 있다. 크로스-플랫폼 언어인 러스트의 표준 라이브러리는 플랫폼 간에 신뢰성 있게 포팅할 수 있는 것들만 포함할 수 있다. 리눅스의 epoll과 같은 플랫폼별 기능은 libc, mio 또는 Tokio와 같은 타사 라이브러리의 기능을 통해 지원될 수 밖에 없다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 40px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;다양한 서드파티 라이브러리 '크레이트'를 가지고 있다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 40px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;프로그래밍&amp;nbsp;언어의&amp;nbsp;유용성을&amp;nbsp;평가하는&amp;nbsp;한&amp;nbsp;가지&amp;nbsp;척도는&amp;nbsp;서드파티를&amp;nbsp;사용해&amp;nbsp;얼마나&amp;nbsp;많은&amp;nbsp;것을&amp;nbsp;할&amp;nbsp;수&amp;nbsp;있느냐이다.&amp;nbsp;러스트&amp;nbsp;라이브러리의&amp;nbsp;공식&amp;nbsp;저장소인&amp;nbsp;카고(Cargo)는&amp;nbsp;약&amp;nbsp;1만&amp;nbsp;개의&amp;nbsp;크레이트를&amp;nbsp;열거하고&amp;nbsp;있다.&amp;nbsp;이들&amp;nbsp;중&amp;nbsp;상당수가&amp;nbsp;공통라이브러리&amp;nbsp;및&amp;nbsp;프레임워크에&amp;nbsp;API&amp;nbsp;결합하고&amp;nbsp;있기&amp;nbsp;때문에&amp;nbsp;러스트는&amp;nbsp;그러한&amp;nbsp;프레임워크와&amp;nbsp;함께&amp;nbsp;하나의&amp;nbsp;언어&amp;nbsp;옵션으로&amp;nbsp;사용될&amp;nbsp;수&amp;nbsp;있다.&amp;nbsp;그러나&amp;nbsp;러스트&amp;nbsp;커뮤니티에서는&amp;nbsp;아직까지&amp;nbsp;전체적인&amp;nbsp;품질&amp;nbsp;및&amp;nbsp;효용성에&amp;nbsp;기초한&amp;nbsp;상세한&amp;nbsp;소개나&amp;nbsp;크레이트&amp;nbsp;순위를&amp;nbsp;공개하고&amp;nbsp;있지&amp;nbsp;않기&amp;nbsp;때문에,&amp;nbsp;직접&amp;nbsp;사용해&amp;nbsp;보거나&amp;nbsp;커뮤니티에서&amp;nbsp;설문조사를&amp;nbsp;해&amp;nbsp;보지&amp;nbsp;않고는&amp;nbsp;어떤&amp;nbsp;크레이트가&amp;nbsp;최선인지&amp;nbsp;선택할&amp;nbsp;방법이&amp;nbsp;없다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 33.7209%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;IDE 지원이 훌륭하다&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 66.2791%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;러스트&amp;nbsp;컴파일러로부터&amp;nbsp;마이크로소프트&amp;nbsp;비주얼&amp;nbsp;스튜디오&amp;nbsp;코드와&amp;nbsp;같은&amp;nbsp;IDE에&amp;nbsp;실시간&amp;nbsp;피드백을&amp;nbsp;제공하는&amp;nbsp;러스트&amp;nbsp;랭기지&amp;nbsp;서버(Rust&amp;nbsp;Language&amp;nbsp;Server)를&amp;nbsp;도입했다.&amp;nbsp;러스트&amp;nbsp;랭기지&amp;nbsp;서버는&amp;nbsp;기본&amp;nbsp;구문&amp;nbsp;체킹&amp;nbsp;이상의&amp;nbsp;피드백을&amp;nbsp;제공한다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;출처 : &lt;a style=&quot;color: #000000;&quot; href=&quot;https://blog.naver.com/sundooedu/221706592707&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;blog.naver.com/sundooedu/221706592707&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1609993895193&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Go언어와 비교해보는 시스템 프로그래밍 언어 러스트(Rust)&quot; data-og-description=&quot;러스트 언어(Rust Language)는 모질라 리서치에서 개발한 범용 프로그래밍 언어로, 최근 인기가 급상승하...&quot; data-og-host=&quot;blog.naver.com&quot; data-og-source-url=&quot;https://blog.naver.com/sundooedu/221706592707&quot; data-og-url=&quot;https://blog.naver.com/sundooedu/221706592707&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hQczL/hyIPv4eZ9R/wK2DbUEymtQV0sGtsvp6A0/img.jpg?width=150&amp;amp;height=100&amp;amp;face=0_0_150_100&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://blog.naver.com/sundooedu/221706592707&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.naver.com/sundooedu/221706592707&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hQczL/hyIPv4eZ9R/wK2DbUEymtQV0sGtsvp6A0/img.jpg?width=150&amp;amp;height=100&amp;amp;face=0_0_150_100');&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;Go언어와 비교해보는 시스템 프로그래밍 언어 러스트(Rust)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;러스트 언어(Rust Language)는 모질라 리서치에서 개발한 범용 프로그래밍 언어로, 최근 인기가 급상승하...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.naver.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/용어정리</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/113</guid>
      <comments>https://milkoon1.tistory.com/113#entry113comment</comments>
      <pubDate>Thu, 7 Jan 2021 14:04:24 +0900</pubDate>
    </item>
    <item>
      <title>C# : TreeList 특정 노드 찾기 및 TreeListNode 추가하기 : FindNodeByFieldValue</title>
      <link>https://milkoon1.tistory.com/112</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/detMOK/btqRTScy9dU/BKifowEx9IwuIVcHkY7aM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/detMOK/btqRTScy9dU/BKifowEx9IwuIVcHkY7aM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/detMOK/btqRTScy9dU/BKifowEx9IwuIVcHkY7aM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdetMOK%2FbtqRTScy9dU%2FBKifowEx9IwuIVcHkY7aM1%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;802&quot; height=&quot;342&quot; data-origin-width=&quot;802&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이번 글에서는 TreeList 중 특정 Node를 찾는 방법에 대해 설명해보도록 하겠습니다. 우선 위의 사진을 보면 알 수 있듯이 TreeList에는 FindNodeByFieldValue, FindNodeByID, FindNodeByKeyID 등 다양한 옵션들을 갖고 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1609377369915&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public TreeListNode SearchNode(TreeListNodes objNodes, string strKey, string strValue)
{
	foreach (TreeListNode node in objNodes)
	{
		// TreeList 중 fieldName이 strKey이면서 cellValue값이 strValue인 Node 찾기
		node.TreeList.FindNodeByFieldValue(strKey, strValue);
	}
	return null;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1) FindNodeByFieldValue : &lt;/b&gt;FindNodeByFieldValue는 특정 FieldName에서 찾고자 하는 Value가 있으면 해당 Node를 찾는 옵션입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1609385049900&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public TreeListNode SearchNode(TreeListNodes objNodes, int szId)
{            
	foreach (TreeListNode node in objNodes)
	{
		// TreeList 중 ID가szId인 경우
		node.TreeList.FindNodeByID(szId);
	}
	return null;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2) FindNodeByID&lt;/b&gt; : FindNodeByID는 특정Id의 Node를 찾는 옵션입니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어/C#</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/112</guid>
      <comments>https://milkoon1.tistory.com/112#entry112comment</comments>
      <pubDate>Thu, 31 Dec 2020 12:25:32 +0900</pubDate>
    </item>
    <item>
      <title>C# : OpenFileDialog 파일 불러오기 엑셀 열기 및 DataTable 데이터 받기 How to export Excel file to DataTable</title>
      <link>https://milkoon1.tistory.com/111</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이번 글에서는 SaveFileDialog에 이어 파일을 불러올 수 있는 OpenFileDialog에 대해 배워보도록 하겠습니다. 만약 SaveFileDialog 사용하는 방법에 대해 알고 싶으신 분들은 아래의 링크를 참고해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1609304669220&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;C# : SaveFileDialog 엑셀 저장 및 열기 How to open Excel File after save in C#&quot; data-og-description=&quot;이번 글에서는 SaveFileDialog를 이용해서 엑셀을 저장하고 난 뒤, 해당 저장한 엑셀 파일을 여는 방법에 대해 설명하도록 하겠습니다. 단순 저장만 하려고 했는데 어쩌다보니 해당 엑셀 파일을 열&quot; data-og-host=&quot;milkoon1.tistory.com&quot; data-og-source-url=&quot;https://milkoon1.tistory.com/18?category=796882&quot; data-og-url=&quot;https://milkoon1.tistory.com/18&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ONRjI/hyIK2GjVvO/OxMQcRGt4ck7p0FcV0Z3g0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cb2fPO/hyIJTc9u8N/wQazKcX21Tq2SLDPkrHje0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hDgIy/hyIJJBBmMw/t59MFX5QSBKGu1B5iHVM1k/img.png?width=750&amp;amp;height=560&amp;amp;face=0_0_750_560&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://milkoon1.tistory.com/18?category=796882&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://milkoon1.tistory.com/18?category=796882&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ONRjI/hyIK2GjVvO/OxMQcRGt4ck7p0FcV0Z3g0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cb2fPO/hyIJTc9u8N/wQazKcX21Tq2SLDPkrHje0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hDgIy/hyIJJBBmMw/t59MFX5QSBKGu1B5iHVM1k/img.png?width=750&amp;amp;height=560&amp;amp;face=0_0_750_560');&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;C# : SaveFileDialog 엑셀 저장 및 열기 How to open Excel File after save in C#&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;이번 글에서는 SaveFileDialog를 이용해서 엑셀을 저장하고 난 뒤, 해당 저장한 엑셀 파일을 여는 방법에 대해 설명하도록 하겠습니다. 단순 저장만 하려고 했는데 어쩌다보니 해당 엑셀 파일을 열&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;milkoon1.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1609304849742&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// using 참조
using Excel = Microsoft.Office.Interop.Excel;

private DataTable get엑셀데이터가져오기()
{
	try
	{
    		//-------------------------------------------------------------------------
		string path = @&quot;&quot;;
		OpenFileDialog dialog = new OpenFileDialog();
		dialog.InitialDirectory = @&quot;D:\&quot;;             // 디폴트 경로

		if (dialog.ShowDialog() == DialogResult.OK)
		{
			path = dialog.FileName;
		}
		//-------------------------------------------------------------------------
		DataTable _printData = new DataTable();
		if (!_printData.Columns.Contains(&quot;source_name&quot;)) { _printData.Columns.Add(&quot;source_name&quot;); };
		if (!_printData.Columns.Contains(&quot;source_type&quot;)) { _printData.Columns.Add(&quot;source_type&quot;); };
		if (!_printData.Columns.Contains(&quot;file_type&quot;)) { _printData.Columns.Add(&quot;file_type&quot;); };
		if (!_printData.Columns.Contains(&quot;url_path&quot;)) { _printData.Columns.Add(&quot;url_path&quot;); };
		if (!_printData.Columns.Contains(&quot;file_path&quot;)) { _printData.Columns.Add(&quot;file_path&quot;); };

		DataRow row;
		int index = 0;
		object rowIndex = 2;

		Excel.ApplicationClass app = new Excel.ApplicationClass();
		Excel.Workbook workBook = app.Workbooks.Open(path, 0, true, 5, &quot;&quot;, &quot;&quot;, true, Excel.XlPlatform.xlWindows, &quot;\t&quot;, false, false, 0, true, 1, 0);
		Excel.Worksheet workSheet = (Excel.Worksheet)workBook.ActiveSheet;

		while (((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, 1]).Value2 != null)
		{
			rowIndex = 2 + index;
			row = _printData.NewRow();
			row[0] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 1]).Value2);
			row[1] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 2]).Value2);
			row[2] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 3]).Value2);
			row[3] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 4]).Value2);
			row[4] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 5]).Value2);
			index++;
			_printData.Rows.Add(row);
		}
		app.Workbooks.Close();

		return _printData;
	}
	catch (Exception ex)
	{
		return null;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1) 파일 불러오기(OpenFileDialog) &lt;/b&gt;: 이미 저장되어 있는 파일을 불러오고 싶은 경우에는 OpenFileDialog 클래스를 사용하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1609308369941&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;string path = @&quot;&quot;; // OpenFileDialog에서 받은 경로를 담을 변수
OpenFileDialog dialog = new OpenFileDialog(); // 생성자 생성
dialog.InitialDirectory = @&quot;D:\&quot;;             // 화면을 띄웠을 때 처음 보여줄 경로

if (dialog.ShowDialog() == DialogResult.OK) // ShowDialog()로 화면 띄우기
{
	path = dialog.FileName; // 선택한 파일의 경로 받기
	// 그 외 필요한 내용 적기
} &lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;사용방법은 우선 생성자를 생성한 다음 ShowDialog()를 이용해서 파일을 불러오면 되는데 dialog.FileName이 선택한 파일의 경로를 말합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2) 선택한 엑셀을 DataTable에 담기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그 다음 설명할 내용은 선택한 엑셀의 데이터를 DataTable에 옮겨놓는 작업입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;106&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kxnFQ/btqRXGWtERI/fHnwXdYPnKHdN4GENQhyR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kxnFQ/btqRXGWtERI/fHnwXdYPnKHdN4GENQhyR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kxnFQ/btqRXGWtERI/fHnwXdYPnKHdN4GENQhyR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkxnFQ%2FbtqRXGWtERI%2FfHnwXdYPnKHdN4GENQhyR0%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;745&quot; height=&quot;106&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;106&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1609308528275&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DataTable _printData = new DataTable();
if (!_printData.Columns.Contains(&quot;source_name&quot;)) { _printData.Columns.Add(&quot;source_name&quot;); };
if (!_printData.Columns.Contains(&quot;source_type&quot;)) { _printData.Columns.Add(&quot;source_type&quot;); };
if (!_printData.Columns.Contains(&quot;file_type&quot;)) { _printData.Columns.Add(&quot;file_type&quot;); };
if (!_printData.Columns.Contains(&quot;url_path&quot;)) { _printData.Columns.Add(&quot;url_path&quot;); };
if (!_printData.Columns.Contains(&quot;file_path&quot;)) { _printData.Columns.Add(&quot;file_path&quot;); };&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;우선 엑셀의 Cells(컬럼)과 동일하게 DataTable Columns를 생성해주세요. 컬럼명은 동일할 필요는 없지만 저는 한눈에 보기 쉽게 해놓았습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1609308675747&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DataRow row;
int index = 0;
object rowIndex = 2;

Excel.ApplicationClass app = new Excel.ApplicationClass();
Excel.Workbook workBook = app.Workbooks.Open(path, 0, true, 5, &quot;&quot;, &quot;&quot;, true, Excel.XlPlatform.xlWindows, &quot;\t&quot;, false, false, 0, true, 1, 0);
Excel.Worksheet workSheet = (Excel.Worksheet)workBook.ActiveSheet;

while (((Microsoft.Office.Interop.Excel.Range)workSheet.Cells[rowIndex, 1]).Value2 != null)
{
	rowIndex = 2 + index;
	row = _printData.NewRow();
	row[0] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 1]).Value2);
	row[1] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 2]).Value2);
    row[2] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 3]).Value2);
	row[3] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 4]).Value2);
	row[4] = Convert.ToString(((Excel.Range)workSheet.Cells[rowIndex, 5]).Value2);
	index++;
	_printData.Rows.Add(row);
}
app.Workbooks.Close();&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그 다음은 엑셀의 데이터를 가져오는 작업입니다. 아까 전에 받았던 dialog.FileName을 얻은 이유가 이제 나오네요. &lt;b&gt;app.Workbooks.Open(path, ~)&lt;/b&gt; 중 path를 설정하려고 위의 작업을 했던 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;While문은 엑셀의 Value값이 null이 아닌 경우 반복해서 작업합니다. row는 위의 코드를 보면 알 수 있듯이 각각 열마다 있는 데이터를 가져오고 있죠.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;197&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0gDa6/btqRXH8Ukai/rkOKjDZHS6MyiERdXk2v2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0gDa6/btqRXH8Ukai/rkOKjDZHS6MyiERdXk2v2k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0gDa6/btqRXH8Ukai/rkOKjDZHS6MyiERdXk2v2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0gDa6%2FbtqRXH8Ukai%2FrkOKjDZHS6MyiERdXk2v2k%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;836&quot; height=&quot;197&quot; data-origin-width=&quot;836&quot; data-origin-height=&quot;197&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;코드를 정확하게 입력하셨으면 위의 사진과 같이 데이터를 가져올 수 있습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어/C#</category>
      <category>ExcelToDataTable</category>
      <category>엑셀DataTable</category>
      <category>엑셀데이터가져오기</category>
      <category>엑셀데이터테이블만들기</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/111</guid>
      <comments>https://milkoon1.tistory.com/111#entry111comment</comments>
      <pubDate>Wed, 30 Dec 2020 15:21:17 +0900</pubDate>
    </item>
    <item>
      <title>Android with Kotlin : 안드로이드 기초편 - ListView 기초 리스트뷰 클릭 시 상세화면 이동</title>
      <link>https://milkoon1.tistory.com/110</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ekEF9M/btqI7yfBoGS/GTKCreAFBw3PDJm27ieH2k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ekEF9M/btqI7yfBoGS/GTKCreAFBw3PDJm27ieH2k/img.png&quot; data-origin-width=&quot;769&quot; data-origin-height=&quot;602&quot; style=&quot;width: 71.7778%; margin-right: 10px;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ekEF9M/btqI7yfBoGS/GTKCreAFBw3PDJm27ieH2k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FekEF9M%2FbtqI7yfBoGS%2FGTKCreAFBw3PDJm27ieH2k%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;769&quot; height=&quot;602&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bsepkI/btqI66Rgq9k/xlvG9Jd7RrYxLiqmDNJGl1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bsepkI/btqI66Rgq9k/xlvG9Jd7RrYxLiqmDNJGl1/img.png&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;841&quot; style=&quot;width: 27.0595%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bsepkI/btqI66Rgq9k/xlvG9Jd7RrYxLiqmDNJGl1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbsepkI%2FbtqI66Rgq9k%2FxlvG9Jd7RrYxLiqmDNJGl1%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;405&quot; height=&quot;841&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;저번 글에서는 ListView를 생성 및 데이터를 출력하는 것까지 배워보았습니다. 이번 글에서는 리스트뷰 중 내가 원하는 리스트를 선택했을 때 상세화면으로 이동하는 방법 및 데이터 출력을 배워보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;* 연습내용 :&amp;nbsp;&lt;/b&gt;직방 목록화면에서 리스트를 하나 클릭 시 해당 목록에 대한 상세화면으로 이동 및 데이터 출력을 연습할 계획입니다. - 프로젝트명 : Review_ListView&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1628%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;순서&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.4883%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;위치&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.2326%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;프로세스&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1628%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.4883%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; RoomDetailActivity 생성&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;res &amp;gt; layout &amp;gt; activity_room_detail.xml 생성&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.2326%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;리스트를 클릭했을 때 넘어갈 상세화면 부분&lt;br /&gt;&lt;/b&gt;▶ 오른쪽 버튼 Activity 생성하면 자동으로 xml도 생성&lt;br /&gt;&lt;b&gt;※ 역할 : 상세화면(디자인)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1628%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.4883%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;res &amp;gt; layout &amp;gt; activity_room_detail.xml&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.2326%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;▶ activity_main.xml에서 한 것과 비슷하게 상세화면에 뿌려줄 디자인 구성&lt;br /&gt;&lt;b&gt;※ 역할 : 상세화면(디자인)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1628%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.4883%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; MainActivity&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.2326%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;리스트 클릭 이벤트를 넣는 작업&lt;br /&gt;&lt;/b&gt;▶ setupEvents() 함수 안에 리스트뷰 클릭이벤트를 넣기&lt;br /&gt;&lt;b&gt;※ 역할 : 상세화면으로 이동할 이벤트를 설정(소스)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1628%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.4883%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; datas &amp;gt; Room&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.2326%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;리스트 클릭 이벤트에서 담은 정보를 사용할 수 있게 작업&lt;br /&gt;&lt;/b&gt;▶ putExtra에서 ArrayList&amp;lt;Room&amp;gt;를 가져갈 수 있게 Room 상속 설정&lt;br /&gt;&lt;b&gt;※ 역할 : Serializable 상속(소스)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 11.1628%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;5&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.4883%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; RoomDetailActivity&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 50.2326%;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;메인화면에서 가져온 리스트 정보를 받고 처리작업&lt;br /&gt;&lt;/b&gt;▶ 1) RoomDetailActivity은 AppCompatActivity를 상속받는게 아니고 전에 설정했던 BaseActivity로 변경&lt;br /&gt;2) setupEvents(), setValues() override 하기&lt;br /&gt;3) setValues()에서 받은 roomInfo를 가지고 매핑시키기&lt;br /&gt;&lt;b&gt;※ 역할 : 상세화면 데이터 뿌리기(소스)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;833&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/shVA0/btqI9pbBzAW/HWPdr76HwQk0WAdY09PiUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/shVA0/btqI9pbBzAW/HWPdr76HwQk0WAdY09PiUK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/shVA0/btqI9pbBzAW/HWPdr76HwQk0WAdY09PiUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FshVA0%2FbtqI9pbBzAW%2FHWPdr76HwQk0WAdY09PiUK%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;1151&quot; height=&quot;833&quot; data-origin-width=&quot;1151&quot; data-origin-height=&quot;833&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. RoomDetailActivity 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-420d2719-d47e-4635-88c5-ef90a116d1a7&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;상세화면을 만들기 위해 새로운 Activity를 생성해줍니다. * 참고로 Actvity.kt 파일과 xml 파일은 각각 생성하는 것이 아니라 위의 사진과 같이 Activity &amp;gt; Empty Activity를 클릭해서 생성하면 kt, xml 둘다 자동 생성됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&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;1280&quot; data-origin-height=&quot;736&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bRmnTY/btqI6NxiFDc/wWL7cCAWrpOPRYWhzhoK3k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bRmnTY/btqI6NxiFDc/wWL7cCAWrpOPRYWhzhoK3k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bRmnTY/btqI6NxiFDc/wWL7cCAWrpOPRYWhzhoK3k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbRmnTY%2FbtqI6NxiFDc%2FwWL7cCAWrpOPRYWhzhoK3k%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;1280&quot; height=&quot;736&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;736&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1600661336506&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- activity_room_detail.xml --&amp;gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&quot;
    tools:context=&quot;.RoomDetailActivity&quot;&amp;gt;

    &amp;lt;ImageView
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;250dp&quot;
        android:src=&quot;@drawable/ic_launcher_foreground&quot;
        android:scaleType=&quot;centerCrop&quot;/&amp;gt;

    &amp;lt;LinearLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:gravity=&quot;center&quot;
        android:padding=&quot;15dp&quot;
        android:orientation=&quot;vertical&quot;&amp;gt;

        &amp;lt;TextView
            android:id=&quot;@+id/priceTxt&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;8,000(보증금) / 30(월세)&quot;
            android:textSize=&quot;25sp&quot;
            android:textColor=&quot;#000000&quot;
            android:textStyle=&quot;bold&quot;/&amp;gt;

        &amp;lt;TextView
            android:id=&quot;@+id/descTxt&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;설명문구 쓰는 자리입니다.&quot;
            android:layout_marginTop=&quot;5dp&quot;/&amp;gt;

    &amp;lt;/LinearLayout&amp;gt;


    &amp;lt;TextView

        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;1dp&quot;
        android:background=&quot;#DFDFDF&quot;/&amp;gt;

    &amp;lt;LinearLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:padding=&quot;10dp&quot;
        android:orientation=&quot;horizontal&quot;&amp;gt;

        &amp;lt;TextView
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;주소 정보&quot;/&amp;gt;

        &amp;lt;TextView
            android:layout_width=&quot;0dp&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:layout_weight=&quot;1&quot;/&amp;gt;

        &amp;lt;TextView
            android:id=&quot;@+id/addressTxt&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;서울시 은평구&quot;
            android:textColor=&quot;#000000&quot;/&amp;gt;

    &amp;lt;/LinearLayout&amp;gt;

    &amp;lt;TextView

        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;1dp&quot;
        android:background=&quot;#DFDFDF&quot;/&amp;gt;

    &amp;lt;LinearLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:padding=&quot;10dp&quot;
        android:orientation=&quot;horizontal&quot;&amp;gt;

        &amp;lt;TextView
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;층수 정보&quot;/&amp;gt;

        &amp;lt;TextView
            android:layout_width=&quot;0dp&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:layout_weight=&quot;1&quot;/&amp;gt;

        &amp;lt;TextView
            android:id=&quot;@+id/floorTxt&quot;
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;1층&quot;
            android:textColor=&quot;#000000&quot;/&amp;gt;

    &amp;lt;/LinearLayout&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;1dp&quot;
        android:background=&quot;#DFDFDF&quot;/&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. activity_room_detail.xml 수정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e4f57909-5504-49e0-85a6-184a8a2fe21c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;kt, xml파일을 생성하셨으면 우선 디자인과 관련된 xml파일부터 수정하도록 합니다. 디자인은 위의 소스를 참고해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-23fa7084-03e2-4cf6-b70b-01dd30550328&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&lt;b&gt;* 참고 : ListView기초와 활용에서 &lt;/b&gt;&lt;b&gt;ImageView를 사용하긴 하지만 &lt;/b&gt;&lt;b&gt;실제 데이터를 넣어주진 않을겁니다. &lt;/b&gt;&lt;b&gt;ImageView관련된 내용은 나중에 &lt;/b&gt;&lt;b&gt;상세하게 올릴 예정이니 참고해주세요.&lt;/b&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1263&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uRpeT/btqJhIBrfIC/9czeeKBkon9DZGLfsCZD61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uRpeT/btqJhIBrfIC/9czeeKBkon9DZGLfsCZD61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uRpeT/btqJhIBrfIC/9czeeKBkon9DZGLfsCZD61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuRpeT%2FbtqJhIBrfIC%2F9czeeKBkon9DZGLfsCZD61%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;1263&quot; height=&quot;708&quot; data-origin-width=&quot;1263&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1600661376650&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_listview

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.mwsniper.review_listview.adapters.RoomAdapter
import com.mwsniper.review_listview.datas.Room
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : BaseActivity() {

    val mRoomList = ArrayList&amp;lt;Room&amp;gt;()
    lateinit var mRoomAdapter: RoomAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setupEvents()
        setValues()

    }

    override fun setupEvents() {

        //메인화면의 이벤트관련 코드를 모아두는 장소
        // 리스트 클릭 이벤트 - 리스트뷰의 각 줄이 눌리는 시점의 이벤트
        roomListView.setOnItemClickListener { adapterView, view, i, l -&amp;gt;

            // 눌린 위치에 해당하는 목록이 어떤 목록인지 가져오기
            val clickedRoom = mRoomList[i]
            // 선택된 목록정보를 가져왔으면 이제 화면 이동
            val myIntent = Intent(mContext, RoomDetailActivity::class.java)
            // 정보를 담아주기
            // 2번에서는 해당 부분 오류남. 3번하고 난 다음 여기로 다시 와야함
            myIntent.putExtra(&quot;roomInfo&quot;, clickedRoom)
            // 화면 전환
            startActivity(myIntent)
        }
    }

    override fun setValues() {
        mRoomList.add(Room(8000, 30, &quot;서울시 마포구&quot;, 1, &quot;마포구 1층 방입니다.&quot;))
        mRoomList.add(Room(10000, 50, &quot;서울시 은평구&quot;, 10, &quot;은평구 10층 방입니다.&quot;))
        mRoomList.add(Room(3000, 80, &quot;서울시 영등포구&quot;, 5, &quot;영등포구 5층 방입니다.&quot;))
        mRoomList.add(Room(5000, 15, &quot;서울시 종로구&quot;, 4, &quot;종로구 4층 방입니다.&quot;))
        mRoomList.add(Room(9000, 20, &quot;서울시 강서구&quot;, 8, &quot;강서구 8층 방입니다.&quot;))
        mRoomList.add(Room(12000, 40, &quot;서울시 강북구&quot;, 17, &quot;강북구 17층 방입니다.&quot;))
        mRoomAdapter = RoomAdapter(mContext, R.layout.room_list_item, mRoomList)
        roomListView.adapter = mRoomAdapter

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. setOnItemClickListener 이벤트&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3fca0c9d-5661-4add-9cfe-76710fc73fdd&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;상세화면 디자인을 하셨으면 이제 메인화면에서 상세화면으로 이동할 수 있는 코딩을 해보도록 하겠습니다. 메인화면 &amp;rarr; 상세화면으로 이동할 것을 짜는거니 실행 이벤트는 MainActivity에서 해야합니다. 옛날 글에서 우리는 setOnClickListener를 배운 적이 있는데 이번 글에서는 그 이벤트가 아닌 새로운 이벤트를 써야합니다. ​ListView의 리스트를 클릭했을 때 태울 이벤트 setOnItemClickListener 이벤트&lt;/span&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;1261&quot; data-origin-height=&quot;523&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfsB7O/btqJhHP4C78/bQwddywII8PSYgK7HLRNn1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfsB7O/btqJhHP4C78/bQwddywII8PSYgK7HLRNn1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfsB7O/btqJhHP4C78/bQwddywII8PSYgK7HLRNn1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfsB7O%2FbtqJhHP4C78%2FbQwddywII8PSYgK7HLRNn1%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;1261&quot; height=&quot;523&quot; data-origin-width=&quot;1261&quot; data-origin-height=&quot;523&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1600661420448&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_listview.datas

import java.io.Serializable

class Room(
    val deposit: Int,
    val monthlyRent: Int,
    val address: String,
    val floor: Int,
    val description: String
// 상속받는 것처럼 구현
) : Serializable {
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&lt;b&gt;4. Serializable 설정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-323967f3-ab6f-4243-9021-fbabbd5343ee&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;3번까지 했으면 분명 myIntent.putExtra 부분이 빨간색으로 바뀌면서 오류를 내뱉을 것입니다. 이 오류는 우리가 만든 데이터 클래스에 첨부할 때 발생하는 에러로, 해당 오류를 해결하기 위해서는 모든 데이터들을 한꺼번에 넘기도록 처리해줍니다.&lt;/span&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;1171&quot; data-origin-height=&quot;653&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUZHqO/btqI4eoQTQm/7FhpS5IZ5IBoBfGVek6cm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUZHqO/btqI4eoQTQm/7FhpS5IZ5IBoBfGVek6cm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUZHqO/btqI4eoQTQm/7FhpS5IZ5IBoBfGVek6cm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUZHqO%2FbtqI4eoQTQm%2F7FhpS5IZ5IBoBfGVek6cm0%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;1171&quot; height=&quot;653&quot; data-origin-width=&quot;1171&quot; data-origin-height=&quot;653&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1600661453002&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_listview

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.mwsniper.review_listview.datas.Room
import kotlinx.android.synthetic.main.activity_room_detail.*

class RoomDetailActivity : BaseActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_room_detail)

        setValues()
        setupEvents()

    }

    override fun setupEvents() {
    }

    override fun setValues() {

        // roomInfo를 serializable로 받는다
        // 그냥 받은 채로 변수에 넣으면 오류가 나는데 이 때 Casting을 해줘야 한다
        val room = intent.getSerializableExtra(&quot;roomInfo&quot;) as Room

        // activity_room_detail.xml에 설정했던 view에 따라 매핑
        priceTxt.text = &quot;${room.deposit} / ${room.monthlyRent}&quot;
        addressTxt.text = room.address
        descTxt.text = room.description
        floorTxt.text = room.floor.toString()

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;5. 상세화면 데이터 매핑&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7655ce21-65e4-418e-bb98-457ea19d0fae&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;MainActivity에서 putExtra로 roomInfo를 보내줬으니 이제 상세화면에서 해당 정보를 받고 화면에 보일 수 있도록 매핑하는 작업을 하도록 하겠습니다. Serializable로 보낸 데이터는 받을 때 intent.getSerializableExtra로 받아야하며 &quot;roomInfo&quot;는 앞서 정한 name을 넣은 것 입니다. 여기서 주의해야할 점은&lt;b&gt; as Room&lt;/b&gt;인데요 그냥 받은 상태로 변수 넣고 작업을 하면 앱이 죽거나 오류가 납니다. 그렇기에 오류가 안나도록 우리는 Room(데이터클래스)로 캐스팅을 해줘야합니다.&lt;/span&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;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c9VBD1/btqI9o4Qz91/IwZYk66L9xgwKxFlB0oml1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c9VBD1/btqI9o4Qz91/IwZYk66L9xgwKxFlB0oml1/img.png&quot; data-origin-width=&quot;404&quot; data-origin-height=&quot;840&quot; style=&quot;width: 49.737%; margin-right: 10px;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c9VBD1/btqI9o4Qz91/IwZYk66L9xgwKxFlB0oml1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc9VBD1%2FbtqI9o4Qz91%2FIwZYk66L9xgwKxFlB0oml1%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;404&quot; height=&quot;840&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBl9hQ/btqI58Isq2g/H1WTBSlXTsQjL5B0Kp3lNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBl9hQ/btqI58Isq2g/H1WTBSlXTsQjL5B0Kp3lNk/img.png&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;853&quot; style=&quot;width: 49.1002%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBl9hQ/btqI58Isq2g/H1WTBSlXTsQjL5B0Kp3lNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBl9hQ%2FbtqI58Isq2g%2FH1WTBSlXTsQjL5B0Kp3lNk%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;405&quot; height=&quot;853&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​여기까지 잘 따라오셨으면 위의 화면과 같이 정상적으로 상세화면 이동 및 데이터출력을 확인하실 수 있습니다. 원래는 리스트목록보다 더 많은 데이터들을 상세화면에 출력해야하는데 아직은 서버 DB를 통해 데이터를 가져오는 작업을 하지 않았기에 똑같은 정보를 가지고 출력하였습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>네이티브/Android</category>
      <category>#코틀린ListView #Kotlin #KotlinListView</category>
      <category>코틀린 #안드로이드</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/110</guid>
      <comments>https://milkoon1.tistory.com/110#entry110comment</comments>
      <pubDate>Mon, 21 Sep 2020 13:12:15 +0900</pubDate>
    </item>
    <item>
      <title>Android with Kotlin : 안드로이드 기초편 - ListView 기초 프로세스 파악하기</title>
      <link>https://milkoon1.tistory.com/109</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* ListsView : 같은 모양의 목록이 반복적으로 나타날 때 여러줄을 비슷한 모양, 자리에 맞는 데이터만 변경해서 출력&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d251d2ad-0540-4932-91b9-701e753cf4e3&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* ListView는 Data / ArrayList / Adapter 세 가지를 같이 사용&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;1220&quot; data-origin-height=&quot;822&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k4YzG/btqI57ilZIU/touEr2Uk9kkiKy6QOLKpVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k4YzG/btqI57ilZIU/touEr2Uk9kkiKy6QOLKpVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k4YzG/btqI57ilZIU/touEr2Uk9kkiKy6QOLKpVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk4YzG%2FbtqI57ilZIU%2FtouEr2Uk9kkiKy6QOLKpVk%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;1220&quot; height=&quot;822&quot; data-origin-width=&quot;1220&quot; data-origin-height=&quot;822&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;저번 시간까지는 Intent에 대해 배워보았습니다. 이번 시간부터는 ListView에 대해 공부해보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ff97f1ca-0b02-4fec-8a4f-045b4a5f87b8&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​* 참고로 최근에는 ListView 대신 RecylerView를 많이 사용하는데 제가 학원에서 배운 부분은 ListView이기에 복습도 ListView로 우선 하도록 하겠습니다.&lt;/span&gt;&lt;/b&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;1280&quot; data-origin-height=&quot;748&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AMVeW/btqI2F1dRs0/3vmegAGGaz686KS2XgXvY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AMVeW/btqI2F1dRs0/3vmegAGGaz686KS2XgXvY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AMVeW/btqI2F1dRs0/3vmegAGGaz686KS2XgXvY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAMVeW%2FbtqI2F1dRs0%2F3vmegAGGaz686KS2XgXvY0%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;1280&quot; height=&quot;748&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;748&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;* 연습내용 : &lt;/b&gt;직방 목록 사진과 같이 보증금, 월세, 주소, 층수, 설명에 대해 ListView를 만들어 보는 연습을 할 계획입니다. - 프로젝트명 : Review_ListView&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 999px;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 69px;&quot;&gt;
&lt;td style=&quot;height: 69px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;순서&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 69px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;위치&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 69px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;프로세스&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 80px;&quot;&gt;
&lt;td style=&quot;height: 80px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;1&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 80px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; BaseActivity.kt 생성&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 80px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;공통적으로 사용하는 함수들을 미리 정의해두는 부분&lt;br /&gt;&lt;/b&gt;- MainActivity처럼 자동생성하는 것이 아니고 우리가 직접 Kotlin Class로 생성&lt;br /&gt;▶ mContext, setupEvents(), setValues() 생성&lt;br /&gt;&lt;b&gt;※ 역할 : 기본 틀 구성(기초작업)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 54px;&quot;&gt;
&lt;td style=&quot;height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 54px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; MainActvity.kt&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 54px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;▶ BaseActivity에서 생성한 setupEvents, setValues함수 override 하기&lt;br /&gt;* 주의사항 : 꼭 TO-DO 주석 제거 및 onCreate함수에 setupEvents, setValues 넣기&lt;br /&gt;&lt;b&gt;※ 역할 : 기본틀 만든 것과 연결(기초작업)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 89px;&quot;&gt;
&lt;td style=&quot;height: 89px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;3&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 89px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;res &amp;gt; layout &amp;gt; activity_main.xml&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 89px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;앱을 실행했을 때 화면에 바로 보여줄 부분&lt;br /&gt;&lt;/b&gt;▶ ListView 태그를 추가 및 id부여&lt;br /&gt;&lt;b&gt;※ 역할 : 화면 리스트뷰 생성(디자인)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 159px;&quot;&gt;
&lt;td style=&quot;height: 159px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 159px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; datas 패키지 생성&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; datas &amp;gt; Room.kt 생성&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 159px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;ListView가 뿌려줄 데이터들을 묶어서 표현하는 데이터 클래스 작업&lt;br /&gt;&lt;/b&gt;▶ 클래스의 생성자에서 val 변수이름 : 자료형&lt;br /&gt;클래스가 가져야하는 정보 항목들로 설정&lt;br /&gt;&lt;b&gt;※ 역할 : 데이터 항목 설정(DB)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 80px;&quot;&gt;
&lt;td style=&quot;height: 80px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;5&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 80px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;res &amp;gt; layout &amp;gt; room_list_item.xml 생성&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 80px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;ListView에 데이터가 뿌려질 모양을 xml로 설정&lt;br /&gt;&lt;/b&gt;▶ 한 줄에 해당하는 모양 설정&lt;br /&gt;&lt;b&gt;※ 역할 : 한 줄씩 뿌려줄 때 보여줄 모습 생성(디자인)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 141px;&quot;&gt;
&lt;td style=&quot;height: 141px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;6&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 141px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; adapters 패키지 생성&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; adapters &amp;gt; RoomAdapter 생성&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 141px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;데이터 클래스 객체들을 ArrayList에 담아서 Adapter에게 전달&lt;br /&gt;&lt;b&gt;하나하나의 객체들을 한 줄에 해당하는 XML과 연결해서 ListView에 뿌려주는 역할&lt;br /&gt;&lt;/b&gt;▶ Room 뿌려줄 데이터클래스 상속받고 필요한 데이터 순으로 텍스튜 변수에 담기&lt;br /&gt;&lt;b&gt;※ 역할 : 매개체 생성&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 149px;&quot;&gt;
&lt;td style=&quot;height: 149px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;7&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 149px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; MainActivity.kt&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 149px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;▶ 액티비티에서 실제 목록을 담아줄 ArrayList만들고 실제 데이터 담아주기&lt;br /&gt;DB와 관련된 데이터를 연결해줘야하는데 현재는 연습용이라 가라 데이터를 가지고 활용&lt;br /&gt;&lt;b&gt;※ 역할 : 데이터 ArrayList에 담아놓기(소스)&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 82px;&quot;&gt;
&lt;td style=&quot;height: 82px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;8&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 82px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; MainActivity.kt&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 82px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;▶ Adapter 클래스를 액티비티에 있는 리스트뷰와 연결&lt;br /&gt;&lt;b&gt;※ 역할 : 매개체와 데이터 담아놓은 ArrayList 연결, 리스트뷰의 매개체인 것 지정&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 96px;&quot;&gt;
&lt;td style=&quot;height: 96px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;9&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 96px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java &amp;gt; adapters &amp;gt; RoomAdapter&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 96px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;▶ 실제 데이터가 있는 목록이 반영되도록 하기&lt;br /&gt;&lt;b&gt;※ 역할 : 리스트뷰의 텍스트뷰와 row 안에 있는 데이터와 연결하기&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;1219&quot; data-origin-height=&quot;632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WBpeS/btqI9oKu4Hk/pdiuXiUc2DD65LPHpZDrr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WBpeS/btqI9oKu4Hk/pdiuXiUc2DD65LPHpZDrr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WBpeS/btqI9oKu4Hk/pdiuXiUc2DD65LPHpZDrr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWBpeS%2FbtqI9oKu4Hk%2FpdiuXiUc2DD65LPHpZDrr0%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;1219&quot; height=&quot;632&quot; data-origin-width=&quot;1219&quot; data-origin-height=&quot;632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1600655337527&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_listview

import androidx.appcompat.app.AppCompatActivity

abstract class BaseActivity : AppCompatActivity() {

    // 어느 화면인지 알려줄 때 쓰는 용도의 변수 mContext 멤버변수로 지정
    val mContext = this

    // 이벤트 처리 코드를 모아두게 될 함수
    abstract fun setupEvents()

    // 화면에 데이터를 뿌리는데에 관련된 코드를 모아두게 될 함수
    abstract fun setValues()

}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1600655345563&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_listview

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle

class MainActivity : BaseActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        setupEvents()
        setValues()
    }

    override fun setupEvents() {
    }

    override fun setValues() {
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. BaseActivity 클래스 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f29f9959-2cd1-489a-854e-4b4e5b960451&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;자주 사용할 함수 와 mContext를 멤버변수로 잡고 MainActivity가 해당 클래스를 상속받도록 설정해줍니다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* BaseActivity는 AppCompatActivity()를 상속받고&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* MainActvity는 BaseActivity()를 상속받도록 설정해줘야 합니다&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6bbbc596-7f8d-49ae-ab4f-c2e598281a4e&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-984aa240-d4ff-4b00-a325-047676d32d9e&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. MainActivity 클래스에 override 하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f638fafb-f68e-4c3c-b10c-d06a2c644ccb&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;BaseActivity에 2개의 추상메소드를 생성하였으니 상속받고 있는 MainActivity에도 해당 함수들을 상속받아야 합니다.&lt;/span&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;1280&quot; data-origin-height=&quot;814&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cEv5fH/btqI5yHlKDt/clEmWhkBVHHMQWMfikOXWk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cEv5fH/btqI5yHlKDt/clEmWhkBVHHMQWMfikOXWk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cEv5fH/btqI5yHlKDt/clEmWhkBVHHMQWMfikOXWk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcEv5fH%2FbtqI5yHlKDt%2FclEmWhkBVHHMQWMfikOXWk%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;1280&quot; height=&quot;814&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;814&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1600655383385&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- activity_main.xml --&amp;gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&quot;
    tools:context=&quot;.MainActivity&quot;&amp;gt;

    //1. 액티비티 화면 (xml)에 리스트뷰 배치 + id 부여
    &amp;lt;ListView
        android:id=&quot;@+id/roomListView&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;/&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. activity_main.xml에 ListView태그 추가&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-bb2c21ad-782a-48a9-8799-4a344323d1d0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;실제 화면에서 보여줄 ListView태그를 추가합니다&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-bee4ecf1-fa22-4d69-8330-844d32a41438&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​* 참고로 디자인에서는 ListView의 모습이 보이지만 실제 앱을 실행했을 때는 ListView의 모습이 보이지 않습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이와 같은 이유 : ListView는 Adapter의 도움을 받아서 내용목록을 출력하는데 아직 Adapter가 없어서 그렇습니다.&lt;/span&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;1117&quot; data-origin-height=&quot;505&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDtPYU/btqI5CjbEqG/2N3vr3vIhdS5P5LStrpQmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDtPYU/btqI5CjbEqG/2N3vr3vIhdS5P5LStrpQmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDtPYU/btqI5CjbEqG/2N3vr3vIhdS5P5LStrpQmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDtPYU%2FbtqI5CjbEqG%2F2N3vr3vIhdS5P5LStrpQmK%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;1117&quot; height=&quot;505&quot; data-origin-width=&quot;1117&quot; data-origin-height=&quot;505&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1600655419129&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_listview.datas

// ListView가 뿌려줄 데이터들을 묶어서 표현하는 데이터 클래스 생성
class Room(
    // 클래스의 생성자에서 변수들을 나열해서 클래스가 가져야하는 정보 항목들로 설정
    val deposit: Int,
    val monthlyRent: Int,
    val address: String,
    val floor: Int,
    val description: String
) {
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;4. datas 패키지 생성 및 Room 데이터 클래스 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-16aadad8-c890-4a6b-83c8-5f09553c6743&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;activity_main.xml에 있는 ListView에 뿌려줄 데이터들을 묶어서 표현하는 클래스. 생성자( val 변수명: 자료형 ) 이렇게 표현하며 우리는 앞서 &lt;b&gt;보증금, 월세, 주소, 층수, 설명을 &lt;/b&gt;&lt;b&gt;보여주기로 약속했으니 &lt;/b&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1113&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EoszP/btqI5zM0Q2z/uLU1uoVrotVK6z4kBavXqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EoszP/btqI5zM0Q2z/uLU1uoVrotVK6z4kBavXqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EoszP/btqI5zM0Q2z/uLU1uoVrotVK6z4kBavXqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEoszP%2FbtqI5zM0Q2z%2FuLU1uoVrotVK6z4kBavXqk%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;1113&quot; height=&quot;768&quot; data-origin-width=&quot;1113&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1600655461175&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- room_list_item.xml --&amp;gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout
    xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot; android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&quot;&amp;gt;

    &amp;lt;LinearLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:orientation=&quot;horizontal&quot;&amp;gt;

        &amp;lt;ImageView
            android:id=&quot;@+id/imgTxt&quot;
            android:layout_width=&quot;120dp&quot;
            android:layout_height=&quot;100dp&quot;
            android:src=&quot;@drawable/ic_launcher_foreground&quot;/&amp;gt;

        &amp;lt;LinearLayout
            android:layout_width=&quot;match_parent&quot;
            android:layout_height=&quot;match_parent&quot;
            android:orientation=&quot;vertical&quot;
            android:gravity=&quot;center_vertical&quot;
            android:paddingLeft=&quot;15dp&quot;&amp;gt;

            &amp;lt;TextView
                android:id=&quot;@+id/priceTxt&quot;
                android:layout_width=&quot;wrap_content&quot;
                android:layout_height=&quot;wrap_content&quot;
                android:text=&quot;8,000(보증금) / 30(월세)&quot;
                android:textSize=&quot;20sp&quot;
                android:textStyle=&quot;bold&quot; /&amp;gt;

            &amp;lt;TextView
                android:id=&quot;@+id/addressTxt&quot;
                android:layout_width=&quot;wrap_content&quot;
                android:layout_height=&quot;wrap_content&quot;
                android:text=&quot;주소, 1층&quot;
                android:textSize=&quot;16sp&quot;
                android:layout_marginTop=&quot;3dp&quot;/&amp;gt;

            &amp;lt;TextView
                android:id=&quot;@+id/descTxt&quot;
                android:layout_width=&quot;wrap_content&quot;
                android:layout_height=&quot;wrap_content&quot;
                android:text=&quot;설명문구 쓰는 자리입니다.&quot;
                android:layout_marginTop=&quot;3dp&quot;/&amp;gt;
        &amp;lt;/LinearLayout&amp;gt;
        
    &amp;lt;/LinearLayout&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&lt;b&gt;5. room_list_item.xml 추가&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-de0f6789-118d-4653-ad0b-14f0075e3e69&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;room_list_item.xml은 ListView의 List 하나마다 보여줄 모양을 설정하는 xml입니다. res &amp;gt; layout 에 Layout Resource File을 하나 추가해줍니다. 보통 ~_list_item.xml 이라고 이름을 짓습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-aa7960c6-ae46-4723-b82a-22127b01e17a&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​* 참고로 데이터들이 있는 LinearLayout 속성 중 gravity=center_vertical을 설정 안하면 글씨들이 제일 위에 설정이 되버립니다.&lt;/span&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;1134&quot; data-origin-height=&quot;629&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnLBOr/btqI9pbx8Ak/HOK2fucvb3kXnrh9pvLGkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnLBOr/btqI9pbx8Ak/HOK2fucvb3kXnrh9pvLGkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnLBOr/btqI9pbx8Ak/HOK2fucvb3kXnrh9pvLGkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnLBOr%2FbtqI9pbx8Ak%2FHOK2fucvb3kXnrh9pvLGkk%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;1134&quot; height=&quot;629&quot; data-origin-width=&quot;1134&quot; data-origin-height=&quot;629&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1600659025124&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_listview.adapters

import android.content.Context
import android.content.LocusId
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import com.mwsniper.review_listview.R
import com.mwsniper.review_listview.datas.Room

// 2) 상속받은 뒤, Adapter 주 생성자에서 필요한 재료 받고
class RoomAdapter(
    val mContext: Context,
    val resId: Int,
    val mList: List&amp;lt;Room&amp;gt;

// 1) ArrayAdapater&amp;lt;Room(뿌려줄 데이터클래스)&amp;gt;()를 상속받고
// 3) ArrayAdapter&amp;lt;Room&amp;gt;(mContext, resId, mList) 생성자에서 필요한 재료 순으로 부모에게 넘기기
) : ArrayAdapter&amp;lt;Room&amp;gt;(mContext, resId, mList) {

    // 4) 객체로 변환해주는 변수를 멤버변수로 생성
    val inf = LayoutInflater.from(mContext)

    // 5) getView 오버라이딩
    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {

        // 6) convertView 변수를 tempRow에 옮겨닮아서 null인경우 새로운 inflate해서 담기
        // 이렇게 사용하는 이유는 listView를 재사용성하기 위해
        var tempRow = convertView
        if(tempRow == null) {
            tempRow = inf.inflate(R.layout.room_list_item, null)
        }

        // tempRow는 맞지만 null은 절대 아니다 (= !!)
        val row = tempRow!!

        return row
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;6. adapters 패키지 및 adapter 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-fbed3bce-f2a2-48ee-9155-581285dcc822&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Adapter 클래스는 Data 클래스 + xml을 조합해서 ListView에 뿌리는 역할을 합니다. ArrayAdapter를 상속받는다고 명시를 하고 그 안에 뿌려줄 데이터클래스를 적용합니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* ArrayAdapter는 기본생성사 ()를 지원하지 않기때문에 만약 데이터 받는 재료를 적용안하고 넘어가면 오류가 뜹니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600659055149&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_listview

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.mwsniper.review_listview.datas.Room

class MainActivity : BaseActivity() {

    // 액티비테이서 실제 목록을 담아줄 ArrayList를 만들고 실제 데이터들을 담기
    val mRoomList = ArrayList&amp;lt;Room&amp;gt;()

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setupEvents()
        setValues()

    }

    override fun setupEvents() {

    }

    override fun setValues() {

        // 실제로 뿌려줄 데이터들 ArrayList변수에 추가
        // 보증금, 월세, 주소, 층수, 설명
        mRoomList.add(Room(8000, 30, &quot;서울시 마포구&quot;, 1, &quot;마포구 1층 방입니다.&quot;))
        mRoomList.add(Room(10000, 50, &quot;서울시 은평구&quot;, 10, &quot;은평구 10층 방입니다.&quot;))
        mRoomList.add(Room(3000, 80, &quot;서울시 영등포구&quot;, 5, &quot;영등포구 5층 방입니다.&quot;))
        mRoomList.add(Room(5000, 15, &quot;서울시 종로구&quot;, 4, &quot;종로구 4층 방입니다.&quot;))
        mRoomList.add(Room(9000, 20, &quot;서울시 강서구&quot;, 8, &quot;강서구 8층 방입니다.&quot;))
        mRoomList.add(Room(12000, 40, &quot;서울시 강북구&quot;, 17, &quot;강북구 17층 방입니다.&quot;))

    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;7. MainActivity에 ArrayList 만들기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ff6b5ea8-ee3c-4a17-95ff-0239d9f5f66e&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;액티비티에 실제 목록을 담아줄 ArrayList를 만들고 그 안에서 실제 데이터들을 담아줍니다. val 목록변수이름 = ArrayList&amp;lt;뿌려줄데이터클래스&amp;gt;() 실제로 뿌려줄 데이터들은 원래 서버에서 가져와야하지만 현재는 서버가 없으니 가라데이터를 만들어서 연습하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600659083800&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_listview

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import com.mwsniper.review_listview.adapters.RoomAdapter
import com.mwsniper.review_listview.datas.Room
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : BaseActivity() {

    val mRoomList = ArrayList&amp;lt;Room&amp;gt;()

    // 만들어둔 Adapter 클래스를 액티비티에 있는 리스트뷰와 연결
    lateinit var mRoomAdapter: RoomAdapter

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        setupEvents()
        setValues()

    }

    override fun setupEvents() {

    }

    override fun setValues() {

        mRoomList.add(Room(8000, 30, &quot;서울시 마포구&quot;, 1, &quot;마포구 1층 방입니다.&quot;))
        mRoomList.add(Room(10000, 50, &quot;서울시 은평구&quot;, 10, &quot;은평구 10층 방입니다.&quot;))
        mRoomList.add(Room(3000, 80, &quot;서울시 영등포구&quot;, 5, &quot;영등포구 5층 방입니다.&quot;))
        mRoomList.add(Room(5000, 15, &quot;서울시 종로구&quot;, 4, &quot;종로구 4층 방입니다.&quot;))
        mRoomList.add(Room(9000, 20, &quot;서울시 강서구&quot;, 8, &quot;강서구 8층 방입니다.&quot;))
        mRoomList.add(Room(12000, 40, &quot;서울시 강북구&quot;, 17, &quot;강북구 17층 방입니다.&quot;))

        // Adapter 클래스를 객체화
        // BaseActivity의 mContext, 어떤 리스트를 보여줄건지, 목록변수의 이름
        // lateinit var로 초기화를 미뤘던 변수의 실제 초기화 코드
        // (mContext=어떤화면에서?, romm_list_item=어떤모양으로그릴지?, mRoomList=어떤목록?)
        mRoomAdapter = RoomAdapter(mContext, R.layout.room_list_item, mRoomList)

        // 객체화된 adapter변수를 리스트뷰의 어댑터로 지정
        // 실제 목록을 리스트뷰에 뿌려준다.
        roomListView.adapter = mRoomAdapter
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&lt;b&gt;8. Adapter 클래스를 액티비티의 리스트뷰와 연결&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7458673b-ac68-4fa5-a400-61558ce3cdc7&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;RoomAdapter 클래스를 setValues에 만들었던 mRoomList와 연결하고 그것을 실제 화면에 보일 수 있도록 리스트뷰에 연결 시켜줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-eca23290-7e3a-4952-a7cf-a2d7539998b8&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​* 여기까지하면 리스트뷰에 아까 예시로 지정해둔 문구들이 줄줄이 생성되는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3f31b290-49c4-4bcf-90e0-4125a83c67cf&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;* 참고로 실제 데이터들은 아직 반영되지 않은 상태&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a2231e57-0107-4f15-9bb8-1f21be86b5ee&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1600659110882&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_listview.adapters

import android.content.Context
import android.content.LocusId
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.ArrayAdapter
import android.widget.TextView
import com.mwsniper.review_listview.R
import com.mwsniper.review_listview.datas.Room

class RoomAdapter(
    val mContext: Context,
    val resId: Int,
    val mList: List&amp;lt;Room&amp;gt;
) : ArrayAdapter&amp;lt;Room&amp;gt;(mContext, resId, mList) {

    val inf = LayoutInflater.from(mContext)
    override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
        var tempRow = convertView
        if(tempRow == null) {
            tempRow = inf.inflate(R.layout.room_list_item, null)
        }
        val row = tempRow!!

        // 실제 데이터가 있는 목록이 반영되도록 Adapter 클래스의 getView 함수를 수정
        // 뿌려줄 row 안에 있는 텍스트 뷰 변수로 담기
        val data = mList[position]
        val price = row.findViewById&amp;lt;TextView&amp;gt;(R.id.priceTxt)
        val address = row.findViewById&amp;lt;TextView&amp;gt;(R.id.addressTxt)
        val desc = row.findViewById&amp;lt;TextView&amp;gt;(R.id.descTxt)

        price.text = &quot;${data.deposit} / ${data.monthlyRent}&quot;
        address.text = &quot;${data.address},  ${data.floor}&quot;
        desc.text = data.description

        return row
    }

}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;9. 리스트뷰의 id와 row안에있는 실제데이터 연결&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-cff71d16-eeaf-4774-9f09-87c77e573cf8&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;마지막 작업으로 리스트뷰 안에 있는 TextView id와 row의 데이터를 연결하는 작업입니다. 해당 작업을 해야 실제 데이터가 리스트뷰에 출력됩니다. 여기까지 하셨으면 이미지를 제외한 나머지 TextView가 정상적으로 출력되는 것을 확인할 수 있을겁니다. 다음 글에서는 상세화면으로 넘어가서 디테일한 정보를 보여주는 연습을 해보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>네이티브/Android</category>
      <category>코틀린 #Kotlin #AndroidListView #ListView #KotlinListView</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/109</guid>
      <comments>https://milkoon1.tistory.com/109#entry109comment</comments>
      <pubDate>Mon, 21 Sep 2020 12:32:29 +0900</pubDate>
    </item>
    <item>
      <title>Android with Kotlin : 안드로이드 기초편 - Intent 활용 전화걸기, 문자발송, 인터넷연결 등</title>
      <link>https://milkoon1.tistory.com/108</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yNgwO/btqJearqEuJ/skXwK32JN99r1tSoQ1qTt1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yNgwO/btqJearqEuJ/skXwK32JN99r1tSoQ1qTt1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yNgwO/btqJearqEuJ/skXwK32JN99r1tSoQ1qTt1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyNgwO%2FbtqJearqEuJ%2FskXwK32JN99r1tSoQ1qTt1%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;1280&quot; height=&quot;668&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이번 글에서는 옛날 Android + JAVA 했을 때 배웠었던 전화걸기, 주소링크가기 등을 Kotlin으로 해보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600654022398&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- activity_main.xml --&amp;gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&quot;
    android:padding=&quot;15dp&quot;
    tools:context=&quot;.MainActivity&quot;&amp;gt;

    &amp;lt;EditText
        android:id=&quot;@+id/phoneNumEdt&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;전화/문자를 연결할 번호 입력&quot;
        android:inputType=&quot;phone&quot;/&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/dialBtn&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;전화걸기 Dial&quot;/&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/callBtn&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;전화걸기 Call&quot;/&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/naverLinkBtn&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;네이버로가기&quot;/&amp;gt;

    &amp;lt;EditText
        android:id=&quot;@+id/linkEdt&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;주소창 입력&quot;
        android:inputType=&quot;textWebEditText&quot;
        android:singleLine=&quot;true&quot;/&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/linkBtn&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;입력한 주소로 이동&quot;/&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/kakaoPlayStoreBtn&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;카카오톡 앱 다운로드 링크&quot; /&amp;gt;
    
&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1600654110180&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_intent_call

import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 전화 다이얼걸기 - 통화연결까지는 X
        dialBtn.setOnClickListener { 
            
            // 어디에 전화를 걸건지 text 정보 받기
            val input = phoneNumEdt.text.toString()
            // Uri를 이용해서 정보 저장
            val myUri = Uri.parse(&quot;tel:${input}&quot;)
            // 전환할 정보 설정 - ACTION_DIAL
            val myIntent = Intent(Intent.ACTION_DIAL, myUri)
            // 이동
            startActivity(myIntent)
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qxFny/btqJeaycnLy/03EKDvezyKJpEPWAthwGe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qxFny/btqJeaycnLy/03EKDvezyKJpEPWAthwGe0/img.png&quot; data-origin-width=&quot;403&quot; data-origin-height=&quot;843&quot; style=&quot;width: 49.4715%; margin-right: 10px;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qxFny/btqJeaycnLy/03EKDvezyKJpEPWAthwGe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqxFny%2FbtqJeaycnLy%2F03EKDvezyKJpEPWAthwGe0%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;403&quot; height=&quot;843&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3Kk2K/btqI1KBHu7s/EH3G9i0FKaCZgq9vxMscYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3Kk2K/btqI1KBHu7s/EH3G9i0FKaCZgq9vxMscYK/img.png&quot; data-origin-width=&quot;405&quot; data-origin-height=&quot;849&quot; style=&quot;width: 49.3657%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3Kk2K/btqI1KBHu7s/EH3G9i0FKaCZgq9vxMscYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3Kk2K%2FbtqI1KBHu7s%2FEH3G9i0FKaCZgq9vxMscYK%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;405&quot; height=&quot;849&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;b&gt;1. 전화 다이얼걸기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;첫 번째로 할 내용은 전화번호 입력 후 [전화걸기 DIAL] 버튼을 클릭하면 전화가 걸려지기 전 단계까지 가는 다이얼걸기&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600654170230&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_intent_call

import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    val mContext = this
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 전화걸기 - 통화연결까지는 O
        callBtn.setOnClickListener {

            // 어디에 전화를 걸건지 text 정보 받기
            val input = phoneNumEdt.text.toString()
            val permissionListener = object : PermissionListener {
                override fun onPermissionGranted() {

                    val myUri = Uri.parse(&quot;tel:${input}&quot;)
                    val myIntent = Intent(Intent.ACTION_CALL, myUri)
                    startActivity(myIntent)

                }

                override fun onPermissionDenied(deniedPermissions: MutableList&amp;lt;String&amp;gt;?) {
                    Toast.makeText(mContext,&quot;전화 연결 권한이 거부되었습니다.&quot;, Toast.LENGTH_SHORT).show()

                }

            }

            TedPermission.with(mContext)
                .setPermissionListener(permissionListener)
                .setDeniedMessage(&quot;[설정] 에서 권한을 열어줘야 전화 연결이 가능합니다.&quot;)
                .setPermissions(Manifest.permission.CALL_PHONE)
                .check()
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​​&lt;b&gt;2. 전화 바로 걸기(집중 ★★★)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-4d855415-b41c-436b-ab71-ca875d02beb6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그 다음은 전화를 바로 걸도록 해주는 이벤트로 [전화걸기 CALL]버튼을 클릭하면 바로 DAIL처럼 진행될 줄 알았지만!! CALL에서는 추가적으로 처리해야할 내용이 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600654214429&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// AndroidManifest.xml에 추가
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;manifest xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    package=&quot;com.mwsniper.review_intent_call&quot;&amp;gt;

    &amp;lt;uses-permission android:name=&quot;android.permission.INTERNET&quot; /&amp;gt;
    &amp;lt;uses-permission android:name=&quot;android.permission.CALL_PHONE&quot; /&amp;gt;

    &amp;lt;application
        android:allowBackup=&quot;true&quot;
        android:icon=&quot;@mipmap/ic_launcher&quot;
        android:label=&quot;@string/app_name&quot;
        android:roundIcon=&quot;@mipmap/ic_launcher_round&quot;
        android:supportsRtl=&quot;true&quot;
        android:theme=&quot;@style/AppTheme&quot;&amp;gt;
        &amp;lt;activity android:name=&quot;.MainActivity&quot;&amp;gt;
            &amp;lt;intent-filter&amp;gt;
                &amp;lt;action android:name=&quot;android.intent.action.MAIN&quot; /&amp;gt;

                &amp;lt;category android:name=&quot;android.intent.category.LAUNCHER&quot; /&amp;gt;
            &amp;lt;/intent-filter&amp;gt;
        &amp;lt;/activity&amp;gt;
    &amp;lt;/application&amp;gt;
&amp;lt;/manifest&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;b&gt;1) manifests에 permission 추가해주기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b9bcb0f9-87b6-4975-bc80-6e75f1569fa2&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;전화연결은 다이얼과는 다르게 사용자의 요금과 관련된 일을 우리가 맘대로 진행하는 부분이라 그에 맞는 권한을 획득해야합니다. 그렇기에 우선 Main &amp;gt; AndroidManifest.xml 들어가셔서 permission을 추가해주기 만약 추가 안하고 앱 돌리면 앱이 죽을거에요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600654257593&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies {
    implementation fileTree(dir: &quot;libs&quot;, include: [&quot;*.jar&quot;])
    implementation &quot;org.jetbrains.kotlin:kotlin-stdlib:$kotlin_version&quot;
    implementation 'androidx.core:core-ktx:1.3.1'
    implementation 'androidx.appcompat:appcompat:1.2.0'
    implementation 'androidx.constraintlayout:constraintlayout:2.0.1'
    implementation 'gun0912.ted:tedpermission:2.2.3' //추가한 부분
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'androidx.test.ext:junit:1.1.2'
    androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;2) tedpermission 추가해주기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9b5c45bc-86dc-4335-a18e-7e6c20d49f95&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;AVD가 아닌 안드로이드 폰에서 테스트를 하시는 분들은 구글에 tedpermission을 검색하신다음 버전에 맞게 gradle에 추가해주세요. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* build.gradle은 Project와 Moudle 두 가지가 있는데 build.gradle(Module: app)에 들어가시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600654304735&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_intent_call

import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 문자발송 - 아직 내용은 없음
        smsBtn.setOnClickListener {
            val inputPhoneNum = phoneNumEdt.text.toString()
            val myUri = Uri.parse(&quot;smsto:${inputPhoneNum}&quot;)
            val myIntent = Intent(Intent.ACTION_SENDTO, myUri)

            // 문자 전송 화면 이동 시 미리 문구를 적어서 보내기
            // myIntent를 가지고 갈 때 -&amp;gt; putExtra로 데이터를 담아서 보내자
            myIntent.putExtra(&quot;sms_body&quot;, &quot;이 앱을 다운로드 받아주세요.&quot;)

            startActivity(myIntent)
        }

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;3. 문자 보내기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-69321fe9-9c21-4359-9e0d-761e2e0e19f8&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그 다음은 버튼은 안만들었지만 알아두면 좋은 SMS 문자보내기 소스. 전화랑은 살짝 다른 부분이 우선 &lt;b&gt;tel: &lt;/b&gt;이 아닌&amp;nbsp; &lt;b&gt;smsto: &lt;/b&gt;로 사용한다는 것과 문자는 당연 보내는 문구가 있으니 그것을 putExtra로 담고 보낸다는 차이점이 있답니다&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-fc5b9c59-fb37-4fbb-bc00-13bc42c5201f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1600654347637&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_intent_call

import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 인터넷 웹 연결하기 네이버
        naverLinkBtn.setOnClickListener {

            val myUri = Uri.parse(&quot;https://www.naver.com&quot;)
            val myIntent = Intent(Intent.ACTION_VIEW, myUri)
            startActivity(myIntent)
        }

        linkBtn.setOnClickListener {

            // 어디로 연결할건지 입력
            val input = linkEdt.text.toString()
            // Uri를 이용해서 정보 저장
            val myUri = Uri.parse(input)
            val myIntent = Intent(Intent.ACTION_VIEW, myUri)
            startActivity(myIntent)
        }

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;b&gt;4. 네이버로 연결하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-dd457ad0-75ca-4e13-911f-eb50020b0d0d&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;인터넷 연결은 앞서 배웠던 tel: / smsto: 와 같이 uriString에 안붙여도 되고 바로 주소창을 입력하면 됩니다. 입력한 주소를 연결하는 방법은 앞서 배웠던 입력한 전화번호로 연결하기랑 비슷한 구조이기 소스만 올리고 패스하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600654374907&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;uses-permission android:name=&quot;android.permission.INTERNET&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;참고로 인터넷도 CALL때와 비슷하게 permission을 부여해줘야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600654396622&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_intent_call

import android.content.Intent
import android.net.Uri
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 플레이 스토어 연결spdlqj
        kakaoPlayStoreBtn.setOnClickListener {

            val myUri = Uri.parse(&quot;market://details?id=com.kakao.talk&amp;amp;hl=ko&quot;)
            val myIntent = Intent(Intent.ACTION_VIEW, myUri)
            startActivity(myIntent)
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;​&lt;b&gt;5. 카카오스토어 연결하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-5fb75ed0-4825-4101-84e3-ecb30956e557&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;구글 스토어도 네이버주소와 비슷하게 해당 스토어의 주소가 있습니다. 그 주소를 입력한 다음 넘기면 끝!&lt;/span&gt;&lt;/p&gt;</description>
      <category>네이티브/Android</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/108</guid>
      <comments>https://milkoon1.tistory.com/108#entry108comment</comments>
      <pubDate>Mon, 21 Sep 2020 11:13:57 +0900</pubDate>
    </item>
    <item>
      <title>Android with Kotlin : 안드로이드 기초편 - Intent 활용 데이터 함께 화면전환</title>
      <link>https://milkoon1.tistory.com/107</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;519&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhR2lB/btqI2FNI6xd/4xtf8tBT82wa0ySo2YBEY1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhR2lB/btqI2FNI6xd/4xtf8tBT82wa0ySo2YBEY1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhR2lB/btqI2FNI6xd/4xtf8tBT82wa0ySo2YBEY1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhR2lB%2FbtqI2FNI6xd%2F4xtf8tBT82wa0ySo2YBEY1%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;1227&quot; height=&quot;519&quot; data-origin-width=&quot;1227&quot; data-origin-height=&quot;519&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;저번 글에서는 로그인 화면에 있는 [가입하기]버튼을 클릭 시 가입화면으로 화면을 이동하는 방법에 대해 공부를 해보았습니다. 이번 글에서는 화면을 전환할 때 사용하는 Intent Action에 대해 조금 더 알아보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600650035074&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// 기본적인 Intent 사용법 - 데이터 포함 안하고 이동한 상태
class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        // 가입하기 버튼을 눌렀을 때 회원가입화면으로 이동하게 버튼 클릭이벤트 만들기
        joinBtn.setOnClickListener {

            // 가입하기 버튼을 누르면 들어오는 로직
            // 회원가입(JoinActivity) 화면으로 이동하게 Intent 사용
            val myIntent = Intent(this, JoinActivity::class.java)

            // startActivity를 해야 화면이동 **
            startActivity(myIntent)
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;위의 소스는 저번 글에서 배웠던 Intent 사용 방법입니다. 우리는 val myIntent라하여 변수를 하나 생성하였고 그 안에&lt;b&gt; Intent(packageContext, 이동할 Activity::class.java) &lt;/b&gt;넣어서 화면을 이동시켜주는 startActivity를 실행시켰습니다. 하지만 이 소스에서는 어떠한 데이터도 넘기지 않고 그냥 화면이동만 했죠.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 117px;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 67.7907%; height: 10px;&quot; colspan=&quot;3&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;val myIntent(변수이름변경가능) = Intent(출발지this, 도착액티비티::class.java)&lt;br /&gt;startActivity(myIntent)&lt;br /&gt;* 실제로는 액티비티 이동이 아니라, 새 액티비티를 하나 더 만들어서 기존의 액티비티 위에 얹어주는 기능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 27px;&quot;&gt;
&lt;td style=&quot;width: 33.2558%; height: 27px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Intent&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.5349%; height: 27px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;비행기 티켓 발권(출발지/도착지가 명시)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 33px;&quot;&gt;
&lt;td style=&quot;width: 33.2558%; height: 33px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;startActivity&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.5349%; height: 33px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;실제 비행기 탑승(출발)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 47px;&quot;&gt;
&lt;td style=&quot;width: 33.2558%; height: 47px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;finish()&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 34.5349%; height: 47px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;현재 액티비티 종료&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​이번 시간에는 단순히 화면이동만 하는게 아니라 데이터도 같이 담아서 보내보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;531&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2NJMX/btqI68g6kML/mH0qyzig1gJt1ts9ISdXlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2NJMX/btqI68g6kML/mH0qyzig1gJt1ts9ISdXlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2NJMX/btqI68g6kML/mH0qyzig1gJt1ts9ISdXlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2NJMX%2FbtqI68g6kML%2FmH0qyzig1gJt1ts9ISdXlK%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;1280&quot; height=&quot;531&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;531&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​새로운 프로젝트를 생성하도록 하겠습니다. 저는 프로젝트를 Review_Intent라고 이름 짓고 생성하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-00cd6fdb-85d7-4c67-8688-2ecc6a7a8ec0&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1271&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btmRYq/btqI5yUNv8T/64W57AJUDnrVKRY6K0viZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btmRYq/btqI5yUNv8T/64W57AJUDnrVKRY6K0viZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btmRYq/btqI5yUNv8T/64W57AJUDnrVKRY6K0viZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbtmRYq%2FbtqI5yUNv8T%2F64W57AJUDnrVKRY6K0viZK%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;1271&quot; height=&quot;706&quot; data-origin-width=&quot;1271&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;* 연습내용 :&amp;nbsp;&lt;/b&gt;MainActivity에 총 3개의 버튼을 만들었는데 [액티비티로 이동]버튼은 단순 이동버튼이고 [액티비티로 메시지 들고 이동]버튼은 상단에 있는 Text 내용을 들고 이동할 버튼 그리고 마지막 [닉네임 변경]버튼은 이동한 페이지에서 변경한 닉네임을 들고 다시 MainActivity로 와서 닉네임 보이는 Text에 뿌려주는 연습을 할 계획입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600650179044&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- activity_main.xml --&amp;gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&quot;
    android:padding=&quot;15dp&quot;
    android:gravity=&quot;center&quot;
    tools:context=&quot;.MainActivity&quot;&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/moveToBtn&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginBottom=&quot;25dp&quot;
        android:text=&quot;액티비티로 이동&quot; /&amp;gt;

    &amp;lt;EditText
        android:id=&quot;@+id/messageEdt&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;화면에 전달할 메세지 입력&quot; /&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/bringToBtn&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginBottom=&quot;25dp&quot;
        android:text=&quot;액티비티로 메세지 들고 이동&quot; /&amp;gt;

    &amp;lt;TextView
        android:id=&quot;@+id/nickNameTxt&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginTop=&quot;10dp&quot;
        android:gravity=&quot;center&quot;
        android:text=&quot;닉네임 보이는 Text&quot; /&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/changeNickNameBtn&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;닉네임 변경&quot; /&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;807&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JqK1B/btqI58O6ohT/d1lZoRkANhb9PttGkTxNs0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JqK1B/btqI58O6ohT/d1lZoRkANhb9PttGkTxNs0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JqK1B/btqI58O6ohT/d1lZoRkANhb9PttGkTxNs0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJqK1B%2FbtqI58O6ohT%2Fd1lZoRkANhb9PttGkTxNs0%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;1176&quot; height=&quot;807&quot; data-origin-width=&quot;1176&quot; data-origin-height=&quot;807&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;1. 버튼을 클릭했을 때 화면이동 및 데이터를 주고받을 수 있는 화면을 새로 생성합니다. 저는 데이터를 넘겨받을 액티비티를 DataActivity로 생성하겠습니다. 정상적으로 생성하셨으면 java에는 DataActivity layout폴더에는 activity_data.xml이 생성되셨을겁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600650218218&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- activity_data.xml --&amp;gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&quot;
    android:padding=&quot;15dp&quot;
    android:gravity=&quot;center&quot;
    tools:context=&quot;.DataActivity&quot;&amp;gt;

    &amp;lt;TextView
        android:id=&quot;@+id/receivedMessageTxt&quot;
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;전달 받은 내용 출력 자리&quot;
        android:layout_marginBottom=&quot;50dp&quot;
        android:textSize=&quot;18sp&quot;/&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/goBackToMainBtn&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;메인으로 돌아가기&quot; /&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. [액티비티로 이동] 버튼은 화면만 이동하는 버튼이라 &lt;/b&gt;&lt;b&gt;출력자리에는 변경사항이 없고&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f63e20d3-a787-4cb5-a370-7c19318b38ae&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​3. 두 번째 &lt;b&gt;[액티비티로 메시지 들고 이동] 버튼은 &lt;/b&gt;&lt;b&gt;들고 갈 데이터가 있기 때문 &lt;/b&gt;&lt;b&gt;[전달받은 내용을 출력하는 자리]에 해당 내용을 &lt;/b&gt;&lt;b&gt;뿌려주는 형식&lt;/b&gt;으로 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600650257940&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_intent

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //1. 액티비티로 그냥 이동 버튼
        // moveToBtn 클릭이벤트
        moveToBtn.setOnClickListener {

            // 이동할 액티비티 경로 잡기
            val myIntent = Intent(this, DataActivity::class.java)

            // 이동하기
            startActivity(myIntent)

        }

        //2. 이동할 화면에 전달할 메시지 들고가는 버튼
        // bringToBtn
        bringToBtn.setOnClickListener {

            // 우선 들고갈 메시지 변수에 담기
            val inputMsg = messageEdt.text.toString()

            // 이동할 액티비티 경로 잡기
            val myIntent = Intent(this, DataActivity::class.java)

            // 가지고 갈 메시지를 putExtra에 담기
            myIntent.putExtra(&quot;message&quot;, inputMsg)

            // 이동하기
            startActivity(myIntent)
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​​4. 메시지 전달하는 버튼(bringToBtn)은 그냥 화면 이동하는 버튼과는 달리 데이터를 담아야하기 때문에 Intent 변수에 .putExtra(&quot;담을데이터name&quot;, 데이터) 형식으로 보내기 전 넣어줘야 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600650290408&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_intent

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_data.*

class DataActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_data)

        // 액티비티에 들어오자마자 바로 첨부된 값을 받아서 텍스트뷰에 반영
        val receivedMessage = intent.getStringExtra(&quot;message&quot;)
        receivedMessageTxt.text = receivedMessage

        goBackToMainBtn.setOnClickListener {
            // 메인으로 돌아기기 버튼을 누른 경우 finish()
            finish()
        }

    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;5. 그 다음은 데이터를 받는 화면에서 처리해줘야합니다 intent.getStringExtra(&quot;데이터이름&quot;)을 사용하여 보냈던 메시지를 변수 담고 TextView에 뿌려주면 성공!!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;709&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zD73w/btqJbxAkK5c/aUWKNxt67lQGKXOZx5fUNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zD73w/btqJbxAkK5c/aUWKNxt67lQGKXOZx5fUNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zD73w/btqJbxAkK5c/aUWKNxt67lQGKXOZx5fUNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzD73w%2FbtqJbxAkK5c%2FaUWKNxt67lQGKXOZx5fUNK%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;1273&quot; height=&quot;709&quot; data-origin-width=&quot;1273&quot; data-origin-height=&quot;709&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그 다음은 이제 마지막 연습인 닉네임 변경하는 것에 대해 공부해보도록 하겠습니다. 우선 닉네임변경 처리하는 화면을 추가로 생성하도록 하겠습니다. 해당 액티비티의 이름은 EditNicknameActivity&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1600650341785&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- activity_edit_nickname.xml --&amp;gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&quot;
    android:padding=&quot;15dp&quot;
    tools:context=&quot;.EditNicknameActivity&quot;&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;변경할 닉네임&quot; /&amp;gt;

    &amp;lt;EditText
        android:id=&quot;@+id/nickNameEdt&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;새 닉네임을 입력해주세요.&quot;
        android:singleLine=&quot;true&quot;/&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/okBtn&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;입력 완료&quot; /&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1600650354208&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_intent

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        //3. 닉네임 변경 버튼 클릭
        //changeNickNameBtn
        changeNickNameBtn.setOnClickListener {

            // 닉네임 변경 액티비티로 이동한다고 명시
            val myIntent = Intent(this, EditNicknameActivity::class.java)

            // 지금까지한 내용과 다르게 여기서는 결과값을 받고 다시 돌아와야함
            // 그래서 기존에는 startActivity를 사용했지만 여기서는 startActivityForResult를 사용함
            // requestCode는 저와 같이 직접 입력하지 않고 멤버변수로 담아서 가독성을 높여주는걸 추천
            startActivityForResult(myIntent, 200)
        }
    }

    // 결과를 받아올 때 실행되는 함수 오버라이딩
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        // resultCode를 우선 검사해야합니다.
        // 화면에 들어가기 전 200이라는 resultCode를 주어줬는데 해당 값이 맞는지 체크
        if(requestCode == 200)
        {
            //setResult(Activity.RESULT_OK, resultsIntent) 에서 부여했던 result_OK 값이 맞는지
            if(resultCode == Activity.RESULT_OK)
            {
                // 모든 것이 맞으면 새로 변경한 닉네임으로 text반영
                val newNickName = data?.getStringExtra(&quot;newNickname&quot;)

                // 메인화면에 있는 닉네임 TextView 변경
                nickNameTxt.text = newNickName
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1600650363502&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.mwsniper.review_intent

import android.app.Activity
import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_edit_nickname.*

class EditNicknameActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_edit_nickname)

        // 닉네임 수정 후 완료버튼을 눌렀을 때
        okBtn.setOnClickListener {

            // 돌아갈 때 첨부할 데이터를 들고 있어주는 Intent와는 별개로 생성
            val resultsIntent = Intent()

            // 입력한 닉네임을 resultsIntent에 첨부 = putExtra
            val input = nickNameEdt.text.toString()
            resultsIntent.putExtra(&quot;newNickname&quot;, input)

            // OK 버튼을 눌렀을 때 데이터 담고있는 resultsIntent를 갖고 복귀처리
            // 기존에는 그냥 finish()처리만 해줬지만 이번에는
            // 결과값을 들고 가야하기에 꼭 필요
            // public static final int RESULT_OK = -1;
            setResult(Activity.RESULT_OK, resultsIntent)

            // 복귀한다는 의미
            finish()
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​닉네임변경 화면으로 이동 후 새로 변경할 닉네임을 입력한 뒤 OK버튼을 누르면 새로 변경할 닉네임 데이터를 resultsIntent에 담고 setResult 함수로 복귀처리 하는 것을 알 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600650388449&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;  // 결과를 받아올 때 실행되는 함수 오버라이딩
    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)

        // resultCode를 우선 검사해야합니다.
        // 화면에 들어가기 전 200이라는 resultCode를 주어줬는데 해당 값이 맞는지 체크
        if(requestCode == 200)
        {
            //setResult(Activity.RESULT_OK, resultsIntent) 에서 부여했던 result_OK 값이 맞는지
            if(resultCode == Activity.RESULT_OK)
            {
                // 모든 것이 맞으면 새로 변경한 닉네임으로 text반영
                val newNickName = data?.getStringExtra(&quot;newNickname&quot;)

                // 메인화면에 있는 닉네임 TextView 변경
                nickNameTxt.text = newNickName
            }
        }
    }
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;복귀하면 결과값을 받아올 때 실행되는 오버라이딩 함수 MainActivity에 있어야하는 함수이고 해당 함수를 보면 알 수 있듯이 내가 요청한내용이 맞는지에 대한 requestCode == 200체크와 해당 resultCode가 정상인지에 대한 유무체크를 한 다음 둘다 정상로직을 탔을 때 새로 변경한 닉네임을 적용하는 것을 확인할 수 있습니다.&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>네이티브/Android</category>
      <category>안드로이드코틀린 #코틀린 #Kotlin #안드로이드Intent #코틀린Intent</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/107</guid>
      <comments>https://milkoon1.tistory.com/107#entry107comment</comments>
      <pubDate>Mon, 21 Sep 2020 10:07:03 +0900</pubDate>
    </item>
    <item>
      <title>Android with Kotlin : 안드로이드 기초편 - Intent 기초 setOnClickListener 이벤트</title>
      <link>https://milkoon1.tistory.com/106</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;681&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TBbOj/btqJgN3K8Tl/CI5btbtO4vKRaX3RCGDIz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TBbOj/btqJgN3K8Tl/CI5btbtO4vKRaX3RCGDIz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TBbOj/btqJgN3K8Tl/CI5btbtO4vKRaX3RCGDIz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTBbOj%2FbtqJgN3K8Tl%2FCI5btbtO4vKRaX3RCGDIz0%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;1280&quot; height=&quot;681&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;681&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;저번 글에서는 회원가입 화면을 만드는 UI에 관련된 내용을 다루어보았습니다. 이번 글에서는 코틀린의 이벤트처리에 대해 배워보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 109px;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 69px;&quot;&gt;
&lt;td style=&quot;height: 69px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이벤트명&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 69px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;개념&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 69px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;사용법&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;height: 10px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;setOnClickListener&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 10px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;사용자가 해당 버튼을 누르면 실행할 내용을 지정해주는 코드&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 10px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이벤트를붙여줄버튼.setOnClickListener {&lt;br /&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;// 버튼이 눌리면 실행 해줄 코드들을 작성.&lt;br /&gt;&lt;/span&gt;}&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 30px;&quot;&gt;
&lt;td style=&quot;height: 30px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Intent&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 30px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;하나의 액티비티에서 다른 액티비티를 불러낼 때 사용하는 코드(이동)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 30px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;val myIntent(변수이름변경가능) = Intent(출발지this, 도착액티비티::class.java) &lt;br /&gt;startActivity(myIntent)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p id=&quot;SE-1aef5f5e-7cfc-4a21-8b8a-b3c36fce4b03&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&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;1199&quot; data-origin-height=&quot;825&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lD3YT/btqI7wPtw2I/bkC567p3Y80xMtq5nRD1k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lD3YT/btqI7wPtw2I/bkC567p3Y80xMtq5nRD1k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lD3YT/btqI7wPtw2I/bkC567p3Y80xMtq5nRD1k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlD3YT%2FbtqI7wPtw2I%2FbkC567p3Y80xMtq5nRD1k0%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;1199&quot; height=&quot;825&quot; data-origin-width=&quot;1199&quot; data-origin-height=&quot;825&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;* 연습내용 : &lt;/b&gt;MainActivity(로그인화면)에서 가입하기 버튼을 클릭했을 때 새로 생성한 JoinActivity(회원가입화면)으로 이동하는 로직을 짜보겠습니다. 해당 연습에서는 button을 클릭할 때 이벤트를 발생시켜야하고, 화면 이동도 필요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600649345250&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- activity_main.xml (로그인화면) --&amp;gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:padding=&quot;15dp&quot;
    android:orientation=&quot;vertical&quot;
    tools:context=&quot;.MainActivity&quot;&amp;gt;

    &amp;lt;LinearLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:orientation=&quot;horizontal&quot;
        android:gravity=&quot;center&quot;&amp;gt;

        &amp;lt;ImageView
            android:layout_width=&quot;150dp&quot;
            android:layout_height=&quot;150dp&quot;
            android:src=&quot;@drawable/dolphin_logo_01&quot; /&amp;gt;

    &amp;lt;/LinearLayout&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;아이디&quot;
        android:layout_marginTop=&quot;20dp&quot;
        android:textSize=&quot;18sp&quot;/&amp;gt;

    &amp;lt;EditText
        android:id=&quot;@+id/idEdt&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;이메일 양식으로 입력&quot;
        android:inputType=&quot;textEmailAddress&quot;/&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:textSize=&quot;18sp&quot;
        android:text=&quot;비밀번호&quot;
        android:layout_marginTop=&quot;25dp&quot; /&amp;gt;

    &amp;lt;EditText
        android:id=&quot;@+id/pwEdt&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;비밀번호 입력&quot;
        android:inputType=&quot;textPassword&quot;/&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/loginBtn&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;로그인&quot; /&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;0dp&quot;
        android:layout_weight=&quot;1&quot; /&amp;gt;

    &amp;lt;Button
        android:id=&quot;@+id/joinBtn&quot;
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;가입하기&quot; /&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1600649358419&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- activity_join.xml (회원가입화면) --&amp;gt;
&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&quot;
    android:gravity=&quot;top&quot;
    android:padding=&quot;15dp&quot;
    android:background=&quot;#FFFFFF&quot;
    tools:context=&quot;.JoinActivity&quot;&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;아이디&quot;
        android:layout_marginTop=&quot;15dp&quot;
        android:textSize=&quot;16sp&quot;
        android:textStyle=&quot;bold&quot;/&amp;gt;

    &amp;lt;EditText
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;이메일 양식으로 입력하세요.&quot;
        android:inputType=&quot;textEmailAddress&quot;/&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginTop=&quot;15dp&quot;
        android:textSize=&quot;16sp&quot;
        android:textStyle=&quot;bold&quot;
        android:text=&quot;비밀번호&quot;/&amp;gt;

    &amp;lt;EditText
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;비밀번호를 입력하세요.&quot;
        android:inputType=&quot;textPassword&quot; /&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginTop=&quot;15dp&quot;
        android:textSize=&quot;16sp&quot;
        android:textStyle=&quot;bold&quot;
        android:text=&quot;닉네임&quot;/&amp;gt;

    &amp;lt;EditText
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;한글/영어 등을 한 줄로 입력하세요.&quot;
        android:singleLine=&quot;true&quot;/&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginTop=&quot;15dp&quot;
        android:textSize=&quot;16sp&quot;
        android:textStyle=&quot;bold&quot;
        android:text=&quot;추천인&quot;/&amp;gt;

    &amp;lt;EditText
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;추천한 사람의 닉네임으로 검색하세요. (준비중)&quot;
        android:singleLine=&quot;true&quot;
        android:enabled=&quot;false&quot;
        android:imeOptions=&quot;actionSearch&quot;/&amp;gt;

    &amp;lt;RadioGroup
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:visibility=&quot;gone&quot;
        android:layout_marginTop=&quot;15dp&quot;
        android:orientation=&quot;horizontal&quot;&amp;gt;

        &amp;lt;RadioButton
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;만 14세 미만&quot; /&amp;gt;

        &amp;lt;RadioButton
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;만 14세 이상&quot; /&amp;gt;

        &amp;lt;RadioButton
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;외국인&quot; /&amp;gt;
    &amp;lt;/RadioGroup&amp;gt;

    &amp;lt;CheckBox
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginTop=&quot;15dp&quot;
        android:text=&quot;이용약관에 동의합니다.&quot;
        android:checked=&quot;true&quot;/&amp;gt;

    &amp;lt;CheckBox
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:enabled=&quot;false&quot;
        android:text=&quot;마케팅 활용에 동의합니다.&quot;/&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;0dp&quot;
        android:layout_weight=&quot;1&quot;/&amp;gt;

    &amp;lt;LinearLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:orientation=&quot;horizontal&quot;
        android:gravity=&quot;center&quot;&amp;gt;

        &amp;lt;ImageView
            android:layout_width=&quot;120dp&quot;
            android:layout_height=&quot;120dp&quot;
            android:src=&quot;@drawable/dolphin_logo_01&quot;
            android:scaleType=&quot;centerCrop&quot;/&amp;gt;

    &amp;lt;/LinearLayout&amp;gt;

    &amp;lt;LinearLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:orientation=&quot;horizontal&quot;&amp;gt;

        &amp;lt;Button
            android:layout_width=&quot;0dp&quot;
            android:layout_weight=&quot;1&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;취소&quot;/&amp;gt;

        &amp;lt;Button
            android:layout_width=&quot;0dp&quot;
            android:layout_weight=&quot;1&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;회원가입&quot;/&amp;gt;

    &amp;lt;/LinearLayout&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EoMBf/btqJbxUFB7z/gQQ4rzrba8qJwxICjDti60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EoMBf/btqJbxUFB7z/gQQ4rzrba8qJwxICjDti60/img.png&quot; data-origin-width=&quot;718&quot; data-origin-height=&quot;765&quot; style=&quot;width: 50.0921%; margin-right: 10px;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EoMBf/btqJbxUFB7z/gQQ4rzrba8qJwxICjDti60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEoMBf%2FbtqJbxUFB7z%2FgQQ4rzrba8qJwxICjDti60%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;718&quot; height=&quot;765&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mSVTl/btqI7wIIjxz/gd7LIDV19nLOgnsqiXvnck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mSVTl/btqI7wIIjxz/gd7LIDV19nLOgnsqiXvnck/img.png&quot; data-origin-width=&quot;706&quot; data-origin-height=&quot;773&quot; style=&quot;width: 48.7451%;&quot; data-is-animation=&quot;false&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mSVTl/btqI7wIIjxz/gd7LIDV19nLOgnsqiXvnck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmSVTl%2FbtqI7wIIjxz%2Fgd7LIDV19nLOgnsqiXvnck%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;706&quot; height=&quot;773&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;앞서 말씀드렸다시피 처음 Main화면에 들어왔을 때 가입하기 버튼을 클릭하면 2번째 페이지(회원가입)화면으로 이동하는 setOnClick이벤트입니다. 안드로이드 / 코틀린에서는 setOnClickListener을 사용해서 이벤트를 태웁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1600649429511&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// MainActivity.kt
package com.example.myappwithgit

import android.content.Intent
import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_main.*

class MainActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)


        // 가입하기 버튼을 눌렀을 때 회원가입화면으로 이동하게 버튼 클릭이벤트 만들기
        joinBtn.setOnClickListener {

            // 가입하기 버튼을 누르면 들어오는 로직
            // 회원가입(JoinActivity) 화면으로 이동하게 Intent 사용
            val myIntent = Intent(this, JoinActivity::class.java)

            // startActivity를 해야 화면이동
            startActivity(myIntent)
        }

    }// onCreate
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1600649440724&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// JoinAcitivity.kt
package com.example.myappwithgit

import androidx.appcompat.app.AppCompatActivity
import android.os.Bundle
import kotlinx.android.synthetic.main.activity_join.*

class JoinActivity : AppCompatActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_join)

        cancelBtn.setOnClickListener {

            // MainActivity에서 넘어온 Activity를 종료하고 싶으면
            finish()
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;236&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cmyaa/btscSDkkd1b/aeBi8nq2SCaHveNZKS8760/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cmyaa/btscSDkkd1b/aeBi8nq2SCaHveNZKS8760/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cmyaa/btscSDkkd1b/aeBi8nq2SCaHveNZKS8760/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCmyaa%2FbtscSDkkd1b%2FaeBi8nq2SCaHveNZKS8760%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;1224&quot; height=&quot;236&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;236&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;※ kotlinx.android.synthetic.main.activity_main.*이 없어서 연결이 안된다면 아래와 같이 해결하시면 됩니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;app &amp;gt; build.gradle로 들어가서 plugins에 &lt;b&gt;'kotlin-android-extensions'&lt;/b&gt;를 추가합니다. 그리고 망치모양의 Sync Now(=Make Project)로 다시 빌드하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; style=&quot;background-color: #2b2b2b; color: #a9b7c6;&quot; data-ke-language=&quot;kotlin&quot;&gt;&lt;code&gt;plugins {
    id 'com.android.application'
    id 'org.jetbrains.kotlin.android'
    id 'kotlin-android'
    id 'kotlin-android-extensions' // 해당 내용 추가
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;[2023-04-26기준] 위와 같이 해결하고자 하였으나, &lt;/span&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;The 'kotlin-android-extensions' Gradle plugin is no longer supported. 라는 또다른 오류가 발생하네요. 더이상 extensions 플러그인을 서포트하지 않는다는 오류인데 3년 전에 사용했던 플러그인이라 지금 기준에서는 어떻게 바뀌었는지 구글링이 필요할 것 같습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>네이티브/Android</category>
      <category>안드로이드 #안드로이드코틀린</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/106</guid>
      <comments>https://milkoon1.tistory.com/106#entry106comment</comments>
      <pubDate>Mon, 21 Sep 2020 09:51:07 +0900</pubDate>
    </item>
    <item>
      <title>Android with Kotlin : 안드로이드 기초편 - 회원가입 화면(UI) 만들기</title>
      <link>https://milkoon1.tistory.com/105</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;677&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Bh6Iq/btqI5z7eyGe/n4MMKC16CfuiTe4GkGm3qk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Bh6Iq/btqI5z7eyGe/n4MMKC16CfuiTe4GkGm3qk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Bh6Iq/btqI5z7eyGe/n4MMKC16CfuiTe4GkGm3qk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBh6Iq%2FbtqI5z7eyGe%2Fn4MMKC16CfuiTe4GkGm3qk%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;1280&quot; height=&quot;677&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;677&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​안드로이드 프로젝트를 처음 만들었을 때 우리는 activity_main.xml과 MainActivity.kt 파일을 확인할 수 있습니다. 이 두 파일의 차이점은 무엇일까요? 단순하게 얘기하면 xml 파일은 text, button등을 다룰 수 있는 디자인과 관련된 파일이고요. kt 파일은 button등을 클릭했을 때 동작과 관련된 파일이라고 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 432px;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 15px;&quot;&gt;
&lt;td style=&quot;height: 15px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;종류&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 15px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;폴더&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 15px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;내용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 69px;&quot;&gt;
&lt;td style=&quot;height: 324px;&quot; colspan=&quot;1&quot; rowspan=&quot;4&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;app&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 69px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;manifests&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 69px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;앱의 정보 사항들을 담아두는 xml 파일&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 93px;&quot;&gt;
&lt;td style=&quot;height: 93px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;java&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 93px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;앱이 화면에 뜨고 난 이후의 동작 로직을 작성하는 폴더 (kt파일들이 있는 곳)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 93px;&quot;&gt;
&lt;td style=&quot;height: 93px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;res &amp;gt; drawable&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 93px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;화면에 배치될 [그림 파일]이 모여있는 폴더&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 69px;&quot;&gt;
&lt;td style=&quot;height: 69px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;res &amp;gt; layout&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 69px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;앱 [화면의 구조]를 결정하는 xml파일&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 93px;&quot;&gt;
&lt;td style=&quot;height: 93px;&quot; colspan=&quot;2&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;gradle scripts&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 93px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;프로젝트의 개발관련 주요 설정 / 라이브러리 사용목록 편집&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​​동작과 관련된 kt 파일보다 [res] - [layout] 폴더에 가서 activity_main.xml에 우리가 만들 앱의 디자인부터 하도록 하겠습니다.&lt;/span&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;1280&quot; data-origin-height=&quot;846&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oE3SC/btqI9pifTZg/nxo3UWufjdlCiG1NnkYd70/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oE3SC/btqI9pifTZg/nxo3UWufjdlCiG1NnkYd70/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oE3SC/btqI9pifTZg/nxo3UWufjdlCiG1NnkYd70/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoE3SC%2FbtqI9pifTZg%2Fnxo3UWufjdlCiG1NnkYd70%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;1280&quot; height=&quot;846&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;846&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​​&lt;b&gt;제가 이번 글에서 만들 화면 디자인입니다.&lt;/b&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FDKNX/btqI5BYKLb7/VabdfS0jVrD9oFsJQC0NjK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FDKNX/btqI5BYKLb7/VabdfS0jVrD9oFsJQC0NjK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FDKNX/btqI5BYKLb7/VabdfS0jVrD9oFsJQC0NjK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFDKNX%2FbtqI5BYKLb7%2FVabdfS0jVrD9oFsJQC0NjK%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;1280&quot; height=&quot;650&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1600648862685&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;androidx.constraintlayout.widget.ConstraintLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    tools:context=&quot;.MainActivity&quot;&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;Hello World!&quot;
        app:layout_constraintBottom_toBottomOf=&quot;parent&quot;
        app:layout_constraintLeft_toLeftOf=&quot;parent&quot;
        app:layout_constraintRight_toRightOf=&quot;parent&quot;
        app:layout_constraintTop_toTopOf=&quot;parent&quot; /&amp;gt;

&amp;lt;/androidx.constraintlayout.widget.ConstraintLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1600648885024&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;!--
ConstraintLayout이 아닌 LinearLayout으로 하는 이유
LinearLayout 안에 있는 내용물들은 무조건 일렬로 줄을 서서 배치가 되기에 해당 Layout으로 사용할 예정
 --&amp;gt;
&amp;lt;LinearLayout xmlns:android=&quot;http://schemas.android.com/apk/res/android&quot;
    xmlns:app=&quot;http://schemas.android.com/apk/res-auto&quot;
    xmlns:tools=&quot;http://schemas.android.com/tools&quot;
    android:layout_width=&quot;match_parent&quot;
    android:layout_height=&quot;match_parent&quot;
    android:orientation=&quot;vertical&quot; //내용물들을 가로(horizontal) / 세로(vertical)로 배치 결정하는 옵션
    android:gravity=&quot;top&quot;          //내용물들을 top으로 설정. 만약 bottom으로 설정할 시 화면 제일 밑으로 내용물들이 이동
    android:padding=&quot;15dp&quot;         //margin과 비슷한 padding은 Layout으로부터 padding값만큼 내용물들에게 내부 여백을 줌
    android:background=&quot;#FFFFFF&quot;   //배경색을 설정
    tools:context=&quot;.MainActivity&quot;&amp;gt;

   &amp;lt;TextView //사용자에게 문장을 보여주기만 할 때 사용
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;아이디&quot;        //text에 보여줄 내용
        android:textColor=&quot;#FF0000&quot;  //글씨색 설정
        android:textStyle=&quot;bold&quot;     //글씨의 스타일 설정
        android:textSize=&quot;20sp&quot;/&amp;gt;    //글씨의 크기를 설정

    &amp;lt;EditText //사용자에게 값을 받아야할 때 사용
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;이메일 양식으로 입력하세요.&quot; //사용자에게 입력값에 대한 안내를 해주는 메시지
        android:inputType=&quot;textEmailAddress&quot;/&amp;gt;    //어떤 데이터를 입력할지에 따라 키보드에 보여주는 양식이 다름.

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginTop=&quot;5dp&quot;
        android:text=&quot;비밀번호&quot;/&amp;gt;

    &amp;lt;EditText
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;비밀번호를 입력하세요.&quot;
        android:inputType=&quot;textPassword&quot; /&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginTop=&quot;5dp&quot;
        android:text=&quot;닉네임&quot;/&amp;gt;

    &amp;lt;EditText
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;한글/영어 등을 한 줄로 입력하세요.&quot;
        android:singleLine=&quot;true&quot;/&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:layout_marginTop=&quot;5dp&quot;
        android:text=&quot;추천인&quot;/&amp;gt;

    &amp;lt;EditText
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:hint=&quot;추천한 사람의 닉네임으로 검색하세요. (준비중)&quot;
        android:singleLine=&quot;true&quot;          //inputType이 따로 지정되지 않은 상태에서 문장을 한줄만 받고 싶을 때 설정
        android:enabled=&quot;false&quot;            //사용을 하는지 안하는지를 설정
        android:imeOptions=&quot;actionSearch&quot;/&amp;gt;//singleLine이 true일 때 엔터키의 종류 변경(search, done, go 등)

    &amp;lt;RadioGroup //만약 여러 라디오버튼 중 하나만 선택하는 목록을 만드는경우 RadioGroup을 이용하면 쉽게 가능
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:visibility=&quot;gone&quot;          //visibility:보임, invisibility:안보이지만 공간은 확보, gone:안보임+공간날림
        android:orientation=&quot;horizontal&quot;&amp;gt;

        &amp;lt;RadioButton
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;만 14세 미만&quot; /&amp;gt;

        &amp;lt;RadioButton
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;만 14세 이상&quot; /&amp;gt;

        &amp;lt;RadioButton
            android:layout_width=&quot;wrap_content&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;외국인&quot; /&amp;gt;
    &amp;lt;/RadioGroup&amp;gt;

    &amp;lt;CheckBox 
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:text=&quot;이용약관에 동의합니다.&quot;
        android:checked=&quot;true&quot;/&amp;gt;

    &amp;lt;CheckBox
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:enabled=&quot;false&quot;
        android:text=&quot;마케팅 활용에 동의합니다.&quot;/&amp;gt;

    &amp;lt;TextView
        android:layout_width=&quot;wrap_content&quot;
        android:layout_height=&quot;0dp&quot;
        android:layout_weight=&quot;1&quot;/&amp;gt;

    &amp;lt;LinearLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:orientation=&quot;horizontal&quot;
        android:gravity=&quot;center&quot;&amp;gt;

        &amp;lt;ImageView
            android:layout_width=&quot;120dp&quot;
            android:layout_height=&quot;120dp&quot;
            android:src=&quot;@drawable/dolphin_logo_01&quot;
            android:scaleType=&quot;centerCrop&quot;/&amp;gt;

    &amp;lt;/LinearLayout&amp;gt;

    &amp;lt;LinearLayout
        android:layout_width=&quot;match_parent&quot;
        android:layout_height=&quot;wrap_content&quot;
        android:orientation=&quot;horizontal&quot;&amp;gt;

        &amp;lt;Button
            android:layout_width=&quot;0dp&quot;
            android:layout_weight=&quot;1&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;취소&quot;/&amp;gt;

        &amp;lt;Button
            android:layout_width=&quot;0dp&quot;
            android:layout_weight=&quot;1&quot;
            android:layout_height=&quot;wrap_content&quot;
            android:text=&quot;회원가입&quot;/&amp;gt;

    &amp;lt;/LinearLayout&amp;gt;

&amp;lt;/LinearLayout&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;* 지금부터 소스창에서 보이는 //주석은 제거를 해야 &lt;/b&gt;&lt;b&gt;빌드가 정상적으로 처리되는 주석입니다. &lt;/b&gt;&lt;b&gt;해당 주석은 이해하는데에 도움을 드리고자 &lt;/b&gt;&lt;b&gt;제가 넣은 주석입니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d41ab1c3-96ca-468b-8c2b-04b6a72f1588&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;TextView와 EditText를 각각 생성해보았는데 만약 둘이 너무 붙어있고 TextView밑에 EditText를 놓고 싶다면, LinearLayout의 속성 중 하나인 orientation을 사용하면 됩니다. 그 외 나머지 내용들은 소스를 참고하시면 좋을듯 싶습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>네이티브/Android</category>
      <category>안드로이드공부 #코틀린공부 #안드로이드코틀린</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/105</guid>
      <comments>https://milkoon1.tistory.com/105#entry105comment</comments>
      <pubDate>Mon, 21 Sep 2020 09:42:20 +0900</pubDate>
    </item>
    <item>
      <title>Android with Kotlin : 안드로이드 스튜디오 GitHub 연동해서 소스관리</title>
      <link>https://milkoon1.tistory.com/104</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1073&quot; data-origin-height=&quot;760&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OLqus/btqI5SzgBy9/cR7mK4mU65haA8sm2oEL0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OLqus/btqI5SzgBy9/cR7mK4mU65haA8sm2oEL0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OLqus/btqI5SzgBy9/cR7mK4mU65haA8sm2oEL0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOLqus%2FbtqI5SzgBy9%2FcR7mK4mU65haA8sm2oEL0K%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;1073&quot; height=&quot;760&quot; data-origin-width=&quot;1073&quot; data-origin-height=&quot;760&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​안드로이드 스튜디오를 통해서 우리는 git / gitHub를 사용할 수 있는데 실제 사용하기에 앞서 git설치 및 세팅하는 방법에 대해서도 같이 포스팅하도록 할게요~&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9465ea57-0220-4ff9-89dc-4dc45f2c0eec&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. 우선 git부터 설치를 진행하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1600647697947&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Git - Downloads&quot; data-og-description=&quot;Downloads Mac OS X Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific &quot; data-og-host=&quot;git-scm.com&quot; data-og-source-url=&quot;https://git-scm.com/downloads&quot; data-og-url=&quot;https://git-scm.com/downloads&quot; data-og-image=&quot;&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://git-scm.com/downloads&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://git-scm.com/downloads&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Git - Downloads&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Downloads Mac OS X Windows Linux/Unix Older releases are available and the Git source repository is on GitHub. GUI Clients Git comes with built-in GUI tools (git-gui, gitk), but there are several third-party tools for users looking for a platform-specific&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;git-scm.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;위의 링크 또는 구글에 git download를 검색하시면 다운로드 사이트로 바로 접속이 가능하고요. 본인의 OS 사양에 맞는걸로 설치 진행하시면 됩니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;456&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBDYtV/btqI7xnizEX/OOEIUBQahTOsEwREvOqY40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBDYtV/btqI7xnizEX/OOEIUBQahTOsEwREvOqY40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBDYtV/btqI7xnizEX/OOEIUBQahTOsEwREvOqY40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBDYtV%2FbtqI7xnizEX%2FOOEIUBQahTOsEwREvOqY40%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;785&quot; height=&quot;456&quot; data-origin-width=&quot;785&quot; data-origin-height=&quot;456&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;만약 검색창에 git bash라는 앱이 보이시면 git은 정상적으로 설치완료!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;499&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/PuSwY/btqI9owSMrq/OOEvvYsvnJvRJA59DKsnj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/PuSwY/btqI9owSMrq/OOEvvYsvnJvRJA59DKsnj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/PuSwY/btqI9owSMrq/OOEvvYsvnJvRJA59DKsnj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPuSwY%2FbtqI9owSMrq%2FOOEvvYsvnJvRJA59DKsnj0%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;1280&quot; height=&quot;499&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;499&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. gitHub 회원가입하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1600647857370&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Build software better, together&quot; data-og-description=&quot;GitHub is where people build software. More than 50 million people use GitHub to discover, fork, and contribute to over 100 million projects.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/&quot; data-og-url=&quot;https://github.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/btOlBh/hyHyRNNEFN/Z1jkI95291tu1Kd6GzuVcK/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200,https://scrap.kakaocdn.net/dn/sDW1k/hyHASxxES2/nz7bjyRqEk2TgRONLJaqdk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/pqXp1/hyHu40wCSt/EhGw2crNUhDHzFVxY1kinK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://github.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/btOlBh/hyHyRNNEFN/Z1jkI95291tu1Kd6GzuVcK/img.png?width=1200&amp;amp;height=1200&amp;amp;face=0_0_1200_1200,https://scrap.kakaocdn.net/dn/sDW1k/hyHASxxES2/nz7bjyRqEk2TgRONLJaqdk/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/pqXp1/hyHu40wCSt/EhGw2crNUhDHzFVxY1kinK/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; data-ke-size=&quot;size16&quot;&gt;Build software better, together&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;GitHub is where people build software. More than 50 million people use GitHub to discover, fork, and contribute to over 100 million projects.&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 style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​git이란 우리가 만드는 앱의 코드를 버전별로 관리하는 도구로써 git을 사용하기 위해서는 gitHub 사이트에 회원가입을 해야 합니다. 만약 본인이 gitHub라는 것을 한번도 사용한 적이 없다고 한다면 gitHub 사이트에 들어가셔서 회원가입을 진행해주세요&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e640bf3a-de93-4277-b97c-fc7e1fab9c49&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;* 참고로 회원가입할 때 이메일 인증 완료도 해야합니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ca5a2179-4d99-439f-8d89-8e5829351c9b&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이메일인증을 완료해야지 안드로이드스튜디오에 연동이 가능합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ea4ab6e8-c817-4ec6-ab60-fd8e04d6d89f&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;375&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/chLGDv/btqI5BLd5sr/iyKphYHIIOHu34DkiLKdxK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/chLGDv/btqI5BLd5sr/iyKphYHIIOHu34DkiLKdxK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/chLGDv/btqI5BLd5sr/iyKphYHIIOHu34DkiLKdxK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FchLGDv%2FbtqI5BLd5sr%2FiyKphYHIIOHu34DkiLKdxK%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;582&quot; height=&quot;375&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;375&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p id=&quot;SE-c4172a9d-45ac-4105-a0f2-9619668fe59e&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. git bash 실행해서 이름, 이메일 설정하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-be920016-53f8-4b8a-b59a-369859c7d1dd&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그 다음은 아까 설치한 git bash를 실행시켜서 이름과 이메일을 설정하도록 합시다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1600647925854&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- list 검색하기
git config --list

-- 본인이름 변경
git config --global user.name &quot;깃허브때설정한본인이름&quot;
-- 본인이메일 변경
git config --global user.email &quot;깃허브때설정한본인이메일&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bruvD0/btqI4dJ8MKU/nkpvGZjk1ICr0MqBhK2k7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bruvD0/btqI4dJ8MKU/nkpvGZjk1ICr0MqBhK2k7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bruvD0/btqI4dJ8MKU/nkpvGZjk1ICr0MqBhK2k7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbruvD0%2FbtqI4dJ8MKU%2FnkpvGZjk1ICr0MqBhK2k7k%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;1280&quot; height=&quot;358&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&lt;b&gt;4. 안드로이드 스튜디오 git 연동하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2da17a1c-0500-4319-8aae-38711d7a65e3&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;git연동은 새로운 프로젝트마다 한번씩 해주면 됩니다 제일 상단 탭 중&lt;b&gt; [VCS] - [Import into Version Control] &lt;/b&gt;&lt;b&gt;- [Share Project on GitHub]&lt;/b&gt;를 선택&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uNLE0/btqI5z7eg0k/e8qKRidhNAVks1PwmD8Z0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uNLE0/btqI5z7eg0k/e8qKRidhNAVks1PwmD8Z0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uNLE0/btqI5z7eg0k/e8qKRidhNAVks1PwmD8Z0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuNLE0%2FbtqI5z7eg0k%2Fe8qKRidhNAVks1PwmD8Z0K%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;471&quot; height=&quot;258&quot; data-origin-width=&quot;471&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​그럼 위의 사진과 같이 GitHub 로그인을 하라는 창이 뜨는데 아까 전에 가입했던 또는 기존에 있던 gitHub 회원정보로 로그인을 해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;339&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ox3Fp/btqI664BUn7/0pE7Rea6XD7uxn1g0iROV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ox3Fp/btqI664BUn7/0pE7Rea6XD7uxn1g0iROV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ox3Fp/btqI664BUn7/0pE7Rea6XD7uxn1g0iROV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOx3Fp%2FbtqI664BUn7%2F0pE7Rea6XD7uxn1g0iROV1%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;664&quot; height=&quot;339&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;339&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​로그인이 정상적으로 되면 위의 사진과 같이 현재 켜져있는 프로젝트를 gitHub에 공유할 것인지에 대한 창이 뜹니다. Repository name 옆에 있는 private는 다른 사람과 public하게 공유할 것인가 아니면 본인만 가지고 있는 private인지에 대한 유무체크이고요. public이면 체크를 해제하고 제일 아래에 있는 Share버튼을 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;589&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IKrAv/btqJbxUDUQo/8C3DcRFbHYZEj4R9vPd0Bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IKrAv/btqJbxUDUQo/8C3DcRFbHYZEj4R9vPd0Bk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IKrAv/btqJbxUDUQo/8C3DcRFbHYZEj4R9vPd0Bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIKrAv%2FbtqJbxUDUQo%2F8C3DcRFbHYZEj4R9vPd0Bk%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;537&quot; height=&quot;589&quot; data-origin-width=&quot;537&quot; data-origin-height=&quot;589&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;최초 Add이기에 목록이 많이 뜨는 것이고요. 다음부터는 커밋할 때마다 본인이 수정한 내역만 뜹니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;549&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cArlMH/btqJes6zWFh/bZR8nHB3dbQTO2GtXT0u2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cArlMH/btqJes6zWFh/bZR8nHB3dbQTO2GtXT0u2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cArlMH/btqJes6zWFh/bZR8nHB3dbQTO2GtXT0u2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcArlMH%2FbtqJes6zWFh%2FbZR8nHB3dbQTO2GtXT0u2K%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;1280&quot; height=&quot;549&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;549&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​정상적으로 올라갔으면 Successfully 뜨는거 확인완료! 본인의 프로젝트가 정상적으로 진짜 들어갔는지 확인하고 싶으신분들은 gitHub사이트에 들어가셔서 보시면 바로 연동이 잘 된 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 258px;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; height: 52px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;명령어&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 52px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;내용&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 75px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; height: 75px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Commit (커밋)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 75px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;저장(SAVE)하는, 내가 작성한 코드들을 작업 내역으로 확정 짓고 여기까지의 코드를 별도로 보관. &lt;br /&gt;단축키 : Ctrl + K&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 71px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; height: 71px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Push (푸시)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 71px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;커밋된 작업 내역들을 중에서 git에 업로드 되지 않은 커밋 내역들을 업로드 해주는 행위.&lt;br /&gt;* Commit말고 Push도 해야 실제 gitHub에 올라가는 겁니다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Clone (클론)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;gitHub에 올려둔 프로젝트를 다운받는 행위.&lt;br /&gt;* File &amp;gt; New &amp;gt; Project From Version Control &amp;gt; 본인 gitHub메뉴 &amp;gt; 원하는프로젝트 선택 &amp;gt; Clone&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Fetch / Pull (풀)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Fetch : 내 컴퓨터에 잇는 현재 코드보다 다른 컴퓨터에서 올린 더 최신의 코드가 있는지 확인 명령.&lt;br /&gt;Pull : 실제로 최신 코드가 있으면 그 변경 내역들을 불러오는 명령.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 17.2093%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Fork (포크)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 82.7907%; height: 20px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;다른 사람의 코드를 그대로 복사해서 내 계정으로 들고 가는 행위.&lt;br /&gt;* gitHub 사이트에서 제공 기능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p id=&quot;SE-3eef00e3-1a86-4a87-a08f-7222fab09903&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;</description>
      <category>네이티브/Android</category>
      <category>안드로이드스튜디오깃허브사용하기 #안드로이드깃허브이용 #androidGitHub #안드로이드깃사용 #gitHub사용방법</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/104</guid>
      <comments>https://milkoon1.tistory.com/104#entry104comment</comments>
      <pubDate>Mon, 21 Sep 2020 09:29:47 +0900</pubDate>
    </item>
    <item>
      <title>Android with Kotlin : 안드로이드 스튜디오 설치하기 with 코틀린 시작</title>
      <link>https://milkoon1.tistory.com/103</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;545&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vYGdx/btqIPQH3yxu/ZVpXK9Xl3A7uGQKPZONlhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vYGdx/btqIPQH3yxu/ZVpXK9Xl3A7uGQKPZONlhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vYGdx/btqIPQH3yxu/ZVpXK9Xl3A7uGQKPZONlhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvYGdx%2FbtqIPQH3yxu%2FZVpXK9Xl3A7uGQKPZONlhk%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;1280&quot; height=&quot;545&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;545&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;옛날에는 안드로이드 스튜디오 언어로 JAVA만이 사용가능했었는데 구글이 안드로이드 공식 언어 중 Kotlin을 추가하면서 우리는 새로운 언어를 또 맞붙게 되었어요. 이번 글에서부터는 새로운 언어인 코틀린(Kotlin)을 가지고 안드로이드에 대해 글을 써보도록 하려고 합니다!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCmoJX/btqIXj9Z91G/PdsvFbbmVLGSkIkSBMXuh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCmoJX/btqIXj9Z91G/PdsvFbbmVLGSkIkSBMXuh1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCmoJX/btqIXj9Z91G/PdsvFbbmVLGSkIkSBMXuh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCmoJX%2FbtqIXj9Z91G%2FPdsvFbbmVLGSkIkSBMXuh1%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;502&quot; height=&quot;392&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;395&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mWNfl/btqISuR0x4H/5zkFqumxokn6c4ME2IsIgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mWNfl/btqISuR0x4H/5zkFqumxokn6c4ME2IsIgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mWNfl/btqISuR0x4H/5zkFqumxokn6c4ME2IsIgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmWNfl%2FbtqISuR0x4H%2F5zkFqumxokn6c4ME2IsIgk%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;505&quot; height=&quot;395&quot; data-origin-width=&quot;505&quot; data-origin-height=&quot;395&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;398&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b96mMV/btqISuLhcuF/ZBiznrTGT8Rp3hKe05BF4K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b96mMV/btqISuLhcuF/ZBiznrTGT8Rp3hKe05BF4K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b96mMV/btqISuLhcuF/ZBiznrTGT8Rp3hKe05BF4K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb96mMV%2FbtqISuLhcuF%2FZBiznrTGT8Rp3hKe05BF4K%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;507&quot; height=&quot;398&quot; data-origin-width=&quot;507&quot; data-origin-height=&quot;398&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;397&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTF9mZ/btqITtFiy7G/pkX7fzrbtwDe9GEEQ1b9i0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTF9mZ/btqITtFiy7G/pkX7fzrbtwDe9GEEQ1b9i0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTF9mZ/btqITtFiy7G/pkX7fzrbtwDe9GEEQ1b9i0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTF9mZ%2FbtqITtFiy7G%2FpkX7fzrbtwDe9GEEQ1b9i0%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;506&quot; height=&quot;397&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;397&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;새로운 시작인만큼 안드로이드 스튜디오 설치부터 시작하도록 할게요! 안드로이드 스튜디오 설치는 구글에 android studio download라고 하면 바로 설치할 수 있는 링크로 들어갈 수 있으니 다운 받아주시기 바랍니다.&lt;/span&gt;&lt;/p&gt;
&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;Download Android Studio and SDK tools &amp;nbsp;|&amp;nbsp; Android 스튜디오&quot; data-og-description=&quot;&amp;lt;!-- hide description --&amp;gt;&quot; data-og-host=&quot;developer.android.com&quot; data-og-source-url=&quot;https://developer.android.com/studio?hl=ko&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/g2vEz/hyHyTXtWbv/h9BEV3oE75ApOjJtxMd3f0/img.jpg?width=1352&amp;amp;height=818&amp;amp;face=0_0_1352_818&quot; data-og-url=&quot;https://developer.android.com/studio?hl=ko&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.android.com/studio?hl=ko&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://developer.android.com/studio?hl=ko&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/g2vEz/hyHyTXtWbv/h9BEV3oE75ApOjJtxMd3f0/img.jpg?width=1352&amp;amp;height=818&amp;amp;face=0_0_1352_818');&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;Download Android Studio and SDK tools &amp;nbsp;|&amp;nbsp; Android 스튜디오&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;lt;!-- hide description --&amp;gt;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;developer.android.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;597&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cskjvf/btqIM8bnxkZ/NuBK6aM9VcdAy1HVqmo8f0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cskjvf/btqIM8bnxkZ/NuBK6aM9VcdAy1HVqmo8f0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cskjvf/btqIM8bnxkZ/NuBK6aM9VcdAy1HVqmo8f0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcskjvf%2FbtqIM8bnxkZ%2FNuBK6aM9VcdAy1HVqmo8f0%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;787&quot; height=&quot;597&quot; data-origin-width=&quot;787&quot; data-origin-height=&quot;597&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;598&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8J6TX/btqIXgSZHry/KNnjvnMmflFcev3HiKdoEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8J6TX/btqIXgSZHry/KNnjvnMmflFcev3HiKdoEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8J6TX/btqIXgSZHry/KNnjvnMmflFcev3HiKdoEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8J6TX%2FbtqIXgSZHry%2FKNnjvnMmflFcev3HiKdoEK%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;789&quot; height=&quot;598&quot; data-origin-width=&quot;789&quot; data-origin-height=&quot;598&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lFgse/btqINpdo6Vs/x5NzOKCOXmJPAvA8MqS7F1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lFgse/btqINpdo6Vs/x5NzOKCOXmJPAvA8MqS7F1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lFgse/btqINpdo6Vs/x5NzOKCOXmJPAvA8MqS7F1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlFgse%2FbtqINpdo6Vs%2Fx5NzOKCOXmJPAvA8MqS7F1%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;792&quot; height=&quot;603&quot; data-origin-width=&quot;792&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;안드로이드 처음 설치하시는 분들은 저처럼 Setup Wizard가 나오실텐데 만약 SDK Components Setup단계에서 &lt;b&gt;경고문 Your Android SDK location contains &lt;/b&gt;&lt;b&gt;non-ASCII Characters&lt;/b&gt;라는 문구가 보이시면 해당 내용은 User\사용자이름의 폴더명이 한글이기에 나오는 경고문입니다. 이런 경우에는 다양한 방법이 있는데&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;1) 레지스트리를 건든다(단, 위험부담 높음)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;2) 포맷 후 사용자계정을 영어로 표기&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;3) 사용자계정을 새로 하나 생성&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;저같은 경우에는 사용자계정을 하나 추가로 만들어서 이용했습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;603&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dcwSrz/btqISvi4mQR/IrfX5KfOqdOQxsTlleyO41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dcwSrz/btqISvi4mQR/IrfX5KfOqdOQxsTlleyO41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dcwSrz/btqISvi4mQR/IrfX5KfOqdOQxsTlleyO41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdcwSrz%2FbtqISvi4mQR%2FIrfX5KfOqdOQxsTlleyO41%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;794&quot; height=&quot;603&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;603&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;492&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ycBLk/btqIRML80Vp/VcXzOqJnUP09CKO8KKW2r0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ycBLk/btqIRML80Vp/VcXzOqJnUP09CKO8KKW2r0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ycBLk/btqIRML80Vp/VcXzOqJnUP09CKO8KKW2r0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FycBLk%2FbtqIRML80Vp%2FVcXzOqJnUP09CKO8KKW2r0%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;671&quot; height=&quot;492&quot; data-origin-width=&quot;671&quot; data-origin-height=&quot;492&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;* 안드로이드 스튜디오 설치단계 *&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;안드로이드 스튜디오 설치프로그램 다운&lt;/li&gt;
&lt;li&gt;설치 중 관련 세팅 설치 SDK등&lt;/li&gt;
&lt;li&gt;앱을 실행시키는 가상기기 설치&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>네이티브/Android</category>
      <category>Android</category>
      <category>androidKotlin</category>
      <category>howtodownloadandroid</category>
      <category>Kotlin</category>
      <category>setupKotlin</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/103</guid>
      <comments>https://milkoon1.tistory.com/103#entry103comment</comments>
      <pubDate>Wed, 16 Sep 2020 17:46:03 +0900</pubDate>
    </item>
    <item>
      <title>Python with Django : 장고 웹 프로그래밍 수정, 삭제 화면 만들기(6)</title>
      <link>https://milkoon1.tistory.com/102</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이번 글에서는 저번에 다루었던 작업에 이어 수정(Update), 삭제(Delete) 작업을 해보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. teamDetail.html 생성 - 수정, 삭제를 할 수 있는 상세화면&lt;/b&gt;&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;1363&quot; data-origin-height=&quot;816&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bboU1t/btqE0C6ufkj/cnWShzhEXuxxR2M2Fe9iok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bboU1t/btqE0C6ufkj/cnWShzhEXuxxR2M2Fe9iok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bboU1t/btqE0C6ufkj/cnWShzhEXuxxR2M2Fe9iok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbboU1t%2FbtqE0C6ufkj%2FcnWShzhEXuxxR2M2Fe9iok%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;1363&quot; height=&quot;816&quot; data-origin-width=&quot;1363&quot; data-origin-height=&quot;816&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;우선은 수정과, 삭제를 할 수 있는 상세화면을 따로 만들도록 하겠습니다. 저는 teamDetail.html이라 이름을 붙였고, html의 content내용은 등록화면과 거의 동일합니다. 다른 점이라고는 화면이름과 버튼들뿐입니다. 버튼에 대한 설명은 조금있다가 아래에서 설명하도록 하겠습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. views.py와 urls.py 추가&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;메인화면 만드는 글부터 시작해서 여기까지 오신 분들이라면 이제 대충 어떤 문서로 가야할지 파악하실 수 있으실겁니다. 네 맞습니다. html 이후로는 views.py와 urls.py를 설정해주어야합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592556446913&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# views.py
from django.shortcuts import render, redirect, get_object_or_404
from django.views.generic import TemplateView, ListView, DetailView

from .models import Team
from .forms import TeamUpload
from django.http import HttpResponse

# Function-Based Views
def index(request):
    return render(request, 'index.html')

def teamInfo(request):
    teams = Team.objects.all()
    context = {'teams': teams}
    return render(request, 'content/teamInfo.html', context)

def teamCreate(request):
    upload = TeamUpload()
    if request.method == 'POST':
        upload = TeamUpload(request.POST)
        if upload.is_valid():
            upload.save()
            return redirect('teamInfo')
        else:
            return redirect('index')
    else:
        upload =  TeamUpload()
        return render(request, 'content/teamAdd.html', { 'form':upload })

# 추가 Update
def teamUpdate(request, team_seq):
    try:
        team_detail = get_object_or_404(Team, pk=team_seq)
    except Team.DoesNotExist:
        return redirect('teamInfo')
    update = TeamUpload(request.POST or None, instance = team_detail)
    if update.is_valid():
        update.save()
        return redirect('teamInfo')
    return render(request, 'content/teamDetail.html', {'form':update })

# 추가 Delete
def teamDelete(request, team_seq):
    try:
        team_detail = get_object_or_404(Team, pk=team_seq)
    except Team.DoesNotExist:
          return redirect('teamInfo')
    team_detail.delete()
    return redirect('teamInfo')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;차근차근 설명을 하자면, 우선 수정 함수는 teamUpdate이라고 지었고, 삭제 함수는 teamDelete라고 지었습니다. 각각 함수를 보시면 get_object_or_404라는 함수가 보이실겁니다. 이건 render와 동일하게 django.shortcuts에서 제공하는 함수입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;* get_object_or_404 : 모델로부터 객체를 받았을 때 객체가 있으면 받고, 없으면 404 에러 페이지를 보여주도록 하는 것.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592556601355&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url 
import fin.views

app_name = 'fin'
urlpatterns = [
    path('admin/', admin.site.urls),
    # 추가로 생성한 urls
    path('', fin.views.index , name='index'),
    path('team/teamInfo/',  fin.views.teamInfo, name='teamInfo'),
    path('team/teamAdd/',  fin.views.teamCreate, name='teamAdd'),
    path('team/teamUpdate/&amp;lt;team_seq&amp;gt;/',  fin.views.teamUpdate, name='teamUpdate'),
    path('team/teamDelete/&amp;lt;team_seq&amp;gt;/',  fin.views.teamDelete, name='teamDelete'),
]
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;뷰를 생성하였으니 이제 path를 설정하러 가봅시다. urls.py에 가서 저는 teamUpdate과 teamDelete를 지정해주었습니다. 여기서 우리는 teamAdd때와 다른 모습의 path를 보실 수 있는데 바로&lt;b&gt; /&amp;lt;team_seq&amp;gt;/&lt;/b&gt; 는 무엇인가?&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* 등록화면(teamAdd)같은 경우에는 새로운 팀을 생성하는 화면이니 특정 고유키가 필요하지 않습니다. 엄밀히 말하면 특정 고유키가 아직 있지 않은 상태이죠. 하지만 수정, 삭제화면(teamDetail)은 등록화면과 다르게, 이미 만들어져 있는 팀정보(데이터)를 가지고 수정 또는 삭제 작업을 해야합니다. 그렇기에 해당 데이터임을 알 수 있는 고유키가 필요한 것이죠.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;보통은 id(int)를 고유키로 잡고 'team/teamDetail/&amp;lt;int team_id&amp;gt;와 같이 사용하는데 저의 team_seq는 Integer가 아닌 String 형식이기에 저렇게 잡았습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. teamInfo.html에 상세화면으로 이동할 수 있는 링크 연결하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592786299030&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{% extends 'base.html' %}
{% block content %}
&amp;lt;div class=&quot;container&quot; style=&quot;width:100%;&quot;&amp;gt;
  &amp;lt;div style=&quot;width:1024px;height:400px;margin:0 auto;&quot;&amp;gt;
      &amp;lt;div style=&quot;margin:0 21 0 22px&quot;&amp;gt;
          &amp;lt;h1 style=&quot;margin-top:30px;&quot;&amp;gt;Project Management Page (TeamInfo)&amp;lt;/h1&amp;gt;
          &amp;lt;div class=&quot;toptextarea&quot;&amp;gt;
              &amp;lt;span&amp;gt;* 팀 목록을 보여주는 홈페이지입니다. &amp;lt;/span&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;div style=&quot;margin-top: 20px;&quot;&amp;gt;
            &amp;lt;div class=&quot;tableline&quot;&amp;gt;
                &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;팀명&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀닉네임&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀멤버수&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;비고&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                {% for team in teams %}
                &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px; text-decoration: underline; font-weight: bold;&quot;&amp;gt;&amp;lt;a href=&quot;{% url 'teamUpdate' team.team_seq %}&quot;&amp;gt;{{ team.team_nm }}&amp;lt;/a&amp;gt;&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_nick }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_mems_cnt }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.bigo }}&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                {% endfor %}
            &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          
          &amp;lt;!-- Button START --&amp;gt;
          &amp;lt;div style=&quot;margin-top: 20px; float: right;&quot;&amp;gt;
            &amp;lt;a href=&quot;{% url 'teamAdd' %}&quot;&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot;&amp;gt;팀추가하기&amp;lt;/button&amp;gt;&amp;lt;/a&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Button END --&amp;gt;
          
          
      &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{% endblock %}
&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그 다음은 여태까지 만들었던 상세화면을 teamInfo.html에 연결하는 작업입니다. 팀추가하기 버튼과 동일하게 &amp;lt;a&amp;gt;태그를 사용하여 연결하였습니다. 단, 여기서 우리는 팀등록화면으로 이동하는 &amp;lt;a&amp;gt;태그와 팀상세화면으로 이동하는 &amp;lt;a&amp;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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;4. 여태까지의 연결구조에 대해 정리하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;일단 여기까지 그냥 따라 오신분들이라면 teamAdd.html때와는 다르게 teamDetail.html은 team_seq라는 것도 있고 뭔가 복잡해보인다라고 생각하실 수도 있습니다. 근데 자세히 살펴보면 그리 어려운 것도 아닙니다. team_seq가 있어야하는 이유는 이미 위에서 설명했기 때문에 패스하고, 천천히 연결고리에 대해 설명하도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592787662201&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# teamInfo.html에서 urls.py의 teamUpdate로 이동할 것인데 team.team_seq 데이터도 같이 가져가겠다.
&amp;lt;a href=&quot;{% url 'teamUpdate' team.team_seq %}&quot;&amp;gt;{{ team.team_nm }}&amp;lt;/a&amp;gt;

# teamInfo.html으로 부터 urls.py로 넘어왔고, teamUpdate이름을 가지고 있으면, views.py의 fin.views.teamUpdate 함수로 이동한다.
# 참고로 teamUpdate 함수가 정상적으로 처리 될 때는 team/teamUpdate/&amp;lt;team_seq&amp;gt;/ 라는 링크로 처리한다.
path('team/teamUpdate/&amp;lt;team_seq&amp;gt;/',  fin.views.teamUpdate, name='teamUpdate'),

# views.py에서 teamUpdate 함수로 도착. 
def teamUpdate(request, team_seq):
    try:
        # 모델 Team을 가지고 pk가 team_seq인 object를 가져오겠다. 만약 없으면 404 출력
        team_detail = get_object_or_404(Team, pk=team_seq)
    except Team.DoesNotExist:
        return redirect('teamInfo')
    update = TeamUpload(request.POST or None, instance = team_detail)
    if update.is_valid():
        update.save()
        return redirect('teamInfo')
    return render(request, 'content/teamDetail.html', {'form':update })

# 수정버튼(submit)을 클릭하는 경우
# update = TeamUpload(request.POST or None, instance = team_detail) 실행
 &amp;lt;form method=&quot;POST&quot;&amp;gt;
  ...
  &amp;lt;div style=&quot;margin-top: 20px; float: right;&quot;&amp;gt;
      &amp;lt;button type=&quot;submit&quot; class=&quot;btn btn-primary&quot;&amp;gt;수정&amp;lt;/button&amp;gt;
      &amp;lt;a href=&quot;{% url 'teamDelete' form.team_seq.value %}&quot;&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot;&amp;gt;삭제&amp;lt;/button&amp;gt;&amp;lt;/a&amp;gt;
      &amp;lt;a href=&quot;{% url 'teamInfo' %}&quot;&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot;&amp;gt;돌아가기&amp;lt;/button&amp;gt;&amp;lt;/a&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/form&amp;gt;

# 함수가 성공적인 경우 return redirect('teamInfo') 이동&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;삭제 버튼도 동일합니다. submit만 아닐뿐이지 form.team_seq.value를 가지고 해당 team_seq에 맞는 데이터가 있는 경우 teamDelete 함수에서 처리한다는 의미입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;여기까지 진행하셨으면 우리는 장고 웹 사이트의 CRUD과정을 모두 마쳤습니다. 다음부터는 다른 화면 만들기 및 로그인 관련해서 공부해보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어/Python</category>
      <category>django</category>
      <category>djangoCRUD</category>
      <category>Python</category>
      <category>장고웹</category>
      <category>장고웹사이트만들기</category>
      <category>파이썬웹</category>
      <category>파이썬웹사이트</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/102</guid>
      <comments>https://milkoon1.tistory.com/102#entry102comment</comments>
      <pubDate>Fri, 19 Jun 2020 15:26:56 +0900</pubDate>
    </item>
    <item>
      <title>Django 클래스 기반 뷰와 함수 기반 뷰 차이점</title>
      <link>https://milkoon1.tistory.com/101</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* 해당 글은 장고(Django)의 클래스형 뷰와 함수형 뷰의 차이점에 대해 공부하고자 기록한 내용입니다. 글의 내용은 한 블로그에서 작성한 내용을 토대로 재정리한 내용이기에 원문을 원하시는 분들은 아래의 링크를 참고해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1592529818674&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Class-Based Views vs. Function-Based Views&quot; data-og-description=&quot;If you follow my content here in the blog, you probably have already noticed that I&amp;rsquo;m a big fan of function-basedviews. Quite often I use them in my examples...&quot; data-og-host=&quot;simpleisbetterthancomplex.com&quot; data-og-source-url=&quot;https://simpleisbetterthancomplex.com/article/2017/03/21/class-based-views-vs-function-based-views.html&quot; data-og-url=&quot;https://simpleisbetterthancomplex.com/article/2017/03/21/class-based-views-vs-function-based-views.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cQx67e/hyGsCcVq02/8CkjfLcjaEM6BQPPhnaQQ1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/btWHUQ/hyGsDiBY28/XBxmDRWjXMRqed33knK2r0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/g2w8G/hyGsGNdgEi/V4mJlkYz2FNf6KkN448IJk/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://simpleisbetterthancomplex.com/article/2017/03/21/class-based-views-vs-function-based-views.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://simpleisbetterthancomplex.com/article/2017/03/21/class-based-views-vs-function-based-views.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cQx67e/hyGsCcVq02/8CkjfLcjaEM6BQPPhnaQQ1/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/btWHUQ/hyGsDiBY28/XBxmDRWjXMRqed33knK2r0/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/g2w8G/hyGsGNdgEi/V4mJlkYz2FNf6KkN448IJk/img.jpg?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; data-ke-size=&quot;size16&quot;&gt;Class-Based Views vs. Function-Based Views&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;If you follow my content here in the blog, you probably have already noticed that I&amp;rsquo;m a big fan of function-basedviews. Quite often I use them in my examples...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;simpleisbetterthancomplex.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592529896320&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, redirect
from django.views.generic import TemplateView, ListView, DetailView

from .models import Team
from .forms import TeamCreate
from django.http import HttpResponse

# Class-Based Views
class IndexView(TemplateView):
    template_name = 'index.html'

class TeamInfoView(ListView):
    model = Team
    template_name = 'content/teamInfo.html'
    context_object_name = 'teams'

class TeamCreateView(ListView):
    model = Team
    template_name = 'content/teamInsert.html'
    context_object_name = 'teams'

#----------------------------------------------------------------
# Function-Based Views
def index(request):
    return render(request, 'index.html')

def teamInfo(request):
    return render(request, 'content/teamInfo.html')

def createTeam(request):
    return render(request, 'content/teamInsert.html')&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;현재 공부목적으로 장고 웹 프로젝트를 만들고 있는데 작업하는 도중에 궁금증이 생겨버렸습니다. 그것은 바로 클래스 기반 뷰와 함수 기반 뷰 중 어떤 것이 좋은 것인가! 어떤 블로그는 클래스 기반 뷰로 쭉 사용하고 어떤 블로그는 함수형이 편하기에 함수 기반 뷰로 쭉 사용한다고 하고 참고하는 블로그마다 이렇게 각양각색이다보니 갈피를 못잡겠더라고요. 그래서 공부하자! 도대체 얘네들의 차이점은 무엇인가!&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. 클래스 기반 뷰의 예&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592530599771&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# views.py
from django.views import View

class ContactView(View):
    def get(self, request):
        # Code block for GET request

    def post(self, request):
        # Code block for POST request
        
# urls.py
urlpatterns = [
    url(r'contact/$', views.ContactView.as_view(), name='contact'),
]&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;일반 클래스 기반은 새 개체 작성, 양식 처리, 목록보기, 페이지 매김, 아카이브보기 등과 같은 웹 응용 프로그램의 일반적인 사용 사례를 해결하기 위해 도입되었다고 한다. 그것들은 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;django.views.generic&lt;/b&gt;&lt;/span&gt; 모듈에서 구현할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;*&amp;nbsp; 내장 클래스 기반 뷰의 문서&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1592530826009&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Built-in class-based views API | Django documentation | Django&quot; data-og-description=&quot;The Django Software Foundation deeply values the diversity of our developers, users, and community. We are distraught by the suffering, oppression, and systemic racism the Black community faces every day. We can no longer remain silent. In silence, we are &quot; data-og-host=&quot;docs.djangoproject.com&quot; data-og-source-url=&quot;https://docs.djangoproject.com/en/1.10/ref/class-based-views/&quot; data-og-url=&quot;https://docs.djangoproject.com/en/1.10/ref/class-based-views/&quot; data-og-image=&quot;&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/1.10/ref/class-based-views/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.djangoproject.com/en/1.10/ref/class-based-views/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;Built-in class-based views API | Django documentation | Django&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The Django Software Foundation deeply values the diversity of our developers, users, and community. We are distraught by the suffering, oppression, and systemic racism the Black community faces every day. We can no longer remain silent. In silence, we are&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.djangoproject.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. 함수 기반 뷰의 예&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592530681337&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# views.py
def contact(request):
    if request.method == 'POST':
        # Code block for POST request
    else:
        # Code block for GET request (will also match PUT, HEAD, DELETE, etc)

# urls.py
urlpatterns = [
    url(r'contact/$', views.contact, name='contact'),
]&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. 클래스기반 뷰와 함수기반 뷰의 장단점&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;장점&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;단점&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;클래스기반 뷰&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 쉽게 확장하고 재사용할 수 있는 코드&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- mixin(다중상속)과 같은 기술을 사용가능&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 별도의 클래스 메소드로 HTTP메소드 처리&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 내장 도니 일반 클래스 기반 뷰&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 읽기가 어렵다&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 암시적 코드 흐름&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 부모클래스의 숨겨진 코드, 믹스 인&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 뷰 데코레이터를 사용하려면 추가 가져오기 또는 메소드 재정의가 필요&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;함수기반 뷰&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 간단한 구현&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 읽기 쉽다&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 명시적 코드흐름&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 데코레이터의 간단한 사용법&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 코드를 확장하고 재사용하기 어려움&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;- 조건부 분기를 통한 HTTP 메소드 처리&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/잡다한지식</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/101</guid>
      <comments>https://milkoon1.tistory.com/101#entry101comment</comments>
      <pubDate>Fri, 19 Jun 2020 11:21:38 +0900</pubDate>
    </item>
    <item>
      <title>Python with Django : 장고 웹 프로그래밍 등록 화면 만들기(5)</title>
      <link>https://milkoon1.tistory.com/100</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;저번 글에서는 static 디렉터리를 가지고 css, js, img 등의 문서를 어떻게 관리하는지에 대해 알아보았습니다. 이번 글에서는 본격적으로 CRUD에 대해 배워보도록 하겠습니다. 우선 현재까지 만든 화면으로는 메인화면과 팀목록을 보여주는 화면 달랑 두 개 밖에 없기 때문에 팀을 추가할 수 있는 화면을 만들어 보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;1. 팀추가 버튼 생성(teamInfo.html)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592467135819&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{% extends 'base.html' %}
{% block content %}
&amp;lt;div class=&quot;container&quot; style=&quot;width:100%;&quot;&amp;gt;
  &amp;lt;div style=&quot;width:1024px;height:400px;margin:0 auto;&quot;&amp;gt;
      &amp;lt;div style=&quot;margin:0 21 0 22px&quot;&amp;gt;
          &amp;lt;h1 style=&quot;margin-top:30px;&quot;&amp;gt;Project Management Page (TeamInfo)&amp;lt;/h1&amp;gt;
          &amp;lt;div class=&quot;toptextarea&quot;&amp;gt;
              &amp;lt;span&amp;gt;* 팀 목록을 보여주는 홈페이지입니다. &amp;lt;/span&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;div style=&quot;margin-top: 20px;&quot;&amp;gt;
            &amp;lt;div class=&quot;tableline&quot;&amp;gt;
                &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;팀명&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀닉네임&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀멤버수&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;비고&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                {% for team in teams %}
                &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.team_nm }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_nick }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_mems_cnt }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.bigo }}&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                {% endfor %}
            &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;!-- Button START --&amp;gt;
          &amp;lt;div style=&quot;margin-top: 20px; float: right;&quot;&amp;gt;
            &amp;lt;a href=&quot;{% url 'teamAdd' %}&quot;&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot;&amp;gt;팀추가하기&amp;lt;/button&amp;gt;&amp;lt;/a&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Button END --&amp;gt;
      &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{% endblock %}
&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;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;우선 팀 등록하는 화면을 만들기에 앞서 새롭게 만들 화면 경로에 들어갈 수 있는 버튼을 생성하도록 하겠습니다. 버튼은 teamInfo.html에 버튼을 추가하였습니다.&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;1452&quot; data-origin-height=&quot;396&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KgsLv/btqEYaP03Zx/BEtVCVFsGYn5wAOnysgLG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KgsLv/btqEYaP03Zx/BEtVCVFsGYn5wAOnysgLG1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KgsLv/btqEYaP03Zx/BEtVCVFsGYn5wAOnysgLG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKgsLv%2FbtqEYaP03Zx%2FBEtVCVFsGYn5wAOnysgLG1%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;1452&quot; height=&quot;396&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;396&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;버튼을 추가한 화면의 모습입니다. 버튼은 부트스트랩의 css을 활용하여 생성하였습니다. 만약 저와 같은 버튼을 만들고 싶으신 분들은 부트스트랩 사이트에 접속하셔서 원하는 코드를 복사붙여넣기 하세요.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. forms.py 생성&lt;/b&gt;&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;1211&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FB9Vy/btqEW4qtj74/vGx9ETvXangaBTyLEmkla1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FB9Vy/btqEW4qtj74/vGx9ETvXangaBTyLEmkla1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FB9Vy/btqEW4qtj74/vGx9ETvXangaBTyLEmkla1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFB9Vy%2FbtqEW4qtj74%2FvGx9ETvXangaBTyLEmkla1%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;1211&quot; height=&quot;504&quot; data-origin-width=&quot;1211&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;여태까지는 팀을 등록하려면 관리자 페이지에서 등록할 수밖에 없었습니다. 이제는 클라이언트 홈페이지에 등록이 가능하도록 데이터베이스 모델에서 해당 항목들을 가져오는 작업을 해야합니다. 이 작업을 하기 위해서는 forms.py 파일을 생성해줍니다. forms.py는 fin(APP)폴더 안에 생성해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592545385463&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django import forms
from .models import Team

class TeamUpload(forms.ModelForm):
    class Meta:
        model = Team
        fields = [ 'team_seq', 'team_nm', 'team_nick', 'bigo']
&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;우리는 장고에서 기본적으로 지원하는 forms를 impot받고 또한 Team 모델을 사용할 것이라 Team도 가져옵니다. TeamUpload는 팀 정보를 업로드하는데에 쓰는 class를 의미합니다. Meta 클래스는 장고에서 내부 클래스로 활용되며, 이는 기본 필드의 값을 재정의할 때 사용합니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592545893563&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# models.py
from django.db import models
from django.urls import reverse

class Team(models.Model):
    # primary_key로 지정할 컬럼들은 꼭 primary_key=True 주기
    team_seq = models.CharField('team_seq', max_length=9, primary_key=True)
    team_nm = models.CharField('team_nm', max_length=50, blank=True)
    team_nick = models.CharField('team_nick', max_length=50, blank=True)
    team_mems_cnt = models.IntegerField('team_mems_cnt', default=0 )
    team_reg_dt = models.DateTimeField(max_length=8, auto_now=True)
    bigo = models.TextField('bigo', blank=True)
    use_yn = models.CharField('use_yn', max_length=1, default='Y')
    reg_dt = models.DateTimeField('reg_dt', max_length=14, auto_now=True)
    sort_order = models.IntegerField('sort_order', default=0 )

    def __str__(self):
        return self.team_nm
&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;혹시 몰라서 models.py에 설정한 Team 모델도 같이 올리도록 하겠습니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. 등록할 화면 생성 (teamAdd.html)&lt;/b&gt;&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;1211&quot; data-origin-height=&quot;490&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/miTKH/btqEYI79Te5/kAsmrM8rawi9vVSbka6ey1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/miTKH/btqEYI79Te5/kAsmrM8rawi9vVSbka6ey1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/miTKH/btqEYI79Te5/kAsmrM8rawi9vVSbka6ey1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmiTKH%2FbtqEYI79Te5%2FkAsmrM8rawi9vVSbka6ey1%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;1211&quot; height=&quot;490&quot; data-origin-width=&quot;1211&quot; data-origin-height=&quot;490&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;우선 등록화면 html을 생성합니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;4. views.py와 urls.py(path설정) 등록&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592546032290&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# views.py
from django.shortcuts import render, redirect
from django.views.generic import TemplateView, ListView, DetailView

from .models import Team
from django.http import HttpResponse

# Function-Based Views
def index(request):
    return render(request, 'index.html')

def teamInfo(request):
    teams = Team.objects.all()
    context = {'teams': teams}
    return render(request, 'content/teamInfo.html', context)

def teamCreate(request):
    return render(request, 'content/teamAdd.html')&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1592546063346&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# urls.py
from django.contrib import admin
from django.urls import path
from django.conf.urls import url #추가
import fin.views

app_name = 'fin'
urlpatterns = [
    path('admin/', admin.site.urls),
    # 추가로 생성한 urls
    path('', fin.views.index , name='index'),
    path('team/teamInfo/',  fin.views.teamInfo, name='teamInfo'),
    path('team/teamAdd/',  fin.views.teamCreate, name='teamAdd'),
]
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그 다음은 views.py에서 뷰를 생성해주도록 합니다. 뷰 생성이 끝났으면 해당 뷰의 url을 추가해주도록 합시다.&amp;nbsp;&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;5. views.py 수정(forms.py의 폼을 연결하기)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592546209956&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, redirect
from django.views.generic import TemplateView, ListView, DetailView

from .models import Team
from .forms import TeamUpload #추가
from django.http import HttpResponse

# Function-Based Views
def index(request):
    return render(request, 'index.html')

def teamInfo(request):
    teams = Team.objects.all()
    context = {'teams': teams}
    return render(request, 'content/teamInfo.html', context)

def teamCreate(request):
    upload = TeamUpload()
    if request.method == 'POST':
        upload = TeamUpload(request.POST)
        if upload.is_valid():
            upload.save()
            return redirect('teamInfo')
        else:
            return redirect('index')
    else:
        upload =  TeamUpload()
        return render(request, 'content/teamAdd.html', {'form': upload})&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;해당 내용을 천천히 살펴보면, forms.py에 설정했던 TeamUpload()를 upload이라는 객체 안에 우선 생성합니다. 그 다음 teamAdd.html에서 POST방식으로 요청이 들어오면 TeamUpload() 폼에 값을 전달한 상태로 upload 객체를 만들고 그 데이터들이 올바른 형식으로 들어왔으면 데이터베이스에 저장하는 것을 의미합니다. 작업이 끝났으면 return redirect('teamInfo') 팀정보 화면으로 이동시킵니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;6. teamAdd.html&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592545829872&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{% extends 'base.html' %}
{% block content %}
&amp;lt;div class=&quot;container&quot; style=&quot;width:100%;&quot;&amp;gt;
  &amp;lt;div style=&quot;width:1024px;height:400px;margin:0 auto;&quot;&amp;gt;
      &amp;lt;div style=&quot;margin:0 21 0 22px&quot;&amp;gt;
            &amp;lt;h1 style=&quot;margin-top:30px;&quot;&amp;gt;Project Management Page (TeamAdd)&amp;lt;/h1&amp;gt;
            &amp;lt;div class=&quot;toptextarea&quot;&amp;gt;
                &amp;lt;span&amp;gt;* 새로운 팀을 등록하는 홈페이지입니다. &amp;lt;/span&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;!-- Form START --&amp;gt;
            &amp;lt;form method=&quot;POST&quot;&amp;gt;
                &amp;lt;div style=&quot;margin-top: 20px;&quot;&amp;gt;
                    {% csrf_token %}
                    {{ form.as_p }}
                &amp;lt;/div&amp;gt;
                &amp;lt;!-- Button START --&amp;gt;
                &amp;lt;div style=&quot;margin-top: 20px; float: right;&quot;&amp;gt;
                    &amp;lt;button type=&quot;submit&quot; class=&quot;btn btn-primary&quot;&amp;gt;등록&amp;lt;/button&amp;gt;
                    &amp;lt;a href=&quot;{% url 'teamInfo' %}&quot;&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot;&amp;gt;취소&amp;lt;/button&amp;gt;&amp;lt;/a&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;!-- Button END --&amp;gt;
            &amp;lt;/form&amp;gt;
            &amp;lt;!-- Form END --&amp;gt;
      &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{% endblock %}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;{{ form.as_p }}란, views.py에서 return&amp;nbsp;render(request,&amp;nbsp;'content/teamAdd.html',&amp;nbsp;{'form': upload })의 세 번째 인자 upload 객체를 'form' 키 값으로 전달하였기 때문에 html에서 {{ form }}이라고 다루는 것입니다. .as_p는 폼을 &amp;lt;p&amp;gt;태그로 감싼 형태로 출력한다는 의미입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;* csrf_token :&amp;nbsp; 장고에서는 POST 데이터 전달과정에서 보안을 위해 csrf_token이라는 것을 반드시 사용해야합니다.&lt;/b&gt;&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;1916&quot; data-origin-height=&quot;717&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BRETw/btqEX9rmFOY/f51sUNWTbwnhTjtZW0ldpk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BRETw/btqEX9rmFOY/f51sUNWTbwnhTjtZW0ldpk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BRETw/btqEX9rmFOY/f51sUNWTbwnhTjtZW0ldpk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBRETw%2FbtqEX9rmFOY%2Ff51sUNWTbwnhTjtZW0ldpk%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;1916&quot; height=&quot;717&quot; data-origin-width=&quot;1916&quot; data-origin-height=&quot;717&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;7. teamAdd.html 꾸미기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592548046481&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{% extends 'base.html' %}
{% block content %}
&amp;lt;div class=&quot;container&quot; style=&quot;width:100%;&quot;&amp;gt;
  &amp;lt;div style=&quot;width:1024px;height:400px;margin:0 auto;&quot;&amp;gt;
      &amp;lt;div style=&quot;margin:0 21 0 22px&quot;&amp;gt;
            &amp;lt;h1 style=&quot;margin-top:30px;&quot;&amp;gt;Project Management Page (TeamAdd)&amp;lt;/h1&amp;gt;
            &amp;lt;div class=&quot;toptextarea&quot;&amp;gt;
                &amp;lt;span&amp;gt;* 새로운 팀을 등록하는 홈페이지입니다. &amp;lt;/span&amp;gt;
            &amp;lt;/div&amp;gt;
            &amp;lt;!-- Form START --&amp;gt;
            &amp;lt;form method=&quot;POST&quot;&amp;gt;
                &amp;lt;div style=&quot;margin-top: 20px;&quot;&amp;gt;
                    {% csrf_token %}
                    &amp;lt;div class=&quot;form-group&quot;&amp;gt;
                        &amp;lt;label for=&quot;inputTeamSeq&quot;&amp;gt;팀 SEQ&amp;lt;/label&amp;gt;
                        {{ form.team_seq }}
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;form-group&quot;&amp;gt;
                        &amp;lt;label for=&quot;inputTeamNm&quot;&amp;gt;팀 이름&amp;lt;/label&amp;gt;
                        {{ form.team_nm }}
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;form-group&quot;&amp;gt;
                        &amp;lt;label for=&quot;inputTeamNick&quot;&amp;gt;팀 닉네임&amp;lt;/label&amp;gt;
                        {{ form.team_nick }}
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;form-group&quot;&amp;gt;
                        &amp;lt;label for=&quot;inputTeamBigo&quot;&amp;gt;비고&amp;lt;/label&amp;gt;
                        {{ form.bigo }}
                    &amp;lt;/div&amp;gt;
                    
                &amp;lt;/div&amp;gt;
                &amp;lt;!-- Button START --&amp;gt;
                &amp;lt;div style=&quot;margin-top: 20px; float: right;&quot;&amp;gt;
                    &amp;lt;button type=&quot;submit&quot; class=&quot;btn btn-primary&quot;&amp;gt;등록&amp;lt;/button&amp;gt;
                    &amp;lt;a href=&quot;{% url 'teamInfo' %}&quot;&amp;gt;&amp;lt;button type=&quot;button&quot; class=&quot;btn btn-primary&quot;&amp;gt;취소&amp;lt;/button&amp;gt;&amp;lt;/a&amp;gt;
                &amp;lt;/div&amp;gt;
                &amp;lt;!-- Button END --&amp;gt;
            &amp;lt;/form&amp;gt;
            &amp;lt;!-- Form END --&amp;gt;
      &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{% endblock %}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그대로 사용하려고 하니 디자인이 너무 구리네요. 그래서 살짝 바꿔보도록 하겠습니다.&amp;nbsp; 우선 teamAdd.html에서 {{ form.as_p }}를 각각 할당받을 수 있도록 나눠줍니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;8. forms.py 수정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592548148914&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django import forms
from .models import Team
class TeamUpload(forms.ModelForm):
    class Meta:
        model = Team
        fields = [ 'team_seq', 'team_nm', 'team_nick', 'bigo']

        widgets = {
            'team_nm': forms.TextInput(
                attrs={'class': 'form-control', 'style': 'width: 100%', 'placeholder': '팀 명을 입력하세요.'}
            ),
            'team_nick': forms.TextInput(
                attrs={'class': 'form-control', 'style': 'width: 100%', 'placeholder': '팀 닉네임을 입력하세요.'}
            ),
            'bigo': forms.Textarea(
                attrs={'class': 'form-control', 'style': 'width: 100%'}
            ),
        }
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그 다음은 부트스트랩의 class가 적용될 수 있도록 forms.py에서 widgets을 이용해서 적용시킵니다.&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;1907&quot; data-origin-height=&quot;861&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBTKm5/btqEZ9Ydwy5/3PaSnKn40BBrKXf96JVXVK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBTKm5/btqEZ9Ydwy5/3PaSnKn40BBrKXf96JVXVK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBTKm5/btqEZ9Ydwy5/3PaSnKn40BBrKXf96JVXVK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBTKm5%2FbtqEZ9Ydwy5%2F3PaSnKn40BBrKXf96JVXVK%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;1907&quot; height=&quot;861&quot; data-origin-width=&quot;1907&quot; data-origin-height=&quot;861&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그럼 아까보다는 예쁜 화면으로 바뀌었네요. 팀SEQ는 나중에 안보이게 설정할 데이터라 현재는 저렇게 냅두었습니다. 다음 글에서는 Add에 이어 Update와 Delete를 해보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어/Python</category>
      <category>장고</category>
      <category>장고웹</category>
      <category>장고웹사이트</category>
      <category>장고웹프로젝트</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/100</guid>
      <comments>https://milkoon1.tistory.com/100#entry100comment</comments>
      <pubDate>Thu, 18 Jun 2020 17:06:02 +0900</pubDate>
    </item>
    <item>
      <title>Python with Django : 장고 웹 프로그래밍 static(정적) 설정하기(4)</title>
      <link>https://milkoon1.tistory.com/99</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;저번 글에서는 클라이언트 사이트를 어떻게 꾸밀건지에 대한 것과 html 소스를 세분화하는 작업(템플릿 상속)에 대해 배워보았습니다. 이번 글에서는 templates(html 파일들을 관리하는 폴더)와 같이 css, fonts, img, js 파일들을 관리할 수 있는 static 폴더를 생성해보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. static 폴더 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/L4ew0/btqETLo1sYO/K7WgJxvU5qztyr4fuMKnFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/L4ew0/btqETLo1sYO/K7WgJxvU5qztyr4fuMKnFk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/L4ew0/btqETLo1sYO/K7WgJxvU5qztyr4fuMKnFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FL4ew0%2FbtqETLo1sYO%2FK7WgJxvU5qztyr4fuMKnFk%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;548&quot; height=&quot;588&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;- templates : index, teamInfo 등과 같이 html 문서들을 관리하는 폴더&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;- static : html 문서들을 제외한 css, fonts, img, js 등 나머지 문서들을 관리하는 폴더&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;다른 블로그분들이 정리한 내용을 보면 보통 templates와 static폴더는 APP 안에서 관리하시던데 저도 동일하게 APP안에 templates 폴더와 static폴더를 이동하도록 하겠습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;479&quot; data-origin-height=&quot;468&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bgnOf5/btqEVWEWVV9/Pa45CPsxOytAJ7CgyvdOtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bgnOf5/btqEVWEWVV9/Pa45CPsxOytAJ7CgyvdOtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bgnOf5/btqEVWEWVV9/Pa45CPsxOytAJ7CgyvdOtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbgnOf5%2FbtqEVWEWVV9%2FPa45CPsxOytAJ7CgyvdOtK%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;479&quot; height=&quot;468&quot; data-origin-width=&quot;479&quot; data-origin-height=&quot;468&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;원래 fin이라는 APP 밖에 있었던 templates과 static폴더를 fin APP 안으로 옮겼습니다. 그리고 static폴더 안에는 css 문서들을 관리할 수 있는 css폴더도 같이 생성하였습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. static폴더를 settings.py에 설정하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;446&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cj7dta/btqEVINFaZ0/cVjxrJT7nAV4WmZXNr0wSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cj7dta/btqEVINFaZ0/cVjxrJT7nAV4WmZXNr0wSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cj7dta/btqEVINFaZ0/cVjxrJT7nAV4WmZXNr0wSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcj7dta%2FbtqEVINFaZ0%2FcVjxrJT7nAV4WmZXNr0wSk%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;909&quot; height=&quot;446&quot; data-origin-width=&quot;909&quot; data-origin-height=&quot;446&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;static폴더를 생성하였으면 우리는 이제 settings.py에서 static file의 위치를 지정해주는 작업을 해야합니다. &lt;/b&gt;&lt;/span&gt;[STATICFILES_DIRS]는 fin(APP) 안에 [static] 디렉토리가 있고, 이 디렉토리 안에 static file들을 지정해 놓았다라고 알려주는 내용입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;[STATIC_ROOT]는 여러 APP(현재는 fin만 있지만 fin말고 다른 APP도 있는경우) 안에 static 폴더들이 각각 있을 경우 이것을 [STATIC_ROOT]에 설정되어있는 [static] 디렉토리에 모을 것이라는 내용입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. static file 모아주는 명령어 실행&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592441071706&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;python manage.py collectstatic&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;325&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NJLHe/btqET7m6HIJ/p1bJtpfP084O3ojhboIDk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NJLHe/btqET7m6HIJ/p1bJtpfP084O3ojhboIDk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NJLHe/btqET7m6HIJ/p1bJtpfP084O3ojhboIDk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNJLHe%2FbtqET7m6HIJ%2Fp1bJtpfP084O3ojhboIDk1%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;983&quot; height=&quot;325&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;325&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZFXya/btqETX58M4b/dkR3XHkvvfKUyKKrF6jWR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZFXya/btqETX58M4b/dkR3XHkvvfKUyKKrF6jWR0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZFXya/btqETX58M4b/dkR3XHkvvfKUyKKrF6jWR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZFXya%2FbtqETX58M4b%2FdkR3XHkvvfKUyKKrF6jWR0%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;737&quot; height=&quot;536&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;536&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;저는 비록 fin이라는 APP뿐이지만 collectstatic 명령어를 써보도록 하겠습니다. CMD창에 해당 명렁어를 실행했을 때 사진과 같이 나오면 정상적으로 처리가 된 것입니다. 만약 정상적으로 처리되었다면, Project ROOT에 [static] - [admin]이라는 폴더가 새로 생성된 것을 확인할 수 있습니다. 또한 fin APP에 있던 css파일도 같이 collection된 것을 확인할 수 있네요!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;4, static 활용하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592442281266&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- teamInfo.html --&amp;gt;
{% extends 'base.html' %}
{% block content %}
&amp;lt;style&amp;gt;
.tableline {border:1px solid #908d8d;display: table;width:100%;}
.tablerow {display:table-row;}
.tablecell_h {display: table-cell;padding:5px 20px;height:37px;background-color: #eaeaea;border-bottom:1px solid #908d8d;border-right: 1px solid #908d8d;text-align:center;font-weight: bold;}
.tablecell_he {display: table-cell;padding:5px 20px;height:37px;background-color: #eaeaea;border-bottom:1px solid #908d8d;text-align:center;font-weight: bold;}
.tablecell {display: table-cell;padding:5px 20px;height:37px;border-bottom:1px solid #908d8d;border-right: 1px solid #908d8d;text-align:center;}
.tablecell_e {display: table-cell;padding:5px 20px;height:37px;border-bottom:1px solid #908d8d;text-align:center;}
.tablecell_last {display: table-cell;padding:5px 20px;height:37px;border-right: 1px solid #908d8d;text-align:center;}
.tablecell_laste {display: table-cell;padding:5px 20px;height:37px;text-align:center;}
.tablecell a:visited {color:#474747;}
.tablecell_e a:visited {color:#474747;}
.tablecell_last a:visited {color:#474747;}
.tablecell_laste a:visited {color:#474747;}
.tablecell a:link {text-decoration: none;}
.tablecell_e a:link {text-decoration: none;}
.tablecell_last a:link {text-decoration: none;}
.tablecell_laste a:link {text-decoration: none;}
.tablebank {height:37px;}
.tablemodule1 {height:37px;}
&amp;lt;/style&amp;gt;
&amp;lt;div class=&quot;container&quot; style=&quot;width:100%;&quot;&amp;gt;
  &amp;lt;div style=&quot;width:1024px;height:400px;margin:0 auto;&quot;&amp;gt;
      &amp;lt;div style=&quot;margin:0 21 0 22px&quot;&amp;gt;
          &amp;lt;h1 style=&quot;margin-top:30px;&quot;&amp;gt;Project Management Page&amp;lt;/h1&amp;gt;
          &amp;lt;div class=&quot;toptextarea&quot;&amp;gt;
              &amp;lt;span style=&quot;color:crimson;&quot;&amp;gt;* 해당 홈페이지는 파이썬 공부를 위한 테스트용 홈페이지입니다. &amp;lt;/span&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;div style=&quot;margin-top: 20px;&quot;&amp;gt;
            &amp;lt;div class=&quot;tableline&quot;&amp;gt;
                &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;팀명&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀닉네임&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀멤버수&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;비고&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                {% for team in teams %}
                &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.team_nm }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_nick }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_mems_cnt }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.bigo }}&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                {% endfor %}
            &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;iframe id=&quot;downframe&quot; style=&quot;width:1px;height:1px;visibility: hidden;&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
      &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{% endblock %}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;정적(static) 파일들을 관리할 수 있는 [static]폴더도 생성했겠다 이제는 직접 사용을 해보도록 하겠습니다. 제가 이 [static]폴더를 만든 이유는 바로 teamInfo.html과 같이 html 안에 있는 style들을 따로 빼기 위함인데요. style에 관련된 소스들을 다 정리해보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1) base.html에 style 소스 빼내기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/v0cfj/btqEUGCyENa/Icsu8SgisEbwyMaMgFQIn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/v0cfj/btqEUGCyENa/Icsu8SgisEbwyMaMgFQIn0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/v0cfj/btqEUGCyENa/Icsu8SgisEbwyMaMgFQIn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fv0cfj%2FbtqEUGCyENa%2FIcsu8SgisEbwyMaMgFQIn0%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;387&quot; height=&quot;263&quot; data-origin-width=&quot;387&quot; data-origin-height=&quot;263&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;우선 [fin] - [static] - [css] 폴더 안에 cotent.css 라는 css 문서를 하나 만들겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592442469591&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{% extends 'base.html' %}
{% block content %}
&amp;lt;div class=&quot;container&quot; style=&quot;width:100%;&quot;&amp;gt;
  &amp;lt;div style=&quot;width:1024px;height:400px;margin:0 auto;&quot;&amp;gt;
      &amp;lt;div style=&quot;margin:0 21 0 22px&quot;&amp;gt;
          &amp;lt;h1 style=&quot;margin-top:30px;&quot;&amp;gt;Project Management Page&amp;lt;/h1&amp;gt;
          &amp;lt;div class=&quot;toptextarea&quot;&amp;gt;
              &amp;lt;span&amp;gt;* 해당 홈페이지는 파이썬 공부를 위한 테스트용 홈페이지입니다. &amp;lt;/span&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;div style=&quot;margin-top: 20px;&quot;&amp;gt;
            &amp;lt;div class=&quot;tableline&quot;&amp;gt;
                &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;팀명&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀닉네임&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀멤버수&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;비고&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                {% for team in teams %}
                &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.team_nm }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_nick }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_mems_cnt }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.bigo }}&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                {% endfor %}
            &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;iframe id=&quot;downframe&quot; style=&quot;width:1px;height:1px;visibility: hidden;&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
      &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{% endblock %}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1592442666704&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;.tableline {border:1px solid #908d8d;display: table;width:100%;}
.tablerow {display:table-row;}
.tablecell_h {display: table-cell;padding:5px 20px;height:37px;background-color: #eaeaea;border-bottom:1px solid #908d8d;border-right: 1px solid #908d8d;text-align:center;font-weight: bold;}
.tablecell_he {display: table-cell;padding:5px 20px;height:37px;background-color: #eaeaea;border-bottom:1px solid #908d8d;text-align:center;font-weight: bold;}
.tablecell {display: table-cell;padding:5px 20px;height:37px;border-bottom:1px solid #908d8d;border-right: 1px solid #908d8d;text-align:center;}
.tablecell_e {display: table-cell;padding:5px 20px;height:37px;border-bottom:1px solid #908d8d;text-align:center;}
.tablecell_last {display: table-cell;padding:5px 20px;height:37px;border-right: 1px solid #908d8d;text-align:center;}
.tablecell_laste {display: table-cell;padding:5px 20px;height:37px;text-align:center;}
.tablecell a:visited {color:#474747;}
.tablecell_e a:visited {color:#474747;}
.tablecell_last a:visited {color:#474747;}
.tablecell_laste a:visited {color:#474747;}
.tablecell a:link {text-decoration: none;}
.tablecell_e a:link {text-decoration: none;}
.tablecell_last a:link {text-decoration: none;}
.tablecell_laste a:link {text-decoration: none;}
.tablebank {height:37px;}
.tablemodule1 {height:37px;}

.toptextarea {color:crimson;}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;1377&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbq1Ko/btqEVImE0Au/4ftezTEgLx48A0440zLnSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbq1Ko/btqEVImE0Au/4ftezTEgLx48A0440zLnSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbq1Ko/btqEVImE0Au/4ftezTEgLx48A0440zLnSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbbq1Ko%2FbtqEVImE0Au%2F4ftezTEgLx48A0440zLnSk%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;1377&quot; height=&quot;564&quot; data-origin-width=&quot;1377&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그리고 teamInfo.html 안에 있던 &amp;lt;style&amp;gt;&amp;lt;/style&amp;gt; 코드들을 잘라내기 한 다음 아까 만들었던 content.css 안에 붙여넣기 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2) base.html에 해당 css소스 연결하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592443245436&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{% load static %}
    &amp;lt;!-- HEAD START --&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;
        &amp;lt;title&amp;gt;Project Management Page&amp;lt;/title&amp;gt;
        &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css&quot;&amp;gt;
        &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;{% static 'css/content.css' %}&quot;&amp;gt;
      &amp;lt;/head&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;css소스를 나눈다고 해서 자동으로 반영되는 것이 아니라 이제 static을 연결해주 작업이 필요합니다. {% load static %}은 [static] 설정한 것들을 해당 html 문서로 불러 들이는 것을 의미합니다. 그 다음 &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;{% static 'css/content.css' %}&quot;&amp;gt;은 [static]에 있는 파일 중 어떤 것을 적용하는지에 대한 경로를 설정하는 것을 의미합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;* 참고&lt;/b&gt; : 제가 참고해서 보는 블로그는 분리한 html 문서에 바로 load static을 넣어 처리하고 있었습니다. 근데 저는 이제&amp;nbsp; teamInfo.html이 아닌 base.html에 load static을 넣었죠. 제가 이렇게 넣은 이유는 teamInfo.html은 단순히 content만 사용할 html이기 때문입니다. 저도 아직 파이썬 &amp;amp; 장고를 배워가고 있는 입장이기에 이것이 정확하게 맞다라고 말씀드릴 순 없지만 우선 저는 이렇게 진행해보도록 하겠습니다. 훗날 이것이 잘못되었다면 아마 해당 내용을 바꿀 수도 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3) 서버 실행해서 확인하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592443946376&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;python manage.py runserver&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1915&quot; data-origin-height=&quot;383&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/puSPs/btqEVZg9Jhk/dGStXnx1Ba9mbhoGKk3EX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/puSPs/btqEVZg9Jhk/dGStXnx1Ba9mbhoGKk3EX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/puSPs/btqEVZg9Jhk/dGStXnx1Ba9mbhoGKk3EX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpuSPs%2FbtqEVZg9Jhk%2FdGStXnx1Ba9mbhoGKk3EX0%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;1915&quot; height=&quot;383&quot; data-origin-width=&quot;1915&quot; data-origin-height=&quot;383&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;css가 잘 적용되는지 이제 체크해봅시다. python manage.py runserver 명령어를 입력 후 사이트에 들어가 확인해보니 정상적으로 잘 적용되는 것을 확인할 수 있었습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어/Python</category>
      <category>장고웹프로젝트</category>
      <category>장고정적폴더</category>
      <category>장고프로젝트</category>
      <category>정적파이썬</category>
      <category>파이썬</category>
      <category>파이썬정적파일</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/99</guid>
      <comments>https://milkoon1.tistory.com/99#entry99comment</comments>
      <pubDate>Tue, 16 Jun 2020 17:51:51 +0900</pubDate>
    </item>
    <item>
      <title>Python with Django : 장고 웹 프로그래밍 템플릿 상속 방법(3)</title>
      <link>https://milkoon1.tistory.com/98</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;저번 글까지는 파이썬의 구조에 대해 조금 더 배워가는 시간이었습니다. 이번 글에서는 직접적으로 클라이언트 홈페이지를 다룰 예정입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. index.html 꾸미기&lt;/b&gt;&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;1662&quot; data-origin-height=&quot;821&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/w3OMC/btqEO0zHcaR/K5TSUk2xfgXbNUiOp0tMg0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/w3OMC/btqEO0zHcaR/K5TSUk2xfgXbNUiOp0tMg0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w3OMC/btqEO0zHcaR/K5TSUk2xfgXbNUiOp0tMg0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fw3OMC%2FbtqEO0zHcaR%2FK5TSUk2xfgXbNUiOp0tMg0%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;1662&quot; height=&quot;821&quot; data-origin-width=&quot;1662&quot; data-origin-height=&quot;821&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1592264522994&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css&quot;&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;클라이언트 사이트는 이미 꾸며져 있는 관리자사이트(/admin)와 다르게 저희가 직접 소스를 작성하면서 꾸며야합니다. 그렇기에 저는 부트스트랩 사이트를 이용하도록 하겠습니다. 저와 동일하게 부트스트랩 사이트를 이용하실 분들은 해당 사이트에 들어가셔서 원하는 소스를 추가해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592197133473&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;DOCTYPE html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;
        &amp;lt;title&amp;gt;Project Management Page&amp;lt;/title&amp;gt;
        &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css&quot;&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
         &amp;lt;!-- navbar 연결부분 --&amp;gt;
         &amp;lt;nav class=&quot;navbar navbar-expand-lg navbar-dark bg-primary&quot;&amp;gt;
            &amp;lt;a class=&quot;navbar-brand&quot;&amp;gt;FINPM&amp;lt;/a&amp;gt;
            &amp;lt;button class=&quot;navbar-toggler&quot; type=&quot;button&quot; data-toggle=&quot;collapse&quot; data-target=&quot;#navbarTogglerDemo02&quot; aria-controls=&quot;navbarTogglerDemo02&quot; aria-expanded=&quot;false&quot; aria-label=&quot;Toggle navigation&quot;&amp;gt;
              &amp;lt;span class=&quot;navbar-toggler-icon&quot;&amp;gt;&amp;lt;/span&amp;gt;
            &amp;lt;/button&amp;gt;
            &amp;lt;div class=&quot;collapse navbar-collapse&quot; id=&quot;navbarTogglerDemo02&quot;&amp;gt;
              &amp;lt;ul class=&quot;navbar-nav mr-auto mt-2 mt-lg-0&quot;&amp;gt;
                &amp;lt;li class=&quot;nav-item active&quot;&amp;gt;
                  &amp;lt;a class=&quot;nav-link&quot; href=&quot;#&quot;&amp;gt;초기화면&amp;lt;span class=&quot;sr-only&quot;&amp;gt;(current)&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;
                &amp;lt;/li&amp;gt;
                &amp;lt;li class=&quot;nav-item&quot;&amp;gt;
                  &amp;lt;a class=&quot;nav-link&quot; href=&quot;#&quot;&amp;gt;프로그램정보&amp;lt;/a&amp;gt;
                &amp;lt;/li&amp;gt;
              &amp;lt;/ul&amp;gt;
              &amp;lt;form class=&quot;form-inline my-2 my-lg-0&quot;&amp;gt;
                &amp;lt;input class=&quot;form-control mr-sm-2&quot; type=&quot;search&quot; placeholder=&quot;Search&quot;&amp;gt;
                &amp;lt;button class=&quot;btn btn-outline-light my-2 my-sm-0&quot; type=&quot;submit&quot;&amp;gt;Search&amp;lt;/button&amp;gt;
              &amp;lt;/form&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/nav&amp;gt;
        &amp;lt;style&amp;gt;
            body {font-family: dotum;font-size: 10pt;line-height: 25px;color:#474747;}
            .tableline {border:1px solid #908d8d;display: table;width:100%;}
            .tablerow {display:table-row;}
            .tablecell_h {display: table-cell;padding:5px 20px;height:37px;background-color: #eaeaea;border-bottom:1px solid #908d8d;border-right: 1px solid #908d8d;text-align:center;font-weight: bold;}
            .tablecell_he {display: table-cell;padding:5px 20px;height:37px;background-color: #eaeaea;border-bottom:1px solid #908d8d;text-align:center;font-weight: bold;}
            .tablecell {display: table-cell;padding:5px 20px;height:37px;border-bottom:1px solid #908d8d;border-right: 1px solid #908d8d;text-align:center;}
            .tablecell_e {display: table-cell;padding:5px 20px;height:37px;border-bottom:1px solid #908d8d;text-align:center;}
            .tablecell_last {display: table-cell;padding:5px 20px;height:37px;border-right: 1px solid #908d8d;text-align:center;}
            .tablecell_laste {display: table-cell;padding:5px 20px;height:37px;text-align:center;}
            .tablecell a:visited {color:#474747;}
            .tablecell_e a:visited {color:#474747;}
            .tablecell_last a:visited {color:#474747;}
            .tablecell_laste a:visited {color:#474747;}
            .tablecell a:link {text-decoration: none;}
            .tablecell_e a:link {text-decoration: none;}
            .tablecell_last a:link {text-decoration: none;}
            .tablecell_laste a:link {text-decoration: none;}
            .tablebank {height:37px;}
            .tablemodule1 {height:37px;}
        &amp;lt;/style&amp;gt;
        &amp;lt;div class=&quot;container&quot; style=&quot;width:100%;&quot;&amp;gt;
            &amp;lt;div style=&quot;width:1024px;height:400px;margin:0 auto;&quot;&amp;gt;
                &amp;lt;div style=&quot;margin:0 21 0 22px&quot;&amp;gt;
                    &amp;lt;h1 style=&quot;margin-top:30px;&quot;&amp;gt;Project Management Page&amp;lt;/h1&amp;gt;
                    &amp;lt;div class=&quot;toptextarea&quot;&amp;gt;
                        &amp;lt;span style=&quot;color:crimson;&quot;&amp;gt;* 해당 홈페이지는 파이썬 공부를 위한 테스트용 홈페이지입니다. &amp;lt;/span&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;div style=&quot;margin-top: 20px;&quot;&amp;gt;
                        &amp;lt;!-- Table Layout --&amp;gt;
                        &amp;lt;div class=&quot;tableline&quot;&amp;gt;
                            &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                                &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;팀명&amp;lt;/div&amp;gt;
                                &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀닉네임&amp;lt;/div&amp;gt;
                                &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀멤버수&amp;lt;/div&amp;gt;
                                &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;비고&amp;lt;/div&amp;gt;
                            &amp;lt;/div&amp;gt;
                            {% for team in teams %}
                            &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                                &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.team_nm }}&amp;lt;/div&amp;gt;
                                &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_nick }}&amp;lt;/div&amp;gt;
                                &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_mems_cnt }}&amp;lt;/div&amp;gt;
                                &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.bigo }}&amp;lt;/div&amp;gt;
                            &amp;lt;/div&amp;gt;
                            {% endfor %}
                        &amp;lt;/div&amp;gt;
                    &amp;lt;/div&amp;gt;
                    &amp;lt;!-- Table Layout --&amp;gt;
                    &amp;lt;div style=&quot;margin-top:10px;text-align:right;&quot;&amp;gt;
                        Copyright(c) 2020 By EMDI All Right Reserved.
                    &amp;lt;/div&amp;gt;
                    &amp;lt;iframe id=&quot;downframe&quot; style=&quot;width:1px;height:1px;visibility: hidden;&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
                &amp;lt;/div&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/div&amp;gt;
        &amp;lt;footer class=&quot;fixed-bottom bg-info&quot;&amp;gt;
            &amp;lt;div&amp;gt;
                Copyright(c) 2020 By EMDI All Right Reserved.
            &amp;lt;/div&amp;gt;
        &amp;lt;/footer&amp;gt;
    &amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;내가 마음에 든 navbar도 넣어주고, style도 바꿔주고 이것 저것 넣어본 index.html의 전체 소스입니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. 템플릿 상속받기(base.html만들기)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;만약 내가 생성할 화면이 단 하나뿐이라면 전체 소스처럼 모든 내용이 들어가도 무관합니다. 하지만 저희가 만들 프로젝트는 단 하나의 화면만 있진 않겠죠. 여기서 저희가 해야할 작업은 바로 소스 세분화 작업입니다. 소스 세분화작업을 하는 이유는 소스가 중복적으로 발생되는 것을 방지하고자 함인데 예를 들어 설명하도록 하겠습니다. 우리는 화면마다 menu, content, footer 등 여러가지 내용이 복합적으로 들어가 있을 겁니다. 근데 여기서 menu, footer와 같이 똑같은 소스를 화면(html)마다 만들게 되면 중복된 소스가 계속 발생하게 되겠죠? &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;이러한 중복적인 현상을 방지하기 위해 우리는 세분화작업, 바로 템플릿 상속을 다룰 것 입니다.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* 템플릿 상속 : html 중 기본 뼈대가 될 문서를 기본 템플릿으로 만들어 다른 html이 해당 소스가 필요할 때 상속하여 가져다 쓰는 것을 말합니다. 보통 기본이 되는 템플릿은 base.html로 정합니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1) base.html만들기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;templates 폴더 안에 기본 뼈대가 될 base.html 문서를 생성합니다. 그리고 index.html(메인화면)에 있었던 소스들을 우선 전체 복사하여 붙여넣기 합니다.&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;1341&quot; data-origin-height=&quot;834&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cbrTWs/btqEQ6asqpX/zppfDCTRa5dKMGmBbPQHHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cbrTWs/btqEQ6asqpX/zppfDCTRa5dKMGmBbPQHHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cbrTWs/btqEQ6asqpX/zppfDCTRa5dKMGmBbPQHHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcbrTWs%2FbtqEQ6asqpX%2FzppfDCTRa5dKMGmBbPQHHk%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;1341&quot; height=&quot;834&quot; data-origin-width=&quot;1341&quot; data-origin-height=&quot;834&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1592265747068&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;
        &amp;lt;title&amp;gt;Project Management Page&amp;lt;/title&amp;gt;
        &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css&quot;&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;body&amp;gt;
         &amp;lt;!-- navbar 연결부분 --&amp;gt;
         &amp;lt;nav class=&quot;navbar navbar-expand-lg navbar-dark bg-primary&quot;&amp;gt;
            &amp;lt;a class=&quot;navbar-brand&quot;&amp;gt;FINPM&amp;lt;/a&amp;gt;
            &amp;lt;button class=&quot;navbar-toggler&quot; type=&quot;button&quot; data-toggle=&quot;collapse&quot; data-target=&quot;#navbarTogglerDemo02&quot; aria-controls=&quot;navbarTogglerDemo02&quot; aria-expanded=&quot;false&quot; aria-label=&quot;Toggle navigation&quot;&amp;gt;
              &amp;lt;span class=&quot;navbar-toggler-icon&quot;&amp;gt;&amp;lt;/span&amp;gt;
            &amp;lt;/button&amp;gt;
            &amp;lt;div class=&quot;collapse navbar-collapse&quot; id=&quot;navbarTogglerDemo02&quot;&amp;gt;
              &amp;lt;ul class=&quot;navbar-nav mr-auto mt-2 mt-lg-0&quot;&amp;gt;
                &amp;lt;li class=&quot;nav-item active&quot;&amp;gt;
                  &amp;lt;a class=&quot;nav-link&quot; href=&quot;#&quot;&amp;gt;초기화면&amp;lt;span class=&quot;sr-only&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;
                &amp;lt;/li&amp;gt;
                &amp;lt;li class=&quot;nav-item&quot;&amp;gt;
                  &amp;lt;a class=&quot;nav-link&quot; href=&quot;#&quot;&amp;gt;프로그램정보&amp;lt;/a&amp;gt;
                &amp;lt;/li&amp;gt;
              &amp;lt;/ul&amp;gt;
              &amp;lt;form class=&quot;form-inline my-2 my-lg-0&quot;&amp;gt;
                &amp;lt;input class=&quot;form-control mr-sm-2&quot; type=&quot;search&quot; placeholder=&quot;Search&quot;&amp;gt;
                &amp;lt;button class=&quot;btn btn-outline-light my-2 my-sm-0&quot; type=&quot;submit&quot;&amp;gt;Search&amp;lt;/button&amp;gt;
              &amp;lt;/form&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/nav&amp;gt;
        {% block content %}
        {% endblock %}
    &amp;lt;/body&amp;gt;
    &amp;lt;footer class=&quot;fixed-bottom bg-primary&quot;&amp;gt;
        &amp;lt;div&amp;gt;
            Copyright(c) 2020 By EMDI All Right Reserved.
        &amp;lt;/div&amp;gt;
    &amp;lt;/footer&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;전체 붙여넣기 한 다음 이제 필요한 소스만 남겨놔야하는데 우리는 navbar만 우선 남겨놓도록 합시다. &amp;lt;body&amp;gt; 소스 중 &amp;lt;/nav&amp;gt;까지 남겨놓고 나머지 content 소스들은 지웁니다. base.html문서를 상속받은 템플릿이라면 이제 &amp;lt;nav&amp;gt;&amp;lt;/nav&amp;gt;는 공통으로 상속받게 됩니다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;{%&amp;nbsp;block&amp;nbsp;content&amp;nbsp;%}&lt;/b&gt;&lt;b&gt;{% endblock %}&lt;/b&gt;은 base.html에서 상속받기 위해 설정했던 소스를 제외한 나머지 content 부분을 의미합니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2) index.html 정리하기&lt;/b&gt;&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;1396&quot; data-origin-height=&quot;843&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtC3OI/btqERR4YS88/RkGinD4wChikO4eHWxRL00/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtC3OI/btqERR4YS88/RkGinD4wChikO4eHWxRL00/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtC3OI/btqERR4YS88/RkGinD4wChikO4eHWxRL00/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtC3OI%2FbtqERR4YS88%2FRkGinD4wChikO4eHWxRL00%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;1396&quot; height=&quot;843&quot; data-origin-width=&quot;1396&quot; data-origin-height=&quot;843&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1592266171333&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{% extends 'base.html' %}
{% block content %}
&amp;lt;style&amp;gt;
    body {font-family: dotum;font-size: 10pt;line-height: 25px;color:#474747;}
    .tableline {border:1px solid #908d8d;display: table;width:100%;}
    .tablerow {display:table-row;}
    .tablecell_h {display: table-cell;padding:5px 20px;height:37px;background-color: #eaeaea;border-bottom:1px solid #908d8d;border-right: 1px solid #908d8d;text-align:center;font-weight: bold;}
    .tablecell_he {display: table-cell;padding:5px 20px;height:37px;background-color: #eaeaea;border-bottom:1px solid #908d8d;text-align:center;font-weight: bold;}
    .tablecell {display: table-cell;padding:5px 20px;height:37px;border-bottom:1px solid #908d8d;border-right: 1px solid #908d8d;text-align:center;}
    .tablecell_e {display: table-cell;padding:5px 20px;height:37px;border-bottom:1px solid #908d8d;text-align:center;}
    .tablecell_last {display: table-cell;padding:5px 20px;height:37px;border-right: 1px solid #908d8d;text-align:center;}
    .tablecell_laste {display: table-cell;padding:5px 20px;height:37px;text-align:center;}
    .tablecell a:visited {color:#474747;}
    .tablecell_e a:visited {color:#474747;}
    .tablecell_last a:visited {color:#474747;}
    .tablecell_laste a:visited {color:#474747;}
    .tablecell a:link {text-decoration: none;}
    .tablecell_e a:link {text-decoration: none;}
    .tablecell_last a:link {text-decoration: none;}
    .tablecell_laste a:link {text-decoration: none;}
    .tablebank {height:37px;}
    .tablemodule1 {height:37px;}
&amp;lt;/style&amp;gt;
&amp;lt;div class=&quot;container&quot; style=&quot;width:100%;&quot;&amp;gt;
  &amp;lt;div style=&quot;width:1024px;height:400px;margin:0 auto;&quot;&amp;gt;
      &amp;lt;div style=&quot;margin:0 21 0 22px&quot;&amp;gt;
          &amp;lt;h1 style=&quot;margin-top:30px;&quot;&amp;gt;Project Management Page&amp;lt;/h1&amp;gt;
          &amp;lt;div class=&quot;toptextarea&quot;&amp;gt;
              &amp;lt;span style=&quot;color:crimson;&quot;&amp;gt;* 해당 홈페이지는 파이썬 공부를 위한 테스트용 홈페이지입니다. &amp;lt;/span&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;div style=&quot;margin-top: 20px;&quot;&amp;gt;
            &amp;lt;div class=&quot;tableline&quot;&amp;gt;
                &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;팀명&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀닉네임&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀멤버수&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;비고&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                {% for team in teams %}
                &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.team_nm }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_nick }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_mems_cnt }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.bigo }}&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                {% endfor %}
            &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;iframe id=&quot;downframe&quot; style=&quot;width:1px;height:1px;visibility: hidden;&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
      &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{% endblock %}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;base.html에 nav를 설정해두었으니 이제는 index.html에 가서 넣지 않아도 될 nav를 제거하는 작업이 필요합니다. base.html에 설정했던 소스들을 다 지우고 나머지 소스들만 남깁니다. 그리고 위아래로 {%&amp;nbsp;block&amp;nbsp;content&amp;nbsp;%}{% endblock %} 영역을 지정해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* {% extends 'base.html' %} : 이 소스는 base.html를 상속받는다는 의미이며, 제일 상단에 붙여넣습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* {%&amp;nbsp;block&amp;nbsp;content&amp;nbsp;%}{% endblock %} : 이 소스는 아까 전 base.html에서도 봤던 소스인데 바로 index.html에서 content를 나타내는 부분을 의미합니다.&lt;/span&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;734&quot; data-origin-height=&quot;277&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/k0JuO/btqETnn4MlF/pY0Z5N8yKwIO4jFOC705h0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/k0JuO/btqETnn4MlF/pY0Z5N8yKwIO4jFOC705h0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/k0JuO/btqETnn4MlF/pY0Z5N8yKwIO4jFOC705h0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fk0JuO%2FbtqETnn4MlF%2FpY0Z5N8yKwIO4jFOC705h0%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;734&quot; height=&quot;277&quot; data-origin-width=&quot;734&quot; data-origin-height=&quot;277&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1592267665867&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;python manage.py runserver&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그 다음 클라이언트 사이트에 들어가서 확인을 해보면 처음에 봤던 화면과 동일하지만 해당 화면은 base.html과 index.html을 활용하여 만들어진 화면입니다. 같은 index.html 창이지만 빨간색 라인은 이제 base.html에서 상속받은 소스를 보여주는 것이고 초록색 라인은 index.html의 content입니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. 템플릿 활용하기(결과)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이번에는 여러 화면이 있다는 가정하에 작업을 해보도록 합시다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;* 필요한 화면 : 기본템플릿(base.html) / 초기화면(index.html) / 팀정보(teamInfo.html)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592280561928&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- base.html --&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
    &amp;lt;!-- HEAD START --&amp;gt;
    &amp;lt;head&amp;gt;
        &amp;lt;meta charset=&quot;utf-8&quot;&amp;gt;
        &amp;lt;title&amp;gt;Project Management Page&amp;lt;/title&amp;gt;
        &amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css&quot;&amp;gt;
    &amp;lt;/head&amp;gt;
    &amp;lt;!-- HEAD END --&amp;gt;
    &amp;lt;!-- BODY START --&amp;gt;
    &amp;lt;body&amp;gt;
         &amp;lt;!-- navbar START --&amp;gt;
         &amp;lt;nav class=&quot;navbar navbar-expand-lg navbar-dark bg-primary&quot;&amp;gt;
            &amp;lt;a class=&quot;navbar-brand&quot;&amp;gt;FINPM&amp;lt;/a&amp;gt;
            &amp;lt;button class=&quot;navbar-toggler&quot; type=&quot;button&quot; data-toggle=&quot;collapse&quot; data-target=&quot;#navbarTogglerDemo02&quot; aria-controls=&quot;navbarTogglerDemo02&quot; aria-expanded=&quot;false&quot; aria-label=&quot;Toggle navigation&quot;&amp;gt;
              &amp;lt;span class=&quot;navbar-toggler-icon&quot;&amp;gt;&amp;lt;/span&amp;gt;
            &amp;lt;/button&amp;gt;
            &amp;lt;div class=&quot;collapse navbar-collapse&quot; id=&quot;navbarTogglerDemo02&quot;&amp;gt;
              &amp;lt;ul class=&quot;navbar-nav mr-auto mt-2 mt-lg-0&quot;&amp;gt;
                &amp;lt;li class=&quot;nav-item active&quot;&amp;gt;
                  &amp;lt;a class=&quot;nav-link&quot; href=&quot;{% url 'index' %}&quot;&amp;gt;초기화면&amp;lt;span class=&quot;sr-only&quot;&amp;gt;&amp;lt;/span&amp;gt;&amp;lt;/a&amp;gt;
                &amp;lt;/li&amp;gt;
                &amp;lt;li class=&quot;nav-item&quot;&amp;gt;
                  &amp;lt;a class=&quot;nav-link&quot; href=&quot;{% url 'teamInfo' %}&quot;&amp;gt;팀정보&amp;lt;/a&amp;gt;
                &amp;lt;/li&amp;gt;
              &amp;lt;/ul&amp;gt;
              &amp;lt;form class=&quot;form-inline my-2 my-lg-0&quot;&amp;gt;
                &amp;lt;input class=&quot;form-control mr-sm-2&quot; type=&quot;search&quot; placeholder=&quot;Search&quot;&amp;gt;
                &amp;lt;button class=&quot;btn btn-outline-light my-2 my-sm-0&quot; type=&quot;submit&quot;&amp;gt;Search&amp;lt;/button&amp;gt;
              &amp;lt;/form&amp;gt;
            &amp;lt;/div&amp;gt;
        &amp;lt;/nav&amp;gt;
        &amp;lt;!-- navbar END --&amp;gt;
        &amp;lt;!-- content START --&amp;gt;
        {% block content %}
        {% endblock %}
        &amp;lt;!-- content END --&amp;gt;
    &amp;lt;/body&amp;gt;
    &amp;lt;!-- BODY END --&amp;gt;
    &amp;lt;!-- FOOTER START --&amp;gt;
    &amp;lt;footer class=&quot;fixed-bottom bg-primary&quot;&amp;gt;
        &amp;lt;div&amp;gt;
            Copyright(c) 2020 By EMDI All Right Reserved.
        &amp;lt;/div&amp;gt;
    &amp;lt;/footer&amp;gt;
    &amp;lt;!-- FOOTER END --&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;&lt;b&gt;참고로 여기서 href=&quot;{% url 'index' %}&quot;은 urls.py 소스에서 path('', IndexView.as_view(), name='index')의 name을 의미합니다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1592280617878&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!-- index.html --&amp;gt;
{% extends 'base.html' %}
{% block content %}
&amp;lt;div class=&quot;container&quot; style=&quot;width:100%;&quot;&amp;gt;
  &amp;lt;div style=&quot;width:1024px;height:400px;margin:0 auto;&quot;&amp;gt;
      &amp;lt;div style=&quot;margin:0 21 0 22px&quot;&amp;gt;
          &amp;lt;h1 style=&quot;margin-top:30px;&quot;&amp;gt;메인화면입니다!&amp;lt;/h1&amp;gt;
          &amp;lt;div class=&quot;toptextarea&quot;&amp;gt;
              &amp;lt;span style=&quot;color:crimson;&quot;&amp;gt;* 해당 홈페이지는 파이썬 공부를 위한 테스트용 홈페이지입니다. &amp;lt;/span&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;h1&amp;gt;메인화면입니다!&amp;lt;/h1&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;iframe id=&quot;downframe&quot; style=&quot;width:1px;height:1px;visibility: hidden;&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
      &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{% endblock %}

&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1592280638239&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{% extends 'base.html' %}
{% block content %}
&amp;lt;style&amp;gt;
    /* body {font-family: dotum;font-size: 10pt;line-height: 25px;color:#474747;} */
    .tableline {border:1px solid #908d8d;display: table;width:100%;}
    .tablerow {display:table-row;}
    .tablecell_h {display: table-cell;padding:5px 20px;height:37px;background-color: #eaeaea;border-bottom:1px solid #908d8d;border-right: 1px solid #908d8d;text-align:center;font-weight: bold;}
    .tablecell_he {display: table-cell;padding:5px 20px;height:37px;background-color: #eaeaea;border-bottom:1px solid #908d8d;text-align:center;font-weight: bold;}
    .tablecell {display: table-cell;padding:5px 20px;height:37px;border-bottom:1px solid #908d8d;border-right: 1px solid #908d8d;text-align:center;}
    .tablecell_e {display: table-cell;padding:5px 20px;height:37px;border-bottom:1px solid #908d8d;text-align:center;}
    .tablecell_last {display: table-cell;padding:5px 20px;height:37px;border-right: 1px solid #908d8d;text-align:center;}
    .tablecell_laste {display: table-cell;padding:5px 20px;height:37px;text-align:center;}
    .tablecell a:visited {color:#474747;}
    .tablecell_e a:visited {color:#474747;}
    .tablecell_last a:visited {color:#474747;}
    .tablecell_laste a:visited {color:#474747;}
    .tablecell a:link {text-decoration: none;}
    .tablecell_e a:link {text-decoration: none;}
    .tablecell_last a:link {text-decoration: none;}
    .tablecell_laste a:link {text-decoration: none;}
    .tablebank {height:37px;}
    .tablemodule1 {height:37px;}
&amp;lt;/style&amp;gt;
&amp;lt;!-- teamInfo.html --&amp;gt;
&amp;lt;div class=&quot;container&quot; style=&quot;width:100%;&quot;&amp;gt;
  &amp;lt;div style=&quot;width:1024px;height:400px;margin:0 auto;&quot;&amp;gt;
      &amp;lt;div style=&quot;margin:0 21 0 22px&quot;&amp;gt;
          &amp;lt;h1 style=&quot;margin-top:30px;&quot;&amp;gt;Project Management Page&amp;lt;/h1&amp;gt;
          &amp;lt;div class=&quot;toptextarea&quot;&amp;gt;
              &amp;lt;span style=&quot;color:crimson;&quot;&amp;gt;* 해당 홈페이지는 파이썬 공부를 위한 테스트용 홈페이지입니다. &amp;lt;/span&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;div style=&quot;margin-top: 20px;&quot;&amp;gt;
            &amp;lt;div class=&quot;tableline&quot;&amp;gt;
                &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;팀명&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀닉네임&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:180px;&quot;&amp;gt;팀멤버수&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell_h&quot; style=&quot;width:130px;&quot;&amp;gt;비고&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                {% for team in teams %}
                &amp;lt;div class=&quot;tablerow&quot;&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.team_nm }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_nick }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:180px;&quot;&amp;gt;{{ team.team_mems_cnt }}&amp;lt;/div&amp;gt;
                    &amp;lt;div class=&quot;tablecell&quot; style=&quot;width:130px;&quot;&amp;gt;{{ team.bigo }}&amp;lt;/div&amp;gt;
                &amp;lt;/div&amp;gt;
                {% endfor %}
            &amp;lt;/div&amp;gt;
          &amp;lt;/div&amp;gt;
          &amp;lt;!-- Table Layout --&amp;gt;
          &amp;lt;iframe id=&quot;downframe&quot; style=&quot;width:1px;height:1px;visibility: hidden;&quot;&amp;gt;&amp;lt;/iframe&amp;gt;
      &amp;lt;/div&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/div&amp;gt;
{% endblock %}
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;위의 소스는 뼈대로 만든 화면, 메인화면, 팀정보를 나타내는 화면입니다. base.html를 제외한 나머지 화면은 {% block content %}로 묶여있는 것을 확인할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1) views.py : teamInfoView추가 및 해당 class가 어떤 html을 사용하는지 설정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592280938293&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, redirect
from django.views.generic import TemplateView, ListView, DetailView

from .models import Team
from .forms import TeamCreate
from django.http import HttpResponse

# Create your views here.
def index(request):
    return render(request, 'index.html')

def teamInfo(request):
    teams = Team.objects.all()
    context = {'teams': teams}
    return render(request, 'content/teamInfo.html', context)&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2) urls.py : teamInfo.html을 부르기 위해 path설정&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1592280806255&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.contrib import admin
from django.urls import path
from django.conf.urls import url #추가
import fin.views

app_name = 'fin'
urlpatterns = [
    path('admin/', admin.site.urls),
    # 추가로 생성한 urls
    path('', fin.views.index , name='index'),
    path('team/teamInfo/',  fin.views.teamInfo, name='teamInfo'),
]

&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1376&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wfvfs/btqERR49nEu/3F0FzcPo2FfRUyjxkIO9U0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wfvfs/btqERR49nEu/3F0FzcPo2FfRUyjxkIO9U0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wfvfs/btqERR49nEu/3F0FzcPo2FfRUyjxkIO9U0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwfvfs%2FbtqERR49nEu%2F3F0FzcPo2FfRUyjxkIO9U0%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;1376&quot; height=&quot;287&quot; data-origin-width=&quot;1376&quot; data-origin-height=&quot;287&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;1379&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FQLYa/btqESoVHXDr/QOymGGkwcs75MieJcNZRF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FQLYa/btqESoVHXDr/QOymGGkwcs75MieJcNZRF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FQLYa/btqESoVHXDr/QOymGGkwcs75MieJcNZRF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFQLYa%2FbtqESoVHXDr%2FQOymGGkwcs75MieJcNZRF1%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;1379&quot; height=&quot;333&quot; data-origin-width=&quot;1379&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>언어/Python</category>
      <category>djangoPython</category>
      <category>djangoTemplate</category>
      <category>djangoTemplates</category>
      <category>Python</category>
      <category>장고</category>
      <category>장고템플릿</category>
      <category>장고템플릿상속</category>
      <category>장고프로젝트</category>
      <category>파이썬템플릿상속</category>
      <category>파이썬프로젝트</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/98</guid>
      <comments>https://milkoon1.tistory.com/98#entry98comment</comments>
      <pubDate>Fri, 12 Jun 2020 14:25:18 +0900</pubDate>
    </item>
    <item>
      <title>Python with Django : 장고 웹 프로그래밍 model.py 설정하는 방법(2)</title>
      <link>https://milkoon1.tistory.com/97</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. 앱 생성하기 전 설정하기(&lt;b&gt;settings.py)&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591856749463&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# mySite에 있는 settings.py

TIME_ZONE = 'Asia/Seoul' #한국시간으로 변경

LANGUAGE_CODE = 'ko-kr'  #한국어로 변경

USE_TZ = False           #변경

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')], #변경
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. 앱 생성하기(&lt;b&gt;settings.py)&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591850080133&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# FINPM을 만드는 명령어 실행
(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;python manage.py startapp fin&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oz4NC/btqEPVfrxUw/SNkq6H1vStksmxR8ge4srk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oz4NC/btqEPVfrxUw/SNkq6H1vStksmxR8ge4srk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oz4NC/btqEPVfrxUw/SNkq6H1vStksmxR8ge4srk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Foz4NC%2FbtqEPVfrxUw%2FSNkq6H1vStksmxR8ge4srk%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;959&quot; height=&quot;294&quot; data-origin-width=&quot;959&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;위의 명령어를 실행하면 내 프로젝트 폴더 내에 fin(설정한 앱이름)폴더가 생성되는 것을 확인할 수 있습니다. 또한 해당 폴더 내에는 app, models 등의 파일이 생성된 것도 확인할 수 있습니다.&lt;/span&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;1037&quot; data-origin-height=&quot;282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bL7JE5/btqEPlr5yJR/5VMJ50CdKf5uudKLqsAbE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bL7JE5/btqEPlr5yJR/5VMJ50CdKf5uudKLqsAbE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bL7JE5/btqEPlr5yJR/5VMJ50CdKf5uudKLqsAbE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbL7JE5%2FbtqEPlr5yJR%2F5VMJ50CdKf5uudKLqsAbE1%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;1037&quot; height=&quot;282&quot; data-origin-width=&quot;1037&quot; data-origin-height=&quot;282&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;fin 앱의 설정 클래스는 apps.py 파일에 FinConfig라고 정의되어있습니다. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;프로젝트에 포함되는 애플리케이션들은 모두 설정파일에 등록해야하기에 FinConfig를 mySite의 settings.py에 설정하도록 합니다.&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591850564059&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# mySite의 settings.py
INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'fin.apps.FinConfig', #추가
]&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. 테이블정의하기(models.py)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591923604834&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.db import models
from django.urls import reverse

class Team(models.Model):
    # primary_key로 지정할 컬럼들은 꼭 primary_key=True 주기
    team_seq = models.CharField('team_seq', max_length=9, primary_key=True)
    team_nm = models.CharField('team_nm', max_length=50, blank=True)
    team_nick = models.CharField('team_nick', max_length=50, blank=True)
    team_mems_cnt = models.IntegerField('team_mems_cnt', default=0 )
    team_reg_dt = models.DateTimeField(max_length=8, auto_now=True)
    bigo = models.TextField('bigo', blank=True)
    use_yn = models.CharField('use_yn', max_length=1, default='Y')
    reg_dt = models.DateTimeField('reg_dt', max_length=14, auto_now=True)
    sort_order = models.IntegerField('sort_order', default=0 )

    def __str__(self):
        return self.team_nm
&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;4. Admin 사이트에도 테이블 반영(admin.py)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591923661268&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.contrib import admin
from fin.models import Team

# Register your models here.
@admin.register(Team)
class TeamAdmin(admin.ModelAdmin):
    list_display = ('team_seq', 'team_nm', 'team_nick', 'team_reg_dt')
    search_fields = ('team_nm', 'team_nick')
&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1591924593820&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;python manage.py makemigrations fin
(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;python manage.py migrate
(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;python manage.py runserver&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1243&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bhsjFI/btqEQtpcoyK/bNus5kG1psNWQuRa1dl8Q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bhsjFI/btqEQtpcoyK/bNus5kG1psNWQuRa1dl8Q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bhsjFI/btqEQtpcoyK/bNus5kG1psNWQuRa1dl8Q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbhsjFI%2FbtqEQtpcoyK%2FbNus5kG1psNWQuRa1dl8Q0%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;1243&quot; height=&quot;367&quot; data-origin-width=&quot;1243&quot; data-origin-height=&quot;367&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;1057&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9IFNt/btqEQ8dOrin/jBQaNaXHt7Xkr48Xk6lu80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9IFNt/btqEQ8dOrin/jBQaNaXHt7Xkr48Xk6lu80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9IFNt/btqEQ8dOrin/jBQaNaXHt7Xkr48Xk6lu80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9IFNt%2FbtqEQ8dOrin%2FjBQaNaXHt7Xkr48Xk6lu80%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;1057&quot; height=&quot;612&quot; data-origin-width=&quot;1057&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;models.py에 설정한 테이블을 마이그레이션하면 PostgreSQL에 테이블 및 컬럼들이 생성되는 것을 확인할 수 있습니다.&amp;nbsp;&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. 화면 html 생성하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1) templates 폴더 생성 및 html 파일 만들기&lt;/b&gt;&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;989&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YBGns/btqEPmEyia8/ALDkxgx6OmpYFOKypJnxV1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YBGns/btqEPmEyia8/ALDkxgx6OmpYFOKypJnxV1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YBGns/btqEPmEyia8/ALDkxgx6OmpYFOKypJnxV1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYBGns%2FbtqEPmEyia8%2FALDkxgx6OmpYFOKypJnxV1%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;989&quot; height=&quot;242&quot; data-origin-width=&quot;989&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;우선 html 파일들을 관리하는 templates폴더를 생성합니다. 앞으로는 html 파일들을 이 폴더 안에 관리하도록 하겠습니다. 그 다음은 templates 폴더 내에 index.html을 만듭니다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591936280487&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;p&amp;gt;Hello! This is FinPM Page&amp;lt;/p&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2) views.py에 만든 html 연결하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591857003942&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, redirect
from django.views.generic import TemplateView, ListView, DetailView

from .models import Team
from .forms import TeamCreate
from django.http import HttpResponse

# Create your views here.
# 클래스 뷰 또는 함수형 뷰 중 하나를 선택해서 쓰세요.
# Class-Based Views
class IndexView(TemplateView):
    template_name = 'index.html'

#----------------------------------------------------------------
# Function-Based Views
def index(request):
    return render(request, 'index.html')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;장고의 뷰(view)에서는 클래스 기반 뷰와 함수 기반 뷰가 있습니다. &lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;클래스 뷰는&lt;/span&gt; class IndexView(TemplateView):&lt;/b&gt; 와 같이 사용하고 &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;함수형 뷰는 def index(request):&lt;/b&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2) urls.py에 해당 뷰 path 등록하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591857190557&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from django.contrib import admin
from django.urls import path
from django.conf.urls import url
import fin.views

urlpatterns = [
    path('admin/', admin.site.urls),
    # 추가로 생성한 urls
    path('', IndexView.as_view(), name='index'), # 클래스 기반 뷰를 선언했을 경우 이것
    path('', fin.views.index , name='index'), # 함수 기반 뷰를 선언했을 경우 이것
]
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;234&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/doFF71/btqEL5pwwUr/fEWvukRaz4Py77uviZlUKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/doFF71/btqEL5pwwUr/fEWvukRaz4Py77uviZlUKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/doFF71/btqEL5pwwUr/fEWvukRaz4Py77uviZlUKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdoFF71%2FbtqEL5pwwUr%2FfEWvukRaz4Py77uviZlUKK%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;1174&quot; height=&quot;234&quot; data-origin-width=&quot;1174&quot; data-origin-height=&quot;234&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;127.0.0.1:8000 홈페이지를 새로고침을 하면 아까 전에 만들었던 html을 확인할 수 있습니다. 여기까지하니 이제 대충 흐름이 이해가 되네요! 다음 글에서는 index.html의 내용에 대해 다루어보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어/Python</category>
      <category>PostgreSQL</category>
      <category>Python</category>
      <category>pythonPostgreSQL</category>
      <category>파이썬</category>
      <category>파이썬제작</category>
      <category>파이썬홈페이지</category>
      <category>파이썬홈페이지제작</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/97</guid>
      <comments>https://milkoon1.tistory.com/97#entry97comment</comments>
      <pubDate>Thu, 11 Jun 2020 14:59:39 +0900</pubDate>
    </item>
    <item>
      <title>Python with Django : 장고 웹 프로그래밍 &amp;amp; PostgreSQL 사용해서 만들기(1)</title>
      <link>https://milkoon1.tistory.com/96</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;저번 글들은 &quot;파이썬 웹 프로그래밍, 실전편&quot;이라는 책을 참고하여 연습해본 글들입니다. 이번 글부터는 제가 실제 만들고 싶은 웹사이트를 만들어보도록 해보겠습니다. 만약 파이썬 설치 및 PostgreSQL 설치 등 진행이 안되신 분들은 아래의 링크를 참고해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1591840627692&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;1. 파이썬 설치(현재 최신버전 3.8.3) 파이썬을 배우기에 앞서 파이썬을 설치해봅시다. 파이썬 홈페이지는 아래의 링크를 참고해주시면 됩니다. 현재 2020년 6월기준 파이썬 최신 버전은 3.8.3버전이&quot; data-og-host=&quot;milkoon1.tistory.com&quot; data-og-source-url=&quot;https://milkoon1.tistory.com/32?category=851134&quot; data-og-url=&quot;https://milkoon1.tistory.com/32&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dAY45X/hyGnOJ8HJN/RRlegXKdG6rF9TdXiegHx0/img.png?width=800&amp;amp;height=531&amp;amp;face=0_0_800_531,https://scrap.kakaocdn.net/dn/c8lKv4/hyGmKCy19A/mUk842r1vsqxsd4UVKs2iK/img.png?width=800&amp;amp;height=531&amp;amp;face=0_0_800_531,https://scrap.kakaocdn.net/dn/xZ3TU/hyGnQBbeSC/buZI0qN8h8wKsAraQcDl20/img.png?width=1309&amp;amp;height=870&amp;amp;face=0_0_1309_870&quot;&gt;&lt;a href=&quot;https://milkoon1.tistory.com/32?category=851134&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://milkoon1.tistory.com/32?category=851134&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dAY45X/hyGnOJ8HJN/RRlegXKdG6rF9TdXiegHx0/img.png?width=800&amp;amp;height=531&amp;amp;face=0_0_800_531,https://scrap.kakaocdn.net/dn/c8lKv4/hyGmKCy19A/mUk842r1vsqxsd4UVKs2iK/img.png?width=800&amp;amp;height=531&amp;amp;face=0_0_800_531,https://scrap.kakaocdn.net/dn/xZ3TU/hyGnQBbeSC/buZI0qN8h8wKsAraQcDl20/img.png?width=1309&amp;amp;height=870&amp;amp;face=0_0_1309_870');&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;Python : 파이썬 설치 및 가상환경 만들기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 파이썬 설치(현재 최신버전 3.8.3) 파이썬을 배우기에 앞서 파이썬을 설치해봅시다. 파이썬 홈페이지는 아래의 링크를 참고해주시면 됩니다. 현재 2020년 6월기준 파이썬 최신 버전은 3.8.3버전이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;milkoon1.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;figure id=&quot;og_1591846270673&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;PostgreSQL : Window PostgreSQL(포스트-그레스-큐엘) 설치 방법&quot; data-og-description=&quot;PostgreSQL은 관계형 데이터베이스 시스템의 일종이며, 오픈소스 DBMS이다. 1. PostgreSQL 다운로드 우선 PostgreSQL 공식홈페이지에 갑니다. 그리고 본인의 PC 사양에 맞는 것을 다운로드 합니다. PostgreSQL: &quot; data-og-host=&quot;milkoon1.tistory.com&quot; data-og-source-url=&quot;https://milkoon1.tistory.com/93?category=797548&quot; data-og-url=&quot;https://milkoon1.tistory.com/93&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/WmXYp/hyGnPh1Cdx/Bmq3kbwkKrpVRACZJhYdN0/img.png?width=800&amp;amp;height=309&amp;amp;face=0_0_800_309,https://scrap.kakaocdn.net/dn/bZC2J2/hyGmMAsHUk/KBIH51jsASV0MHZF1pd3w1/img.png?width=800&amp;amp;height=309&amp;amp;face=0_0_800_309,https://scrap.kakaocdn.net/dn/i5mPT/hyGnKA1vWA/TByihHi1iJOooUCPp0DdV0/img.png?width=1865&amp;amp;height=785&amp;amp;face=0_0_1865_785&quot;&gt;&lt;a href=&quot;https://milkoon1.tistory.com/93?category=797548&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://milkoon1.tistory.com/93?category=797548&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/WmXYp/hyGnPh1Cdx/Bmq3kbwkKrpVRACZJhYdN0/img.png?width=800&amp;amp;height=309&amp;amp;face=0_0_800_309,https://scrap.kakaocdn.net/dn/bZC2J2/hyGmMAsHUk/KBIH51jsASV0MHZF1pd3w1/img.png?width=800&amp;amp;height=309&amp;amp;face=0_0_800_309,https://scrap.kakaocdn.net/dn/i5mPT/hyGnKA1vWA/TByihHi1iJOooUCPp0DdV0/img.png?width=1865&amp;amp;height=785&amp;amp;face=0_0_1865_785');&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;PostgreSQL : Window PostgreSQL(포스트-그레스-큐엘) 설치 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;PostgreSQL은 관계형 데이터베이스 시스템의 일종이며, 오픈소스 DBMS이다. 1. PostgreSQL 다운로드 우선 PostgreSQL 공식홈페이지에 갑니다. 그리고 본인의 PC 사양에 맞는 것을 다운로드 합니다. PostgreSQL:&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;milkoon1.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;0. 개발환경&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591846224599&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;- Python : 3.8.3
- Django : 3.0.7
- PostgreSQL : 12.3
- psycopg2 : 2.8.5
- OS : Windows 10&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. 가상환경 접속 및 프로젝트 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591841291426&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 가상환경으로 접근
C:\dev\Python\VENV&amp;gt;C:\dev\Python\VENV\dJangoVenv\Scripts\activate.bat

# 프로젝트생성
(dJangoVenv) C:\dev\Python&amp;gt;django-admin startproject mySite

# 프로젝트 상위 폴더 이름 바꾸기 - 상위 폴더와 하위폴더명이 동일하기에 상위폴더명을 변경
(dJangoVenv) C:\dev\Python&amp;gt;ren mySite finpmProject

# 서버실행
(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;python manage.py runserver

&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. 프로젝트 데이터베이스 변경하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;* PostgreSQL 설치 및 데이터베이스, 테이블 생성까지 완료한 상태라고 가정하고 프로젝트를 진행합니다. 만약 데이터베이스 생성을 하지 못하신 분들은 아래의 링크를 참고해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1591846737129&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;PostgreSQL : 윈도우(Window)에서 테이블 생성하는 방법&quot; data-og-description=&quot;PostgreSQL 데이터베이스 서버를 접속하려면 몇 가지 정보를 지정해야합니다. 그것을 간략하게 말하자면, 실행되고 있는 호스트 이름이나 IP, 서버의 포트 번호, 서버로 접속할 역할 이름(사용자 이&quot; data-og-host=&quot;milkoon1.tistory.com&quot; data-og-source-url=&quot;https://milkoon1.tistory.com/94?category=797548&quot; data-og-url=&quot;https://milkoon1.tistory.com/94&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/hUR2K/hyGmOru7VV/yaz0pxYKOfGOkifmb532c0/img.png?width=800&amp;amp;height=381&amp;amp;face=0_0_800_381,https://scrap.kakaocdn.net/dn/Wa6Sm/hyGnTdEAdN/UZ8sFaf877Uk5tEBnP9cB1/img.png?width=800&amp;amp;height=381&amp;amp;face=0_0_800_381,https://scrap.kakaocdn.net/dn/qS17S/hyGnL0Z8NN/qw7KIGoDQ9XhYIvRzi3Hi0/img.png?width=1366&amp;amp;height=651&amp;amp;face=0_0_1366_651&quot;&gt;&lt;a href=&quot;https://milkoon1.tistory.com/94?category=797548&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://milkoon1.tistory.com/94?category=797548&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/hUR2K/hyGmOru7VV/yaz0pxYKOfGOkifmb532c0/img.png?width=800&amp;amp;height=381&amp;amp;face=0_0_800_381,https://scrap.kakaocdn.net/dn/Wa6Sm/hyGnTdEAdN/UZ8sFaf877Uk5tEBnP9cB1/img.png?width=800&amp;amp;height=381&amp;amp;face=0_0_800_381,https://scrap.kakaocdn.net/dn/qS17S/hyGnL0Z8NN/qw7KIGoDQ9XhYIvRzi3Hi0/img.png?width=1366&amp;amp;height=651&amp;amp;face=0_0_1366_651');&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;PostgreSQL : 윈도우(Window)에서 테이블 생성하는 방법&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;PostgreSQL 데이터베이스 서버를 접속하려면 몇 가지 정보를 지정해야합니다. 그것을 간략하게 말하자면, 실행되고 있는 호스트 이름이나 IP, 서버의 포트 번호, 서버로 접속할 역할 이름(사용자 이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;milkoon1.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;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;Python 프로젝트를 생성해보시면 데이터베이스는 sqlite3으로 default되어있을겁니다. 저는 이제 sqlite가 아닌 PostgreSQL을 사용할 예정이라 이 부분을 변경하도록 하겠습니다. &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;PostgreSQL로 데이터베이스 설정을 변경하려면 Python 프로젝트의 setting.py를 수정해야합니다.&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591845494805&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#  변경 전
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}

# 형식 
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': &amp;lsquo;&amp;lt;db_name&amp;gt;&amp;rsquo;,
        'USER': '&amp;lt;db_username&amp;gt;',
        'PASSWORD': '&amp;lt;password&amp;gt;',
        'HOST': '&amp;lt;db_hostname_or_ip&amp;gt;',
        'PORT': '&amp;lt;db_port&amp;gt;',
    }
}

# 변경 후
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'finpm',
        'USER': 'finpm_admin',
        'PASSWORD':'비밀번호',
        'HOST':'127.0.0.1',
        'PORT':'5432',
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;* PostgreSQL의 psycopg2와 sqlalchemy 차이점&lt;/b&gt; : psycopg2는 실행하고자 하는 쿼리를 스트링형태로 그대로 넘겨주면 되서 편하지만 쿼리 실행 결과가 python list형태로 반환되기 때문에 이를 다루기가 까다로운 점이 있습니다.&amp;nbsp; sqlalchemy는 쿼리를 조회하려면 meta를 이용해서 select 클래스를 사용해야 하기에 복잡합니다. 하지만 meta를 사용하지 않고 pandas의 read_sql를 이용해 조회하면 sql구문 그대로 조회가 가능합니다. psycopg2와 sqlalchemy 중 sqlalchemy를 추천하는 이유는 pandas만 이용할 때는 둘 중 아무거나 사용해도 무관하지만 read_sql_table의 경우 sqlalchemy 연결할 때만 동작이 가능합니다.&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1) psycopg2 설치&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591847063430&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 가상환경으로 접근
C:\dev\Python\VENV&amp;gt;C:\dev\Python\VENV\dJangoVenv\Scripts\activate.bat

# psycopg2 설치
(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;pip install psycopg2

# psycopg2 실행
(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;python -c &quot;import psycopg2&quot;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2) 마이그레이션 및 슈퍼유저 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591847466130&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 마이그레이션
(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;python manage.py migrate

# django 관리자 생성
(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;python manage.py createsuperuser --username finpm_admin

# 테스트 서버 실행 
(dJangoVenv) C:\dev\Python\finpmProject&amp;gt;python manage.py runserver&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3) 데이터베이스 연동확인하기&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;만약 연동이 성공되었으면 pyadmin4에서 해당 데이터베이스의 schema - Tables에서 Django와 연동된 테이블목록을 확인할 수 있습니다.&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;1569&quot; data-origin-height=&quot;746&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bQAahT/btqEKgkxwdp/MdVJ4XPb1kLUp44cLtvBX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bQAahT/btqEKgkxwdp/MdVJ4XPb1kLUp44cLtvBX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bQAahT/btqEKgkxwdp/MdVJ4XPb1kLUp44cLtvBX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbQAahT%2FbtqEKgkxwdp%2FMdVJ4XPb1kLUp44cLtvBX0%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;1569&quot; height=&quot;746&quot; data-origin-width=&quot;1569&quot; data-origin-height=&quot;746&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;4) 127.0.0.1 확인하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;python manage.py runserver을 하면 테스트 서버를 실행하게 되는데 정상적으로 실행되는지 확인합니다.&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;958&quot; data-origin-height=&quot;568&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwY2Bw/btqELzcnEpE/X0iwCOKiqiklasmvyPSUF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwY2Bw/btqELzcnEpE/X0iwCOKiqiklasmvyPSUF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwY2Bw/btqELzcnEpE/X0iwCOKiqiklasmvyPSUF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwY2Bw%2FbtqELzcnEpE%2FX0iwCOKiqiklasmvyPSUF1%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;958&quot; height=&quot;568&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;568&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;955&quot; data-origin-height=&quot;543&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWJ2ow/btqELyEuTxS/ABx8UhmHug35qMNwhxg8a0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWJ2ow/btqELyEuTxS/ABx8UhmHug35qMNwhxg8a0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWJ2ow/btqELyEuTxS/ABx8UhmHug35qMNwhxg8a0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWJ2ow%2FbtqELyEuTxS%2FABx8UhmHug35qMNwhxg8a0%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;955&quot; height=&quot;543&quot; data-origin-width=&quot;955&quot; data-origin-height=&quot;543&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;위의 사이트는 admin 페이지로 아까 전 createsuperuser에서 등록했던 Username과 Password를 입력하면 됩니다.&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;952&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1RNHq/btqEKflCaTA/T0zDVRYH2St9r0YKfwdoJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1RNHq/btqEKflCaTA/T0zDVRYH2St9r0YKfwdoJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1RNHq/btqEKflCaTA/T0zDVRYH2St9r0YKfwdoJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1RNHq%2FbtqEKflCaTA%2FT0zDVRYH2St9r0YKfwdoJ1%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;952&quot; height=&quot;333&quot; data-origin-width=&quot;952&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;정상적으로 로그인되는 것을 확인할 수 있었습니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>언어/Python</category>
      <category>django와PostgreSQL</category>
      <category>django프로젝트</category>
      <category>python프로젝트</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/96</guid>
      <comments>https://milkoon1.tistory.com/96#entry96comment</comments>
      <pubDate>Thu, 11 Jun 2020 11:09:19 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL : pgAdmin 화면 영어를 한글로 변경하기</title>
      <link>https://milkoon1.tistory.com/95</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;1.PNG&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0HpJ4/btqEK8MIGgk/okQVpzXk6K9kEJDWNXprO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0HpJ4/btqEK8MIGgk/okQVpzXk6K9kEJDWNXprO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0HpJ4/btqEK8MIGgk/okQVpzXk6K9kEJDWNXprO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0HpJ4%2FbtqEK8MIGgk%2FokQVpzXk6K9kEJDWNXprO1%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;1364&quot; height=&quot;427&quot; data-filename=&quot;1.PNG&quot; data-origin-width=&quot;1364&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;최근 PostgreSQL을 사용할 일이 생겨서 한번 설치해봤는데 pgAdmin에서 모든 글을 다 영어로 보여주고 있더라고요. 아 여기는 한글 지원을 안하는건가 싶어서 구글링해보니 역시 구글은 다 알려줘! 저처럼 한글로 변경하고 싶은 분들은 pgAdmin 상단에 있는 [Preferences]를 클릭하세요.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-filename=&quot;2.PNG&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/J1ERy/btqEMjfpJFu/R8DBIXrplyOrEaXjGakbak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/J1ERy/btqEMjfpJFu/R8DBIXrplyOrEaXjGakbak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/J1ERy/btqEMjfpJFu/R8DBIXrplyOrEaXjGakbak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJ1ERy%2FbtqEMjfpJFu%2FR8DBIXrplyOrEaXjGakbak%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;915&quot; height=&quot;564&quot; data-filename=&quot;2.PNG&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;564&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;[Preferences] 창에 들어오시면 Miscellaneous라는 속성이 보이실겁니다. 그 안에 있는 User language를 클릭! 그럼 현재 재 default로 English가 되어있죠? 그걸 Korean으로 변경하고 Save해줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-filename=&quot;3.PNG&quot; data-origin-width=&quot;1377&quot; data-origin-height=&quot;653&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dSZCQD/btqEK7GX977/q72EXWe8vZwglYD7XjO0I1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dSZCQD/btqEK7GX977/q72EXWe8vZwglYD7XjO0I1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dSZCQD/btqEK7GX977/q72EXWe8vZwglYD7XjO0I1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdSZCQD%2FbtqEK7GX977%2Fq72EXWe8vZwglYD7XjO0I1%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;1377&quot; height=&quot;653&quot; data-filename=&quot;3.PNG&quot; data-origin-width=&quot;1377&quot; data-origin-height=&quot;653&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그리고 Servers를 누른다음 새로고침(F5)를 누르면 이렇게 한글로 보이는걸 확인하실 수 있게됩니다. 아니 처음 깔았을 때 Korean으로 설정했으면 이 language도 한글로 보여달라고ㅠㅠ 아무튼 쉽게 한글로 변경 완료!&lt;/span&gt;&lt;/p&gt;</description>
      <category>DataBase/PostgreSQL</category>
      <category>PostgreSQL</category>
      <category>postgreSQL영어에서한글로변경</category>
      <category>postgreSQL한글</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/95</guid>
      <comments>https://milkoon1.tistory.com/95#entry95comment</comments>
      <pubDate>Thu, 11 Jun 2020 09:09:11 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL : 윈도우(Window)에서 테이블 생성하는 방법</title>
      <link>https://milkoon1.tistory.com/94</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1366&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/XMgiF/btqEKw1y3uu/IPn13oMqALuURXFuM2ctv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/XMgiF/btqEKw1y3uu/IPn13oMqALuURXFuM2ctv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/XMgiF/btqEKw1y3uu/IPn13oMqALuURXFuM2ctv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FXMgiF%2FbtqEKw1y3uu%2FIPn13oMqALuURXFuM2ctv0%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;1366&quot; height=&quot;651&quot; data-origin-width=&quot;1366&quot; data-origin-height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;PostgreSQL 데이터베이스 서버를 접속하려면 몇 가지 정보를 지정해야합니다. 그것을 간략하게 말하자면, &lt;span style=&quot;background-color: #f6e199;&quot;&gt;&lt;b&gt;실행되고 있는 호스트 이름이나 IP, 서버의 포트 번호, 서버로 접속할 역할 이름(사용자 이름), 그 역할의 비밀번호, 테이터베이스 이름&amp;nbsp;&lt;/b&gt;&lt;/span&gt;등이 있습니다. 위의 사진은 PostgreSQL을 처음 접속할 때 default로 생성되어 있는 데이터베이스입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. 데이터베이스 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1370&quot; data-origin-height=&quot;639&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boHMG0/btqELQSklpA/gmKIK1qJJsZO2R6GPVlIF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boHMG0/btqELQSklpA/gmKIK1qJJsZO2R6GPVlIF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boHMG0/btqELQSklpA/gmKIK1qJJsZO2R6GPVlIF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboHMG0%2FbtqELQSklpA%2FgmKIK1qJJsZO2R6GPVlIF0%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;1370&quot; height=&quot;639&quot; data-origin-width=&quot;1370&quot; data-origin-height=&quot;639&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;테이블을 생성하기에 앞서 우선 test용으로 쓸 데이터베이스를 생성해보도록 합시다. [데이터베이스]를 포인트 잡고 마우스 오른쪽버튼을 누르시면 Create - Database가 보입니다. 그걸 클릭!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;657&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bntFnB/btqEK8FWkO1/NP7qNHa5uO9s5ocnFQBrwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bntFnB/btqEK8FWkO1/NP7qNHa5uO9s5ocnFQBrwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bntFnB/btqEK8FWkO1/NP7qNHa5uO9s5ocnFQBrwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbntFnB%2FbtqEK8FWkO1%2FNP7qNHa5uO9s5ocnFQBrwK%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;1272&quot; height=&quot;657&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;657&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그럼 위의 사진과 같이 Database의 이름을 설정하는 화면부터 보이는데 저는 이제 지금 테스트로 만드는 데이터베이스이니 TEST로 설정하겠습니다. 저를 보고 따라하시는 분들은 원하시는 데이터베이스 이름으로 설정해주시기 바랍니다. 그 외 다른 탭들을 확인해보면 Encoding, Tablespace 등 다른 것들을 설정할 수 있는 정보들이 있는데 저는 그냥 Encoding은 UTF-8로 지정한 후 Save버튼을 눌렀습니다. Save버튼을 클릭하면 데이터베이스가 생성됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;1241&quot; data-origin-height=&quot;686&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bND19D/btqEKv2JZag/C4oegKjkL2khsGNMaWIPF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bND19D/btqEKv2JZag/C4oegKjkL2khsGNMaWIPF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bND19D/btqEKv2JZag/C4oegKjkL2khsGNMaWIPF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbND19D%2FbtqEKv2JZag%2FC4oegKjkL2khsGNMaWIPF0%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;1241&quot; height=&quot;686&quot; data-origin-width=&quot;1241&quot; data-origin-height=&quot;686&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그럼 위의 사진과 같이 TEST데이터베이스가 생성된 것을 확인할 수 있습니다. 이제는 테이블을 생성해보도록 합시다. 테이블은 스키마(Schema)를 더블클릭하시면 테이블(Table)이 보이실겁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. 테이블 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;629&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dnZdai/btqEK7tsFKt/9DKgXysnxyWu8VgkRC75Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dnZdai/btqEK7tsFKt/9DKgXysnxyWu8VgkRC75Ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dnZdai/btqEK7tsFKt/9DKgXysnxyWu8VgkRC75Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdnZdai%2FbtqEK7tsFKt%2F9DKgXysnxyWu8VgkRC75Ek%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;1056&quot; height=&quot;629&quot; data-origin-width=&quot;1056&quot; data-origin-height=&quot;629&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;해당 테이블에 포커스를 놓고 마우스 오른쪽버튼을 클릭하면 아까 데이터베이스를 만든 과정과 동일하게 Create - Table을 클릭하시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;572&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBL6mE/btqELSbvIHl/izcWUJ3Nkm3i9yWx4NrLw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBL6mE/btqELSbvIHl/izcWUJ3Nkm3i9yWx4NrLw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBL6mE/btqELSbvIHl/izcWUJ3Nkm3i9yWx4NrLw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBL6mE%2FbtqELSbvIHl%2FizcWUJ3Nkm3i9yWx4NrLw0%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;726&quot; height=&quot;572&quot; data-origin-width=&quot;726&quot; data-origin-height=&quot;572&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그럼 아까 데이터베이스 만든 것과 똑같이 Table 이름을 설정하라는 창이 뜨는데 테이블 이름은 member로 지정해서 만들어보도록 하겠습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uxEQJ/btqEK8MJu9r/o2n7YpgxX5raQDtuKqgaKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uxEQJ/btqEK8MJu9r/o2n7YpgxX5raQDtuKqgaKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uxEQJ/btqEK8MJu9r/o2n7YpgxX5raQDtuKqgaKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FuxEQJ%2FbtqEK8MJu9r%2Fo2n7YpgxX5raQDtuKqgaKk%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;701&quot; height=&quot;560&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;560&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;그 다음 Columns탭으로 가보면 여기는 이제 컬럼들을 지정하는 화면입니다. 처음에 들어갔을 때는 빈 칸으로 보여지실텐데 오른쪽에 보이는 (+)버튼을 클릭하면서 내가 테이블에 넣을 컬럼들을 지정해주면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;562&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNhr0a/btqEL5IuxmW/or9dW0ZJ17CSejmBikt9k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNhr0a/btqEL5IuxmW/or9dW0ZJ17CSejmBikt9k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNhr0a/btqEL5IuxmW/or9dW0ZJ17CSejmBikt9k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNhr0a%2FbtqEL5IuxmW%2For9dW0ZJ17CSejmBikt9k0%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;705&quot; height=&quot;562&quot; data-origin-width=&quot;705&quot; data-origin-height=&quot;562&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;이건 쿼리용으로 만든 것은 아니고요. 아까 Columns탭에서 만들었던 컬럼들을 보여주는 화면입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;1268&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boFm5Q/btqELyRShuI/7th4rvH9EyYRBCjMF7YXk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boFm5Q/btqELyRShuI/7th4rvH9EyYRBCjMF7YXk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boFm5Q/btqELyRShuI/7th4rvH9EyYRBCjMF7YXk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboFm5Q%2FbtqELyRShuI%2F7th4rvH9EyYRBCjMF7YXk1%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;1268&quot; height=&quot;614&quot; data-origin-width=&quot;1268&quot; data-origin-height=&quot;614&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;테이블 컬럼들이 이상이 없으면 Save! 그러면 member라는 테이블이 생성된 것을 확인할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. 유저 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKhGYZ/btqELSQeFUV/TGsaBWBkCIs5DsTDgaLn80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKhGYZ/btqELSQeFUV/TGsaBWBkCIs5DsTDgaLn80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKhGYZ/btqELSQeFUV/TGsaBWBkCIs5DsTDgaLn80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKhGYZ%2FbtqELSQeFUV%2FTGsaBWBkCIs5DsTDgaLn80%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;929&quot; height=&quot;289&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;기본유저인 postgres말고 새로운 유저를 생성하고 싶으신 분들은 위의 사진과 같이 로그인/그룹롤(Login/Group Role)에서 추가로 생성하시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;709&quot; data-origin-height=&quot;562&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AtOJY/btqEL52PE3H/78pnEt3dchHsIPyjNjYLK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AtOJY/btqEL52PE3H/78pnEt3dchHsIPyjNjYLK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AtOJY/btqEL52PE3H/78pnEt3dchHsIPyjNjYLK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAtOJY%2FbtqEL52PE3H%2F78pnEt3dchHsIPyjNjYLK0%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;709&quot; height=&quot;562&quot; data-origin-width=&quot;709&quot; data-origin-height=&quot;562&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;559&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KSs8M/btqELSQeNds/8OEVJF0MIP0mZtZTG2K3gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KSs8M/btqELSQeNds/8OEVJF0MIP0mZtZTG2K3gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KSs8M/btqELSQeNds/8OEVJF0MIP0mZtZTG2K3gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKSs8M%2FbtqELSQeNds%2F8OEVJF0MIP0mZtZTG2K3gk%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;708&quot; height=&quot;559&quot; data-origin-width=&quot;708&quot; data-origin-height=&quot;559&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;562&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z0FXg/btqEM9XM0fI/VMbkt6NkRcChmvfHyrRfHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z0FXg/btqEM9XM0fI/VMbkt6NkRcChmvfHyrRfHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z0FXg/btqEM9XM0fI/VMbkt6NkRcChmvfHyrRfHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ0FXg%2FbtqEM9XM0fI%2FVMbkt6NkRcChmvfHyrRfHk%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;713&quot; height=&quot;562&quot; data-origin-width=&quot;713&quot; data-origin-height=&quot;562&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Privileges 탭은 권한을 부여하는 창으로, 저같은 경우 admin에게 모든 권한을 부여하도록 하겠습니다. 이렇게 하면 유저 생성도 완료!!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;처음에 생성했던 데이터베이스를 이 admin에게 설정하고 싶으시면 데이터베이스 포커스한 다음 마우스 오른쪽버튼 클릭 후 properties에 들어가서 Owner를 변경해주시면 된답니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>DataBase/PostgreSQL</category>
      <category>PostgreSQL</category>
      <category>postgreSQL테이블생성</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/94</guid>
      <comments>https://milkoon1.tistory.com/94#entry94comment</comments>
      <pubDate>Thu, 11 Jun 2020 08:59:05 +0900</pubDate>
    </item>
    <item>
      <title>PostgreSQL : Window PostgreSQL(포스트-그레스-큐엘) 설치 방법</title>
      <link>https://milkoon1.tistory.com/93</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;PostgreSQL은 관계형 데이터베이스 시스템의 일종이며, 오픈소스 DBMS이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. PostgreSQL 다운로드&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;우선 PostgreSQL 공식홈페이지에 갑니다. 그리고 본인의 PC 사양에 맞는 것을 다운로드 합니다.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1591776212664&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;PostgreSQL: Downloads&quot; data-og-description=&quot;Downloads PostgreSQL Core Distribution The core of the PostgreSQL object-relational database management system is available in several source and binary formats. Binary packages Pre-built binary packages are available for a number of different operating sy&quot; data-og-host=&quot;www.postgresql.org&quot; data-og-source-url=&quot;https://www.postgresql.org/download/&quot; data-og-url=&quot;https://www.postgresql.org/download/&quot; data-og-image=&quot;&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://www.postgresql.org/download/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.postgresql.org/download/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;PostgreSQL: Downloads&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Downloads PostgreSQL Core Distribution The core of the PostgreSQL object-relational database management system is available in several source and binary formats. Binary packages Pre-built binary packages are available for a number of different operating sy&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.postgresql.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;722&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q8Q6k/btqEKwNwVtO/qpUHPKIsq0kJdH3qxKowE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q8Q6k/btqEKwNwVtO/qpUHPKIsq0kJdH3qxKowE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q8Q6k/btqEKwNwVtO/qpUHPKIsq0kJdH3qxKowE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ8Q6k%2FbtqEKwNwVtO%2FqpUHPKIsq0kJdH3qxKowE0%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;1868&quot; height=&quot;722&quot; data-origin-width=&quot;1868&quot; data-origin-height=&quot;722&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;1865&quot; data-origin-height=&quot;785&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JvxmP/btqEL5OLvll/gh4nhwCRozIkvJ7jPVmV4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JvxmP/btqEL5OLvll/gh4nhwCRozIkvJ7jPVmV4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JvxmP/btqEL5OLvll/gh4nhwCRozIkvJ7jPVmV4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJvxmP%2FbtqEL5OLvll%2Fgh4nhwCRozIkvJ7jPVmV4k%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;1865&quot; height=&quot;785&quot; data-origin-width=&quot;1865&quot; data-origin-height=&quot;785&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;3.PNG&quot; data-origin-width=&quot;1285&quot; data-origin-height=&quot;668&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UZOWA/btqELyqmWuI/pD4qD3pPVgdPUS9ZcjS9qK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UZOWA/btqELyqmWuI/pD4qD3pPVgdPUS9ZcjS9qK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UZOWA/btqELyqmWuI/pD4qD3pPVgdPUS9ZcjS9qK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUZOWA%2FbtqELyqmWuI%2FpD4qD3pPVgdPUS9ZcjS9qK%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;1285&quot; height=&quot;668&quot; data-filename=&quot;3.PNG&quot; data-origin-width=&quot;1285&quot; data-origin-height=&quot;668&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;2020.06.10 기준 현재 PostgreSQL의 최신버전은 12.3입니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-filename=&quot;4.PNG&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mgTxe/btqEKgc4XnO/xAjhrCKKonQmYbFSA0Sky0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mgTxe/btqEKgc4XnO/xAjhrCKKonQmYbFSA0Sky0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mgTxe/btqEKgc4XnO/xAjhrCKKonQmYbFSA0Sky0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmgTxe%2FbtqEKgc4XnO%2FxAjhrCKKonQmYbFSA0Sky0%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;1304&quot; height=&quot;697&quot; data-filename=&quot;4.PNG&quot; data-origin-width=&quot;1304&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;다운로드 버튼을 클릭하면 실행파일을 다운받았을 겁니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-filename=&quot;5.PNG&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;431&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dtPv0T/btqEKRqm9oT/EqyA7CNLbTgGcTQ4Rxx4R0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dtPv0T/btqEKRqm9oT/EqyA7CNLbTgGcTQ4Rxx4R0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dtPv0T/btqEKRqm9oT/EqyA7CNLbTgGcTQ4Rxx4R0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdtPv0T%2FbtqEKRqm9oT%2FEqyA7CNLbTgGcTQ4Rxx4R0%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;551&quot; height=&quot;431&quot; data-filename=&quot;5.PNG&quot; data-origin-width=&quot;551&quot; data-origin-height=&quot;431&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;6.PNG&quot; data-origin-width=&quot;557&quot; data-origin-height=&quot;434&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sAzrS/btqEKRDUEXO/XoPpfrxQxYDhnakgabcM61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sAzrS/btqEKRDUEXO/XoPpfrxQxYDhnakgabcM61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sAzrS/btqEKRDUEXO/XoPpfrxQxYDhnakgabcM61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsAzrS%2FbtqEKRDUEXO%2FXoPpfrxQxYDhnakgabcM61%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;557&quot; height=&quot;434&quot; data-filename=&quot;6.PNG&quot; data-origin-width=&quot;557&quot; data-origin-height=&quot;434&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;7.PNG&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zqPZ2/btqELSoAQRY/2zeqxkFpyVkKigjW5bukqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zqPZ2/btqELSoAQRY/2zeqxkFpyVkKigjW5bukqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zqPZ2/btqELSoAQRY/2zeqxkFpyVkKigjW5bukqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzqPZ2%2FbtqELSoAQRY%2F2zeqxkFpyVkKigjW5bukqk%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;558&quot; height=&quot;441&quot; data-filename=&quot;7.PNG&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;superUser계정에 대한 비밀번호를 설정해야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;8.PNG&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;443&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBQlQU/btqEJhKkdsk/Z8fNeKErE2W75HAgvC03Bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBQlQU/btqEJhKkdsk/Z8fNeKErE2W75HAgvC03Bk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBQlQU/btqEJhKkdsk/Z8fNeKErE2W75HAgvC03Bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBQlQU%2FbtqEJhKkdsk%2FZ8fNeKErE2W75HAgvC03Bk%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;561&quot; height=&quot;443&quot; data-filename=&quot;8.PNG&quot; data-origin-width=&quot;561&quot; data-origin-height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Port 번호를 설정해주는 부분으로 기본포트번호는 5432입니다. 특정 포트로 바꾸지 않으실 계획이시면 그대로 패스하면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-filename=&quot;9.PNG&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yIIEp/btqEJhKkdtj/KN6YlkwIgYqc9ktVHN8Bd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yIIEp/btqEJhKkdtj/KN6YlkwIgYqc9ktVHN8Bd1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yIIEp/btqEJhKkdtj/KN6YlkwIgYqc9ktVHN8Bd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyIIEp%2FbtqEJhKkdtj%2FKN6YlkwIgYqc9ktVHN8Bd1%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;559&quot; height=&quot;441&quot; data-filename=&quot;9.PNG&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Locale은 Korean, Korea로 선택합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; 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;widthContent&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cchRxO/btqEJBV7hyT/ZCD6iNIAuxfqehIY0roXe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cchRxO/btqEJBV7hyT/ZCD6iNIAuxfqehIY0roXe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cchRxO/btqEJBV7hyT/ZCD6iNIAuxfqehIY0roXe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcchRxO%2FbtqEJBV7hyT%2FZCD6iNIAuxfqehIY0roXe1%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;558&quot; height=&quot;441&quot; data-origin-width=&quot;558&quot; data-origin-height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;설치가 완료된 후 Stack Builder를 체크해제 한 후 finish버튼을 누르면 PostgreSQL 설치완료.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. pgAdmin4 실행하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;pgAdmin4는 PostgreSQL을 확인할 수 있는 플랫폼으로써, 데이터베이스 생성 및 테이블 생성, 조회 등을 작업할 수 있습니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;1553&quot; data-origin-height=&quot;651&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZBv3q/btqEJiJc5Qv/p7nOJ8Mlo9FRBkzh4FQuX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZBv3q/btqEJiJc5Qv/p7nOJ8Mlo9FRBkzh4FQuX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZBv3q/btqEJiJc5Qv/p7nOJ8Mlo9FRBkzh4FQuX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZBv3q%2FbtqEJiJc5Qv%2Fp7nOJ8Mlo9FRBkzh4FQuX0%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;1553&quot; height=&quot;651&quot; data-origin-width=&quot;1553&quot; data-origin-height=&quot;651&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. 번외 CMD창에서 postgreSQL을 사용하려면 환경변수 설정하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;487&quot; data-origin-height=&quot;542&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wful6/btqEK7mMIpw/ufiFpiQWIbwuk8lxFMDj1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wful6/btqEK7mMIpw/ufiFpiQWIbwuk8lxFMDj1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wful6/btqEK7mMIpw/ufiFpiQWIbwuk8lxFMDj1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWful6%2FbtqEK7mMIpw%2FufiFpiQWIbwuk8lxFMDj1k%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;487&quot; height=&quot;542&quot; data-origin-width=&quot;487&quot; data-origin-height=&quot;542&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Windows 키 + pause break 클릭해서 시스템창 키고 고급 시스템 설정에 들어갑니다. 그 다음 시스템 속성창에 보이는 환경변수 들어갑니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;510&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eAB7rq/btqEMkS2w3W/GU6tAJUKKIsbJRvenQ4rjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eAB7rq/btqEMkS2w3W/GU6tAJUKKIsbJRvenQ4rjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eAB7rq/btqEMkS2w3W/GU6tAJUKKIsbJRvenQ4rjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeAB7rq%2FbtqEMkS2w3W%2FGU6tAJUKKIsbJRvenQ4rjk%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;529&quot; height=&quot;510&quot; data-origin-width=&quot;529&quot; data-origin-height=&quot;510&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Path에는 psql.exe가 있는 폴더 경로를 추가합니다. 보통 PostgreSQL폴더는 Program Files 안에 있으니 본인이 설치한 버전의 PostgreSQL폴더의 bin까지 경로를 잡아주시면 됩니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>DataBase/PostgreSQL</category>
      <category>PostgreSQL</category>
      <category>postgresql다운로드</category>
      <category>PostgreSQL설치</category>
      <category>포스트그레스큐엘</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/93</guid>
      <comments>https://milkoon1.tistory.com/93#entry93comment</comments>
      <pubDate>Wed, 10 Jun 2020 17:21:00 +0900</pubDate>
    </item>
    <item>
      <title>웹 소켓(WebSocket)</title>
      <link>https://milkoon1.tistory.com/92</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;웹 환경은 브라우저(클라이언트)에서 웹 서버에 html문서를 요청하면, 웹 서버는 html를 작성하고 브라우저(클라이언트)에 응답 한 후 연결을 끊는 비동기 소켓 통신입니다. WebSocket은 브라우저(클라이언트)가 접속 요청을 하고 Web 서바가 응답을 한 후 연결을 끊는 것이 아니라&lt;b&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt; Connection을 그대로 유지하고 브라우저(클라이언트)의 요청이 없어도 데이터를 전송할 수 있는 프로토콜입니다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. 일반 웹의 프로토콜과 웹소켓의 예시&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;일반 웹 프로토콜의 경우는 서버와 브라우저(클라이언트)와 연결이 끊긴 상태이기 때문에 브라우저에서 요청이 오지 않는 이상 다른 사용자에게 응답 메세지를 보낼 수 없다. 하지만 WebSocket의 경우에는 서버와 브라우저(클라이언트)가 끊기지 않은 상태이기 때문에 브라우저(클라이언트)의 요청이 없어도 서버에서 브라우저로 메시지를 보낼 수가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. 웹소켓&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;WebSocket의 경우 HTML5부터 표준이 되어, WebSocket을 지원하지 않는 브라우저는 이제 없는거나 마찬가지입니다. 프로토콜 요청은 &lt;b&gt;ws://~ &lt;/b&gt;로 시작합니다. ssl방식이라면&lt;b&gt; wss://~&lt;/b&gt; 로 시작합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1) WebSocket(Java)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591833142661&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import javax.websocket.OnClose;
import javax.websocket.OnError;
import javax.websocket.OnMessage;
import javax.websocket.OnOpen;
import javax.websocket.server.ServerEndpoint;

// WebSocket의 호스트 주소 설정
@ServerEndpoint(&quot;/websocket&quot;)
public class Websocket {

  // WebSocket으로 브라우저가 접속하면 요청되는 함수
  @OnOpen
  public void handleOpen() {
    // 콘솔에 접속 로그를 출력한다.
    System.out.println(&quot;client is now connected...&quot;);
  }
  
  // WebSocket으로 메시지가 오면 요청되는 함수
  @OnMessage
  public String handleMessage(String message) {
    // 메시지 내용을 콘솔에 출력한다.
    System.out.println(&quot;receive from client : &quot; + message);
    // 에코 메시지를 작성한다.
    String replymessage = &quot;echo &quot; + message;
    // 에코 메시지를 콘솔에 출력한다.
    System.out.println(&quot;send to client : &quot;+replymessage);
    // 에코 메시지를 브라우저에 보낸다.
    return replymessage;
  }
  
  // WebSocket과 브라우저가 접속이 끊기면 요청되는 함수
  @OnClose
  public void handleClose() {
    // 콘솔에 접속 끊김 로그를 출력한다.
    System.out.println(&quot;client is now disconnected...&quot;);
  }
  
  // WebSocket과 브라우저 간에 통신 에러가 발생하면 요청되는 함수.
  @OnError
  public void handleError(Throwable t) {
    // 콘솔에 에러를 표시한다.
    t.printStackTrace();
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1591771959290&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;title&amp;gt;Web Socket Example&amp;lt;/title&amp;gt;&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;form&amp;gt;
&amp;lt;!-- 송신 메시지를 작성하는 텍스트 박스 --&amp;gt;
&amp;lt;input id=&quot;textMessage&quot; type=&quot;text&quot;&amp;gt;
&amp;lt;!-- 메시지 송신을 하는 버튼 --&amp;gt;
&amp;lt;input onclick=&quot;sendMessage()&quot; value=&quot;Send&quot; type=&quot;button&quot;&amp;gt;
&amp;lt;!-- WebSocket 접속 종료하는 버튼 --&amp;gt;
&amp;lt;input onclick=&quot;disconnect()&quot; value=&quot;Disconnect&quot; type=&quot;button&quot;&amp;gt;
&amp;lt;/form&amp;gt;
&amp;lt;br /&amp;gt;
&amp;lt;!-- 콘솔 메시지의 역할을 하는 로그 텍스트 에리어.(수신 메시지도 표시한다.) --&amp;gt;
&amp;lt;textarea id=&quot;messageTextArea&quot; rows=&quot;10&quot; cols=&quot;50&quot;&amp;gt;&amp;lt;/textarea&amp;gt;
    &amp;lt;script type=&quot;text/javascript&quot;&amp;gt;
    
    // 「WebSocketEx」는 프로젝트 명
    // 「websocket」는 호스트 명
    // WebSocket 오브젝트 생성 (자동으로 접속 시작한다. - onopen 함수 호출)
    var webSocket = new WebSocket(&quot;ws://localhost:8080/WebSocketEx/websocket&quot;);
    
    // 콘솔 텍스트 에리어 오브젝트
    var messageTextArea = document.getElementById(&quot;messageTextArea&quot;);
    
    // WebSocket 서버와 접속이 되면 호출되는 함수
    webSocket.onopen = function(message) {
    // 콘솔 텍스트에 메시지를 출력한다.
    messageTextArea.value += &quot;Server connect...\n&quot;;
    };
    
    // WebSocket 서버와 접속이 끊기면 호출되는 함수
    webSocket.onclose = function(message) {
    // 콘솔 텍스트에 메시지를 출력한다.
    messageTextArea.value += &quot;Server Disconnect...\n&quot;;
    };
    
    // WebSocket 서버와 통신 중에 에러가 발생하면 요청되는 함수
    webSocket.onerror = function(message) {
    // 콘솔 텍스트에 메시지를 출력한다.
    messageTextArea.value += &quot;error...\n&quot;;
    };
    
    // WebSocket 서버로 부터 메시지가 오면 호출되는 함수
    webSocket.onmessage = function(message) {
    // 콘솔 텍스트에 메시지를 출력한다.
    messageTextArea.value += &quot;Recieve From Server =&amp;gt; &quot;+message.data+&quot;\n&quot;;
    };
    
    // Send 버튼을 누르면 호출되는 함수
    function sendMessage() {
    // 송신 메시지를 작성하는 텍스트 박스 오브젝트를 취득한다.
    var message = document.getElementById(&quot;textMessage&quot;);
    // 콘솔 텍스트에 메시지를 출력한다.
    messageTextArea.value += &quot;Send to Server =&amp;gt; &quot;+message.value+&quot;\n&quot;;
    // WebSocket 서버에 메시지를 송신한다.
    webSocket.send(message.value);
    // 송신 메시지를 작성하는 텍스트 박스를 초기화한다.
    message.value = &quot;&quot;;
    }
    
    // Disconnect 버튼을 누르면 호출되는 함수
    function disconnect() {
    // WebSocket 접속 해제
    webSocket.close();
    }
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;해당 내용은 아래의 링크를 참고하여 공부하려고 재정리한 내용입니다. 자세한 사항은 아래의 링크를 참고해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1591772703735&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Java]  Servlet에서 사용하는 웹 소켓 (WebSocket)&quot; data-og-description=&quot;안녕하세요. 명월입니다. 이 글은 Java의 Servlet에서 사용하는 웹 소켓 (WebSocket) 에 대한 글입니다. 보통의 웹 환경은 브라우저(클라이언트)에서 웹 서버에 Html 문서를 요청하면, 웹 서버는 Html를 작&quot; data-og-host=&quot;nowonbun.tistory.com&quot; data-og-source-url=&quot;https://nowonbun.tistory.com/285&quot; data-og-url=&quot;https://nowonbun.tistory.com/285&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfxisd/hyGmKvaSV1/KR9drN4QrxMUAJPjZLbgPk/img.png?width=783&amp;amp;height=657&amp;amp;face=411_112_464_170,https://scrap.kakaocdn.net/dn/vfVbV/hyGmOdhufE/Rbx8LAKLWVGRR3Y9Ls1vh1/img.png?width=783&amp;amp;height=657&amp;amp;face=411_112_464_170,https://scrap.kakaocdn.net/dn/bOjitI/hyGmGzxeSE/kaOpjeN6DkRqkew5nGoJvk/img.png?width=783&amp;amp;height=657&amp;amp;face=411_112_464_170&quot; data-ke-align=&quot;alignLeft&quot;&gt;&lt;a href=&quot;https://nowonbun.tistory.com/285&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://nowonbun.tistory.com/285&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfxisd/hyGmKvaSV1/KR9drN4QrxMUAJPjZLbgPk/img.png?width=783&amp;amp;height=657&amp;amp;face=411_112_464_170,https://scrap.kakaocdn.net/dn/vfVbV/hyGmOdhufE/Rbx8LAKLWVGRR3Y9Ls1vh1/img.png?width=783&amp;amp;height=657&amp;amp;face=411_112_464_170,https://scrap.kakaocdn.net/dn/bOjitI/hyGmGzxeSE/kaOpjeN6DkRqkew5nGoJvk/img.png?width=783&amp;amp;height=657&amp;amp;face=411_112_464_170');&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;[Java] Servlet에서 사용하는 웹 소켓 (WebSocket)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;안녕하세요. 명월입니다. 이 글은 Java의 Servlet에서 사용하는 웹 소켓 (WebSocket) 에 대한 글입니다. 보통의 웹 환경은 브라우저(클라이언트)에서 웹 서버에 Html 문서를 요청하면, 웹 서버는 Html를 작&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;nowonbun.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2) WebSocket(C#)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591772572828&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using Fintax.Crypto;
using Fintax.Common.Utility;
using Fintax.Value;
using Newtonsoft.Json.Linq;
using System;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using WebSocketSharp;
using WebSocketSharp.Server;
using System.IO;

using Newtonsoft.Json.Linq;
using System;
using System.Security.Cryptography;
using System.Text;
using System.Windows.Forms;
using System.Xml;
using WebSocketSharp;
using WebSocketSharp.Server;
using System.IO;

namespace Project
{
    class WSBehavior : WebSocketBehavior
    {
        /// &amp;lt;summary&amp;gt;
        /// 요청에 대한 응답 처리 메소드
        /// &amp;lt;/summary&amp;gt;
        protected override void OnMessage(MessageEventArgs e)
        {
            string receivedString = Encoding.UTF8.GetString(e.RawData);
            var json = JObject.Parse(receivedString);

            string type = json[&quot;type&quot;].ToString();

            switch (type) {
                //로그인 요청 시
                case &quot;login&quot;:
                    try { 

                        //로그인 모듈 호출
                        string result = ShowFormAndReturnResult();

                        //결과값 웹페이지에 전송
                        Send(JObject.Parse(result).ToString());
                    }
                    catch (Exception ex)
                    {
                        JObject createResult = new JObject();
                        createResult.Add(&quot;type&quot;, &quot;error&quot;);
                        Send(createResult.ToString());
                    }
                    break;
            }
        }

        protected override void OnClose(CloseEventArgs e) {}
        protected override void OnError(WebSocketSharp.ErrorEventArgs e) { }
        protected override void OnOpen() {}

        /// &amp;lt;summary&amp;gt;
        /// 로그인 모듈 호출 및 결과 반환(동기식)
        /// &amp;lt;/summary&amp;gt;
        public string ShowFormAndReturnResult()
        {
            ProjectMain main = new ProjectMain();
            ProjectMain.WindowState = FormWindowState.Minimized;
            ProjectMain.Shown += delegate (Object sender, EventArgs e) {
                ((Form)sender).WindowState = FormWindowState.Normal;
            };
            ProjectMain.ShowDialog();
            return ProjectMain.Result;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1591772599143&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WebSocketSharp.Server;

namespace Project
{
    public class Server
    {
        private WebSocketServer server;

        public Server(int port)
        {
            server = new WebSocketServer(port);
            server.AddWebSocketService&amp;lt;WSBehavior&amp;gt;(&quot;/&quot;);
        }

        /// &amp;lt;summary&amp;gt;
        /// 서비 실행 
        /// &amp;lt;/summary&amp;gt;
        public void Start()
        {
            server.Start();
            Console.WriteLine(&quot;Starting websocket server at &quot; + server.Address.ToString() + &quot; : &quot; + server.Port);
        }

        /// &amp;lt;summary&amp;gt;
        /// 서버 소켓 리스닝 여부
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
        public Boolean IsListening()
        {
            return server.IsListening;
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IT/잡다한지식</category>
      <category>웹소켓</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/92</guid>
      <comments>https://milkoon1.tistory.com/92#entry92comment</comments>
      <pubDate>Wed, 10 Jun 2020 16:06:02 +0900</pubDate>
    </item>
    <item>
      <title>Python with Django : 파이썬을 이용한 단순 웹서버 구축 (Simple Web Server)</title>
      <link>https://milkoon1.tistory.com/91</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;해당 Simple Web Server는 서비스 목적이 아닌 개발 및 학습 등의 목적으로 간단한 웹서버를 원할 때 사용하는 웹서버입니다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. 화면 index.html 파일 생성하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591768413187&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;html&amp;gt;
&amp;lt;body&amp;gt;
  Hello my Simple Web Server!
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. app.py 파일 생성하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591767684005&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import http.server
import socketserver

handler = http.server.SimpleHTTPRequestHandler

with socketserver.TCPServer(('', 8000), handler) as httpd:
  print('Server listening on port 8000...')
  httpd.serve_forever()&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;사실 위의 index.html만 띄우는 정적 웹서버인 경우에는 app.py파일도 필요 없이 바로 3번인 웹서버 구동방법을 바로 하시면 됩니다. 하지만 이제 저는 처음 배우는 과정이다보니 이것 저것 한번 해보도록 하겠습니다,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. 웹서버 구동 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591768065891&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Python 2.X버전인 경우
python -m SimpleHTTPServer 8000

# Python 3.X버전인 경우
python -m http.server 8000&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;뒤에 8000은 포트 번호입니다. app.py에 설정했던 포트번호와 동일하게 작성해주시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;4. 웹브라우저에 띄우기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1) index.html 웹브라우저에 띄우기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/7zbut/btqELRC2rL9/iIXTJFCK0KczAdoZNGmKm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/7zbut/btqELRC2rL9/iIXTJFCK0KczAdoZNGmKm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/7zbut/btqELRC2rL9/iIXTJFCK0KczAdoZNGmKm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F7zbut%2FbtqELRC2rL9%2FiIXTJFCK0KczAdoZNGmKm1%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;980&quot; height=&quot;278&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NrQDt/btqEL5uibfv/qm19aH6lg5to7kYpeqnGW1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NrQDt/btqEL5uibfv/qm19aH6lg5to7kYpeqnGW1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NrQDt/btqEL5uibfv/qm19aH6lg5to7kYpeqnGW1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNrQDt%2FbtqEL5uibfv%2Fqm19aH6lg5to7kYpeqnGW1%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;860&quot; height=&quot;163&quot; data-origin-width=&quot;860&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;index.html을 정적 웹서버에 띄우기 위해서는 해당 index.html 파일이 있는 경로로 이동한 다음 웹서버를 구동해야합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2) index.html 없는 경우 localhost를 바로 띄우기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;208&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oRQy7/btqEJiCmQ3L/WeFbU4zL0RY3h05LKOy1J1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oRQy7/btqEJiCmQ3L/WeFbU4zL0RY3h05LKOy1J1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oRQy7/btqEJiCmQ3L/WeFbU4zL0RY3h05LKOy1J1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoRQy7%2FbtqEJiCmQ3L%2FWeFbU4zL0RY3h05LKOy1J1%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;983&quot; height=&quot;208&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;208&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;588&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxOHPe/btqEJiPPzTq/yKNJB10IuPRwzNfgpmoMx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxOHPe/btqEJiPPzTq/yKNJB10IuPRwzNfgpmoMx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxOHPe/btqEJiPPzTq/yKNJB10IuPRwzNfgpmoMx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxOHPe%2FbtqEJiPPzTq%2FyKNJB10IuPRwzNfgpmoMx0%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;853&quot; height=&quot;588&quot; data-origin-width=&quot;853&quot; data-origin-height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;만약 index.html 파일이 없거나 cmd창에서 해당 파일 경로로 이동 안한 다음 웹서버를 구동시키면 위의 사진과 같이 파일시스템에 접근하게 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>언어/Python</category>
      <category>파이썬</category>
      <category>파이썬심플웹서버</category>
      <category>파이썬웹서버구축</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/91</guid>
      <comments>https://milkoon1.tistory.com/91#entry91comment</comments>
      <pubDate>Wed, 10 Jun 2020 14:52:20 +0900</pubDate>
    </item>
    <item>
      <title>Python with Django : 파이썬의 기초 숫자형 부터 응용까지</title>
      <link>https://milkoon1.tistory.com/90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. 숫자형( type Number )&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100.116%; height: 196px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 69px;&quot;&gt;
&lt;td style=&quot;height: 53px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;항목&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 53px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;파이썬 사용 예&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 27px;&quot;&gt;
&lt;td style=&quot;height: 27px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;정수(Integer)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 27px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;123, -345, 0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 69px;&quot;&gt;
&lt;td style=&quot;height: 37px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;실수(Floating-Point)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 37px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;123.45, -1234.5, 3.4e10123, -345, 0&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 69px;&quot;&gt;
&lt;td style=&quot;height: 69px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;8진수(Octal)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 69px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;0o34, 0o25&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;height: 10px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;16진수(Hexadecimal)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 10px;&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;0x2a, .0xFF&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1591755755199&quot; class=&quot;python&quot; style=&quot;overflow: auto; margin: 0px; padding: 0px; color: #666666; font-size: 14px; 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; background-color: #ffffff;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1.정수형

&amp;gt;&amp;gt;&amp;gt; a = 123

&amp;gt;&amp;gt;&amp;gt; a = -178

&amp;gt;&amp;gt;&amp;gt; a = 0



# 2.실수형

&amp;gt;&amp;gt;&amp;gt; a = 1.2

&amp;gt;&amp;gt;&amp;gt; a = -3.45



# 3. 사칙연산

&amp;gt;&amp;gt;&amp;gt; a = 3

&amp;gt;&amp;gt;&amp;gt; b = 4

&amp;gt;&amp;gt;&amp;gt; a + b

7&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 808px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 16px;&quot;&gt;
&lt;td style=&quot;height: 16px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;사칙연산&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 16px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;의미&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 16px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;사용법 예) a = 3 , b = 4&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 123px;&quot;&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a + b&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;더하기&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&amp;gt;&amp;gt;&amp;gt; a + b&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;7&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 123px;&quot;&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a * b&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;곱하기&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&amp;gt;&amp;gt;&amp;gt; a * b&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;12&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 123px;&quot;&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a / b&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;나누기&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&amp;gt;&amp;gt;&amp;gt; a / b&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;0.75&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 123px;&quot;&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a ** b&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;x의 y제곱&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&amp;gt;&amp;gt;&amp;gt; a ** b&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;81&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 123px;&quot;&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a % b&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;나머지&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 123px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&amp;gt;&amp;gt;&amp;gt; 3 % 4&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;4&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 177px;&quot;&gt;
&lt;td style=&quot;height: 177px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a // b&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 177px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;몫&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 177px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&amp;gt;&amp;gt;&amp;gt; 3 // b&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;0&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;​&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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 id=&quot;SE-5a1d6f8a-95df-4124-8dbe-474070e09966&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. 문자열 자료형 (type String)&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591755755206&quot; class=&quot;python&quot; style=&quot;overflow: auto; margin: 0px; padding: 0px;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. 문자열에 작은따옴표(') 포함시키기
&amp;gt;&amp;gt;&amp;gt; food = &quot;Python's favorite food is perl&quot;
&amp;gt;&amp;gt;&amp;gt; food
&quot;Python's favorite food is perl&quot;
// 만약 큰따옴표(&quot;)가 아닌 같은 작은따옴표(')를 사용했을 때는 구문오류(SyntaxError)가 발생한다

# 2. 문자열에 큰따옴표(&quot;) 포함시키기
&amp;gt;&amp;gt;&amp;gt; say = '&quot;Python is very easy.&quot; he says.'

# 3. 백슬리시(\)를 사용해서 작은따옴표(')와 큰따옴표(&quot;)를 문자열에 포함시키기
&amp;gt;&amp;gt;&amp;gt; food = 'Python\'s favorite food is perl'
&amp;gt;&amp;gt;&amp;gt; say = &quot;\&quot;Python is very easy.\&quot; he says.'

# 4. 줄을 바꾸는 이스케이프 코드 \n 삽입
&amp;gt;&amp;gt;&amp;gt; multiline = &quot;Life is too short \n You need python&quot;

# 5. 또는 연속된 작은따옴표(')/큰따옴표(&quot;) 3개를 사용하기
&amp;gt;&amp;gt;&amp;gt; multiline = '''
... Life is too short
... You need python
... '''

&amp;gt;&amp;gt;&amp;gt; multiline = &quot;&quot;&quot;
... Life is too short
... You need python
... &quot;&quot;&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 220px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;코드&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;설명&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;\n&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;문자열 안에서 줄을 바꿀 때 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;\t&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;문자열 사이에 탭 간격을 줄 때 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;\\&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;문자 \를 그대로 표현할 때 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;\'&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;작은따옴표 표현할 때 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;\&quot;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;큰따옴표 표현할 때 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;\r&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;캐리지 리턴(줄 바꿈 문자, 현재 커서를 가장 앞으로 이동)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;\f&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;폼 피드(줄 바꿈 문자, 현재 커서를 다음 줄로 이동)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;\a&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;벨 소리(출력할 때 PC 스피커에서 삑소리가 난다)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;\b&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;백스페이스&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;\000&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;널 문자&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;파이썬 기초부터 보다보면 신기한 것들이 종종 나옵니다.뭐.. 위에까지는 안배워도 대충 알다싶은 내용들이고 이제 오류날 것 같아 보이는 것들이 파이썬에서는 실행이 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1591755755212&quot; class=&quot;python&quot; style=&quot;overflow: auto; margin: 0px; padding: 0px;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. 문자열 더하기
&amp;gt;&amp;gt;&amp;gt; head = &quot;Python&quot;
&amp;gt;&amp;gt;&amp;gt; tail = &quot; is fun!&quot;
&amp;gt;&amp;gt;&amp;gt; head + tail
'Python is fun!'

# 2. 문자열 곱하기
&amp;gt;&amp;gt;&amp;gt; a = &quot;p&quot;
&amp;gt;&amp;gt;&amp;gt; a * 2
'pp'

# 3. 문자열 길이 구하기
&amp;gt;&amp;gt;&amp;gt; a = &quot;Python is fun!&quot;
&amp;gt;&amp;gt;&amp;gt; len(a)
14

# 4. 문자열 인덱싱
&amp;gt;&amp;gt;&amp;gt; a = &quot;Python is fun!&quot;
&amp;gt;&amp;gt;&amp;gt; a[3]
'h'
// 파이썬은 0부터 시작
&amp;gt;&amp;gt;&amp;gt; a = &quot;Python is fun!&quot;
&amp;gt;&amp;gt;&amp;gt; a[-1]
'!'

# 5. 문자열 슬라이싱
&amp;gt;&amp;gt;&amp;gt; a = &quot;Python is fun!&quot;
&amp;gt;&amp;gt;&amp;gt; b = a[0] + a[1] + a[2]
&amp;gt;&amp;gt;&amp;gt; b
'Pyt'

&amp;gt;&amp;gt;&amp;gt; a = &quot;Python is fun!&quot;
&amp;gt;&amp;gt;&amp;gt; b = a[0:2]
&amp;gt;&amp;gt;&amp;gt; b
'Pyt'

# 6. 활용하기
&amp;gt;&amp;gt;&amp;gt; a = &quot;20010331Rainy&quot;
&amp;gt;&amp;gt;&amp;gt; date = a[:8]
&amp;gt;&amp;gt;&amp;gt; weather = a[8:]
&amp;gt;&amp;gt;&amp;gt; date
'20010331'
&amp;gt;&amp;gt;&amp;gt; weather
'Rainy'

# 7. 문자열 단어 바꾸기
&amp;gt;&amp;gt;&amp;gt; a = &quot;Pithon is fun!&quot;
&amp;gt;&amp;gt;&amp;gt; a[1]
'i'
&amp;gt;&amp;gt;&amp;gt; a[1] = 'y' // 이렇게 직접 문자열을 대입하면 오류 난다.

&amp;gt;&amp;gt;&amp;gt; a = 'Pithon is fun!'
&amp;gt;&amp;gt;&amp;gt; a = a[0] + 'y' + a[2:]
&amp;gt;&amp;gt;&amp;gt; a
'Python is fun!'

&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 160px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;코드&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;설명&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;%s&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;문자열(string)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;%c&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;문자 1개(Character)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;%d&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;정수(Integer)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;%f&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;부동 소수(Floating-point)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;%o&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;8진수&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;%x&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;16진수&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;%%&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot; colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Literal % (문자 '%' 자체)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1591755755216&quot; class=&quot;python&quot; style=&quot;overflow: auto; margin: 0px; padding: 0px;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. 문자열 포맷팅
&amp;gt;&amp;gt;&amp;gt; &quot;Python %s fun!&quot; % is
'Python is fun!'
&amp;gt;&amp;gt;&amp;gt; &quot;rate is %s&quot; % 3.234
'rate is 3.234'
&amp;gt;&amp;gt; &quot;Error is %d%%&quot; % 98
'Error is 98%'

# 2. 포맷코드와 숫자 함께 쓰기
&amp;gt;&amp;gt;&amp;gt; &quot;%10s&quot; % &quot;hi&quot;
'        hi' // 전체 길이 10개 중 오른쪽 정렬 hi 빼고 나머지 공백

&amp;gt;&amp;gt;&amp;gt; &quot;%-10sJane&quot; % 'hi'
'hi        Jane'

# 3. 소수점 표현하기
&amp;gt;&amp;gt;&amp;gt; &quot;%0.4f&quot; % 3.42134234
'3.4213' //4번째 자리까지만 나타내고 싶은 경우

&amp;gt;&amp;gt;&amp;gt; &quot;%10.4f&quot; % 3.42134234
'    3.4213' //총 10개인 문자에서 4번째 자리까지만 나타내고 싶은 부동 소수 3.4213

# 4. format함수를 사용한 포매팅
&amp;gt;&amp;gt;&amp;gt; &quot;I eat {0} apples&quot;.format(3)
'I eat 3 apples'
&amp;gt;&amp;gt;&amp;gt; &quot;I eat {0} apples&quot;.format(&quot;five&quot;)
'I eat five apples'
&amp;gt;&amp;gt;&amp;gt; number = 3
&amp;gt;&amp;gt;&amp;gt; &quot;I eat {0} apples&quot;.format(number)
'I eat 3 apples'

&amp;gt;&amp;gt;&amp;gt; number = 2
&amp;gt;&amp;gt;&amp;gt; &quot;I eat {0} apples. It's {check} delicious&quot;.format(number, check=&quot;really&quot;)
&quot;I eat 2 apples. It's really delicious&quot;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;정렬&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;결과값&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&quot;{0:&amp;lt;10}&quot;.format(&quot;hi&quot;)&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;'hi '&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&quot;{0:&amp;gt;10}&quot;.format(&quot;hi&quot;)&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;' hi'&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&quot;{0:^10}&quot;.format(&quot;hi&quot;)&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;' hi '&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&quot;{0:=^10}&quot;.format(&quot;hi&quot;)&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;'====hi===='&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;관련함수 a = &quot;hobby&quot;&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;결과값&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a.count('b')&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;2&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a.find('b')&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;2 (0부터시작해서 첫번째 b, 존재하지 않으면 -1)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a.index('b')&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;2 (0부터 시작, 존재하지 않으면 오류발생)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&quot;,&quot;.join('abcd')&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;'a,b,c,d'&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a.upper() //소문자를 대문자로&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;HOBBY&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a.lower() //대문자를 소문자로&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;hobby&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a=&quot; hi&quot;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a.lstrip() //왼쪽 공백지우기&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;hi&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a=&quot;hi &quot;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a.rstrip() //오른쪽 공백지우기&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;hi&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a=&quot; hi &quot;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a.strip() //양쪽 공백지우기&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;hi&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a=&quot;Life is too short&quot;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a.replace(&quot;Life&quot;, &quot;Your leg&quot;)&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;Your leg is too short&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a=&quot;Life is too short&quot;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;a.split()&lt;/span&gt;&lt;/td&gt;
&lt;td colspan=&quot;1&quot; rowspan=&quot;1&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;['Life', 'is', 'too', 'short']&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&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;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;3. 함수&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591755755227&quot; class=&quot;python&quot; style=&quot;overflow: auto; margin: 0px; padding: 0px; color: #666666; font-size: 14px; 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; background-color: #ffffff;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// function 함수명()을 파이썬에서는 def 함수명()으로 사용한다
def chat():
  print(&quot;Hello!&quot;)
  print(&quot;Bye&quot;)
chat()

// 인자를 주고 메소드 만들어보기
def chat(name1, name2):
  print(&quot;%s: 안녕?&quot; %name1)
  print(&quot;%s: 만나서 반가워!&quot; %name2)
chat(&quot;홍길동&quot;,&quot;김영희&quot;)

// 같은 출력에 여러 인자 넣어보기
def chat(name1, name2, age):
  print(&quot;%s: 안녕?&quot; %name1)
  print(&quot;%s: 만나서 반가워!&quot; %name2)
  print(&quot;%s: 몇살이니?&quot; %name1)
  print(&quot;%s: 나는 %d&quot; % (name2,age))
chat(&quot;홍길동&quot;,&quot;김영희&quot;, 15)

// 사칙연산을 포함한 메소드 만들기 + 반환값 받기
def dsum(a, b):
  result = a + b
  return result

d = dsum(1, 2)
print(d)
&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;SE-44368c86-65df-4786-abb0-488834400691&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;보통 변수를 만들면 string, int와 같은 타입을 꼭 부여를 해야했었는데 파이썬에서는 그렇게 안해도 되는 점이 뭔가 어색하면서도 편하네요ㅎㅎ&amp;nbsp;계속해서 배워봅시다!&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;4. 함수 응용 예제 문제풀이&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591755755227&quot; class=&quot;python&quot; style=&quot;overflow: auto; margin: 0px; padding: 0px;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 먼저 이름과 나이를 받아라
# 나이가 10살 미만이면 &quot;안녕&quot;이라고 말해라
# 나이가 10살에서 20살 사이면 &quot;안녕하세요&quot;라고 말해라
# 그 외에는 &quot;안녕하십니까&quot;라고 말해라

// 여기서 중요한 점! function = def / else if = elif로 쓰는거 까먹지말기!
def sayHello(name, age):
  if age &amp;lt; 10:
    print(&quot;안녕&quot; + name)
  elif age &amp;gt;= 10 and age &amp;lt;= 20:
    print(&quot;안녕하세요&quot; + name)
  else: print(&quot;안녕하십니까&quot; + name)

sayHello(&quot;철수&quot;, 10)
sayHello(&quot;영희&quot;, 18)
sayHello(&quot;길동&quot;, 40)
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;5. 반복문&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591755755228&quot; class=&quot;python&quot; style=&quot;overflow: auto; margin: 0px; padding: 0px; color: #666666; font-size: 14px; 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; background-color: #ffffff;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# for, while 반복문
# 1. for
for i in range(10):
  print(i)
  print(&quot;철수 : 안녕 영희야 뭐해?&quot;)
  print(&quot;영희 : 안녕 철수야, 그냥 있어.&quot;)

# 2. while
i = 0
while i &amp;lt; 3:
  print(&quot;철수 : 안녕 영희야 뭐해?&quot;)
  print(&quot;영희 : 안녕 철수야, 그냥 있어.&quot;)
  i = i + 1

# break, continue
# 1. break
i = 0
while True:
  print(i) #0
  print(&quot;철수: 안녕 영희야?&quot;)
  print(&quot;영희: 안녕 철수야&quot;)
  i = i + 1
  if i &amp;gt; 2:
    break

for i in range(100):
  print(i) #0
  print(&quot;철수: 안녕 영희야?&quot;)
  print(&quot;영희: 안녕 철수야&quot;)
  if i &amp;gt; 2:
    break

# 2. continue
for i in range(3):
  print(i) #0
  print(&quot;철수: 안녕 영희야?&quot;)
  print(&quot;영희: 안녕 철수야&quot;)
  continue
  print(&quot;태수: 안녕 애들아&quot;)
// 위와 같이 쓰면 태수의 말은 나오지 않는다.
&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;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;6. 리스트와 튜플&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591755755228&quot; class=&quot;python&quot; style=&quot;overflow: auto; margin: 0px; padding: 0px;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 1. 리스트
x = [1,2,3,4]
y = [&quot;hello&quot;, &quot;world&quot;]
print(x + y)

x = [1,2,3,4]
x[3] = 10
print(x[3])

x = [4,3,2,1]
print(x[0]) // 0번째 값을 보여줘
print(len(x)) // x의 길이를 보여줘
print(sorted(x)) // x의 정렬
print(sum(x)) //합계
print(x.index(3)) // 3의 위치를 찾기
print(4 in x) // x안에 4라는 값이 있는가 True or False로 반환

# 2. 튜플
x = (1, 2, 3)
y = ('a', 'b', 'c')
z = (1, 'hello', 'bye')

x[1] = 10 // 오류난다
단, 튜플은 안에 들어있는 애들을 못바꾼다.​&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;&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;7. 딕셔너리&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591755755229&quot; class=&quot;python&quot; style=&quot;overflow: auto; margin: 0px; padding: 0px; color: #666666; font-size: 14px; 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; background-color: #ffffff;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# x = dict{}
x = { &quot;name&quot; : &quot;홍길동&quot;,
      &quot;age&quot; : 20}

print(x[&quot;name&quot;])
print(&quot;age&quot; in x) #포함되어있는지

print(x.keys()) //전체 key값만 보여준다
print(x.values()) //전체 value값만 보여준다

for key in x:
  print(&quot;key : &quot; + key)
  print(x[key])


# 과일 숫자 세는 프로그램
fruit = [&quot;사과&quot;, &quot;사과&quot;, &quot;딸기&quot;, &quot;배&quot;, &quot;복숭아&quot;, &quot;바나나&quot;, &quot;키위&quot;, &quot;복숭아&quot;, &quot;바나나&quot;]
d = {}
for f in fruit:
  if f in d: #&quot;사과&quot;라는 키가 d라는 딕셔너리에 들어있는지?
    #d[f] += 1 
    d[f] = d[f] + 1 #있으면 사과 개수 하나 올리기
  else:
    d[f] = 1 #없으면 딕서녀리에 넣고 밸루 1로 만들어줘
print(d)
&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-1f0ea2e6-44af-49bb-8127-63e192ab1823&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;8. 클래스 VS 오브젝트 그리고 상속&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1591755755229&quot; class=&quot;python&quot; style=&quot;overflow: auto; margin: 0px; padding: 0px;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 클래스와 오브젝트(인스턴스)
class Person:
  #name = &quot;홍길동&quot; 처음의 전역변수
  #이것을 직접 코딩말고 메소드로 만들어서 받기
  def __init__(self, name, age):
    self.name = name
    self.age = age

  def say_hello(self, to_name):
    print(&quot;안녕? &quot; + to_name + &quot; 나는 &quot; + self.name)

  def introduce(self):
    print(&quot;안녕? &quot;+ &quot; 나는 &quot; + self.name + &quot; 이고 나이는 &quot; + str(self.age))

hong = Person(&quot;홍길동&quot;, 20)
hong.say_hello(&quot;영희&quot;)
hong.introduce()

#만약 홍길동뿐만 아니라 다른 사람의 이름도 하고 싶다면?
michael = Person(&quot;마이클&quot;, 50)
michael.say_hello(&quot;제니&quot;)

# 상속
class Police(Person):
  def arrest(self, to_arrest):
    print(&quot;넌 체포되었다! &quot; + to_arrest)


class Programmer(Person):
  def program(self, to_program):
    print(&quot;다음에는 이걸 만들자! : &quot; + to_program)

# jenny = Police(&quot;제니&quot;) 이렇게 쓰면 오류남
# 왜냐하면 Police라는 클래스가 Person을 상속하였기 때문에
# Person에서 받는 인수와 동일하게 name과 age가 있어야한다
jenny = Police(&quot;제니&quot;, 20)
grace = Programmer(&quot;그레이스&quot;, 30)
wobin = Person(&quot;우빈&quot;, 21)

# jenny는 경찰이기에 to_arrest가능 
jenny.arrest(&quot;톰&quot;)
# grace는 프로그래머이기에 to_program
grace.program(&quot;ERP데이터 전송 프로그램&quot;)

# jenny는 Person을 상속받은 클래스 Police를 생성했기에
# Person에 있는 introduce를 사용가능
jenny.introduce()

# 하지만 Programmer를 상속하지 않아서 program은 사용 못함
jenny.program(&quot;테스트&quot;) #해당부분을 실행하면 오류​&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-8dfe38b2-b402-4196-84d9-32488358193e&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;9. 패키지와 모듈&lt;/b&gt;&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;1006&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pzP2R/btqEIVAcnux/q1BjZYeIKCMrRTXkNSIKS0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pzP2R/btqEIVAcnux/q1BjZYeIKCMrRTXkNSIKS0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pzP2R/btqEIVAcnux/q1BjZYeIKCMrRTXkNSIKS0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpzP2R%2FbtqEIVAcnux%2Fq1BjZYeIKCMrRTXkNSIKS0%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;1006&quot; height=&quot;408&quot; data-origin-width=&quot;1006&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1591755755232&quot; class=&quot;python&quot; style=&quot;overflow: auto; margin: 0px; padding: 0px; color: #666666; font-size: 14px; 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; background-color: #ffffff;&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# main
# animal __package__
# dog, cat modules
# dog, cat modules can say &quot;hi&quot;
from animal import dog #dog module 가져오기
from animal import cat #cat module 가져오기
from animal import * # animail에 있는 패키지 다 가져오기

d = dog.Dog()
d.hi()

c = cat.Cat()
c.hi()

----------------------------------------------------------------------------------
#__init__
#모듈을 불러오는 방법
# 이 폴더에 있는 cat.py이라는 파일에서 Cat이라는 클래스를 가져와줘
from .cat import Cat 
# 이 폴더에 있는 dog.py이라는 파일에서 Dog이라는 클래스를 가져와줘
from .dog import Dog
----------------------------------------------------------------------------------
# cat.py
class Cat:
  def hi(self):
    print(&quot;meow&quot;)
----------------------------------------------------------------------------------
# dog.py
class Dog:
  def hi(self):
      print(&quot;bark!&quot;)
      &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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;* 다른 패키지를 불러오는 방법&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-05a7ef9f-46ed-40c6-841a-56dba676c26c&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;왼쪽 끝에 패키지라고 써져있는 아이콘을 클릭하면 다른 패키지를 다운로드 할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-57c389ff-9b99-4d69-835f-eaea7c8cefaf&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;단, 해당 홈페이지는 Relp.lt라는 홈페이지입니다.&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;1059&quot; data-origin-height=&quot;508&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ac4GR/btqEIUgVL4J/ZqrqldpGKx1CL8vv5zyq60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ac4GR/btqEIUgVL4J/ZqrqldpGKx1CL8vv5zyq60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ac4GR/btqEIUgVL4J/ZqrqldpGKx1CL8vv5zyq60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAc4GR%2FbtqEIUgVL4J%2FZqrqldpGKx1CL8vv5zyq60%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;1059&quot; height=&quot;508&quot; data-origin-width=&quot;1059&quot; data-origin-height=&quot;508&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;1280&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4ZGZC/btqEIn4WVjS/1xz7ngcfs9iv9IqumQOZf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4ZGZC/btqEIn4WVjS/1xz7ngcfs9iv9IqumQOZf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4ZGZC/btqEIn4WVjS/1xz7ngcfs9iv9IqumQOZf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4ZGZC%2FbtqEIn4WVjS%2F1xz7ngcfs9iv9IqumQOZf1%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;1280&quot; height=&quot;502&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>언어/Python</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/90</guid>
      <comments>https://milkoon1.tistory.com/90#entry90comment</comments>
      <pubDate>Wed, 10 Jun 2020 11:24:14 +0900</pubDate>
    </item>
    <item>
      <title>MS-SQL : 날짜 형식 변경 및 날짜 변환표 - date format mmddyyyy</title>
      <link>https://milkoon1.tistory.com/89</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;1. FORMAT과 CAST를 이용한 날짜 형식 변경&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590969603718&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- gatDate() 사용해 날짜형식을 변경.
SELECT FORMAT(CAST(GETDATE() AS DATE), 'yyyyMMdd') -- 20200601
SELECT FORMAT(CAST(GETDATE() AS DATE), 'MMddyyyy') -- 06012020
SELECT FORMAT(CAST(GETDATE() AS DATE), 'ddMMyyyy') -- 01062020

-- 특정 컬럼을 사용해 날짜형식을 변경.
SELECT FORMAT(CAST(날짜컬럼 AS DATE), 'yyyyMMdd') -- 20200601
SELECT FORMAT(CAST(날짜컬럼 AS DATE), 'MMddyyyy') -- 06012020
SELECT FORMAT(CAST(날짜컬럼 AS DATE), 'ddMMyyyy') -- 01062020
&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif; color: #000000;&quot;&gt;&lt;b&gt;2. CONVERT를 이용한 날짜 형식 변경&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1590969725195&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select convert(varchar, getdate(), 100)  --mon dd yyyy hh:miAM (or PM)
select convert(varchar, getdate(), 101)  --mm/dd/yyyy
select convert(varchar, getdate(), 102)  --yyyy.mm.dd
select convert(varchar, getdate(), 103)  --dd/mm/yyyy
select convert(varchar, getdate(), 104)  --dd.mm.yyyy
select convert(varchar, getdate(), 105)  --dd-mm-yyyy
select convert(varchar, getdate(), 106)  --dd mon yyyy
select convert(varchar, getdate(), 107)  --Mon dd, yyyy
select convert(varchar, getdate(), 108)  --hh:mm:ss
select convert(varchar, getdate(), 109)  --mon dd yyyy hh:mi:ss:mmmAM (or PM)
select convert(varchar, getdate(), 110)  --mm-dd-yyyy
select convert(varchar, getdate(), 111)  --yyyy/mm/dd
select convert(varchar, getdate(), 112)  --yyyymmdd
select convert(varchar, getdate(), 113)  --mon yyyy hh:mi:ss:mmm (24h)
select convert(varchar, getdate(), 114)  --hh:mi:ss:mmm (24h)
select convert(varchar, getdate(), 120)  --yyyy-mm-dd hh:mi:ss (24h)
select convert(varchar, getdate(), 121)  --yyyy-mm-dd hh:mi:ss.mmm (24h)
select convert(varchar, getdate(), 126)  --yyyy-mm-ddThh:mi:ss.mmm
select convert(varchar, getdate(), 130)  --dd mon yyyy hh:mi:ss:mmmAM
select convert(varchar, getdate(), 131)  --dd/mm/yyyy hh:mi:ss:mmmAM&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>DataBase/MS-SQL</category>
      <category>CONVERTDATE</category>
      <category>CONVERTDATEFORMAT</category>
      <category>DateFormat</category>
      <category>DDMMYYYY</category>
      <category>MMDDYYYY</category>
      <author>홍시쿼카</author>
      <guid isPermaLink="true">https://milkoon1.tistory.com/89</guid>
      <comments>https://milkoon1.tistory.com/89#entry89comment</comments>
      <pubDate>Mon, 1 Jun 2020 09:03:23 +0900</pubDate>
    </item>
  </channel>
</rss>