<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>전자기린 스튜디오</title>
    <link>https://virtualgiraffe.tistory.com/</link>
    <description>전자기린</description>
    <language>ko</language>
    <pubDate>Tue, 23 Jun 2026 10:08:51 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>전자기린</managingEditor>
    <image>
      <title>전자기린 스튜디오</title>
      <url>https://tistory1.daumcdn.net/tistory/3059137/attach/b0290f27e5394f36ad1210d4a67c935d</url>
      <link>https://virtualgiraffe.tistory.com</link>
    </image>
    <item>
      <title>[Windows] 원격 데스크톱 연결, 연결 목록(이력) 관리</title>
      <link>https://virtualgiraffe.tistory.com/116</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. WIN + R, regedit (레지스트리 편집기 실행)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cubP3j/btsEycICTnG/qvhfiti9D9S0Q7trqBN5K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cubP3j/btsEycICTnG/qvhfiti9D9S0Q7trqBN5K1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cubP3j/btsEycICTnG/qvhfiti9D9S0Q7trqBN5K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcubP3j%2FbtsEycICTnG%2Fqvhfiti9D9S0Q7trqBN5K1%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;397&quot; height=&quot;204&quot; data-origin-width=&quot;397&quot; data-origin-height=&quot;204&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;2. 경로 이동 ( 컴퓨터\HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client\Default )&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;248&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ceWxPw/btsECmCyUOW/aFX3ptY9tkFCurN4JfrE7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ceWxPw/btsECmCyUOW/aFX3ptY9tkFCurN4JfrE7K/img.png&quot; data-alt=&quot;해당 경로에서 항목을 변경하면 됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ceWxPw/btsECmCyUOW/aFX3ptY9tkFCurN4JfrE7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FceWxPw%2FbtsECmCyUOW%2FaFX3ptY9tkFCurN4JfrE7K%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;851&quot; height=&quot;248&quot; data-origin-width=&quot;851&quot; data-origin-height=&quot;248&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;해당 경로에서 항목을 변경하면 됩니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타</category>
      <category>RDS</category>
      <category>목록</category>
      <category>원격 데스크톱 연결</category>
      <category>원격제어</category>
      <category>윈도우</category>
      <category>제거</category>
      <category>팀뷰어</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/116</guid>
      <comments>https://virtualgiraffe.tistory.com/116#entry116comment</comments>
      <pubDate>Thu, 8 Feb 2024 11:54:21 +0900</pubDate>
    </item>
    <item>
      <title>[PROXMOX] VM Export &amp;amp; Import</title>
      <link>https://virtualgiraffe.tistory.com/115</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;절차&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Proxmox VE 접속&lt;/li&gt;
&lt;li&gt;VM 선택 및 백업 (저장경로 : /var/lib/vz/dump)&lt;/li&gt;
&lt;li&gt;백업 파일 이동 (WinSCP를 사용하여 파일 이동)&lt;/li&gt;
&lt;li&gt;백업 파일 복원&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Proxmox VE 접속&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dJtKMU/btsqJrYAhlU/jZ7xfgiUhEwnvyBGn0vrb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dJtKMU/btsqJrYAhlU/jZ7xfgiUhEwnvyBGn0vrb0/img.png&quot; data-alt=&quot;접속 주소는 Proxmox PC를 켜면 확인 할 수 있습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dJtKMU/btsqJrYAhlU/jZ7xfgiUhEwnvyBGn0vrb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdJtKMU%2FbtsqJrYAhlU%2FjZ7xfgiUhEwnvyBGn0vrb0%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;553&quot; height=&quot;158&quot; data-origin-width=&quot;553&quot; data-origin-height=&quot;158&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;접속 주소는 Proxmox PC를 켜면 확인 할 수 있습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;233&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nW8F1/btsqJT8bHet/NqaqBRI65jqfqBgQyaKMdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nW8F1/btsqJT8bHet/NqaqBRI65jqfqBgQyaKMdK/img.png&quot; data-alt=&quot;기본 계정은 root , password는 OS 설치 시에 등록한 것을 사용하여 접속.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nW8F1/btsqJT8bHet/NqaqBRI65jqfqBgQyaKMdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnW8F1%2FbtsqJT8bHet%2FNqaqBRI65jqfqBgQyaKMdK%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;433&quot; height=&quot;233&quot; data-origin-width=&quot;433&quot; data-origin-height=&quot;233&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기본 계정은 root , password는 OS 설치 시에 등록한 것을 사용하여 접속.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. VM 선택 및 백업&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;337&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Dvpca/btsqCcBZJOC/NR0EQqrEKna0e6cAmctKqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Dvpca/btsqCcBZJOC/NR0EQqrEKna0e6cAmctKqk/img.png&quot; data-alt=&quot;왼쪽 VM목록에서 Export 하고자 하는 항목을 선택합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Dvpca/btsqCcBZJOC/NR0EQqrEKna0e6cAmctKqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDvpca%2FbtsqCcBZJOC%2FNR0EQqrEKna0e6cAmctKqk%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;595&quot; height=&quot;337&quot; data-origin-width=&quot;595&quot; data-origin-height=&quot;337&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;왼쪽 VM목록에서 Export 하고자 하는 항목을 선택합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;352&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkb8FW/btsqJrxywyv/NkGnFfkQH793C6D8nsuLw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkb8FW/btsqJrxywyv/NkGnFfkQH793C6D8nsuLw1/img.png&quot; data-alt=&quot;Backup now 버튼 클&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkb8FW/btsqJrxywyv/NkGnFfkQH793C6D8nsuLw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkb8FW%2FbtsqJrxywyv%2FNkGnFfkQH793C6D8nsuLw1%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;352&quot; data-origin-width=&quot;506&quot; data-origin-height=&quot;352&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Backup now 버튼 클&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cwNqhB/btsqD5IQraL/bKTwWXT629SffMCJulkFKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cwNqhB/btsqD5IQraL/bKTwWXT629SffMCJulkFKK/img.png&quot; data-alt=&quot;위와 같이 설정하고 Backup 버튼 클릭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cwNqhB/btsqD5IQraL/bKTwWXT629SffMCJulkFKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcwNqhB%2FbtsqD5IQraL%2FbKTwWXT629SffMCJulkFKK%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;390&quot; height=&quot;245&quot; data-origin-width=&quot;390&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위와 같이 설정하고 Backup 버튼 클릭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;427&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1KEuL/btsqJcgmkXF/69wUtdSxJWc7eNPAdmJ75K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1KEuL/btsqJcgmkXF/69wUtdSxJWc7eNPAdmJ75K/img.png&quot; data-alt=&quot;Task OK가 뜨면 백업 완료&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1KEuL/btsqJcgmkXF/69wUtdSxJWc7eNPAdmJ75K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1KEuL%2FbtsqJcgmkXF%2F69wUtdSxJWc7eNPAdmJ75K%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;823&quot; height=&quot;427&quot; data-origin-width=&quot;823&quot; data-origin-height=&quot;427&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Task OK가 뜨면 백업 완료&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;157&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA4yfY/btsqFsjAJmC/mreYw8S25SpxdqRU8OuLEk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA4yfY/btsqFsjAJmC/mreYw8S25SpxdqRU8OuLEk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA4yfY/btsqFsjAJmC/mreYw8S25SpxdqRU8OuLEk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA4yfY%2FbtsqFsjAJmC%2FmreYw8S25SpxdqRU8OuLEk%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;450&quot; height=&quot;157&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;157&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;저장된 백업파일은 &quot;/var/lib/vz/dump&quot; 경로에 저장 됩니다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3.백업 파일 이동 (WinSCP를 사용하여 파일 이동)&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1109&quot; data-origin-height=&quot;965&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NPiys/btsqCcIODdu/IVu3QAzC9QP15oGlwudYH1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NPiys/btsqCcIODdu/IVu3QAzC9QP15oGlwudYH1/img.png&quot; data-alt=&quot;Proxmox PC에 SFTP로 접속하고 /var/lib/va/dump 로 이동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NPiys/btsqCcIODdu/IVu3QAzC9QP15oGlwudYH1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNPiys%2FbtsqCcIODdu%2FIVu3QAzC9QP15oGlwudYH1%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;1109&quot; height=&quot;965&quot; data-origin-width=&quot;1109&quot; data-origin-height=&quot;965&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Proxmox PC에 SFTP로 접속하고 /var/lib/va/dump 로 이동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;672&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xOeCE/btsqKzPfscZ/uZ6o5fZdyLgIoOmVN1Ss9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xOeCE/btsqKzPfscZ/uZ6o5fZdyLgIoOmVN1Ss9k/img.png&quot; data-alt=&quot;백업 파일을 복사하여 Import 하려는 Proxmox의 '/var/lib/va/dump'로 이동합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xOeCE/btsqKzPfscZ/uZ6o5fZdyLgIoOmVN1Ss9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxOeCE%2FbtsqKzPfscZ%2FuZ6o5fZdyLgIoOmVN1Ss9k%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;1093&quot; height=&quot;672&quot; data-origin-width=&quot;1093&quot; data-origin-height=&quot;672&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;백업 파일을 복사하여 Import 하려는 Proxmox의 '/var/lib/va/dump'로 이동합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 백업 파일 복원&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;170&quot; data-origin-height=&quot;220&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/51Yb0/btsqERDU2UU/jTwKM7s8enxRRfmmiihxAk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/51Yb0/btsqERDU2UU/jTwKM7s8enxRRfmmiihxAk/img.png&quot; data-alt=&quot;원하는 VE ID를 설정한 VM을 하나 생성합니다. (VE ID를 제외한 모든 설정 정보는 상관없습니다.)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/51Yb0/btsqERDU2UU/jTwKM7s8enxRRfmmiihxAk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F51Yb0%2FbtsqERDU2UU%2FjTwKM7s8enxRRfmmiihxAk%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;350&quot; height=&quot;453&quot; data-origin-width=&quot;170&quot; data-origin-height=&quot;220&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;원하는 VE ID를 설정한 VM을 하나 생성합니다. (VE ID를 제외한 모든 설정 정보는 상관없습니다.)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1047&quot; data-origin-height=&quot;265&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b8uMDe/btsqJrR0byW/lO8N6BXATUzMHqgKcIs1hk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b8uMDe/btsqJrR0byW/lO8N6BXATUzMHqgKcIs1hk/img.png&quot; data-alt=&quot;생성한 VM - backup으로 들어가서 Search의 값을 모두 지우고&amp;amp;amp;nbsp; '/var/lib/va/dump'에 보관한 백업 파일을 선택하여 Restore하면 완료.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b8uMDe/btsqJrR0byW/lO8N6BXATUzMHqgKcIs1hk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb8uMDe%2FbtsqJrR0byW%2FlO8N6BXATUzMHqgKcIs1hk%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;1047&quot; height=&quot;265&quot; data-origin-width=&quot;1047&quot; data-origin-height=&quot;265&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;생성한 VM - backup으로 들어가서 Search의 값을 모두 지우고&amp;amp;nbsp; '/var/lib/va/dump'에 보관한 백업 파일을 선택하여 Restore하면 완료.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;저장소 및 장비 문제로 오류가 발생하여 Import VM이 동작하지 않을 경우 &lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;Option에서 해당 Proxmox에 맞도록 설정을 변경하면 됩니다.&lt;/b&gt;&lt;/p&gt;</description>
      <category>기타</category>
      <category>backup</category>
      <category>export</category>
      <category>import</category>
      <category>OS</category>
      <category>Proxmox</category>
      <category>vm</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/115</guid>
      <comments>https://virtualgiraffe.tistory.com/115#entry115comment</comments>
      <pubDate>Tue, 8 Aug 2023 17:00:03 +0900</pubDate>
    </item>
    <item>
      <title>[소프트웨어] 기차 예약 프로그램</title>
      <link>https://virtualgiraffe.tistory.com/114</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;기차표 자동 예약 프로그램&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;1061&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Q5yOJ/btsnDNqesH9/ZKuzOv8xJK0Fwngo2aAhM0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Q5yOJ/btsnDNqesH9/ZKuzOv8xJK0Fwngo2aAhM0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Q5yOJ/btsnDNqesH9/ZKuzOv8xJK0Fwngo2aAhM0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQ5yOJ%2FbtsnDNqesH9%2FZKuzOv8xJK0Fwngo2aAhM0%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;1061&quot; data-origin-width=&quot;794&quot; data-origin-height=&quot;1061&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;http://gofile.me/6NuJ3/pOCR6NcXB&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;다운로드&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;사용방법&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;1. 좌측 상단에 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;네이버 로그인&lt;/b&gt;&lt;/span&gt; 정보 및 장바구니 담기면 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;연락 받을 이메일 입력&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;2. 페이지 상단에서 원하는 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;기차 일정 및 시간대 선택&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;3. 좌측 상단에서 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;티켓 순서 선택&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;4. 시작&lt;/h4&gt;</description>
      <category>기타</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/114</guid>
      <comments>https://virtualgiraffe.tistory.com/114#entry114comment</comments>
      <pubDate>Fri, 14 Jul 2023 16:20:07 +0900</pubDate>
    </item>
    <item>
      <title>[IIS] URL 재작성 설치가 안될 경우</title>
      <link>https://virtualgiraffe.tistory.com/111</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;URL 재작성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads&quot;&gt;https://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1659439656574&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;URL Rewrite
        :
        The Official Microsoft IIS Site&quot; data-og-description=&quot;Install this extension or view additional downloads&amp;nbsp; OverviewIIS URL Rewrite 2.1 enables Web administrators to create powerful rules to implement URLs that are easier for users to remember and easier for search engines to find. By using rule templates, re&quot; data-og-host=&quot;www.iis.net&quot; data-og-source-url=&quot;https://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads&quot; data-og-url=&quot;https://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/czyJ0i/hyPhqIOfhu/YjpmiXL7CeV7V3nAJ3MGn0/img.jpg?width=960&amp;amp;height=540&amp;amp;face=0_0_960_540&quot;&gt;&lt;a href=&quot;https://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads&quot; data-source-url=&quot;https://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/czyJ0i/hyPhqIOfhu/YjpmiXL7CeV7V3nAJ3MGn0/img.jpg?width=960&amp;amp;height=540&amp;amp;face=0_0_960_540');&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;URL Rewrite : The Official Microsoft IIS Site&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Install this extension or view additional downloads&amp;nbsp; OverviewIIS URL Rewrite 2.1 enables Web administrators to create powerful rules to implement URLs that are easier for users to remember and easier for search engines to find. By using rule templates, re&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.iis.net&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;ARR&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.iis.net/downloads/microsoft/application-request-routing&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://www.iis.net/downloads/microsoft/application-request-routing&lt;/a&gt;&lt;/p&gt;</description>
      <category>기타</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/111</guid>
      <comments>https://virtualgiraffe.tistory.com/111#entry111comment</comments>
      <pubDate>Tue, 2 Aug 2022 20:27:58 +0900</pubDate>
    </item>
    <item>
      <title>[기타] 색상 추천</title>
      <link>https://virtualgiraffe.tistory.com/109</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;51&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TKO2T/btrHQIDLRpW/4Vs6lqtKHkD2AGajIGLKd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TKO2T/btrHQIDLRpW/4Vs6lqtKHkD2AGajIGLKd1/img.png&quot; data-alt=&quot;7160e8&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TKO2T/btrHQIDLRpW/4Vs6lqtKHkD2AGajIGLKd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTKO2T%2FbtrHQIDLRpW%2F4Vs6lqtKHkD2AGajIGLKd1%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;352&quot; height=&quot;51&quot; data-origin-width=&quot;352&quot; data-origin-height=&quot;51&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;7160e8&lt;/figcaption&gt;
&lt;/figure&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;351&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bw3zZl/btrHQoy1RKP/WBzELWT89mWbSKMIhhVSbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bw3zZl/btrHQoy1RKP/WBzELWT89mWbSKMIhhVSbK/img.png&quot; data-alt=&quot;2557b5&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bw3zZl/btrHQoy1RKP/WBzELWT89mWbSKMIhhVSbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbw3zZl%2FbtrHQoy1RKP%2FWBzELWT89mWbSKMIhhVSbK%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;351&quot; height=&quot;50&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2557b5&lt;/figcaption&gt;
&lt;/figure&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;351&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmU6x7/btrHUgMUjcT/rqH3jm040IEkhkbFH6p93k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmU6x7/btrHUgMUjcT/rqH3jm040IEkhkbFH6p93k/img.png&quot; data-alt=&quot;6c6c6c&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmU6x7/btrHUgMUjcT/rqH3jm040IEkhkbFH6p93k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmU6x7%2FbtrHUgMUjcT%2FrqH3jm040IEkhkbFH6p93k%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;351&quot; height=&quot;50&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;6c6c6c&lt;/figcaption&gt;
&lt;/figure&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;351&quot; data-origin-height=&quot;50&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yd8de/btrHUgF9qNs/8GTjX4i7U2DMoJUPVQ1Ki0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yd8de/btrHUgF9qNs/8GTjX4i7U2DMoJUPVQ1Ki0/img.png&quot; data-alt=&quot;f55b65&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yd8de/btrHUgF9qNs/8GTjX4i7U2DMoJUPVQ1Ki0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fyd8de%2FbtrHUgF9qNs%2F8GTjX4i7U2DMoJUPVQ1Ki0%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;351&quot; height=&quot;50&quot; data-origin-width=&quot;351&quot; data-origin-height=&quot;50&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;f55b65&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>기타</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/109</guid>
      <comments>https://virtualgiraffe.tistory.com/109#entry109comment</comments>
      <pubDate>Thu, 21 Jul 2022 16:45:50 +0900</pubDate>
    </item>
    <item>
      <title>[Xamarin.Android] MMS, SMS 발송</title>
      <link>https://virtualgiraffe.tistory.com/108</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Nuget.android 설치 필요&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Android.Mms.PduManagement&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Xamarin.AndroidX.Core&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1654093503206&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;GitHub - jsm-daily/XamarinExample_SMS_MMS_PhotoPicker: SMS, MMS, 이미지 선택 예제&quot; data-og-description=&quot;SMS, MMS, 이미지 선택 예제. Contribute to jsm-daily/XamarinExample_SMS_MMS_PhotoPicker development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/jsm-daily/XamarinExample_SMS_MMS_PhotoPicker&quot; data-og-url=&quot;https://github.com/jsm-daily/XamarinExample_SMS_MMS_PhotoPicker&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/4qgGy/hyOBBjVM5a/dfb6hk0EkP4yGmKsgBG1Tk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/jsm-daily/XamarinExample_SMS_MMS_PhotoPicker&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/jsm-daily/XamarinExample_SMS_MMS_PhotoPicker&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/4qgGy/hyOBBjVM5a/dfb6hk0EkP4yGmKsgBG1Tk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;GitHub - jsm-daily/XamarinExample_SMS_MMS_PhotoPicker: SMS, MMS, 이미지 선택 예제&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SMS, MMS, 이미지 선택 예제. Contribute to jsm-daily/XamarinExample_SMS_MMS_PhotoPicker development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SMS, MMS, 갤러리에서 사진 선택에 대한 예제입니다.&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;MMS&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;- 표준 특성상 전송 이미지 용량제한이 있습니다.(800kb~ 1mb)&lt;/p&gt;</description>
      <category>Microsoft .NET/Xamarin Forms</category>
      <category>Android</category>
      <category>MMS</category>
      <category>SMS</category>
      <category>Xamarin</category>
      <category>문자</category>
      <category>이미지</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/108</guid>
      <comments>https://virtualgiraffe.tistory.com/108#entry108comment</comments>
      <pubDate>Wed, 1 Jun 2022 22:35:30 +0900</pubDate>
    </item>
    <item>
      <title>[Node.js] exe 배포</title>
      <link>https://virtualgiraffe.tistory.com/107</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. pkg 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- npm install -g pkg&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- pkg [파일이름(app.js)]&amp;nbsp; -t node10-win-x64&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2-1. 디지털 서명 문제가 발생한다면 변환파일과 동일한 경로에서 powershell을 아래와 같이 실행하고 2번을 다시 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- powershell.exe &lt;span style=&quot;background-color: #ffffff; color: #373a3c;&quot;&gt;-executionpolicy unrestricted&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;</description>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/107</guid>
      <comments>https://virtualgiraffe.tistory.com/107#entry107comment</comments>
      <pubDate>Thu, 12 May 2022 19:23:39 +0900</pubDate>
    </item>
    <item>
      <title>[Xamarin] 별도의 쓰레드에서 UI 구성 요소를 변경하는 법</title>
      <link>https://virtualgiraffe.tistory.com/106</link>
      <description>&lt;pre id=&quot;code_1650432882049&quot; class=&quot;csharp&quot; data-ke-language=&quot;csharp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Xamarin.Forms.Device.BeginInvokeOnMainThread(() =&amp;gt; {
	//여기에 UI를 변경하는 코드 입력
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Microsoft .NET/Xamarin Forms</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/106</guid>
      <comments>https://virtualgiraffe.tistory.com/106#entry106comment</comments>
      <pubDate>Wed, 20 Apr 2022 14:35:22 +0900</pubDate>
    </item>
    <item>
      <title>[Xamarin] Xamarin.Android에서 Java Class 사용하기</title>
      <link>https://virtualgiraffe.tistory.com/105</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. java 파일 코드 생성&lt;/p&gt;
&lt;pre id=&quot;code_1648691388566&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Calculator
{    
    public int Add (int n1, int n2) 
    {
    	return n1 + n2;
    }
    
    public int Sub (int n1, int n2) 
    {
    	return n1 - n2;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;2. 파일 변환&lt;br /&gt;C:\&amp;gt;javac&amp;nbsp;파일명.java &lt;br /&gt;C:\&amp;gt;jar&amp;nbsp;cf&amp;nbsp;파일명.jar&amp;nbsp;클래스명.class &lt;br /&gt;C:\&amp;gt;ikvmc&amp;nbsp;파일명.jar &lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;신규&amp;nbsp;프로젝트&amp;nbsp;생성&amp;nbsp;-&amp;nbsp;Android&amp;nbsp;바인딩&amp;nbsp;라이브러리(Xamarin) &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;2에서&amp;nbsp;생성한&amp;nbsp;'파일명.jap'을&amp;nbsp;3에서&amp;nbsp;생성한&amp;nbsp;프로젝트의&amp;nbsp;Jars&amp;nbsp;하위로&amp;nbsp;포함시킨다. &lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;'파일명.jap'&amp;nbsp;-&amp;nbsp;속성&amp;nbsp;:&amp;nbsp;빌드&amp;nbsp;작업&amp;nbsp;도구를&amp;nbsp;'EmbeddedJar'로&amp;nbsp;변경한다. &lt;br /&gt;&lt;br /&gt;6.&amp;nbsp;Xamarin.Forms에서&amp;nbsp;인터페이스를&amp;nbsp;구현한다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;interface&amp;nbsp;ICalculator &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;Add(int&amp;nbsp;n1,&amp;nbsp;int&amp;nbsp;n2); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;Sub(int&amp;nbsp;n1,&amp;nbsp;int&amp;nbsp;n2); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;7.&amp;nbsp;안드로이드에서&amp;nbsp;6에서&amp;nbsp;생성한&amp;nbsp;인터페이스를&amp;nbsp;사용하여&amp;nbsp;클래스를&amp;nbsp;구현한다. &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;internal&amp;nbsp;class&amp;nbsp;CalculatorAndroid&amp;nbsp;:&amp;nbsp;ICalculator &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;int&amp;nbsp;Add(int&amp;nbsp;n1,&amp;nbsp;int&amp;nbsp;n2) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;Calculator.Add(n1,&amp;nbsp;n2); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;public&amp;nbsp;int&amp;nbsp;Sub(int&amp;nbsp;n1,&amp;nbsp;int&amp;nbsp;n2) &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;Calculator.Sub(n1,&amp;nbsp;n2); &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;} &lt;br /&gt;&lt;br /&gt;8.&amp;nbsp;사용 &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;n1&amp;nbsp;=&amp;nbsp;10; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int&amp;nbsp;n2&amp;nbsp;=&amp;nbsp;30; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;DependencyService.Get&amp;lt;Interfaces.ICalculator&amp;gt;().Add(n1,&amp;nbsp;n2).ToString();&lt;/p&gt;</description>
      <category>Microsoft .NET/Xamarin Forms</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/105</guid>
      <comments>https://virtualgiraffe.tistory.com/105#entry105comment</comments>
      <pubDate>Thu, 31 Mar 2022 10:51:48 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 'Redmine 메일 알림' 설정 (환경 : Linux, Docker)</title>
      <link>https://virtualgiraffe.tistory.com/104</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. docker 안에 설치된 redmine 내부로 이동 : docker exec -it &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;{docker redmine name}&lt;/b&gt;&lt;/span&gt; bash&lt;/p&gt;
&lt;pre id=&quot;code_1644974762672&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@localhost$		docker exec -it redmine bash&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 'config/configuration.yml' 실행&lt;/p&gt;
&lt;pre id=&quot;code_1644974910479&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@12345:/usr/src/redmine$	vi config/configuration.yml
# 수정 (Key : E)
# 입력 (Key : I)&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. smtp 설정값 입력&lt;/p&gt;
&lt;pre id=&quot;code_1644975561716&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; production:
   email_delivery:
     delivery_method: :smtp
     smtp_settings:
       enable_starttls_auto: true
       address: &quot;smtp.gmail.com&quot; 			# 회사 smtp 주소를 입력합니다.
       port: 587 					# 회사에서 smtp를 위한 Port를 입력합니다.
       domain: &quot;smtp.gmail.com&quot; 			# 회사의 도메인을 입력합니다.
       authentication: :plain
       user_name: &quot;**********@gmail.com&quot; 		# G메일 아이디 혹은 회사 아이디
       password: &quot;************&quot; 			# G메일 패스워드 혹은 회사 패스워드&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. docker 탈출 후 redmine 재실행 : docker restart &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;{docker redmine name}&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1644975736019&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;root@12345:/usr/src/redmine$	exit
root@localhost$		docker restart redmine&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. redmine 사이트로 이동하여 &quot;관리-설정-메일 알림&quot;으로 이동하여 우측하단 &quot;테스트 메일 보내기&quot;로 연결 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;(테스트 메일은 현재 접속 계정에 등록된 메일 계정으로 발송된다.)&lt;/span&gt;&lt;/p&gt;</description>
      <category>Linux</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/104</guid>
      <comments>https://virtualgiraffe.tistory.com/104#entry104comment</comments>
      <pubDate>Wed, 16 Feb 2022 10:47:18 +0900</pubDate>
    </item>
    <item>
      <title>[Flutter] Rest API (Dio)</title>
      <link>https://virtualgiraffe.tistory.com/103</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 패키지 참조 (pubspec.yaml)&lt;/p&gt;
&lt;pre id=&quot;code_1644922654488&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies:
  dio: ^4.0.4&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1644922368917&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import 'package:dio/dio.dart';&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Method - GET&lt;/p&gt;
&lt;pre id=&quot;code_1644922785587&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;TextButton(
  onPressed: () async {
    var result = await Dio().get(
        &quot;http://localhost:3000/organization&quot;,
        queryParameters: {
          &quot;country&quot;: &quot;Honduras&quot;
        });
    print(result.data.toString());
  },
  child: const Text(&quot;GET&quot;)
),&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Method - POST&lt;/p&gt;
&lt;pre id=&quot;code_1644923998842&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;TextButton(
  onPressed: () async {
    var result = await Dio().post(
        &quot;http://localhost:3000/admin/login-admin&quot;,
        data: '{ &quot;Id&quot; : &quot;admin&quot;, &quot;Pw&quot; : &quot;admin&quot;}');
    print(result.data.toString());
  },
  child: const Text(&quot;POST&quot;)),&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Method - PUT&lt;/p&gt;
&lt;pre id=&quot;code_1644924219856&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;TextButton(
  onPressed: () async {
    var result = await Dio().put(
        &quot;http://localhost:3000/admin/login-admin&quot;,
        data: '{ &quot;Id&quot; : &quot;admin&quot;, &quot;Pw&quot; : &quot;admin&quot;}');
    print(result.data.toString());
  },
  child: const Text(&quot;PUT&quot;)),&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Method - DELETE&lt;/p&gt;
&lt;pre id=&quot;code_1644924336679&quot; class=&quot;css&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;TextButton(
  onPressed: () async {
    var result = await Dio().delete(
        &quot;http://localhost:3000/organization&quot;,
        queryParameters: {
          &quot;category&quot;: &quot;Other State&quot;,
        });
    print(result.data.toString());
  },
  child: const Text(&quot;DELETE&quot;)),&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Flutter</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/103</guid>
      <comments>https://virtualgiraffe.tistory.com/103#entry103comment</comments>
      <pubDate>Tue, 15 Feb 2022 19:53:04 +0900</pubDate>
    </item>
    <item>
      <title>[기타] Synology Nas Redmine 백업 및 복구</title>
      <link>https://virtualgiraffe.tistory.com/101</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;백업&lt;/h2&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;1. 사진 및 파일 백업&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dsm으로 접속하여 File Station : docker - redmine -&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;plugins&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;및&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;files&lt;/b&gt;를 압축하여 보관&lt;/span&gt;합니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nLvtC/btrpU1GzzZr/U1biEXhVkCLdl9CtejbNNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nLvtC/btrpU1GzzZr/U1biEXhVkCLdl9CtejbNNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nLvtC/btrpU1GzzZr/U1biEXhVkCLdl9CtejbNNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnLvtC%2FbtrpU1GzzZr%2FU1biEXhVkCLdl9CtejbNNK%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;445&quot; height=&quot;546&quot; data-origin-width=&quot;445&quot; data-origin-height=&quot;546&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 프로젝트 정보 백업&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2.A 패키지 센터에서 Redmine을 정지합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;349&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H3NXZ/btrpRWMUkjX/kJKM03l8keKzAnwFEzLdW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H3NXZ/btrpRWMUkjX/kJKM03l8keKzAnwFEzLdW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H3NXZ/btrpRWMUkjX/kJKM03l8keKzAnwFEzLdW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH3NXZ%2FbtrpRWMUkjX%2FkJKM03l8keKzAnwFEzLdW0%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;600&quot; height=&quot;349&quot; data-origin-width=&quot;600&quot; data-origin-height=&quot;349&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2.B docker - redmine 폴더 하위에 temp 폴더를 생성합니다.&lt;/li&gt;
&lt;li&gt;2.C Docker - 컨테이너 - redmine - 우클릭_편집 - 볼륨으로 이동합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;260&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdHDab/btrpP2zW12v/IQa81VzhXXDl2puhhEZtBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdHDab/btrpP2zW12v/IQa81VzhXXDl2puhhEZtBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdHDab/btrpP2zW12v/IQa81VzhXXDl2puhhEZtBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdHDab%2FbtrpP2zW12v%2FIQa81VzhXXDl2puhhEZtBK%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;628&quot; height=&quot;260&quot; data-origin-width=&quot;628&quot; data-origin-height=&quot;260&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2.D 폴더 추가를 선택하고 '2.B'에서 생성한 temp 폴더를 선택하고 마운트 경로에 &quot;/temp&quot;를 입력하고 적용합니다.&lt;/li&gt;
&lt;li&gt;2.E '2.A'처럼 Redmine을 다시 실행합니다.&lt;/li&gt;
&lt;li&gt;2.F docker - 컨테이너(redmine) - 우클릭(세부사항) - 터미널 - 생성&lt;/li&gt;
&lt;li&gt;2.G temp 폴더 생성 (여기까지 완료하면 터미널의 )&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;539&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4kQtF/btrpQZbXkQc/BcKdrJXDg08wgKskDkBHG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4kQtF/btrpQZbXkQc/BcKdrJXDg08wgKskDkBHG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4kQtF/btrpQZbXkQc/BcKdrJXDg08wgKskDkBHG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4kQtF%2FbtrpQZbXkQc%2FBcKdrJXDg08wgKskDkBHG0%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;932&quot; height=&quot;539&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;539&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/li&gt;
&lt;li&gt;2.H 터미널에서 temp폴더로 이동합니다. ( cd /temp/ )&lt;/li&gt;
&lt;li&gt;2.I DB 백업 ( mysqldump -u [userId] -p -A redmine &amp;gt; [백업파일명.sql] )&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1072&quot; data-origin-height=&quot;537&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcHLC1/btrpOx8lPLF/6j20pCTGAquAecw6LJVGPk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcHLC1/btrpOx8lPLF/6j20pCTGAquAecw6LJVGPk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcHLC1/btrpOx8lPLF/6j20pCTGAquAecw6LJVGPk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcHLC1%2FbtrpOx8lPLF%2F6j20pCTGAquAecw6LJVGPk%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;1072&quot; height=&quot;537&quot; data-origin-width=&quot;1072&quot; data-origin-height=&quot;537&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;2.J '1번'에서 생성한 압축 파일과 '2.I'에서 생성한 백업파일이 결과물입니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;복구&lt;/h2&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;1. plugin 및 files 폴더를 docker - redmine폴더에 덮어줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. temp 폴더를 생성 후에 백업데이터를 넣습니다. (*.sql)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. d&lt;span style=&quot;background-color: #fafafa;&quot;&gt;ocker - 컨테이너(redmine) - 우클릭_편집 - 볼륨에서 temp 폴더끼리 연결합니다. (백업 2.C 참조)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;4. &lt;span style=&quot;background-color: #fafafa;&quot;&gt;docker - 컨테이너(redmine) - 우클릭(세부사항) - 터미널 - 생성&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;5. temp 폴더를 생성합니다 ( mkdir temp )&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;539&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4kQtF/btrpQZbXkQc/BcKdrJXDg08wgKskDkBHG0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4kQtF/btrpQZbXkQc/BcKdrJXDg08wgKskDkBHG0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4kQtF/btrpQZbXkQc/BcKdrJXDg08wgKskDkBHG0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4kQtF%2FbtrpQZbXkQc%2FBcKdrJXDg08wgKskDkBHG0%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;932&quot; height=&quot;539&quot; data-origin-width=&quot;932&quot; data-origin-height=&quot;539&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;6. temp 폴더로 이동합니다. ( cd /temp/ )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7. dump 파일을 복원합니다. ( mysql -u [userId] -p redmine &amp;lt; [파일명.sql] )&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FV98O/btrpQXFkOWK/IuwtPjK05HrYJ0OD1ElNjk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FV98O/btrpQXFkOWK/IuwtPjK05HrYJ0OD1ElNjk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FV98O/btrpQXFkOWK/IuwtPjK05HrYJ0OD1ElNjk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFV98O%2FbtrpQXFkOWK%2FIuwtPjK05HrYJ0OD1ElNjk%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;630&quot; height=&quot;103&quot; data-origin-width=&quot;630&quot; data-origin-height=&quot;103&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/101</guid>
      <comments>https://virtualgiraffe.tistory.com/101#entry101comment</comments>
      <pubDate>Wed, 5 Jan 2022 18:20:21 +0900</pubDate>
    </item>
    <item>
      <title>[Flutter] SnackBar</title>
      <link>https://virtualgiraffe.tistory.com/100</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;페이지 변경 시에 팝업이 유지되는 SnackBar&lt;/h2&gt;
&lt;pre id=&quot;code_1640915423267&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class MySnackBar extends StatelessWidget {
  const MySnackBar({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        children: [

          // #region 페이지가 변경되어도 팝업을 유지
          SizedBox(height: 15),
          ElevatedButton(
            onPressed: () {
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(
                  content: Text(
                    &quot;123&quot;,
                    textAlign: TextAlign.center,
                  ),
                  duration: Duration(seconds: 1),
                  backgroundColor: Colors.teal,
                ),
              );
            },
            child: const Text(
              &quot;ScaffoldMessenger\n페이지가 변경되어도 팝업을 유지&quot;,
              textAlign: TextAlign.center,
            ),
          ),
          // #endregion
          
        ],
      ),
    );
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;페이지 변경 시에 팝업 제거되는&lt;span&gt;&amp;nbsp;&lt;/span&gt;SnackBar&lt;/h2&gt;
&lt;pre id=&quot;code_1640917250846&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class MySnackBar extends StatelessWidget {
  const MySnackBar({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        children: [
        
          // #region 페이지가 변경되면 팝업이 제거 됨
          SizedBox(height: 15),
          ScaffoldMessenger(
            child: ElevatedButton(
              child: const Text(
                &quot;ScaffoldMessenger\n페이지가 변경되면 팝업이 제거 됨&quot;,
                textAlign: TextAlign.center,
              ),
              onPressed: () {
                ScaffoldMessenger.of(context).showSnackBar(
                  const SnackBar(
                    content: Text(
                      &quot;Hello - SnackBar&quot;,
                      textAlign: TextAlign.center,
                      style: TextStyle(color: Colors.white),
                    ),
                    backgroundColor: Colors.teal,
                    duration: Duration(seconds: 1),
                  ),
                );
              },
            ),
          ),
          // #endregion
   
        ],
      ),
    );
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;내부에 버튼이 있는 SnackBar&lt;/h2&gt;
&lt;pre id=&quot;code_1640917270636&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;class MySnackBar extends StatelessWidget {
  const MySnackBar({Key? key}) : super(key: key);

  @override
  Widget build(BuildContext context) {
    return Center(
      child: Column(
        children: [

          // #region SnackBar 내부에 버튼 생성
          SizedBox(height: 15),
          ElevatedButton(
            child: const Text(
              &quot;SnackBarAction\nSnackBar 안에 버튼 생성&quot;,
              textAlign: TextAlign.center,
            ),
            onPressed: () {
              ScaffoldMessenger.of(context).showSnackBar(
                SnackBar(
                  content: Text(
                    &quot;SnackBarAction 예제&quot;,
                    textAlign: TextAlign.center,
                  ),
                  duration: Duration(seconds: 2),
                  backgroundColor: Colors.teal,
                  action: SnackBarAction(
                    label: &quot;Click&quot;,
                    textColor: Colors.white,
                    onPressed: () {
                      debugPrint(&quot;SnackBarAction 클릭됨.&quot;);
                    },
                  ),
                ),
              );
            },
          )
          // #endregion
          
        ],
      ),
    );
  }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Flutter</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/100</guid>
      <comments>https://virtualgiraffe.tistory.com/100#entry100comment</comments>
      <pubDate>Fri, 31 Dec 2021 10:50:53 +0900</pubDate>
    </item>
    <item>
      <title>[Flutter] vscode 확장프로그램</title>
      <link>https://virtualgiraffe.tistory.com/99</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Flutter&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Flutter Tree&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- OneChild&amp;gt;MultipleChild[OneChild,MultipleChild[OneChild,OneChild],OneChild&amp;gt;OneChild]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&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;color: #000000;&quot;&gt;Bracket Pair Colorizer 2&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;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;color: #000000;&quot;&gt;Error Lens&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;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;color: #000000;&quot;&gt;Material Icon Theme&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;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;color: #000000;&quot;&gt;Pubspec Assist&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 라이브러리 이름을 입력하면 'pubspec.yaml'에 자동으로 추가해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;#region folding for VS Code&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- region을 사용한 코드 정리를 지원&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;- 기본 단축키 ctr + m, r&lt;/span&gt;&lt;/p&gt;</description>
      <category>Flutter</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/99</guid>
      <comments>https://virtualgiraffe.tistory.com/99#entry99comment</comments>
      <pubDate>Wed, 29 Dec 2021 11:23:32 +0900</pubDate>
    </item>
    <item>
      <title>[Database] Linux-Docker-Mysql 데이터베이스 자동 백업</title>
      <link>https://virtualgiraffe.tistory.com/97</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;backup/database에 주기적으로 백업 데이터를 저장하는 방법 입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;해당 글은 백업 스크립트는 backup 폴더에 생성하는 것을 기준으로 하고 있습니다.&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;1. 폴더를 생성합니다. (스크립트 보관 및 백업데이터 보관용)&lt;/p&gt;
&lt;pre id=&quot;code_1638166134602&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 경로 생성
mkdir /backup
mkdir /backup/database&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 스크립트 생성&lt;/p&gt;
&lt;pre id=&quot;code_1638166257020&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 스크립트를 생성합니다.
vi /backup/backup_db.sh

# 생성 후 i를 눌러 데이터를 입력합시다. (아래 코드(2.1) 붙여 넣기(마우스 우클릭))
# 입력 후에 ESC를 누르고 :wq를 입력하고 빠져나옵니다.&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2.1&lt;/p&gt;
&lt;pre id=&quot;code_1638166544075&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/bin/sh


echo &quot;============= 20일 지난 데이터 삭제 시작 =============&quot;
# 20일이 지난건 지워버림
DEL_FILE=`date -d &quot;-20 days&quot; +%Y%m%d`

rm -rf /backup/database/mysql_db_bak_${DEL_FILE}.sql
echo &quot;============= 20일 지난 데이터 삭제 완료 =============&quot;


echo &quot;============= 변수 할당 시작 =============&quot;
 DATE=`date +&quot;%Y%m%d&quot;`
 USER=&quot;DB접속 계정&quot;
 PASSWORD=&quot;DB접속 암호&quot;
 DATABASE=&quot;데이터베이스 명&quot;
 CONTAINER=&quot;Docker mysql 컨테이너 명&quot;
 OUTPUT_PATH=&quot;/backup/database/mysql_bak_${DATABASE}_${DATE}.sql&quot;
echo &quot;============= 변수 할당 완료 =============&quot;


echo &quot;============= Database 백업 시작 =============&quot;
 docker exec ${CONTAINER} /usr/bin/mysqldump -u${USER} -p${PASSWORD}  ${DATABASE} &amp;gt; ${OUTPUT_PATH}
 chown root.root  ${OUTPUT_PATH}
 chmod 755  ${OUTPUT_PATH}
echo &quot;============= Database 백업 완료 =============&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. crontab를 사용하여 특정 시간에 스크립트 자동 실행&lt;/p&gt;
&lt;pre id=&quot;code_1638166770474&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 설정 열기
crontab -e&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. 반복 시간(분, 시, 월, 일, 요일) 및 반복 파일 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;분(0~59), 시(0~23), 일(1~31), 월(1~12), 요일(0~7 : 0,7은 일요일)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명령어는&amp;nbsp;무조건&amp;nbsp;한줄로&amp;nbsp;입력!,&amp;nbsp;줄&amp;nbsp;바꿈으로&amp;nbsp;여러&amp;nbsp;명령어&amp;nbsp;설정&amp;nbsp;가능&lt;/p&gt;
&lt;pre id=&quot;code_1638166873926&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;00 02 * * * bash /backup/backup_db.sh

# 생성 후 i를 눌러 데이터를 입력합시다. (아래 코드(2.1) 붙여 넣기(마우스 우클릭))
# 입력 후에 ESC를 누르고 :wq를 입력하고 빠져나옵니다.&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 수정 사항 적용&lt;/p&gt;
&lt;pre id=&quot;code_1638167016116&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;service crond restart&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. 반영 결과 확인&lt;/p&gt;
&lt;pre id=&quot;code_1638167052004&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;crontab -l&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Database</category>
      <category>auto</category>
      <category>backup</category>
      <category>crontab</category>
      <category>DB</category>
      <category>docker</category>
      <category>linux</category>
      <category>MYSQL</category>
      <category>리눅스</category>
      <category>백업</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/97</guid>
      <comments>https://virtualgiraffe.tistory.com/97#entry97comment</comments>
      <pubDate>Mon, 29 Nov 2021 15:31:11 +0900</pubDate>
    </item>
    <item>
      <title>[WPF] hexColor to (Color or SolidColorBrush)</title>
      <link>https://virtualgiraffe.tistory.com/96</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1637718300914&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Color    
Color color_1 = (Color)new BrushConverter().ConvertFrom(&quot;#CA5100&quot;);
    
//SolidColorBrush 
SolidColorBrush brush_1 = (SolidColorBrush)new BrushConverter().ConvertFrom(&quot;#CA5100&quot;);

//xamarin
Xamarin.Essentials.ColorConverters.FromHex(&quot;#CA5100&quot;)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Microsoft .NET/WPF</category>
      <category>brush</category>
      <category>c#</category>
      <category>COLOR</category>
      <category>hex</category>
      <category>solidColorBrush</category>
      <category>to</category>
      <category>WPF</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/96</guid>
      <comments>https://virtualgiraffe.tistory.com/96#entry96comment</comments>
      <pubDate>Wed, 24 Nov 2021 10:46:28 +0900</pubDate>
    </item>
    <item>
      <title>[C#] string 타입 형식지정</title>
      <link>https://virtualgiraffe.tistory.com/95</link>
      <description>&lt;pre id=&quot;code_1634275098107&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    public class Member
    {
        public string Id { get; set; }

        // 암호 형식 지정
        [DataType(DataType.Password)]
        public string Pw { get; set; }

        // 이메일 형식 지정
        [DataType(DataType.EmailAddress)]
        public string Email { get; set; }

        // 날짜 형식 지정
        [DataType(DataType.Date)]
        public DateTime Birthday { get; set; }


        // Custom 		 - 사용자 지정 데이터 유형을 나타냅니다.
        // DateTime 	 - 시간의 순간을 나타내며, 날짜와 시간으로 표현됩니다.
        // Date 		 - 날짜 값을 나타냅니다.
        // Time 		 - 시간 값을 나타냅니다.
        // Duration 	 - 개체가 존재하는 연속 시간을 나타냅니다.
        // PhoneNumber 	 - 전화 번호 값을 나타냅니다.
        // Currency 	 - 통화 값을 나타냅니다.
        // Text 		 - 표시되는 텍스트를 나타냅니다.
        // Html 		 - HTML 파일을 나타냅니다.
        // MultilineText - 다중 줄 텍스트를 나타냅니다.
        // EmailAddress  - 이메일 주소를 나타냅니다.
        // Password 	 - 암호 값을 나타냅니다.
        // Url 			 - URL 값을 나타냅니다.
        // ImageUrl 	 - 이미지의 URL을 나타냅니다.
        // CreditCard 	 - 신용카드 번호를 나타냅니다.
        // PostalCode 	 - 우편 번호를 나타냅니다.
        // Upload 		 - 파일 업로드 데이터 형식을 나타냅니다.
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Microsoft .NET/C#</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/95</guid>
      <comments>https://virtualgiraffe.tistory.com/95#entry95comment</comments>
      <pubDate>Fri, 15 Oct 2021 14:31:18 +0900</pubDate>
    </item>
    <item>
      <title>[MySQL] 문자 형식 변경 방법(utf8_general_ci)</title>
      <link>https://virtualgiraffe.tistory.com/94</link>
      <description>&lt;pre id=&quot;code_1633065028005&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#데이터베이스의 문자 형식을 utf8_general_ci으로 일괄 변경
ALTER DATABASE [데이터베이스 이름] CHARACTER SET utf8;

#테이블 문자 형식 utf8_general_ci으로 일괄 변경
ALTER TABLE [테이블 이름] CONVERT TO CHARACTER SET utf8;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Database</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/94</guid>
      <comments>https://virtualgiraffe.tistory.com/94#entry94comment</comments>
      <pubDate>Fri, 1 Oct 2021 14:18:38 +0900</pubDate>
    </item>
    <item>
      <title>[ASP.Net Core] (작성중) 리눅스(centOS) Docker 에 ASP.Net Core 배포</title>
      <link>https://virtualgiraffe.tistory.com/93</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 환경 설치&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 리눅스(centOS)에 Docker 설치 - &lt;a href=&quot;https://docs.docker.com/engine/install/centos/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.docker.com/engine/install/centos/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 리눅스(centOS)에 ASP.Net Core 설치 - &lt;a href=&quot;https://docs.microsoft.com/ko-kr/dotnet/core/install/linux-centos&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://docs.microsoft.com/ko-kr/dotnet/core/install/linux-centos&lt;/a&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 로그인 및 배포파일 경로로 이동&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;70&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0CnDx/btrgbnmOvDu/LPfueogNKoLytmPI9cNcd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0CnDx/btrgbnmOvDu/LPfueogNKoLytmPI9cNcd1/img.png&quot; data-alt=&quot;Putty를 이용하여 리눅스에 접속&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0CnDx/btrgbnmOvDu/LPfueogNKoLytmPI9cNcd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0CnDx%2FbtrgbnmOvDu%2FLPfueogNKoLytmPI9cNcd1%2Fimg.png&quot; data-origin-width=&quot;458&quot; data-origin-height=&quot;70&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Putty를 이용하여 리눅스에 접속&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #28323c;&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;ex)&lt;span&gt; &lt;/span&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;cd /[폴더경로1]/[폴더경로2]..............&lt;/span&gt;&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;style4&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.1 스크립트 제작으로 일괄 진행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ① 스크립트 파일 생성 : vi [스크립트 파일명].sh&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &lt;span style=&quot;color: #ee2323;&quot;&gt;ex)&lt;/span&gt; vi sample.sh&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ② 스크립트 내용 작성 (작성 후 esc -&amp;gt; :wq 입력)&lt;/p&gt;
&lt;pre id=&quot;code_1632813280582&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/bin/bash

#기존 서비스 정지
docker stop online-api

#기존 서비스 제거
docker rm online-api

#이미지 재생성
docker build -t online-api .

#컨테이너 생성
docker run --name online-api -it -d -p 30102:30102 online-api

#컨테이너 실행
docker start online-api

exit 0&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; ③ 실행 : bash [스크립트 파일명]&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.2 (수동) 컨테이너 생성 / 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 컨테이너 생성 : &lt;span style=&quot;color: #28323c;&quot;&gt;docker &lt;span style=&quot;color: #28323c;&quot;&gt;run --name&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;[Name]&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;-it -d -p &lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;[내부포트]:&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;[외부포트]&lt;/span&gt;&lt;/b&gt; &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[IMAGE]&lt;/span&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;color: #28323c;&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp; &lt;span style=&quot;color: #ee2323;&quot;&gt;ex)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;docker run --name&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt; online-api&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;-it -d -p &lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;30102:30102 &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;online-api:latest&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&amp;nbsp; 컨테이너 생성 (폴더 사용) : &lt;span style=&quot;color: #28323c;&quot;&gt;docker &lt;span style=&quot;color: #28323c;&quot;&gt;run --name&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;[Name]&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;-it -d -p &lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;[내부포트]:&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;[외부포트]&lt;/span&gt;&lt;/b&gt; -v &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;[폴더 경로]&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[IMAGE]&lt;/span&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;color: #ee2323;&quot;&gt;&amp;nbsp; ex) &lt;/span&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;docker run --name &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;online-api&lt;/span&gt;&lt;/b&gt; -it -d -p &lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;30102:30102&lt;/b&gt;&lt;/span&gt;&amp;nbsp;-v &lt;b&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;/prost/online-api:/app/build&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;online-api:latest&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;color: #28323c;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&amp;nbsp; 컨테이너 실행 : &lt;span style=&quot;color: #28323c;&quot;&gt;docker start [Name]&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;table style=&quot;border-collapse: collapse; width: 100%; height: 202px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 19.8449%; height: 10px; text-align: center;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;Docker 명령어&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.8449%; height: 19px;&quot;&gt;이미지 생성&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 19px;&quot;&gt;docker build -t [폴더 이름]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.8449%; height: 19px;&quot;&gt;설치된 이미지 보기&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 19px;&quot;&gt;docker ps -a&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.8449%; height: 19px;&quot;&gt;동작중인 이미지 보기&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 19px;&quot;&gt;docker ps&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 39px;&quot;&gt;
&lt;td style=&quot;width: 19.8449%; height: 39px;&quot;&gt;컨테이너 생성&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 39px;&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;docker &lt;span style=&quot;color: #28323c;&quot;&gt;run --name&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[Name]&lt;/span&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;-it -d -p [내부포트]:&lt;/span&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;[외부포트]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[IMAGE]&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.8449%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;컨테이너 생성 &lt;br /&gt;(폴더 사용)&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;docker &lt;span style=&quot;color: #28323c;&quot;&gt;run --name&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[Name]&lt;/span&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;-it -d -p [내부포트]:&lt;/span&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;[외부포트] -v [폴더 경로]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;[IMAGE]&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 39px;&quot;&gt;
&lt;td style=&quot;width: 19.8449%; height: 39px;&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;컨테이너 &lt;br /&gt;이름 변경&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 39px;&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;docker remane [기존 이름] [신규 이름]&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.8449%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;컨테이너 실행&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;docker start [Name]&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 19.8449%; height: 19px;&quot;&gt;컨테이너 정지&lt;/td&gt;
&lt;td style=&quot;width: 48.217%; height: 19px;&quot;&gt;&lt;span style=&quot;color: #28323c;&quot;&gt;docker stop [Name]&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.0697%; text-align: center;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;리눅스 명령어&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;화면 정리&lt;/td&gt;
&lt;td style=&quot;width: 70.9303%;&quot;&gt;clear&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;현재 폴더 위치&lt;/td&gt;
&lt;td style=&quot;width: 70.9303%;&quot;&gt;pwd&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;폴더 이동&lt;/td&gt;
&lt;td style=&quot;width: 70.9303%;&quot;&gt;cd &lt;b&gt;/[folderName1]/[folderName2]/....&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;파일 생성&lt;/td&gt;
&lt;td style=&quot;width: 70.9303%;&quot;&gt;vi &lt;b&gt;[filename]&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;검색&lt;/td&gt;
&lt;td style=&quot;width: 70.9303%;&quot;&gt;grep [옵션] [패턴] [파일 혹은 폴더]&lt;br /&gt;옵션&lt;br /&gt;-r : 하위 디렉토리까지 검색&lt;br /&gt;-l : 파일명만 출력&lt;br /&gt;-i : 대소문자 구별 없음&lt;br /&gt;-v : 패턴 미충족 라인 출력&lt;br /&gt;-n : 넘버링&lt;br /&gt;-c : 개수 출력&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;파일 목록&lt;/td&gt;
&lt;td style=&quot;width: 70.9303%;&quot;&gt;ls&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;파일 목록 (* - 임의 문자열)&lt;/td&gt;
&lt;td style=&quot;width: 70.9303%;&quot;&gt;ls *.sh&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;30&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/57zJQ/btrgiazBDBo/8j9xwb6NMdBkG9hQqOKTr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/57zJQ/btrgiazBDBo/8j9xwb6NMdBkG9hQqOKTr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/57zJQ/btrgiazBDBo/8j9xwb6NMdBkG9hQqOKTr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F57zJQ%2FbtrgiazBDBo%2F8j9xwb6NMdBkG9hQqOKTr0%2Fimg.png&quot; data-origin-width=&quot;294&quot; data-origin-height=&quot;30&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;파일 목록 (? - 임의 문자)&lt;/td&gt;
&lt;td style=&quot;width: 70.9303%;&quot;&gt;ls e?_sample.sh&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;31&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m72aq/btrgimGDGME/8k4tP73YPIyuKws0lkk7aK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m72aq/btrgimGDGME/8k4tP73YPIyuKws0lkk7aK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m72aq/btrgimGDGME/8k4tP73YPIyuKws0lkk7aK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm72aq%2FbtrgimGDGME%2F8k4tP73YPIyuKws0lkk7aK%2Fimg.png&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;31&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;파일 내용 보기&lt;/td&gt;
&lt;td style=&quot;width: 70.9303%;&quot;&gt;cat&amp;nbsp;ex_resetup.sh&lt;br /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;275&quot; data-ke-mobilestyle=&quot;widthOrigin&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nJ24n/btrgfOcLaDg/XWrVPPkaGa2PEYDy1eGtck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nJ24n/btrgfOcLaDg/XWrVPPkaGa2PEYDy1eGtck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nJ24n/btrgfOcLaDg/XWrVPPkaGa2PEYDy1eGtck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnJ24n%2FbtrgfOcLaDg%2FXWrVPPkaGa2PEYDy1eGtck%2Fimg.png&quot; data-origin-width=&quot;492&quot; data-origin-height=&quot;275&quot; data-ke-mobilestyle=&quot;widthOrigin&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;현재 접속 계정 확인&lt;/td&gt;
&lt;td style=&quot;width: 70.9303%;&quot;&gt;whoami&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 29.0697%;&quot;&gt;패스워드 변경&lt;/td&gt;
&lt;td style=&quot;width: 70.9303%;&quot;&gt;passwd&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>Microsoft .NET/ASP.Net &amp;amp; ASP.Net Core</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/93</guid>
      <comments>https://virtualgiraffe.tistory.com/93#entry93comment</comments>
      <pubDate>Wed, 18 Aug 2021 18:44:49 +0900</pubDate>
    </item>
    <item>
      <title>[ASP.Net Core] 접속자 IP 받기</title>
      <link>https://virtualgiraffe.tistory.com/92</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;Startup.cs&quot; 클래스의 &quot;ConfigureServices 함수&quot;에 아래 코드 추가&lt;/p&gt;
&lt;pre id=&quot;code_1626413481292&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        public void ConfigureServices(IServiceCollection services)
        {
            #region IP
            services.AddSingleton&amp;lt;Microsoft.AspNetCore.Http.IHttpContextAccessor, Microsoft.AspNetCore.Http.HttpContextAccessor&amp;gt;();
            #endregion

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }&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;IP를 받을 Controller에 아래 코드를 추가하고 생성자 명을 본인 코드에 맞게 변경합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1626413675948&quot; class=&quot;cs&quot; style=&quot;display: block; overflow: auto; padding: 20px; color: #383a42; background: #f8f8f8; font-size: 14px; font-family: 'SF Mono', Menlo, Consolas, Monaco, monospace; border: 1px solid #ebebeb; line-height: 1.71; margin: 20px auto 0px; cursor: default; z-index: 1; font-style: normal; font-variant-ligatures: normal; font-variant-caps: normal; font-weight: 400; letter-spacing: normal; orphans: 2; text-align: start; text-indent: 0px; text-transform: none; widows: 2; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration-style: initial; text-decoration-color: initial;&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        /// &amp;lt;summary&amp;gt;
        /// 생성자
        /// &amp;lt;/summary&amp;gt;
        /// &amp;lt;param name=&quot;_acc&quot;&amp;gt;&amp;lt;/param&amp;gt;
        public UserController(Microsoft.AspNetCore.Http.IHttpContextAccessor _acc) 
        { 
            HttpContextAccessor = _acc; 
        }

        #region IP
        private Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor;

        /// &amp;lt;summary&amp;gt;
        /// 접속자 IP 주소
        /// &amp;lt;/summary&amp;gt;
        public string IP
        {
            get
            {
                var result = string.Empty;
                //헤더에서 IP 주소 가져오기
                if (HttpContextAccessor.HttpContext.Request.Headers != null)
                {
                    //XFF(X-Forwarded-For) HTTP 헤더 필드는 클라이언트의 원래 IP 주소를 식별하기 위한 표준
                    //HTTP 프록시 또는 로드 밸런서를 통해 웹 서버에 연결

                    var forwardedHeader = HttpContextAccessor.HttpContext.Request.Headers[&quot;X-Forwarded-For&quot;];
                    if (!Microsoft.Extensions.Primitives.StringValues.IsNullOrEmpty(forwardedHeader))
                        result = forwardedHeader.FirstOrDefault();
                }

                //헤더가 없는 경우 연결 원격 IP 주소를 가져오기
                if (string.IsNullOrEmpty(result) &amp;amp;&amp;amp; HttpContextAccessor.HttpContext.Connection.RemoteIpAddress != null)
                    result = HttpContextAccessor.HttpContext.Connection.RemoteIpAddress.ToString();

                return result.Replace(&quot;::1&quot;, &quot;192.168.0.1&quot;).Replace(&quot;::ffff:&quot;, &quot;&quot;);
            }
        }
        #endregion&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Microsoft .NET/ASP.Net &amp;amp; ASP.Net Core</category>
      <category>ASP.NET Core</category>
      <category>IP</category>
      <category>접속자 ip</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/92</guid>
      <comments>https://virtualgiraffe.tistory.com/92#entry92comment</comments>
      <pubDate>Fri, 16 Jul 2021 14:35:49 +0900</pubDate>
    </item>
    <item>
      <title>[C#] Thread, Thread 인자 전달, BeginInvoke, Invoke 복붙용</title>
      <link>https://virtualgiraffe.tistory.com/87</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Thread&lt;/h2&gt;
&lt;pre id=&quot;code_1615946552583&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Thread th = new Thread(new ThreadStart(functionSample));
th.Start();

private void functionSample()
{
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Thread 인자 전달&lt;/h2&gt;
&lt;pre id=&quot;code_1615946317190&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;// Type - 1
Thread th = new Thread(() =&amp;gt; functionSample(&quot;전자기린&quot;, 29));
th.Start();

private void functionSample(string name, int age)
{
}


// Type - 2
Thread th = new Thread(new ParameterizedThreadStart(functionSample));
th.Start(&quot;전자기린&quot;);

private void functionSample(object _name)
{
	string name = _name as string;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;BeginInvoke - 비동기&lt;/h2&gt;
&lt;pre id=&quot;code_1615946654492&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Application.Current.Dispatcher.BeginInvoke(
System.Windows.Threading.DispatcherPriority.Normal, 
new Action(delegate 
{

}));


//xamarin.forms
Device.BeginInvokeOnMainThread(() =&amp;gt; {
    
});&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Invoke - 동기&lt;/h2&gt;
&lt;pre id=&quot;code_1615946710718&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Application.Current.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Normal, 
new Action(delegate 
{

}));&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Microsoft .NET/C#</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/87</guid>
      <comments>https://virtualgiraffe.tistory.com/87#entry87comment</comments>
      <pubDate>Wed, 17 Mar 2021 11:05:22 +0900</pubDate>
    </item>
    <item>
      <title>[ASP.Net Core API] File Upload API / 파일 업로드 API</title>
      <link>https://virtualgiraffe.tistory.com/74</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;파일 저장 경로, 저장 파일 명, 파일을 필수값으로 받아서 서버에 저장하는 API&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;API&amp;nbsp;that&amp;nbsp;receives&amp;nbsp;file&amp;nbsp;storage&amp;nbsp;path,&amp;nbsp;save&amp;nbsp;file&amp;nbsp;name,&amp;nbsp;and&amp;nbsp;file&amp;nbsp;as&amp;nbsp;required&amp;nbsp;values&amp;nbsp;and&amp;nbsp;saves&amp;nbsp;them&amp;nbsp;to&amp;nbsp;the&amp;nbsp;server&lt;/p&gt;
&lt;pre id=&quot;code_1612318690929&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#region Upload
/// &amp;lt;summary&amp;gt;
/// 파일 업로드
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name=&quot;path&quot;&amp;gt;파일 저장 경로(서버)&amp;lt;/param&amp;gt;
/// &amp;lt;param name=&quot;filename&quot;&amp;gt;파일 저장 이름(서버)&amp;lt;/param&amp;gt;
/// &amp;lt;param name=&quot;file&quot;&amp;gt;파일(클라이언트)&amp;lt;/param&amp;gt;
/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
//[EnableCors(&quot;CORS&quot;)]
[HttpPost(&quot;upload&quot;)]
public string Upload(
[Required][FromForm(Name = &quot;path&quot;)]string path,
[Required][FromForm(Name = &quot;filename&quot;)]string filename,
[Required][FromForm(Name = &quot;file&quot;)] Microsoft.AspNetCore.Http.IFormFile file)
{
    try
    {
        //인코딩
        System.Text.Encoding.RegisterProvider(System.Text.CodePagesEncodingProvider.Instance);
        System.Text.Encoding.GetEncoding(&quot;windows-1254&quot;);

        if (!Directory.Exists(path))  // 폴더 존재 확인 
            Directory.CreateDirectory(path);   // 폴더 생성 

        //파일 저장
        using (var fileStream = new FileStream(path+@&quot;\&quot;+filename, FileMode.Create, FileAccess.Write))
            file.OpenReadStream().CopyTo(fileStream);

        return &quot;true&quot;;
    }
    catch (Exception exception)
    {
        return exception.Message;
    }
}
#endregion&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Microsoft .NET/ASP.Net &amp;amp; ASP.Net Core</category>
      <category>API</category>
      <category>ASP</category>
      <category>ASP.NET</category>
      <category>ASP.NET Core</category>
      <category>asp.net core file upload api</category>
      <category>FIle</category>
      <category>file upload</category>
      <category>FileUpload</category>
      <category>업로드</category>
      <category>파일 업로드</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/74</guid>
      <comments>https://virtualgiraffe.tistory.com/74#entry74comment</comments>
      <pubDate>Wed, 3 Feb 2021 11:23:43 +0900</pubDate>
    </item>
    <item>
      <title>[WPF] 지역화 (다중 언어)</title>
      <link>https://virtualgiraffe.tistory.com/73</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;본 예제는 resource에 국가별 언어를 미리 등록해두고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;설정(Language Culture)에 따라 표출되는 언어가 변경되도록 하는 예제입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Git - &lt;a href=&quot;https://github.com/jeseok-Mun/WPF_Example_MultiLanguage&quot;&gt;https://github.com/jeseok-Mun/WPF_Example_MultiLanguage&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 20px;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 20.4651%;&quot; colspan=&quot;2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;참고&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20.4651%; height: 20px;&quot;&gt;PC 언어 코드&lt;/td&gt;
&lt;td style=&quot;width: 79.5349%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;System.Globalization.CultureInfo.CurrentCulture&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;국가별 언어 코드(&lt;b&gt;Language Culture&lt;/b&gt;)&lt;/p&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;table style=&quot;border-collapse: collapse; width: 100%; height: 4820px;&quot; border=&quot;1&quot; width=&quot;100%&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Code&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Name&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;af&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Afrikaans&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;af-ZA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Afrikaans (South Africa)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-AE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (U.A.E.)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-BH&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Bahrain)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-DZ&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Algeria)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-EG&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Egypt)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-IQ&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Iraq)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-JO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Jordan)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-KW&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Kuwait)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-LB&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Lebanon)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-LY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Libya)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-MA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Morocco)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-OM&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Oman)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-QA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Qatar)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-SA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Saudi Arabia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-SY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Syria)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-TN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Tunisia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ar-YE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Arabic (Yemen)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;az&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Azeri (Latin)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;az-AZ&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Azeri (Latin) (Azerbaijan)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;az-AZ&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Azeri (Cyrillic) (Azerbaijan)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;be&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Belarusian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;be-BY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Belarusian (Belarus)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;bg&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Bulgarian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;bg-BG&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Bulgarian (Bulgaria)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;bs-BA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Bosnian (Bosnia and Herzegovina)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ca&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Catalan&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ca-ES&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Catalan (Spain)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;cs&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Czech&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;cs-CZ&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Czech (Czech Republic)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;cy&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Welsh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;cy-GB&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Welsh (United Kingdom)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;da&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Danish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;da-DK&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Danish (Denmark)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;de&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;German&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;de-AT&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;German (Austria)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;de-CH&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;German (Switzerland)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;de-DE&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;German (Germany)&lt;/b&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;&gt;de-LI&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;German (Liechtenstein)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;de-LU&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;German (Luxembourg)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;dv&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Divehi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;dv-MV&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Divehi (Maldives)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;el&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Greek&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;el-GR&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Greek (Greece)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en-AU&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English (Australia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en-BZ&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English (Belize)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en-CA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English (Canada)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en-CB&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English (Caribbean)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en-GB&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English (United Kingdom)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en-IE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English (Ireland)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en-JM&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English (Jamaica)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en-NZ&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English (New Zealand)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en-PH&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English (Republic of the Philippines)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en-TT&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English (Trinidad and Tobago)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;en-US&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;English (United States)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en-ZA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English (South Africa)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;en-ZW&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;English (Zimbabwe)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;eo&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Esperanto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-AR&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Argentina)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-BO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Bolivia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-CL&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Chile)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-CO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Colombia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-CR&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Costa Rica)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-DO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Dominican Republic)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-EC&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Ecuador)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-ES&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Castilian)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-ES&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Spain)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-GT&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Guatemala)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-HN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Honduras)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-MX&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Mexico)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-NI&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Nicaragua)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-PA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Panama)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-PE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Peru)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-PR&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Puerto Rico)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-PY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Paraguay)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-SV&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (El Salvador)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-UY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Uruguay)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;es-VE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Spanish (Venezuela)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;et&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Estonian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;et-EE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Estonian (Estonia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;eu&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Basque&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;eu-ES&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Basque (Spain)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fa&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Farsi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fa-IR&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Farsi (Iran)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fi&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Finnish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fi-FI&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Finnish (Finland)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fo&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Faroese&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fo-FO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Faroese (Faroe Islands)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fr&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;French&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fr-BE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;French (Belgium)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fr-CA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;French (Canada)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fr-CH&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;French (Switzerland)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fr-FR&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;French (France)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fr-LU&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;French (Luxembourg)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;fr-MC&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;French (Principality of Monaco)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;gl&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Galician&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;gl-ES&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Galician (Spain)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;gu&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Gujarati&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;gu-IN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Gujarati (India)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;he&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Hebrew&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;he-IL&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Hebrew (Israel)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;hi&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Hindi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;hi-IN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Hindi (India)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;hr&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Croatian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;hr-BA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Croatian (Bosnia and Herzegovina)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;hr-HR&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Croatian (Croatia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;hu&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Hungarian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;hu-HU&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Hungarian (Hungary)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;hy&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Armenian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;hy-AM&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Armenian (Armenia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;id&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Indonesian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;id-ID&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Indonesian (Indonesia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;is&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Icelandic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;is-IS&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Icelandic (Iceland)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;it&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Italian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;it-CH&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Italian (Switzerland)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;it-IT&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Italian (Italy)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ja&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Japanese&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;ja-JP&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Japanese (Japan)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ka&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Georgian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ka-GE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Georgian (Georgia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;kk&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Kazakh&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;kk-KZ&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Kazakh (Kazakhstan)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;kn&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Kannada&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;kn-IN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Kannada (India)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ko&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Korean&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;ko-KR&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Korean (Korea)&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;kok&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Konkani&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;kok-IN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Konkani (India)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ky&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Kyrgyz&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ky-KG&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Kyrgyz (Kyrgyzstan)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;lt&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Lithuanian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;lt-LT&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Lithuanian (Lithuania)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;lv&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Latvian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;lv-LV&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Latvian (Latvia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;mi&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Maori&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;mi-NZ&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Maori (New Zealand)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;mk&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;FYRO Macedonian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 40px;&quot;&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;mk-MK&lt;/td&gt;
&lt;td style=&quot;height: 40px;&quot;&gt;FYRO Macedonian (Former Yugoslav Republic of Macedonia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;mn&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Mongolian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;mn-MN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Mongolian (Mongolia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;mr&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Marathi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;mr-IN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Marathi (India)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ms&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Malay&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ms-BN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Malay (Brunei Darussalam)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ms-MY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Malay (Malaysia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;mt&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Maltese&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;mt-MT&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Maltese (Malta)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;nb&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Norwegian (Bokm?l)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;nb-NO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Norwegian (Bokm?l) (Norway)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;nl&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Dutch&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;nl-BE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Dutch (Belgium)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;nl-NL&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Dutch (Netherlands)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;nn-NO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Norwegian (Nynorsk) (Norway)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ns&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Northern Sotho&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ns-ZA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Northern Sotho (South Africa)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;pa&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Punjabi&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;pa-IN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Punjabi (India)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;pl&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Polish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;pl-PL&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Polish (Poland)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ps&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Pashto&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ps-AR&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Pashto (Afghanistan)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;pt&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Portuguese&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;pt-BR&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Portuguese (Brazil)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;pt-PT&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Portuguese (Portugal)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;qu&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Quechua&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;qu-BO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Quechua (Bolivia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;qu-EC&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Quechua (Ecuador)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;qu-PE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Quechua (Peru)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ro&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Romanian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ro-RO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Romanian (Romania)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ru&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Russian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ru-RU&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Russian (Russia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sa&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Sanskrit&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sa-IN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Sanskrit (India)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;se&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Sami (Northern)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;se-FI&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Sami (Northern) (Finland)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;se-FI&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Sami (Skolt) (Finland)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;se-FI&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Sami (Inari) (Finland)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;se-NO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Sami (Northern) (Norway)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;se-NO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Sami (Lule) (Norway)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;se-NO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Sami (Southern) (Norway)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;se-SE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Sami (Northern) (Sweden)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;se-SE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Sami (Lule) (Sweden)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;se-SE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Sami (Southern) (Sweden)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sk&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Slovak&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sk-SK&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Slovak (Slovakia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sl&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Slovenian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sl-SI&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Slovenian (Slovenia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sq&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Albanian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sq-AL&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Albanian (Albania)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sr-BA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Serbian (Latin) (Bosnia and Herzegovina)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sr-BA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Serbian (Cyrillic) (Bosnia and Herzegovina)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sr-SP&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Serbian (Latin) (Serbia and Montenegro)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sr-SP&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Serbian (Cyrillic) (Serbia and Montenegro)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sv&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Swedish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sv-FI&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Swedish (Finland)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sv-SE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Swedish (Sweden)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sw&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Swahili&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;sw-KE&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Swahili (Kenya)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;syr&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Syriac&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;syr-SY&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Syriac (Syria)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ta&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Tamil&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ta-IN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Tamil (India)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;te&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Telugu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;te-IN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Telugu (India)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;th&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Thai&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;th-TH&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Thai (Thailand)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;tl&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Tagalog&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;tl-PH&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Tagalog (Philippines)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;tn&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Tswana&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;tn-ZA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Tswana (South Africa)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;tr&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Turkish&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;tr-TR&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Turkish (Turkey)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;tt&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Tatar&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;tt-RU&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Tatar (Russia)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ts&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Tsonga&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;uk&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Ukrainian&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;uk-UA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Ukrainian (Ukraine)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ur&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Urdu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;ur-PK&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Urdu (Islamic Republic of Pakistan)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;uz&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Uzbek (Latin)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;uz-UZ&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Uzbek (Latin) (Uzbekistan)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;uz-UZ&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Uzbek (Cyrillic) (Uzbekistan)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;vi&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Vietnamese&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;vi-VN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Vietnamese (Viet Nam)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;xh&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Xhosa&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;xh-ZA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Xhosa (South Africa)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;zh&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Chinese&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;zh-CN&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Chinese (S)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;zh-HK&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Chinese (Hong Kong)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;zh-MO&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Chinese (Macau)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;zh-SG&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Chinese (Singapore)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;zh-TW&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Chinese (T)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;zu&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Zulu&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;zu-ZA&lt;/td&gt;
&lt;td style=&quot;height: 20px;&quot;&gt;Zulu (South Africa)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;우선 프로젝트에 &quot;Localization&quot;폴더를 생성하고 생성된 폴더에 리소스 &quot;res.resx&quot;파일을 추가합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGModK/btqPqlujW91/iuhsBKCqaQD53pouTcxfHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGModK/btqPqlujW91/iuhsBKCqaQD53pouTcxfHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGModK/btqPqlujW91/iuhsBKCqaQD53pouTcxfHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGModK%2FbtqPqlujW91%2FiuhsBKCqaQD53pouTcxfHK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;생성된 &quot;res.resx&quot;파일은 기본이 되는 파일로 기본값인 &quot;en-US&quot;라고 생각하시면 됩니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot;res.resx&quot;파일을 열어 액세스 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;한정자를 public&lt;/b&gt;&lt;/span&gt;으로 변경하고 영문 콘텐츠를 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmLvd2/btqPxdvlfIO/SNfDsIl3aFc1qDCqviJQbk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmLvd2/btqPxdvlfIO/SNfDsIl3aFc1qDCqviJQbk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmLvd2/btqPxdvlfIO/SNfDsIl3aFc1qDCqviJQbk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmLvd2%2FbtqPxdvlfIO%2FSNfDsIl3aFc1qDCqviJQbk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이제 &lt;span style=&quot;color: #333333;&quot;&gt;&quot;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Localization&quot;폴더에 &lt;/span&gt;&quot;res.&lt;span style=&quot;color: #ee2323;&quot;&gt;ko-KR&lt;/span&gt;.resx&quot;를 추가하고 액세스 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;한정자를 public&lt;/b&gt;&lt;/span&gt;으로 변경하고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;콘텐츠를 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cr1J9e/btqPnamndqW/ZimKsRRhJESnySy4yJK1g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cr1J9e/btqPnamndqW/ZimKsRRhJESnySy4yJK1g1/img.png&quot; data-alt=&quot;&amp;amp;quot;res.ko-KR.resx&amp;amp;quot;를 추가 했다면 PC 설정이 대한민국이라면 한글로 표시됩니다.&amp;amp;amp;nbsp;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cr1J9e/btqPnamndqW/ZimKsRRhJESnySy4yJK1g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcr1J9e%2FbtqPnamndqW%2FZimKsRRhJESnySy4yJK1g1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&quot;res.ko-KR.resx&quot;를 추가 했다면 PC 설정이 대한민국이라면 한글로 표시됩니다.&amp;nbsp;&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;값 확인을 위해 &quot;MainWindow.xaml&quot;에 출력을 합시다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;우선 데이터 참조를 위해 &lt;span style=&quot;color: #333333;&quot;&gt;Localization을 참조합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;xmlns:localization=&quot;clr-namespace:WPF_Multi_Language_Sample.Localization&quot;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1607331840034&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Window x:Class=&quot;WPF_Multi_Language_Sample.MainWindow&quot;
        xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
        xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
        xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;
        xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;
        xmlns:localization=&quot;clr-namespace:WPF_Multi_Language_Sample.Localization&quot;
        mc:Ignorable=&quot;d&quot;
        Title=&quot;MainWindow&quot; 
        Height=&quot;450&quot; Width=&quot;800&quot;&amp;gt;
    &amp;lt;Grid&amp;gt;
        &amp;lt;TextBox Text=&quot;{x:Static localization:res.apple}&quot;/&amp;gt;
    &amp;lt;/Grid&amp;gt;
&amp;lt;/Window&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; width=&quot;400&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CsNSp/btqPib0xx43/eZayZs6hKp5gdsNp4gA6Lk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CsNSp/btqPib0xx43/eZayZs6hKp5gdsNp4gA6Lk/img.png&quot; data-alt=&quot;ko-KR&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CsNSp/btqPib0xx43/eZayZs6hKp5gdsNp4gA6Lk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCsNSp%2FbtqPib0xx43%2FeZayZs6hKp5gdsNp4gA6Lk%2Fimg.png&quot; width=&quot;400&quot; height=&quot;NaN&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ko-KR&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;400&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6jh71/btqPlcESzOx/70H7Zj77IJKyKVZkRrxN90/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6jh71/btqPlcESzOx/70H7Zj77IJKyKVZkRrxN90/img.png&quot; data-alt=&quot;en-US&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6jh71/btqPlcESzOx/70H7Zj77IJKyKVZkRrxN90/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6jh71%2FbtqPlcESzOx%2F70H7Zj77IJKyKVZkRrxN90%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;400&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;en-US&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;여기까지만 설정한다면 PC 국가 설정에 따라 자동으로 언어가 변경됩니다.&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 style=&quot;text-align: center;&quot; data-ke-size=&quot;size23&quot;&gt;언어 선택 및 변경하려면 아래 예제 참고.&lt;/h3&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;국가 코드를 선택하면 프로그램이 다시 시작되며 선택한 언어로 재구성되는 예제&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;선택한 언어 코드가 저장될 공간 생성 ( 프로젝트 속성 - 설정 )&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eetsCc/btqPgGT771k/tAi0I22MRDqINeKgCXBkvK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eetsCc/btqPgGT771k/tAi0I22MRDqINeKgCXBkvK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eetsCc/btqPgGT771k/tAi0I22MRDqINeKgCXBkvK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeetsCc%2FbtqPgGT771k%2FtAi0I22MRDqINeKgCXBkvK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;언어 코드가 선택가능한 UI 구성 ( MainWindow.xaml )&lt;/p&gt;
&lt;pre id=&quot;code_1607344850212&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Window x:Class=&quot;WPF_Multi_Language_Sample.MainWindow&quot;
        xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
        xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
        xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;
        xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;
        xmlns:sys=&quot;clr-namespace:System;assembly=mscorlib&quot;
        xmlns:localization=&quot;clr-namespace:WPF_Multi_Language_Sample.Localization&quot;
        mc:Ignorable=&quot;d&quot;
        Title=&quot;MainWindow&quot; 
        Height=&quot;450&quot; Width=&quot;800&quot;&amp;gt;
    &amp;lt;Grid&amp;gt;
        &amp;lt;Grid.RowDefinitions&amp;gt;
            &amp;lt;RowDefinition Height=&quot;30&quot;/&amp;gt;
            &amp;lt;RowDefinition Height=&quot;30&quot;/&amp;gt;
            &amp;lt;RowDefinition Height=&quot;1*&quot;/&amp;gt;
        &amp;lt;/Grid.RowDefinitions&amp;gt;
        &amp;lt;TextBox Text=&quot;{x:Static localization:res.apple}&quot;/&amp;gt;
        &amp;lt;ComboBox x:Name=&quot;cbLanguage&quot;
                  Grid.Row=&quot;1&quot;
                  SelectionChanged=&quot;cbLanguage_SelectionChanged&quot;&amp;gt;
            &amp;lt;sys:String&amp;gt;ko_KR&amp;lt;/sys:String&amp;gt;
            &amp;lt;sys:String&amp;gt;en_US&amp;lt;/sys:String&amp;gt;
        &amp;lt;/ComboBox&amp;gt;
    &amp;lt;/Grid&amp;gt;
&amp;lt;/Window&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;코드 ( MainWindow.xaml.cs )&lt;/p&gt;
&lt;pre id=&quot;code_1607344954986&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Windows;

namespace WPF_Multi_Language_Sample
{
    /// &amp;lt;summary&amp;gt;
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// &amp;lt;/summary&amp;gt;
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            //저장된 정보로 세팅 (저장된 값이 없으면 PC국가 설정값을 기본으로 함)
            Localization.res.Culture = Properties.Settings.Default.language != string.Empty ? 
                                        new System.Globalization.CultureInfo(Properties.Settings.Default.language) : System.Globalization.CultureInfo.CurrentCulture;

            InitializeComponent();
        }

        private void cbLanguage_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
        {
            //선택 정보 불러오기
            string selected = (string)((System.Windows.Controls.ComboBox)sender).SelectedItem;

            //선택 정보 저장하기
            Properties.Settings.Default.language = selected;
            Properties.Settings.Default.Save();
            
            //새 프로그램 실행
            System.Diagnostics.Process.Start(Application.ResourceAssembly.Location);

            //현재 프로그램 종료
            Application.Current.Shutdown();

        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d7cS7k/btqPlceaLFB/kk9QU8O2ulcGZEFctQhdek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d7cS7k/btqPlceaLFB/kk9QU8O2ulcGZEFctQhdek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d7cS7k/btqPlceaLFB/kk9QU8O2ulcGZEFctQhdek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd7cS7k%2FbtqPlceaLFB%2Fkk9QU8O2ulcGZEFctQhdek%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bzauX4/btqPuSZWhUw/41CFbFQqFaPg6Iov60FIE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bzauX4/btqPuSZWhUw/41CFbFQqFaPg6Iov60FIE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bzauX4/btqPuSZWhUw/41CFbFQqFaPg6Iov60FIE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbzauX4%2FbtqPuSZWhUw%2F41CFbFQqFaPg6Iov60FIE0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Microsoft .NET/WPF</category>
      <category>c#</category>
      <category>language</category>
      <category>WPF</category>
      <category>다중 언어</category>
      <category>번역</category>
      <category>언어</category>
      <category>지역화</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/73</guid>
      <comments>https://virtualgiraffe.tistory.com/73#entry73comment</comments>
      <pubDate>Mon, 7 Dec 2020 18:43:02 +0900</pubDate>
    </item>
    <item>
      <title>[ASP.Net Core API] Startup.cs에서 설정해야 할 것들 ( Swagger, CORS, formatFilter({format?}) )</title>
      <link>https://virtualgiraffe.tistory.com/72</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;nuget에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Swashbuckle.AspNetCore&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;설치&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&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;color: #333333;&quot;&gt;빌드 일시 기록 버전&lt;/span&gt;&lt;/p&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;1. 프로젝트 파일 *.csproj를 메모장으로 열기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;span style=&quot;background-color: #fafafa;&quot;&gt;AssemblyVersion를 1.0.*로 변경&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;3. &lt;span style=&quot;background-color: #fafafa;&quot;&gt;Deterministic를 false로 추가 등록&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;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;AssemblyVersion&amp;gt;1.0.*&amp;lt;/AssemblyVersion&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Deterministic&amp;gt;false&amp;lt;/Deterministic&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1638325105536&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Startup
{
    #region CORS / Version -&amp;gt; DateTime
    readonly string MyAllowSpecificOrigins = &quot;CORS&quot;;

    /// &amp;lt;summary&amp;gt;버전 정보를 넣으면 빌드 시간을 반환.&amp;lt;/summary&amp;gt;
    public System.DateTime Get_BuildDateTime(System.Version version = null)
    {
        // 주.부.빌드.수정
        // 주 버전    Major Number
        // 부 버전    Minor Number
        // 빌드 번호  Build Number
        // 수정 버전  Revision NUmber

        //매개 변수가 존재할 경우
        if (version == null)
            version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

        //세번째 값(Build Number)은 2000년 1월 1일부터
        //Build된 날짜까지의 총 일(Days) 수 이다.
        int day = version.Build;
        System.DateTime dtBuild = (new System.DateTime(2000, 1, 1)).AddDays(day);

        //네번째 값(Revision NUmber)은 자정으로부터 Build된
        //시간까지의 지나간 초(Second) 값 이다.
        int intSeconds = version.Revision;
        intSeconds = intSeconds * 2;
        dtBuild = dtBuild.AddSeconds(intSeconds);


        //시차 보정
        System.Globalization.DaylightTime daylingTime = System.TimeZone.CurrentTimeZone
                .GetDaylightChanges(dtBuild.Year);
        if (System.TimeZone.IsDaylightSavingTime(dtBuild, daylingTime))
            dtBuild = dtBuild.Add(daylingTime.Delta);

        return dtBuild;
    }
    #endregion

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);


        #region IP
        services.AddSingleton&amp;lt;Microsoft.AspNetCore.Http.IHttpContextAccessor, Microsoft.AspNetCore.Http.HttpContextAccessor&amp;gt;();
        #endregion
            
        #region FormatFilter (XML / JSON)
        services.AddMvc(options =&amp;gt; { options.RespectBrowserAcceptHeader = true; })
                                .AddXmlSerializerFormatters()
                                .AddXmlDataContractSeria&amp;zwnj;​lizerFormatters();
        #endregion

        #region Create Swagger Document
        //스웨거 문서정보 생성.
        services.AddSwaggerGen(o =&amp;gt;
        {
            o.SwaggerDoc(&quot;v1&quot;
                , new Microsoft.OpenApi.Models.OpenApiInfo()
                {
                    Title = &quot;Sample API&quot;,
                    Description = &quot;Sample API&quot;,
                    Version = &quot;V1&quot;,
                    License = new Microsoft.OpenApi.Models.OpenApiLicense()
                    {
                        Name = &quot;my Sample&quot;,
                        Url = new Uri(&quot;http://sample.co.kr&quot;)
                    }
                });
            //애플리케이션의 기본 경로 (프로젝트-빌드-출력-XML 문서 파일 체크박스(TRUE))
            var xmlFile = $&quot;{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml&quot;;    
            var xmlPath = System.IO.Path.Combine(AppContext.BaseDirectory, xmlFile);
            //xml 경로
            o.IncludeXmlComments(xmlPath, includeControllerXmlComments: true);
        });
        #endregion

        #region CORS
        services.AddCors(options =&amp;gt;
        {
            options.AddPolicy(MyAllowSpecificOrigins,
            builder =&amp;gt;
            {
                builder.WithOrigins()
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
            });
        });
        #endregion
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        #region Swagger UI
        //스웨거 미들웨어 설정
        app.UseSwagger();

        //스웨거 UI 활성화
        app.UseSwaggerUI(c =&amp;gt;
        {
            c.SwaggerEndpoint(&quot;/swagger/v1/swagger.json&quot;, &quot;API Version - &quot;+ Get_BuildDateTime(System.Reflection.Assembly.GetExecutingAssembly().GetName().Version).ToString(&quot;yyyy.MM.dd(ddd) tt hh:mm (zzz)&quot;));

            //접속 경로 / 미입력 시 swagger
            //c.RoutePrefix = &quot;swagger&quot;;
        });
        #endregion

        #region CORS
        app.UseCors(MyAllowSpecificOrigins);
        #endregion

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseMvc();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반&lt;/p&gt;
&lt;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;pre id=&quot;code_1638334359124&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class Startup
{
    #region CORS
    readonly string MyAllowSpecificOrigins = &quot;CORS&quot;;
    #endregion

    public Startup(IConfiguration configuration)
    {
        Configuration = configuration;
    }

    public IConfiguration Configuration { get; }

    // This method gets called by the runtime. Use this method to add services to the container.
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);


        #region IP
        services.AddSingleton&amp;lt;Microsoft.AspNetCore.Http.IHttpContextAccessor, Microsoft.AspNetCore.Http.HttpContextAccessor&amp;gt;();
        #endregion
            
        #region FormatFilter (XML / JSON)
        services.AddMvc(options =&amp;gt; { options.RespectBrowserAcceptHeader = true; })
                                .AddXmlSerializerFormatters()
                                .AddXmlDataContractSeria&amp;zwnj;​lizerFormatters();
        #endregion

        #region Create Swagger Document
        //스웨거 문서정보 생성.
        services.AddSwaggerGen(o =&amp;gt;
        {
            o.SwaggerDoc(&quot;v1&quot;
                , new Microsoft.OpenApi.Models.OpenApiInfo()
                {
                    Title = &quot;Sample API&quot;,
                    Description = &quot;Sample API&quot;,
                    Version = &quot;V1&quot;,
                    License = new Microsoft.OpenApi.Models.OpenApiLicense()
                    {
                        Name = &quot;my Sample&quot;,
                        Url = new Uri(&quot;http://sample.co.kr&quot;)
                    }
                });
            //애플리케이션의 기본 경로 (프로젝트-빌드-출력-XML 문서 파일 체크박스(TRUE))
            var xmlFile = $&quot;{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml&quot;;    
            var xmlPath = System.IO.Path.Combine(AppContext.BaseDirectory, xmlFile);
            //xml 경로
            o.IncludeXmlComments(xmlPath, includeControllerXmlComments: true);
        });
        #endregion

        #region CORS
        services.AddCors(options =&amp;gt;
        {
            options.AddPolicy(MyAllowSpecificOrigins,
            builder =&amp;gt;
            {
                builder.WithOrigins()
                .AllowAnyOrigin()
                .AllowAnyMethod()
                .AllowAnyHeader();
            });
        });
        #endregion
    }

    // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        #region Swagger UI
        //스웨거 미들웨어 설정
        app.UseSwagger();

        //스웨거 UI 활성화
        app.UseSwaggerUI(c =&amp;gt;
        {
            c.SwaggerEndpoint(&quot;/swagger/v1/swagger.json&quot;, &quot;My API V1&quot;);

            //접속 경로 / 미입력 시 swagger
            //c.RoutePrefix = &quot;swagger&quot;;
        });
        #endregion

        #region CORS
        app.UseCors(MyAllowSpecificOrigins);
        #endregion

        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseMvc();
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Microsoft .NET/ASP.Net &amp;amp; ASP.Net Core</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/72</guid>
      <comments>https://virtualgiraffe.tistory.com/72#entry72comment</comments>
      <pubDate>Tue, 10 Nov 2020 10:51:14 +0900</pubDate>
    </item>
    <item>
      <title>[IIS] 역방향 프록시(reverse proxy)</title>
      <link>https://virtualgiraffe.tistory.com/71</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;역방향 프록시&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Reverse_proxy_h2g2bob.svg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;150&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dzYuNb/btqLkKrbnjj/kQhny8ZCEnqVKmPJz4MmBK/tfile.svg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dzYuNb/btqLkKrbnjj/kQhny8ZCEnqVKmPJz4MmBK/tfile.svg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dzYuNb/btqLkKrbnjj/kQhny8ZCEnqVKmPJz4MmBK/tfile.svg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdzYuNb%2FbtqLkKrbnjj%2FkQhny8ZCEnqVKmPJz4MmBK%2Ftfile.svg&quot; data-filename=&quot;Reverse_proxy_h2g2bob.svg&quot; data-origin-width=&quot;400&quot; data-origin-height=&quot;150&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;인터넷 &amp;rarr; 도메인(test.jsmun.com)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;localhost:8080&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;도메인(test.jsmun.com)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;rarr;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;인터넷&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;IIS를 사용한 Apach Tomcat 역방향 프록시 설정&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s0Aye/btqLkg40dTx/IPmDq7WCv515qBA3u2Cac0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s0Aye/btqLkg40dTx/IPmDq7WCv515qBA3u2Cac0/img.png&quot; data-alt=&quot;우클릭 - 웹 사이트 추가...&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s0Aye/btqLkg40dTx/IPmDq7WCv515qBA3u2Cac0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs0Aye%2FbtqLkg40dTx%2FIPmDq7WCv515qBA3u2Cac0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;우클릭 - 웹 사이트 추가...&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;534&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cd10RC/btqLf5XoGTE/GQz6YRA7wdykSTM3EDBfUK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cd10RC/btqLf5XoGTE/GQz6YRA7wdykSTM3EDBfUK/img.png&quot; data-alt=&quot;실제 경로는 관련 설정과 연관이 전혀 없기에 iis 기본 페이지 삽입했습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cd10RC/btqLf5XoGTE/GQz6YRA7wdykSTM3EDBfUK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcd10RC%2FbtqLf5XoGTE%2FGQz6YRA7wdykSTM3EDBfUK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;534&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;실제 경로는 관련 설정과 연관이 전혀 없기에 iis 기본 페이지 삽입했습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.1162%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사이트 이름&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.8838%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;사이트 이름&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.1162%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;실제 경로&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.8838%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;iis에서 동작하는 임의 페이지 경로&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.1162%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;포트&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.8838%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;실제 접속할 경우 사용할 포트&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 30.1162%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;호스트 이름&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 69.8838%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;실제 접속할 경우 사용할 도메인&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/r6tGX/btqLhQFG8YI/FHMcI627EKZnmzXcinOgqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/r6tGX/btqLhQFG8YI/FHMcI627EKZnmzXcinOgqK/img.png&quot; data-alt=&quot;URL 재작성으로 이동&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/r6tGX/btqLhQFG8YI/FHMcI627EKZnmzXcinOgqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fr6tGX%2FbtqLhQFG8YI%2FFHMcI627EKZnmzXcinOgqK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;URL 재작성으로 이동&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oiPCf/btqLf6Wkrir/jCRLQEk1UCOpQt0S4DM2i1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oiPCf/btqLf6Wkrir/jCRLQEk1UCOpQt0S4DM2i1/img.png&quot; data-alt=&quot;규칙 추가&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oiPCf/btqLf6Wkrir/jCRLQEk1UCOpQt0S4DM2i1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoiPCf%2FbtqLf6Wkrir%2FjCRLQEk1UCOpQt0S4DM2i1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;규칙 추가&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfCZtA/btqLepPt6ko/dc3lEfyHQBrjlHKjFONhL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfCZtA/btqLepPt6ko/dc3lEfyHQBrjlHKjFONhL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfCZtA/btqLepPt6ko/dc3lEfyHQBrjlHKjFONhL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfCZtA%2FbtqLepPt6ko%2Fdc3lEfyHQBrjlHKjFONhL1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SlpPH/btqLop7GXgH/crYXqIkXpfGluuwgYaevz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SlpPH/btqLop7GXgH/crYXqIkXpfGluuwgYaevz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SlpPH/btqLop7GXgH/crYXqIkXpfGluuwgYaevz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSlpPH%2FbtqLop7GXgH%2FcrYXqIkXpfGluuwgYaevz0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 57.4419%; text-align: center;&quot;&gt;인바운드 규칙 - HTTP 요청이 전달되면 서버 이름 또는 IP 주소 입력&lt;/td&gt;
&lt;td style=&quot;width: 42.5581%; text-align: center;&quot;&gt;Apach Tomcat에서 서비스중인 타겟 주소&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 57.4419%; text-align: center;&quot;&gt;아웃바운드 규칙 - 시작&lt;/td&gt;
&lt;td style=&quot;width: 42.5581%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Apach Tomcat에서 서비스중인 타겟 주소&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 57.4419%; text-align: center;&quot;&gt;아웃바운드 규칙 - 끝&lt;/td&gt;
&lt;td style=&quot;width: 42.5581%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;실제 접속할 경우 사용할 도메인&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/TNxEC/btqLhQyW788/3eEUKAbKJNjEerNHnbUAKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/TNxEC/btqLhQyW788/3eEUKAbKJNjEerNHnbUAKk/img.png&quot; data-alt=&quot;위 세팅이 끝나면 해당 도메인으로 접속이 가능합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/TNxEC/btqLhQyW788/3eEUKAbKJNjEerNHnbUAKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FTNxEC%2FbtqLhQyW788%2F3eEUKAbKJNjEerNHnbUAKk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위 세팅이 끝나면 해당 도메인으로 접속이 가능합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Web</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/71</guid>
      <comments>https://virtualgiraffe.tistory.com/71#entry71comment</comments>
      <pubDate>Tue, 20 Oct 2020 12:03:57 +0900</pubDate>
    </item>
    <item>
      <title>[ASP.Net Core API] API 주소 설정</title>
      <link>https://virtualgiraffe.tistory.com/69</link>
      <description>&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;Controller 주소 및 &lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;API 주소&lt;/span&gt; 일괄 설정 - Controller Class 상단에 표기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;ControllerClass 명칭 과 API함수 명칭을 자동으로 주소로 사용 : [Route(&quot;&lt;span style=&quot;color: #009a87;&quot;&gt;[controller]&lt;/span&gt;/&lt;span style=&quot;color: #006dd7;&quot;&gt;[action]&lt;/span&gt;&quot;)]&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;
&lt;ul style=&quot;list-style-type: circle;&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Ex) &lt;span style=&quot;color: #009a87;&quot;&gt;sample&lt;/span&gt;/&lt;span style=&quot;color: #006dd7;&quot;&gt;member&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&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;pre id=&quot;code_1600393826322&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Route(&quot;[controller]/[action]&quot;)]
[ApiController]
public class sampleController : ControllerBase
{
    //// GET: sample/member
    [HttpGet]
    public string member()
    {
        return &quot;Virtualgiraffe&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;Controller 주소&lt;/span&gt;&lt;/b&gt; 설정 - Controller Class 상단에 표기
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;Controller Class 명칭을 주소에 포함 : [Route(&quot;&lt;span style=&quot;color: #009a87;&quot;&gt;[controller]&lt;/span&gt;&quot;)]&lt;br /&gt;
&lt;ul style=&quot;list-style-type: circle;&quot;&gt;
&lt;li&gt;Ex) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;sample&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;/span&gt;&lt;/b&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;pre id=&quot;code_1600394292978&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Route(&quot;[controller]&quot;)]
[ApiController]
public class sampleController : ControllerBase
{
    //// GET: sample
    [HttpGet]
    public string member()
    {
        return &quot;Virtualgiraffe&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;ul style=&quot;list-style-type: circle;&quot;&gt;
&lt;li&gt;&amp;nbsp;지정한 명칭을 주소에 포함 : [Route(&quot;api/&quot;)]
&lt;ul style=&quot;list-style-type: circle;&quot;&gt;
&lt;li&gt;Ex) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;api/&lt;span style=&quot;color: #006dd7;&quot;&gt;member&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;/span&gt;&lt;/b&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;pre id=&quot;code_1600404118532&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Route(&quot;api/&quot;)]
[ApiController]
public class sampleController : ControllerBase
{
    //// GET: api/member
    [Route(&quot;[action]&quot;)]
    [HttpGet]
    public string member()
    {
        return &quot;Virtualgiraffe&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;지정한 명칭과 Coltroller Class 명칭을 주소에 포함 : [Route(&quot;api/&lt;span style=&quot;color: #009a87;&quot;&gt;[controller]&lt;/span&gt;&quot;)]
&lt;ul style=&quot;list-style-type: circle;&quot;&gt;
&lt;li&gt;Ex) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;api/sample/&lt;span style=&quot;color: #006dd7;&quot;&gt;member&lt;/span&gt;&lt;/span&gt;&lt;/b&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;pre id=&quot;code_1600404270897&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Route(&quot;api/[controller]&quot;)]
[ApiController]
public class sampleController : ControllerBase
{
    //// GET: api/sample/member
    [Route(&quot;[action]&quot;)]
    [HttpGet]
    public string member()
    {
        return &quot;Virtualgiraffe&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;API 주소&lt;/span&gt;&lt;/b&gt; 설정 - API 함수 상단에 표기
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;API 함수 주소 표기&lt;/span&gt; : [Route(&quot;member&quot;)]
&lt;ul style=&quot;list-style-type: circle;&quot;&gt;
&lt;li&gt;Ex) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;api&lt;/span&gt;/&lt;span style=&quot;color: #006dd7;&quot;&gt;member&lt;/span&gt;&lt;/b&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;pre id=&quot;code_1600404354159&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Route(&quot;[controller]&quot;)]
[ApiController]
public class sampleController : ControllerBase
{
    //// GET: sample/member
    [Route(&quot;member&quot;)]
    [HttpGet]
    public string member()
    {
        return &quot;Virtualgiraffe&quot;;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;</description>
      <category>Microsoft .NET/ASP.Net &amp;amp; ASP.Net Core</category>
      <category>API</category>
      <category>ASP.NET Core</category>
      <category>주소</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/69</guid>
      <comments>https://virtualgiraffe.tistory.com/69#entry69comment</comments>
      <pubDate>Thu, 17 Sep 2020 22:29:32 +0900</pubDate>
    </item>
    <item>
      <title>[ASP.Net Core API] 프로젝트 생성 및 기본 세팅</title>
      <link>https://virtualgiraffe.tistory.com/68</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;추천 게시물&lt;span style=&quot;font-size: 16px; letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a href=&quot;https://virtualgiraffe.tistory.com/67&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;span style=&quot;font-size: 16px; letter-spacing: 0px;&quot;&gt;REST API와 RESTful 및 CRUD개념&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 프로젝트 생성&lt;/b&gt;&lt;/h4&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 style=&quot;text-align: center;&quot;&gt;&lt;b&gt;프레임워크 : ASP.NET Core 2.1&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;b&gt;(Docker 사용 시에 2.1 버전 권장)&lt;/b&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvCxTn/btqITuj3GZp/kvqp4xgt6RBkW17J1SMsb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvCxTn/btqITuj3GZp/kvqp4xgt6RBkW17J1SMsb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvCxTn/btqITuj3GZp/kvqp4xgt6RBkW17J1SMsb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvCxTn%2FbtqITuj3GZp%2Fkvqp4xgt6RBkW17J1SMsb1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;hr style=&quot;margin: 20px auto 0px; border: none; cursor: pointer !important; z-index: 1; font-size: 0px; line-height: 0; background: url('../image/divider-line.svg') center -144px / 200px 420px no-repeat; width: 2px; height: 60px; padding: 0px 51px;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Cm4se/btqIRZd25dc/p6lpeWpNkV7jHvAZuUTq4k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Cm4se/btqIRZd25dc/p6lpeWpNkV7jHvAZuUTq4k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Cm4se/btqIRZd25dc/p6lpeWpNkV7jHvAZuUTq4k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCm4se%2FbtqIRZd25dc%2Fp6lpeWpNkV7jHvAZuUTq4k%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;hr style=&quot;margin: 20px auto 0px; border: none; cursor: pointer !important; z-index: 1; font-size: 0px; line-height: 0; background: url('../image/divider-line.svg') center -144px / 200px 420px no-repeat; width: 2px; height: 60px; padding: 0px 51px;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA0zde/btqITtyIrJ0/0CjKj8SZko9RmwjzeklVt0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA0zde/btqITtyIrJ0/0CjKj8SZko9RmwjzeklVt0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA0zde/btqITtyIrJ0/0CjKj8SZko9RmwjzeklVt0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA0zde%2FbtqITtyIrJ0%2F0CjKj8SZko9RmwjzeklVt0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 컨트롤러 생성 및 호출&lt;/b&gt;&lt;/h4&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 style=&quot;text-align: center;&quot;&gt;Proejct - Cotrollers 폴더 우클릭 - 추가 - 컨트롤러&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfk9v5/btqIZnktvWQ/bCEXAC3hfO1axcefF9TOQK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfk9v5/btqIZnktvWQ/bCEXAC3hfO1axcefF9TOQK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfk9v5/btqIZnktvWQ/bCEXAC3hfO1axcefF9TOQK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbfk9v5%2FbtqIZnktvWQ%2FbCEXAC3hfO1axcefF9TOQK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dmU7u1/btqIPRmTmfO/n0skNmypXFlpKPwl0VvQ80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dmU7u1/btqIPRmTmfO/n0skNmypXFlpKPwl0VvQ80/img.png&quot; data-alt=&quot;RESTful 조건에 만족하기 위해 컨트롤러 명칭은 소문자로 작성을 권장.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dmU7u1/btqIPRmTmfO/n0skNmypXFlpKPwl0VvQ80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdmU7u1%2FbtqIPRmTmfO%2Fn0skNmypXFlpKPwl0VvQ80%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;RESTful 조건에 만족하기 위해 컨트롤러 명칭은 소문자로 작성을 권장.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;빌드 - &quot;host + /api/sample&quot;로 접속&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bUdDyJ/btqIX3fDsUR/E7JY46ZQMvcd5lgMHjZEZ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bUdDyJ/btqIX3fDsUR/E7JY46ZQMvcd5lgMHjZEZ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bUdDyJ/btqIX3fDsUR/E7JY46ZQMvcd5lgMHjZEZ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbUdDyJ%2FbtqIX3fDsUR%2FE7JY46ZQMvcd5lgMHjZEZ1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. API 생성&lt;/b&gt;&lt;/h4&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 style=&quot;text-align: center;&quot;&gt;&lt;b&gt;생성된 Controller(sampleController)에 함수를 정의&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1600333010578&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public string GetMember()
{
    return &quot;Virtualgiraffe&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;메소드(Method) (HttpPost, HttpGet, HttpPut, HttpDelete) 중 선택 입력&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1600333042297&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[HttpGet]
public string GetMember()
{
    return &quot;Virtualgiraffe&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;경로(Route)를 설정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1600333134559&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[Route(&quot;member&quot;)]
[HttpGet]
public string GetMember()
{
    return &quot;Virtualgiraffe&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;b&gt;결과 확인&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;{HOST}&lt;/span&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;/api/sample&lt;/span&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;/member&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #f89009;&quot;&gt;호스트 경로&lt;span style=&quot;color: #000000;&quot;&gt; / &lt;span style=&quot;color: #009a87;&quot;&gt;컨트롤 경로&lt;/span&gt; / &lt;span style=&quot;color: #8a3db6;&quot;&gt;API 경로&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;122&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wqc5j/btqIWQ2qObg/KJcbcXLUmKSg0q0gQtqxik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wqc5j/btqIWQ2qObg/KJcbcXLUmKSg0q0gQtqxik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wqc5j/btqIWQ2qObg/KJcbcXLUmKSg0q0gQtqxik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwqc5j%2FbtqIWQ2qObg%2FKJcbcXLUmKSg0q0gQtqxik%2Fimg.png&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;122&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. &lt;a href=&quot;https://virtualgiraffe.tistory.com/69&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;API 주소 설정&lt;/a&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5. &lt;a href=&quot;https://virtualgiraffe.tistory.com/59&quot;&gt;Swagger 연동&lt;/a&gt; (선택)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Swagger : 라이브러리를 연결하여 서비스 작동 시에 Swagger 페이지에 Controller 단위로 API 정보를 표시하며, API 동작 테스트를 진행할 수 있다.&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;506&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVVBox/btqI1KNiuaZ/ZX6Ll3pbm92wzKHZHMWuJ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVVBox/btqI1KNiuaZ/ZX6Ll3pbm92wzKHZHMWuJ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVVBox/btqI1KNiuaZ/ZX6Ll3pbm92wzKHZHMWuJ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVVBox%2FbtqI1KNiuaZ%2FZX6Ll3pbm92wzKHZHMWuJ0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;506&quot; height=&quot;NaN&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;6. &lt;a href=&quot;https://virtualgiraffe.tistory.com/55&quot;&gt;Synology Nas Docker에 ASP.Net Core 게시하기&lt;/a&gt; (선택)&lt;/b&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Synology Nas : Synology 사의 OS가 탑재된 서버 컴퓨터&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Docker : OS 위에서 가상으로 특정 서비스를 구동하도록 도와주는 프로그램&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Microsoft .NET/ASP.Net &amp;amp; ASP.Net Core</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/68</guid>
      <comments>https://virtualgiraffe.tistory.com/68#entry68comment</comments>
      <pubDate>Wed, 16 Sep 2020 21:16:13 +0900</pubDate>
    </item>
    <item>
      <title>[ASP.Net Core API] REST API와 RESTful 및 CRUD개념</title>
      <link>https://virtualgiraffe.tistory.com/67</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;RESTful이란?&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;'REST API'를 제공하는 서비스를 'RESTful'한 API라고 말할 수 있으며,&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;REST 규칙을 따르는 서비스를 'RESTful'이라 칭한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&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: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;CRUD란?&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Create, Read, Update, Delete 4개의 기능을 칭하는 용어다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;이름&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;SQL&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;조작&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;METHOD&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;C&lt;/span&gt;reate&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;INSERT&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;생성&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;POST&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;R&lt;/span&gt;ead&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;SELECT&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;읽기&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;GET&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;U&lt;/span&gt;pdate&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;UPDATE&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;갱신&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;PUT&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;D&lt;/span&gt;elete&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;DELETE&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;b&gt;삭제&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 25%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;&lt;b&gt;DELETE&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&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: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;REST API&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;RE&lt;span style=&quot;color: #9d9d9d;&quot;&gt;presentational&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;S&lt;span style=&quot;color: #9d9d9d;&quot;&gt;tate&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;T&lt;span style=&quot;color: #9d9d9d;&quot;&gt;ransfer&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;API&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;나타낸 + 상태 + 전달 = 전달 상태를 나타낸 API&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;REST API는 API의 전달 규칙을 칭한다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;REST API 구성&lt;/b&gt;&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;자원(resource) - &lt;span style=&quot;color: #006dd7;&quot;&gt;URI&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;행위(verb) - &lt;span style=&quot;color: #009a87;&quot;&gt;METHOD&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;표현(representation)&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;GET&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;/sample/member&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h3 style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;REST API 설계 규칙&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;URI는 정보의 자원을 표현해야 하며 명사로 표기하며 행위는 URI로 표기하지 않음.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ex) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;POST&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;/sample/member/delete&lt;/span&gt;&lt;/b&gt; (X)&lt;/li&gt;
&lt;li&gt;EX) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;DELETE&lt;/span&gt;&amp;nbsp; &lt;span style=&quot;color: #006dd7;&quot;&gt;/sample/member&lt;/span&gt;&lt;/b&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; (O)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;행위는 반드시 Method( POST, GET, PUT, DELETE )로 표현.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ex) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;POST&lt;/span&gt;&amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;/sample/member&lt;/span&gt;&lt;/b&gt;&amp;nbsp; (회원 생성)&lt;/li&gt;
&lt;li&gt;Ex) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;GET&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;/sample/member&lt;/span&gt;&lt;/b&gt;&amp;nbsp; (회원 목록)&lt;/li&gt;
&lt;li&gt;Ex) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;PUT&lt;/span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;/sample/member&lt;/span&gt;&lt;/b&gt;&amp;nbsp; (회원 정보 수정)&lt;/li&gt;
&lt;li&gt;Ex) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;DELETE&lt;/span&gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;/sample/member&lt;/span&gt;&lt;/b&gt;&amp;nbsp; (회원 탈퇴)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;슬래시 구분자( / )는 계층 관계를 나타내는데 사용.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Ex) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;GET&lt;/span&gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;/sample/member&lt;/span&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;URI 마지막 문자로 슬래시( / )를 포함하지 않음.&lt;/span&gt;&lt;br /&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;letter-spacing: 0px;&quot;&gt;Ex) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;GET&lt;/span&gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;/sample/member/&lt;/span&gt;&lt;/b&gt; (X)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;Ex) &lt;b&gt;&lt;span style=&quot;color: #009a87;&quot;&gt;GET&lt;/span&gt; &lt;span style=&quot;color: #006dd7;&quot;&gt;/sample/member&lt;/span&gt;&lt;/b&gt;&amp;nbsp; (O)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;하이픈( - )은 URI 가독성을 높이는데 사용.&lt;/span&gt;&lt;br /&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;letter-spacing: 0px;&quot;&gt;밑줄( _ )은 폰트나 특정 상황에서 가려지는 경우가 있어 하이픈(-)을 사용한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;밑줄( _ )은 URI에 사용하지 않음&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;URI 경로에는 소문자가 적합하다.&lt;/span&gt;&lt;br /&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;URI는 대소문자를 구분하기 때문에 소문자만 사용한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;URI에는 파일확장자를 포함하지 않음.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;/sample/virtualgiraffe-t.ico&lt;/span&gt;&lt;/b&gt; (X)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;/sample/virtualgiraffe-t&lt;/b&gt;&lt;/span&gt; &amp;nbsp; &amp;nbsp; &amp;nbsp;(O)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Microsoft .NET/ASP.Net &amp;amp; ASP.Net Core</category>
      <category>API</category>
      <category>crud</category>
      <category>RESTful</category>
      <category>restful api</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/67</guid>
      <comments>https://virtualgiraffe.tistory.com/67#entry67comment</comments>
      <pubDate>Wed, 16 Sep 2020 17:28:51 +0900</pubDate>
    </item>
    <item>
      <title>[C#] ColorDialog (색상 선택 컨트롤, 다이얼로그)</title>
      <link>https://virtualgiraffe.tistory.com/66</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dWYq96/btqFC95pBBk/9lMpwb4OY9fjVzD9OUiMYk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dWYq96/btqFC95pBBk/9lMpwb4OY9fjVzD9OUiMYk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWYq96/btqFC95pBBk/9lMpwb4OY9fjVzD9OUiMYk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdWYq96%2FbtqFC95pBBk%2F9lMpwb4OY9fjVzD9OUiMYk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; data-ke-mobilestyle=&quot;widthContent&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1594720064969&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//색상 선택 다이얼로그
//참조 추가 : System.Windows.Forms
//참조 추가 : System.Drawing
//참조 추가 : System.Windows.Media
using (System.Windows.Forms.ColorDialog colorDialog = new System.Windows.Forms.ColorDialog() { AllowFullOpen = true, FullOpen = true})
{
    if (colorDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        System.Windows.Media.Color color = new System.Windows.Media.Color()
        {
            A = colorDialog.Color.A,
            R = colorDialog.Color.R,
            G = colorDialog.Color.G,
            B = colorDialog.Color.B
        };
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Microsoft .NET/C#</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/66</guid>
      <comments>https://virtualgiraffe.tistory.com/66#entry66comment</comments>
      <pubDate>Tue, 14 Jul 2020 18:49:40 +0900</pubDate>
    </item>
    <item>
      <title>[Database] 문자열 합치기 (CONCAT, GROUP_CONCAT)</title>
      <link>https://virtualgiraffe.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;컬럼 합치기&lt;/p&gt;
&lt;pre id=&quot;code_1594285437169&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT CONCAT(e.email, '@', e.email2) as [E-mail]
FROM userinfo as u , userinfo_mail as e
WHERE u.idx = e.mem_idx;&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;/p&gt;
&lt;pre id=&quot;code_1623910652138&quot; class=&quot;php&quot; data-ke-language=&quot;php&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT GROUP_CONCAT(email) AS mail FROM administrators&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Database</category>
      <category>Concat</category>
      <category>문자열 합치기</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/65</guid>
      <comments>https://virtualgiraffe.tistory.com/65#entry65comment</comments>
      <pubDate>Thu, 9 Jul 2020 18:04:29 +0900</pubDate>
    </item>
    <item>
      <title>[ASP.Net Core - API] Swagger remarks입력</title>
      <link>https://virtualgiraffe.tistory.com/60</link>
      <description>&lt;p&gt;아래 함수 앞에 remarks를 입력할 경우 Swagger에서 아래와 같이 표출된다.&lt;/p&gt;
&lt;pre id=&quot;code_1584346602593&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/// &amp;lt;remarks&amp;gt;
/// Sample request:
///
///     POST /Todo
///     {
///        &quot;id&quot;: 1,
///        &quot;name&quot;: &quot;Item1&quot;,
///        &quot;isComplete&quot;: true
///     }
///
/// &amp;lt;/remarks&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZrXco/btqCKgePrf6/7hNvVwNGbUiHhgM60E7ndk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZrXco/btqCKgePrf6/7hNvVwNGbUiHhgM60E7ndk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZrXco/btqCKgePrf6/7hNvVwNGbUiHhgM60E7ndk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZrXco%2FbtqCKgePrf6%2F7hNvVwNGbUiHhgM60E7ndk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Microsoft .NET/ASP.Net &amp;amp; ASP.Net Core</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/60</guid>
      <comments>https://virtualgiraffe.tistory.com/60#entry60comment</comments>
      <pubDate>Mon, 16 Mar 2020 17:20:19 +0900</pubDate>
    </item>
    <item>
      <title>[ASP.Net Core / Blazor]  Swagger 연동</title>
      <link>https://virtualgiraffe.tistory.com/59</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/bmBNhN/btqCID2DPJJ/v2aWqJeXEgOb5F2gk9wlS1/aspnetcore_swagger_sample.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;aspnetcore_swagger_sample.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.14MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;ASP.Net Core에서 Swagger 사용하기 - &lt;span style=&quot;background-color: #fafafa;&quot;&gt;nuget에서&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Swashbuckle.AspNetCore&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;설치&lt;/span&gt;&lt;/p&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 style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;프로젝트 속성 - 빌드 - XML 문서 파일 항목 체크(summary값 xml로 출력)&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthContent&quot; data-origin-width=&quot;803&quot; data-origin-height=&quot;635&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dssfLp/btqCJmsM7tl/w8wqXRSOv3k2ebsHa4HNA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dssfLp/btqCJmsM7tl/w8wqXRSOv3k2ebsHa4HNA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dssfLp/btqCJmsM7tl/w8wqXRSOv3k2ebsHa4HNA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdssfLp%2FbtqCJmsM7tl%2Fw8wqXRSOv3k2ebsHa4HNA0%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;512&quot; height=&quot;405&quot; data-origin-width=&quot;803&quot; data-origin-height=&quot;635&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Startup.cs의 ConfigureServices 함수에 &quot;#region Create Swagger Document&quot; 붙여넣기&lt;/p&gt;
&lt;pre id=&quot;code_1647840245875&quot; class=&quot;awk&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void ConfigureServices(IServiceCollection services)
{
    services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
////////////////////////////////////////////////////////////////////////
    #region Create Swagger Document
    //스웨거 문서정보 생성.
    services.AddSwaggerGen(o =&amp;gt;
    {
        o.SwaggerDoc(&quot;v1&quot;
            , new Microsoft.OpenApi.Models.OpenApiInfo()
            {
                Title = &quot;aspnetcore_swagger_sample&quot;,
                Description = &quot;swagger 사용을 위한 예제&quot;,
                Version=&quot;V1&quot;,
                License = new Microsoft.OpenApi.Models.OpenApiLicense() 
                { 
                    Name=&quot;virtualgiraffe.tistory.com&quot;, 
                    Url= new Uri(&quot;http://virtualgiraffe.tistory.com&quot;)
                }
            });
         //애플리케이션의 기본 경로
         var xmlFile = $&quot;{System.Reflection.Assembly.GetExecutingAssembly().GetName().Name}.xml&quot;;
         var xmlPath = System.IO.Path.Combine(AppContext.BaseDirectory, xmlFile);
         //xml 경로
         o.IncludeXmlComments(xmlPath, includeControllerXmlComments: true);
    });
    #endregion
////////////////////////////////////////////////////////////////////////
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;Startup.cs의 Configure함수에 &quot;#region Swagger UI&quot; 붙여넣기&lt;/p&gt;
&lt;pre id=&quot;code_1647840245877&quot; class=&quot;livescript&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
////////////////////////////////////////////////////////////////////////
    #region Swagger UI
    //스웨거 미들웨어 설정
    app.UseSwagger();

    //스웨거 UI 활성화
    app.UseSwaggerUI(c =&amp;gt;
    {
        c.SwaggerEndpoint(&quot;/swagger/v1/swagger.json&quot;, &quot;My API V1&quot;);

        //접속 경로 / 미입력 시 swagger
        //c.RoutePrefix = &quot;swagger-sample&quot;;
    });
    #endregion
////////////////////////////////////////////////////////////////////////
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
    }
    else
    {
        app.UseHsts();
    }

    app.UseHttpsRedirection();
    app.UseMvc();
}&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;host/[c.RoutePrefix 값] 으로 접근&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(&lt;a href=&quot;https://localhost:44314/swagger-sample&quot;&gt;https://localhost:44314/swagger-sample&lt;/a&gt;)&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&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: center;&quot; data-ke-size=&quot;size16&quot;&gt;Blazor에서 Swagger 사용하기 - &lt;span&gt;nuget에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Swashbuckle.AspNetCore&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;설치&lt;/span&gt;&lt;/p&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;Program.cs - &lt;/span&gt;line 9에 아래 내용 추가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;// &lt;b&gt;Swagger&lt;/b&gt;&lt;/b&gt;&lt;br /&gt;&lt;b&gt;builder.Services.AddSwaggerGen();&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;Program.cs -&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa;&quot;&gt;line 33에 아래 내용 추가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;app.UseSwagger(); &lt;br /&gt;app.UseSwaggerUI(c&amp;nbsp;=&amp;gt; &lt;br /&gt;{ &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;c.SwaggerEndpoint(&quot;/swagger/v1/swagger.json&quot;,&amp;nbsp;&quot;Blazor&amp;nbsp;API&amp;nbsp;V1&quot;); &lt;br /&gt;});&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1647840335636&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using Microsoft.AspNetCore.ResponseCompression;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.

builder.Services.AddControllersWithViews();
builder.Services.AddRazorPages();

#region Swagger - 1
builder.Services.AddSwaggerGen();
#endregion

var app = builder.Build();

// Configure the HTTP request pipeline.
if (app.Environment.IsDevelopment())
{
    app.UseWebAssemblyDebugging();
}
else
{
    app.UseExceptionHandler(&quot;/Error&quot;);
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
}

app.UseHttpsRedirection();

app.UseBlazorFrameworkFiles();
app.UseStaticFiles();

#region Swagger - 2
app.UseSwagger();
app.UseSwaggerUI(c =&amp;gt;
{
    c.SwaggerEndpoint(&quot;/swagger/v1/swagger.json&quot;, &quot;Blazor API V1&quot;);
});
#endregion

app.UseRouting();


app.MapRazorPages();
app.MapControllers();
app.MapFallbackToFile(&quot;index.html&quot;);

app.Run();&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;샘플 코드&lt;/h4&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>Microsoft .NET/ASP.Net &amp;amp; ASP.Net Core</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/59</guid>
      <comments>https://virtualgiraffe.tistory.com/59#entry59comment</comments>
      <pubDate>Mon, 16 Mar 2020 11:01:54 +0900</pubDate>
    </item>
    <item>
      <title>[C#] OpenFileDialog, SaveFileDialog, CommonOpenFileDialog, ColorDialog</title>
      <link>https://virtualgiraffe.tistory.com/58</link>
      <description>&lt;pre id=&quot;code_1583833386584&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//폴더 경로 불러오기 - CommonOpenFileDialog
var cofd = new Microsoft.WindowsAPICodePack.Dialogs.CommonOpenFileDialog()
{
	IsFolderPicker = true
};

if (cofd.ShowDialog() == Microsoft.WindowsAPICodePack.Dialogs.CommonFileDialogResult.Ok)
{
}



//파일 경로 불러오기 - OpenFileDialog
Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog() 
{ 
  Filter = &quot;Png Files (*.png)|*.png| All Files(*.*)| *.*&quot;, //필터
  DefaultExt = &quot;png&quot;, // 기본 확장자
  Multiselect = true //다중 선택 허용
};

if (ofd.ShowDialog() == true)
{
}



//파일 저장 경로 불러오기 - SaveFileDialog
Microsoft.Win32.SaveFileDialog sfd = new Microsoft.Win32.SaveFileDialog() 
{ 
  Filter = &quot;Png Files (*.png)|*.png| All Files(*.*)| *.*&quot;, //필터
  DefaultExt = &quot;png&quot; // 기본 확장자
};

if (sfd.ShowDialog() == true)
{
}



//색상 선택 다이얼로그
//참조 추가 : System.Windows.Forms
//참조 추가 : System.Drawing
//참조 추가 : System.Windows.Media
using (System.Windows.Forms.ColorDialog colorDialog = new System.Windows.Forms.ColorDialog() { AllowFullOpen = true, FullOpen = true})
{
    if (colorDialog.ShowDialog() == System.Windows.Forms.DialogResult.OK)
    {
        System.Windows.Media.Color color = new System.Windows.Media.Color()
        {
            A = colorDialog.Color.A,
            R = colorDialog.Color.R,
            G = colorDialog.Color.G,
            B = colorDialog.Color.B
        };
    }
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Microsoft .NET/C#</category>
      <category>COLOR</category>
      <category>picker</category>
      <category>다이얼로그</category>
      <category>색상 선택</category>
      <category>컬러 픽커</category>
      <category>파일 경로</category>
      <category>파일 선택</category>
      <category>파일 저장</category>
      <category>폴더 선택</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/58</guid>
      <comments>https://virtualgiraffe.tistory.com/58#entry58comment</comments>
      <pubDate>Tue, 10 Mar 2020 18:50:13 +0900</pubDate>
    </item>
    <item>
      <title>[Software] 프로그램 유지기</title>
      <link>https://virtualgiraffe.tistory.com/57</link>
      <description>&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/d9synR/btqB1GqwTM1/xYZ1KBoHcdY1Y3oXwNKsr1/ProgramRetainer%20Ver1.0.7349.31317.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;ProgramRetainer Ver1.0.7349.31317.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.01MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;본 소프트웨어는 선택된 프로그램이 컴퓨터에서 종료될 경우&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;프로그램을 재실행하여 프로그램이 항시 작동할 수 있도록 지원합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&lt;span&gt;1) &lt;span style=&quot;color: #333333;&quot;&gt;본 소프트웨어는&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;상업적인 목적&lt;/span&gt;&lt;/b&gt;으로&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;사용하고자 하는 경우, &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;사전에 승인&lt;/span&gt;&lt;/b&gt;을 받아야 합니다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;2) &lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;비상업적인 목적&lt;/span&gt;&lt;/b&gt;으로&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;사용하고자 하는 경우, &lt;b&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;누구나 무상&lt;/span&gt;&lt;/b&gt;으로&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span&gt;사용할 수 있습니다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;3)&lt;span&gt; Virtualgiraffe&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;패키지의 사용에 따른 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;책임은 사용자에게 있습니다.&lt;/b&gt;&lt;/span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;당사는 &lt;/span&gt;사용자가&lt;span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;Virtualgiraffe&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;패키지의 사용으로 인하여 발생한 데이터의 손실이나 손해 등에 법적인 책임이 없습니다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;5) 당사는&lt;span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;Virtualgiraffe&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;라이선스 정책을 사전 예고 없이 변경할 수 있으며, 갱신된 라이선스 정책이 이전 라이선스 정책에 우선하여 적용됩니다.&lt;/span&gt;&lt;br /&gt;&lt;span&gt;6) 상기 라이선스에 동의하지 않는 경우&lt;span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;Virtualgiraffe&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;패키지를 사용할 수 없습니다.&lt;span&gt; &lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;Virtualgiraffe&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;패키지를 사용하는 경우 &lt;span style=&quot;color: #333333;&quot;&gt;&lt;span&gt;Virtualgiraffe가&lt;/span&gt;&lt;/span&gt;&amp;nbsp;제공하는 본 라이선스 &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;정책에 동의한 것으로 간주&lt;/span&gt;&lt;/b&gt;됩니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Virtualgiraffe Software</category>
      <category>실행</category>
      <category>유지</category>
      <category>프로그램</category>
      <category>프로그램 자동 실행</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/57</guid>
      <comments>https://virtualgiraffe.tistory.com/57#entry57comment</comments>
      <pubDate>Fri, 14 Feb 2020 17:52:35 +0900</pubDate>
    </item>
    <item>
      <title>[Database] UTC 시간 기준으로 쿼리 값 입력하기</title>
      <link>https://virtualgiraffe.tistory.com/56</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span&gt;update&amp;nbsp;CB_MEMBER&amp;nbsp;set&amp;nbsp;visitdate&amp;nbsp;=&amp;nbsp;&lt;span style=&quot;color: #ee2323;&quot;&gt;convert(datetime, getutcdate() + '9:00:00')&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;UTC 시간 : getutcdate()&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;한국 시간 : &lt;span style=&quot;color: #333333;&quot;&gt;convert(datetime, getutcdate() + '9:00:00')&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Database</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/56</guid>
      <comments>https://virtualgiraffe.tistory.com/56#entry56comment</comments>
      <pubDate>Mon, 3 Feb 2020 14:45:07 +0900</pubDate>
    </item>
    <item>
      <title>[ASP.Net Core] Synology Nas Docker에 ASP.Net Core 게시하기</title>
      <link>https://virtualgiraffe.tistory.com/55</link>
      <description>&lt;p style=&quot;text-align: left;&quot;&gt;준비물 : SynologyNas, &lt;a href=&quot;https://the.earth.li/~sgtatham/putty/latest/w32/putty-0.73-installer.msi&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;putty&lt;/a&gt;, &lt;a href=&quot;https://visualstudio.microsoft.com/ko/thank-you-downloading-visual-studio/?sku=Community&amp;amp;rel=16&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;VisualStudio&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;1. ASP.Net Core 프로젝트 생성 [설정값 : ASP.NetCore 2.0, MVC, docker:Linux]&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;2. Dockerfile 값 변경&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;3. 프로젝트 게시&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;4. Synology Nas에 게시된 파일 업로드 및 &lt;span style=&quot;color: #333333;&quot;&gt;Docker 설치&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;5. putty를 사용하여 SynologyNas에 설치&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;1. ASP.Net Core 프로젝트 생성 [설정값 : ASP.NetCore 2.0, MVC, docker:Linux]&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;616&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bAb0dD/btqBzkb0VXn/jDPFZEtRwYcN8WM95p0gd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bAb0dD/btqBzkb0VXn/jDPFZEtRwYcN8WM95p0gd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bAb0dD/btqBzkb0VXn/jDPFZEtRwYcN8WM95p0gd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbAb0dD%2FbtqBzkb0VXn%2FjDPFZEtRwYcN8WM95p0gd0%2Fimg.png&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;616&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;616&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cUhLLU/btqBxAfloHh/k0OlX204GqoXzvlLtys31k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cUhLLU/btqBxAfloHh/k0OlX204GqoXzvlLtys31k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cUhLLU/btqBxAfloHh/k0OlX204GqoXzvlLtys31k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcUhLLU%2FbtqBxAfloHh%2Fk0OlX204GqoXzvlLtys31k%2Fimg.png&quot; data-origin-width=&quot;982&quot; data-origin-height=&quot;616&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;프로젝트 생성3.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;711&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ba35f/btqBzPiuq89/LDfCKUtBHEu6bzdqUN9z51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ba35f/btqBzPiuq89/LDfCKUtBHEu6bzdqUN9z51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ba35f/btqBzPiuq89/LDfCKUtBHEu6bzdqUN9z51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBa35f%2FbtqBzPiuq89%2FLDfCKUtBHEu6bzdqUN9z51%2Fimg.png&quot; data-filename=&quot;프로젝트 생성3.png&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;711&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;2. Dockerfile 값 변경&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oH92m/btqBxAflzWg/NuygPSbB41CCE2gO8KqVhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oH92m/btqBxAflzWg/NuygPSbB41CCE2gO8KqVhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oH92m/btqBxAflzWg/NuygPSbB41CCE2gO8KqVhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoH92m%2FbtqBxAflzWg%2FNuygPSbB41CCE2gO8KqVhk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p9XSW/btqBCUpbDyz/szMCK8RVjE1e9nWzSp8XHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p9XSW/btqBCUpbDyz/szMCK8RVjE1e9nWzSp8XHK/img.png&quot; data-alt=&quot;기존 Dockerfile의 내용을 모두 삭제하고 아래 내용으로 변경합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p9XSW/btqBCUpbDyz/szMCK8RVjE1e9nWzSp8XHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp9XSW%2FbtqBCUpbDyz%2FszMCK8RVjE1e9nWzSp8XHK%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기존 Dockerfile의 내용을 모두 삭제하고 아래 내용으로 변경합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ruI2b/btqBzQBJAXl/xnoyakqov4UyHQjWh2Gzb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ruI2b/btqBzQBJAXl/xnoyakqov4UyHQjWh2Gzb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ruI2b/btqBzQBJAXl/xnoyakqov4UyHQjWh2Gzb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FruI2b%2FbtqBzQBJAXl%2Fxnoyakqov4UyHQjWh2Gzb0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;FROM microsoft/aspnetcore:2.0.0&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;COPY . /app&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;WORKDIR /app&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;#7552&amp;nbsp;=&amp;nbsp;포트번호!!&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;ENV ASPNETCORE_URLS http://*:7552&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;EXPOSE&amp;nbsp;7552&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;br /&gt;#sample&amp;nbsp;=&amp;nbsp;프로젝트&amp;nbsp;명&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;br /&gt;ENTRYPOINT&amp;nbsp;[&quot;dotnet&quot;,&amp;nbsp;&quot;&lt;a href=&quot;sample.dll&quot;&gt;sample.dll&lt;/a&gt;&quot;]&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;3. 프로젝트 게시&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIu1QM/btqBzj5i74L/5VgdgoaQmpIKwtw1AKYvh1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIu1QM/btqBzj5i74L/5VgdgoaQmpIKwtw1AKYvh1/img.png&quot; data-alt=&quot;프로젝트 우클릭 - 게시&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIu1QM/btqBzj5i74L/5VgdgoaQmpIKwtw1AKYvh1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIu1QM%2FbtqBzj5i74L%2F5VgdgoaQmpIKwtw1AKYvh1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;프로젝트 우클릭 - 게시&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/y0Pb3/btqBCmGgbo1/ZMkLkp20fodjFqPA9paGrk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/y0Pb3/btqBCmGgbo1/ZMkLkp20fodjFqPA9paGrk/img.png&quot; data-alt=&quot;IIS, FTP, 웹 배포 프로필 만들기&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/y0Pb3/btqBCmGgbo1/ZMkLkp20fodjFqPA9paGrk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fy0Pb3%2FbtqBCmGgbo1%2FZMkLkp20fodjFqPA9paGrk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;IIS, FTP, 웹 배포 프로필 만들기&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qdUDM/btqBAWBuTxs/fywsKGnjuPKSuLb4HtCEG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qdUDM/btqBAWBuTxs/fywsKGnjuPKSuLb4HtCEG1/img.png&quot; data-alt=&quot;대상 위치(게시 파일을 저장할 위치) 설정&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qdUDM/btqBAWBuTxs/fywsKGnjuPKSuLb4HtCEG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqdUDM%2FbtqBAWBuTxs%2FfywsKGnjuPKSuLb4HtCEG1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대상 위치(게시 파일을 저장할 위치) 설정&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cPyT97/btqBBTYC8Xl/rnjFSGr2WEnheidbzA5RW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cPyT97/btqBBTYC8Xl/rnjFSGr2WEnheidbzA5RW0/img.png&quot; data-alt=&quot;대상 프레임워크는 asp.net core 버전을 선택하고 저장&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cPyT97/btqBBTYC8Xl/rnjFSGr2WEnheidbzA5RW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcPyT97%2FbtqBBTYC8Xl%2FrnjFSGr2WEnheidbzA5RW0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;대상 프레임워크는 asp.net core 버전을 선택하고 저장&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b0kbcC/btqBBePrp8A/XU80GLgeEC7iirfgEtS7rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b0kbcC/btqBBePrp8A/XU80GLgeEC7iirfgEtS7rk/img.png&quot; data-alt=&quot;게시 버튼을 누르면 지정한 폴더에 파일이 생성됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b0kbcC/btqBBePrp8A/XU80GLgeEC7iirfgEtS7rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb0kbcC%2FbtqBBePrp8A%2FXU80GLgeEC7iirfgEtS7rk%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;게시 버튼을 누르면 지정한 폴더에 파일이 생성됩니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;4. Synology Nas에 게시된 파일 업로드&lt;/h4&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;게시 후 생성된 파일을 nas의 docker 폴더에 프로젝트명으로 된 폴더를 생성 후 넣어줍니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bU0hcK/btqBzQoemyM/3SK4FOrkxxd5EfkDd3LUb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bU0hcK/btqBzQoemyM/3SK4FOrkxxd5EfkDd3LUb0/img.png&quot; data-alt=&quot;이런 식으로 넣으면 됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bU0hcK/btqBzQoemyM/3SK4FOrkxxd5EfkDd3LUb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbU0hcK%2FbtqBzQoemyM%2F3SK4FOrkxxd5EfkDd3LUb0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이런 식으로 넣으면 됩니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;* 프로젝트 폴더의 &quot;Dockerfile&quot;파일도 해당 폴더로 복사합니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style4&quot; /&gt;
&lt;h4 style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;5. putty를 사용하여 SynologyNas에 설치&lt;/h4&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3rvA6/btqBCnE94G1/xM74OggYeuKtRTNaNHOkY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3rvA6/btqBCnE94G1/xM74OggYeuKtRTNaNHOkY0/img.png&quot; data-alt=&quot;Nas 주소 및 접속 port를 입력하여 접속합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3rvA6/btqBCnE94G1/xM74OggYeuKtRTNaNHOkY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3rvA6%2FbtqBCnE94G1%2FxM74OggYeuKtRTNaNHOkY0%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Nas 주소 및 접속 port를 입력하여 접속합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1614&quot; data-origin-height=&quot;909&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buRLvK/btqBBUJ1set/T5HaDTuIbmkV7FEBftiR30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buRLvK/btqBBUJ1set/T5HaDTuIbmkV7FEBftiR30/img.png&quot; data-alt=&quot;위와 같이 입력하면 docker에 서비스가 생성되며 완료됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buRLvK/btqBBUJ1set/T5HaDTuIbmkV7FEBftiR30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuRLvK%2FbtqBBUJ1set%2FT5HaDTuIbmkV7FEBftiR30%2Fimg.png&quot; data-filename=&quot;1.png&quot; data-origin-width=&quot;1614&quot; data-origin-height=&quot;909&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위와 같이 입력하면 docker에 서비스가 생성되며 완료됩니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Microsoft .NET/ASP.Net &amp;amp; ASP.Net Core</category>
      <category>ASP.NET</category>
      <category>ASP.NET Core</category>
      <category>docker</category>
      <category>synology nas</category>
      <category>게시</category>
      <category>배포</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/55</guid>
      <comments>https://virtualgiraffe.tistory.com/55#entry55comment</comments>
      <pubDate>Wed, 29 Jan 2020 19:02:05 +0900</pubDate>
    </item>
    <item>
      <title>[기타] SwaggerHub를 사용하여 API 관리하기</title>
      <link>https://virtualgiraffe.tistory.com/54</link>
      <description>&lt;h4 style=&quot;text-align: center;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Swagger Hub란?&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;API Document 역할&lt;/b&gt;&lt;/span&gt;을 하며&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;API를 등록하면 해당 &lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;API에 대한 작동 테스트가 가능&lt;/b&gt;&lt;/span&gt;하며&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;[입력 값]이나 [입력 필수 값]을 지정 가능하며&lt;/b&gt;&lt;/span&gt; API 작동 원리를 이해하는 것에 도움을 준다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1578558776650&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;website&quot; data-og-title=&quot;Build, Collaborate &amp;amp; Integrate APIs | SwaggerHub&quot; data-og-description=&quot;&quot; data-og-host=&quot;app.swaggerhub.com&quot; data-og-source-url=&quot;https://app.swaggerhub.com/login&quot; data-og-url=&quot;https://app.swaggerhub.com/login&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://app.swaggerhub.com/login&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://app.swaggerhub.com/login&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;&gt;Build, Collaborate &amp;amp; Integrate APIs | SwaggerHub&lt;/p&gt;
&lt;p class=&quot;og-desc&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot;&gt;app.swaggerhub.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;1. &lt;b&gt;로그인&lt;/b&gt; (GitHub 계정을 통해 접속할 수 있습니다.)&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;2. &lt;b&gt;새로운 API를 생성&lt;/b&gt;합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;2-1. &lt;span style=&quot;color: #333333;&quot;&gt;Create New - Create New API&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;그림1.png&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;435&quot; width=&quot;400&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3aILB/btqA2PbiaYG/WJALHwZ4lUMeDimxP0Tdm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3aILB/btqA2PbiaYG/WJALHwZ4lUMeDimxP0Tdm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3aILB/btqA2PbiaYG/WJALHwZ4lUMeDimxP0Tdm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3aILB%2FbtqA2PbiaYG%2FWJALHwZ4lUMeDimxP0Tdm0%2Fimg.png&quot; data-filename=&quot;그림1.png&quot; data-origin-width=&quot;797&quot; data-origin-height=&quot;435&quot; width=&quot;400&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2-2. API 정보를 입력합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;500&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9FJVS/btqA2NqZ8pa/Xyil7RFX1ViWS2u14IQ4q1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9FJVS/btqA2NqZ8pa/Xyil7RFX1ViWS2u14IQ4q1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9FJVS/btqA2NqZ8pa/Xyil7RFX1ViWS2u14IQ4q1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9FJVS%2FbtqA2NqZ8pa%2FXyil7RFX1ViWS2u14IQ4q1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;500&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;3. Code Editor에 API 정보 입력하기 (11라인부터 입력)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;641&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blQ8TI/btqA2atecyy/X7hfWwKn2HFcKlkgYaygX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blQ8TI/btqA2atecyy/X7hfWwKn2HFcKlkgYaygX1/img.png&quot; data-alt=&quot;기본 값&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blQ8TI/btqA2atecyy/X7hfWwKn2HFcKlkgYaygX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblQ8TI%2FbtqA2atecyy%2FX7hfWwKn2HFcKlkgYaygX1%2Fimg.png&quot; data-origin-width=&quot;0&quot; data-origin-height=&quot;0&quot; width=&quot;641&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;기본 값&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-origin-width=&quot;1001&quot; data-origin-height=&quot;1042&quot; width=&quot;641&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/z9zUc/btqAYHziqyF/1ArHi4tnXk2wNqr9lmmWBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/z9zUc/btqAYHziqyF/1ArHi4tnXk2wNqr9lmmWBK/img.png&quot; data-alt=&quot;입력 값&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/z9zUc/btqAYHziqyF/1ArHi4tnXk2wNqr9lmmWBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fz9zUc%2FbtqAYHziqyF%2F1ArHi4tnXk2wNqr9lmmWBK%2Fimg.png&quot; data-origin-width=&quot;1001&quot; data-origin-height=&quot;1042&quot; width=&quot;641&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;입력 값&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1578560153809&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;openapi: 3.0.0
info:
  version: '1.0.0'
  title: 'SwaggerHub_Example'
  description: 'SwaggerHub 예제'
# Added by API Auto Mocking Plugin
servers:
# Added by API Auto Mocking Plugin
  - description: SwaggerHub API Auto Mocking
    url: https://virtserver.swaggerhub.com/jeseokMun/SwaggerHub_Example/1.0.0
  - description: JSON Placeholder API
    url: https://jsonplaceholder.typicode.com
paths:
  /todos/{id}:
    get:
      summary: ID값을 반환함.
      parameters: 
        - name: id
          in: path
          required: true
          description: 입력된 ID값을 반환함.
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  userID:
                    type: integer
                  id:
                    type: integer
                  title:
                    type: string
                  completed:
                    type: boolean&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;위처럼 API를 등록할 경우 해당 API에 대한 테스트를 진행할 수 있게 된다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;그림3.png&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;1101&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cTB5aN/btqA2T5Fv7v/6ST9duCyws9WUZUQUgRmM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cTB5aN/btqA2T5Fv7v/6ST9duCyws9WUZUQUgRmM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cTB5aN/btqA2T5Fv7v/6ST9duCyws9WUZUQUgRmM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcTB5aN%2FbtqA2T5Fv7v%2F6ST9duCyws9WUZUQUgRmM1%2Fimg.png&quot; data-filename=&quot;그림3.png&quot; data-origin-width=&quot;1108&quot; data-origin-height=&quot;1101&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>기타</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/54</guid>
      <comments>https://virtualgiraffe.tistory.com/54#entry54comment</comments>
      <pubDate>Thu, 9 Jan 2020 17:22:33 +0900</pubDate>
    </item>
    <item>
      <title>[WPF] LiveCharts.WPF를 이용한 차트 그리기 (In xaml / In code)</title>
      <link>https://virtualgiraffe.tistory.com/53</link>
      <description>&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/RUUpJ/btqAU7dNkF4/3AKJkj0c17VYK9odxM6Wg0/WPF_Chart.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;WPF_Chart.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;1.89MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot 2020-01-07 at 18.00.58.png&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;893&quot; width=&quot;600&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dh9bAs/btqAY64Qldg/d3iCdWgbQuTUT6Viv6CacK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dh9bAs/btqAY64Qldg/d3iCdWgbQuTUT6Viv6CacK/img.png&quot; data-alt=&quot;위 - Code에서 작성된 차트&amp;amp;amp;nbsp; &amp;amp;amp;nbsp; 아래 - Xaml에서 작성된 차트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dh9bAs/btqAY64Qldg/d3iCdWgbQuTUT6Viv6CacK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdh9bAs%2FbtqAY64Qldg%2Fd3iCdWgbQuTUT6Viv6CacK%2Fimg.png&quot; data-filename=&quot;Screenshot 2020-01-07 at 18.00.58.png&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;893&quot; width=&quot;600&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;위 - Code에서 작성된 차트&amp;nbsp; &amp;nbsp; 아래 - Xaml에서 작성된 차트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;NuGet : LiveCharts.Wpf&lt;/h3&gt;
&lt;p&gt;&lt;a href=&quot;https://lvcharts.net/&quot;&gt;https://lvcharts.net/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Xaml&lt;/p&gt;
&lt;pre id=&quot;code_1578387864906&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Window x:Class=&quot;WPF_Chart.MainWindow&quot;
        xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
        xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
        xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;
        xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;
        xmlns:local=&quot;clr-namespace:WPF_Chart&quot;
        xmlns:live=&quot;clr-namespace:LiveCharts.Wpf;assembly=LiveCharts.Wpf&quot;
        mc:Ignorable=&quot;d&quot;
        Title=&quot;MainWindow&quot; Height=&quot;900&quot; Width=&quot;800&quot;&amp;gt;
    &amp;lt;Grid&amp;gt;
        &amp;lt;Grid.RowDefinitions&amp;gt;
            &amp;lt;RowDefinition Height=&quot;1*&quot;/&amp;gt;
            &amp;lt;RowDefinition Height=&quot;1*&quot;/&amp;gt;
        &amp;lt;/Grid.RowDefinitions&amp;gt;
        
        &amp;lt;!--In Code--&amp;gt;
        &amp;lt;live:CartesianChart 
            x:Name=&quot;chart&quot; 
            BorderBrush=&quot;Red&quot; BorderThickness=&quot;2&quot;
            LegendLocation=&quot;Top&quot;
            Margin=&quot;15&quot;/&amp;gt;
        
        &amp;lt;!--In Xaml--&amp;gt;
        &amp;lt;live:CartesianChart 
            Grid.Row=&quot;1&quot;
            BorderBrush=&quot;Red&quot; BorderThickness=&quot;2&quot;
            LegendLocation=&quot;Top&quot;
            Margin=&quot;15&quot;&amp;gt;
            &amp;lt;live:CartesianChart.AxisY&amp;gt;
                &amp;lt;live:Axis MinValue=&quot;0&quot; MaxValue=&quot;1000&quot;/&amp;gt;
            &amp;lt;/live:CartesianChart.AxisY&amp;gt;
            &amp;lt;live:CartesianChart.AxisX&amp;gt;
                &amp;lt;live:Axis Labels=&quot;01, 02, 03, 04, 05, 06, 07, 08, 09, 10, 11, 12&quot;/&amp;gt;
            &amp;lt;/live:CartesianChart.AxisX&amp;gt;
            &amp;lt;live:CartesianChart.Series&amp;gt;
                &amp;lt;live:LineSeries Stroke=&quot;Green&quot; Title=&quot;Sample1&quot; Values=&quot;700, 200, 300, 400, 500, 600, 700, 800, 900, 90, 211, 220&quot;/&amp;gt;
                &amp;lt;live:LineSeries Stroke=&quot;Red&quot; Title=&quot;Sample2&quot; Values=&quot; 70, 20, 100, 140, 50, 60, 70, 80, 90, 100, 111, 120&quot;/&amp;gt;
            &amp;lt;/live:CartesianChart.Series&amp;gt;
        &amp;lt;/live:CartesianChart&amp;gt;
    &amp;lt;/Grid&amp;gt;
&amp;lt;/Window&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Code&lt;/p&gt;
&lt;pre id=&quot;code_1578388028179&quot; class=&quot;C# cs&quot; data-ke-language=&quot;c#&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Collections.Generic;
using System.Windows;
using System.Windows.Media;

namespace WPF_Chart
{
    /// &amp;lt;summary&amp;gt;
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// &amp;lt;/summary&amp;gt;
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            //범례 위치 설정
            chart.LegendLocation = LiveCharts.LegendLocation.Top;

            //세로 눈금 값 설정
            chart.AxisY.Add(new LiveCharts.Wpf.Axis { MinValue=0, MaxValue = 1000 });

            //가로 눈금 값 설정
            chart.AxisX.Add(new LiveCharts.Wpf.Axis { Labels = new string[] { &quot;01&quot;, &quot;02&quot;, &quot;03&quot;, &quot;04&quot;, &quot;05&quot;, &quot;06&quot;, &quot;07&quot;, &quot;08&quot;, &quot;09&quot;, &quot;10&quot;, &quot;11&quot;, &quot;12&quot;} });



            //모든 항목 지우기
            chart.Series.Clear();

            //항목 추가
            chart.Series.Add(new LiveCharts.Wpf.LineSeries() 
                                { 
                                    Title = &quot;Sample1&quot;, 
                                    Stroke = new SolidColorBrush(Colors.Green), 
                                    Values = new LiveCharts.ChartValues&amp;lt;double&amp;gt;(new List&amp;lt;double&amp;gt; { 700, 200, 300, 400, 500, 600, 700, 800, 900, 90, 211, 220 })
                                } 
            );
            chart.Series.Add(new LiveCharts.Wpf.LineSeries() 
                                { 
                                    Title = &quot;Sample2&quot;, 
                                    Stroke = new SolidColorBrush(Colors.Red), 
                                    Values = new LiveCharts.ChartValues&amp;lt;double&amp;gt;(new List&amp;lt;double&amp;gt; { 70, 20, 100, 140, 50, 60, 70, 80, 90, 100, 111, 120 }) 
                                }
            );

        }
    }
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Microsoft .NET/WPF</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/53</guid>
      <comments>https://virtualgiraffe.tistory.com/53#entry53comment</comments>
      <pubDate>Tue, 7 Jan 2020 18:07:33 +0900</pubDate>
    </item>
    <item>
      <title>[C#] 폴더 압축 / 다중 파일 압축 / 압축 해제</title>
      <link>https://virtualgiraffe.tistory.com/52</link>
      <description>&lt;p&gt;1. 폴더 압축&lt;/p&gt;
&lt;pre id=&quot;code_1578289012304&quot; class=&quot;c# cs&quot; data-ke-language=&quot;c#&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//폴더 압축
string folderPath = folderSelectorDialog.FileName;
string savePath = folderSelectorDialog.FileName + &quot;.zip&quot;;
System.IO.Compression.ZipFile.CreateFromDirectory(folderPath, savePath);&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. 다중 파일 압축&lt;/p&gt;
&lt;pre id=&quot;code_1578289012304&quot; class=&quot;c# cs&quot; data-ke-language=&quot;c#&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;private void btnCompress_Multiple_Click(object sender, RoutedEventArgs e)
{
    Microsoft.Win32.OpenFileDialog ofd = new Microsoft.Win32.OpenFileDialog() { Multiselect = true};

    if (ofd.ShowDialog() == true)
    { 
        FileCompression_Multiple(ofd.FileNames);
    }
}



public bool FileCompression_Multiple(string[] files)
{
    //예외처리
    if (files == null)      return false;
    if (files.Length == 0)  return false;


    FileInfo fi = new FileInfo(files[0]);
    string parentFolderPath = fi.DirectoryName;
    string tempFolderName = fi.Name.Split('.')[0];
    DirectoryInfo di = new DirectoryInfo(parentFolderPath + &quot;\\&quot; + tempFolderName);

    //첫번째 파일의 명을 가지고 폴더를 생성하므로 동일한 폴더가 없는지 체크 후 압축함.
    if (di.Exists == false)
    {
        //폴더 생성
        di.Create();

        //선택 파일 폴더로 이동
        foreach (var filePath in files)
        {
            FileInfo f = new FileInfo(filePath);
            System.IO.File.Copy(filePath, di.FullName + &quot;\\&quot; + f.Name);
        }

        //폴더 압축
        System.IO.Compression.ZipFile.CreateFromDirectory(di.FullName, di.FullName+&quot;.zip&quot;);

        //임시 생성 폴더 삭제
        di.Delete(true);
        return true;
    }

    return false;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;3. 압축 해제&lt;/p&gt;
&lt;pre id=&quot;code_1578289012304&quot; class=&quot;c# cs&quot; data-ke-language=&quot;c#&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;//압축 해제
System.IO.Compression.ZipFile.ExtractToDirectory(cofd.FileName, cofd.FileName.Replace(&quot;.zip&quot;, &quot;&quot;));&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Microsoft .NET/C#</category>
      <category>다중 파일 압축</category>
      <category>압축 해제</category>
      <category>파일 압축</category>
      <category>폴더 압축</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/52</guid>
      <comments>https://virtualgiraffe.tistory.com/52#entry52comment</comments>
      <pubDate>Mon, 6 Jan 2020 15:57:13 +0900</pubDate>
    </item>
    <item>
      <title>[C#] 16진수(hex) 문자열&amp;lt;-&amp;gt; Byte[] 변환</title>
      <link>https://virtualgiraffe.tistory.com/51</link>
      <description>&lt;p&gt;1. 16진수 문자열 -&amp;gt; Byte[]&lt;/p&gt;
&lt;pre id=&quot;code_1578044168806&quot; class=&quot;C# cs&quot; data-ke-language=&quot;c#&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;
/// 16진수 문자를 16진수 Byte[]로 변환
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name=&quot;strHex&quot;&amp;gt;&amp;lt;/param&amp;gt;
/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
/// 
public byte[] HexStringToByteHex(string strHex)
{
    if (strHex.Length % 2 != 0)
        MessageBox.Show(&quot;HexString는 홀수일 수 없습니다. - &quot; + strHex);

    byte[] bytes = new byte[strHex.Length / 2];

    for (int count = 0; count &amp;lt; strHex.Length; count += 2)
    {
        bytes[count / 2] = System.Convert.ToByte(strHex.Substring(count, 2), 16);
    }
    return bytes;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;2. &lt;span style=&quot;color: #333333;&quot;&gt;Byte[] &lt;span style=&quot;color: #333333;&quot;&gt;-&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;16진수 문자열&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1578044168806&quot; class=&quot;C# cs&quot; data-ke-language=&quot;c#&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;
/// 16진수 Byte[]를 16진수 문자로 변환
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name=&quot;strHex&quot;&amp;gt;&amp;lt;/param&amp;gt;
/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
/// 
public string ByteHexToHexString(byte[] hex)
{
    string result = string.Empty;
    foreach (byte c in hex)
        result += c.ToString(&quot;x2&quot;).ToUpper();
    return result;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Microsoft .NET/C#</category>
      <category>16진수</category>
      <category>16진수 문자열</category>
      <category>byte</category>
      <category>byte[]</category>
      <category>c#</category>
      <category>hex</category>
      <category>Hex String</category>
      <category>변환</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/51</guid>
      <comments>https://virtualgiraffe.tistory.com/51#entry51comment</comments>
      <pubDate>Fri, 3 Jan 2020 20:02:49 +0900</pubDate>
    </item>
    <item>
      <title>[C#] 어셈블리 정보를 이용한 버전 관리, 자동 증가, 빌드 시간 변환</title>
      <link>https://virtualgiraffe.tistory.com/50</link>
      <description>&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;어셈블리의 버전 정보는 다음 &lt;span style=&quot;color: #ee2323;&quot;&gt;네 가지 값으로 구성&lt;/span&gt;됨.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예 ) 1.0.0.15&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;주 버전&amp;nbsp; &amp;nbsp; &amp;nbsp;1&lt;br /&gt;부 버전&amp;nbsp; &amp;nbsp; &amp;nbsp;0&lt;br /&gt;빌드 번호&amp;nbsp; 0&lt;br /&gt;수정 버전&amp;nbsp; 15&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;어셈블리에 저장된 버전 정보를 불러오는 방법&lt;/b&gt;은 아래와 같습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;System.Reflection.Assembly.GetExecutingAssembly().GetName().Version.ToString();&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;어셈블리 버전은 기본적으로 수동으로 변경&lt;/span&gt;하여 사용이 가능하지만 자동으로 증가하도록 설정이 가능.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;어셈블리 정보 자동 변경 설정&lt;/h2&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;.Net Framework의 경우&lt;/h2&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;color: #333333; text-align: start;&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;a style=&quot;color: #ee2323;&quot; href=&quot;AssemblyInfo.cs&quot;&gt;AssemblyInfo.cs&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일의 제일 하단&lt;/span&gt;으로 이동&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&quot;[assembly: AssemblyVersion(&quot;1.0.0.0&quot;)]&quot;, &quot;[assembly: AssemblyFileVersion(&quot;1.0.0.0&quot;)]&quot;를 주석 처리하고&lt;/span&gt;&amp;nbsp;&lt;br /&gt;주석 처리되어있는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&quot;[assembly: AssemblyVersion(&quot;1.0.*&quot;)]&quot;를 활성화&lt;/span&gt;합니다.&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;291&quot; data-origin-height=&quot;49&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLPOub/btqzsERmjku/GSZ6nspmrYrPYl1xiiScI1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLPOub/btqzsERmjku/GSZ6nspmrYrPYl1xiiScI1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLPOub/btqzsERmjku/GSZ6nspmrYrPYl1xiiScI1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLPOub%2FbtqzsERmjku%2FGSZ6nspmrYrPYl1xiiScI1%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;291&quot; height=&quot;49&quot; data-origin-width=&quot;291&quot; data-origin-height=&quot;49&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;303&quot; data-origin-height=&quot;49&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXwtm/btqzr86eQXM/rSWD435qLZOktmsUqW8iM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXwtm/btqzr86eQXM/rSWD435qLZOktmsUqW8iM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXwtm/btqzr86eQXM/rSWD435qLZOktmsUqW8iM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXwtm%2Fbtqzr86eQXM%2FrSWD435qLZOktmsUqW8iM1%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;303&quot; height=&quot;49&quot; data-origin-width=&quot;303&quot; data-origin-height=&quot;49&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;3. 위와 같이 변경한다면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;CS8357 에러가 발생&lt;/span&gt;&lt;/b&gt;합니다. (정상입니다.)&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;4. 프로젝트 폴더로 이동하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;프로젝트 파일(XXX.csproj)을 메모장으로 실행&lt;/span&gt;합니다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;5. &amp;lt;Deterministic&amp;gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;true&lt;/span&gt;&amp;lt;/&lt;span style=&quot;color: #333333;&quot;&gt;Deterministic&amp;gt; 항목을 &amp;lt;Deterministic&amp;gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;false&lt;/span&gt;&amp;lt;/Deterministic&amp;gt;로 변경합니다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;6. VisualStudio로 돌아가면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;파일 변경이 감지&lt;/span&gt;되었다고 팝업창이 출력됩니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&quot;모두 다시 로드&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;합니다.&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;7. 여기까지 설정했다면 빌드 시간에 따라 어셈블리 정보가 자동으로 변경됩니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;.Net 또는 .Net core의 경우&lt;/h2&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;1. &lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;프로젝트 폴더로 이동하여&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;프로젝트 파일(XXX.csproj)을 메모장으로 실행&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;합니다.&lt;/span&gt; &lt;br /&gt;2. &lt;span style=&quot;background-color: #fafafa;&quot;&gt;AssemblyVersion&lt;/span&gt; 항목을 아래 처럼 변경 후에 &lt;span style=&quot;background-color: #fafafa;&quot;&gt;&amp;lt;Deterministic&amp;gt;false&amp;lt;/Deterministic&amp;gt; 항목을 추가합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;AssemblyVersion&amp;gt;1.0.*&amp;lt;/AssemblyVersion&amp;gt; &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;lt;Deterministic&amp;gt;false&amp;lt;/Deterministic&amp;gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;빌드 시간 변환&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;위와 같이 어셈블리 정보 자동 증가 값을 &lt;span style=&quot;color: #ee2323;&quot;&gt;[assembly: AssemblyVersion(&quot;1.0.*&quot;)]&lt;span style=&quot;color: #000000;&quot;&gt;로 설정할 경우 빌드 번호는 날짜, 수정 번호는 시간 값으로 변환 저장되며, 반환되는 값은 아래 함수를 통해 변환하여 언제 빌드된 버전인지 확인이 가능하다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;함수는 아래와 같은 방법으로 사용하면 빌드 시간을 얻을 수 있다. Get_BuildDateTime(System.Reflection.Assembly.GetExecutingAssembly().GetName().Version);&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1572590551081&quot; class=&quot;cs&quot; data-ke-language=&quot;cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;/// &amp;lt;summary&amp;gt;
/// 버전 정보를 넣으면 빌드 시간을 반환.
/// &amp;lt;/summary&amp;gt;
/// &amp;lt;param name=&quot;version&quot;&amp;gt;&amp;lt;/param&amp;gt;
/// &amp;lt;returns&amp;gt;&amp;lt;/returns&amp;gt;
public System.DateTime Get_BuildDateTime(System.Version version = null)
{
    // 주.부.빌드.수정
    // 주 버전    Major Number
    // 부 버전    Minor Number
    // 빌드 번호  Build Number
    // 수정 버전  Revision NUmber

    //매개 변수가 존재할 경우
    if (version == null)
        version = System.Reflection.Assembly.GetExecutingAssembly().GetName().Version;

    //세번째 값(Build Number)은 2000년 1월 1일부터
    //Build된 날짜까지의 총 일(Days) 수 이다.
    int day = version.Build;
    System.DateTime dtBuild = (new System.DateTime(2000, 1, 1)).AddDays(day);

    //네번째 값(Revision NUmber)은 자정으로부터 Build된
    //시간까지의 지나간 초(Second) 값 이다.
    int intSeconds = version.Revision;
    intSeconds = intSeconds * 2;
    dtBuild = dtBuild.AddSeconds(intSeconds);


    //시차 보정
    System.Globalization.DaylightTime daylingTime = System.TimeZone.CurrentTimeZone
            .GetDaylightChanges(dtBuild.Year);
    if (System.TimeZone.IsDaylightSavingTime(dtBuild, daylingTime))
        dtBuild = dtBuild.Add(daylingTime.Delta);

    return dtBuild;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; 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;</description>
      <category>Microsoft .NET/C#</category>
      <category>assemblyInfo</category>
      <category>C# 버전</category>
      <category>C# 버전 자동 증가</category>
      <category>어셈블리정보</category>
      <category>전자기린스튜디오</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/50</guid>
      <comments>https://virtualgiraffe.tistory.com/50#entry50comment</comments>
      <pubDate>Thu, 31 Oct 2019 17:53:00 +0900</pubDate>
    </item>
    <item>
      <title>[WPF Style] TabControl_Black</title>
      <link>https://virtualgiraffe.tistory.com/49</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1QXUo/btqxyMKCNMC/ftsHK3imCHBSddVTo0c8iK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1QXUo/btqxyMKCNMC/ftsHK3imCHBSddVTo0c8iK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1QXUo/btqxyMKCNMC/ftsHK3imCHBSddVTo0c8iK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1QXUo%2FbtqxyMKCNMC%2FftsHK3imCHBSddVTo0c8iK%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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;검은색 계열을 색상으로 깔끔한 스타일 구성&lt;/p&gt;
&lt;pre id=&quot;code_1566281678817&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Window.Resources&amp;gt;
    &amp;lt;Color x:Key=&quot;SkyBlueColor&quot;&amp;gt;#3399FF&amp;lt;/Color&amp;gt;
    &amp;lt;SolidColorBrush x:Key=&quot;SkyBlueBrush&quot;   Color=&quot;{StaticResource SkyBlueColor}&quot;/&amp;gt;
    &amp;lt;Color x:Key=&quot;LightGrayColor&quot;&amp;gt;#C5C5C5&amp;lt;/Color&amp;gt;
    &amp;lt;SolidColorBrush x:Key=&quot;LightGrayBrush&quot; Color=&quot;{StaticResource LightGrayColor}&quot;/&amp;gt;          
    &amp;lt;Color x:Key=&quot;GrayColor&quot;&amp;gt;#3F3F46&amp;lt;/Color&amp;gt;
    &amp;lt;SolidColorBrush x:Key=&quot;GrayBrush&quot;      Color=&quot;{StaticResource GrayColor}&quot;/&amp;gt;
    &amp;lt;Color x:Key=&quot;DarkGrayColor&quot;&amp;gt;#2D2D30&amp;lt;/Color&amp;gt;
    &amp;lt;SolidColorBrush x:Key=&quot;darkGray0Brush&quot; Color=&quot;{StaticResource DarkGrayColor}&quot;/&amp;gt;
    &amp;lt;Color x:Key=&quot;BlackColor&quot;&amp;gt;#252526&amp;lt;/Color&amp;gt;
    &amp;lt;SolidColorBrush x:Key=&quot;BlackBrush&quot;     Color=&quot;{StaticResource BlackColor}&quot;/&amp;gt;

    &amp;lt;!--TabControl--&amp;gt;
    &amp;lt;Style x:Key=&quot;blkTab&quot; TargetType=&quot;{x:Type TabControl}&quot; &amp;gt;
        &amp;lt;Setter Property=&quot;TabStripPlacement&quot;        Value=&quot;Bottom&quot;/&amp;gt;
        &amp;lt;Setter Property=&quot;OverridesDefaultStyle&quot;    Value=&quot;True&quot; /&amp;gt;
        &amp;lt;Setter Property=&quot;SnapsToDevicePixels&quot;      Value=&quot;True&quot; /&amp;gt;
        &amp;lt;Setter Property=&quot;Template&quot;&amp;gt;
            &amp;lt;Setter.Value&amp;gt;
                &amp;lt;ControlTemplate TargetType=&quot;{x:Type TabControl}&quot;&amp;gt;
                    &amp;lt;Grid KeyboardNavigation.TabNavigation=&quot;Local&quot;&amp;gt;
                        &amp;lt;Grid.RowDefinitions&amp;gt;
                            &amp;lt;RowDefinition Height=&quot;Auto&quot; /&amp;gt;
                            &amp;lt;RowDefinition Height=&quot;*&quot; /&amp;gt;
                        &amp;lt;/Grid.RowDefinitions&amp;gt;
                        &amp;lt;VisualStateManager.VisualStateGroups&amp;gt;
                            &amp;lt;VisualStateGroup x:Name=&quot;CommonStates&quot;&amp;gt;
                                &amp;lt;VisualState x:Name=&quot;Disabled&quot;&amp;gt;
                                    &amp;lt;Storyboard&amp;gt;
                                        &amp;lt;ColorAnimationUsingKeyFrames Storyboard.TargetName=&quot;Border&quot;
                                            Storyboard.TargetProperty=&quot;(Border.BorderBrush).(SolidColorBrush.Color)&quot;&amp;gt;
                                            &amp;lt;EasingColorKeyFrame KeyTime=&quot;0&quot; Value=&quot;#FFAAAAAA&quot; /&amp;gt;
                                        &amp;lt;/ColorAnimationUsingKeyFrames&amp;gt;
                                    &amp;lt;/Storyboard&amp;gt;
                                &amp;lt;/VisualState&amp;gt;
                            &amp;lt;/VisualStateGroup&amp;gt;
                        &amp;lt;/VisualStateManager.VisualStateGroups&amp;gt;
                        &amp;lt;TabPanel x:Name=&quot;HeaderPanel&quot;
                            Grid.Row=&quot;0&quot;
                            Panel.ZIndex=&quot;1&quot;
                            Margin=&quot;0,0,4,-1&quot;
                            IsItemsHost=&quot;True&quot;
                            KeyboardNavigation.TabIndex=&quot;1&quot;
                            Background=&quot;Transparent&quot; /&amp;gt;
                        &amp;lt;Border x:Name=&quot;Border&quot;
                            Grid.Row=&quot;1&quot;
                            BorderThickness=&quot;0&quot;
                            CornerRadius=&quot;0&quot;
                            KeyboardNavigation.TabNavigation=&quot;Local&quot;
                            KeyboardNavigation.DirectionalNavigation=&quot;Contained&quot;
                            KeyboardNavigation.TabIndex=&quot;2&quot;&amp;gt;
                            &amp;lt;Border.Background&amp;gt;
                                &amp;lt;LinearGradientBrush 
                                    EndPoint=&quot;0.5,1&quot;
                                    StartPoint=&quot;0.5,0&quot;&amp;gt;
                                    &amp;lt;GradientStop Color=&quot;{StaticResource DarkGrayColor}&quot; Offset=&quot;0&quot; /&amp;gt;
                                    &amp;lt;GradientStop Color=&quot;{StaticResource DarkGrayColor}&quot; Offset=&quot;1&quot; /&amp;gt;
                                &amp;lt;/LinearGradientBrush&amp;gt;
                            &amp;lt;/Border.Background&amp;gt;
                            &amp;lt;Border.BorderBrush&amp;gt;
                                &amp;lt;SolidColorBrush Color=&quot;{StaticResource SkyBlueColor}&quot;/&amp;gt;
                            &amp;lt;/Border.BorderBrush&amp;gt;
                            &amp;lt;ContentPresenter x:Name=&quot;PART_SelectedContentHost&quot;
                                Margin=&quot;4&quot;
                                ContentSource=&quot;SelectedContent&quot; /&amp;gt;
                        &amp;lt;/Border&amp;gt;
                    &amp;lt;/Grid&amp;gt;
                &amp;lt;/ControlTemplate&amp;gt;
            &amp;lt;/Setter.Value&amp;gt;
        &amp;lt;/Setter&amp;gt;
    &amp;lt;/Style&amp;gt;

    &amp;lt;!--TabItem--&amp;gt;
    &amp;lt;Style x:Key=&quot;blkTabItem&quot; TargetType=&quot;{x:Type TabItem}&quot;&amp;gt;
        &amp;lt;Setter Property=&quot;Foreground&quot; Value=&quot;White&quot;/&amp;gt;
        &amp;lt;Setter Property=&quot;Template&quot;&amp;gt;
            &amp;lt;Setter.Value&amp;gt;
                &amp;lt;ControlTemplate TargetType=&quot;{x:Type TabItem}&quot;&amp;gt;
                    &amp;lt;Grid x:Name=&quot;Root&quot;&amp;gt;
                        &amp;lt;VisualStateManager.VisualStateGroups&amp;gt;
                            &amp;lt;VisualStateGroup x:Name=&quot;SelectionStates&quot;&amp;gt;
                                &amp;lt;VisualState x:Name=&quot;Unselected&quot; /&amp;gt;
                                &amp;lt;VisualState x:Name=&quot;Selected&quot;&amp;gt;
                                    &amp;lt;Storyboard&amp;gt;
                                        &amp;lt;ColorAnimationUsingKeyFrames Storyboard.TargetName=&quot;Border&quot;
                                            Storyboard.TargetProperty=&quot;(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)&quot;&amp;gt;
                                            &amp;lt;EasingColorKeyFrame KeyTime=&quot;0&quot;
                                        Value=&quot;{StaticResource DarkGrayColor}&quot; /&amp;gt;
                                        &amp;lt;/ColorAnimationUsingKeyFrames&amp;gt;
                                        &amp;lt;ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty=&quot;(Border.BorderThickness)&quot;
                                                Storyboard.TargetName=&quot;Border&quot;&amp;gt;
                                            &amp;lt;EasingThicknessKeyFrame KeyTime=&quot;0&quot;
                                            Value=&quot;1,1,1,0&quot; /&amp;gt;
                                        &amp;lt;/ThicknessAnimationUsingKeyFrames&amp;gt;
                                    &amp;lt;/Storyboard&amp;gt;
                                &amp;lt;/VisualState&amp;gt;
                            &amp;lt;/VisualStateGroup&amp;gt;
                            &amp;lt;VisualStateGroup x:Name=&quot;CommonStates&quot;&amp;gt;
                                &amp;lt;VisualState x:Name=&quot;Normal&quot; /&amp;gt;
                                &amp;lt;VisualState x:Name=&quot;MouseOver&quot; /&amp;gt;
                                &amp;lt;VisualState x:Name=&quot;Disabled&quot;&amp;gt;
                                    &amp;lt;Storyboard&amp;gt;
                                        &amp;lt;ColorAnimationUsingKeyFrames Storyboard.TargetName=&quot;Border&quot;
                                            Storyboard.TargetProperty=&quot;(Panel.Background).(GradientBrush.GradientStops)[1].(GradientStop.Color)&quot;&amp;gt;
                                            &amp;lt;EasingColorKeyFrame KeyTime=&quot;0&quot;
                                        Value=&quot;Red&quot; /&amp;gt;
                                        &amp;lt;/ColorAnimationUsingKeyFrames&amp;gt;
                                        &amp;lt;ColorAnimationUsingKeyFrames Storyboard.TargetName=&quot;Border&quot;
                                            Storyboard.TargetProperty=&quot;(Border.BorderBrush).(SolidColorBrush.Color)&quot;&amp;gt;
                                            &amp;lt;EasingColorKeyFrame KeyTime=&quot;0&quot;
                                        Value=&quot;Red&quot;/&amp;gt;
                                        &amp;lt;/ColorAnimationUsingKeyFrames&amp;gt;
                                    &amp;lt;/Storyboard&amp;gt;
                                &amp;lt;/VisualState&amp;gt;
                            &amp;lt;/VisualStateGroup&amp;gt;
                        &amp;lt;/VisualStateManager.VisualStateGroups&amp;gt;
                        &amp;lt;!--모양조정--&amp;gt;
                        &amp;lt;Border x:Name=&quot;Border&quot;
                            Margin=&quot;0,0,-4,0&quot;
                            BorderThickness=&quot;1,1,1,1&quot;
                            CornerRadius=&quot;5,5,0,0&quot;&amp;gt;
                            &amp;lt;Border.BorderBrush&amp;gt;
                                &amp;lt;SolidColorBrush Color=&quot;{StaticResource DarkGrayColor}&quot; /&amp;gt;
                            &amp;lt;/Border.BorderBrush&amp;gt;
                            &amp;lt;Border.Background&amp;gt;
                                &amp;lt;LinearGradientBrush 
                                    StartPoint=&quot;0,0&quot;
                                EndPoint=&quot;0,1&quot;&amp;gt;
                                    &amp;lt;LinearGradientBrush.GradientStops&amp;gt;
                                        &amp;lt;GradientStopCollection&amp;gt;
                                            &amp;lt;GradientStop 
                                                Color=&quot;{StaticResource GrayColor}&quot;
                                                Offset=&quot;0.0&quot; /&amp;gt;
                                            &amp;lt;GradientStop 
                                                Color=&quot;{StaticResource GrayColor}&quot;
                                                Offset=&quot;1.0&quot; /&amp;gt;
                                        &amp;lt;/GradientStopCollection&amp;gt;
                                    &amp;lt;/LinearGradientBrush.GradientStops&amp;gt;
                                &amp;lt;/LinearGradientBrush&amp;gt;

                            &amp;lt;/Border.Background&amp;gt;
                            &amp;lt;ContentPresenter x:Name=&quot;ContentSite&quot;
                                VerticalAlignment=&quot;Center&quot;
                                HorizontalAlignment=&quot;Center&quot;
                                ContentSource=&quot;Header&quot;
                                Margin=&quot;12,2,12,2&quot;
                                RecognizesAccessKey=&quot;True&quot; /&amp;gt;
                        &amp;lt;/Border&amp;gt;
                    &amp;lt;/Grid&amp;gt;
                    &amp;lt;ControlTemplate.Triggers&amp;gt;
                        &amp;lt;Trigger Property=&quot;IsSelected&quot; Value=&quot;True&quot;&amp;gt;
                            &amp;lt;Setter Property=&quot;Panel.ZIndex&quot; Value=&quot;100&quot; /&amp;gt;
                        &amp;lt;/Trigger&amp;gt;
                    &amp;lt;/ControlTemplate.Triggers&amp;gt;
                &amp;lt;/ControlTemplate&amp;gt;
            &amp;lt;/Setter.Value&amp;gt;
        &amp;lt;/Setter&amp;gt;
    &amp;lt;/Style&amp;gt;
&amp;lt;/Window.Resources&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1566281756477&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;TabControl Style=&quot;{StaticResource blkTab}&quot;&amp;gt;
    &amp;lt;TabItem Style=&quot;{StaticResource blkTabItem}&quot; 
        Header=&quot;asd&quot;/&amp;gt;
    &amp;lt;TabItem Style=&quot;{StaticResource blkTabItem}&quot; 
        Header=&quot;123123123&quot;/&amp;gt;
&amp;lt;/TabControl&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Microsoft .NET/WPF Style</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/49</guid>
      <comments>https://virtualgiraffe.tistory.com/49#entry49comment</comments>
      <pubDate>Tue, 20 Aug 2019 15:16:12 +0900</pubDate>
    </item>
    <item>
      <title>[WPF Style] CheckBox_Slider</title>
      <link>https://virtualgiraffe.tistory.com/48</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bKjEEz/btqxB7NZC5p/2f6qB6j2gNJ6fOwfD36Lj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bKjEEz/btqxB7NZC5p/2f6qB6j2gNJ6fOwfD36Lj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bKjEEz/btqxB7NZC5p/2f6qB6j2gNJ6fOwfD36Lj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbKjEEz%2FbtqxB7NZC5p%2F2f6qB6j2gNJ6fOwfD36Lj0%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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Slider 형태로 제작된 CheckBoxStyle&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;IsChecked 값을 변경하면 자동으로 모양이 변경됨.&lt;/p&gt;
&lt;pre id=&quot;code_1566269592142&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;    &amp;lt;Window.Resources&amp;gt;
    	&amp;lt;!--색상--&amp;gt;
        &amp;lt;Color x:Key=&quot;GreenColor&quot;&amp;gt;#00C28C&amp;lt;/Color&amp;gt;
        &amp;lt;Color x:Key=&quot;LightGrayColor&quot;&amp;gt;#C5C5C5&amp;lt;/Color&amp;gt;
        &amp;lt;SolidColorBrush x:Key=&quot;GreenBrush&quot; Color=&quot;{StaticResource GreenColor}&quot;/&amp;gt;
        &amp;lt;SolidColorBrush x:Key=&quot;LightGrayBrush&quot; Color=&quot;{StaticResource LightGrayColor}&quot;/&amp;gt;
		
        &amp;lt;!--스타일--&amp;gt;
        &amp;lt;Style x:Key=&quot;SliderCheckBox&quot; 
            TargetType=&quot;{x:Type CheckBox}&quot;&amp;gt;
            &amp;lt;Setter Property=&quot;MaxHeight&quot; 
                    Value=&quot;20&quot;/&amp;gt;
            &amp;lt;Setter Property=&quot;MaxWidth&quot; 
                    Value=&quot;35&quot;/&amp;gt;
            &amp;lt;Setter Property=&quot;Foreground&quot; 
                    Value=&quot;{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}&quot;/&amp;gt;
            &amp;lt;Setter Property=&quot;BorderThickness&quot; 
                    Value=&quot;1&quot;/&amp;gt;
            &amp;lt;Setter Property=&quot;Cursor&quot; 
                    Value=&quot;Hand&quot; /&amp;gt;
            &amp;lt;Setter Property=&quot;Template&quot;&amp;gt;
                &amp;lt;Setter.Value&amp;gt;
                    &amp;lt;ControlTemplate TargetType=&quot;{x:Type CheckBox}&quot;&amp;gt;
                        &amp;lt;ControlTemplate.Resources&amp;gt;
                            &amp;lt;Storyboard x:Key=&quot;StoryboardIsChecked&quot;&amp;gt;
                                &amp;lt;DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=&quot;(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)&quot; Storyboard.TargetName=&quot;CheckFlag&quot;&amp;gt;
                                    &amp;lt;EasingDoubleKeyFrame KeyTime=&quot;0&quot; Value=&quot;0&quot;/&amp;gt;
                                    &amp;lt;EasingDoubleKeyFrame KeyTime=&quot;0:0:0.2&quot; Value=&quot;14&quot;/&amp;gt;
                                &amp;lt;/DoubleAnimationUsingKeyFrames&amp;gt;
                            &amp;lt;/Storyboard&amp;gt;
                            &amp;lt;Storyboard x:Key=&quot;StoryboardIsCheckedOff&quot;&amp;gt;
                                &amp;lt;DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=&quot;(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)&quot; Storyboard.TargetName=&quot;CheckFlag&quot;&amp;gt;
                                    &amp;lt;EasingDoubleKeyFrame KeyTime=&quot;0&quot; Value=&quot;14&quot;/&amp;gt;
                                    &amp;lt;EasingDoubleKeyFrame KeyTime=&quot;0:0:0.2&quot; Value=&quot;0&quot;/&amp;gt;
                                &amp;lt;/DoubleAnimationUsingKeyFrames&amp;gt;
                            &amp;lt;/Storyboard&amp;gt;
                        &amp;lt;/ControlTemplate.Resources&amp;gt;
                        &amp;lt;BulletDecorator Background=&quot;Transparent&quot; SnapsToDevicePixels=&quot;true&quot;&amp;gt;
                            &amp;lt;BulletDecorator.Bullet&amp;gt;
                                &amp;lt;Border x:Name=&quot;ForegroundPanel&quot; BorderThickness=&quot;1&quot; Width=&quot;35&quot; Height=&quot;20&quot; CornerRadius=&quot;10&quot;&amp;gt;
                                    &amp;lt;Canvas&amp;gt;
                                        &amp;lt;!--원 색상--&amp;gt;
                                        &amp;lt;Border x:Name=&quot;CheckFlag&quot;
                                            Background=&quot;White&quot;  
                                            Width=&quot;19&quot; Height=&quot;18&quot; 
                                            CornerRadius=&quot;10&quot; 
                                            VerticalAlignment=&quot;Center&quot; 
                                            BorderThickness=&quot;1&quot; 
                                            RenderTransformOrigin=&quot;0.5,0.5&quot;&amp;gt;
                                            &amp;lt;Border.RenderTransform&amp;gt;
                                                &amp;lt;TransformGroup&amp;gt;
                                                    &amp;lt;ScaleTransform/&amp;gt;
                                                    &amp;lt;SkewTransform/&amp;gt;
                                                    &amp;lt;RotateTransform/&amp;gt;
                                                    &amp;lt;TranslateTransform/&amp;gt;
                                                &amp;lt;/TransformGroup&amp;gt;
                                            &amp;lt;/Border.RenderTransform&amp;gt;
                                            &amp;lt;Border.Effect&amp;gt;
                                                &amp;lt;DropShadowEffect 
                                                    ShadowDepth=&quot;1&quot; 
                                                    Direction=&quot;180&quot; /&amp;gt;
                                            &amp;lt;/Border.Effect&amp;gt;
                                        &amp;lt;/Border&amp;gt;
                                    &amp;lt;/Canvas&amp;gt;
                                &amp;lt;/Border&amp;gt;
                            &amp;lt;/BulletDecorator.Bullet&amp;gt;
                            &amp;lt;ContentPresenter HorizontalAlignment=&quot;{TemplateBinding HorizontalContentAlignment}&quot; Margin=&quot;{TemplateBinding Padding}&quot; RecognizesAccessKey=&quot;True&quot; SnapsToDevicePixels=&quot;{TemplateBinding SnapsToDevicePixels}&quot; VerticalAlignment=&quot;Center&quot;/&amp;gt;
                        &amp;lt;/BulletDecorator&amp;gt;
                        &amp;lt;ControlTemplate.Triggers&amp;gt;
                            &amp;lt;Trigger Property=&quot;HasContent&quot; Value=&quot;true&quot;&amp;gt;
                                &amp;lt;Setter Property=&quot;FocusVisualStyle&quot; 
                                        Value=&quot;{StaticResource CheckRadioFocusVisual}&quot;/&amp;gt;
                                &amp;lt;Setter Property=&quot;Padding&quot; 
                                        Value=&quot;4,0,0,0&quot;/&amp;gt;
                            &amp;lt;/Trigger&amp;gt;
                            &amp;lt;Trigger Property=&quot;IsEnabled&quot; Value=&quot;false&quot;&amp;gt;
                                &amp;lt;Setter Property=&quot;Foreground&quot; 
                                        Value=&quot;{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}&quot;/&amp;gt;
                            &amp;lt;/Trigger&amp;gt;
                            &amp;lt;Trigger Property=&quot;IsChecked&quot; Value=&quot;True&quot;&amp;gt;
                                &amp;lt;Setter TargetName=&quot;ForegroundPanel&quot; 
                                    Property=&quot;Background&quot; 
                                    Value=&quot;{StaticResource GreenBrush}&quot; /&amp;gt;
                                &amp;lt;Trigger.EnterActions&amp;gt;
                                    &amp;lt;BeginStoryboard x:Name=&quot;BeginStoryboardCheckedTrue&quot; Storyboard=&quot;{StaticResource StoryboardIsChecked}&quot; /&amp;gt;
                                    &amp;lt;RemoveStoryboard BeginStoryboardName=&quot;BeginStoryboardCheckedFalse&quot; /&amp;gt;
                                &amp;lt;/Trigger.EnterActions&amp;gt;
                            &amp;lt;/Trigger&amp;gt;
                            &amp;lt;Trigger Property=&quot;IsChecked&quot; Value=&quot;False&quot;&amp;gt;
                                &amp;lt;Setter TargetName=&quot;ForegroundPanel&quot; 
                                        Property=&quot;Background&quot; 
                                        Value=&quot;{StaticResource LightGrayBrush}&quot; /&amp;gt;
                                &amp;lt;Trigger.EnterActions&amp;gt;
                                    &amp;lt;BeginStoryboard x:Name=&quot;BeginStoryboardCheckedFalse&quot; 
                                                     Storyboard=&quot;{StaticResource StoryboardIsCheckedOff}&quot; /&amp;gt;
                                    &amp;lt;RemoveStoryboard BeginStoryboardName=&quot;BeginStoryboardCheckedTrue&quot; /&amp;gt;
                                &amp;lt;/Trigger.EnterActions&amp;gt;
                            &amp;lt;/Trigger&amp;gt;
                        &amp;lt;/ControlTemplate.Triggers&amp;gt;
                    &amp;lt;/ControlTemplate&amp;gt;
                &amp;lt;/Setter.Value&amp;gt;
            &amp;lt;/Setter&amp;gt;
        &amp;lt;/Style&amp;gt;
        &amp;lt;Style x:Key=&quot;SliderCheckBox_Square&quot; 
            TargetType=&quot;{x:Type CheckBox}&quot;&amp;gt;
            &amp;lt;Setter Property=&quot;MaxHeight&quot; 
                    Value=&quot;20&quot;/&amp;gt;
            &amp;lt;Setter Property=&quot;MaxWidth&quot; 
                    Value=&quot;35&quot;/&amp;gt;
            &amp;lt;Setter Property=&quot;Foreground&quot; 
                    Value=&quot;{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}&quot;/&amp;gt;
            &amp;lt;Setter Property=&quot;BorderThickness&quot; 
                    Value=&quot;1&quot;/&amp;gt;
            &amp;lt;Setter Property=&quot;Cursor&quot; 
                    Value=&quot;Hand&quot; /&amp;gt;
            &amp;lt;Setter Property=&quot;Template&quot;&amp;gt;
                &amp;lt;Setter.Value&amp;gt;
                    &amp;lt;ControlTemplate TargetType=&quot;{x:Type CheckBox}&quot;&amp;gt;
                        &amp;lt;ControlTemplate.Resources&amp;gt;
                            &amp;lt;Storyboard x:Key=&quot;StoryboardIsChecked&quot;&amp;gt;
                                &amp;lt;DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=&quot;(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)&quot; Storyboard.TargetName=&quot;CheckFlag&quot;&amp;gt;
                                    &amp;lt;EasingDoubleKeyFrame KeyTime=&quot;0&quot; Value=&quot;0&quot;/&amp;gt;
                                    &amp;lt;EasingDoubleKeyFrame KeyTime=&quot;0:0:0.2&quot; Value=&quot;14&quot;/&amp;gt;
                                &amp;lt;/DoubleAnimationUsingKeyFrames&amp;gt;
                            &amp;lt;/Storyboard&amp;gt;
                            &amp;lt;Storyboard x:Key=&quot;StoryboardIsCheckedOff&quot;&amp;gt;
                                &amp;lt;DoubleAnimationUsingKeyFrames Storyboard.TargetProperty=&quot;(UIElement.RenderTransform).(TransformGroup.Children)[3].(TranslateTransform.X)&quot; Storyboard.TargetName=&quot;CheckFlag&quot;&amp;gt;
                                    &amp;lt;EasingDoubleKeyFrame KeyTime=&quot;0&quot; Value=&quot;14&quot;/&amp;gt;
                                    &amp;lt;EasingDoubleKeyFrame KeyTime=&quot;0:0:0.2&quot; Value=&quot;0&quot;/&amp;gt;
                                &amp;lt;/DoubleAnimationUsingKeyFrames&amp;gt;
                            &amp;lt;/Storyboard&amp;gt;
                        &amp;lt;/ControlTemplate.Resources&amp;gt;
                        &amp;lt;BulletDecorator Background=&quot;Transparent&quot; SnapsToDevicePixels=&quot;true&quot;&amp;gt;
                            &amp;lt;BulletDecorator.Bullet&amp;gt;
                                &amp;lt;Border x:Name=&quot;ForegroundPanel&quot; BorderThickness=&quot;1&quot; Width=&quot;35&quot; Height=&quot;20&quot; CornerRadius=&quot;3&quot;&amp;gt;
                                    &amp;lt;Canvas&amp;gt;
                                        &amp;lt;!--원 색상--&amp;gt;
                                        &amp;lt;Border x:Name=&quot;CheckFlag&quot;
                                            Background=&quot;White&quot;  
                                            Width=&quot;19&quot; Height=&quot;18&quot; 
                                            CornerRadius=&quot;3&quot; 
                                            VerticalAlignment=&quot;Center&quot; 
                                            BorderThickness=&quot;1&quot; 
                                            RenderTransformOrigin=&quot;0.5,0.5&quot;&amp;gt;
                                            &amp;lt;Border.RenderTransform&amp;gt;
                                                &amp;lt;TransformGroup&amp;gt;
                                                    &amp;lt;ScaleTransform/&amp;gt;
                                                    &amp;lt;SkewTransform/&amp;gt;
                                                    &amp;lt;RotateTransform/&amp;gt;
                                                    &amp;lt;TranslateTransform/&amp;gt;
                                                &amp;lt;/TransformGroup&amp;gt;
                                            &amp;lt;/Border.RenderTransform&amp;gt;
                                            &amp;lt;Border.Effect&amp;gt;
                                                &amp;lt;DropShadowEffect 
                                                    ShadowDepth=&quot;1&quot; 
                                                    Direction=&quot;180&quot; /&amp;gt;
                                            &amp;lt;/Border.Effect&amp;gt;
                                        &amp;lt;/Border&amp;gt;
                                    &amp;lt;/Canvas&amp;gt;
                                &amp;lt;/Border&amp;gt;
                            &amp;lt;/BulletDecorator.Bullet&amp;gt;
                            &amp;lt;ContentPresenter HorizontalAlignment=&quot;{TemplateBinding HorizontalContentAlignment}&quot; Margin=&quot;{TemplateBinding Padding}&quot; RecognizesAccessKey=&quot;True&quot; SnapsToDevicePixels=&quot;{TemplateBinding SnapsToDevicePixels}&quot; VerticalAlignment=&quot;Center&quot;/&amp;gt;
                        &amp;lt;/BulletDecorator&amp;gt;
                        &amp;lt;ControlTemplate.Triggers&amp;gt;
                            &amp;lt;Trigger Property=&quot;HasContent&quot; Value=&quot;true&quot;&amp;gt;
                                &amp;lt;Setter Property=&quot;FocusVisualStyle&quot; 
                                        Value=&quot;{StaticResource CheckRadioFocusVisual}&quot;/&amp;gt;
                                &amp;lt;Setter Property=&quot;Padding&quot; 
                                        Value=&quot;4,0,0,0&quot;/&amp;gt;
                            &amp;lt;/Trigger&amp;gt;
                            &amp;lt;Trigger Property=&quot;IsEnabled&quot; Value=&quot;false&quot;&amp;gt;
                                &amp;lt;Setter Property=&quot;Foreground&quot; 
                                        Value=&quot;{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}&quot;/&amp;gt;
                            &amp;lt;/Trigger&amp;gt;
                            &amp;lt;Trigger Property=&quot;IsChecked&quot; Value=&quot;True&quot;&amp;gt;
                                &amp;lt;Setter TargetName=&quot;ForegroundPanel&quot; 
                                    Property=&quot;Background&quot; 
                                    Value=&quot;{StaticResource GreenBrush}&quot; /&amp;gt;
                                &amp;lt;Trigger.EnterActions&amp;gt;
                                    &amp;lt;BeginStoryboard x:Name=&quot;BeginStoryboardCheckedTrue&quot; Storyboard=&quot;{StaticResource StoryboardIsChecked}&quot; /&amp;gt;
                                    &amp;lt;RemoveStoryboard BeginStoryboardName=&quot;BeginStoryboardCheckedFalse&quot; /&amp;gt;
                                &amp;lt;/Trigger.EnterActions&amp;gt;
                            &amp;lt;/Trigger&amp;gt;
                            &amp;lt;Trigger Property=&quot;IsChecked&quot; Value=&quot;False&quot;&amp;gt;
                                &amp;lt;Setter TargetName=&quot;ForegroundPanel&quot; 
                                        Property=&quot;Background&quot; 
                                        Value=&quot;{StaticResource LightGrayBrush}&quot; /&amp;gt;
                                &amp;lt;Trigger.EnterActions&amp;gt;
                                    &amp;lt;BeginStoryboard x:Name=&quot;BeginStoryboardCheckedFalse&quot; 
                                                     Storyboard=&quot;{StaticResource StoryboardIsCheckedOff}&quot; /&amp;gt;
                                    &amp;lt;RemoveStoryboard BeginStoryboardName=&quot;BeginStoryboardCheckedTrue&quot; /&amp;gt;
                                &amp;lt;/Trigger.EnterActions&amp;gt;
                            &amp;lt;/Trigger&amp;gt;
                        &amp;lt;/ControlTemplate.Triggers&amp;gt;
                    &amp;lt;/ControlTemplate&amp;gt;
                &amp;lt;/Setter.Value&amp;gt;
            &amp;lt;/Setter&amp;gt;
        &amp;lt;/Style&amp;gt;
        
        &amp;lt;Style x:Key=&quot;CheckRadioFocusVisual&quot;&amp;gt;
            &amp;lt;Setter Property=&quot;Control.Template&quot;&amp;gt;
                &amp;lt;Setter.Value&amp;gt;
                    &amp;lt;ControlTemplate&amp;gt;
                        &amp;lt;Rectangle Margin=&quot;14,0,0,0&quot; SnapsToDevicePixels=&quot;true&quot; Stroke=&quot;{DynamicResource {x:Static SystemColors.ControlTextBrushKey}}&quot; StrokeThickness=&quot;1&quot; StrokeDashArray=&quot;1 2&quot;/&amp;gt;
                    &amp;lt;/ControlTemplate&amp;gt;
                &amp;lt;/Setter.Value&amp;gt;
            &amp;lt;/Setter&amp;gt;
        &amp;lt;/Style&amp;gt;
    &amp;lt;/Window.Resources&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1566269613617&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;        &amp;lt;CheckBox Style=&quot;{StaticResource SliderCheckBox}&quot;/&amp;gt;
        &amp;lt;CheckBox Style=&quot;{StaticResource SliderCheckBox_Square}&quot;/&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Microsoft .NET/WPF Style</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/48</guid>
      <comments>https://virtualgiraffe.tistory.com/48#entry48comment</comments>
      <pubDate>Tue, 20 Aug 2019 11:54:56 +0900</pubDate>
    </item>
    <item>
      <title>[WPF Tip] 쿼리 표현식을 이용한 검색(A query expression)</title>
      <link>https://virtualgiraffe.tistory.com/47</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;Screenshot 2019-07-15 at 15.44.02.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/clzhr4/btqwMduMCuv/0KmN51Y49beH98d745NeP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/clzhr4/btqwMduMCuv/0KmN51Y49beH98d745NeP0/img.png&quot; data-alt=&quot;입력된 문자가 포함된 단어를 검색하는 프로그램.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/clzhr4/btqwMduMCuv/0KmN51Y49beH98d745NeP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fclzhr4%2FbtqwMduMCuv%2F0KmN51Y49beH98d745NeP0%2Fimg.png&quot; data-filename=&quot;Screenshot 2019-07-15 at 15.44.02.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;입력된 문자가 포함된 단어를 검색하는 프로그램.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;2개의 ObservableCollection과 쿼리 표현식을 이용하여 쉽게 검색 기능 만드는 방법입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1563172811236&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Window x:Class=&quot;WPF_EXAMPLE_aQueryExpression.MainWindow&quot;
        xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
        xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
        xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;
        xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;
        mc:Ignorable=&quot;d&quot;
        Title=&quot;MainWindow&quot; Height=&quot;250&quot; Width=&quot;300&quot;&amp;gt;
    &amp;lt;Grid&amp;gt;
        &amp;lt;Grid.ColumnDefinitions&amp;gt;
            &amp;lt;ColumnDefinition Width=&quot;1*&quot;/&amp;gt;
            &amp;lt;ColumnDefinition Width=&quot;1*&quot;/&amp;gt;
        &amp;lt;/Grid.ColumnDefinitions&amp;gt;
        &amp;lt;Grid.RowDefinitions&amp;gt;
            &amp;lt;RowDefinition Height=&quot;auto&quot;/&amp;gt;
            &amp;lt;RowDefinition Height=&quot;1*&quot;/&amp;gt;
        &amp;lt;/Grid.RowDefinitions&amp;gt;
        
        &amp;lt;TextBox
            x:Name=&quot;tbText&quot;
            Grid.Row=&quot;0&quot; Grid.Column=&quot;0&quot;
            Text=&quot;이&quot;/&amp;gt;
        
        &amp;lt;Button
            x:Name=&quot;btnSearch&quot;
            Grid.Row=&quot;0&quot; Grid.Column=&quot;1&quot;
            Content=&quot;검색&quot; Click=&quot;BtnSearch_Click&quot;/&amp;gt;
        
        &amp;lt;ListView 
            x:Name=&quot;lvResult&quot; 
            Grid.Row=&quot;1&quot; Grid.Column=&quot;0&quot; Grid.ColumnSpan=&quot;2&quot;&amp;gt;
            &amp;lt;ListView.View&amp;gt;
                &amp;lt;GridView&amp;gt;
                    &amp;lt;GridViewColumn Header=&quot;Name&quot; &amp;gt;
                        &amp;lt;GridViewColumn.CellTemplate&amp;gt;
                            &amp;lt;DataTemplate&amp;gt;
                                &amp;lt;Label Content=&quot;{Binding}&quot;/&amp;gt; 
                            &amp;lt;/DataTemplate&amp;gt;
                        &amp;lt;/GridViewColumn.CellTemplate&amp;gt;
                    &amp;lt;/GridViewColumn&amp;gt;
                &amp;lt;/GridView&amp;gt;
            &amp;lt;/ListView.View&amp;gt;
        &amp;lt;/ListView&amp;gt;
    &amp;lt;/Grid&amp;gt;
&amp;lt;/Window&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1563172846591&quot; class=&quot;C# cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System.Collections.ObjectModel;
using System.Linq;
using System.Windows;

namespace WPF_EXAMPLE_aQueryExpression
{
    /// &amp;lt;summary&amp;gt;
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// &amp;lt;/summary&amp;gt;
    public partial class MainWindow : Window
    {
        private ObservableCollection&amp;lt;string&amp;gt; obData = new ObservableCollection&amp;lt;string&amp;gt;() { &quot;당근&quot;, &quot;오이&quot;, &quot;수박&quot;, &quot;토마토&quot;, &quot;이이&quot;, &quot;이만원&quot;, &quot;가지&quot;, &quot;오렌지&quot;, &quot;지우개&quot;, &quot;호박&quot; };
        private ObservableCollection&amp;lt;string&amp;gt; obResult { get; set; }

        public MainWindow()
        {
            InitializeComponent();
        }

        private void BtnSearch_Click(object sender, RoutedEventArgs e)
        {
            if (tbText.Text.Length &amp;gt; 0)
            {
                //쿼리 표션식을 이용한 데이터 선택
                obResult = new ObservableCollection&amp;lt;string&amp;gt;(from s in obData where s.Contains(tbText.Text) select s);

                //ItemsSource와 연결
                lvResult.ItemsSource = obResult;
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;별 내용은 없지만 필요하신 분을 위해 샘플 첨부합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/yUuyD/btqwLeHYPFZ/oTGvKiIKVLoBngwVx60gxK/WPF_EXAMPLE_aQueryExpression.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;WPF_EXAMPLE_aQueryExpression.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.04MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Microsoft .NET/WPF Tip</category>
      <category>c#</category>
      <category>EXPRESSION</category>
      <category>query</category>
      <category>Search</category>
      <category>virtualgiraffe</category>
      <category>WPF</category>
      <category>검색</category>
      <category>전자기린</category>
      <category>쿼리</category>
      <category>표현식</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/47</guid>
      <comments>https://virtualgiraffe.tistory.com/47#entry47comment</comments>
      <pubDate>Mon, 15 Jul 2019 15:49:01 +0900</pubDate>
    </item>
    <item>
      <title>[WPF] '_' 문자가 출력되지 않는 경우! (Underline, Underscore)</title>
      <link>https://virtualgiraffe.tistory.com/46</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;보통 Element에 Text형식으로 문자가 들어가게 되면 문제가 안 생기지만&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Content형식으로 문자를 넣게 되면 '_' 문자가 정상적으로 출력되지 않는 경우가 있습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;그런 경우 '_'문자가 accessKey로 분류되어 처리되었을 확률이 높습니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;이런 경우 '_' 문자를 &quot;__&quot;문자처럼 '_'를 하나 더 붙여주면 해결&lt;/span&gt;됩니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d3ZeAW/btqwvqnkbxy/4Px4Wj2vWOCiLAmYKWC1KK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d3ZeAW/btqwvqnkbxy/4Px4Wj2vWOCiLAmYKWC1KK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d3ZeAW/btqwvqnkbxy/4Px4Wj2vWOCiLAmYKWC1KK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd3ZeAW%2Fbtqwvqnkbxy%2F4Px4Wj2vWOCiLAmYKWC1KK%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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1562138676549&quot; class=&quot;html xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;Window x:Class=&quot;WPF_Underscore.MainWindow&quot;
        xmlns=&quot;http://schemas.microsoft.com/winfx/2006/xaml/presentation&quot;
        xmlns:x=&quot;http://schemas.microsoft.com/winfx/2006/xaml&quot;
        xmlns:d=&quot;http://schemas.microsoft.com/expression/blend/2008&quot;
        xmlns:mc=&quot;http://schemas.openxmlformats.org/markup-compatibility/2006&quot;
        mc:Ignorable=&quot;d&quot;
        Title=&quot;WPF_Underscore&quot; Height=&quot;300&quot; Width=&quot;300&quot;&amp;gt;
    &amp;lt;Button
        Width=&quot;100&quot; Height=&quot;100&quot;
       Content=&quot;_TEST __TEST&quot;/&amp;gt;
&amp;lt;/Window&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;_TEST 문자열은&amp;nbsp;&lt;span style=&quot;color: #333333;&quot;&gt;accessKey로 분류되어 TEST로 출력되고 두번째 __TEST는 원하는 결과값인 _TEST로 정상적으로 출력됨.&lt;/span&gt;&lt;/p&gt;</description>
      <category>Microsoft .NET/WPF</category>
      <category>'_' 문자 출력</category>
      <category>accesskey</category>
      <category>Underline</category>
      <category>underscore</category>
      <category>WPF</category>
      <category>_ 문자 출력</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/46</guid>
      <comments>https://virtualgiraffe.tistory.com/46#entry46comment</comments>
      <pubDate>Wed, 3 Jul 2019 19:25:43 +0900</pubDate>
    </item>
    <item>
      <title>[생활정보] 전세금 떼일 걱정 이제는 No!  전세보증금반환보증 특례 시행</title>
      <link>https://virtualgiraffe.tistory.com/45</link>
      <description>&lt;h2 style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum BarunGothic';&quot;&gt;미분양 관리지역에만 적용되던 &lt;span style=&quot;color: #f41a18;&quot;&gt;&quot;전세보증금반환보증 특례&quot;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;h2 style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Nanum BarunGothic';&quot;&gt;7월 말부터 &lt;span style=&quot;color: #f41a18;&quot;&gt;전국 확대 적용!&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ECT7t/btqwAHaI4Lh/Xq1JC7NlyMPpEWr7OdV4Bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ECT7t/btqwAHaI4Lh/Xq1JC7NlyMPpEWr7OdV4Bk/img.png&quot; data-alt=&quot;이미지 출처 : 주택도시보증공사 공식 페이스북 페이지&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ECT7t/btqwAHaI4Lh/Xq1JC7NlyMPpEWr7OdV4Bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FECT7t%2FbtqwAHaI4Lh%2FXq1JC7NlyMPpEWr7OdV4Bk%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;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 출처 : 주택도시보증공사 공식 페이스북 페이지&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;전세보증금반환보증이란?&lt;/h2&gt;
&lt;p&gt;&quot;전세보증금반환보증&quot;은 전세를 계약한 임차인이 보증에 가입하면, &lt;b&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;계약 만료 후 집주인으로부터 전세금을 돌려받지 못하면&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;color: #333333;&quot;&gt;집주인을 대신하여&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;보증 기관인&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;주택도시보증공사(HUG)에서&amp;nbsp;전세금을&amp;nbsp;임차인에게 지급&lt;/span&gt;&lt;/b&gt;하는 제도입니다.&lt;/span&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bTKfL1/btqwAHa1QaF/h9AsDtiXtAJsukUdFKj2pk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bTKfL1/btqwAHa1QaF/h9AsDtiXtAJsukUdFKj2pk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bTKfL1/btqwAHa1QaF/h9AsDtiXtAJsukUdFKj2pk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbTKfL1%2FbtqwAHa1QaF%2Fh9AsDtiXtAJsukUdFKj2pk%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;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;주택도시보증공사 공식 홈페이지에 올라온 전세보증금반환보증에 대한 상품개요에서 개인적으로 필요하다고 생각되는 부분을 정리한 자료입니다.&lt;/p&gt;
&lt;h2&gt;가입 조건&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 160px;&quot; border=&quot;1&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 21.1628%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.8372%; text-align: center; height: 20px;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 21.1628%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;대상주택&lt;/td&gt;
&lt;td style=&quot;width: 38.8372%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #36424d;&quot;&gt;단독, 다가구, 연립, 다세대, 주거용오피스텔, 아파트&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 21.1628%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;신청기간&lt;/td&gt;
&lt;td style=&quot;width: 38.8372%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #36424d;&quot;&gt;전세&lt;b&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;계약기간의 만료일 6개월 이전까지&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: 21.1628%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;신청대상&lt;/td&gt;
&lt;td style=&quot;width: 38.8372%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #36424d;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;1년&amp;nbsp;이상의&amp;nbsp;전세계약&lt;/span&gt;&lt;/b&gt;한&amp;nbsp;개인&amp;nbsp;또는&amp;nbsp;법인&amp;nbsp;임차인 (&lt;b&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;부부합산 연소득 1억 이하&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: 21.1628%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;전세보증금 한도금액&lt;/td&gt;
&lt;td style=&quot;width: 38.8372%; height: 20px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;수도권 5억 / 지방 3억&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 21.1628%; text-align: center; height: 20px;&quot; colspan=&quot;2&quot;&gt;보증기간&lt;/td&gt;
&lt;td style=&quot;width: 38.8372%; height: 20px;&quot;&gt;&lt;span style=&quot;color: #36424d;&quot;&gt;보증서 발급일 ~ 전세계약기간 &lt;b&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;만료일 후 1개월&lt;/span&gt;&lt;/b&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 20%; text-align: center; height: 40px;&quot; rowspan=&quot;2&quot;&gt;보증료&lt;/td&gt;
&lt;td style=&quot;width: 1.16279%; text-align: center; height: 20px;&quot;&gt;&lt;span style=&quot;color: #36424d;&quot;&gt;개인&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 38.8372%; height: 20px;&quot;&gt;
&lt;p id=&quot;SE-864695ae-079c-49b9-a2c9-30b621cc13b7&quot;&gt;&lt;span style=&quot;color: #36424d;&quot;&gt;아파트 : 연 0.128%&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b448e15e-fa7d-422c-8fbf-3ceed3a6d3d3&quot;&gt;&lt;span style=&quot;color: #36424d;&quot;&gt;그 외 주택 : 연 0.154%&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 20px;&quot;&gt;
&lt;td style=&quot;width: 1.16279%; text-align: center; height: 20px;&quot;&gt;법인&lt;/td&gt;
&lt;td style=&quot;width: 38.8372%; height: 20px;&quot;&gt;
&lt;p id=&quot;SE-630403b4-3fc7-11e9-af15-930e29c30b1c&quot;&gt;&lt;span&gt;아파트 : 연 0.205%&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-63042ac6-3fc7-11e9-af15-b58d6cdbb711&quot;&gt;&lt;span&gt;그 외 주택 : 연 0.222%&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2&gt;보증료&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 6.62785%; text-align: center;&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.3721%; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 6.62785%; text-align: center;&quot;&gt;보증료 산정식&lt;/td&gt;
&lt;td style=&quot;width: 43.3721%;&quot;&gt;
&lt;p&gt;보증료 = 보증금액 &amp;times; 보증료율 &amp;times; 보증기간에 해당하는 일수/365&lt;/p&gt;
&lt;p&gt;&lt;b&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;169,400원 =&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;55,000,000원&lt;/span&gt;&lt;/b&gt; * 0.00154 * ( 730(2년) / 365 )&lt;/span&gt;&amp;nbsp;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 6.62785%; text-align: center;&quot;&gt;
&lt;p&gt;&lt;span&gt;사회배려계층&lt;/span&gt;&lt;br /&gt;&lt;span&gt;할인대상&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;background-color: #8cf199;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;40% 할인&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;td style=&quot;width: 43.3721%;&quot;&gt;
&lt;h4&gt;&lt;b&gt;&lt;span style=&quot;color: #f41a18;&quot;&gt;보증료 40% 할인 대상자&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1. &lt;span style=&quot;color: #f41a18;&quot;&gt;보증신청인의(배우자 포함) 연소득이 4000만원 이하인 자&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2. 보증신청인의 민법상 &lt;span style=&quot;color: #f41a18;&quot;&gt;미성년 자녀가 3인 이상&lt;/span&gt;인 다자녀가구&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;3. 보증신청인 또는 배우자, 보증신청인(배우자 포함)의 &lt;span style=&quot;color: #f41a18;&quot;&gt;직계존비속인 세대원 중 1인 이상이 장애인&lt;/span&gt;증명서 발급대상자인 가구&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;4. 보증신청인 또는 배우자, 보증신청인(배우자 포함)의 &lt;span style=&quot;color: #f41a18;&quot;&gt;직계존속인 세대원 중 1인 이상이 만 65세 이상&lt;/span&gt;인 고령자가구 또는 노인부양가구*&lt;br /&gt;*노인부양가구의 경우 &lt;u&gt;보증신청일 기준 1년 이상의 기간 동안 만 65세 이상인 고령자와 동일한 세대를 구성하고 있는 가구에 한함&lt;/u&gt;)&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;5. 보증&lt;span style=&quot;color: #f41a18;&quot;&gt;신청인과 그의 현재 배우자의 합산 연소득이 60백만원 이하이고, 혼인기간이 5년이내인 신혼부부&lt;/span&gt;(3개월 이내 결혼 예정자 포함)인 경우&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;6. 보증신청인이 「&lt;span style=&quot;color: #f41a18;&quot;&gt;한부모가족지원법&lt;/span&gt;」에 따라 지원되는 한부모가족인 경우&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;7. 「다문화가족지원법」 제2조제1호에 따라 보증&lt;span style=&quot;color: #f41a18;&quot;&gt;신청인의 배우자가 외국인이거나 귀화로 인한 국적취득자 또는 배우자가 있는 보증신청인이 귀화로 인한 국적취득자&lt;/span&gt;인 가구&lt;/p&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&gt;&lt;span&gt;제2조(정의)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 법에서 사용하는 용어의 뜻은 다음과 같다. &amp;nbsp;&lt;span&gt;&amp;lt;개정 2011. 4. 4., 2015. 12. 1.&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;1. &quot;다문화가족&quot;이란 다음 각 목의 어느 하나에 해당하는 가족을 말한다.&lt;/p&gt;
&lt;p&gt;가.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;「재한외국인 처우 기본법」&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;제2조&lt;/a&gt;&lt;a&gt;제3호&lt;/a&gt;의 결혼이민자와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;「국적법」&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;제2조부터 제4조&lt;/a&gt;까지의 규정에 따라 대한민국 국적을 취득한 자로 이루어진 가족&lt;/p&gt;
&lt;p&gt;나.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;「국적법」&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;제3조&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;및&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;제4조&lt;/a&gt;에 따라 대한민국 국적을 취득한 자와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;같은 법&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;제2조부터 제4조&lt;/a&gt;까지의 규정에 따라 대한민국 국적을 취득한 자로 이루어진 가족&lt;/p&gt;
&lt;p&gt;2. &quot;결혼이민자등&quot;이란 다문화가족의 구성원으로서 다음 각 목의 어느 하나에 해당하는 자를 말한다.&lt;/p&gt;
&lt;p&gt;가.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;「재한외국인 처우 기본법」&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;제2조&lt;/a&gt;&lt;a&gt;제3호&lt;/a&gt;의 결혼이민자&lt;/p&gt;
&lt;p&gt;나.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;「국적법」&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;제4조&lt;/a&gt;에 따라 귀화허가를 받은 자&lt;/p&gt;
&lt;p&gt;3. &quot;아동ㆍ청소년&quot;이란 24세 이하인 사람을 말한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;8.. 보증&lt;span style=&quot;color: #f41a18;&quot;&gt;신청인 또는 배우자, 보증신청인 (배우자포함)의 직계존비속인 세대원 중 1인 이상이 국가유공자 또는 국가유공자의 선순위 유족&lt;/span&gt;인 가구로서 독립유공자(유족)확인원, 국가유공자(유족)확인원, 보훈보상대상자(유족)확인원, 5.18민주유공자(유족)확인원, 특수임무유공자(유족)확인원, 고엽제법 적용대상 확인원, 지원대상자(유족) 확인원으로 유공자 본인 또는 수권자임을 확인 받은 가구&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;9. 보증&lt;span style=&quot;color: #f41a18;&quot;&gt;신청인 또는 배우자, 보증신청인(배우자포함)의 직계존비속인 세대원 중 1인 이상이 「의사상자등 예우 및 지원에 관한 법률」에 따라 의사자 증서, 의사자 유족증, 의상자 증서, 의상자증으로 의상자 본인 또는 의사상자 수권자&lt;/span&gt;임을 확인 받은 가구&lt;/p&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&gt;&lt;span&gt;제2조(정의)&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 법에서 사용하는 용어의 정의는 다음과 같다. &amp;nbsp;&lt;span&gt;&amp;lt;개정 2008. 2. 29., 2010. 1. 18.&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;1. &quot;구조행위&quot;란 자신의 생명 또는 신체상의 위험을 무릅쓰고 급박한 위해에 처한 다른 사람의 생명ㆍ신체 또는 재산을 구하기 위한 직접적ㆍ적극적 행위를 말한다.&lt;/p&gt;
&lt;p&gt;2. &quot;의사자(義死者)&quot;란 직무 외의 행위로서 구조행위를 하다가 사망(의상자가 그 부상으로 인하여 사망한 경우를 포함한다)하여 보건복지부장관이 이 법에 따라 의사자로 인정한 사람을 말한다.&lt;/p&gt;
&lt;p&gt;3. &quot;의상자(義傷者)&quot;란 직무 외의 행위로서 구조행위를 하다가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a&gt;대통령령&lt;/a&gt;으로 정하는 신체상의 부상을 입어 보건복지부장관이 이 법에 따라 의상자로 인정한 사람을 말한다.&lt;/p&gt;
&lt;p&gt;4. &quot;의사상자&quot;란 의사자 및 의상자를 말한다.&lt;/p&gt;
&lt;p&gt;5. &quot;의사자유족&quot;이란 의사자의 배우자(사실상의 혼인관계에 있는 자를 포함한다. 이하 같다), 자녀, 부모, 조부모 또는 형제자매를 말한다.&lt;/p&gt;
&lt;p&gt;6. &quot;의상자가족&quot;이란 의상자의 배우자, 자녀, 부모, 조부모 또는 형제자매를 말한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;10. 보증신청인이 배우자, 직계존비속, 친족 등의 동거인 없이 &lt;span style=&quot;color: #f41a18;&quot;&gt;단독 세대주인 만 65세 이상&lt;/span&gt;의 고령자&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 6.62785%; text-align: center;&quot;&gt;&lt;span&gt;10% 할인&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.3721%;&quot;&gt;
&lt;h4&gt;&lt;span&gt;청년가구 할인&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span&gt;만19세~34세 이하의 청년가구가 연소득 4천만원 초과 ~ 5천만원 이하인 경우&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;span&gt;모범납세자 할인&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;모범납세자가 보증신청 시&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 6.62785%; text-align: center;&quot;&gt;3% 할인&lt;/td&gt;
&lt;td style=&quot;width: 43.3721%;&quot;&gt;
&lt;h4&gt;전자계약 할인&lt;/h4&gt;
&lt;p&gt;&lt;span&gt;국토부 부동산거래 전자계약시스템으로 전세계약 체결시&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;span&gt;인터넷보증 할인&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;인터넷보증 이용시&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4&gt;&lt;span&gt;&lt;span&gt;일시납 할인&lt;/span&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;보증료를 일시에 전액 납부한 경우 1년 초과분에 대하여 3% 할인&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 6.62785%; text-align: center;&quot;&gt;&lt;span style=&quot;color: #36424d;&quot;&gt;보증료 할증&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 43.3721%;&quot;&gt;&lt;span style=&quot;color: #36424d;&quot;&gt;보증신청인이 개인(주택임대차보호법 적용 중소기업임차인 포함)인 경우로서 &lt;span style=&quot;color: #f41a18;&quot;&gt;주택가격 대비 선순위 채권금액이 50%를 초과하는 경우 산출한 보증료에서 10%를 할증&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>기타 정보/생활정보</category>
      <category>Hug</category>
      <category>virtualgiraffe</category>
      <category>반환보증</category>
      <category>전세보증금</category>
      <category>전세보증금 반환보증</category>
      <category>전자기린</category>
      <category>전자기린 스튜디오</category>
      <category>주택도시보증공사</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/45</guid>
      <comments>https://virtualgiraffe.tistory.com/45#entry45comment</comments>
      <pubDate>Wed, 3 Jul 2019 15:03:37 +0900</pubDate>
    </item>
    <item>
      <title>[WPF] Timer  ( DispatcherTimer )</title>
      <link>https://virtualgiraffe.tistory.com/44</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;Timer를 생성하고 1초 주기로 출력창에 시간을 출력하는 예제입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/IWDFf/btqwuk19wh9/6mKFaQ6civkDue7IDntei0/WPF_EXAMPLE_Timer%28DispatcherTimer%29.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;WPF_EXAMPLE_Timer(DispatcherTimer).zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.03MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1562126361235&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;
using System.Windows;

namespace WPF_EXAMPLE_Timer_DispatcherTimer_
{
    /// &amp;lt;summary&amp;gt;
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// &amp;lt;/summary&amp;gt;
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            #region Timer
            System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer();

            //호출 함수 설정
            timer.Tick += timer_Tick;

            //함수 호출 주기 설정
            timer.Interval = TimeSpan.FromMilliseconds(1000);

            //타이머 시작
            timer.Start();
            #endregion

        }

        void timer_Tick(object sender, EventArgs e)
        {
            System.Console.WriteLine(System.DateTime.Now.ToString(&quot;hh:mm:ss.ffff&quot;));
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Microsoft .NET/WPF</category>
      <category>c#</category>
      <category>CS</category>
      <category>Dispatcher</category>
      <category>DispatcherTimer</category>
      <category>timer</category>
      <category>virtualgiraffe</category>
      <category>WPF</category>
      <category>전자기린</category>
      <category>전지기린 스튜디오</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/44</guid>
      <comments>https://virtualgiraffe.tistory.com/44#entry44comment</comments>
      <pubDate>Wed, 3 Jul 2019 13:02:40 +0900</pubDate>
    </item>
    <item>
      <title>[C# Console] Console 배경 색상 및 글씨색상 변경</title>
      <link>https://virtualgiraffe.tistory.com/42</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;Console&amp;nbsp;배경&amp;nbsp;색상&amp;nbsp;및&amp;nbsp;글씨 색상&amp;nbsp;변경&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1562071923251&quot; class=&quot;c++ cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Console.Title = &quot;콘솔 테스트&quot;;                          //타이틀변경

Console.BackgroundColor = ConsoleColor.Gray; 		//배경색상변경

Console.ForegroundColor = ConsoleColor.Red;   		//글씨색상변경

Console.Clear();                                        //화면지우기

Console.Beep();                                         //삑!! 소리

Console.WriteLine(&quot;색상을 변경했습니다.&quot;);		//출력후 줄바꿈

Console.ReadLine();                                     //입력받음

Console.ResetColor();                                   //콘솔배경 전경색 기본값설정

Console.SetCursorPosition(10, 10);                      //커서의 위치 설정&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Microsoft .NET/C#</category>
      <category>Beep</category>
      <category>command</category>
      <category>console</category>
      <category>Instruction</category>
      <category>명령어</category>
      <category>배경색</category>
      <category>비프음</category>
      <category>커서이동</category>
      <category>콘솔</category>
      <category>폰트</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/42</guid>
      <comments>https://virtualgiraffe.tistory.com/42#entry42comment</comments>
      <pubDate>Tue, 2 Jul 2019 21:54:30 +0900</pubDate>
    </item>
    <item>
      <title>[C# Console] Console Input Key (키 입력)</title>
      <link>https://virtualgiraffe.tistory.com/41</link>
      <description>&lt;p style=&quot;text-align: center;&quot;&gt;반복문을 사용하여 지속적으로 키 입력을 받고&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;입력받은 값으로 문자(#)을 움직이는 간단한 예제입니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/b4fWjU/btqwtRFQGlx/geem3O0Euf94A9cTI1hce0/csConsole_EXAMPLE_KEY.zip?attach=1&amp;amp;knm=tfile.zip&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;csConsole_EXAMPLE_KEY.zip&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.03MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1562070886487&quot; class=&quot;C# cs&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;using System;

namespace csConsole_EXAMPLE_KEY
{
    class Program
    {
        static void Main(string[] args)
        {
            //키입력값받는 변수
            ConsoleKeyInfo cki;         

            //#의 시작위치
            int x = 10, y = 10;

            
            while (true)//무한루프    
            {
                //화면초기화
                Console.Clear();

                //커서를 x,y의 위치로 이동
                Console.SetCursorPosition(x, y);

                //#을 입력
                Console.Write('#');

                //누르는 키를 입력받아 true값이면 넣음
                cki = Console.ReadKey(true);        


                switch (cki.Key)
                {
                    case ConsoleKey.LeftArrow:      x--;    break;

                    case ConsoleKey.RightArrow:     x++;    break;

                    case ConsoleKey.UpArrow:        y--;    break;

                    case ConsoleKey.DownArrow:      y++;    break;

                    case ConsoleKey.Q:  return;
                }
            }
        }
    }
}
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Microsoft .NET/C#</category>
      <category>c#</category>
      <category>console</category>
      <category>CS</category>
      <category>Key</category>
      <category>virtualgiraffe</category>
      <category>전자기린</category>
      <category>전자기린 스튜디오</category>
      <category>키 입력</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/41</guid>
      <comments>https://virtualgiraffe.tistory.com/41#entry41comment</comments>
      <pubDate>Tue, 2 Jul 2019 21:35:45 +0900</pubDate>
    </item>
    <item>
      <title>[Nas] Docker 설치 및 Docker에 MySql설치하기</title>
      <link>https://virtualgiraffe.tistory.com/40</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;blob&quot; width=&quot;250&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cfYFDE/btqwr5RGrsi/K9WHLji8pHJo0E4Xuechu0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cfYFDE/btqwr5RGrsi/K9WHLji8pHJo0E4Xuechu0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cfYFDE/btqwr5RGrsi/K9WHLji8pHJo0E4Xuechu0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcfYFDE%2Fbtqwr5RGrsi%2FK9WHLji8pHJo0E4Xuechu0%2Fimg.png&quot; data-filename=&quot;blob&quot; width=&quot;250&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;2.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMMBSa/btqwrBDtF4m/zKRXtDngziFVRBRsbFnBKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMMBSa/btqwrBDtF4m/zKRXtDngziFVRBRsbFnBKK/img.png&quot; data-alt=&quot;패키지 센터에서 Docker를 설치합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMMBSa/btqwrBDtF4m/zKRXtDngziFVRBRsbFnBKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMMBSa%2FbtqwrBDtF4m%2FzKRXtDngziFVRBRsbFnBKK%2Fimg.png&quot; data-filename=&quot;2.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;패키지 센터에서 Docker를 설치합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;3.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bELJEg/btqwsGjxdP7/Bp83577HFQtg1bxkUffHK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bELJEg/btqwsGjxdP7/Bp83577HFQtg1bxkUffHK1/img.png&quot; data-alt=&quot;Docker 설치 및 실행 후 mysql 레지스트리를 다운로드합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bELJEg/btqwsGjxdP7/Bp83577HFQtg1bxkUffHK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbELJEg%2FbtqwsGjxdP7%2FBp83577HFQtg1bxkUffHK1%2Fimg.png&quot; data-filename=&quot;3.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;Docker 설치 및 실행 후 mysql 레지스트리를 다운로드합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;4.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2dHDV/btqwrRF41cz/1gou3Zuo57ynGzcXHW3T9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2dHDV/btqwrRF41cz/1gou3Zuo57ynGzcXHW3T9k/img.png&quot; data-alt=&quot;다운로드했던 레지스트리를 실행하면 아래와 같은 생성이 진행됩니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2dHDV/btqwrRF41cz/1gou3Zuo57ynGzcXHW3T9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2dHDV%2FbtqwrRF41cz%2F1gou3Zuo57ynGzcXHW3T9k%2Fimg.png&quot; data-filename=&quot;4.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;다운로드했던 레지스트리를 실행하면 아래와 같은 생성이 진행됩니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;5.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b05Doh/btqwrTjC2gO/e42YjIHw5ODL3ActUau3q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b05Doh/btqwrTjC2gO/e42YjIHw5ODL3ActUau3q0/img.png&quot; data-alt=&quot;컨테이너 이름을 설정하고 ※고급 설정\포트 설정으로 이동하여 포트 설정을 합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b05Doh/btqwrTjC2gO/e42YjIHw5ODL3ActUau3q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb05Doh%2FbtqwrTjC2gO%2Fe42YjIHw5ODL3ActUau3q0%2Fimg.png&quot; data-filename=&quot;5.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;컨테이너 이름을 설정하고 ※고급 설정\포트 설정으로 이동하여 포트 설정을 합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;고급 설정\환경으로 이동하여 아래와 같은 변수를 추가하고 값을 설정합니다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MYSQL_ROOT_PASSWORD&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MYSQL_USER&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MYSQL_DATABASE&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;MYSQL_PASSWORD&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;7.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/u5yxT/btqwse1ViYX/9ex2KVxovuqk5QDRvL1TK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/u5yxT/btqwse1ViYX/9ex2KVxovuqk5QDRvL1TK0/img.png&quot; data-alt=&quot;적용 후 다음&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/u5yxT/btqwse1ViYX/9ex2KVxovuqk5QDRvL1TK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fu5yxT%2Fbtqwse1ViYX%2F9ex2KVxovuqk5QDRvL1TK0%2Fimg.png&quot; data-filename=&quot;7.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;적용 후 다음&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;8.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HZpNx/btqwsGYaMwX/iaatFWaaCBoclhr8yiuCnk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HZpNx/btqwsGYaMwX/iaatFWaaCBoclhr8yiuCnk/img.png&quot; data-alt=&quot;정보 확인 후 적용합니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HZpNx/btqwsGYaMwX/iaatFWaaCBoclhr8yiuCnk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHZpNx%2FbtqwsGYaMwX%2FiaatFWaaCBoclhr8yiuCnk%2Fimg.png&quot; data-filename=&quot;8.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;정보 확인 후 적용합니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-filename=&quot;9.png&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BamNB/btqwrBQ1f4a/nWbj07p1xrijyBCYZ1kZGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BamNB/btqwrBQ1f4a/nWbj07p1xrijyBCYZ1kZGk/img.png&quot; data-alt=&quot;database의 생성이 완료되었습니다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BamNB/btqwrBQ1f4a/nWbj07p1xrijyBCYZ1kZGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBamNB%2FbtqwrBQ1f4a%2FnWbj07p1xrijyBCYZ1kZGk%2Fimg.png&quot; data-filename=&quot;9.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;/&gt;&lt;/span&gt;&lt;figcaption&gt;database의 생성이 완료되었습니다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;hr&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span&gt;이제 정상적으로 설치되었는지 확인해보기위해 HeidiSQL을 사용하여 확인합시다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://www.heidisql.com/download.php&quot;&gt;&lt;span&gt;다운로드&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Synology Nas/설정 방법</category>
      <category>Database</category>
      <category>DB</category>
      <category>docker</category>
      <category>MYSQL</category>
      <category>Nas</category>
      <category>synology</category>
      <category>synology nas</category>
      <category>virtualgiraffe</category>
      <category>데이터베이스</category>
      <category>전자기린</category>
      <author>전자기린</author>
      <guid isPermaLink="true">https://virtualgiraffe.tistory.com/40</guid>
      <comments>https://virtualgiraffe.tistory.com/40#entry40comment</comments>
      <pubDate>Mon, 1 Jul 2019 19:18:14 +0900</pubDate>
    </item>
  </channel>
</rss>