<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>미식가의 개발 일기</title>
    <link>https://irreplaceablehotgirl.tistory.com/</link>
    <description>데이터 사이언티스트 지망생</description>
    <language>ko</language>
    <pubDate>Sat, 8 Aug 2026 13:13:31 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>대체불가 핫걸</managingEditor>
    <image>
      <title>미식가의 개발 일기</title>
      <url>https://tistory1.daumcdn.net/tistory/7198687/attach/c9ac8051476845189752346471389aa5</url>
      <link>https://irreplaceablehotgirl.tistory.com</link>
    </image>
    <item>
      <title>AWS 핵심 서비스 &amp;amp; IAM Identity Center로 유저 권한 관리</title>
      <link>https://irreplaceablehotgirl.tistory.com/126</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;AWS란?&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Amazon Web Services는 서버, 저장소, 데이터베이스와 같은 IT 인프라를 빌려서 사용할 수 있는 클라우드 플랫폼이다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;핵심 서비스&lt;/h2&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. EC2(Elastic Compute Cloud) &amp;rarr; 서버&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플리케이션이 돌아가는 가상의 리눅스 서버&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. S3(Simple Storage Service) &amp;rarr; 파일 저장소&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. RDS(Relational Database Service) &amp;rarr; 데이터베이스&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DB에 데이터 저장 및 관리&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. IAM(Identity and Access Management) &amp;rarr; 권한 관리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자, 서버 권한 설정&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;5. VPC(Virtual Private Cloud) &amp;rarr; 네트워크&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AWS 내에서 생성하는 가상 네트워크 공간&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;IAM Identity Center로 유저 권한 관리&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보안 관점에서 일상적인 작업에 루트 계정을 사용하는 것은 권장되지 않는다. IAM Identity Center를 활용하여 하나의 계정으로 여러 사용자의 권한을 관리할 수 있다. 사용자 또는 그룹으로 묶어 관리할 수 있고, 필요에 따라 커스텀 권한 설정도 가능하다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;IAM Identity Center 접속&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;183&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rZPqs/dJMcacbrk0k/9sWQ1Rt2sUVfKY7cZEv4bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rZPqs/dJMcacbrk0k/9sWQ1Rt2sUVfKY7cZEv4bk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rZPqs/dJMcacbrk0k/9sWQ1Rt2sUVfKY7cZEv4bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrZPqs%2FdJMcacbrk0k%2F9sWQ1Rt2sUVfKY7cZEv4bk%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;907&quot; height=&quot;183&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;183&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;활성화&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;298&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sXsqF/dJMcafsskSx/N5plHkcqMkkPR4ONoeksB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sXsqF/dJMcafsskSx/N5plHkcqMkkPR4ONoeksB1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sXsqF/dJMcafsskSx/N5plHkcqMkkPR4ONoeksB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsXsqF%2FdJMcafsskSx%2FN5plHkcqMkkPR4ONoeksB1%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;340&quot; height=&quot;298&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;298&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;1391&quot; data-origin-height=&quot;612&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfEiZW/dJMcagSsjam/eN3J2EJTmgAlIayosE0eDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfEiZW/dJMcagSsjam/eN3J2EJTmgAlIayosE0eDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfEiZW/dJMcagSsjam/eN3J2EJTmgAlIayosE0eDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfEiZW%2FdJMcagSsjam%2FeN3J2EJTmgAlIayosE0eDK%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;1391&quot; height=&quot;612&quot; data-origin-width=&quot;1391&quot; data-origin-height=&quot;612&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;groups &amp;rarr; create group&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;465&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqT8LZ/dJMcadg63Cz/TLZ4lwbKRyDNiiKD9k95l0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqT8LZ/dJMcadg63Cz/TLZ4lwbKRyDNiiKD9k95l0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqT8LZ/dJMcadg63Cz/TLZ4lwbKRyDNiiKD9k95l0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqT8LZ%2FdJMcadg63Cz%2FTLZ4lwbKRyDNiiKD9k95l0%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;1401&quot; height=&quot;465&quot; data-origin-width=&quot;1401&quot; data-origin-height=&quot;465&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;user &amp;rarr; add user&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;667&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wwpzs/dJMcaipcAGe/zjoIoxGjjDhvDmeMEUtjM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wwpzs/dJMcaipcAGe/zjoIoxGjjDhvDmeMEUtjM1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wwpzs/dJMcaipcAGe/zjoIoxGjjDhvDmeMEUtjM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWwpzs%2FdJMcaipcAGe%2FzjoIoxGjjDhvDmeMEUtjM1%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;1105&quot; height=&quot;667&quot; data-origin-width=&quot;1105&quot; data-origin-height=&quot;667&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;304&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CU8as/dJMcaf0hyy6/2EHLK7r0OSBxGeFuZwisBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CU8as/dJMcaf0hyy6/2EHLK7r0OSBxGeFuZwisBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CU8as/dJMcaf0hyy6/2EHLK7r0OSBxGeFuZwisBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCU8as%2FdJMcaf0hyy6%2F2EHLK7r0OSBxGeFuZwisBk%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;1100&quot; height=&quot;304&quot; data-origin-width=&quot;1100&quot; data-origin-height=&quot;304&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;권한 관리: 생성한 그룹의 권한을 설정한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Dashboard &amp;rarr; Manage permissions&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byLPlD/dJMcacCwx34/vijKkDsf5EO0QqgjgE3rr0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byLPlD/dJMcacCwx34/vijKkDsf5EO0QqgjgE3rr0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byLPlD/dJMcacCwx34/vijKkDsf5EO0QqgjgE3rr0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyLPlD%2FdJMcacCwx34%2FvijKkDsf5EO0QqgjgE3rr0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1017&quot; height=&quot;455&quot; data-origin-width=&quot;1017&quot; data-origin-height=&quot;455&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;&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;aws-accounts &amp;rarr; 내 계정 선택 &amp;rarr; Assign users or groups&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1393&quot; data-origin-height=&quot;466&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cuYd1y/dJMcajawx5G/FOomszhN9kccY0hAx6q7Q0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cuYd1y/dJMcajawx5G/FOomszhN9kccY0hAx6q7Q0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cuYd1y/dJMcajawx5G/FOomszhN9kccY0hAx6q7Q0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcuYd1y%2FdJMcajawx5G%2FFOomszhN9kccY0hAx6q7Q0%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;1393&quot; height=&quot;466&quot; data-origin-width=&quot;1393&quot; data-origin-height=&quot;466&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;permission 설정할 그룹 선택&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;541&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Ypz2x/dJMcafssk3f/sm0KwbtmIKBpO36aNZwA61/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Ypz2x/dJMcafssk3f/sm0KwbtmIKBpO36aNZwA61/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Ypz2x/dJMcafssk3f/sm0KwbtmIKBpO36aNZwA61/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYpz2x%2FdJMcafssk3f%2Fsm0KwbtmIKBpO36aNZwA61%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;1394&quot; height=&quot;541&quot; data-origin-width=&quot;1394&quot; data-origin-height=&quot;541&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;permission 타입 설정: aws permission template 중에서도 adminstrator 권한을 가지는 옵션으로 선택했다. 원하는 permission이 있다면 custom도 가능하다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1372&quot; data-origin-height=&quot;822&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnZK6m/dJMcaduAulM/5mdMesS5rZS6IKcL93EQhk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnZK6m/dJMcaduAulM/5mdMesS5rZS6IKcL93EQhk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnZK6m/dJMcaduAulM/5mdMesS5rZS6IKcL93EQhk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnZK6m%2FdJMcaduAulM%2F5mdMesS5rZS6IKcL93EQhk%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;1372&quot; height=&quot;822&quot; data-origin-width=&quot;1372&quot; data-origin-height=&quot;822&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;다시 권한 설정 화면으로 돌아가서 group과 permission을 차례로 선택해준다&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1397&quot; data-origin-height=&quot;485&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkknwy/dJMcaiJr9M8/qfcn2F1cVRjtam03vaS391/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkknwy/dJMcaiJr9M8/qfcn2F1cVRjtam03vaS391/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkknwy/dJMcaiJr9M8/qfcn2F1cVRjtam03vaS391/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkknwy%2FdJMcaiJr9M8%2Fqfcn2F1cVRjtam03vaS391%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;1397&quot; height=&quot;485&quot; data-origin-width=&quot;1397&quot; data-origin-height=&quot;485&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;1399&quot; data-origin-height=&quot;663&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xfW9X/dJMcaiJr9Ng/KLslc6KsVRzdIO7YJHclA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xfW9X/dJMcaiJr9Ng/KLslc6KsVRzdIO7YJHclA1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xfW9X/dJMcaiJr9Ng/KLslc6KsVRzdIO7YJHclA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxfW9X%2FdJMcaiJr9Ng%2FKLslc6KsVRzdIO7YJHclA1%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;1399&quot; height=&quot;663&quot; data-origin-width=&quot;1399&quot; data-origin-height=&quot;663&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;성공&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;418&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rArvz/dJMcagSsjrN/m366vpb5L6Lij7XOaVsnN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rArvz/dJMcagSsjrN/m366vpb5L6Lij7XOaVsnN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rArvz/dJMcagSsjrN/m366vpb5L6Lij7XOaVsnN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrArvz%2FdJMcagSsjrN%2Fm366vpb5L6Lij7XOaVsnN0%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;1114&quot; height=&quot;418&quot; data-origin-width=&quot;1114&quot; data-origin-height=&quot;418&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;&amp;rarr; 메일로 온 링크로 접속해서 로그인 정보를 등록해주면 관리자 권한을 가진 계정으로 로그인이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; IAM Identity Center에서 생성한 계정은 AWS 기본 로그인 페이지에서 접근이 불가하고 Identity Center 포털로 접근해야한다. (AWS IAM Identity Center &amp;rarr; AWS access portal URLs)&lt;/p&gt;</description>
      <category>infra</category>
      <category>AWS</category>
      <category>awsiamidentitycenter</category>
      <category>AWS개념</category>
      <category>aws핵심서비스</category>
      <author>대체불가 핫걸</author>
      <guid isPermaLink="true">https://irreplaceablehotgirl.tistory.com/126</guid>
      <comments>https://irreplaceablehotgirl.tistory.com/126#entry126comment</comments>
      <pubDate>Thu, 26 Mar 2026 09:46:18 +0900</pubDate>
    </item>
    <item>
      <title>docker 경로 변경 (현재 docker 경로에 용량이 부족할 때)</title>
      <link>https://irreplaceablehotgirl.tistory.com/125</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;docker로 개발을 할 때 용량이 부족하여 실행이 불가하거나 프로세스가 중단되는 경우가 있다. &lt;br /&gt;이때 용량이 충분한 경로로 변경해줘야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;멈춰있는 컨테이너, 네트워크, 이미지 등 정리&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;경로를 변경하기 전, 쓰지 않는 자원 때문에 용량이 부족한 것일수도 있으니 먼저 멈춰있는 자원들을 정리해준다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;	docker system prune
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;용량 확인&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 root 디렉토리의 용량은 89%정도 차 있는 상태이고, 쓰지 않는 자원을 정리했음에도 불구하고 여전히 용량이 부족하다. docker 경로 변경이 필요하다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;df -h
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lEQMo/dJMcadg6hsL/yKXsBE2DdGI89Fws1dC7K1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lEQMo/dJMcadg6hsL/yKXsBE2DdGI89Fws1dC7K1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lEQMo/dJMcadg6hsL/yKXsBE2DdGI89Fws1dC7K1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlEQMo%2FdJMcadg6hsL%2FyKXsBE2DdGI89Fws1dC7K1%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;518&quot; height=&quot;174&quot; data-origin-width=&quot;518&quot; data-origin-height=&quot;174&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;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;현재 경로 확인&lt;/h4&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;	docker info -f '{{ .DockerRootDir }}'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;41&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIJxmN/dJMb996QsEJ/l2sI93Z67SKmE2ZC4DSF80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIJxmN/dJMb996QsEJ/l2sI93Z67SKmE2ZC4DSF80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIJxmN/dJMb996QsEJ/l2sI93Z67SKmE2ZC4DSF80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIJxmN%2FdJMb996QsEJ%2Fl2sI93Z67SKmE2ZC4DSF80%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;525&quot; height=&quot;41&quot; data-origin-width=&quot;525&quot; data-origin-height=&quot;41&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;&amp;nbsp;&lt;/p&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;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;sudo systemctl stop docker
sudo systemctl stop docker.socket
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;기존 데이터 이동(현재 경로 &amp;rarr; 새로운 경로)&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞에서 확인한 현재 경로의 데이터를 새로운 경로로 이동해준다.&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;sudo mv /var/lib/docker /data
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;38&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cODCsP/dJMcacbqvHs/MRIJapaPWMALFKPA0hF5mK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cODCsP/dJMcacbqvHs/MRIJapaPWMALFKPA0hF5mK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cODCsP/dJMcacbqvHs/MRIJapaPWMALFKPA0hF5mK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcODCsP%2FdJMcacbqvHs%2FMRIJapaPWMALFKPA0hF5mK%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;645&quot; height=&quot;38&quot; data-origin-width=&quot;645&quot; data-origin-height=&quot;38&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; ls 명령으로 잘 이동된 것을 확인할 수 있다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;경로 설정&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일을 옮겼으면 도커에게 새로운 경로를 알려줘야 한다. daemon.json 파일에 root 경로를 새로운 경로로 명시해준다.&lt;/p&gt;
&lt;pre class=&quot;dts&quot;&gt;&lt;code&gt;sudo vi /etc/docker/daemon.json
&lt;/code&gt;&lt;/pre&gt;
&lt;pre class=&quot;json&quot;&gt;&lt;code&gt;{
  &quot;data-root&quot;: &quot;/data&quot;
}
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;재실행&lt;/h4&gt;
&lt;pre class=&quot;crmsh&quot;&gt;&lt;code&gt;sudo systemctl start docker
&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;새로운 경로 확인&lt;/h4&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;docker info -f '{{ .DockerRootDir}}'
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;38&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bshdCU/dJMcagrl2WY/mzChxs1jC2C4NrcdWV0eU0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bshdCU/dJMcagrl2WY/mzChxs1jC2C4NrcdWV0eU0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bshdCU/dJMcagrl2WY/mzChxs1jC2C4NrcdWV0eU0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbshdCU%2FdJMcagrl2WY%2FmzChxs1jC2C4NrcdWV0eU0%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;514&quot; height=&quot;38&quot; data-origin-width=&quot;514&quot; data-origin-height=&quot;38&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; /data 폴더로 잘 옮겨진 것을 확인할 수 있다.&lt;/p&gt;</description>
      <category>infra</category>
      <category>docker</category>
      <category>docker경로</category>
      <category>docker경로변경</category>
      <category>도커</category>
      <category>도커경로</category>
      <category>도커경로변경</category>
      <author>대체불가 핫걸</author>
      <guid isPermaLink="true">https://irreplaceablehotgirl.tistory.com/125</guid>
      <comments>https://irreplaceablehotgirl.tistory.com/125#entry125comment</comments>
      <pubDate>Wed, 25 Mar 2026 13:04:11 +0900</pubDate>
    </item>
    <item>
      <title>Docker 개념 정리 및 실무에서 자주 사용하는 명령어</title>
      <link>https://irreplaceablehotgirl.tistory.com/124</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;도커란?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lsquo;&lt;b&gt;애플리케이션 + 인프라&lt;/b&gt;&amp;rsquo;를 하나로 묶어 &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;/li&gt;
&lt;li&gt;&lt;b&gt;인프라&lt;/b&gt;: 애플리케이션이 실행되기 위한 환경&lt;/li&gt;
&lt;/ul&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;도커는 이 둘을 하나의 컨테이너로 묶어 &lt;b&gt;개발 환경과 실행 환경의 차이를 없애준다.&lt;/b&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;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;관리 용이&lt;/li&gt;
&lt;li&gt;빠른 배포 속도&lt;/li&gt;
&lt;/ul&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;p data-ke-size=&quot;size16&quot;&gt;&amp;ldquo;Dockerfile 생성 &amp;rarr; 이미지 빌드 &amp;rarr; 컨테이너 실행&amp;rdquo;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커는 애플리케이션과 인프라를 하나의 컨테이너에 담아 관리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너를 만들기 위한 템플릿을 이미지라고 하며 이미지 구성 순서는 Dockerfile에 정의한다.&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;Dockerfile&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지를 구성하는 순서&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;dockerfile&quot;&gt;&lt;code&gt;FROM python:3.10 # 베이스 이미지(from docker hub)

COPY . /app # 도커 컨테이너 안으로 복사할 경로  

RUN pip install -r requirements.txt # 이미지를 빌드할 때 실행할 명령

CMD [&quot;python&quot;, &quot;app.py&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;Image&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커 컨테이너를 만들기 위한 템플릿&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지를 생성하는 방법은 크게 2가지이다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Dockerfile을 통한 직접 &lt;b&gt;build&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;sqf&quot;&gt;&lt;code&gt;docker image build -t [image-name]:[tag-name] [Dockerfile-path] 

# custom docker file
docker image build -f [Dockerfile-name] -t [image-name]:[tag-name] [Dockerfile-path]
&lt;/code&gt;&lt;/pre&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Docker Hub에서 공식 이미지 &lt;b&gt;pull&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre class=&quot;sqf&quot;&gt;&lt;code&gt;docker image pull [repository-name]:[tag-name]
&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;check images&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker images
&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;Container&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애플리케이션과 인프라가 함께 담긴 가상 박스&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미지 빌드가 끝났다면 container를 실행시켜 실제로 동작하도록 해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이때 포트 포워딩을 해주는 것이 중요한데, 도커 컨테이너는 격리된 환경이기 때문에 내부에서 사용하는 &lt;b&gt;컨테이너 포트&lt;/b&gt;가 따로 존재한다. 따라서 외부에서 접근하려면 &lt;b&gt;호스트 머신 포트&lt;/b&gt;와의 연결이 필요하다.&lt;/p&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;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;docker container run -d -p 9000:8000 [image-name:tag-name]

# p 9000:8000 &amp;lt;- 포트 포워딩(host-port : container-port)
&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;정지&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;sql&quot;&gt;&lt;code&gt;docker container stop [container-name]
&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;파기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;axapta&quot;&gt;&lt;code&gt;docker container rm [container-name]
&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;실행 중이 아닌 모든 컨테이너 파기&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;docker contanier prune
&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;로그 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;axapta&quot;&gt;&lt;code&gt;docker container logs [container-name]
&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;컨테이너 내부에서 명령 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;mel&quot;&gt;&lt;code&gt;docker container exec -it [container-name] sh
&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;복사&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;inform7&quot;&gt;&lt;code&gt;# 컨테이너 -&amp;gt;  호스트
docker contanier cp [container-name]:[origin-path] [target-path]

or

#호스트 -&amp;gt; 컨테이너
docker container cp [origin-path] [container-name]:[target-path]
&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;check containers&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;properties&quot;&gt;&lt;code&gt;docker ps

# 종료된 컨테이너 포함
docker ps -a
&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;docker-compose&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 컨테이너의 실행을 한번에 관리&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 다뤘던 이미지 생성과 컨테이너 실행을 한번에 묶어 관리할 수 있는 것이 바로 docker-compose이다. 하나의 파일에 여러 설정을 정의한 후 한 번의 명령으로 환경을 세팅할 수 있으며 여러 개의 이미지나 컨테이너도 하나의 파일로 관리할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실제 프로젝트를 진행할 때는 docker run 명령어를 일일치 치는 경우는 드물고, 거의 docker-compose를 활용하여 환경을 세팅한다.&lt;/p&gt;
&lt;pre class=&quot;dts&quot;&gt;&lt;code&gt;services:

  embedding-server: # 서비스 정의
    build: . # Dockerfile을 사용하여 이미지 빌드(Dockerfile path 지정) 
    image: embedding-server:latest # image-name:tag-name
    container_name: embedding-server # container-name
    ports:
      - &quot;8000:8000&quot; # port forwarding -&amp;gt; host-port:container-port
    restart: unless-stopped # 직접 멈추기 전까지는 자동 재시작
    volumes: # 볼륨 마운트 -&amp;gt; host 경로:container 경로 연결
      - /data/embedding:/app/data
    depends_on: # 종속성 설정
	    - postgresql # postgresql 실행 후 실행 
      
  postgresql:
    image: postgres # 공식 postgres 이미지 사용 
    restart: always # 어떤 상황에서도 재시작
    container_name: postgres
    ports:
      - &quot;5432:5432&quot;
    environment: 
      POSTGRES_DB: postgres
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: postgres 
      PGDATA: /var/lib/postgresql/data/pgdata # 실제 데이터가 저장될 내부 경로 
    volumes:
      - /data/postgres_260226:/var/lib/postgresql/data
&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;실행: docker-compose up -d (강제 빌드 옵션: --build )&lt;/li&gt;
&lt;li&gt;정지: docker-compose down&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>infra</category>
      <category>docker</category>
      <category>docker compose</category>
      <category>Dockerfile</category>
      <category>도커</category>
      <category>도커명령어</category>
      <category>도커컴포즈</category>
      <category>도커파일</category>
      <author>대체불가 핫걸</author>
      <guid isPermaLink="true">https://irreplaceablehotgirl.tistory.com/124</guid>
      <comments>https://irreplaceablehotgirl.tistory.com/124#entry124comment</comments>
      <pubDate>Mon, 23 Mar 2026 08:24:54 +0900</pubDate>
    </item>
    <item>
      <title>[Elasticsearch]  Elasticsearch 검색 API</title>
      <link>https://irreplaceablehotgirl.tistory.com/123</link>
      <description>&lt;h2 data-end=&quot;405&quot; data-start=&quot;379&quot; data-ke-size=&quot;size26&quot;&gt;  Search API 기본 구조&lt;/h2&gt;
&lt;p data-end=&quot;466&quot; data-start=&quot;407&quot; data-ke-size=&quot;size16&quot;&gt;_search 엔드포인트를 통해 인덱스 내 문서를 검색할 수 있다. 가장 기본적인 형태는 아래와 같다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1752378794329&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;GET /my_index/_search
{
  &quot;query&quot;: {
    &quot;match&quot;: {
      &quot;title&quot;: &quot;elasticsearch&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;1468&quot; data-start=&quot;1442&quot; data-ke-size=&quot;size26&quot;&gt;  자주 사용하는 쿼리 종류&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;1579&quot; data-start=&quot;1470&quot; data-ke-size=&quot;size16&quot;&gt;Elasticsearch에서 쿼리는 &lt;b&gt;Query DSL(Domain Specific Language)&lt;/b&gt;로 작성하며,&lt;/p&gt;
&lt;p data-end=&quot;1579&quot; data-start=&quot;1470&quot; data-ke-size=&quot;size16&quot;&gt;대표적으로 match, term, bool 쿼리가 많이 사용된다.&lt;/p&gt;
&lt;h4 data-end=&quot;1615&quot; data-start=&quot;1586&quot; data-ke-size=&quot;size20&quot;&gt;  match 쿼리 &amp;ndash; 자연어 검색&lt;/h4&gt;
&lt;p data-end=&quot;1722&quot; data-start=&quot;1617&quot; data-ke-size=&quot;size16&quot;&gt;match 쿼리는 &lt;b&gt;전체 텍스트 검색(full-text search)&lt;/b&gt;에 사용된다. 내부적으로 분석기(analyzer)가 적용되어 입력된 문자열을 나누고, 토큰을 기준으로 검색한다.&lt;/p&gt;
&lt;p data-end=&quot;1722&quot; data-start=&quot;1617&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어 &quot;machine learning&quot;을 입력하면 &quot;machine&quot;, &quot;learning&quot; 두 단어 중 하나라도 포함된 문서를 검색한다.&lt;br /&gt;한국어의 경우 형태소 분석을 통해 &quot;머신 러닝&quot; 등도 잘 검색된다.&lt;/p&gt;
&lt;pre id=&quot;code_1752383987193&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;query&quot;: {
  &quot;match&quot;: {
    &quot;title&quot;: &quot;machine learning&quot;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;1962&quot; data-start=&quot;1932&quot; data-ke-size=&quot;size20&quot;&gt;  term 쿼리 &amp;ndash; 정확한 값 일치&lt;/h4&gt;
&lt;p data-end=&quot;2061&quot; data-start=&quot;1964&quot; data-ke-size=&quot;size16&quot;&gt;term 쿼리는 &lt;b&gt;정확히 일치하는 값만 검색&lt;/b&gt;할 때 사용된다. 분석기가 적용되지 않기 때문에, 일반적인 텍스트에는 잘 맞지 않고 &lt;b&gt;정확한 키워드&lt;/b&gt; 검색에 적합하다.&lt;/p&gt;
&lt;pre id=&quot;code_1752384045928&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;query&quot;: {
  &quot;term&quot;: {
    &quot;status&quot;: &quot;approved&quot;
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확히 status 필드가 &quot;approved&quot;인 문서만 검색한다.&lt;br /&gt;만약 텍스트 필드에 term 쿼리를 쓰고 싶다면 .keyword 형태로 사용해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1752384067492&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;term&quot;: { &quot;title.keyword&quot;: &quot;머신 러닝&quot; }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-end=&quot;2325&quot; data-start=&quot;2282&quot; data-ke-size=&quot;size20&quot;&gt;  bool 쿼리 &amp;ndash; 조건 조합(AND / OR / NOT)&lt;/h4&gt;
&lt;p data-end=&quot;2415&quot; data-start=&quot;2327&quot; data-ke-size=&quot;size16&quot;&gt;bool 쿼리는 여러 쿼리를 조합해서 사용할 수 있다. 대표적으로 must, should, must_not, filter 키워드를 포함한다.&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;2619&quot; data-start=&quot;2417&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;2619&quot; data-start=&quot;2482&quot;&gt;
&lt;tr data-end=&quot;2514&quot; data-start=&quot;2482&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2495&quot; data-start=&quot;2482&quot;&gt;must&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2514&quot; data-start=&quot;2495&quot;&gt;모두 일치해야 함 (AND)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2548&quot; data-start=&quot;2515&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2528&quot; data-start=&quot;2515&quot;&gt;should&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2548&quot; data-start=&quot;2528&quot;&gt;하나 이상 일치 (OR)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2582&quot; data-start=&quot;2549&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2562&quot; data-start=&quot;2549&quot;&gt;must_not&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2582&quot; data-start=&quot;2562&quot;&gt;일치하면 제외 (NOT)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;2619&quot; data-start=&quot;2583&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2596&quot; data-start=&quot;2583&quot;&gt;filter&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;2619&quot; data-start=&quot;2596&quot;&gt;점수 계산 없이 필터링 (성능 &amp;uarr;)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;pre id=&quot;code_1752384092788&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;query&quot;: {
  &quot;bool&quot;: {
    &quot;must&quot;: [
      { &quot;match&quot;: { &quot;title&quot;: &quot;AI&quot; } },
      { &quot;term&quot;: { &quot;author.keyword&quot;: &quot;강민지&quot; } }
    ],
    &quot;must_not&quot;: [
      { &quot;term&quot;: { &quot;category.keyword&quot;: &quot;스포츠&quot; } }
    ],
    &quot;filter&quot;: [
      { &quot;range&quot;: { &quot;publish_year&quot;: { &quot;gte&quot;: 2020 } } }
    ]
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;⚙️ 주요 검색 옵션&lt;/h2&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1244&quot; data-start=&quot;601&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1244&quot; data-start=&quot;721&quot;&gt;
&lt;tr data-end=&quot;776&quot; data-start=&quot;721&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;740&quot; data-start=&quot;721&quot;&gt;query&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;776&quot; data-start=&quot;740&quot;&gt;검색 조건 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;827&quot; data-start=&quot;777&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;796&quot; data-start=&quot;777&quot;&gt;size&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;827&quot; data-start=&quot;796&quot;&gt;가져올 문서 개수 설정 (기본: 10)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;878&quot; data-start=&quot;828&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;847&quot; data-start=&quot;828&quot;&gt;from&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;878&quot; data-start=&quot;847&quot;&gt;페이지네이션 시작점 설정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;927&quot; data-start=&quot;879&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;898&quot; data-start=&quot;879&quot;&gt;_source&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;927&quot; data-start=&quot;898&quot;&gt;검색 응답에 포함시킬 필드 지정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;983&quot; data-start=&quot;928&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;947&quot; data-start=&quot;928&quot;&gt;sort&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;983&quot; data-start=&quot;947&quot;&gt;검색 결과 정렬&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1034&quot; data-start=&quot;984&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1003&quot; data-start=&quot;984&quot;&gt;highlight&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1034&quot; data-start=&quot;1003&quot;&gt;검색어 하이라이팅 표시&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1089&quot; data-start=&quot;1035&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1054&quot; data-start=&quot;1035&quot;&gt;aggs&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1089&quot; data-start=&quot;1054&quot;&gt;통계 및 집계 분석&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1140&quot; data-start=&quot;1090&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1109&quot; data-start=&quot;1090&quot;&gt;post_filter&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1140&quot; data-start=&quot;1109&quot;&gt;집계 유지한 채 결과 필터링&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1193&quot; data-start=&quot;1141&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1162&quot; data-start=&quot;1141&quot;&gt;track_total_hits&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1193&quot; data-start=&quot;1162&quot;&gt;총 문서 수 계산 방식 조절&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1244&quot; data-start=&quot;1194&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1218&quot; data-start=&quot;1194&quot;&gt;explain / profile&lt;/td&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1244&quot; data-start=&quot;1218&quot;&gt;쿼리 설명 및 성능 분석 도구&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1289&quot; data-start=&quot;1246&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, 다음과 같이 검색 결과를 정렬하고 일부 필드만 응답받을 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1752384146287&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;query&quot;: { &quot;match&quot;: { &quot;title&quot;: &quot;AI&quot; } },
  &quot;_source&quot;: [&quot;title&quot;, &quot;author&quot;],
  &quot;size&quot;: 5,
  &quot;sort&quot;: [{ &quot;publish_date&quot;: &quot;desc&quot; }]
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Elasticsearch</category>
      <category>bulk api</category>
      <category>ElasticSearch</category>
      <category>elasticsearch 대량 색인</category>
      <category>엘라스틱서치</category>
      <author>대체불가 핫걸</author>
      <guid isPermaLink="true">https://irreplaceablehotgirl.tistory.com/123</guid>
      <comments>https://irreplaceablehotgirl.tistory.com/123#entry123comment</comments>
      <pubDate>Sun, 13 Jul 2025 14:23:07 +0900</pubDate>
    </item>
    <item>
      <title>[Elasticsearch] Bulk API: Elasticsearch 대량 색인 작업</title>
      <link>https://irreplaceablehotgirl.tistory.com/122</link>
      <description>&lt;h2 data-end=&quot;400&quot; data-start=&quot;385&quot; data-ke-size=&quot;size26&quot;&gt;✅ Bulk API란?&lt;/h2&gt;
&lt;p data-end=&quot;502&quot; data-start=&quot;402&quot; data-ke-size=&quot;size16&quot;&gt;Bulk API는 여러 개의 문서 작업(색인, 생성, 수정, 삭제)을 &lt;b&gt;한 번의 HTTP 요청&lt;/b&gt;으로 처리할 수 있는 기능이다.&lt;br /&gt;이 방식을 사용하면 다음과 같은 이점이 있다:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;583&quot; data-start=&quot;504&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;547&quot; data-start=&quot;504&quot;&gt;다수의 HTTP 호출 &amp;rarr; 1회 요청으로 병합 &amp;rarr; &lt;b&gt;네트워크 비용 절감&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;567&quot; data-start=&quot;548&quot;&gt;대량 색인 시 &lt;b&gt;속도 향상&lt;/b&gt;&lt;/li&gt;
&lt;li data-end=&quot;583&quot; data-start=&quot;568&quot;&gt;비동기 일괄 작업에 적합&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;공식 홈페이지&amp;nbsp;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1752379030003&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Bulk index or delete documents
 | Elasticsearch API documentation&quot; data-og-description=&quot;All methods and paths for this operation: POST /_bulk PUT /_bulk POST ...&quot; data-og-host=&quot;www.elastic.co&quot; data-og-source-url=&quot;https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-bulk&quot; data-og-url=&quot;https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-bulk&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b12dIG/hyZjzILiQM/kw1UjMX9rg39wAgvP0MEW0/img.png?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628&quot;&gt;&lt;a href=&quot;https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-bulk&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.elastic.co/docs/api/doc/elasticsearch/operation/operation-bulk&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b12dIG/hyZjzILiQM/kw1UjMX9rg39wAgvP0MEW0/img.png?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628');&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;Bulk index or delete documents | Elasticsearch API documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;All methods and paths for this operation: POST /_bulk PUT /_bulk POST ...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.elastic.co&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;610&quot; data-start=&quot;590&quot; data-ke-size=&quot;size26&quot;&gt;  요청 형식 (NDJSON)&lt;/h2&gt;
&lt;p data-end=&quot;658&quot; data-start=&quot;612&quot; data-ke-size=&quot;size16&quot;&gt;Bulk API는 &lt;b&gt;newline-delimited JSON&lt;/b&gt; 포맷을 사용한다.&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1752378794329&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;POST /_bulk
Content-Type: application/x-ndjson

{ &quot;index&quot;: { &quot;_index&quot;: &quot;my_index&quot;, &quot;_id&quot;: &quot;1&quot; } }
{ &quot;title&quot;: &quot;문서 1&quot;, &quot;content&quot;: &quot;내용입니다&quot; }
{ &quot;create&quot;: { &quot;_index&quot;: &quot;my_index&quot;, &quot;_id&quot;: &quot;2&quot; } }
{ &quot;title&quot;: &quot;문서 2&quot;, &quot;content&quot;: &quot;새 문서입니다&quot; }
{ &quot;update&quot;: { &quot;_index&quot;: &quot;my_index&quot;, &quot;_id&quot;: &quot;1&quot; } }
{ &quot;doc&quot;: { &quot;title&quot;: &quot;수정된 문서 1&quot; } }
{ &quot;delete&quot;: { &quot;_index&quot;: &quot;my_index&quot;, &quot;_id&quot;: &quot;2&quot; } }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-end=&quot;1066&quot; data-start=&quot;1046&quot; data-ke-size=&quot;size26&quot;&gt;  작업 타입별 설명 및 예제&lt;/h2&gt;
&lt;h3 data-end=&quot;1099&quot; data-start=&quot;1068&quot; data-ke-size=&quot;size23&quot;&gt;1️⃣ index &amp;ndash; 문서 추가 또는 덮어쓰기&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1131&quot; data-start=&quot;1101&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1131&quot; data-start=&quot;1101&quot;&gt;존재하는 문서일 경우 &lt;b&gt;덮어씀&lt;/b&gt; (upsert)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1752378853377&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{ &quot;index&quot;: { &quot;_index&quot;: &quot;my_index&quot;, &quot;_id&quot;: &quot;1&quot; } }
{ &quot;title&quot;: &quot;Elasticsearch 배우기&quot;, &quot;content&quot;: &quot;Bulk API 정리&quot; }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1289&quot; data-start=&quot;1259&quot; data-ke-size=&quot;size23&quot;&gt;2️⃣ create &amp;ndash; 문서 없을 때만 생성&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1311&quot; data-start=&quot;1291&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1311&quot; data-start=&quot;1291&quot;&gt;문서가 존재하면 &lt;b&gt;에러 발생&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1752378884967&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{ &quot;create&quot;: { &quot;_index&quot;: &quot;my_index&quot;, &quot;_id&quot;: &quot;2&quot; } }
{ &quot;title&quot;: &quot;새 문서&quot;, &quot;category&quot;: &quot;tech&quot; }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1451&quot; data-start=&quot;1421&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1451&quot; data-start=&quot;1421&quot; data-ke-size=&quot;size23&quot;&gt;3️⃣ update &amp;ndash; 문서 일부 필드 수정&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1472&quot; data-start=&quot;1453&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1472&quot; data-start=&quot;1453&quot;&gt;기존 문서에서 특정 필드만 수정&lt;/li&gt;
&lt;/ul&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1752378891509&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{ &quot;update&quot;: { &quot;_index&quot;: &quot;my_index&quot;, &quot;_id&quot;: &quot;1&quot; } }
{ &quot;doc&quot;: { &quot;title&quot;: &quot;업데이트된 제목&quot; } }&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1601&quot; data-start=&quot;1577&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;1601&quot; data-start=&quot;1577&quot; data-ke-size=&quot;size23&quot;&gt;4️⃣ delete &amp;ndash; 문서 삭제&lt;/h3&gt;
&lt;pre id=&quot;code_1752378899202&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{ &quot;delete&quot;: { &quot;_index&quot;: &quot;my_index&quot;, &quot;_id&quot;: &quot;2&quot; } }&lt;/code&gt;&lt;/pre&gt;
&lt;div&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;div&gt;
&lt;h2 data-end=&quot;2238&quot; data-start=&quot;2227&quot; data-ke-size=&quot;size26&quot;&gt;⚠️ 주의할 점&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2407&quot; data-start=&quot;2240&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2289&quot; data-start=&quot;2240&quot;&gt;요청 형식은 반드시 &lt;b&gt;newline 단위의 JSON(NDJSON)&lt;/b&gt; 이어야 한다.&lt;/li&gt;
&lt;li data-end=&quot;2355&quot; data-start=&quot;2290&quot;&gt;너무 많은 문서를 한 번에 처리하면 성능 저하 또는 실패 발생 &amp;rarr; &lt;b&gt;보통 1000개 단위&lt;/b&gt;로 나누어 처리 추천&lt;/li&gt;
&lt;li data-end=&quot;2407&quot; data-start=&quot;2356&quot;&gt;응답에서 errors: true가 나오면 개별 작업의 실패 여부를 꼭 확인해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Elasticsearch</category>
      <category>bulk api</category>
      <category>ElasticSearch</category>
      <category>elasticsearch 대량 색인</category>
      <category>엘라스틱서치</category>
      <author>대체불가 핫걸</author>
      <guid isPermaLink="true">https://irreplaceablehotgirl.tistory.com/122</guid>
      <comments>https://irreplaceablehotgirl.tistory.com/122#entry122comment</comments>
      <pubDate>Sun, 13 Jul 2025 12:59:50 +0900</pubDate>
    </item>
    <item>
      <title>[Elasticsearch] 엘라스틱서치 인덱싱</title>
      <link>https://irreplaceablehotgirl.tistory.com/121</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;엘라스틱서치에서 인덱스란?&lt;br /&gt;데이터를 저장하는 공간으로 매핑을 통해 데이터 구조를 정의할 수 있다.&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  인덱스 생성 구조&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당 API로 PUT 요청을 보내면 새로운 인덱스가 생성된다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; PUT : https://ip:9200/index_name &lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인덱스 생성을 위해서는 JSON body에 2가지를 정의해야 한다.
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;`settings`&lt;/b&gt;: 클러스터, 인덱스 운영 설정(샤드 개수, 복제본 수, 텍스트 분석기 정의(커스텀 필터 등록) 등)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;`mappings`&lt;/b&gt;: 필드 이름과 데이터 타입 지정&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 예제는 커스텀 analyzer인 &lt;b&gt;`my_analyzer`&lt;/b&gt;에 &lt;b&gt;`standard`&lt;/b&gt; tokenizer로 모든 단어를 분리하고, &lt;b&gt;`lowercase`&lt;/b&gt; filter를 적용해 모든 단어를 소문자로 변환하도록 지정한다.&lt;br /&gt;&lt;b&gt;`title`&lt;/b&gt;과 &lt;b&gt;`content`&lt;/b&gt; 필드에 해당 커스텀 analyzer를 적용하고, id는 검색에 사용하지 않도록 &lt;b&gt;`index: false`&lt;/b&gt;로 정의되었다.&lt;/p&gt;
&lt;pre id=&quot;code_1751796279412&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;settings&quot;: {
        &quot;analysis&quot;: {
            &quot;analyzer&quot;: {
                &quot;my_analyzer&quot;: {
                    &quot;type&quot;: &quot;custom&quot;,
                    &quot;char_filter&quot;: [],
                    &quot;tokenizer&quot;: &quot;standard&quot;,
                    &quot;filter&quot;: [&quot;lowercase&quot;]
                }
            },
            &quot;char_filter&quot;: {

            },
            &quot;tokenizer&quot;: {
                &quot;standard&quot;: {
                    &quot;type&quot;: &quot;standard&quot;
                }
            },
            &quot;filter&quot;: {
                &quot;lowercase&quot;: {
                    &quot;type&quot;: &quot;lowercase&quot;
                }
            }
        }
    },

    &quot;mappings&quot;: {
        &quot;properties&quot;: {
            &quot;id&quot;: {
                &quot;type&quot;: &quot;long&quot;,
                &quot;index&quot;: false
            },
            &quot;title&quot;: {
                &quot;type&quot;: &quot;text&quot;,
                &quot;analyzer&quot;: &quot;my_analyzer&quot;
            },
            &quot;content&quot;: {
                &quot;type&quot;: &quot;text&quot;,
                &quot;analyzer&quot;: &quot;my_analyzer&quot;
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ elastic 공식 인덱스 생성 가이드&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1751795804229&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;analyzer | Reference&quot; data-og-description=&quot;The analyzer parameter specifies the analyzer used for text analysis when indexing or searching a text field. Unless overridden with the search_analyzer...&quot; data-og-host=&quot;www.elastic.co&quot; data-og-source-url=&quot;https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/analyzer&quot; data-og-url=&quot;https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/analyzer&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bVYA7b/hyZjpStvh8/kTgfySKuSN7L96i1TN1mCk/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080&quot;&gt;&lt;a href=&quot;https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/analyzer&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.elastic.co/docs/reference/elasticsearch/mapping-reference/analyzer&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bVYA7b/hyZjpStvh8/kTgfySKuSN7L96i1TN1mCk/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080');&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;analyzer | Reference&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The analyzer parameter specifies the analyzer used for text analysis when indexing or searching a text field. Unless overridden with the search_analyzer...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.elastic.co&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;h4 data-ke-size=&quot;size20&quot;&gt;분석기 테스트&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;GET : https://ip:9200/index_name/_analyze&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1751796667065&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;analyzer&quot;: &quot;my_analyzer&quot;,
  &quot;text&quot;: &quot;안녕하세요. 테스트 문장입니다.&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;931&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diDPnD/btsO7eOEcEl/reZCXDD2w5pS4xMNTf2E30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diDPnD/btsO7eOEcEl/reZCXDD2w5pS4xMNTf2E30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diDPnD/btsO7eOEcEl/reZCXDD2w5pS4xMNTf2E30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiDPnD%2FbtsO7eOEcEl%2FreZCXDD2w5pS4xMNTf2E30%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;459&quot; height=&quot;717&quot; data-origin-width=&quot;596&quot; data-origin-height=&quot;931&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  nori tokenizer&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;앞서 사용한 standard tokenizer는 단순 띄어쓰기 및 문장 부호 기준 토큰화를 진행하므로 한글의 조사나 어미를 잘 처리하지 못한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 한글을 처리할 때는 nori tokenizer를 주로 사용한다.&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;b&gt;1. 엘라스틱서치 컨테이너 접속&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751797902181&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker exec -it es /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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. nori 분석기 설치&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751797976546&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bin/elasticsearch-plugin install analysis-nori&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 엘라스틱서치 컨테이너 재시작&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751798028679&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker restart es&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. setting에 nori tokenizer 추가&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;`decompound_mode`: 복합어 분해 방법&amp;nbsp;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;`none`: 분해 X&lt;/li&gt;
&lt;li&gt;`discard`: 분해해서 버림&lt;/li&gt;
&lt;li&gt;`mixed`: 분해해서 포함 (복합어 + 원어)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;`discard_punctuation`: 문장 부호를 제거할지 여부 (`true`, `false`)&lt;/li&gt;
&lt;li&gt;`lenient`: 오류에 관대하게 동작할지 여부 (`true`, `false`)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751798467550&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;settings&quot;: {
    &quot;analysis&quot;: {
        &quot;analyzer&quot;: {
            &quot;my_analyzer&quot;: {
                &quot;type&quot;: &quot;custom&quot;,
                &quot;char_filter&quot;: [],
                &quot;tokenizer&quot;: &quot;nori&quot;,
                &quot;filter&quot;: [&quot;lowercase&quot;]
            }
        },
        &quot;char_filter&quot;: {

        },
        &quot;tokenizer&quot;: {
            &quot;nori&quot;: {
                &quot;type&quot;: &quot;nori_tokenizer&quot;,
                &quot;decompound_mode&quot;: &quot;mixed&quot;,
                &quot;discard_punctuation&quot;: true,
                &quot;ienient&quot;: true

            }
        },
        &quot;filter&quot;: {
            &quot;lowercase&quot;: {
                &quot;type&quot;: &quot;lowercase&quot;
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  사용자 사전 기반 tokenizer&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정 단어들만 커스텀하여 분해하고 싶다면 사용자 사전을 사용하면 된다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 컨테이너 외부에 userdict.txt 생성&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;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;155&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YydyQ/btsO5F0260c/dDCYprhcCcHQXkdAhasykk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YydyQ/btsO5F0260c/dDCYprhcCcHQXkdAhasykk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YydyQ/btsO5F0260c/dDCYprhcCcHQXkdAhasykk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYydyQ%2FbtsO5F0260c%2FdDCYprhcCcHQXkdAhasykk%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;155&quot; height=&quot;57&quot; data-origin-width=&quot;155&quot; data-origin-height=&quot;57&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1751802465909&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mkdir elastic_dict
cd elastic_dict

touch userdict.txt&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 기존 컨테이너 제거 후 새로 생성&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;/ul&gt;
&lt;pre id=&quot;code_1751802548688&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker stop es
sudo docker rm es&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;재생성&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751802683429&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker run -d --restart unless-stopped \
  --name es \
  -v /home/mingd/elastic_dict/:/usr/share/elasticsearch/config/dict/ \ # 여기에 경로 추가 
  -p 9200:9200 -p 9300:9300 \
  --network myes \
  -e &quot;discovery.type=single-node&quot; \
  -e &quot;ES_JAVA_OPTS=-Xms2g -Xmx2g&quot; \
  docker.elastic.co/elasticsearch/elasticsearch:8.17.2&lt;/code&gt;&lt;/pre&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;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751802917501&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker exec -it es /bin/bash

bin/elasticsearch-setup-passwords interactive&lt;/code&gt;&lt;/pre&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;nori 분석기 재설치&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751802937780&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bin/elasticsearch-plugin install analysis-nori

sudo docker restart es&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. settings 수정&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751804302456&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;settings&quot;: {
    &quot;analysis&quot;: {
        &quot;analyzer&quot;: {
            &quot;my_analyzer&quot;: {
                &quot;type&quot;: &quot;custom&quot;,
                &quot;char_filter&quot;: [],
                &quot;tokenizer&quot;: &quot;nori&quot;,
                &quot;filter&quot;: [&quot;lowercase&quot;]
            }
        },
        &quot;char_filter&quot;: {

        },
        &quot;tokenizer&quot;: {
            &quot;nori&quot;: {
                &quot;type&quot;: &quot;nori_tokenizer&quot;,
                &quot;decompound_mode&quot;: &quot;mixed&quot;,
                &quot;discard_punctuation&quot;: true,
                &quot;ienient&quot;: true,
                &quot;user_dictionary&quot;: &quot;dict/userdict.txt&quot; # 여기에 경로 추가 

            }
        },
        &quot;filter&quot;: {
            &quot;lowercase&quot;: {
                &quot;type&quot;: &quot;lowercase&quot;
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. userdict.txt 작성&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;txt 파일 수정 후에는 컨테이너 재시작 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;99&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dWOBBS/btsO7OB0Utg/BG6RiVOOd4WsZ5gCUkGGtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dWOBBS/btsO7OB0Utg/BG6RiVOOd4WsZ5gCUkGGtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dWOBBS/btsO7OB0Utg/BG6RiVOOd4WsZ5gCUkGGtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdWOBBS%2FbtsO7OB0Utg%2FBG6RiVOOd4WsZ5gCUkGGtk%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;286&quot; height=&quot;95&quot; data-origin-width=&quot;298&quot; data-origin-height=&quot;99&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;944&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coaVPT/btsO7RrXY6Z/8cwCl2quQsg3kCAJItC4g1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coaVPT/btsO7RrXY6Z/8cwCl2quQsg3kCAJItC4g1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coaVPT/btsO7RrXY6Z/8cwCl2quQsg3kCAJItC4g1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoaVPT%2FbtsO7RrXY6Z%2F8cwCl2quQsg3kCAJItC4g1%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;646&quot; height=&quot;744&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;944&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;  동의어 사전 기반 filter&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;문장 분해가 끝나면 filtering 작업을 해주는데 동의어 사전을 만들어 특정 단어를 치환, 확장한다.&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-end=&quot;291&quot; data-start=&quot;249&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-end=&quot;291&quot; data-start=&quot;249&quot; data-ke-size=&quot;size18&quot;&gt;⚠️ 주의사항 (tokenizer와 synonym filter 충돌)&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;560&quot; data-start=&quot;293&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;326&quot; data-start=&quot;293&quot;&gt;&lt;b&gt;동의어 필터는 tokenizer 이후에 적용&lt;/b&gt;된다.&lt;/li&gt;
&lt;li data-end=&quot;388&quot; data-start=&quot;327&quot;&gt;따라서, 동의어 사전에 정의된 단어들이 &lt;b&gt;tokenizer에서 정확히 분리되는 단위와 일치해야&lt;/b&gt; 한다.&lt;/li&gt;
&lt;li data-end=&quot;560&quot; data-start=&quot;389&quot;&gt;예를 들어:
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;560&quot; data-start=&quot;400&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;492&quot; data-start=&quot;400&quot;&gt;tokenizer가 &quot;운동화&quot;를 &quot;운동&quot;, &quot;화&quot;로 나눈다면,&lt;br /&gt;동의어 사전에서 &quot;운동화 =&amp;gt; 스니커즈&quot;로 지정해도 &lt;b&gt;작동하지 않음&lt;/b&gt;.&lt;/li&gt;
&lt;li data-end=&quot;560&quot; data-start=&quot;495&quot;&gt;이 경우 &quot;운동화&quot;가 &lt;b&gt;하나의 token으로 유지되도록 사용자 사전에 등록&lt;/b&gt;해야 동의어 필터가 적용 가능.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;627&quot; data-start=&quot;562&quot; data-ke-size=&quot;size16&quot;&gt;✅ 따라서 &lt;b&gt;동의어로 처리할 단어는 tokenizer에서 분리되지 않도록 사용자 사전에 미리 정의해두어야 한다.&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;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. 컨테이너 외부에 userdict.txt 생성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 위에서 폴더 만들고 마운트 했으므로 엘라스틱 컨테이너 재성성하지 않아도 됨&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1751807990436&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cd elastic_dict

touch synonym.txt&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;size18&quot;&gt;&lt;b&gt;2. settings 수정&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751808546520&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&quot;settings&quot;: {
    &quot;analysis&quot;: {
        &quot;analyzer&quot;: {
            &quot;my_analyzer&quot;: {
                &quot;type&quot;: &quot;custom&quot;,
                &quot;char_filter&quot;: [],
                &quot;tokenizer&quot;: &quot;nori&quot;,
                &quot;filter&quot;: [&quot;lowercase&quot;, &quot;synonym&quot;] # 여기에 추가 
            }
        },
        &quot;char_filter&quot;: {},
        &quot;tokenizer&quot;: {
            &quot;nori&quot;: {
                &quot;type&quot;: &quot;nori_tokenizer&quot;,
                &quot;decompound_mode&quot;: &quot;mixed&quot;,
                &quot;discard_punctuation&quot;: true,
                &quot;ienient&quot;: true,
                &quot;user_dictionary&quot;: &quot;dict/userdict.txt&quot;
            }
        },
        &quot;filter&quot;: {
            &quot;lowercase&quot;: {
                &quot;type&quot;: &quot;lowercase&quot;
            },
            # 여기에 추가 
            &quot;synonym&quot;: {
                &quot;type&quot;: &quot;synonym&quot;,
                &quot;synonyms_path&quot;: &quot;dict/synonym.txt&quot;,
                &quot;lenient&quot;: true
            }
        }
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;3. synonym.txt 작성&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;txt 파일 수정 후에는 컨테이너 재시작 필수&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;확장&lt;/blockquote&gt;
&lt;pre id=&quot;code_1751808829517&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ai, 인공지능, artificial intelligence
택배, 배송, 배달
휴대폰, 스마트폰, 모바일&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;치환&lt;/blockquote&gt;
&lt;pre id=&quot;code_1751808837422&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;이메일 =&amp;gt; 메일
핸드폰 =&amp;gt; 휴대폰
노트북컴퓨터 =&amp;gt; 노트북&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;택배를 검색하면 type이 synonym인 배송, 배달이 함께 검색되고, 이메일 &amp;gt; 메일로 검색되는 것을 확인할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;929&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3mJEK/btsO5L1jctY/kM3KLwS2qAvpSLNr1WOVyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3mJEK/btsO5L1jctY/kM3KLwS2qAvpSLNr1WOVyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3mJEK/btsO5L1jctY/kM3KLwS2qAvpSLNr1WOVyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3mJEK%2FbtsO5L1jctY%2FkM3KLwS2qAvpSLNr1WOVyK%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;446&quot; height=&quot;858&quot; data-origin-width=&quot;483&quot; data-origin-height=&quot;929&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>Elasticsearch</category>
      <category>ElasticSearch</category>
      <category>엘라스틱서치</category>
      <category>엘라스틱서치 동의어 사전</category>
      <category>엘라스틱서치 사용자 사전</category>
      <category>엘라스틱서치 인덱싱</category>
      <author>대체불가 핫걸</author>
      <guid isPermaLink="true">https://irreplaceablehotgirl.tistory.com/121</guid>
      <comments>https://irreplaceablehotgirl.tistory.com/121#entry121comment</comments>
      <pubDate>Sun, 6 Jul 2025 22:47:11 +0900</pubDate>
    </item>
    <item>
      <title>[Elasticsearch] 엘라스틱서치, 키바나 설치하기: Ubuntu(WSL), Docker 환경</title>
      <link>https://irreplaceablehotgirl.tistory.com/119</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;Elasticsearch는 다양한 방법과 경로를 통해 설치할 수 있는데요.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저는 &lt;b&gt;Ubuntu(WSL) 기반으로&amp;nbsp;Docker를 이용&lt;/b&gt;해 설치했습니다.&amp;nbsp;&lt;/span&gt;&lt;/blockquote&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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;0️⃣ Ubuntu(WSL) + VSCode 환경 설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;※ 환경 설정이 필요한 분들은 아래 포스팅을 참고해주세요.&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1751721199900&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Ubuntu(WSL) + VSCode 환경 설정&quot; data-og-description=&quot;Windows 10/11 환경에서 Ubuntu WSL을 설치하고, VSCode와 연동하여 개발 환경을 최적화하는 과정을 단계별로 자세히 소개하겠습니다. Powershell 관리자 권한 실행 후 wsl 설치wsl --install Ubuntu 설치wsl --install&quot; data-og-host=&quot;irreplaceablehotgirl.tistory.com&quot; data-og-source-url=&quot;https://irreplaceablehotgirl.tistory.com/120&quot; data-og-url=&quot;https://irreplaceablehotgirl.tistory.com/120&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bnUEE1/hyZjATT098/Fuh35FWKyv71TIj5Q9S27K/img.png?width=432&amp;amp;height=188&amp;amp;face=0_0_432_188,https://scrap.kakaocdn.net/dn/oLwqZ/hyZfZOx2Jd/kWdgqnDn0CP5NlLf06IIU1/img.png?width=432&amp;amp;height=188&amp;amp;face=0_0_432_188,https://scrap.kakaocdn.net/dn/GGMU5/hyZfYa3k2f/4gK1LQTlgBvsBGHePW5We1/img.jpg?width=736&amp;amp;height=736&amp;amp;face=0_0_736_736&quot;&gt;&lt;a href=&quot;https://irreplaceablehotgirl.tistory.com/120&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://irreplaceablehotgirl.tistory.com/120&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bnUEE1/hyZjATT098/Fuh35FWKyv71TIj5Q9S27K/img.png?width=432&amp;amp;height=188&amp;amp;face=0_0_432_188,https://scrap.kakaocdn.net/dn/oLwqZ/hyZfZOx2Jd/kWdgqnDn0CP5NlLf06IIU1/img.png?width=432&amp;amp;height=188&amp;amp;face=0_0_432_188,https://scrap.kakaocdn.net/dn/GGMU5/hyZfYa3k2f/4gK1LQTlgBvsBGHePW5We1/img.jpg?width=736&amp;amp;height=736&amp;amp;face=0_0_736_736');&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;Ubuntu(WSL) + VSCode 환경 설정&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Windows 10/11 환경에서 Ubuntu WSL을 설치하고, VSCode와 연동하여 개발 환경을 최적화하는 과정을 단계별로 자세히 소개하겠습니다. Powershell 관리자 권한 실행 후 wsl 설치wsl --install Ubuntu 설치wsl --install&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;irreplaceablehotgirl.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;1️⃣ Docker 설정&amp;nbsp;&lt;/h2&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 Desktop을 설치해주세요.&lt;/p&gt;
&lt;figure id=&quot;og_1751707058909&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Docker Desktop: The #1 Containerization Tool for Developers | Docker&quot; data-og-description=&quot;Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.&quot; data-og-host=&quot;www.docker.com&quot; data-og-source-url=&quot;https://www.docker.com/products/docker-desktop/&quot; data-og-url=&quot;https://www.docker.com/products/docker-desktop/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/kcFwt/hyZfxEuryf/5iw2IQYBQg4hCVnak1d880/img.png?width=1110&amp;amp;height=580&amp;amp;face=0_0_1110_580,https://scrap.kakaocdn.net/dn/bWuQ54/hyZf61cyzE/iZpTm3AXyWtq5kaWkGyuV1/img.png?width=1110&amp;amp;height=580&amp;amp;face=0_0_1110_580,https://scrap.kakaocdn.net/dn/SJWWW/hyZf2EvmX1/lvphw23SFGgb2UniN4YzwK/img.png?width=2596&amp;amp;height=1629&amp;amp;face=0_0_2596_1629&quot;&gt;&lt;a href=&quot;https://www.docker.com/products/docker-desktop/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.docker.com/products/docker-desktop/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/kcFwt/hyZfxEuryf/5iw2IQYBQg4hCVnak1d880/img.png?width=1110&amp;amp;height=580&amp;amp;face=0_0_1110_580,https://scrap.kakaocdn.net/dn/bWuQ54/hyZf61cyzE/iZpTm3AXyWtq5kaWkGyuV1/img.png?width=1110&amp;amp;height=580&amp;amp;face=0_0_1110_580,https://scrap.kakaocdn.net/dn/SJWWW/hyZf2EvmX1/lvphw23SFGgb2UniN4YzwK/img.png?width=2596&amp;amp;height=1629&amp;amp;face=0_0_2596_1629');&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;Docker Desktop: The #1 Containerization Tool for Developers | Docker&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Docker Desktop is collaborative containerization software for developers. Get started and download Docker Desktop today on Mac, Windows, or Linux.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.docker.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Docker Desktop &amp;gt; Settings &amp;gt; Resources &amp;gt; WSL Integration에서 Ubuntu 체크 후 Apply &amp;amp; restart&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;685&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqyTZq/btsO60CNPeK/josKZYKvRAsU825HR2kYO0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqyTZq/btsO60CNPeK/josKZYKvRAsU825HR2kYO0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqyTZq/btsO60CNPeK/josKZYKvRAsU825HR2kYO0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdqyTZq%2FbtsO60CNPeK%2FjosKZYKvRAsU825HR2kYO0%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;791&quot; height=&quot;685&quot; data-origin-width=&quot;958&quot; data-origin-height=&quot;685&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ Elasticsearch 설치&lt;/h2&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;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;사용자 정의 네트워크 생성&amp;nbsp;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1751707417754&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker network create --driver bridge myes # 네트워크 이름&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Elasticsearch 실행&amp;nbsp;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1751707508710&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker run -d --restart unless-stopped \
  --name es \
  -p 9200:9200 -p 9300:9300 \
  --network myes \
  -e &quot;discovery.type=single-node&quot; \
  -e &quot;ES_JAVA_OPTS=-Xms2g -Xmx2g&quot; \
  docker.elastic.co/elasticsearch/elasticsearch:8.17.2&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1751707801060&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker run -d --restart unless-stopped \  # 백그라운드 실행, 자동 재시작 
  --name es \  # 도커 컨테이너 이름 
  -p 9200:9200 -p 9300:9300 \  # 호스트 9200, 9300 포트를 컨테이너 9200, 9300 포트에 각각 매핑 (REST API, 클러스터 통신용)
  --network myes \  # 연결할 네트워크 
  -e &quot;discovery.type=single-node&quot; \  # 단일 노드 클러스터 모드
  -e &quot;ES_JAVA_OPTS=-Xms2g -Xmx2g&quot; \  # JVM 힙 메모리 최소/최대 크기를 2GB로 설정
  docker.elastic.co/elasticsearch/elasticsearch:8.17.2  # Elasticsearch 공식 8.17.2 버전 도커 이미지 지정&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;컨테이너 확인&amp;nbsp;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1751707901682&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker ps&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 해당 명령어를 수행했을 때 생성한 컨테이너 이름이 보인다면 성공&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3️⃣ ES 암호 재설정 및 접속&amp;nbsp;&lt;/h2&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;REST API 요청 시 필요한 암호 재설정이 필요하다.&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;ES 컨테이너 접속&lt;/blockquote&gt;
&lt;pre id=&quot;code_1751708403089&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker exec -it es /bin/bash&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;비밀번호 재설정 명령&amp;nbsp;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1751708939149&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bin/elasticsearch-setup-passwords interactive&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;381&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmUDIa/btsO6LZ04Vl/2h2XWIYysQ0MUU4F5r2Qyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmUDIa/btsO6LZ04Vl/2h2XWIYysQ0MUU4F5r2Qyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmUDIa/btsO6LZ04Vl/2h2XWIYysQ0MUU4F5r2Qyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmUDIa%2FbtsO6LZ04Vl%2F2h2XWIYysQ0MUU4F5r2Qyk%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;459&quot; height=&quot;348&quot; data-origin-width=&quot;502&quot; data-origin-height=&quot;381&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;rarr;&amp;nbsp;해당 화면이 나오면 순차적으로 6자리 비밀번호를 입력해준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;ES 접속&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로컬로 접속을 했고, 사용자 이름: elastic(기본 관리자), 비밀번호를 입력하면 접속되는 것을 확인할 수 있다.&lt;/li&gt;
&lt;li&gt;Elasticsearch 8.x 버전부터는 &lt;b&gt;보안이 기본적으로 활성화&lt;/b&gt;되어 있기 때문에&lt;b&gt; https로 접속&lt;/b&gt;해야 한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; https://[IP주소]:9200&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bxdYQ8/btsO5Vieamh/CTrsTOGR05Wl9rvfv3QHw1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bxdYQ8/btsO5Vieamh/CTrsTOGR05Wl9rvfv3QHw1/img.png&quot; data-origin-width=&quot;510&quot; data-origin-height=&quot;443&quot; data-is-animation=&quot;false&quot; style=&quot;width: 42.6121%; margin-right: 10px;&quot; data-widthpercent=&quot;43.11&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bxdYQ8/btsO5Vieamh/CTrsTOGR05Wl9rvfv3QHw1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbxdYQ8%2FbtsO5Vieamh%2FCTrsTOGR05Wl9rvfv3QHw1%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;510&quot; height=&quot;443&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HDg3N/btsO6A5vfwT/Wh2Z1NBsTYi0MpNbNkmXn0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HDg3N/btsO6A5vfwT/Wh2Z1NBsTYi0MpNbNkmXn0/img.png&quot; data-origin-width=&quot;559&quot; data-origin-height=&quot;368&quot; data-is-animation=&quot;false&quot; data-widthpercent=&quot;56.89&quot; style=&quot;width: 56.2251%;&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HDg3N/btsO6A5vfwT/Wh2Z1NBsTYi0MpNbNkmXn0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHDg3N%2FbtsO6A5vfwT%2FWh2Z1NBsTYi0MpNbNkmXn0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;559&quot; height=&quot;368&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&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;  postman으로 접속&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Auth Type &amp;gt; Basic Auth로 변경 후 Username, Password를 입력하고 Send를 보내면 잘 접속이 되는 것을 확인할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;857&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lVHQt/btsO7w9hSep/zN3KKFKzwD3A0uQCQOl830/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lVHQt/btsO7w9hSep/zN3KKFKzwD3A0uQCQOl830/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lVHQt/btsO7w9hSep/zN3KKFKzwD3A0uQCQOl830/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlVHQt%2FbtsO7w9hSep%2FzN3KKFKzwD3A0uQCQOl830%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;556&quot; height=&quot;674&quot; data-origin-width=&quot;707&quot; data-origin-height=&quot;857&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4️⃣ kibana 설치&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;※ kibana(키바나): &lt;b&gt;Elasticsearch에서 수집&amp;middot;저장한 데이터를 시각적으로 탐색하고 분석할 수 있는 웹 기반 도구&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1751718542813&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker run -d --restart unless-stopped --name kb \
  --network myes \
  -p 5601:5601 \
  docker.elastic.co/kibana/kibana:8.17.2&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1751718654661&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker run -d --restart unless-stopped --name kb \ # 컨테이너 이름 
  --network myes \ # 연결할 네트워크 이름  
  -p 5601:5601 \ # 호스트 5601포트를 컨테이너 5601포트와 매핑 (Kibana UI 포트)
  docker.elastic.co/kibana/kibana:8.17.2&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5️⃣ kibana 컨테이너 접속&lt;/h2&gt;
&lt;pre id=&quot;code_1751722555565&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker exec -it kb /bin/bash&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;kibana 접속&amp;nbsp;&lt;/blockquote&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;로컬로 접속을 했고, Elasticsearch 컨테이너 토큰값이 필요하다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; http://[IP주소]:5601&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;761&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bET0IA/btsO5TR4Obi/9H9yrdTDfG3nPHh22jCJZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bET0IA/btsO5TR4Obi/9H9yrdTDfG3nPHh22jCJZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bET0IA/btsO5TR4Obi/9H9yrdTDfG3nPHh22jCJZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbET0IA%2FbtsO5TR4Obi%2F9H9yrdTDfG3nPHh22jCJZ0%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;580&quot; height=&quot;599&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;761&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;blockquote data-ke-style=&quot;style2&quot;&gt;Elasticsearch 컨테이너 토큰값 가져와서 입력&amp;nbsp;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1751723424098&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker exec -it es /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana&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;&lt;span style=&quot;color: #000000; text-align: left;&quot;&gt; kibana verification 토큰값이 필요하다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;402&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KSx4t/btsO6r8KwVn/ZH8CSAkD6i5GxirOchHWzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KSx4t/btsO6r8KwVn/ZH8CSAkD6i5GxirOchHWzK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KSx4t/btsO6r8KwVn/ZH8CSAkD6i5GxirOchHWzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKSx4t%2FbtsO6r8KwVn%2FZH8CSAkD6i5GxirOchHWzK%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;508&quot; height=&quot;333&quot; data-origin-width=&quot;613&quot; data-origin-height=&quot;402&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;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;kibana verification 토큰값 가져와서 입력&amp;nbsp;&lt;/blockquote&gt;
&lt;pre id=&quot;code_1751726495318&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker exec -it kb /usr/share/kibana/bin/kibana-verification-code&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;토큰값까지 입력하면 해당 화면이 뜨고, es때와 마찬가지로 Username:elastic, Password를 입력하면 접속할 수 있다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imagegridblock&quot;&gt;
  &lt;div class=&quot;image-container&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRLzpH/btsO66v7l63/J7t4w0wYxh8PeguEQPolK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRLzpH/btsO66v7l63/J7t4w0wYxh8PeguEQPolK1/img.png&quot; width=&quot;464&quot; height=&quot;497&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;588&quot; data-is-animation=&quot;false&quot; style=&quot;width: 26.7819%; margin-right: 10px;&quot; data-widthpercent=&quot;27.1&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRLzpH/btsO66v7l63/J7t4w0wYxh8PeguEQPolK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRLzpH%2FbtsO66v7l63%2FJ7t4w0wYxh8PeguEQPolK1%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;549&quot; height=&quot;588&quot;/&gt;&lt;/span&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/du06J4/btsO5kJM65H/biXMHBWBTBPoC5yNQtWeX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/du06J4/btsO5kJM65H/biXMHBWBTBPoC5yNQtWeX1/img.png&quot; data-origin-width=&quot;1884&quot; data-origin-height=&quot;750&quot; data-is-animation=&quot;false&quot; style=&quot;width: 72.0553%;&quot; data-widthpercent=&quot;72.9&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/du06J4/btsO5kJM65H/biXMHBWBTBPoC5yNQtWeX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdu06J4%2FbtsO5kJM65H%2FbiXMHBWBTBPoC5yNQtWeX1%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;1884&quot; height=&quot;750&quot;/&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;  컨테이너 명령어&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실행중인 컨테이너 확인&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751711519697&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker ps&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;재시작&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751711492901&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker restart container-name&lt;/code&gt;&lt;/pre&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;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751708682644&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker stop container-name&lt;/code&gt;&lt;/pre&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;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751708724773&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo docker rm container-name&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Elasticsearch</category>
      <category>ElasticSearch</category>
      <category>elasticsearch docker</category>
      <category>엘라스틱서치</category>
      <category>엘라스틱서치 설치</category>
      <author>대체불가 핫걸</author>
      <guid isPermaLink="true">https://irreplaceablehotgirl.tistory.com/119</guid>
      <comments>https://irreplaceablehotgirl.tistory.com/119#entry119comment</comments>
      <pubDate>Sun, 6 Jul 2025 16:15:29 +0900</pubDate>
    </item>
    <item>
      <title>Ubuntu(WSL) + VSCode 환경 설정</title>
      <link>https://irreplaceablehotgirl.tistory.com/120</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt; Windows 10/11 환경&lt;/b&gt;에서 &lt;b&gt;Ubuntu WSL&lt;/b&gt;을 설치하고, &lt;br /&gt;&lt;b&gt;VSCode와 연동&lt;/b&gt;하여 개발 환경을 최적화하는 과정을 단계별로 자세히 소개하겠습니다.&amp;nbsp;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;h2 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Powershell 관리자 권한 실행 후 wsl 설치&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1751720345764&quot; class=&quot;ada&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;wsl --install&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ubuntu 설치&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1751720345765&quot; class=&quot;ada&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;wsl --install -d Ubuntu&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 위의 코드를 실행하면 자동으로 WSL2로 설치 되지만 최신 커널(WSL2)을 설치 하라는 오류가 나오면 아래 코드 실행&lt;/p&gt;
&lt;pre id=&quot;code_1751720345766&quot; class=&quot;gams&quot; style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;wsl --set-version Ubuntu&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;u&gt;※ &quot;Installing, this may take a few minutes...&quot;가 뜬다면 잘 설치되고 있는 것이고 5분~10분 정도 소요됩니다!&lt;/u&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; VSCode &amp;gt; Remote - WSL 확장 설치&lt;/span&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;188&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZJCbH/btsO7wnINkQ/HFRoDatLJmfNwZKYooCJKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZJCbH/btsO7wnINkQ/HFRoDatLJmfNwZKYooCJKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZJCbH/btsO7wnINkQ/HFRoDatLJmfNwZKYooCJKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZJCbH%2FbtsO7wnINkQ%2FHFRoDatLJmfNwZKYooCJKK%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;432&quot; height=&quot;188&quot; data-origin-width=&quot;432&quot; data-origin-height=&quot;188&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; WSL 우분투 환경으로 VSCode 열기&lt;/span&gt;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;WSL 터미널에 &lt;b&gt;`code .`&lt;/b&gt; 입력&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;VSCode 새창이 열리며, 좌측 하단에 WSL:Ubuntu로 연결된 것을 확인할 수 있다.&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;1098&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZAjcJ/btsO6d33cM9/kUVermd20YntaY18mAwIvk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZAjcJ/btsO6d33cM9/kUVermd20YntaY18mAwIvk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZAjcJ/btsO6d33cM9/kUVermd20YntaY18mAwIvk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZAjcJ%2FbtsO6d33cM9%2FkUVermd20YntaY18mAwIvk%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;1098&quot; height=&quot;502&quot; data-origin-width=&quot;1098&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ubuntu 접속&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1751722435908&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ubuntu&lt;/code&gt;&lt;/pre&gt;
&lt;h2 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #666666; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Ubuntu 접속 해제&amp;nbsp;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1751722468075&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;exit&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Settings</category>
      <category>ubuntu</category>
      <category>ubuntu vscode</category>
      <category>unbuntu wsl</category>
      <category>vscode</category>
      <category>WSL</category>
      <author>대체불가 핫걸</author>
      <guid isPermaLink="true">https://irreplaceablehotgirl.tistory.com/120</guid>
      <comments>https://irreplaceablehotgirl.tistory.com/120#entry120comment</comments>
      <pubDate>Sat, 5 Jul 2025 22:18:45 +0900</pubDate>
    </item>
    <item>
      <title>[Elasticsearch] 엘라스틱서치란?</title>
      <link>https://irreplaceablehotgirl.tistory.com/118</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;b&gt;대용량의 데이터를 실시간&lt;/b&gt;으로 &lt;b&gt;검색하고 분석&lt;/b&gt;할 수 있도록 설계된 &lt;b&gt;분산형 오픈소스 검색엔진&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구조화된 데이터뿐만 아니라 비정형 텍스트, 로그, 메트릭, 문서 등 &lt;b&gt;다양한 형태의 데이터를 빠르게 처리&lt;/b&gt;할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;  검색엔진&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사용자가 입력한 검색어(쿼리)를 바탕으로, 방대한 데이터 중에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;관련된 정보를 빠르게 찾아주는 소프트웨어 시스템&lt;/b&gt;이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;웹사이트, 문서, 상품, 로그 등 다양한 데이터 유형에 적용되며, 오늘날 거의 모든 온라인 서비스의 핵심 기술로 자리 잡고 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;  엘라스틱서치 인덱싱 과정&amp;nbsp;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;JSON 형태의 문서 &amp;rarr; 역색인(Inverted Index) 생성 &amp;rarr; 토큰화 및 분석 &amp;rarr; 문서를 인덱스에 저장&amp;nbsp;&lt;/span&gt;&lt;/blockquote&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;단순한 key-value 저장소가 아닌 역색인 구조를 사용하기에 수백만 개 문서도 빠르게 검색할 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;일반 인덱스: 문서 &amp;rarr; 단어&lt;/li&gt;
&lt;li&gt;역색인: 단어 &amp;rarr; 문서 목록&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;629&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/l7zYv/btsO69fr1Uq/cr6CUp9YmafaG5N8KjorQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/l7zYv/btsO69fr1Uq/cr6CUp9YmafaG5N8KjorQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/l7zYv/btsO69fr1Uq/cr6CUp9YmafaG5N8KjorQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fl7zYv%2FbtsO69fr1Uq%2Fcr6CUp9YmafaG5N8KjorQk%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;1051&quot; height=&quot;629&quot; data-origin-width=&quot;1051&quot; data-origin-height=&quot;629&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;  엘라스틱서치 문장 분석 과정&amp;nbsp;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;char_filter &amp;gt; tokenizer &amp;gt; token_filter 과정을 거친다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1751788570553&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[문장]

   &amp;darr; 1. char_filter (문자 치환: html 태그 제거, 특수문자 치환)
   
[전처리된 문장]

   &amp;darr; 2. tokenizer (단어 분리) * 한국어는 거의 NORI tokenizer 사용 * 
   
[토큰 목록]

   &amp;darr; 3. token_filter (불필요한 토큰 제거 및 변환: 소문자 변환, 어간 추출 등)
   
[최종 토큰 목록] &amp;rarr; 인덱싱&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;  엘라스틱서치 구성 요소&amp;nbsp;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 126px;&quot; border=&quot;1&quot; data-end=&quot;2036&quot; data-start=&quot;1832&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 21px;&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;&lt;b&gt;구성 요소&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1888&quot; data-start=&quot;1868&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1878&quot; data-start=&quot;1868&quot;&gt;&lt;b&gt;Cluster&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1888&quot; data-start=&quot;1878&quot;&gt;노드의 집합&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1919&quot; data-start=&quot;1889&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1896&quot; data-start=&quot;1889&quot;&gt;&lt;b&gt;Node&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1919&quot; data-start=&quot;1896&quot;&gt;Elasticsearch 실행 단위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1943&quot; data-start=&quot;1920&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1928&quot; data-start=&quot;1920&quot;&gt;&lt;b&gt;Index&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1943&quot; data-start=&quot;1928&quot;&gt;문서 저장 논리 단위&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;1975&quot; data-start=&quot;1944&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1952&quot; data-start=&quot;1944&quot;&gt;&lt;b&gt;Shard&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1975&quot; data-start=&quot;1952&quot;&gt;인덱스를 나눈 조각 (물리적 단위)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 21px;&quot; data-end=&quot;2009&quot; data-start=&quot;1976&quot;&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;1987&quot; data-start=&quot;1976&quot;&gt;&lt;b&gt;Document&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 21px; text-align: center;&quot; data-col-size=&quot;sm&quot; data-end=&quot;2009&quot; data-start=&quot;1987&quot;&gt;실제 저장되는 데이터 (JSON)&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/baqdCL/btsO7poRhru/U5BSgniMvmKWiuQgWwIdd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/baqdCL/btsO7poRhru/U5BSgniMvmKWiuQgWwIdd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/baqdCL/btsO7poRhru/U5BSgniMvmKWiuQgWwIdd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbaqdCL%2FbtsO7poRhru%2FU5BSgniMvmKWiuQgWwIdd0%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;437&quot; data-origin-width=&quot;820&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2️⃣ 엘라스틱서치 특징&amp;nbsp;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; &lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;FTS:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Full-Text Search&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;문서 전체 내용을 대상으로 단어(키워드)를 검색하는 방식이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;단순한 `WHERE title = '엘라스틱서치' `같은 값 일치 검색이 아니라,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;자연어 문장을 쪼개고 분석해서&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;&lt;b&gt;의미 있는 단어가 포함되어 있는지&quot;를 검색&lt;/b&gt;하는 방식이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;RDB에에서도 FTS는 가능하지만 실무에서 사용하기에는 여러 한계가 존재하며 엘라스틱서치의 강력한 커스터마이징 기능을 따라가기 어렵다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;RESTful API 기반&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;엘라스틱서치는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;HTTP를 통해 JSON 형식의 RESTful API&lt;/b&gt;를 이용하며, 손쉽게 데이터를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;CRUD&lt;/b&gt;(Create, Read, Update, Delete) 할 수 있다. 덕분에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;다양한 언어와 플랫폼에서 접근이 용이&lt;/b&gt;하다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;  거의 실시간 검색&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;데이터를 저장한 직후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;거의 실시간(NRT, Near Real-Time)으로 검색&lt;/b&gt;할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1초 미만 ~ 수 초 수준의 지연이 있다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;분산 아키텍처&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;클러스터 기반으로 작동하며, 데이터를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;샤드 단위로 분산 저장&lt;/b&gt;한다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;각 샤드는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;레플리카(샤드의 복사본)&lt;/b&gt;를 가질 수 있어 데이터의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;안정성과 수평 확장성&lt;/b&gt;을 동시에 확보할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;스키마리스 구조&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;처음에는&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;명시적인 스키마가 없으며 필드 유형을 자동으로 추론&lt;/b&gt;해준다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;필요한 경우 명시적인 매핑 설정도 가능&lt;/b&gt;하다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt; &lt;span&gt;&amp;nbsp;&lt;/span&gt;다양한 통계 및 집계 가능&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;단순 검색을 넘어&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;데이터를 집계하여 통계, 차트, 대시보드&lt;/b&gt;로 활용할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;※ 시간대별 요청 수, 평균 최대 최소 값 계산, 조건별 그룹&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;3️⃣ 엘라스틱서치 vs 관계형 데이터베이스&lt;/h2&gt;
&lt;table style=&quot;border-collapse: collapse; width: 82.5563%; height: 136px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 39.435%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;Elasticsearch&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 42.2986%; height: 17px; text-align: center;&quot;&gt;&lt;b&gt;관계형 데이터베이스&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 39.435%; height: 17px; text-align: center;&quot;&gt;인덱스&lt;/td&gt;
&lt;td style=&quot;width: 42.2986%; height: 17px; text-align: center;&quot;&gt;데이터베이스&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 39.435%; height: 17px; text-align: center;&quot;&gt;샤드&lt;/td&gt;
&lt;td style=&quot;width: 42.2986%; height: 17px; text-align: center;&quot;&gt;파티션&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 39.435%; height: 17px; text-align: center;&quot;&gt;타입&lt;/td&gt;
&lt;td style=&quot;width: 42.2986%; height: 17px; text-align: center;&quot;&gt;테이블&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 39.435%; height: 17px; text-align: center;&quot;&gt;문서&lt;/td&gt;
&lt;td style=&quot;width: 42.2986%; height: 17px; text-align: center;&quot;&gt;행&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 39.435%; height: 17px; text-align: center;&quot;&gt;필드&lt;/td&gt;
&lt;td style=&quot;width: 42.2986%; height: 17px; text-align: center;&quot;&gt;열&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 39.435%; height: 17px; text-align: center;&quot;&gt;매핑&lt;/td&gt;
&lt;td style=&quot;width: 42.2986%; height: 17px; text-align: center;&quot;&gt;스키마&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 39.435%; height: 17px; text-align: center;&quot;&gt;Query DSL&lt;/td&gt;
&lt;td style=&quot;width: 42.2986%; height: 17px; text-align: center;&quot;&gt;SQL&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;h4 data-ke-size=&quot;size20&quot;&gt;  추가, 검색, 삭제, 수정 기능 비교&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 132px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 22px;&quot;&gt;&lt;b&gt;엘라스틱서치에서의 HTTP 메서드&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 22px;&quot;&gt;&lt;b&gt;기능&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 22px;&quot;&gt;&lt;b&gt;데이터베이스 질의 문법&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;GET&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;데이터 조회&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;SELECT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;PUT&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;데이터 생성&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;INSERT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;POST&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;인덱스 업데이트, 데이터 조회&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;UPDATE, SELECT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;DELETE&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;데이터 삭제&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;DELETE&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;HEAD&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;인덱스의 정보 확인&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 22px;&quot;&gt;-&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4️⃣ 엘라스틱서치 사용 사례&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1287&quot; data-start=&quot;1231&quot;&gt;&lt;b&gt;로그 분석&lt;/b&gt;: ELK 스택 (Elasticsearch + Logstash + Kibana)&lt;/li&gt;
&lt;li data-end=&quot;1322&quot; data-start=&quot;1288&quot;&gt;&lt;b&gt;검색 서비스&lt;/b&gt;: 쇼핑몰, 뉴스 사이트의 텍스트 검색&lt;/li&gt;
&lt;li data-end=&quot;1347&quot; data-start=&quot;1323&quot;&gt;&lt;b&gt;추천 시스템&lt;/b&gt;: 유사 콘텐츠 검색&lt;/li&gt;
&lt;li data-end=&quot;1381&quot; data-start=&quot;1348&quot;&gt;&lt;b&gt;모니터링&lt;/b&gt;: APM(Application Performance Monitoring), 실시간 지표 수집 및 시각화&lt;/li&gt;
&lt;li data-end=&quot;1431&quot; data-start=&quot;1382&quot;&gt;&lt;b&gt;RAG 시스템의 백엔드 검색엔진&lt;/b&gt; (최근엔 dense_vector도 지원)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5️⃣ 엘라스틱서치 장점&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;강력한 커스텀 기능: 토크나이징을 통해 검색 커스텀을 다양하게 할 수 있다. (인덱싱을 잘 한다면 검색어 자동 소문자 처리, 조사 처리, 합성어 처리 등 다양한 검색어를 처리할 수 있음)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;6️⃣ 엘라스틱서치 한계점&amp;nbsp;&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;실시간 검색 X, 벡터 검색 한계, 리소스 소비 큼, 설정이 복잡.&amp;nbsp;&lt;/li&gt;
&lt;/ul&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>Elasticsearch</category>
      <category>ElasticSearch</category>
      <category>엘라스틱서치</category>
      <author>대체불가 핫걸</author>
      <guid isPermaLink="true">https://irreplaceablehotgirl.tistory.com/118</guid>
      <comments>https://irreplaceablehotgirl.tistory.com/118#entry118comment</comments>
      <pubDate>Sat, 5 Jul 2025 14:01:07 +0900</pubDate>
    </item>
    <item>
      <title>[논문 리뷰] YOLO(You Only Look Once): Unified, Real-Time Object Detection</title>
      <link>https://irreplaceablehotgirl.tistory.com/117</link>
      <description>&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt; YOLO&lt;/b&gt;는 현재 &lt;b&gt;시각 지능 딥러닝 분야에서 가장 중요한 객체 탐지 알고리즘&lt;/b&gt; 중 하나이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #000000;&quot;&gt;본 리뷰에서는 YOLO의 핵심 아이디어와 기존 방식과의 차별점에 초점을 맞춰 원본 논문을 살펴보고자 한다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;0️⃣ Abstract (요약)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;기존&lt;/b&gt;의 객체 탐지는&lt;b&gt; 분류&lt;/b&gt; 문제로 정의했다면, &lt;b&gt;YOLO&lt;/b&gt;는 객체 탐지를 &lt;b&gt;회귀&lt;/b&gt; 문제로 정의한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;YOLO는 &lt;b&gt;전체 이미지를 한번에 처리&lt;/b&gt;하여 &lt;b&gt;Bounding Box(좌표)와 Class Probabilities(클래스 확률)을 동시에 예측하는 단일 신경망(neural network)&lt;/b&gt; 기반의 모델이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;또한, YOLO는 &lt;b&gt;매우 빠르다&lt;/b&gt;. 실시간으로 초당 45프레임을 처리할 수 있고, 더 작은 버전인 Fast YOLO는 초당 155프레임을 처리할 수 있으며 다른 실시간 탐지기보다 2배 더 높은 mAP를 달성한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;YOLO는 다른 객체 탐지 시스템에 비해 &lt;b&gt;&quot;위치 오차&quot;는 더 많이 발생하지만 &quot;잘못된 탐지&quot;는 덜하다는 장점이 있고, 다양한 도메인에 잘 일반화&lt;/b&gt; 되어있다. (&quot;정확히 어디 있는지&quot;는 상대적으로 부정확하나, &quot;무엇인지&quot;는 잘 맞춘다.)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;※ mAP(mean Average Precision): 모델이 얼마나 정확하게 다양한 Class를 탐지했는지 보여주는 성능 지표&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1️⃣ Introduction (소개)&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;기존의 객체 탐지 시스템&lt;/b&gt;들은 &lt;b&gt;분류기(classifier)&lt;/b&gt;를 탐지용으로 재활용하는 방식을 채택해 왔다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;예를 들어, DPM은 슬라이딩 윈도우 방식을 사용하여 하나하나 분류기를 적용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;또, R-CNN은 제안 영역(region proposal)을 먼저 생성한 후, 제안된 박스마다 분류기를 생성한다. 이후 박스를 정제, 중복 탐지 제거, 객체 간 맥락 반영 등 복잡한 후처리 과정이 필요하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이러한 파이프라인은&lt;b&gt; 느리고&lt;/b&gt;, 각 요소가 따로 학습되기 때문에 &lt;b&gt;최적화도 어렵다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;YOLO는 객체 탐지를 하나의 회귀(regression) 문제로 다시 정의&lt;/b&gt;한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이미지 픽셀에서 곧바로 &lt;span style=&quot;text-align: start;&quot;&gt;&lt;b&gt;Bounding Box(좌표)와 Class Probabilities(클래스 확률)를 동시에 예측하는 방식&lt;/b&gt;으로, 이미지를 &lt;b&gt;한 번만 보면(You Only Look Once) 그 안에 객체의 위치를 예측&lt;/b&gt;할 수 있다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;lt;YOLO 처리 과정은 간단하고 직관적이다.&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;258&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BeQeA/btsNQXB0NbZ/dQbKCQ4H6Fkb8k0Z66lUdk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BeQeA/btsNQXB0NbZ/dQbKCQ4H6Fkb8k0Z66lUdk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BeQeA/btsNQXB0NbZ/dQbKCQ4H6Fkb8k0Z66lUdk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBeQeA%2FbtsNQXB0NbZ%2FdQbKCQ4H6Fkb8k0Z66lUdk%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;665&quot; height=&quot;150&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;258&quot;/&gt;&lt;/span&gt;&lt;/figure&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;span style=&quot;color: #000000;&quot;&gt;입력 이미지를 448 x 448 크기로 리사이즈한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;그 이미지를 CNN(단일 합성곱 신경망)에 통과시킨다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;예측한 결과 중 신뢰도가 일정 기준 이상인 것만 선택한다.&lt;/span&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;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;&amp;lt;장점&amp;gt;&lt;/span&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;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;빠른 속도&lt;/b&gt;: 복잡한 탐지 파이프라인 없이 이미지 신경망을 한 번만 적용하면 된다. 기본 YOLO는 Titan X GPU에서 배치 없이도 초당 45프레임을 처리하며, 빠른 버전은 초당 150프레임 이상을 달성한다. 이는 실시간 영상 스트리밍도 지연 없이(25ms 이하) 처리할 수 있음을 의미한다. 또한 기존 실시간 시스템보다 2배 높은 mAP를 달성한다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;전체 이미지 기반 추론&lt;/b&gt;: 슬라이딩 윈도우는 영역 제안 기법과 달리 전체 이미지를 보기 때문에 형태뿐 아니라 맥락(context information)도 학습할 수 있다. Fast R-CNN과 같은 상위 탐지 모델은 배경을 객체로 오탐지하는 일이 많은데, YOLO는 이러한 배경 오류가 절반 이하이다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;뛰어난 일반화 능력&lt;/b&gt;: 학습 도메인과 다른 새로운 도메인에서 테스트해도 DPM이나 R-CNN보다 훨씬 나은 성능을 보인다. 새로운 환경이나 예기치 못한 입력에도 견고하게 작동한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2️⃣ Unified Detection (통합된 탐지)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;YOLO는 객체 탐지의 &lt;b&gt;여러 단계를 하나의 신경망으로 통합&lt;/b&gt;하여 전체 이미지와 그 안의 모든 객체를 전역적 관점으로 파악할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이러한 구조는 &lt;b&gt;end-to-end 학습&lt;/b&gt;(입력부터 출력까지 한 번에 학습)이 가능하며, &lt;b&gt;실시간 속도를 유지&lt;/b&gt;하면서도 &lt;b&gt;높은 mAP&lt;/b&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;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;YOLO의 작동 방식&amp;gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1576&quot; data-origin-height=&quot;1011&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3tHOU/btsNRNMpIP6/UOnkyEey4wCXCpeCg3u2S1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3tHOU/btsNRNMpIP6/UOnkyEey4wCXCpeCg3u2S1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3tHOU/btsNRNMpIP6/UOnkyEey4wCXCpeCg3u2S1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3tHOU%2FbtsNRNMpIP6%2FUOnkyEey4wCXCpeCg3u2S1%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;539&quot; height=&quot;346&quot; data-origin-width=&quot;1576&quot; data-origin-height=&quot;1011&quot;/&gt;&lt;/span&gt;&lt;/figure&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;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;S x S 그리드&lt;/b&gt;로 이미지 &lt;b&gt;분할&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;각 그리드 셀이 예측&amp;nbsp;&lt;/span&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;color: #333333;&quot;&gt;&lt;b&gt;B개의 Bounding Boxes&lt;/b&gt;&lt;/span&gt;&lt;br /&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;color: #333333;&quot;&gt;&lt;b&gt;(x, y)&lt;/b&gt;: Box의 중심 좌표&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;(w, h)&lt;/b&gt;: Box의 가로, 세로 길이&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Confidence Scores&lt;/b&gt; &amp;rarr; `&lt;b&gt;Pr(Object) &amp;times; IOU(pred, truth)`&lt;/b&gt;: 객체가 Bounding Box 내에 존재할 확률 x 예측 박스와 실제 박스가 얼마나 일지하는지&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;C개의 Class Probabilities&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;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;`Pr(Classi | Object)`&lt;/b&gt;: 그리드 셀에 객체가 있을 때, 해당 객체가 i번째 Class에 속학 확률&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;객체가 없으면 &lt;span style=&quot;text-align: left;&quot;&gt;Class&lt;/span&gt; 확률은 0&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최종 출력 텐서 &amp;rarr;&lt;span style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;S &amp;times; S &amp;times; (B &amp;lowast; 5 + C)&lt;/b&gt; &lt;/span&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;color: #333333;&quot;&gt; PASCAL VOC 데이터셋에서 평가할 때, S = 7, B = 2, C = 20 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이미지를 7 x 7 그리드로 나누고, 각 그리드 셀이 2개의 Bounding Box를 예측한다. PASCAL VOC는 20개의 &lt;span style=&quot;text-align: left;&quot;&gt;Class&lt;/span&gt;를 가진다. 따라서 한 셀당 30개의 값을 가지는 7 x 7 x 30 텐서가 출력된다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  2.1 Network Design&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;YOLO 모델은 CNN(합성곱 신경망)으로 구현하였고, PASCAL VOC 객체 탐지 데이터셋으로 평가했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;span style=&quot;text-align: start;&quot;&gt;GoogLeNet 구조에서 영감을 받았지만 해당 모델에서 사용한 Inception 모듈 대신, Lin et al.의 방식처럼 &lt;b&gt;`&lt;/b&gt;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;text-align: start;&quot;&gt;1&amp;times;1 축소 계층` &amp;rarr; &lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;`3&amp;times;3 합성곱 계층`&lt;/span&gt;&lt;span style=&quot;text-align: start;&quot;&gt;을 교대로 사용하여 연산 효율을 높였다.&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&amp;lt;YOLO 모델 아키텍처&amp;gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1633&quot; data-origin-height=&quot;703&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b4b5rf/btsNRQJdQwJ/7DdB5p7FnGVvbhcxJdOEIk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b4b5rf/btsNRQJdQwJ/7DdB5p7FnGVvbhcxJdOEIk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b4b5rf/btsNRQJdQwJ/7DdB5p7FnGVvbhcxJdOEIk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb4b5rf%2FbtsNRQJdQwJ%2F7DdB5p7FnGVvbhcxJdOEIk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;767&quot; height=&quot;703&quot; data-origin-width=&quot;1633&quot; data-origin-height=&quot;703&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;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;458&quot; data-start=&quot;403&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;24개의 합성곱 계층&lt;/b&gt;(Convolutional Layers)과 &lt;b&gt;2개의 완전 연결 계층&lt;/b&gt;(Fully Connected Layers)으로 이루어짐&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;458&quot; data-start=&quot;403&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp;&lt;b&gt;ImageNet 분류 &lt;/b&gt;&lt;b&gt;사전 학습&lt;/b&gt; &amp;rarr; 이미지의 특성 추출시&lt;b&gt; 224x224 &lt;/b&gt;해상도를 사용하며, 객체 탐지 수행시 448x448로 2배 높은 해상도를 사용&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;458&quot; data-start=&quot;403&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;최종 출력은 7x7x30 텐서이며, 이는 각 그리드 당 2개의 Bounding Box와 20개의 Class를 포함한다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;추가로, 경량화된 Fast YOLO 버전도 있으며, 이는 24개가 아닌 9개의 합성곱 레이어만 사용해 속도를 더욱 끌어올렸다. 단, 학습 방식이나 파라미터는 동일하다.&amp;nbsp;&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  2.2&lt;span&gt; Training&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. 사전 학습&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;20개의 합성곱 계층(Convolutional Layers)을 사용하여 ImageNet 1000-class competition 데이터셋으로 사전 학습을 진행했으며 Darknet 프레임워크를 사용했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;학습은 약 1주일 동안 진행되며, ImageNet 2012 검증셋에서 88%의 정확도로 단일 크롭 top-5 달성했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;2. 객체 탐지 모델로의 전환&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Ren et al.의 아이디어에 따라 4개의 합성곱 계층(Convolutional Layers)과 2개의 완전 연결 계층(Fully Connected Layers)을 추가한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이때 이 계층들의 가중치는 무작위 초기화(randomly initialized)하며 입력 해상도를 224x224에서 448x448로 변경한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 최종 Layer &amp;rarr; Bounding Boxes와 Class Probabilities 예측&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;최종 계층에서 Bounding Boxes와 Class Probabilities를 예측한다,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; &lt;span style=&quot;text-align: start;&quot;&gt;이미지의 너비와 높이&lt;/span&gt; 기준으로 Bounding Box의 w(너비)와 h(높이)를 정규화하여 0~1 사이에 두도록 하고, x와 y는 소속된 그리드 위치를 기준으로 0~1 사이의 상대 좌표로 표현된다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4. 활성화 함수&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;최종 계층에 선형 활성화 함수를 사용하며, 다른 모든 계층에서는 Leaky ReLU 활성화 함수를 사용한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;223&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c4odC2/btsNSMFP1rQ/wfLPwtp2SQUR1YfSZGNRlk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c4odC2/btsNSMFP1rQ/wfLPwtp2SQUR1YfSZGNRlk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c4odC2/btsNSMFP1rQ/wfLPwtp2SQUR1YfSZGNRlk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc4odC2%2FbtsNSMFP1rQ%2FwfLPwtp2SQUR1YfSZGNRlk%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;276&quot; height=&quot;82&quot; data-origin-width=&quot;751&quot; data-origin-height=&quot;223&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Leaky ReLU는 x &amp;gt; 0 일 때는 x, x &amp;lt;= 0일 때는 0.1x로 설정하여 음수 값을 허용해 기울기 소실 문제를 완화한다.&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5. 손실 함수&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;손실 함수는 &lt;b&gt;합성곱 계층(Convolutional Layers)의 출력에 대해 SSE&lt;/b&gt;(Sum of Squared Error)를 사용하여 최적화한다.하지만 이로 인해 &lt;b&gt;Bounding Box의 좌표 예측의 오차와 Class 확률 예측 오차가 동일하게 취급되어 비효율성&lt;/b&gt;을 가질 수 있다.객체가 없는 그리드 셀의 신뢰도(confidence) 값은 0에 가까운데, 전체 이미지에서 객체가 없는 그리드 셀이 많기 때문에 객체가 없는 상황에 대한 손실이 지나치게 커질 수 있으며 이는 모델의 불안정성으로 이어질 수 있다.따라서 이를 해결하기 위해 &lt;b&gt;Bounding Box 좌표 예측 오류에 대한 손실을 증가시키고, 객체가 없을 때 발생하는 오류의 손실을 감소&lt;/b&gt;시킨다.이때 &lt;b&gt;&amp;lambda;coord&lt;/b&gt; (바운딩 박스 좌표 예측의 가중치)를 &lt;b&gt;5&lt;/b&gt;로, &lt;b&gt;&amp;lambda;noobj&lt;/b&gt; (객체가 없는 그리드 셀에서의 가중치)를 &lt;b&gt;0.5&lt;/b&gt;로 설정하여 이 문제를 해결한다.또한, Bounding Box의 w, h 대신 sqrt(w), sqrt(h)로 제곱근을 예측하여 작은 박스에서 발생할 수 있는 오류에 더 높은 가중치를 부여한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;6. 가장 적합한 Bounding Box 예측기 선택 &lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;YOLO는 각 그리드 셀에서 여러 개의 Bounding Box를 예측하지만 훈련 중에는 하나의 Bounding Box 예측기만이 해당 객체를 예측하도록 한다.이를 위해 가장 높은 IOU 값을 가진 예측기를 책임자로 지정하여, 각 예측기가 특정 객체에 특화되도록 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;7. 훈련 과정에서의 손실 함수 최적화&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;훈련 중 최적화되는 다중 부분 손실 함수는 다음과 같으며 객체가 존재하는 셀에 대해서만 Class 예측과 Bounding Box 예측에 대해 패널티를 부과한다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2307&quot; data-start=&quot;2263&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;좌표 예측 손실&lt;/b&gt;(bounding box prediction loss)&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2357&quot; data-start=&quot;2310&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;클래스 예측 손실&lt;/b&gt;(classification prediction loss)&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2401&quot; data-start=&quot;2360&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;객체가 없는 그리드 셀에 대한 손실&lt;/b&gt;(no object loss)&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2442&quot; data-start=&quot;2404&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;객체가 있는 그리드 셀에 대한 손실&lt;/b&gt;(object loss)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;8. 훈련&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2641&quot; data-start=&quot;2535&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;훈련 데이터&lt;/b&gt;: &lt;b&gt;PASCAL VOC 2007&lt;/b&gt; 및 &lt;b&gt;2012&lt;/b&gt; 데이터셋을 사용하며, 2012 데이터셋을 사용할 때는 2007 테스트 데이터를 포함하여 학습&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2743&quot; data-start=&quot;2642&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Batch size는 64, Momentum은 0.9, Weight decay는 0.0005&lt;/b&gt;로 설정&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2907&quot; data-start=&quot;2744&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Learning Rate&lt;/b&gt;: &lt;b&gt;10^-3&lt;/b&gt;에서 시작하여 점차적으로 &lt;b&gt;10^-2&lt;/b&gt;로 증가한 뒤, &lt;b&gt;10^-2&lt;/b&gt;로 75 epochs, 1&lt;b&gt;0^-3&lt;/b&gt;으로 30 epochs, &lt;b&gt;10^-4&lt;/b&gt;로 30 epochs 동안 훈련 진행&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2907&quot; data-start=&quot;2744&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Dropout: 0.5&amp;nbsp;&lt;/b&gt;&amp;rarr; co-adaptation 방지&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;2907&quot; data-start=&quot;2744&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Data Augmentation&lt;/b&gt;: 원본 이미지 크기의 &lt;b&gt;최대 20%&lt;/b&gt;까지 임의로 조정하거나 이동, HSV 색공간에서 이미지의 노출도(exposure)와 채도(saturation)를 최대 1.5배까지 무작위 조정&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;※ co-adaptation: 한 뉴런이 다른 뉴런에 과도하게 의존해 독립적인 학습을 못 하는 현상&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;※ HSV(Hus: 색상, Saturation: 채도, Value: 명도)&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  2.3&lt;span&gt; Inference&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;훈련과 마찬가지로 네트워크 평가는 한 번이면 되므로&lt;b&gt; 테스트가 매우 빠르다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; PASCAL VOC 데이터셋에서 네트워크는 이미지당 98개의 Bounding Box를 예측하고, 각 박스에 대해 &lt;span style=&quot;text-align: left;&quot;&gt;Class&lt;/span&gt; 확률을 예측한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;일반적으로 객체가 어느 그리드 셀에 속하는지 명확하게 알 수 있으며, 네트워크는 각 객체에 대해 하나의 박스만 예측한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그러나 &lt;b&gt;일부 큰 객체나 경계에 있는 객체는 여러 셀에서 예측&lt;/b&gt;될 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;이러한 &lt;b&gt;중복 예측을 해결하기 위해 NMS(Non-maximal suppression)&lt;/b&gt;를 사용하며&lt;span style=&quot;letter-spacing: 0px;&quot;&gt; 이는 &lt;b&gt;mAP(평균 정밀도)를 2-3% 향상&lt;/b&gt;시킬 수 있다.&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;※ NMS(Non-Maximum Suppression): 객체 탐지에서 중복된 바운딩 박스를 제거하는 후처리 기법&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  2.4&lt;span&gt;&lt;span&gt; Limitations of YOLO&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&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;공간적 제약&lt;/b&gt;: 각 그리드 셀에서 2개의 Bounding Box만 예측하고, 1개의 Class만 가질 수 있으므로 서로 &lt;b&gt;가까운 객체나 작은 객체에 약하다.&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비정상적인 비율이나 배치에 약함&lt;/b&gt;: 데이터로부터 Bounding Box를 학습하기 때문에 새로운 비율이나 배치를 가진 객체를 일반화하는 데 어려움이 있다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;다운샘플링 문제&lt;/b&gt;: 여러 번 다운샘플링을 진행하므로 Bounding Box를 예측할 때 사용하는 Feature가 다소 거칠고 부정확할 수 있다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;손실함수의 한계&lt;/b&gt;: &lt;b&gt;작은 박스와 큰 박스의 오류를 똑같이 처리&lt;/b&gt;한다. (작은 박스에서의 위치 예측이 5픽셀만 틀려도 전체 박스 위치에서 큰 차이로 간주되어 IOU가 급감한다. 반면, 큰 박스에서는 같은 5픽셀이라도 상대적으로 무시할 정도로 작은 비율이라 IOU 변화가 적은데 YOLO는 이 둘은 동일한 오차로 처리하기 때문에 문제가 된다.)&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size14&quot;&gt;※ 다운 샘플링(Downsampling): 입력 이미지가 448x448에서 7x7로 작게 줄어드는 과정&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3️⃣ Comparison to Other Detection Systems (다른 탐지 시스템들과의 차이점)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;YOLO는 기존 객체 탐지 시스템들과 달리, 복잡한 파이프라인을 하나의 CNN 모델로 통합한 단순하고 빠른 구조&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;를 가진다.&lt;br /&gt;기존 시스템들은 보통 여러 단계를 거치거나 느린 반면, YOLO는 실시간 속도로 다양한 객체를 탐지할 수 있다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기존 객체 탐지 시스템들&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&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;robust한 feature 뽑기 &amp;rarr;&amp;nbsp; 분류기(classifier) 또는 위치 추정기(localizer) 사용 &amp;rarr;&amp;nbsp;슬라이딩 윈도우 방식 or 제한된 영역(subset region)을 대상으로 실행&lt;/li&gt;
&lt;/ul&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.0702%; height: 74px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 1.76956%; height: 10px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.4603%; height: 10px; text-align: center;&quot;&gt;&lt;b&gt; DPM(Deformable Parts Model) &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 19.3382%; text-align: center; height: 10px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;YOLO&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 64px;&quot;&gt;
&lt;td style=&quot;width: 1.76956%; height: 64px; text-align: center;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;width: 17.4603%; height: 64px;&quot;&gt;슬라이딩 윈도우 기반 탐지&lt;br /&gt;특징 추출 &amp;rarr; 분류 &amp;rarr; 박스 예측 &amp;rarr; NMS를 따로 처리&amp;nbsp;&lt;br /&gt;30Hz DPM만 실시간 탐지 가능&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 19.3382%; height: 64px;&quot;&gt;모든 과정을 하나의 CNN으로 통합&amp;nbsp;&lt;br /&gt;고정된(static) 특징 대신, 탐지 작업에 맞춰 학습된 특징 사용&amp;nbsp;&lt;br /&gt;&amp;rarr; 빠르고 정확&lt;br /&gt;처음부터 속도를 고려해 설계&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.0702%; height: 74px;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 2.58216%; height: 10px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.4129%; height: 10px; text-align: center;&quot;&gt;&lt;b&gt; R-CNN &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 13.2492%; text-align: center;&quot;&gt;&lt;b&gt; &lt;span style=&quot;background-color: #2780d4; color: #ffffff; text-align: center;&quot;&gt;Fast/Faster R-CNN&lt;/span&gt; &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 16.1831%; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;YOLO&amp;nbsp;&lt;/span&gt;&lt;/b&gt; &lt;span style=&quot;background-color: #2780d4; color: #ffffff; text-align: center;&quot;&gt;&lt;br /&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 64px;&quot;&gt;
&lt;td style=&quot;width: 2.58216%; height: 64px; text-align: center;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;width: 16.4129%; height: 64px;&quot;&gt;Selective Search로 후보 영역 &amp;rarr; CNN으로 특징 추출 &amp;rarr; SVM으로 분류 &amp;rarr; 박스 조정 &amp;rarr; NMS &amp;rarr; 매우 느림(1장당 40초)&lt;br /&gt;한 장당 약 2000개 박스 예측&lt;/td&gt;
&lt;td style=&quot;width: 13.2492%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Selective Search 대신 신경망 기반 Region Proposal 사용&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&amp;rarr; 이전보다 빠르지만 실시간은 아님&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 16.1831%;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt; 공간 제약(grid 구조)이 중복 탐지를 줄임&lt;br /&gt;전체를 하나의 모델로 통합해 학습 &amp;rarr; 빠름&lt;br /&gt;한 장당 약 98개 박스 예측 &lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.0702%; height: 74px;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 1.87794%; height: 10px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 19.1126%; height: 10px; text-align: center;&quot;&gt;&lt;b&gt; Deep MultiBox &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.5776%; text-align: center; height: 10px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;YOLO&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 64px;&quot;&gt;
&lt;td style=&quot;width: 1.87794%; height: 64px; text-align: center;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;width: 19.1126%; height: 64px;&quot;&gt;단일 객체 탐지용 (예: 얼굴만 탐지) &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 분류기 필요&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 17.5776%; height: 64px;&quot;&gt;완전한 탐지 시스템&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.0702%; height: 75px;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 4.82121%; height: 10px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 35.9916%; height: 10px; text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;OverFeat &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.2774%; height: 10px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;YOLO&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 65px;&quot;&gt;
&lt;td style=&quot;width: 4.82121%; height: 65px; text-align: center;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;width: 35.9916%; height: 65px;&quot;&gt;CNN으로 Localization 후 탐지 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&amp;rarr;&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&amp;nbsp;전역 맥락 판단 불가&lt;/td&gt;
&lt;td style=&quot;width: 33.2774%; height: 65px;&quot;&gt;전체 이미지를 보고 탐지&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 99.0702%; height: 74px;&quot; border=&quot;1&quot; data-ke-style=&quot;style15&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 10px;&quot;&gt;
&lt;td style=&quot;width: 4.70384%; height: 10px;&quot;&gt;&lt;span style=&quot;color: #333333; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 36.109%; height: 10px; text-align: center;&quot;&gt;&lt;b&gt; MultiGrasp &lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.2774%; height: 10px; text-align: center;&quot;&gt;&lt;b&gt;&lt;span style=&quot;text-align: left;&quot;&gt;YOLO&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 64px;&quot;&gt;
&lt;td style=&quot;width: 4.70384%; height: 64px; text-align: center;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;width: 36.109%; height: 64px;&quot;&gt;이미지 1개에 물체 1개만 탐지 가능&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.2774%; height: 64px;&quot;&gt;여러 클래스, 여러 객체를 동시에 예측 &amp;nbsp;&lt;br /&gt;그리드 구조는 MultiGrasp에서 영감을 받음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;4️⃣ Experiments (실험)&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; PASCAL VOC 2007에서 YOLO와 Fast R-CNN을 비교하며 오류 유형을 분석한 결과, YOLO는 배경에 대한 오탐(배경을 객체로 착각)을 줄이는 데 효과적이었으며, 이를 Fast R-CNN의 결과 보정(rescoring)에 활용하여 mAP 성능을 향상시켰다. &lt;br /&gt;또한 VOC 2012와 예술 작품 데이터셋에서도 높은 mAP을 기록하며 YOLO의 뛰어난 일반화 성능을 입증하였다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  4.1&lt;span&gt;&lt;span&gt;&lt;span&gt; Comparison to Other Real-Time Systems&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;많은 객체 탐지 연구들이 기존 탐지 파이프라인은 빠르게 만드려는 시도를 해왔지만, 이 중 실제로 실시간(30FPS 이상) 성능을 달성한 건 Sadeghi et al. 뿐이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; ※ Sadeghi et al.: DPM 기반 객체 탐지 시스템을 GPU로 실시간 구현한 논문의 저자들이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;YOLO와 다른 탐지기의 &lt;b&gt;mAP(성능)&lt;/b&gt;, &lt;b&gt;FPS(속도)&lt;/b&gt; 비교&amp;nbsp;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1560&quot; data-origin-height=&quot;965&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/uz3pf/btsNS8aVPXe/FfrA0wsvoJdsoMEz4xEks0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/uz3pf/btsNS8aVPXe/FfrA0wsvoJdsoMEz4xEks0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/uz3pf/btsNS8aVPXe/FfrA0wsvoJdsoMEz4xEks0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fuz3pf%2FbtsNS8aVPXe%2FFfrA0wsvoJdsoMEz4xEks0%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;461&quot; height=&quot;285&quot; data-origin-width=&quot;1560&quot; data-origin-height=&quot;965&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;실시간 탐지기 비교&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&lt;b&gt;Fast&amp;nbsp; YOLO&lt;/b&gt;는 &lt;b&gt;현재까지 가장 빠른 객체 탐지기&lt;/b&gt;로, &lt;b&gt;52.7%의 mAP와 155 FPS&lt;/b&gt;를 기록하며 &lt;b&gt;실시간 탐지기 중 정확도가 2배 이상 향상&lt;/b&gt;되었다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;일반&lt;b&gt; YOLO&lt;/b&gt;는 &lt;b&gt;mAP를 63.4%&lt;/b&gt;까지 끌어올리면서 &lt;b&gt;45 FPS&lt;/b&gt;로 &lt;b&gt;실시간 속도를 유지&lt;/b&gt;한다.&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;lt;실시간이 아닌 탐지기 비교&amp;gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;VGG-16 백본을 사용한 버전도 훈련했으며, 더 정확하지만 느림&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #333333;&quot;&gt;Fast R-CNN은 분류는 빠르지만 Selective Search 사용으로 전체 속도는 매우 느림, 나머지 R-CNN 기법은 Selective Search를 제거해 속도를 개선했으나 여전히 실시간은 아님&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  4.2&lt;span&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt; VOC 2007 Error Analysis&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;YOLO와 Fast R-CNN의 성능 차이를 더 자세히 보기 위해 VOC 2007 데이터셋에서 오류 유형별 분석을 수행했다. &lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt; Hoiem et al.의 방법론을 따랐으며, 각 클래스별로 상위 n개의 예측값을 검사하고, 아래와 같은 오류 유형으로 분류했다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;`Correct`&lt;/b&gt;: 정답 클래스, IOU &amp;gt; 0.5 &amp;rarr; &lt;b&gt;정확한 탐지&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;`Localization`&lt;/b&gt;: 정답 클래스, 0.1 &amp;lt; IOU &amp;lt; 0.5&amp;nbsp;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;`Similar`&lt;/b&gt;: 유사한 클래스, IOU &amp;gt; 0.1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;`Other`&lt;/b&gt;: 다른 클래스, IOU &amp;gt; 0.1&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;`Background`&lt;/b&gt;: 물체가 존재하지 않음, IOU &amp;lt; 0.1&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;504&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CVPZT/btsNRHltp0x/bctWF7W38ZppgUakgkZn40/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CVPZT/btsNRHltp0x/bctWF7W38ZppgUakgkZn40/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CVPZT/btsNRHltp0x/bctWF7W38ZppgUakgkZn40/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCVPZT%2FbtsNRHltp0x%2FbctWF7W38ZppgUakgkZn40%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;439&quot; height=&quot;235&quot; data-origin-width=&quot;943&quot; data-origin-height=&quot;504&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;YOLO는 객체의 위치를 정확히 잡는 데 약해 Localization 오류가 많고, Fast R-CNN은 실제 객체가 없는 곳을 탐지하는 Background 오류가 많다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;즉, &lt;b&gt;YOLO는 Fast R-CNN보다 위치 정확도는 떨어지지만 배경 탐지 안정성은 높다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  4.3 Combining Fast R-CNN and YOLO&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;YOLO와 Fast R-CNN을 결합하여 성능을 개선한 실험&amp;nbsp;&lt;br /&gt;&lt;b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;YOLO는 배경에 대한 오탐률이 낮다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;그래서 &lt;b&gt;YOLO를 활용해 Fast R-CNN이 예측한 박스 중 배경일 가능성이 높은 것을 제거함으로써 성능을 높인다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;YOLO의 예측 확률과 Bounding Box간 IOU를 기준으로, Fast R-CNN의 예측 점수에 가중치를 주는 방법으로 보정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1349&quot; data-origin-height=&quot;464&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b46tKi/btsNS9gDg1k/OP9WnU785MCbz0eOhdJwi1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b46tKi/btsNS9gDg1k/OP9WnU785MCbz0eOhdJwi1/img.png&quot; data-alt=&quot;Combined: 결합 후 mAP, Gain: 결합 후 mAP 향상 폭&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b46tKi/btsNS9gDg1k/OP9WnU785MCbz0eOhdJwi1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb46tKi%2FbtsNS9gDg1k%2FOP9WnU785MCbz0eOhdJwi1%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;455&quot; height=&quot;157&quot; data-origin-width=&quot;1349&quot; data-origin-height=&quot;464&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Combined: 결합 후 mAP, Gain: 결합 후 mAP 향상 폭&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2007 data, VGG-M, CaffeNet과 같이 기존 Fast R-CNN 모델을 결합한 것보다, &lt;b&gt;YOLO와 결합했을 때 mAP 향상이 훨씬 큰 것을 확인할 수 있다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2278&quot; data-origin-height=&quot;804&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qpwn4/btsNQVYLz2u/QuFL4XqlJLxjnzpbqkKBj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qpwn4/btsNQVYLz2u/QuFL4XqlJLxjnzpbqkKBj1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qpwn4/btsNQVYLz2u/QuFL4XqlJLxjnzpbqkKBj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fqpwn4%2FbtsNQVYLz2u%2FQuFL4XqlJLxjnzpbqkKBj1%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;2278&quot; height=&quot;804&quot; data-origin-width=&quot;2278&quot; data-origin-height=&quot;804&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;YOLO는 2015년 11월 6일 기준, 외부 데이터를 허용한 PASCAL VOC 2012 com4 리더보드에서 유일한 실시간 객체 탐지기이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt; Fast R-CNN과 결합했을 때 &lt;b&gt;Fast R-CNN 단독 모델 대비 mAP가 2.3% 향상되어 전체 4위 성능&lt;/b&gt;을 기록했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;YOLO와의 결합이 성능을 크게 향상시킨 이유는 단순한 모델 앙상블 효과가 아니라&lt;b&gt; YOLO가 Fast R-CNN과는 서로 다른 오류 패턴&lt;/b&gt;을 가지기 때문이다. 이러한 &lt;b&gt;보완적인 특성&lt;/b&gt;이 Fast R-CNN의 성능을 크게 끌어올릴 수 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;하지만 각 모델을 따로 실행한 뒤 결과를 결합하기 때문에 &lt;b&gt;속도 면에서는 YOLO의 장점을 살리지 못하지만 &lt;span style=&quot;letter-spacing: 0px;&quot;&gt;YOLO는 매우 빠르기 때문에 전체적인 처리 시간에 큰 영향을 주지는 않는다.&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  4.4 VOC 2012 Results&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;YOLO는 VOC 2012에서 mAP 57.9%로, 최신 모델보다는 낮은 성능을 보인다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;작은 객체 탐지에는 약하지만&lt;/b&gt;, 고양이(cat), 기차(train)처럼 &lt;b&gt;일부 큰 객체 카테고리에서는 높은 성능을 보인다&lt;/b&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;YOLO와 Fast R-CNN 결합하면 리더보드 순위가 5단계 상승하며,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 &lt;b&gt;YOLO 단독 성능은 제한적&lt;/b&gt;이지만 &lt;b&gt;Fast R-CNN과의 결합을 통해 성능 향상이 가능&lt;/b&gt;함을 보여준다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;  4.5 Generalizability: Person Detection in Artwork&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size14&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;p data-ke-size=&quot;size16&quot;&gt;이를 평가하기 위해&lt;b&gt; YOLO를 포함한 여러 모델을 예술 작품 속 사람 탐지에 특화된 두 데이터셋으로 비교&lt;/b&gt;했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교 기준으로는 VOC 2007 데이터에서 훈련된 모델의 사람 클래스에 대한 AP(Average Precision)를 사용했다.&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;389&quot; data-start=&quot;364&quot;&gt;Picasso: VOC 2012로 훈련&lt;/li&gt;
&lt;li data-end=&quot;419&quot; data-start=&quot;390&quot;&gt;People-Art: VOC 2010으로 훈련&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1758&quot; data-origin-height=&quot;687&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cgREEn/btsNTAry03H/AKcRlgl5ub9QbNPZgIw48K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cgREEn/btsNTAry03H/AKcRlgl5ub9QbNPZgIw48K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cgREEn/btsNTAry03H/AKcRlgl5ub9QbNPZgIw48K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcgREEn%2FbtsNTAry03H%2FAKcRlgl5ub9QbNPZgIw48K%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;1758&quot; height=&quot;687&quot; data-origin-width=&quot;1758&quot; data-origin-height=&quot;687&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;R-CNN&lt;/b&gt;은 VOC 2007에서는 높은 성능을 보이지만, &lt;b&gt;예술 이미지로 넘어가면 성능이 급격히 하락&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 R-CNN이 사용하는 Selective Search가 자연 이미지에 최적화되어 있고, 작은 영역만 분류기로 처리해 일반화가 잘 되지 않기 때문이다.&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;b&gt;DPM&lt;/b&gt;은 AP가 낮지만 예술 이미지로 넘어가도 &lt;b&gt;성능 감소가 작다.&lt;/b&gt;&amp;nbsp;&lt;b&gt;객체의 형태, 배치 등 공간 모델링이 강력&lt;/b&gt;하기 때문이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;YOLO&lt;/b&gt;는 VOC 2007에서 좋은 성능을 보이고, &lt;b&gt;예술 이미지로 전이될 때 성능 감소폭이 가장 작다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;YOLO는 DPM처럼 &lt;b&gt;객체의 크기, 형태, 위치, 관계까지 학습&lt;/b&gt;하며 이는 픽셀 수준에서는 다르지만 &lt;b&gt;구조적 유사성이 있는 예술 이미지에도 잘 대응&lt;/b&gt;할 수 있게 한다.&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;5️⃣ Real-Time Detection In The Wild (현실 세계에서의 실시간 객체 탐지)&amp;nbsp;&lt;/span&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;1783&quot; data-origin-height=&quot;746&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOfvwl/btsNSuS9n7z/AYBTEQtsN6r5cqGA613MMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOfvwl/btsNSuS9n7z/AYBTEQtsN6r5cqGA613MMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOfvwl/btsNSuS9n7z/AYBTEQtsN6r5cqGA613MMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOfvwl%2FbtsNSuS9n7z%2FAYBTEQtsN6r5cqGA613MMk%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;1783&quot; height=&quot;746&quot; data-origin-width=&quot;1783&quot; data-origin-height=&quot;746&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;YOLO는 &lt;b&gt;웹캠과 연결해도 실시간 객체 탐지 성능을 유지&lt;/b&gt;한다. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;YOLO는 개별 이미지를 처리하지만, 웹캠에 연결하면 &lt;b&gt;물체가 움직이거나 외형이 변하더라도 추적 시스템처럼 작동&lt;/b&gt;한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이 데모와 소스 코드는 &lt;a href=&quot;https://pjreddie.com/yolo&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://pjreddie.com/yolo&lt;/a&gt;에서 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;6️⃣&lt;/span&gt; Conclusion (결론)&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;객체 탐지를 위한 통합 모델인 YOLO&lt;/b&gt;는 &lt;b&gt;단순한 구조&lt;/b&gt;로 설계되어 있으며, &lt;b&gt;전체 이미지를 기반으로 학습&lt;/b&gt;한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;기존 분류기 기반 접근 방식과 달리 &lt;b&gt;탐지 성능과 직접적으로 연결된 손실 함수&lt;/b&gt;를 사용하여 학습된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;Fast YOLO&lt;/b&gt;는 &lt;b&gt;가장 빠른 범용 객체 탐지기&lt;/b&gt;이며, &lt;b&gt;YOLO는 실시간 객체 탐지 분야에서 새로운 성능 기준을 제시&lt;/b&gt;했다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;또한 &lt;b&gt;새로운 도메인에도 일반화 성능이 뛰어나&lt;/b&gt; 빠르고 견고한 객체 탐지가 필요한 분야에 적합하다.&lt;/span&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;출처&lt;/b&gt;&lt;/h2&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;You Only Look Once: Uniﬁed, Real-Time Object Detection, Redmon et al., 2016&amp;ndash;05&amp;ndash;09&lt;/span&gt;&lt;/blockquote&gt;
&lt;figure id=&quot;og_1746853582138&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;You Only Look Once: Unified, Real-Time Object Detection&quot; data-og-description=&quot;We present YOLO, a new approach to object detection. Prior work on object detection repurposes classifiers to perform detection. Instead, we frame object detection as a regression problem to spatially separated bounding boxes and associated class probabili&quot; data-og-host=&quot;arxiv.org&quot; data-og-source-url=&quot;https://arxiv.org/abs/1506.02640&quot; data-og-url=&quot;https://arxiv.org/abs/1506.02640v5&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/0DGrl/hyYRrD33Oq/7DDb5BqV6JavXpVD9fh9S0/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/bakvtv/hyYRt9IZQv/caUmXJWp312QK5yCbtld2k/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000&quot;&gt;&lt;a href=&quot;https://arxiv.org/abs/1506.02640&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://arxiv.org/abs/1506.02640&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/0DGrl/hyYRrD33Oq/7DDb5BqV6JavXpVD9fh9S0/img.png?width=1200&amp;amp;height=700&amp;amp;face=0_0_1200_700,https://scrap.kakaocdn.net/dn/bakvtv/hyYRt9IZQv/caUmXJWp312QK5yCbtld2k/img.png?width=1000&amp;amp;height=1000&amp;amp;face=0_0_1000_1000');&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;You Only Look Once: Unified, Real-Time Object Detection&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;We present YOLO, a new approach to object detection. Prior work on object detection repurposes classifiers to perform detection. Instead, we frame object detection as a regression problem to spatially separated bounding boxes and associated class probabili&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;arxiv.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>ML, DL</category>
      <category>yolo</category>
      <category>yolo 논문</category>
      <category>yolo 논문 리뷰</category>
      <category>you only look once</category>
      <category>논문 리뷰</category>
      <author>대체불가 핫걸</author>
      <guid isPermaLink="true">https://irreplaceablehotgirl.tistory.com/117</guid>
      <comments>https://irreplaceablehotgirl.tistory.com/117#entry117comment</comments>
      <pubDate>Sun, 11 May 2025 17:49:19 +0900</pubDate>
    </item>
  </channel>
</rss>