<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>jangkimo 님의 블로그</title>
    <link>https://jangkimo.tistory.com/</link>
    <description>jangkimo 님의 블로그 입니다.</description>
    <language>ko</language>
    <pubDate>Thu, 28 May 2026 12:10:22 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>jangkimo</managingEditor>
    <image>
      <title>jangkimo 님의 블로그</title>
      <url>https://tistory1.daumcdn.net/tistory/7158396/attach/9f31310a512d440a897c18d7cf39022e</url>
      <link>https://jangkimo.tistory.com</link>
    </image>
    <item>
      <title>Docker 컨테이너와 이미지: 개념과 차이점, 기본 명령어</title>
      <link>https://jangkimo.tistory.com/19</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Docker를 사용하다 보면 **컨테이너(Container)**와 **이미지(Image)**라는 두 가지 주요 개념을 자주 접하게 됩니다. 이 둘은 Docker에서 중요한 역할을 하며, 이를 이해하는 것은 Docker의 활용과 운영에 필수적입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. Docker 이미지(Image)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Docker 이미지&lt;/b&gt;는 어플리케이션과 그 실행 환경을 미리 정의해둔 &lt;b&gt;불변의 템플릿 파일&lt;/b&gt;입니다. 소스 코드, 라이브러리, 의존성, 파일, 환경 설정 등이 포함되어 있으며, 이러한 이미지를 통해 동일한 실행 환경을 재현할 수 있습니다. 이미지는 단일 파일로 관리되며 여러 계층(layer)으로 구성됩니다.&lt;/p&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;/b&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;/b&gt;: 이미지는 수정되지 않으며, 변경하려면 새로운 이미지가 생성됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;계층 구조&lt;/b&gt;: 이미지의 각 계층은 파일 시스템에서 필요한 부분만 포함하며, 덕분에 효율적이고 빠르게 이미지를 배포하고 관리할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. Docker 컨테이너(Container)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Docker 컨테이너&lt;/b&gt;는 이미지를 실행한 상태로, 실제 어플리케이션이 동작하는 &lt;b&gt;격리된 환경&lt;/b&gt;입니다. 컨테이너는 이미지의 복사본으로 시작되며, 필요한 실행 파일, 환경 변수 등을 포함해 작동합니다. 여러 컨테이너가 동일한 이미지를 기반으로 생성될 수 있으며, 각 컨테이너는 독립적으로 작동하여 충돌을 피할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;특징&lt;/b&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;/b&gt;: 컨테이너는 독립된 네트워크, 파일 시스템, 프로세스를 갖고 다른 컨테이너와 영향을 주고받지 않습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;변경 가능성&lt;/b&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;style5&quot; /&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Docker 이미지와 컨테이너의 차이점&lt;/h4&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: 10.5426%;&quot;&gt;&lt;b&gt; 개념 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 81.3566%;&quot;&gt;&lt;b&gt; 설명 &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 8.10072%;&quot;&gt;&lt;b&gt; 비유 &lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.5426%;&quot;&gt;이미지&lt;/td&gt;
&lt;td style=&quot;width: 81.3566%;&quot;&gt;어플리케이션 실행에 필요한 모든 설정과 데이터를 포함한 &lt;b&gt;템플릿&lt;/b&gt; (정적)&lt;/td&gt;
&lt;td style=&quot;width: 8.10072%;&quot;&gt;설계도&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 10.5426%;&quot;&gt;컨테이너&lt;/td&gt;
&lt;td style=&quot;width: 81.3566%;&quot;&gt;이미지를 기반으로 실행되는 어플리케이션의 &lt;b&gt;실행 환경&lt;/b&gt; (동적)&lt;/td&gt;
&lt;td style=&quot;width: 8.10072%;&quot;&gt;건축물&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;차이점&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;이미지&lt;/b&gt;는 변하지 않는 파일 템플릿이며, &lt;b&gt;컨테이너&lt;/b&gt;는 이미지를 기반으로 생성된 실제 실행 환경입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;이미지&lt;/b&gt;는 한 번 생성 후 여러 컨테이너에서 재사용될 수 있고, &lt;b&gt;컨테이너&lt;/b&gt;는 각기 다른 상태를 가질 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;둘 다 필요한 이유&lt;/b&gt;:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;이미지는 &lt;b&gt;효율적 배포&lt;/b&gt;와 &lt;b&gt;일관된 실행 환경 제공&lt;/b&gt;에 유리하고, 컨테이너는 &lt;b&gt;격리된 환경에서 어플리케이션을 실행&lt;/b&gt;하여 운영 환경에서 안정성을 제공합니다. 이미지를 통해 컨테이너를 빠르게 생성할 수 있어 배포와 테스트도 쉽게 관리할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Docker 기본 명령어&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&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;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker images: 현재 로컬에 저장된 이미지 리스트를 표시합니다.&lt;/li&gt;
&lt;li&gt;docker rmi &amp;lt;image_id&amp;gt;: 지정한 이미지를 삭제합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;컨테이너 관련 명령어&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;docker ps: 실행 중인 컨테이너 목록을 표시합니다.&lt;/li&gt;
&lt;li&gt;docker ps -a: 종료된 컨테이너를 포함한 전체 컨테이너 목록을 표시합니다.&lt;/li&gt;
&lt;li&gt;docker run &amp;lt;image_name&amp;gt;: 지정한 이미지를 기반으로 컨테이너를 생성하고 실행합니다.&lt;/li&gt;
&lt;li&gt;docker stop &amp;lt;container_id&amp;gt;: 실행 중인 컨테이너를 중지합니다.&lt;/li&gt;
&lt;li&gt;docker rm &amp;lt;container_id&amp;gt;: 지정한 컨테이너를 삭제합니다.&lt;/li&gt;
&lt;li&gt;docker run -it &amp;lt;image_name&amp;gt; /bin/bash: 컨테이너를 실행하고, 바로 내부로 접속하여 명령을 입력할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 명령어 사용법&lt;/p&gt;
&lt;pre id=&quot;code_1730093446512&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 로컬 이미지 목록 확인
docker images

# 실행 중인 컨테이너 목록 확인
docker ps

# 종료된 컨테이너를 포함한 전체 컨테이너 목록 확인
docker ps -a

# 컨테이너 중지
docker stop &amp;lt;container_id&amp;gt;

# 컨테이너 삭제
docker rm &amp;lt;container_id&amp;gt;

# 이미지 삭제
docker rmi &amp;lt;image_id&amp;gt;

# 이미지를 기반으로 새로운 컨테이너 실행
docker run &amp;lt;image_name&amp;gt;

# 컨테이너 내부에 접속
docker run -it &amp;lt;image_name&amp;gt; /bin/bash&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;이러한 명령어는 Docker에서 이미지를 다루고 컨테이너를 관리하는 데 필수적입니다. 컨테이너가 제공하는 격리된 환경에서 작업을 수행하고, 다양한 운영 환경에서 일관된 성능을 제공하는 Docker의 기능을 충분히 활용할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker 이미지와 컨테이너는 각각 다른 역할을 하며, 이를 통해 효율적이고 안정적인 어플리케이션 개발 및 배포가 가능합니다. 다음 글에서는 Docker에서 이미지 생성 방법과 이미지 및 컨테이너 간의 관계를 더 자세히 탐구해 보겠습니다.&lt;/p&gt;</description>
      <author>jangkimo</author>
      <guid isPermaLink="true">https://jangkimo.tistory.com/19</guid>
      <comments>https://jangkimo.tistory.com/19#entry19comment</comments>
      <pubDate>Mon, 28 Oct 2024 14:31:19 +0900</pubDate>
    </item>
    <item>
      <title>Docker와 컨테이너: 현대 개발의 필수 도구</title>
      <link>https://jangkimo.tistory.com/18</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AIqks/btsKkYkhnVC/KnIvEsMxeDm0sx2DpEIkYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AIqks/btsKkYkhnVC/KnIvEsMxeDm0sx2DpEIkYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AIqks/btsKkYkhnVC/KnIvEsMxeDm0sx2DpEIkYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAIqks%2FbtsKkYkhnVC%2FKnIvEsMxeDm0sx2DpEIkYK%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;256&quot; height=&quot;256&quot; data-origin-width=&quot;256&quot; data-origin-height=&quot;256&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 몇 년 동안 &lt;b&gt;Docker&lt;/b&gt;는 개발자와 운영 팀 모두에게 없어서는 안 될 도구로 자리 잡았습니다. 특히, 어플리케이션을 배포하고 관리하는 방식에서 Docker는 혁신적인 변화를 가져왔습니다. 이 글에서는 Docker가 왜 필요한지, 그리고 어떻게 활용될 수 있는지 자세히 알아보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Docker란 무엇인가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker는 **컨테이너(Container)**라는 격리된 환경에서 어플리케이션을 실행할 수 있게 해주는 &lt;b&gt;가상화 도구&lt;/b&gt;입니다. 일반적으로 어플리케이션을 실행하려면 서버, 라이브러리, OS와 같은 다양한 요소가 필요하지만, Docker는 이러한 요소들을 &lt;b&gt;컨테이너&lt;/b&gt;라는 단일 패키지로 묶어 어디서든 동일한 환경에서 실행할 수 있게 합니다. 덕분에 개발 환경, 테스트 환경, 프로덕션 환경 간의 차이로 인해 발생할 수 있는 오류를 최소화할 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Docker의 필요성&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;일관된 실행 환경&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다양한 환경에서 동일한 어플리케이션을 실행할 때 환경 설정이 달라 오류가 발생하는 경우가 많습니다. Docker는 &lt;b&gt;컨테이너 내부에서 모든 의존성을 포함한 환경을 구축&lt;/b&gt;해 줌으로써, 어디서나 동일하게 어플리케이션을 실행할 수 있도록 보장합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;빠르고 효율적인 배포&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker 컨테이너는 가볍고 빠르며, 배포가 간단합니다. 일반적인 가상 머신(VM)과 비교해 Docker는 &lt;b&gt;운영 체제를 공유&lt;/b&gt;하기 때문에 더 적은 자원으로 더 많은 어플리케이션을 실행할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;DevOps의 필수 도구&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker는 DevOps의 원활한 협업과 CI/CD(지속적 통합 및 지속적 배포) 파이프라인을 구성하는 데 중요한 역할을 합니다. Docker 이미지로 생성된 컨테이너는 쉽게 배포될 수 있으며, 업데이트와 롤백도 간단하게 처리할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;높은 이식성&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker 이미지는 OS에 관계없이 동일하게 동작하므로, 리눅스, 윈도우, 맥 OS에서 모두 사용이 가능합니다. 이를 통해 특정 플랫폼에 종속되지 않고, 이식성이 높은 어플리케이션을 개발할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Docker의 활용 방안&lt;/h3&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;개발 환경 설정&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker를 사용하면 모든 개발자가 동일한 개발 환경을 사용할 수 있습니다. 각 개발자의 PC에서 일관된 환경을 유지하여, 개발 초기 단계부터 배포 환경과 유사한 상태에서 작업을 진행할 수 있습니다. 이는 환경 차이로 인한 버그를 줄이는 데 큰 도움이 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;테스트 및 CI/CD 파이프라인 구축&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker 이미지를 사용해 테스트 환경을 손쉽게 구축할 수 있으며, 이를 통해 테스트 자동화를 더욱 효과적으로 진행할 수 있습니다. 또한, CI/CD 파이프라인에서 Docker 컨테이너를 사용하면 새로운 기능이나 패치를 빠르게 배포하고 롤백할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;마이크로서비스 아키텍처&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker는 마이크로서비스 아키텍처에서 핵심 역할을 합니다. 마이크로서비스 아키텍처는 서비스들을 개별적인 컨테이너로 분리해 관리할 수 있도록 하여, 특정 서비스에만 변경 사항이 있을 때도 다른 서비스에 영향을 미치지 않고 독립적으로 배포와 업데이트가 가능하게 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;서버 자원 관리 및 비용 절감&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker는 가상화 방식으로 인해 서버 자원을 절약하고, 리소스를 효율적으로 활용할 수 있습니다. 또한, 가벼운 컨테이너를 활용해 하드웨어 자원을 줄일 수 있어 비용 절감 효과도 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마무리: Docker로 시작하는 컨테이너와 이미지 관리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Docker는 개발자와 운영자 모두에게 많은 이점을 제공하는 강력한 도구입니다. 환경 설정부터 배포까지의 프로세스를 단순화하고, 어플리케이션이 어디서나 일관되게 실행될 수 있도록 돕습니다. 이제 여러분은 Docker가 제공하는 강력한 기능과 그 필요성에 대해 어느 정도 이해하셨을 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;다음 글에서는 Docker의 주요 구성 요소 중 하나인 컨테이너와 이미지에 대해 자세히 알아보겠습니다.&lt;/b&gt; Docker 컨테이너가 실제로 어떻게 작동하고, 이미지가 컨테이너와 어떤 관계가 있는지 함께 탐구해 봅시다.&lt;/p&gt;</description>
      <category>도커 #docker</category>
      <author>jangkimo</author>
      <guid isPermaLink="true">https://jangkimo.tistory.com/18</guid>
      <comments>https://jangkimo.tistory.com/18#entry18comment</comments>
      <pubDate>Mon, 28 Oct 2024 14:19:06 +0900</pubDate>
    </item>
    <item>
      <title>Inception v1 네트워크에서 1x1 Conv 사용의 이유</title>
      <link>https://jangkimo.tistory.com/17</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Inception v1&lt;/b&gt;은 2014년 구글이 발표한 &lt;b&gt;GoogLeNet&lt;/b&gt; 구조에서 처음 도입된 혁신적인 네트워크 아키텍처입니다. 이 네트워크는 여러 크기의 필터(1x1, 3x3, 5x5)를 병렬로 사용해 이미지에서 다양한 크기의 특징을 추출하는 것이 핵심입니다. 그 중에서 특히 **1x1 convolution(컨볼루션)**의 사용은 매우 중요한 역할을 합니다. 이번 글에서는 Inception v1에서 &lt;b&gt;1x1 Conv&lt;/b&gt;를 사용하는 이유를 설명하고, 그 이점을 예시와 함께 살펴보겠습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 1x1 Conv란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일반적으로 &lt;b&gt;convolutional layer&lt;/b&gt;는 특정 크기의 필터(예: 3x3, 5x5)를 이용하여 입력 이미지에서 지역적인 특징을 추출합니다. 그러나 Inception 네트워크에서는 &lt;b&gt;1x1 필터&lt;/b&gt;도 함께 사용됩니다. 1x1 Conv는 다음과 같이 작동합니다:&lt;/p&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;/b&gt;가 1x1이므로, &lt;b&gt;하나의 픽셀&lt;/b&gt;만을 곱셈 연산에 사용합니다.&lt;/li&gt;
&lt;li&gt;하지만 여러 개의 필터를 적용하여 &lt;b&gt;채널 방향&lt;/b&gt;으로 연산을 수행하게 됩니다. 즉, &lt;b&gt;입력 채널을 줄이거나 늘리는 역할&lt;/b&gt;을 하게 됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 1x1 Conv의 주요 역할&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.1. &lt;b&gt;차원 축소(Dimensionality Reduction)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CNN에서 계산량은 주로 &lt;b&gt;채널 수와 필터 크기&lt;/b&gt;에 의존합니다. 필터 크기를 늘리면 당연히 연산량도 증가합니다. Inception 네트워크는 1x1 Conv를 사용하여 &lt;b&gt;채널 수를 줄임으로써&lt;/b&gt; 연산량을 크게 줄일 수 있습니다. 이를 &lt;b&gt;차원 축소&lt;/b&gt;라고 부릅니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시:&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 3x3 Conv 필터를 사용하여 채널 수가 &lt;b&gt;256&lt;/b&gt;인 입력에 대해 연산을 한다고 가정해봅시다. 계산량을 비교해볼까요?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;3x3 Conv 필터 연산량&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;입력 채널 수 = 256&lt;/li&gt;
&lt;li&gt;출력 채널 수 = 512&lt;/li&gt;
&lt;li&gt;한 번의 3x3 필터 연산에 필요한 계산량: &lt;span&gt;&lt;span&gt;&lt;span&gt;3&amp;times;3&amp;times;256=2,304&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;만약 512개의 3x3 필터를 사용한다면, 총 연산량은: &lt;span&gt;&lt;span&gt;&lt;span&gt;2,304&amp;times;512=1,179,648&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만, 만약 1x1 Conv를 사용하여 먼저 입력 채널 수를 &lt;b&gt;64&lt;/b&gt;로 줄인 다음 3x3 Conv를 적용한다면 어떻게 될까요?&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;1x1 Conv로 차원 축소 후 3x3 Conv 적용&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;1x1 Conv&lt;/b&gt;로 채널을 256에서 64로 줄인 후 3x3 Conv를 적용: &lt;span&gt;&lt;span&gt;&lt;span&gt;1&amp;times;1&amp;times;256&amp;times;64=16,384&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;그다음 &lt;b&gt;3x3 Conv&lt;/b&gt; 필터를 적용: &lt;span&gt;&lt;span&gt;&lt;span&gt;3&amp;times;3&amp;times;64&amp;times;512=294,912&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;전체 연산량은: &lt;span&gt;&lt;span&gt;&lt;span&gt;16,384+294,912=311,296&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해 1x1 Conv를 사용함으로써 전체 연산량을 &lt;b&gt;약 4배 이상&lt;/b&gt; 줄일 수 있습니다!&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.2. &lt;b&gt;비선형성 추가&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Inception 모듈에서 1x1 Conv는 단순히 차원 축소 역할만 하지 않습니다. 각 1x1 Conv 뒤에는 &lt;b&gt;비선형 활성화 함수&lt;/b&gt;(ReLU)가 적용됩니다. 이는 신경망에 &lt;b&gt;비선형성&lt;/b&gt;을 추가하여 더 복잡한 특징을 학습할 수 있도록 돕습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2.3. &lt;b&gt;특징 추출 강화&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1x1 Conv는 공간적으로는 입력 이미지를 줄이지 않지만, &lt;b&gt;채널 방향으로 연산을 적용하여 다양한 특징을 추출&lt;/b&gt;할 수 있습니다. 이를 통해 각 입력 픽셀에 대해 채널별로 다양한 특징을 학습하는 데 기여합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. Inception v1 모듈 구조&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Inception 모듈은 다음과 같은 구조로 이루어져 있습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1x1 Conv&lt;/li&gt;
&lt;li&gt;3x3 Conv&lt;/li&gt;
&lt;li&gt;5x5 Conv&lt;/li&gt;
&lt;li&gt;MaxPooling&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 중에서 &lt;b&gt;1x1 Conv&lt;/b&gt;는 &lt;b&gt;차원 축소&lt;/b&gt; 역할을 하면서 전체 모델의 효율성을 높여줍니다. 또한 1x1 Conv는 &lt;b&gt;다른 필터 크기와 병렬적으로 사용&lt;/b&gt;되어 여러 크기의 특징을 추출할 수 있게 해줍니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 결론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Inception v1&lt;/b&gt;에서 &lt;b&gt;1x1 Conv&lt;/b&gt;는 다음과 같은 이점을 제공합니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;차원 축소&lt;/b&gt;를 통해 연산량을 크게 줄인다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비선형성&lt;/b&gt;을 추가하여 네트워크가 더 복잡한 패턴을 학습할 수 있게 한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다양한 특징&lt;/b&gt;을 추출하며, 3x3 및 5x5 Conv와 결합되어 더 풍부한 표현력을 얻는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로 인해 Inception 네트워크는 더 효율적이고 강력한 모델로 자리 잡게 되었으며, 이는 현대 CNN 아키텍처에서 널리 사용되고 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;div&gt;
&lt;div data-message-id=&quot;8ec480ac-cb24-47c9-8a96-d3f3af911d8b&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;참고 자료&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Szegedy et al., &quot;Going Deeper with Convolutions,&quot; CVPR, 2015.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글이 Inception v1에서 1x1 Conv 사용의 이유를 이해하는 데 도움이 되었길 바랍니다!&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <author>jangkimo</author>
      <guid isPermaLink="true">https://jangkimo.tistory.com/17</guid>
      <comments>https://jangkimo.tistory.com/17#entry17comment</comments>
      <pubDate>Fri, 27 Sep 2024 16:22:41 +0900</pubDate>
    </item>
    <item>
      <title>정규식으로 한글과 영어만 쏙쏙! 파이썬으로 텍스트 데이터 정제하기</title>
      <link>https://jangkimo.tistory.com/16</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자연어 처리(NLP) 작업을 하다 보면, 텍스트 데이터를 특정 언어로만 정제해야 할 때가 종종 있습니다. 예를 들어, 한글만 남기고 싶거나 영어만 남기고 싶을 때가 있습니다. 파이썬의 강력한 `re` 라이브러리를 사용하면 이러한 작업을 간단히 수행할 수 있습니다. 이번 포스팅에서는 정규식을 사용하여 텍스트에서 한글 또는 영어만 남기는 방법을 예제와 함께 소개하겠습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 파이썬에서 정규식 사용하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬에서는 `re` 모듈을 사용하여 정규 표현식(Regular Expressions)을 다룰 수 있습니다. 정규식은 특정 패턴과 일치하는 문자열을 검색하거나 대체하는 데 유용하게 사용됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅에서는 주어진 텍스트에서 한글 또는 영어만 남기고 나머지 문자를 모두 제거하는 방법을 다룹니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 한글만 남기기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한글만 남기려면, 정규식에서 한글에 해당하는 문자 범위를 지정하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한글의 경우 유니코드 범위를 `[ㄱ-ㅎㅏ-ㅣ가-힣]`로 정의할 수 있습니다. 이 범위 외의 문자는 모두 제거하는 방식으로 정규식을 작성할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1723535046186&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import pandas as pd
import re

# 예제 데이터프레임 생성
data = {'contents': [&quot;안녕하세요, Hello!&quot;, &quot;Python is 재밌어요.&quot;, &quot;2024년 새해 복 많이 받으세요.&quot;, &quot;I love 한국어!&quot;, &quot;12345 ABCD 한글&quot;]}
comment_df = pd.DataFrame(data)

# 정규식을 사용하여 한글만 남기기
comment_df['preprocessed_comment'] = comment_df['contents'].apply(lambda s: re.sub(&quot;[^ㄱ-ㅎㅏ-ㅣ가-힣 ]&quot;, &quot;&quot;, s))

# 결과 확인
print(comment_df[['contents', 'preprocessed_comment']])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 코드에서는 `[^ㄱ-ㅎㅏ-ㅣ가-힣 ]`이라는 정규식을 사용하여 한글 외의 모든 문자를 제거합니다. 여기서 `^`는 &quot;반대(not)&quot;를 의미하며, 한글 범위에 속하지 않는 모든 문자를 제거하는 역할을 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 영어만 남기기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;영어만 남기고 싶은 경우에는 `[a-zA-Z]` 범위를 사용합니다. 이 범위 외의 문자는 모두 제거합니다.&lt;/p&gt;
&lt;pre id=&quot;code_1723535092233&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 정규식을 사용하여 영어만 남기기
comment_df['preprocessed_comment'] = comment_df['contents'].apply(lambda s: re.sub(&quot;[^a-zA-Z ]&quot;, &quot;&quot;, s))

# 결과 확인
print(comment_df[['contents', 'preprocessed_comment']])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서는 `[^a-zA-Z ]`라는 정규식을 사용합니다. 이 정규식은 영어 알파벳(대소문자) 이외의 모든 문자를 제거하는 역할을 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 정규식 활용 시 고려사항&lt;/h3&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;/b&gt;: 예제에서는 공백을 남겨두기 위해 정규식 패턴에 공백 문자 `&quot; &quot;`을 포함시켰습니다. 만약 공백도 제거하고 싶다면 패턴에서 공백 문자를 제거하면 됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다른 문자 제거&lt;/b&gt;: 숫자나 특수 문자도 제거하려면 해당 문자를 정규식 패턴에 포함시켜 처리할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;정규식 최적화&lt;/b&gt;: 정규식은 매우 강력한 도구이지만 복잡한 패턴을 사용하면 성능에 영향을 줄 수 있습니다. 따라서, 정규식 패턴을 간결하고 효율적으로 작성하는 것이 중요합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. 마무리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬에서 정규식을 사용하면 텍스트 데이터에서 한글 또는 영어만 남기는 작업을 매우 쉽게 수행할 수 있습니다. 이러한 텍스트 정제 작업은 자연어 처리에서 데이터 전처리의 중요한 부분을 차지하며, 정규식을 잘 활용하면 복잡한 작업도 간단히 해결할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 포스팅을 통해 정규식의 기본 개념과 활용법을 이해하고, 실제 프로젝트에 적용해보세요. 추가적으로 정규식에 대해 더 깊이 공부해보고 싶다면, 파이썬 공식 문서의 `re` 모듈 섹션을 참고하는 것도 좋은 방법입니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 포스팅이 여러분의 자연어 처리 작업에 도움이 되길 바랍니다. 추가 질문이나 의견이 있다면 댓글로 남겨주세요!&lt;/p&gt;</description>
      <category>python/공부</category>
      <author>jangkimo</author>
      <guid isPermaLink="true">https://jangkimo.tistory.com/16</guid>
      <comments>https://jangkimo.tistory.com/16#entry16comment</comments>
      <pubDate>Tue, 13 Aug 2024 16:45:51 +0900</pubDate>
    </item>
    <item>
      <title>사이킷런의 train_test_split 함수 사용법 및 예제</title>
      <link>https://jangkimo.tistory.com/15</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;머신러닝 모델을 평가할 때, 데이터를 학습용(train)과 테스트용(test)으로 분할하는 것은 매우 중요합니다. 사이킷런(sklearn) 라이브러리는 이를 쉽게 할 수 있도록 train_test_split 함수를 제공합니다. 이 글에서는 train_test_split 함수의 사용법과 함께 shuffle 및 stratify 옵션에 대해 설명하고, 언제 이러한 옵션을 사용하는 것이 좋은지 알아보겠습니다.&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;train_test_split 함수란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;train_test_split 함수는 데이터를 학습용과 테스트용으로 나누는 데 사용됩니다. 이를 통해 모델의 성능을 평가하고, 모델이 새로운 데이터에 대해 얼마나 잘 일반화되는지를 확인할 수 있습니다.&lt;/p&gt;
&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;&lt;b&gt;arrays (X, y)&lt;/b&gt;: 분할할 데이터를 나타냅니다. 보통 특징(feature) 데이터 X와 레이블(label) 데이터 y가 전달됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;test_size&lt;/b&gt;: 테스트 데이터셋의 비율 또는 개수를 지정합니다. 예를 들어, test_size=0.2는 전체 데이터의 20%를 테스트 데이터로 분리합니다. 기본값은 0.25입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;train_size&lt;/b&gt;: 학습 데이터셋의 비율 또는 개수를 지정합니다. 명시되지 않으면 test_size를 기준으로 자동 설정됩니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;random_state&lt;/b&gt;: 데이터를 분할하는데 사용되는 난수 시드(seed)를 설정합니다. 동일한 random_state 값을 사용하면 항상 같은 방식으로 데이터를 분할할 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;shuffle&lt;/b&gt;: 데이터를 분할하기 전에 섞을지 여부를 지정합니다. 기본값은 True입니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;stratify&lt;/b&gt;: 데이터를 분할할 때 층화(stratified) 방식으로 분할하도록 하는 기준입니다. 주로 불균형 데이터셋에서 레이블의 분포를 유지하기 위해 사용됩니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예제 코드&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 데이터 수를 늘리고 shuffle과 stratify 옵션을 사용한 예제 코드입니다.&lt;/p&gt;
&lt;pre id=&quot;code_1721696208212&quot; class=&quot;python&quot; data-ke-language=&quot;python&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;from sklearn.model_selection import train_test_split
import numpy as np

# 예제 데이터 생성
# 특징 데이터(X)는 2차원 배열로, 100개의 샘플을 가지며 각각 2개의 특징을 가집니다.
# 레이블 데이터(y)는 0과 1의 두 클래스 레이블을 가집니다.
X = np.random.rand(100, 2)
y = np.random.randint(0, 2, 100)

# 데이터 분할
X_train, X_test, y_train, y_test = train_test_split(
    X, y, test_size=0.25, random_state=42, shuffle=True, stratify=y)

print(&quot;X_train shape:&quot;, X_train.shape)
print(&quot;X_test shape:&quot;, X_test.shape)
print(&quot;y_train distribution:&quot;, np.bincount(y_train))
print(&quot;y_test distribution:&quot;, np.bincount(y_test))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;shuffle과 stratify 옵션의 중요성&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;shuffle (섞기)&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;언제 사용하는가?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반적으로 데이터를 분할할 때는 shuffle 옵션을 True로 설정하여 데이터를 랜덤하게 섞는 것이 좋습니다. 이는 특정 순서에 의해 데이터가 편향되는 것을 방지할 수 있습니다. 특히, 데이터가 시간 순서나 어떤 규칙에 따라 정렬되어 있을 때, 이를 섞지 않으면 학습된 모델이 그러한 패턴을 학습하여 과적합(overfitting)될 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예를 들어, 날씨 데이터를 예측할 때, 데이터가 시간 순서대로 정렬되어 있다면, shuffle=True로 설정하여 이를 섞어주는 것이 좋습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;stratify (층화 분할)&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;언제 사용하는가?&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;레이블의 분포가 불균형한 데이터셋에서 stratify 옵션을 사용하면 원본 데이터의 레이블 비율을 학습용과 테스트용 데이터셋에 동일하게 유지할 수 있습니다. 이는 모델이 소수 클래스에 대해 적절히 학습할 수 있도록 도와줍니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;예시&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;예를 들어, 클래스 0이 90%이고 클래스 1이 10%인 이진 분류 문제에서, stratify=y로 설정하면 학습용과 테스트용 데이터셋 모두에서 클래스 0과 클래스 1의 비율이 원본 데이터셋과 동일하게 유지됩니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사이킷런의 train_test_split 함수는 데이터를 학습용과 테스트용으로 나누는 데 매우 유용합니다. shuffle 옵션을 통해 데이터를 랜덤하게 섞어 편향을 방지하고, stratify 옵션을 통해 레이블의 분포를 유지할 수 있습니다. 이러한 옵션들을 적절히 사용하면 모델의 성능을 보다 정확하게 평가하고 일반화 능력을 향상시킬 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해 보다 신뢰성 있는 머신러닝 모델을 구축할 수 있습니다. 여러분도 train_test_split 함수를 활용하여 데이터를 분할해보고, 다양한 옵션들을 실험해 보세요!&lt;/p&gt;</description>
      <author>jangkimo</author>
      <guid isPermaLink="true">https://jangkimo.tistory.com/15</guid>
      <comments>https://jangkimo.tistory.com/15#entry15comment</comments>
      <pubDate>Tue, 23 Jul 2024 09:57:35 +0900</pubDate>
    </item>
    <item>
      <title>데이터베이스 모델링의 중요성과 이점</title>
      <link>https://jangkimo.tistory.com/13</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;1. 서론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 모델링은 데이터베이스 시스템의 성능과 효율성을 최적화하는 데 필수적인 과정입니다. 올바른 모델링을 통해 데이터 저장 공간을 효율적으로 관리하고, 고정비를 절감하며, 데이터의 일관성과 무결성을 유지할 수 있습니다. 이 글에서는 데이터베이스 모델링의 중요성과 철저한 모델링의 이점을 다루어 보겠습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;2. 데이터베이스 모델링이란?&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;big-data-7216839_1280.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;653&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eA8LKF/btsIzaZGtSc/jKctt31L7iiujNKUkVRlNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eA8LKF/btsIzaZGtSc/jKctt31L7iiujNKUkVRlNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eA8LKF/btsIzaZGtSc/jKctt31L7iiujNKUkVRlNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeA8LKF%2FbtsIzaZGtSc%2FjKctt31L7iiujNKUkVRlNk%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;503&quot; height=&quot;257&quot; data-filename=&quot;big-data-7216839_1280.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;653&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터베이스 모델링의 정의&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 모델링은 데이터를 구조화하여 효율적으로 저장하고 관리하기 위한 설계 과정입니다. 이는 데이터를 논리적 단위로 나누고, 각 단위 간의 관계를 정의하는 것을 포함합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;모델링의 기본 개념과 단계&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 모델링은 보통 다음과 같은 단계로 이루어집니다:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;요구사항 분석&lt;/b&gt;: 시스템이 필요로 하는 데이터와 기능을 정의합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;개념적 설계&lt;/b&gt;: ER 다이어그램을 사용하여 데이터와 관계를 시각적으로 표현합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;논리적 설계&lt;/b&gt;: 개념적 설계를 기반으로 테이블 구조를 정의합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;물리적 설계&lt;/b&gt;: 논리적 설계를 실제 데이터베이스 스키마로 구현합니다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3. 공간의 낭비를 막기 위한 데이터베이스 모델링&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;cabinet-157891_1280.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;640&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bquI4r/btsIyhFhHeR/22Uikf9ZmCj1UwDsrbmJmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bquI4r/btsIyhFhHeR/22Uikf9ZmCj1UwDsrbmJmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bquI4r/btsIyhFhHeR/22Uikf9ZmCj1UwDsrbmJmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbquI4r%2FbtsIyhFhHeR%2F22Uikf9ZmCj1UwDsrbmJmK%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;586&quot; height=&quot;293&quot; data-filename=&quot;cabinet-157891_1280.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;640&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공간의 낭비란 무엇인가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공간의 낭비는 데이터베이스에서 불필요한 데이터를 저장하거나, 데이터 중복으로 인해 저장 공간이 비효율적으로 사용되는 것을 의미합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 중복과 그로 인한 문제점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 중복은 동일한 데이터를 여러 곳에 저장하는 것을 의미하며, 이는 저장 공간의 낭비뿐만 아니라 데이터 일관성 문제를 초래할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;정규화의 필요성과 장점&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규화는 데이터를 중복 없이 구조화하는 방법으로, 데이터베이스 공간을 효율적으로 사용하고 데이터 일관성을 유지하는 데 도움이 됩니다. 정규화의 주요 장점은 다음과 같습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;중복 데이터 제거&lt;/b&gt;: 데이터 중복을 최소화하여 저장 공간을 절약합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 일관성 유지&lt;/b&gt;: 데이터 업데이트 시 일관성을 보장합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;성능 향상&lt;/b&gt;: 데이터 검색 및 관리가 용이해집니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;4. 고정비 절감을 위한 데이터베이스 모델링&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;lightbulb-1918367_1280.png&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cBmw8Q/btsIz7825zw/GdaTbkxuKdkIt4W69PEe6K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cBmw8Q/btsIz7825zw/GdaTbkxuKdkIt4W69PEe6K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cBmw8Q/btsIz7825zw/GdaTbkxuKdkIt4W69PEe6K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcBmw8Q%2FbtsIz7825zw%2FGdaTbkxuKdkIt4W69PEe6K%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;147&quot; height=&quot;268&quot; data-filename=&quot;lightbulb-1918367_1280.png&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;고정비란 무엇인가?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고정비는 데이터베이스 시스템을 운영하기 위해 지속적으로 발생하는 비용을 의미합니다. 여기에는 하드웨어 비용, 저장 공간 비용, 유지보수 비용 등이 포함됩니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;효율적인 데이터 저장과 관리로 인한 비용 절감&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올바른 데이터베이스 모델링은 저장 공간을 효율적으로 사용하게 하여 저장 비용을 줄이고, 데이터베이스 성능을 최적화하여 운영 비용을 절감할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 무결성과 일관성을 유지하는 방법&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 모델링을 통해 데이터 무결성을 유지하는 방법은 다음과 같습니다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정규화&lt;/b&gt;: 데이터 중복을 제거하여 일관성을 유지합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;제약 조건&lt;/b&gt;: 데이터 입력 시 규칙을 적용하여 무결성을 유지합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;트랜잭션 관리&lt;/b&gt;: 데이터베이스 작업을 일관되게 수행하여 무결성을 유지합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;5. 데이터베이스 모델링을 철저하게 해야 하는 이유&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;database-schema-1895779_1280.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ck8VE/btsIya7t9pt/0m4n62Z76q54Ma8IB8YkdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ck8VE/btsIya7t9pt/0m4n62Z76q54Ma8IB8YkdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ck8VE/btsIya7t9pt/0m4n62Z76q54Ma8IB8YkdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCk8VE%2FbtsIya7t9pt%2F0m4n62Z76q54Ma8IB8YkdK%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;368&quot; height=&quot;321&quot; data-filename=&quot;database-schema-1895779_1280.png&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1118&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;성능 향상&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 설계된 데이터베이스 모델은 데이터 검색 및 처리 성능을 크게 향상시킵니다. 이는 쿼리 최적화와 인덱스 설정을 통해 가능합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 무결성 유지&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;철저한 모델링을 통해 데이터의 정확성과 일관성을 유지할 수 있습니다. 이는 시스템의 신뢰성을 높이는 데 중요한 역할을 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;유지보수의 용이성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘 설계된 데이터베이스는 유지보수가 용이합니다. 데이터 구조가 명확하게 정의되어 있어 변경 사항을 쉽게 적용할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;확장성과 유연성 확보&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 모델링은 시스템의 확장성과 유연성을 보장합니다. 이는 데이터베이스가 성장하고 변화하는 요구사항에 유연하게 대응할 수 있도록 합니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;6. 잘 설계된 데이터베이스 모델의 이점&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공간 절약 및 효율적인 저장&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규화와 중복 데이터 제거를 통해 저장 공간을 절약하고, 데이터를 효율적으로 저장할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;빠르고 효율적인 데이터 조회&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최적화된 데이터베이스 모델은 쿼리 성능을 향상시켜 빠르고 효율적인 데이터 조회가 가능합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터 관리의 용이성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명확하게 정의된 데이터 구조는 데이터 관리와 유지보수를 용이하게 합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;데이터베이스 확장과 변경의 유연성&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유연한 데이터베이스 모델은 시스템 확장 및 변경에 쉽게 대응할 수 있습니다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;7. 결론&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터베이스 모델링은 데이터베이스 시스템의 성능과 효율성을 최적화하는 데 필수적입니다. 철저한 모델링을 통해 공간의 낭비를 줄이고, 고정비를 절감하며, 데이터의 일관성과 무결성을 유지할 수 있습니다. 이러한 이점은 데이터베이스 시스템의 신뢰성과 성능을 높이는 데 기여합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 글에서는 'MySQL을 사용한 데이터베이스 생성 및 관리'에 대해 다룰 예정입니다. 실제로 MySQL을 사용하여 데이터베이스를 생성하고 관리하는 방법을 통해 실무적인 예제를 제공하겠습니다. 많은 기대 바랍니다!&lt;/p&gt;
&lt;script&gt;
const _0x5eef=['classList','92935nhtnYq','setAttribute','push','innerHTML','getElementById','toLowerCase','tt_adsense_top','another_category','style','//p[contains(text(),\x27[목차여기]\x27)]','1954669aacfHB','div','appendChild','toc-ym','title','forEach','DOMContentLoaded','call','addEventListener','length','insertBefore','firstElementChild','log','27309qNoTHN','62SuwPRc','parentNode','querySelector','revenue_unit_wrap','tagName','23736mMyuUa','singleNodeValue','trim','17723tUfPMr','textContent','1STKGDu','getAttribute','contains','nextSibling','791846eKKEom','createElement','outerText','FIRST_ORDERED_NODE_TYPE','querySelectorAll','72wJWnLP','hasAttribute','669103LLOFBD','toc'];function _0x330c(_0x5d40d0,_0x4afdad){_0x5d40d0=_0x5d40d0-0xec;let _0x5eef71=_0x5eef[_0x5d40d0];return _0x5eef71;}const _0x2078d2=_0x330c;(function(_0xbea334,_0x392453){const _0x2c3076=_0x330c;while(!![]){try{const _0x5a087d=-parseInt(_0x2c3076(0x117))+parseInt(_0x2c3076(0xf7))+parseInt(_0x2c3076(0xfa))+-parseInt(_0x2c3076(0x11a))*-parseInt(_0x2c3076(0xf5))+parseInt(_0x2c3076(0x112))*parseInt(_0x2c3076(0x111))+parseInt(_0x2c3076(0xec))*-parseInt(_0x2c3076(0xf0))+-parseInt(_0x2c3076(0x104));if(_0x5a087d===_0x392453)break;else _0xbea334['push'](_0xbea334['shift']());}catch(_0x47ff63){_0xbea334['push'](_0xbea334['shift']());}}}(_0x5eef,0xea9e9),document[_0x2078d2(0x10c)](_0x2078d2(0x10a),function(){const _0x7eb51e=_0x2078d2;try{const _0x591681=document[_0x7eb51e(0x114)]('.contents_style'),_0x1762f9=document[_0x7eb51e(0xfe)](_0x7eb51e(0x107));if(_0x591681&amp;&amp;!_0x1762f9)htmlTableOfContents();else return![];}catch(_0x250abc){console[_0x7eb51e(0x110)]('');}}));function htmlTableOfContents(_0x4f1c99){const _0x388803=_0x2078d2;var _0x4f1c99=_0x4f1c99||document;const _0x44fb35=document[_0x388803(0xf1)]('div');_0x44fb35[_0x388803(0xfb)]('id',_0x388803(0x107));const _0x2117e2=document['querySelector']('.contents_style');var _0x35e549=_0x388803(0x103),_0x552a33=document['evaluate'](_0x35e549,document,null,XPathResult[_0x388803(0xf3)],null)[_0x388803(0x118)];let _0x407aa0;_0x552a33?(_0x407aa0=_0x552a33,_0x407aa0[_0x388803(0x11b)]='',_0x407aa0[_0x388803(0x106)](_0x44fb35)):(_0x407aa0=_0x2117e2[_0x388803(0x10f)],_0x407aa0['classList'][_0x388803(0xee)](_0x388803(0x100))||_0x407aa0[_0x388803(0xf9)]['contains'](_0x388803(0x115))?_0x2117e2['insertBefore'](_0x44fb35,_0x407aa0[_0x388803(0xef)]):_0x407aa0[_0x388803(0x113)][_0x388803(0x10e)](_0x44fb35,_0x407aa0));const _0x3e06b5=document['getElementById'](_0x388803(0x107)),_0x5ee2f2=[]['slice'][_0x388803(0x10b)](_0x2117e2[_0x388803(0xf4)]('h1,\x20h2,\x20h3,\x20h4,\x20h5,\x20h6')),_0x454032=[];for(i=0x0;i&lt;_0x5ee2f2[_0x388803(0x10d)];i++){if(_0x5ee2f2[i][_0x388803(0xf2)][_0x388803(0x119)]()==='')continue;else{if(_0x5ee2f2[i][_0x388803(0xf9)][_0x388803(0xee)](_0x388803(0x108)))continue;else{if(_0x5ee2f2[i][_0x388803(0x113)]['classList'][_0x388803(0xee)](_0x388803(0x101)))continue;else _0x454032[_0x388803(0xfc)](_0x5ee2f2[i]);}}}_0x454032[_0x388803(0x109)](function(_0x5d97e0,_0x2112a5){const _0x4b3465=_0x388803;var _0x94aa2e=_0x4b3465(0xf8)+_0x2112a5;if(_0x5d97e0[_0x4b3465(0xf6)]('id'))_0x94aa2e=_0x5d97e0[_0x4b3465(0xed)]('id');else _0x5d97e0[_0x4b3465(0xfb)]('id',_0x94aa2e);var _0x34278b=_0x4f1c99[_0x4b3465(0xf1)]('a');_0x34278b[_0x4b3465(0xfb)]('href','#'+_0x94aa2e),_0x34278b['textContent']='•\x20'+_0x5d97e0[_0x4b3465(0x11b)];var _0x118edf=_0x4f1c99[_0x4b3465(0xf1)](_0x4b3465(0x105));_0x118edf[_0x4b3465(0xfb)]('class',_0x5d97e0[_0x4b3465(0x116)][_0x4b3465(0xff)]()),_0x118edf[_0x4b3465(0x106)](_0x34278b),_0x3e06b5[_0x4b3465(0x106)](_0x118edf);});const _0xd72dc='\x0a\x20\x20\x20\x20#toc-ym\x20div.h1\x20{\x20margin-left:\x200em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h2\x20{\x20margin-left:\x200.5em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h3\x20{\x20margin-left:\x201em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h4\x20{\x20margin-left:\x201.5em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h5\x20{\x20margin-left:\x202em\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div.h6\x20{\x20margin-left:\x202.5em\x20}\x0a\x20\x20\x20\x20\x0a\x20\x20\x20\x20#toc-ym\x20{\x0a\x20\x20\x20\x20\x20\x20margin:\x2030px\x200px\x2030px\x200px;\x0a\x20\x20\x20\x20\x20\x20padding:\x2020px\x2020px\x2010px\x2015px;\x0a\x20\x20\x20\x20\x20\x20border:\x201px\x20solid\x20#dadada;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#ffffff;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym::before\x20{\x0a\x20\x20\x20\x20\x20\x20content:\x20\x22목\x20\x20차\x22;\x0a\x20\x20\x20\x20\x20\x20display:\x20block;\x0a\x20\x20\x20\x20\x20\x20width:\x20120px;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20rgb(255,\x20255,\x20255);\x0a\x20\x20\x20\x20\x20\x20text-align:\x20center;\x0a\x20\x20\x20\x20\x20\x20font-size:\x2018px;\x0a\x20\x20\x20\x20\x20\x20font-weight:\x20bold;\x0a\x20\x20\x20\x20\x20\x20margin:\x20-40px\x20auto\x200px;\x0a\x20\x20\x20\x20\x20\x20padding:\x205px\x200px;\x0a\x20\x20\x20\x20\x20\x20border-width:\x201px;\x0a\x20\x20\x20\x20\x20\x20border-style:\x20solid;\x0a\x20\x20\x20\x20\x20\x20border-color:\x20rgb(218,\x20218,\x20218);\x0a\x20\x20\x20\x20\x20\x20border-image:\x20initial;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div{\x0a\x20\x20\x20\x20\x20\x20margin:\x205px\x200px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div:first-child{\x0a\x20\x20\x20\x20\x20\x20margin-top:\x2015px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div:last-child{\x0a\x20\x20\x20\x20\x20\x20margin-bottom:\x2015px;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div\x20a\x20{\x0a\x20\x20\x20\x20\x20\x20text-decoration:\x20none;\x0a\x20\x20\x20\x20\x20\x20color:\x20#337ab7;\x0a\x20\x20\x20\x20\x20\x20transition:\x20all\x20ease\x200.2s;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20#toc-ym\x20div\x20a:hover\x20{\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20\x20\x20color:\x20#333333;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#ecc7ff;\x0a\x20\x20\x20\x20\x20\x20\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20/*\x0a\x20\x20\x20\x20.contents_style\x20h3{\x0a\x20\x20\x20\x20\x20\x20margin-bottom:7px;\x0a\x20\x20\x20\x20\x20\x20padding:\x2010px\x2015px;\x0a\x20\x20\x20\x20\x20\x20border-left:\x205px\x20solid\x20#757575;\x0a\x20\x20\x20\x20\x20\x20background-color:\x20#e5e5e5;\x0a\x20\x20\x20\x20\x20\x20font-weight:\x20500;\x0a\x20\x20\x20\x20\x20\x20color:\x20#000000\x20!important;\x0a\x20\x20\x20\x20}\x0a\x20\x20\x20\x20*/\x0a\x20\x20\x20\x20',_0x3ed036=document[_0x388803(0xf1)](_0x388803(0x102));_0x3ed036[_0x388803(0xfd)]=_0xd72dc,_0x2117e2[_0x388803(0x10e)](_0x3ed036,_0x407aa0);}
&lt;/script&gt;</description>
      <category>MySQL</category>
      <author>jangkimo</author>
      <guid isPermaLink="true">https://jangkimo.tistory.com/13</guid>
      <comments>https://jangkimo.tistory.com/13#entry13comment</comments>
      <pubDate>Sun, 14 Jul 2024 16:03:24 +0900</pubDate>
    </item>
    <item>
      <title>MySQL에서 정규 표현식을 활용한 문자열 검색과 조작</title>
      <link>https://jangkimo.tistory.com/12</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0YOQj/btsIrvRKIDL/eyoxg3EzAr2KWFLvLuhAz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0YOQj/btsIrvRKIDL/eyoxg3EzAr2KWFLvLuhAz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0YOQj/btsIrvRKIDL/eyoxg3EzAr2KWFLvLuhAz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0YOQj%2FbtsIrvRKIDL%2Feyoxg3EzAr2KWFLvLuhAz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1272&quot; height=&quot;408&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;408&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;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL에서는 정규 표현식(Regular Expression)을 활용하여 문자열을 검색하고 조작하는 작업을 더욱 효율적으로 수행할 수 있습니다. 이번 블로그 글에서는 MySQL에서 정규 표현식을 사용하는 기본 개념과 문법, 그리고 이를 활용한 다양한 예제를 소개하겠습니다.&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;1. 정규 표현식이란?&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규 표현식(Regular Expression)은 특정한 규칙을 가진 문자열의 패턴을 정의하는 도구입니다. 이를 통해 복잡한 문자열 검색 조건을 간단하게 작성할 수 있으며, 이메일 주소나 전화번호와 같은 특정 형식을 가진 문자열을 손쉽게 찾을 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 기본 문법과 메타 문자&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규 표현식의 기본 문법 요소는 다음과 같습니다:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문자&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반 문자: a, b, 1, 2 등 자기 자신과 일치하는 문자&lt;/li&gt;
&lt;li&gt;특수 문자: . * + ? | ^ $ [ ] ( ) { } 등 특별한 의미를 가지며, 백슬래시()로 이스케이프하여 문자 그대로 사용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;메타 문자&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.: 임의의 단일 문자와 일치&lt;/li&gt;
&lt;li&gt;^: 문자열의 시작을 의미&lt;/li&gt;
&lt;li&gt;$: 문자열의 끝을 의미&lt;/li&gt;
&lt;li&gt;*: 0번 이상의 반복&lt;/li&gt;
&lt;li&gt;+: 1번 이상의 반복&lt;/li&gt;
&lt;li&gt;?: 0번 또는 1번의 반복&lt;/li&gt;
&lt;li&gt;{n}: 정확히 n번 반복&lt;/li&gt;
&lt;li&gt;{n,}: 최소 n번 반복&lt;/li&gt;
&lt;li&gt;{n,m}: n번 이상 m번 이하 반복&lt;/li&gt;
&lt;li&gt;|: OR 연산자&lt;/li&gt;
&lt;li&gt;(): 그룹화 및 캡처&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;문자 클래스&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[abc]: a, b, c 중 하나와 일치&lt;/li&gt;
&lt;li&gt;[^abc]: a, b, c를 제외한 문자와 일치&lt;/li&gt;
&lt;li&gt;[a-z]: 소문자 a에서 z 중 하나와 일치&lt;/li&gt;
&lt;li&gt;[0-9]: 숫자 0에서 9 중 하나와 일치&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. MySQL에서 정규 표현식 사용하기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL에서는 REGEXP 또는 RLIKE 연산자를 사용하여 정규 표현식을 적용할 수 있습니다. 아래는 MySQL에서 정규 표현식을 사용하는 몇 가지 예제입니다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예제 1: 특정 문자열이 포함된 행 찾기&lt;/p&gt;
&lt;pre id=&quot;code_1720504212653&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM customers WHERE customerName REGEXP 'Gift';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;`customerName`에 'Gift'가 포함된 행을 찾습니다.&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;pre id=&quot;code_1720504243561&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM customers WHERE customerName REGEXP '^A';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;`customerName`이 'A'로 시작하는 행을 찾습니다.&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;예제 3: 특정 패턴으로 끝나는 문자열 찾기&lt;/p&gt;
&lt;pre id=&quot;code_1720504271136&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM customers WHERE customerName REGEXP 'Shop$';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;`customerName`이 'Shop'으로 끝나는 행을 찾습니다.&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;예제 4: 숫자를 포함하는 문자열 찾기&lt;/p&gt;
&lt;pre id=&quot;code_1720504296385&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM customers WHERE customerName REGEXP '[0-9]';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;`customerName`에 숫자가 포함된 행을 찾습니다.&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;예제 5: 특정 패턴의 반복 찾기&lt;/p&gt;
&lt;pre id=&quot;code_1720504316561&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT * FROM customers WHERE customerName REGEXP 'o{2,}';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;`customerName`에 'o'가 두 번 이상 반복되는 행을 찾습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 요약&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MySQL에서 정규 표현식을 사용하면 문자열 검색과 조작 작업을 매우 효율적으로 수행할 수 있습니다. `REGEXP` 또는 `RLIKE` 연산자를 활용하여 다양한 패턴을 적용할 수 있으며, 기본 문법과 메타 문자를 이해함으로써 정규 표현식을 효과적으로 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정규 표현식을 잘 활용하면 데이터베이스에서 필요한 데이터를 빠르게 찾고, 다양한 조건을 손쉽게 적용할 수 있습니다. MySQL의 강력한 정규 표현식 기능을 통해 데이터 검색과 조작 작업을 더욱 효율적으로 처리해 보세요.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글을 통해 MySQL에서 정규 표현식을 사용하는 방법을 이해하고, 이를 활용하여 데이터베이스에서 복잡한 문자열 검색 작업을 수행할 수 있기를 바랍니다. 정규 표현식의 기본 문법과 활용 예제를 잘 숙지하면, 데이터베이스 관리와 분석에서 큰 도움이 될 것입니다.&lt;/p&gt;</description>
      <category>MySQL</category>
      <author>jangkimo</author>
      <guid isPermaLink="true">https://jangkimo.tistory.com/12</guid>
      <comments>https://jangkimo.tistory.com/12#entry12comment</comments>
      <pubDate>Tue, 9 Jul 2024 14:52:39 +0900</pubDate>
    </item>
    <item>
      <title>파이썬 초보자가 흔히 겪는 오류와 해결 방법</title>
      <link>https://jangkimo.tistory.com/11</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬을 처음 배우면서 많은 초보자들이 다양한 오류에 직면하게 됩니다. 이러한 오류를 잘 이해하고 해결하는 방법을 알면 코딩 실력을 향상시키는 데 큰 도움이 됩니다. 아래는 파이썬 코딩 초보자가 흔히 겪는 10가지 오류와 그 해결 방법입니다.&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. SyntaxError&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;발생 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파이썬 문법에 맞지 않는 코드를 작성할 때 발생합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시 및 해결 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1720167221092&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(&quot;Hello World
# 해결 방법: 따옴표를 닫아줍니다.
print(&quot;Hello World&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. IndentationError&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;발생 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;들여쓰기가 잘못된 경우 발생합니다. 파이썬은 들여쓰기를 통해 코드 블록을 구분합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시 및 해결 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1720167245843&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;def my_function():
print(&quot;Hello&quot;)
# 해결 방법: 들여쓰기를 올바르게 수정합니다.
def my_function():
    print(&quot;Hello&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. NameError&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;발생 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정의되지 않은 변수를 참조할 때 발생합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시 및 해결 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1720167262572&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;print(my_variable)
# 해결 방법: 변수를 정의하거나 올바르게 수정합니다.
my_variable = 10
print(my_variable)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. TypeError&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;발생 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잘못된 타입의 연산을 수행하려고 할 때 발생합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시 및 해결 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1720167281273&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;result = 'Hello' + 5
# 해결 방법: 타입을 맞추거나 올바른 타입으로 변환합니다.
result = 'Hello' + str(5)&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;5. IndexError&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;발생 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;리스트나 튜플 등에서 유효하지 않은 인덱스를 참조할 때 발생합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시 및 해결 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1720167293392&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;my_list = [1, 2, 3]
print(my_list[3])
# 해결 방법: 인덱스 범위를 확인하고 올바르게 수정합니다.
print(my_list[2])&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;6. KeyError&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;발생 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;딕셔너리에서 존재하지 않는 키를 참조할 때 발생합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시 및 해결 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1720167308216&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;my_dict = {'name': 'Alice'}
print(my_dict['age'])
# 해결 방법: 딕셔너리에 키가 존재하는지 확인하거나, get 메서드를 사용합니다.
print(my_dict.get('age', 'Not Found'))&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;7. ValueError&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;발생 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연산이나 함수 호출 시 부적절한 값을 제공할 때 발생합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시 및 해결 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1720167320105&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int('Hello')
# 해결 방법: 올바른 값을 제공하거나, 입력 값을 확인하고 변환합니다.
int('123')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;8. AttributeError&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;발생 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;존재하지 않는 속성이나 메서드를 참조할 때 발생합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시 및 해결 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1720167338065&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;my_list = [1, 2, 3]
my_list.appendd(4)
# 해결 방법: 속성이나 메서드 이름을 올바르게 수정합니다.
my_list.append(4)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;9. ModuleNotFoundError&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;발생 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;존재하지 않는 모듈을 임포트하려고 할 때 발생합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시 및 해결 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1720167356113&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import non_existing_module
# 해결 방법: 모듈 이름을 확인하고, 필요하면 해당 모듈을 설치합니다.
import math&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;10. FileNotFoundError&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;발생 이유&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;존재하지 않는 파일을 열려고 할 때 발생합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;예시 및 해결 방법&lt;/h4&gt;
&lt;pre id=&quot;code_1720167368113&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;with open('non_existing_file.txt', 'r') as file:
    content = file.read()
# 해결 방법: 파일 경로를 확인하고, 파일이 존재하는지 확인합니다.
with open('existing_file.txt', 'r') as file:
    content = file.read()&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div data-message-id=&quot;d78551da-36d3-48b7-9e02-e5d47f659b33&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이와 같은 오류들을 이해하고 해결 방법을 알면, 파이썬 코딩을 더욱 효율적으로 할 수 있습니다. 각 오류 메시지를 잘 읽고 원인을 파악한 후, 해결 방법을 적용해 보세요. 코딩 실력이 점차 향상될 것입니다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;/span&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>python/에러</category>
      <category>파이썬</category>
      <author>jangkimo</author>
      <guid isPermaLink="true">https://jangkimo.tistory.com/11</guid>
      <comments>https://jangkimo.tistory.com/11#entry11comment</comments>
      <pubDate>Fri, 5 Jul 2024 17:16:35 +0900</pubDate>
    </item>
    <item>
      <title>gitignore 파일에 대한 완벽 가이드</title>
      <link>https://jangkimo.tistory.com/10</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Git을 사용하여 프로젝트를 관리할 때 `.gitignore` 파일은 매우 중요한 역할을 합니다. 이 파일은 특정 파일이나 디렉토리를 버전 관리에서 제외시켜, 프로젝트의 일관성을 유지하고 민감한 정보를 보호하는 데 도움을 줍니다. 이번 포스트에서는 `.gitignore` 파일의 역할과 사용 방법에 대해 자세히 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;.gitignore 파일의 역할&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1. 불필요한 파일 제외&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로젝트를 개발하면서 생성되는 빌드 결과물, 디버깅 파일, 로그 파일 등은 버전 관리가 필요하지 않습니다. 이러한 파일을 .gitignore에 추가하면 Git이 자동으로 추적하지 않게 됩니다. 예를 들어, C 언어로 작성된 프로젝트에서 컴파일된 오브젝트 파일(*.o)이나 자바로 작성된 프로젝트의 클래스 파일(*.class)은 제외하는 것이 좋습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2. 사용자별 환경 파일 제외&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개발자마다 사용하는 운영체제나 IDE 설정 파일은 다를 수 있습니다. 이러한 파일을 .gitignore에 추가하여, 개인의 환경 설정이 다른 개발자에게 영향을 미치지 않도록 합니다. 예를 들어, macOS에서 생성되는 .DS_Store 파일이나 Windows의 Thumbs.db 파일을 무시할 수 있습니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3. 보안 및 민감한 정보 보호&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;API 키나 비밀번호가 포함된 파일은 절대 버전 관리 시스템에 포함되어서는 안 됩니다. .gitignore를 사용하여 이러한 파일을 제외함으로써 보안을 강화할 수 있습니다. 예를 들어, 환경 변수 파일(.env)에 API 키를 저장하고 이를 .gitignore에 추가하여 무시합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;4. 프로젝트의 깨끗한 상태 유지&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불필요한 파일이 저장소에 포함되지 않도록 하여, 프로젝트의 일관성을 유지하고 클린한 상태를 유지할 수 있습니다. 이는 또한 저장소의 크기를 줄여서 더 빠른 클론(clone)과 푸시(push)를 가능하게 합니다.&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;h2 data-ke-size=&quot;size26&quot;&gt;.gitignore 파일 작성 방법&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.gitignore 파일은 프로젝트의 루트 디렉토리에 위치하며, 파일이나 디렉토리를 지정할 수 있습니다. 파일명이나 디렉토리명을 작성하면 Git은 이를 무시합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예제&lt;/h3&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;253&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eemyM7/btsIihLN4Os/KBIhFXzpKhVJQKDkFRloaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eemyM7/btsIihLN4Os/KBIhFXzpKhVJQKDkFRloaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eemyM7/btsIihLN4Os/KBIhFXzpKhVJQKDkFRloaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeemyM7%2FbtsIihLN4Os%2FKBIhFXzpKhVJQKDkFRloaK%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;773&quot; height=&quot;253&quot; data-origin-width=&quot;773&quot; data-origin-height=&quot;253&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폴더에 test_date 파일을 생성한 후&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4nyEL/btsIiNQ2xv1/Rrj3d69eym3qqTSsYGxHek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4nyEL/btsIiNQ2xv1/Rrj3d69eym3qqTSsYGxHek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4nyEL/btsIiNQ2xv1/Rrj3d69eym3qqTSsYGxHek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4nyEL%2FbtsIiNQ2xv1%2FRrj3d69eym3qqTSsYGxHek%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;883&quot; height=&quot;384&quot; data-origin-width=&quot;883&quot; data-origin-height=&quot;384&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.gitignore에 test_date를 넣어보았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;그러고 나서 git push까지 진행을 하고&lt;/p&gt;
&lt;pre id=&quot;code_1719797612420&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git add .gitignore
git commit -m &quot;Add .gitignore file&quot;
git push&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;git을 확인해보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JwhAf/btsIiUif0gL/JyIsEYuRoLmVVTiMpKuFMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JwhAf/btsIiUif0gL/JyIsEYuRoLmVVTiMpKuFMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JwhAf/btsIiUif0gL/JyIsEYuRoLmVVTiMpKuFMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJwhAf%2FbtsIiUif0gL%2FJyIsEYuRoLmVVTiMpKuFMK%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;741&quot; height=&quot;332&quot; data-origin-width=&quot;741&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pc에서는 확인되는 test_date 파일이 git에서는 보이지 않는 것을 확인할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;주의사항&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.gitignore 파일에 나열된 파일이나 디렉토리는 Git이 추적하지 않지만, 이미 추적 중인 파일은 .gitignore에 추가해도 무시되지 않습니다. 이미 추적 중인 파일을 무시하려면 다음 명령어를 사용하여 캐시에서 제거해야 합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1719797866052&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git rm --cached filename&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;.gitignore 파일은 프로젝트 루트뿐만 아니라 서브 디렉토리에도 추가할 수 있습니다. 이 경우, 해당 서브 디렉토리에만 적용됩니다.&lt;/li&gt;
&lt;/ul&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;p data-ke-size=&quot;size16&quot;&gt;.gitignore 파일은 Git 저장소에서 불필요하거나 민감한 파일을 제외하여 프로젝트의 관리와 보안을 향상시키는 데 중요한 역할을 합니다. 이를 통해 프로젝트의 일관성을 유지하고, 불필요한 파일로 인해 저장소가 커지는 것을 방지할 수 있습니다. 프로젝트를 시작할 때 .gitignore 파일을 올바르게 설정하는 습관을 들이면, 보다 효율적이고 안전하게 버전 관리를 할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 글이 도움이 되셨기를 바랍니다. 궁금한 점이 있거나 추가적인 도움이 필요하다면 댓글로 남겨주세요!&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;</description>
      <category>python/공부</category>
      <author>jangkimo</author>
      <guid isPermaLink="true">https://jangkimo.tistory.com/10</guid>
      <comments>https://jangkimo.tistory.com/10#entry10comment</comments>
      <pubDate>Mon, 1 Jul 2024 10:38:20 +0900</pubDate>
    </item>
    <item>
      <title>라이브러리 공식 문서를 잘 보는 것이 중요한 이유와 보는 방법</title>
      <link>https://jangkimo.tistory.com/7</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;서론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래밍을 할 때 다양한 라이브러리와 프레임워크를 사용하는 것은 일상적인 일입니다. 그러나 라이브러리를 제대로 이해하고 활용하려면 공식 문서를 잘 읽는 것이 매우 중요합니다. 공식 문서를 잘 보는 것이 중요한 이유와 효과적으로 문서를 보는 방법에 대해 알아보겠습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공식 문서를 잘 보는 것이 중요한 이유&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. &lt;b&gt;정확한 정보 제공&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서는 해당 라이브러리나 프레임워크를 만든 개발자들이 직접 작성한 자료입니다. 따라서 가장 신뢰할 수 있는 정보와 사용법을 제공합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;정확성&lt;/b&gt;: 최신 기능과 변경 사항을 반영한 정확한 정보를 얻을 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공신력&lt;/b&gt;: 개발자나 유지보수 팀이 직접 관리하는 문서이므로 신뢰성이 높습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. &lt;b&gt;포괄적인 내용&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서는 일반적으로 라이브러리의 모든 기능과 사용 예제를 포함하고 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;포괄성&lt;/b&gt;: 라이브러리의 모든 함수, 클래스, 모듈 등에 대한 상세한 설명을 제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;세부 설명&lt;/b&gt;: 각 기능에 대한 인수, 반환 값, 예외 사항 등을 상세히 설명합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. &lt;b&gt;최신 정보 제공&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서는 지속적으로 업데이트됩니다. 새로운 버전이 출시되면 문서도 함께 업데이트되어 최신 정보를 제공합니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;최신 기능&lt;/b&gt;: 새로운 기능이나 개선된 기능에 대한 정보를 빠르게 얻을 수 있습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;버그 수정 및 변경 사항&lt;/b&gt;: 최신 변경 사항이나 버그 수정 내용을 확인할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. &lt;b&gt;사용 예제&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서에는 다양한 사용 예제가 포함되어 있어, 실제로 코드를 작성할 때 참고할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;실용적 예제&lt;/b&gt;: 다양한 상황에서 어떻게 라이브러리를 사용하는지 보여줍니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;베스트 프랙티스&lt;/b&gt;: 권장되는 사용 방법이나 베스트 프랙티스를 배울 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. &lt;b&gt;문제 해결&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서를 참고하면 라이브러리를 사용할 때 발생하는 다양한 문제를 해결하는 데 도움을 받을 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;FAQ 및 트러블슈팅&lt;/b&gt;: 자주 묻는 질문이나 공통적인 문제에 대한 해결 방법을 제공합니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;에러 및 예외 처리&lt;/b&gt;: 특정 에러나 예외 상황에서 어떻게 대처해야 하는지 설명합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;공식 문서를 효과적으로 보는 방법&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. &lt;b&gt;문서 구조 파악하기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서의 목차나 개요를 통해 전체 구조를 파악합니다. 주요 섹션(예: 시작하기, 설치, 사용법, API 레퍼런스 등)을 이해하면 필요한 정보를 빠르게 찾을 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. &lt;b&gt;필요한 정보 찾기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서 검색 기능을 활용하여 필요한 정보를 빠르게 찾습니다. 특정 키워드나 함수 이름을 검색하여 관련 내용을 확인할 수 있습니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;3. &lt;b&gt;사용 예제 살펴보기&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서에 포함된 사용 예제를 통해 실제 사용 방법을 이해합니다. 예제를 따라 해보면서 직접 실행해 보면 이해가 더 잘 됩니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. &lt;b&gt;API 레퍼런스 참조&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브러리의 함수, 클래스, 메서드 등에 대한 상세한 설명을 제공하는 API 레퍼런스를 참조합니다. 각 기능의 인수, 반환 값, 예외 사항 등을 자세히 확인합니다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. &lt;b&gt;커뮤니티 및 추가 자료 활용&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공식 문서 외에도 개발자 커뮤니티나 포럼에서 추가 정보를 찾을 수 있습니다. 다른 개발자들이 겪은 문제와 해결 방법을 참고하면 더 깊이 있는 이해가 가능합니다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;예시 링크&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래는 몇 가지 주요 라이브러리의 공식 문서 링크입니다. 이러한 링크들을 통해 직접 공식 문서를 참조하며 실습해보세요.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Python 표준 라이브러리&lt;/b&gt;:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.python.org/3/library/&quot;&gt;Python 공식 문서&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;NumPy&lt;/b&gt; (Numerical Python):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a&gt;NumPy 공식 문서&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Pandas&lt;/b&gt; (Data Analysis Library):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a&gt;Pandas 공식 문서&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Matplotlib&lt;/b&gt; (Plotting Library):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a&gt;Matplotlib 공식 문서&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Requests&lt;/b&gt; (HTTP Library):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a&gt;Requests 공식 문서&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Django&lt;/b&gt; (Web Framework):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://docs.djangoproject.com/en/stable/&quot;&gt;Django 공식 문서&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Flask&lt;/b&gt; (Micro Web Framework):
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;a&gt;Flask 공식 문서&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결론&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라이브러리 공식 문서를 잘 보는 것은 개발자의 필수 역량 중 하나입니다. 공식 문서를 통해 정확하고 최신의 정보를 얻고, 다양한 사용 예제를 참고하여 라이브러리를 효과적으로 활용할 수 있습니다. 또한, 문제 해결에도 큰 도움이 됩니다. 따라서 새로운 라이브러리나 프레임워크를 사용할 때는 항상 공식 문서를 먼저 참고하는 습관을 기르시기 바랍니다.&lt;/p&gt;</description>
      <category>python/공부</category>
      <author>jangkimo</author>
      <guid isPermaLink="true">https://jangkimo.tistory.com/7</guid>
      <comments>https://jangkimo.tistory.com/7#entry7comment</comments>
      <pubDate>Fri, 28 Jun 2024 11:38:36 +0900</pubDate>
    </item>
  </channel>
</rss>