<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Kim's :D</title>
    <link>https://k9e4h.tistory.com/</link>
    <description>나는 전달한다. 구글링을.</description>
    <language>ko</language>
    <pubDate>Wed, 8 Apr 2026 17:36:26 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>k9e4h</managingEditor>
    <item>
      <title>CDC - Consumer Driven  Contract</title>
      <link>https://k9e4h.tistory.com/527</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring-cloud-contract/reference/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://docs.spring.io/spring-cloud-contract/reference/index.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770015464745&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;Spring Cloud Contract Reference Documentation :: Spring Cloud Contract&quot; data-og-description=&quot;Adam Dudczak, Mathias D&amp;uuml;sterh&amp;ouml;ft, Marcin Grzejszczak, Dennis Kieselhorst, Jakub Kubryński, Karol Lassak, Olga Maciaszek-Sharma, Mariusz Smykuła, Dave Syer, Jay Bryant&quot; data-og-host=&quot;docs.spring.io&quot; data-og-source-url=&quot;https://docs.spring.io/spring-cloud-contract/reference/index.html&quot; data-og-url=&quot;https://docs.spring.io/spring-cloud-contract/reference/index.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://docs.spring.io/spring-cloud-contract/reference/index.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://docs.spring.io/spring-cloud-contract/reference/index.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Spring Cloud Contract Reference Documentation :: Spring Cloud Contract&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Adam Dudczak, Mathias D&amp;uuml;sterh&amp;ouml;ft, Marcin Grzejszczak, Dennis Kieselhorst, Jakub Kubryński, Karol Lassak, Olga Maciaszek-Sharma, Mariusz Smykuła, Dave Syer, Jay Bryant&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;docs.spring.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;소비자 주도 계약 테스트란, 소비자가 자신이 실제로 서비스의 API를 어떻게 사용할 것인지에 대한 명세를 작성하고, 이 내용을 기반으로 실제 사용 사례에 맞춰 엔드투엔드 테스트를 설계하고 검증하는 방식이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.geeksforgeeks.org/system-design/consumer-driven-contract-pattern/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.geeksforgeeks.org/system-design/consumer-driven-contract-pattern/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770015858833&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;Consumer Driven Contract Pattern - GeeksforGeeks&quot; data-og-description=&quot;Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.&quot; data-og-host=&quot;www.geeksforgeeks.org&quot; data-og-source-url=&quot;https://www.geeksforgeeks.org/system-design/consumer-driven-contract-pattern/&quot; data-og-url=&quot;https://www.geeksforgeeks.org/system-design/consumer-driven-contract-pattern/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/3efXD/dJMb83SdVsj/NykUrBLvNUqU8DoZcHfMHK/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200,https://scrap.kakaocdn.net/dn/bxXVsk/dJMb88eVIgk/4kgrkfoUlydD9NTKl38O7K/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200&quot;&gt;&lt;a href=&quot;https://www.geeksforgeeks.org/system-design/consumer-driven-contract-pattern/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.geeksforgeeks.org/system-design/consumer-driven-contract-pattern/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/3efXD/dJMb83SdVsj/NykUrBLvNUqU8DoZcHfMHK/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200,https://scrap.kakaocdn.net/dn/bxXVsk/dJMb88eVIgk/4kgrkfoUlydD9NTKl38O7K/img.png?width=200&amp;amp;height=200&amp;amp;face=0_0_200_200');&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;Consumer Driven Contract Pattern - GeeksforGeeks&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Your All-in-One Learning Portal: GeeksforGeeks is a comprehensive educational platform that empowers learners across domains-spanning computer science and programming, school education, upskilling, commerce, software tools, competitive exams, and more.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.geeksforgeeks.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;소비자 주도 계약(CDC) 패턴은 서비스 소비자가 서비스 제공자가 이행해야 할 계약 내용을 명시하는 방법론입니다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #273239; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;color: #273239; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;서비스 제공자가 상호 작용 조건을 정의하는 기존 방식과 달리, CDC는 소비자가 자신의 기대치를 명확히 제시하도록 합니다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;color: #273239; text-align: left;&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이를 통해 소비자의 요구사항을 명확히 이해하고 서비스를 개발할 수 있으며, 통합 문제를 최소화하고 시스템 전반의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;a style=&quot;color: #357960;&quot; href=&quot;https://www.geeksforgeeks.org/system-design/reliability-in-system-design/&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;신뢰성을&lt;/span&gt;&lt;/a&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;향상시킬 수 있습니다 .&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <author>k9e4h</author>
      <guid isPermaLink="true">https://k9e4h.tistory.com/527</guid>
      <comments>https://k9e4h.tistory.com/527#entry527comment</comments>
      <pubDate>Mon, 2 Feb 2026 18:13:35 +0900</pubDate>
    </item>
    <item>
      <title>ArchUnit - Java 코드 분석</title>
      <link>https://k9e4h.tistory.com/526</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.archunit.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.archunit.org/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770008756232&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;Unit test your Java architecture&quot; data-og-description=&quot;Start enforcing your architecture within 30 minutes using the test setup you already have.&quot; data-og-host=&quot;www.archunit.org&quot; data-og-source-url=&quot;https://www.archunit.org/&quot; data-og-url=&quot;https://www.archunit.org/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.archunit.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.archunit.org/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Unit test your Java architecture&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Start enforcing your architecture within 30 minutes using the test setup you already have.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.archunit.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;trait 특성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sound 건전한, 정상적인&lt;br /&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;verify 입증하다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;adhere strictly to a plan 계획을 엄수하다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;adhere 들러붙다, 부착하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Simply put, 간단히 말해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;refer to sombody/something SB/ST 에 대해 언급하다. ~를 나타내다&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;** We need to verify that the code implemented adheres to it.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- implemented는 과거분사 형용사로, 관계절(which was implemented)을 줄여서 code를 뒤에서 수식한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;** The architecture of a system also defines how packages or groups of packages interact.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- how + 주어 + 동사는 질문이 아니라 목적어 역할을 하는 명사절&lt;/p&gt;</description>
      <author>k9e4h</author>
      <guid isPermaLink="true">https://k9e4h.tistory.com/526</guid>
      <comments>https://k9e4h.tistory.com/526#entry526comment</comments>
      <pubDate>Mon, 2 Feb 2026 15:48:02 +0900</pubDate>
    </item>
    <item>
      <title>Gamma 활용법, 직장인 PPT 툴 추천</title>
      <link>https://k9e4h.tistory.com/525</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-332b21bc-d7c9-4310-beab-bcb393e81080&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-332b21bc-d7c9-4310-beab-bcb393e81080&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-332b21bc-d7c9-4310-beab-bcb393e81080&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-db5812cd-1e93-4ca2-a07b-ac474677e856&quot;&gt;
&lt;p id=&quot;SE-690cc06e-1dd8-4172-9e7b-462d928f5e05&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이번에 강연 준비하면서 정말 많이 도움 받은 Gamma&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-00e2188f-0d28-4afd-a737-bda7d44aff98&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;없었다면 준비 어떻게했을지 모르겠다..&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-96669397-eff6-4b38-89a1-31ab5f8cbde7&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-59c40f2b-9419-405e-82d0-33639c547dbc&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;구글 계정으로 로그인, 계정 여러개 만들어서 반복 사용 가능&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-80b094e6-af65-45e3-b120-1af203a012e8&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1계정당 400크레딧, PPT 1장당 10크레딧, 별도 프롬프트 작성시 5크레딧 추가됨&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-611bc5ae-13df-4fb1-afe7-dd78b547704f&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-3662ae6f-56f6-433a-87c3-a876a18d0cb0&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-3662ae6f-56f6-433a-87c3-a876a18d0cb0&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-3662ae6f-56f6-433a-87c3-a876a18d0cb0&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-b3fbc824-7834-445f-ab1a-ace6cf075517&quot;&gt;
&lt;p id=&quot;SE-23761804-18f0-418c-bb23-029b95bbe1d0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Gamma PPT 생성 방법&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-29dd7e6b-63a6-45e7-bc34-4855e12a78f7&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-29dd7e6b-63a6-45e7-bc34-4855e12a78f7&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-29dd7e6b-63a6-45e7-bc34-4855e12a78f7&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-29dd7e6b-63a6-45e7-bc34-4855e12a78f7&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-29dd7e6b-63a6-45e7-bc34-4855e12a78f7&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;392&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cR4tYn/btsQ3hKDBZ6/1GZdMt72mIItdX8Ho5SLZ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cR4tYn/btsQ3hKDBZ6/1GZdMt72mIItdX8Ho5SLZ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cR4tYn/btsQ3hKDBZ6/1GZdMt72mIItdX8Ho5SLZ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcR4tYn%2FbtsQ3hKDBZ6%2F1GZdMt72mIItdX8Ho5SLZ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;693&quot; height=&quot;392&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;392&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;감마 로그인 후 &quot;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;새로 만들기&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&quot; 버튼 클릭&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-12f3ba14-1b59-4266-8f3a-c3762c588dfc&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-12f3ba14-1b59-4266-8f3a-c3762c588dfc&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-12f3ba14-1b59-4266-8f3a-c3762c588dfc&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-12f3ba14-1b59-4266-8f3a-c3762c588dfc&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-12f3ba14-1b59-4266-8f3a-c3762c588dfc&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;589&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ulG6X/btsQ3qVaWBx/x4Kp5AQEGBxM9JA0L85811/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ulG6X/btsQ3qVaWBx/x4Kp5AQEGBxM9JA0L85811/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ulG6X/btsQ3qVaWBx/x4Kp5AQEGBxM9JA0L85811/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FulG6X%2FbtsQ3qVaWBx%2Fx4Kp5AQEGBxM9JA0L85811%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;693&quot; height=&quot;589&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;589&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;대표&lt;/span&gt;&lt;span&gt;사진 삭제&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI 활용 설정&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-382da2ad-ffdc-4684-b527-361530c8d0d5&quot;&gt;
&lt;p id=&quot;SE-34ab6cea-ad78-4266-8a8d-6c92b3efa480&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사진 설명을 입력하세요.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-8e4d59c7-e0a6-4eed-ac50-5db5562ab558&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-8e4d59c7-e0a6-4eed-ac50-5db5562ab558&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-8e4d59c7-e0a6-4eed-ac50-5db5562ab558&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-f3c31fee-c096-4848-9b0e-58171d4cae42&quot;&gt;
&lt;p id=&quot;SE-7a543c00-43ec-4da1-a667-a007a32accab&quot; 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;span style=&quot;color: #000000;&quot;&gt; 클릭&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f35384ca-823f-49f2-a316-b24fb8ca3d00&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성은 프롬프트로 자동 생성,&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-341b149e-cbf7-433e-88f7-773684fec56f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;파일 또는 URL 가져오기는 기존 문서의 톤앤매너를 맞춰줌.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1dbfb0fd-cfca-4839-b807-4d985fd87e90&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;텍스트로 붙여넣기해서 직접 만드는게 가장 마음에 들었다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9df9c92e-ef49-4ad5-925e-8b37219739ca&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-706c5d6c-546a-4b7e-941f-16d2649da91c&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-706c5d6c-546a-4b7e-941f-16d2649da91c&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-706c5d6c-546a-4b7e-941f-16d2649da91c&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-706c5d6c-546a-4b7e-941f-16d2649da91c&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-706c5d6c-546a-4b7e-941f-16d2649da91c&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;762&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Po7k1/btsQ3qVaWEV/6RfFYDcuHtNK2dCrr6Rg9k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Po7k1/btsQ3qVaWEV/6RfFYDcuHtNK2dCrr6Rg9k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Po7k1/btsQ3qVaWEV/6RfFYDcuHtNK2dCrr6Rg9k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FPo7k1%2FbtsQ3qVaWEV%2F6RfFYDcuHtNK2dCrr6Rg9k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;693&quot; height=&quot;762&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;762&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;SE-5512f113-f518-46b1-b4d5-ff7574fc59a0&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-5512f113-f518-46b1-b4d5-ff7574fc59a0&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-5512f113-f518-46b1-b4d5-ff7574fc59a0&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-e3d170d9-b522-4f24-997e-4b941b7fed2d&quot;&gt;
&lt;p id=&quot;SE-19d6551f-1df8-4d4f-abb2-c1f5c62394bc&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #e3fdc8; color: #000000;&quot;&gt;&lt;b&gt;1. 프레젠테이션 선택&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a030e71a-a6d7-44c0-8c3a-e6102c738a0a&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-ebe4bfd9-2cf2-43e9-80a2-9298e93613a1&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #e3fdc8; color: #000000;&quot;&gt;&lt;b&gt;2. 콘텐츠 입력하기&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-03b563d3-f183-4457-bbef-5a9ca56fe3a8&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문장으로 작성, 키워드 몇가지 단어로 작성,&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a4052ce3-d76b-44aa-af32-aa33e54d9585&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;아주 긴 글로 작성 뭐든 상관없다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-65463dbd-0c94-49d3-947e-f1862f983f3f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 단계에서 수정 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3f5389d3-5b18-47be-857c-f379a67113ef&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-d0372095-23a4-488c-89dd-316a763d4f95&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #e3fdc8; color: #000000;&quot;&gt;&lt;b&gt;3. 긴 텍스트 또는 문서를 요약합니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a9d56f38-7884-40e9-8cf7-68079f9c0b6e&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;다음 단계에서 수정 가능하다. &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-c18e7d72-7089-4892-8671-70a2746acc00&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-c18e7d72-7089-4892-8671-70a2746acc00&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-c18e7d72-7089-4892-8671-70a2746acc00&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-c18e7d72-7089-4892-8671-70a2746acc00&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-c18e7d72-7089-4892-8671-70a2746acc00&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;582&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/esQS65/btsQ2zSj7hp/Ni8Zq6R7RcxGDvPNPGCKFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/esQS65/btsQ2zSj7hp/Ni8Zq6R7RcxGDvPNPGCKFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/esQS65/btsQ2zSj7hp/Ni8Zq6R7RcxGDvPNPGCKFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FesQS65%2FbtsQ2zSj7hp%2FNi8Zq6R7RcxGDvPNPGCKFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;693&quot; height=&quot;582&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;582&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-9d441ebd-25d9-41fd-8ab5-720df8015a4e&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-9d441ebd-25d9-41fd-8ab5-720df8015a4e&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-9d441ebd-25d9-41fd-8ab5-720df8015a4e&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-5f8ab9e1-9806-42c9-af7a-8755e8eb784c&quot;&gt;
&lt;p id=&quot;SE-ff0c44c4-196c-45cb-8017-70bbb2ae1956&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #e3fdc8; color: #000000;&quot;&gt;1. 왼쪽 상단 &lt;/span&gt;&lt;span style=&quot;background-color: #e3fdc8; color: #000000;&quot;&gt;&lt;b&gt;텍스트 콘텐츠&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-5e39a98b-328b-4d4c-bcdc-e8d20b03fb68&quot; 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 id=&quot;SE-411c30e4-7be8-4104-b03f-4a0847698a18&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;짧은 키워드로 작성한 콘텐츠를 풍부한 내용의 PPT로 작성할 때 유용&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1b63696d-3127-4a4c-962d-b65bbb282917&quot; 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 id=&quot;SE-649eac38-a662-4352-ab24-945b58fb76de&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;문장이나 긴 글로 작성한 내용을 키워드 중심의 PPT로 작성할 때 유용&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-30bc93fb-3230-4de5-8747-d24d0496b598&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;보존(유료)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b837402e-2c6e-46a8-b5f6-b3a436679fb8&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-7904971e-c818-4dae-83e1-b90658ffc40d&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;나는 주로 &quot;압축&quot; 그 중에서도 가장 짧게를 사용했다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9b450312-5651-489f-b70d-c3671094c6a9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이렇게해도 한 페이지에 글자 수 30,40자 이상으로 텍스트가 많았다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0e30134c-1e8d-4672-820e-494dc95af6e1&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-899f49a3-0701-46cc-8859-0705d16b030f&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #e3fdc8; color: #000000;&quot;&gt;2. 왼쪽 중간 &lt;/span&gt;&lt;span style=&quot;background-color: #e3fdc8; color: #000000;&quot;&gt;&lt;b&gt;시각적 요소&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e783ad9e-7c35-4283-ab67-506e33e562de&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;테마를 선택할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-aadd35d6-310f-4842-bff4-0c12dee56878&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;더보기를 클릭하면 다양한 테마와 각 테마의 예시를 볼 수있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ad32a42b-b8e2-44ca-a294-c7be2a7571f7&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-9ac339e6-bd3b-4374-a222-f14cd40c86bf&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;3. 왼쪽 아래 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;이미지 출처&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a0cb78fa-4adc-47a1-915d-ba9bf6f0c404&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;직접 이미지를 업로드 할 수도 있고 AI로 생성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1834c7b6-52c1-4cdf-8a64-7ff535de1529&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;이미지 스타일을 맞춰서 생성할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7245b41d-e29d-40dc-bcc4-fdfc82f74e2d&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-9f3688cb-9beb-4f1b-b988-f56d9d8c24d6&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #e3fdc8; color: #000000;&quot;&gt;4. 중간 &lt;/span&gt;&lt;span style=&quot;background-color: #e3fdc8; color: #000000;&quot;&gt;&lt;b&gt;콘텐츠&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-96fbcba2-4eff-42b5-bb0d-e8feefbdeaac&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;자유 형식이 있고 카드 형식이 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6a5f0ebe-6458-44e2-bb03-85f83be4060e&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전체 내용에서 어떤식으로 발표 내용을 분리할지 모르겠는 경우에는 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;자유 형식&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;을 사용하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0f025913-d29e-4e56-8e92-7734098d8f67&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;나의 경우에는, 분리하고 싶은 내용이 명확했기 때문에 &lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;b&gt;카드별&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;을 선택하여 각 카드마다 원하는 내용을 작성했다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3fd96814-e760-4b2d-9b82-c63c435785fb&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-5e2cbfe4-a95f-4d9e-b79b-c0eeb7de2f30&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #e3fdc8; color: #000000;&quot;&gt;5. &lt;/span&gt;&lt;span style=&quot;background-color: #e3fdc8; color: #000000;&quot;&gt;&lt;b&gt;추가 지침&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-15bb9818-57a7-4b37-98ed-f21444785307&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;상세 프롬프트를 작성한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-eb66f2e3-e232-4d89-90ca-e8b19178f731&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;전체적인 카드의 느낌이나 원하는 방향을 설정한다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7e8693bb-1433-4c53-b387-cb17aa6b1eb4&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-9992396f-fed9-41a7-be5f-388f5484f3cd&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-9992396f-fed9-41a7-be5f-388f5484f3cd&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-9992396f-fed9-41a7-be5f-388f5484f3cd&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-dad9a90b-6089-42fb-8cc3-a5eccb00e57c&quot;&gt;
&lt;p id=&quot;SE-3537a25b-345b-4901-a833-11499b5a5d5a&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;저장 방법&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-45faf959-d70a-4265-a006-9ebca6858ef4&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-45faf959-d70a-4265-a006-9ebca6858ef4&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-45faf959-d70a-4265-a006-9ebca6858ef4&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-45faf959-d70a-4265-a006-9ebca6858ef4&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-45faf959-d70a-4265-a006-9ebca6858ef4&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KWGc8/btsQ5iuLJjq/f9sRx6UtR063n7OFdYzyDK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KWGc8/btsQ5iuLJjq/f9sRx6UtR063n7OFdYzyDK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KWGc8/btsQ5iuLJjq/f9sRx6UtR063n7OFdYzyDK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKWGc8%2FbtsQ5iuLJjq%2Ff9sRx6UtR063n7OFdYzyDK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;693&quot; height=&quot;538&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;538&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-4b0ef060-c627-4c78-9672-85e708ed724a&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-4b0ef060-c627-4c78-9672-85e708ed724a&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-4b0ef060-c627-4c78-9672-85e708ed724a&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-fbbcd980-1a95-4fac-896e-c558679e9c7a&quot;&gt;
&lt;p id=&quot;SE-0853801a-dd8f-4e88-970b-30ecb121940a&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우측 상단 버튼을 통해 PDF, PowerPoint등 다양한 형식으로 저장 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-de26ef89-f2bc-43d8-92eb-61f10a119d31&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-d41b7ad7-6437-4554-9d5e-0a1c90a9f837&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-d41b7ad7-6437-4554-9d5e-0a1c90a9f837&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-d41b7ad7-6437-4554-9d5e-0a1c90a9f837&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-ed209b20-23c4-420e-8611-ba45d5167d1f&quot;&gt;
&lt;p id=&quot;SE-00c69bf6-f0e4-4a0f-86b7-896996cf4b04&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성 후 수정 방법&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-83443d2c-a8cc-424c-9770-70201b6a1b5f&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-83443d2c-a8cc-424c-9770-70201b6a1b5f&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-83443d2c-a8cc-424c-9770-70201b6a1b5f&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-83443d2c-a8cc-424c-9770-70201b6a1b5f&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-83443d2c-a8cc-424c-9770-70201b6a1b5f&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;532&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BFlD0/btsQ51e3NEB/xbK5wfKySkkMSofosVFUE0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BFlD0/btsQ51e3NEB/xbK5wfKySkkMSofosVFUE0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BFlD0/btsQ51e3NEB/xbK5wfKySkkMSofosVFUE0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBFlD0%2FbtsQ51e3NEB%2FxbK5wfKySkkMSofosVFUE0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;693&quot; height=&quot;532&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;532&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-2f05be61-53c5-4b5d-a476-586e2d060ad3&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-2f05be61-53c5-4b5d-a476-586e2d060ad3&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-2f05be61-53c5-4b5d-a476-586e2d060ad3&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-02307b70-ca8c-4a9c-bd62-cfdb4ccd1886&quot;&gt;
&lt;p id=&quot;SE-c7045e17-023f-47c4-9233-1d503145ae36&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프롬프트 자체를 수정할 경우&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-fea227b2-c081-46a8-93f9-f0b609258844&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;우측 상단 ... 에서 &quot;소스 프롬프트 보기&quot;를 선택하여 프롬프트 수정 가능,&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-fe8f797e-9209-477d-be7a-14c2a7be4577&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;프롬프트 수정하여 재생성할 경우 credit이 차감된다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c4c300f3-d727-46f0-b3cc-e69d2f34bb73&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-f8c2d628-b677-42ec-8e55-2fc7118f810a&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-f8c2d628-b677-42ec-8e55-2fc7118f810a&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-f8c2d628-b677-42ec-8e55-2fc7118f810a&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-f8c2d628-b677-42ec-8e55-2fc7118f810a&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-f8c2d628-b677-42ec-8e55-2fc7118f810a&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;535&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xsTek/btsQ5SvFiYy/kHFpI4SiSDkzzKFG6KfOJk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xsTek/btsQ5SvFiYy/kHFpI4SiSDkzzKFG6KfOJk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xsTek/btsQ5SvFiYy/kHFpI4SiSDkzzKFG6KfOJk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxsTek%2FbtsQ5SvFiYy%2FkHFpI4SiSDkzzKFG6KfOJk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;693&quot; height=&quot;535&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;535&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-2600741a-935e-426f-8fb1-866e223f81d1&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-2600741a-935e-426f-8fb1-866e223f81d1&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-2600741a-935e-426f-8fb1-866e223f81d1&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-15e317e4-72de-40c6-b6ad-5640b7276a30&quot;&gt;
&lt;p id=&quot;SE-69523746-3df2-4231-ac55-9d3f108dafc4&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;일반 장표를 생성할 때는 크레딧 사용 X,&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-4280bf00-f36c-4052-af0f-99a91f0ea4fc&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;gamma에서 ppt를 수정할 경우 테마에 맞는 구성요소를 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-135157bd-2ee9-41d3-aff8-dd942e104688&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;gamma에서 모두 수정하고 ppt로 다운 받아서 최종 확인하는게 좋다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ac1829cd-f3ae-41c9-8ee1-ddb4018ad049&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;컴퓨터에 다운 받아서 작업하게 되면 오히려 기존 테마에 맞춰서 수정하기가 어렵다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2ff91ef5-453c-4b44-8388-34f93f829407&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-83ed3e0d-46f1-4834-b364-4b40610577ad&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-c7f5478a-0895-48fb-8451-8750182634d1&quot; data-a11y-title=&quot;소제목&quot; data-compid=&quot;SE-c7f5478a-0895-48fb-8451-8750182634d1&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-c7f5478a-0895-48fb-8451-8750182634d1&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-8f885085-2df9-4a32-985e-a1b335d7c5f2&quot;&gt;
&lt;p id=&quot;SE-d68fdf9d-2c59-426d-a2d9-07252e4452c9&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Gamma 크레딧 정책&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-ea4425f9-9579-4e86-8457-f7bb0c64ecc6&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-ea4425f9-9579-4e86-8457-f7bb0c64ecc6&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-ea4425f9-9579-4e86-8457-f7bb0c64ecc6&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-1775c54a-13ec-4a7b-8939-522a9e0b6e70&quot;&gt;
&lt;p id=&quot;SE-5ce56a19-5976-4f38-98f7-6d80613d7be8&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; AI로 만들기: 생성한 gamma당 크레딧 40개. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3a365ef1-5144-44f0-b2c8-61be6f723222&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; AI로 카드 추가: 생성하는 카드당 크레딧 5개. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-96f4dec9-da02-43ab-988c-7f69b3bc0497&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; AI와 채팅: AI 제안당 크레딧 10개(예: 이미지 찾기, 콘텐츠 다시 쓰기 등), 오류나 설명에 대해 서는 비용이 청구되지 않습니다. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-960f030f-9b0f-401c-a110-416fe82b9f50&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; AI 이미지: 이미지 프롬프트당 크레딧 10개. &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7efca3a3-130a-4c5d-97e1-0f7f3ffcba26&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;bull; AI로 계속:/continue 또는 +++ 사용할 때마다 크레딧 2개&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e251e75a-c2a6-499b-81a7-bc6c8084e90a&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-38d0ec14-e147-48f1-8efb-5ff427dc3806&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-2274e5bb-ad4b-470e-ab56-bbcb87a3f1fb&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Gamma로 광명 찾으세요!!!! 오예~~~!!&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-ae0e6cbc-2f5a-4d28-9184-679384a87ad0&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p id=&quot;SE-7e8a687a-ca9b-4fb4-a6ce-fa8625fc72b2&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;최종 완성한 PPT&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-750cbb58-9e0d-43b4-b620-ff7e064ec89e&quot; data-a11y-title=&quot;사진&quot; data-compid=&quot;SE-750cbb58-9e0d-43b4-b620-ff7e064ec89e&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-750cbb58-9e0d-43b4-b620-ff7e064ec89e&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-750cbb58-9e0d-43b4-b620-ff7e064ec89e&quot;&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;&quot; data-unitid=&quot;SE-750cbb58-9e0d-43b4-b620-ff7e064ec89e&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;722&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bThpZB/btsQ5XX3mC4/pGog6wqKTrI9ejL78aa5b1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bThpZB/btsQ5XX3mC4/pGog6wqKTrI9ejL78aa5b1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bThpZB/btsQ5XX3mC4/pGog6wqKTrI9ejL78aa5b1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbThpZB%2FbtsQ5XX3mC4%2FpGog6wqKTrI9ejL78aa5b1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;693&quot; height=&quot;722&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;936&quot; data-origin-height=&quot;722&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;span&gt;&lt;/span&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;SE-adbe7983-afaf-46b9-bfc4-48e52e8d9456&quot; data-a11y-title=&quot;본문&quot; data-compid=&quot;SE-adbe7983-afaf-46b9-bfc4-48e52e8d9456&quot;&gt;
&lt;div&gt;
&lt;div data-direction=&quot;top&quot; data-compid=&quot;SE-adbe7983-afaf-46b9-bfc4-48e52e8d9456&quot; data-unitid=&quot;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;SE-03dc82f2-44e0-43a7-99d4-03a0061e011d&quot;&gt;
&lt;p id=&quot;SE-7bac0639-1b04-40d3-b90b-b7c6704b7081&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>k9e4h</author>
      <guid isPermaLink="true">https://k9e4h.tistory.com/525</guid>
      <comments>https://k9e4h.tistory.com/525#entry525comment</comments>
      <pubDate>Thu, 9 Oct 2025 17:15:21 +0900</pubDate>
    </item>
    <item>
      <title>MongoDB</title>
      <link>https://k9e4h.tistory.com/524</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;코히어 coherence 응집성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #1f1f1f; text-align: start;&quot;&gt;polymorphism 다형성&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CQRS 패턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;OLTP 성능이 좋다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SQL은 Hardware에 성능이 좌우되지만 Json Document는 동일한 Hardware더라도 모델 구조에 따라서 성능이 좋아질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mongodb..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mongodb는 sql을 정확하게 맞출 필요 없다 &amp;rarr; 쿼리 정확도?를 설정할 수 있음 (flexible schema)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RDBMS - MongoDB&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Database - Dababase&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Table - Collection&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Row - Document&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Column - Field&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Index - Index (B-tree Index 사용)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하나의 Document안에 sub document 가질 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;array, flexible schema&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;object based api &amp;rarr; application에서도 json document 필드를 변경할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;flexible schema &amp;rarr; 변하지 않는 필드는 무조건 정합성을 맞춰야하고 그 외의 필드들은 정합성을 좀 약하게해서, 서비스 운영 상태에서도 스키마를 변경하면서 할 수 있다.&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;3010&quot; data-origin-height=&quot;1740&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bLSAXX/btsOr3Ngh1e/lwU1TZLc4Et8ryL535yDck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bLSAXX/btsOr3Ngh1e/lwU1TZLc4Et8ryL535yDck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bLSAXX/btsOr3Ngh1e/lwU1TZLc4Et8ryL535yDck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbLSAXX%2FbtsOr3Ngh1e%2FlwU1TZLc4Et8ryL535yDck%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;3010&quot; height=&quot;1740&quot; data-origin-width=&quot;3010&quot; data-origin-height=&quot;1740&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;------&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Embedding Vs Referenceing&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;SQL 정규화 =&amp;gt; 몽고DB에서는 정규화라는 용어보다는 referenceing이라고 얘기함 =&amp;gt; 3차 정규화읭 foreign key 라고 생각하면 됨&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;3022&quot; data-origin-height=&quot;1632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dxVeB8/btsOqAFm6uG/21kEUELdQ3f9k5nSnc7gkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dxVeB8/btsOqAFm6uG/21kEUELdQ3f9k5nSnc7gkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dxVeB8/btsOqAFm6uG/21kEUELdQ3f9k5nSnc7gkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdxVeB8%2FbtsOqAFm6uG%2F21kEUELdQ3f9k5nSnc7gkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;3022&quot; height=&quot;1632&quot; data-origin-width=&quot;3022&quot; data-origin-height=&quot;1632&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;가급적이면 1개의 document에서 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- multi head transaction을 피할 수 있음&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;하나의 document에 넣으면 데이터 중복 및 용량이 커지는 문제가 있지만&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재는 스토리지 비용이 저렴하기 떄문이 무시 가능할 수준이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한개의 document내의 field 가 concurrency 하게 여러 client가 읽을 때는 throuput이 떨어질 수도 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;write confliect 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---------&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MongoDb Data Modeling&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2654&quot; data-origin-height=&quot;1722&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SEuRE/btsOqrB7BgW/0W0amB9WxnI3VpOctkOpQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SEuRE/btsOqrB7BgW/0W0amB9WxnI3VpOctkOpQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SEuRE/btsOqrB7BgW/0W0amB9WxnI3VpOctkOpQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSEuRE%2FbtsOqrB7BgW%2F0W0amB9WxnI3VpOctkOpQ0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;2654&quot; height=&quot;1722&quot; data-origin-width=&quot;2654&quot; data-origin-height=&quot;1722&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;어떤걸 Embedding하고 어떤걸 Referenceing하는게 모델링의 주요 과제이다&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2910&quot; data-origin-height=&quot;1334&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cXy2au/btsOq98OqlI/cfJKaAgfBDvoYSzBKFeCZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cXy2au/btsOq98OqlI/cfJKaAgfBDvoYSzBKFeCZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cXy2au/btsOq98OqlI/cfJKaAgfBDvoYSzBKFeCZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcXy2au%2FbtsOq98OqlI%2FcfJKaAgfBDvoYSzBKFeCZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;2910&quot; height=&quot;1334&quot; data-origin-width=&quot;2910&quot; data-origin-height=&quot;1334&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;----&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각각의 document내의 array는 200개 까지 가능함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3144&quot; data-origin-height=&quot;1554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cLnGtA/btsOqeCH1Hk/9EddbmhTgZ7JjRXMUmK6PK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cLnGtA/btsOqeCH1Hk/9EddbmhTgZ7JjRXMUmK6PK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cLnGtA/btsOqeCH1Hk/9EddbmhTgZ7JjRXMUmK6PK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcLnGtA%2FbtsOqeCH1Hk%2F9EddbmhTgZ7JjRXMUmK6PK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;3144&quot; height=&quot;1554&quot; data-origin-width=&quot;3144&quot; data-origin-height=&quot;1554&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;----&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;3146&quot; data-origin-height=&quot;1556&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cQGmOd/btsOpwYpP51/6GmMqTQseoZZ4bCwulZs5k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cQGmOd/btsOpwYpP51/6GmMqTQseoZZ4bCwulZs5k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cQGmOd/btsOpwYpP51/6GmMqTQseoZZ4bCwulZs5k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcQGmOd%2FbtsOpwYpP51%2F6GmMqTQseoZZ4bCwulZs5k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;3146&quot; height=&quot;1556&quot; data-origin-width=&quot;3146&quot; data-origin-height=&quot;1556&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;가장 많이 사용하는건 relationships에 있는 것들..&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;subsset pattern..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리의 중심이되는 Domcument를 읽을 때 다른 document의 일부를 embedding 하는 것..&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;extended reference pattern..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쿼리의 중심이 아니라 다른 Document에 몇몇 필드를 넣어두는 것&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3238&quot; data-origin-height=&quot;1852&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/diwZqC/btsOrlVCMVP/NiCXcZw2mTBL5DCiUO0Mg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/diwZqC/btsOrlVCMVP/NiCXcZw2mTBL5DCiUO0Mg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/diwZqC/btsOrlVCMVP/NiCXcZw2mTBL5DCiUO0Mg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdiwZqC%2FbtsOrlVCMVP%2FNiCXcZw2mTBL5DCiUO0Mg1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;3238&quot; height=&quot;1852&quot; data-origin-width=&quot;3238&quot; data-origin-height=&quot;1852&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;p data-ke-size=&quot;size16&quot;&gt;attribute pattern&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;key,value로 json document만들어 놓으면 &quot;key&quot;라는 필드명은 변하지 않기때문에 index 걸기 좋아짐&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3364&quot; data-origin-height=&quot;1860&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bASffR/btsOsbkiTcb/6sktGEFTkjkEVeLqcYpkyK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bASffR/btsOsbkiTcb/6sktGEFTkjkEVeLqcYpkyK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bASffR/btsOsbkiTcb/6sktGEFTkjkEVeLqcYpkyK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbASffR%2FbtsOsbkiTcb%2F6sktGEFTkjkEVeLqcYpkyK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;3364&quot; height=&quot;1860&quot; data-origin-width=&quot;3364&quot; data-origin-height=&quot;1860&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;p data-ke-size=&quot;size16&quot;&gt;스키마에 버전을 넣으면 다운 타임 없이 변경된 스키마를 적용할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;3378&quot; data-origin-height=&quot;1906&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bCLUbT/btsOqcrP3Gz/gFyxosRL1GCvkmzuU1t8B1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bCLUbT/btsOqcrP3Gz/gFyxosRL1GCvkmzuU1t8B1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bCLUbT/btsOqcrP3Gz/gFyxosRL1GCvkmzuU1t8B1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbCLUbT%2FbtsOqcrP3Gz%2FgFyxosRL1GCvkmzuU1t8B1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;3378&quot; height=&quot;1906&quot; data-origin-width=&quot;3378&quot; data-origin-height=&quot;1906&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;1224&quot; data-origin-height=&quot;1534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/daKLRm/btsOryAqI66/AmTKXCwQ4JnVSF2TtTuhXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/daKLRm/btsOryAqI66/AmTKXCwQ4JnVSF2TtTuhXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/daKLRm/btsOryAqI66/AmTKXCwQ4JnVSF2TtTuhXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdaKLRm%2FbtsOryAqI66%2FAmTKXCwQ4JnVSF2TtTuhXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1224&quot; height=&quot;1534&quot; data-origin-width=&quot;1224&quot; data-origin-height=&quot;1534&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;p data-ke-size=&quot;size16&quot;&gt;pagination 쓸 때 group 쓰지 말기 -&amp;gt; group은 blocking이라 모든 document를 읽어야한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;group 외에 setWindowFields 사용하기&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1712&quot; data-origin-height=&quot;1808&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qsPbE/btsOr0wtNEm/ugHTG62vv98JFTpiJB6KF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qsPbE/btsOr0wtNEm/ugHTG62vv98JFTpiJB6KF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qsPbE/btsOr0wtNEm/ugHTG62vv98JFTpiJB6KF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqsPbE%2FbtsOr0wtNEm%2FugHTG62vv98JFTpiJB6KF0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;1712&quot; height=&quot;1808&quot; data-origin-width=&quot;1712&quot; data-origin-height=&quot;1808&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;p data-ke-size=&quot;size16&quot;&gt;--------&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2626&quot; data-origin-height=&quot;1372&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bcjUJE/btsOqHLQfdK/bccdUVsLdZMkj3LKhpuJdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bcjUJE/btsOqHLQfdK/bccdUVsLdZMkj3LKhpuJdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bcjUJE/btsOqHLQfdK/bccdUVsLdZMkj3LKhpuJdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbcjUJE%2FbtsOqHLQfdK%2FbccdUVsLdZMkj3LKhpuJdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;2626&quot; height=&quot;1372&quot; data-origin-width=&quot;2626&quot; data-origin-height=&quot;1372&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;주로 Compound Index 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-----------&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mongodb 용어&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;fuzzy&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;full text&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;exact match&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;ngram&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;nori&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #545d7e; text-align: left;&quot; data-huuid=&quot;5328649309988058823&quot;&gt;&lt;span&gt;- N-gram은 문자열을 일정한 길이의 연속된 부분 문자열로 분해하는 기법입니다.&lt;/span&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #545d7e; text-align: left;&quot; data-huuid=&quot;5328649309988057460&quot;&gt;&lt;span&gt;Nori와 함께 N-gram을 사용하면 자동 완성 기능이나 부분 문자열 검색 기능을 구현할 수 있습니다.&lt;/span&gt;&lt;span data-cid=&quot;2fc47df4-e1b5-4c3f-9cc8-6c7debfb7c0f&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #545d7e; text-align: left;&quot;&gt;- Nori는 한국어 형태소 분석기로, 텍스트를 형태소 단위로 분해하여 인덱싱하고 검색하는 데 사용&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #545d7e; text-align: left;&quot;&gt;- Atlas&amp;nbsp;Search:&amp;nbsp;MongoDB&amp;nbsp;Atlas는&amp;nbsp;클라우드&amp;nbsp;기반의&amp;nbsp;검색&amp;nbsp;기능을&amp;nbsp;제공하며,&amp;nbsp;Nori를&amp;nbsp;사용하여&amp;nbsp;한국어&amp;nbsp;검색을&amp;nbsp;지원합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #545d7e; text-align: left;&quot;&gt;ngram은 기법, nori는 mongodb의 엔진&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #262626; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;Ngram&lt;/b&gt;은 문자를 일정 길이로 자르는 방식이기 때문에, 오타나 유사어 검색에 유리하지만, 문법적인 의미를 고려하지 않습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Nori&lt;/b&gt;는 한국어의 형태소 분석에 특화되어 있어, 의미 기반의 검색을 할 때 더 효과적입니다. 한국어의 단어 단위로 분리하여 인덱싱을 하므로, 언어적 의미를 반영하는 데 적합합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #262626; text-align: start;&quot;&gt;Ngram을 통해 오타나 부분 문자열 검색을 처리하고, Nori를 사용하여 정확한 형태소 기반 검색을 처리&lt;/span&gt;&lt;/p&gt;</description>
      <author>k9e4h</author>
      <guid isPermaLink="true">https://k9e4h.tistory.com/524</guid>
      <comments>https://k9e4h.tistory.com/524#entry524comment</comments>
      <pubDate>Thu, 5 Jun 2025 16:43:20 +0900</pubDate>
    </item>
    <item>
      <title>MySQL 튜닝</title>
      <link>https://k9e4h.tistory.com/521</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. SQL 실행계획 분석도구&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Explain, Anlayze&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;그러나 MySQL은 대부분은 경우 explain에 나온 실행 계획 그대로 실행 됨&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;Analyze 는 실제 SQL을 수행한 결과 기반&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;mysql 8.0 이상에서는 analyze explain으로 명령어 변령 됨&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;explain으로 파악하고 analyze로 같은지 확인&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;explain 후에 format 옵션을 주어서 격자무늬가아닌 json으로 보면 조회 됨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;json으로 조회시 더 많은 항목을 조회 할 수 있음&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;explain 뒤에 extended 등 키워드가 있는데 이런 키워드들은 사라지는 추세&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;&lt;b&gt;MariaDB/MySQL Query 실행 구조&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;DMBS Engine과 Storage Engine으로 나뉘고 Storage Engine에서 필요한 데이터만 가져오는 것이 튜닝의 기본이다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Cache는 정말 완전히 동일한 조건일 때만 Cache에서 가져옴&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;MariaDb - Expalin&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;통계정보 기반으로 실행 계획이 나옴 Analyze를 하면 통계도 최산화 함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Explain은 Analyze에 비해 실제 Query를 수행하지 않기 떄문에 DB에 부하를 주지 않고 실행 계획을 검토할 수 있음&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;MariaDB10 부터는 Hash Join 지원, 이전에는 Loof Join&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;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1741927666080&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;select *
  from empyees a, 
      (select emp_no, dept_no
         from dept_emp where emp_no &amp;gt; 90000
      ) b,
      salaries c
where a.emp_no = b.emp_no
  and a.emp_no = c.emp_no&lt;/code&gt;&lt;/pre&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;linline view 에서 조회한 데이터를 어딘가에 저장하는게 아니라, join 해야할 다른 테이블과 merge 되는 것임&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;조건절 전이되어 emp_no &amp;gt; 9000은 a.emp_no를 보게 됨&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;&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;size16&quot;&gt;&lt;b&gt;ID&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;번호가 같으면 같은 SQL 문장 ( SQL 블락 ), 조건절 전이가 일어나면 같은 ID가 됨&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;select 의 list에 select 가 있는 경우 - oracle에서는 스칼라 쿼리, mysql에서는 서브쿼리&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;where절에 있는 select는 oracle, mysql에는 동일하게 서브쿼리라고 함&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;&lt;b&gt;Access Type&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Table Access&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에 접근한 방법 -&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;성능에 가장 큰 영향을 미친다.&lt;/p&gt;
&lt;table style=&quot;color: #333333; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;const&lt;/td&gt;
&lt;td&gt;&lt;span&gt;PK, Unique Key 가 동등 비교(전체 동일), oracle에서는 unique Scan&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;eq_ref&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;const와 동일, 다른 점은 const는 driving table에 대하여 const 로 나오고 driving table 외에 inner table에 대하여 eq_ref 라고 조회 됨&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ref&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;인덱스를 이용하여 동등 비교&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;index&lt;/td&gt;
&lt;td&gt;&lt;span&gt;index를 탄다는 의미가 아니라 index Full Scan 을 한다는 의미, 종종 이게 성능이 나올 때도 있지만 대부분 성능 개성 포인트&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;all&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;index 는 성능 개선이 필요한 부분&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;range&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&lt;span&gt;between 사용 시 나타남, index를 mbetween을 사용하면&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;unique_subquery&lt;/td&gt;
&lt;td&gt;&lt;span&gt;해당 테이블은 oder 할 필요 없음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;index_subquery&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ref_subquery&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ref_or_null&lt;/td&gt;
&lt;td&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;const, eq_ref, ref 가 나오면 성능 좋은거!!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- index, all 은&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;&lt;b&gt;possible_key&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Optimizer가 후보로 선정했던 Key 혹은 Index 목록&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;key, key_len을 이용하여 index에 해당하는 몇 개의 컬럼을 사용했는지 확인 -&amp;gt; index 를 잘 활용했는지를 체크할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;possible_key의 ref 는 const를 의미하고 Table의 Access type의 ref, const는 다른 의미!&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;rows 스토리지엔진에서 엑세스할 것으로 예측한 row수 ( DBMS에서 추려내는 row수가 아님 ) ,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;filtered rows에 보여진느 건 수 증 최종에 사용 되는 데이터 건 수 - 높을 수록 좋음, 낮다는 것은 사용하지 않을 데이터를 스토리지엔진에서 가져온 것이기떄문&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기타항목 - mysql의 hint 사용여부를 확인&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt; using index : 좋은 것, index만으로 쿼리를 실행함을 의미&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;-&amp;gt; using where : 스토리지 엔진에서 데이터 조회 후 filtering 처리 후에 group by 등 데이터 후행 작업이 있음 -&amp;gt; dbms에서 추가 작업이 있다는 의미, 인덱스가 적절한지 검토해볼 필요가 있음, 스토리지엔진에서 데이터가 filter되어 조회되는 것이 가장 좋음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;gt; using index condition : 인덱슬르 잘 사용했다면 using index condition이 찍혀야함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt; index_condition_pushdown : 이전에 부정 조건은 스토리지 엔진에서 처리하지 못하고 DBMS엔진에서 처리했음 이 것을 on로 하면 부정조건도 처리하도록 함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;gt; using temporary&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;gt; using filesort : index로 orderby하면 조회하면서 바로 정렬이 되는데 이것을 활용하지 못해서 별도로 sort를 진행 함.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; -&amp;gt; 페이징 처리 쿼리를 조회 했을 때 Extra 항목에 아무것도 없으면 성능이 좋은 것&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;select type&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;dependent_subquery : select문이 길 때 이런 서브쿼리가 있구나 파악하기&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;materialized :&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;seelct 절에 있는 sub query 가 성능에 문제가 있는지 확인해보고싶다면 하나씩 제거하면서 성능을 비교해보면 됨&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;--&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;* from 절의 select 문은 inline view&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;* 테이블에서는 alias를 꼭 사용하고, 동일한 테이블을 사용하더라도 alias는 모두 다르게 사용하는 것이 꿀팁&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;&amp;nbsp;&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;table 좋은거 안좋은거&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;possible_ke 좋은거 안좋은거&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;&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;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Analyze&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;예측 값과 실제 값을 함께 보여줌 ( rows -&amp;gt; 예측 값, r_rows -&amp;gt; 실제 값 , 차이가 많이 난다면 통계를 재실행하기 )&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;r_rows 는 처음 조회되는 것은 실제 데이터 건수, 이후 부터는 각 join마다 조회해야하는 row수, 곱하기 됨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;r_total_time_ms 는 json format에서만 조회 됨, 이게 가장 큰 것을 기준으로 튜닝을 진행하자&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ex)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;r_rows 는 10만, filtered는 50%이면 r_loofs는 10만, filtered가 100이면 r_loofs는 10만&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;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SQL Hint&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;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;MariaDB&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 55px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Straiget_Join&lt;/td&gt;
&lt;td&gt;From 절에 기술한 테이블 순서대로 Join&lt;br /&gt;성능 문제로 잘 사용하지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;MySQL&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;옵티마이저 힌트의 영향 범위에 따라 크게 4개 그룹&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 글로벌 : 전체 쿼리에 영향&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 쿼리 블록 : SQL 문장의 특정 쿼리 블록에 영향&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 테이블 : 쿼리 블록 중 특정 테이블&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;-&amp;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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;SEMIJOIN&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;많이 사용!!&lt;br /&gt;anti semi-join의 최적화에 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;SUBQQUERY&lt;/td&gt;
&lt;td style=&quot;width: 50%;&quot;&gt;많이 사용!!&lt;br /&gt;서브 ㅜ커리의 세미 조인 최적화 전략, in subquery의 최적화에 사용&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;&lt;a href=&quot;https://dev.mysql.com/doc/search/?d=371&amp;amp;p=1&amp;amp;q=hint&quot;&gt;https://dev.mysql.com/doc/search/?d=371&amp;amp;p=1&amp;amp;q=hint&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1741927666084&quot; style=&quot;color: #333333; text-align: start;&quot; contenteditable=&quot;false&quot; data-og-image=&quot;&quot; data-og-url=&quot;https://dev.mysql.com/doc/search/?d=371&amp;amp;p=1&amp;amp;q=hint&quot; data-og-source-url=&quot;https://dev.mysql.com/doc/search/?d=371&amp;amp;p=1&amp;amp;q=hint&quot; data-og-host=&quot;dev.mysql.com&quot; data-og-description=&quot;Search Results https://dev.mysql.com/doc/refman/8.4/en/optimizer-hints.html Another way to control the optimizer is by using optimizer hints, which can be specified within individual statements. Because optimizer hints apply on a per-statement basis, they&quot; data-og-title=&quot;MySQL :: MySQL 8.4 Reference Manual :: Search Results&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://dev.mysql.com/doc/search/?d=371&amp;amp;p=1&amp;amp;q=hint&quot; data-source-url=&quot;https://dev.mysql.com/doc/search/?d=371&amp;amp;p=1&amp;amp;q=hint&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;MySQL :: MySQL 8.4 Reference Manual :: Search Results&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Search Results https://dev.mysql.com/doc/refman/8.4/en/optimizer-hints.html Another way to control the optimizer is by using optimizer hints, which can be specified within individual statements. Because optimizer hints apply on a per-statement basis, they&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;dev.mysql.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&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;--&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Join&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;&lt;b&gt;Nested Loop Join&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;일반적으로 알려진 Join 방식으로 많이 사용함&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;데이터가 적은 부분을 선행 테이블로 해야 함&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;드라이빙 테이블에서 조회된 순서대로 데이터가 정렬되어 조회 됨 ( 100% 정렬은 아님 )&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;&lt;b&gt;Block Nested Look Join&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(BNL Join, MariaDB)&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;&lt;b&gt;Hash Join&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;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&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;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Table Full Scan 인 경우&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;-&amp;gt; Index 추가&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Index 변경&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;-&amp;gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;논리적으로 True인 조건 추가&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; &amp;nbsp; -&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;startDt&amp;nbsp; &amp;lt;팝업 조회 일 &amp;lt; endDt 일 때 between만 사용하는게 아니라 now() &amp;lt; endDt 인 논리적으로 T인 조건 추가하여 index 조회 가능하도록 함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&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;&amp;nbsp; -&amp;gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;숫자와 문자열, 날짜와 문자열&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; -&amp;gt; 다른 데이터 유형을 비교하면 내부적으로 컬럼에 있는 데이터를 비교 대상 데이터 형식으로 변경하게 됨, 컬럼은 가공하지말고 컬럼 유형에 맞게 검색 조건을 변경하기&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; -&amp;gt; ex) varchar(1) Col 인데 Col = 1 로 검색 ===&amp;gt; col = &quot;1&quot; 로 변경&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; -&amp;gt; ex) datetime Col 인데 date_format(Col, '%Y%m') == &quot;2503&quot; 으로 조건 검색&amp;nbsp; ===&amp;gt; Col = str_to_date(&quot;2503&quot;, '%Y%m')&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; -&amp;gt; sysdate() 는 index 불가, now()로 변경 / sysdate는 가변 데이터, now는 쿼리가 실행될때 고정 됨&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; -&amp;gt; select sysdate() from table limit 10 하면 각 sysdate 값 ms 단위로 다름, row마다 실행되는 가변데이터임&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Order By 주의하기&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여러 테이블을 Join 할 때 Index가 존재하는 Table의 Alias를 사용하여 order by 진행하기&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;1개의 조건으로 total count를 조회하는 Left Outer Join 을 여러개 사용해야하는 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;eq_ref 기 때문에 상위 테이블만 사용하면 됨.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;전체 count하는 쿼리와, 데이터를 조회하는 쿼리를 분리해야 함&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;조건절에 Case 문장 -&amp;gt; OR로 수정&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;Join Update/Delete&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;MariaDb/MySql은 Update나 Delete시에 Join을 이용하여 작업하는 것이 가능함, 의외로 Join을 이용한 Update, Delete가 성능에 매우 유용한 경우가 있음&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;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style2&quot; data-ke-type=&quot;horizontalRule&quot; /&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;&lt;b&gt;Oracle에서 Mysql 변경 시 자주 보이는 사례&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;|| =&amp;gt; 문자열 합치기&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 53px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;ENP_NO &amp;gt;= '2024' || '1111' 의 의미는&lt;/td&gt;
&lt;td&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;oracle&lt;/td&gt;
&lt;td&gt;mysql&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;ENP_NO &amp;gt;= '20241111'&lt;/td&gt;
&lt;td&gt;ENP_NO &amp;gt;= ('2024' or '1111')&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&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;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Order by, Limit 가 존재하는 Select 구문에서 SubQuery 사용하는 경우 꼭 개선해야함&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Index 를 실행하지 못하고 전체 데이터를 읽게 됨&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;&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;&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&quot; /&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;--&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;limit 10 이 있는 경우 driving table에서 1건 조회 후 inner table에서 조회 이미 10개가 채워지면 다음을 진행하지 않음&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;explain에 type = all 로 되어있어도 limit 가 있으면 성능이 괜찮을 수도 있다.&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;--&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;group by 는 merge가 일어나지 않는다&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;show warings-&amp;gt; 실제 실행되는 쿼리를 보여줌 select * 라면 어떤 컬럼이 읽혔는지 등등&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;---&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;PK는 Clustered Index,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Lateral Join&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;--&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;운영 중인 서비스에서 index를 만들때 invisable로 만들고 사용하면 됨&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;--&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;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;window 함수의 장점은 group by 없이 count(*) 등 함수 사용할 수 있음 ex) count(*) over() as tot_cnt&lt;/p&gt;</description>
      <author>k9e4h</author>
      <guid isPermaLink="true">https://k9e4h.tistory.com/521</guid>
      <comments>https://k9e4h.tistory.com/521#entry521comment</comments>
      <pubDate>Thu, 13 Mar 2025 13:07:28 +0900</pubDate>
    </item>
    <item>
      <title>Mendix 10.12 -&amp;gt; 10.19 버전 변화 내용</title>
      <link>https://k9e4h.tistory.com/520</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;10.13&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #2f3646; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Microsoft SQL Server용 JDBC 드라이버를 버전 12.6.3으로 업그레이드했습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.mendix.com/appstore/modules/database-connector/&quot;&gt;Database Connector&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;와 같은 모듈 에서 통합 보안을 사용하여 SQL Server에 연결하는 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;userlib&lt;span&gt;&amp;nbsp;&lt;/span&gt;의 JDBC 드라이버도 업데이트해야 할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #2f3646; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;react-native&lt;span&gt;&amp;nbsp;&lt;/span&gt;0.73.8&lt;span&gt;&amp;nbsp;&lt;/span&gt;버전으로 업그레이드했습니다.&lt;/li&gt;
&lt;li&gt;react-native-device-info&lt;span&gt;&amp;nbsp;&lt;/span&gt;11.1.0&lt;span&gt;&amp;nbsp;&lt;/span&gt;버전으로 업그레이드했습니다.&lt;/li&gt;
&lt;li&gt;react-native-fast-image&lt;span&gt;&amp;nbsp;&lt;/span&gt;8.6.3&lt;span&gt;&amp;nbsp;&lt;/span&gt;버전으로 업그레이드했습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10.14&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; background-color: #ffffff; color: #2f3646; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Microsoft SQL Server용 JDBC 드라이버를 버전 12.8.0으로 업그레이드했습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://marketplace.mendix.com/link/component/2888&quot;&gt;Database Connector&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;와 같은 모듈 에서 통합 보안을 사용하여 SQL Server에 연결하는 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;userlib&lt;span&gt;&amp;nbsp;&lt;/span&gt;의 JDBC 드라이버도 업데이트해야 할 수 있습니다.&lt;/li&gt;
&lt;li&gt;10.12.0에서 공개 베타로 도입된&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.mendix.com/refguide/clone-type/&quot;&gt;Git 부분 애플리케이션 복제가&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이제 일반적으로 사용 가능합니다. 부분 복제는 필요한 최소한의 데이터 세트를 다운로드하므로 이 방법은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.mendix.com/refguide/troubleshoot-repository-size/&quot;&gt;대규모 저장소&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에서 작업할 때 전체 복제보다 훨씬 빠릅니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Open app&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;settings 또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.mendix.com/refguide/preferences-dialog/#version-control&quot;&gt;version control preferences&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에서 새 앱이나 branch 다운로드하는 것과 같은 향후 복제 작업에 대한 복제 전략을 선택할 수 있습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10.15&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; background-color: #ffffff; color: #2f3646; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;MariaDB 11.4에 대한 지원을 추가했습니다.&lt;/li&gt;
&lt;li&gt;MySQL 8.4에 대한 지원을 추가했습니다.&lt;/li&gt;
&lt;li&gt;이제 REST 호출이 완료된 후 익명 사용자를 정리합니다.&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #2f3646; text-align: left;&quot;&gt;Microsoft SQL Server용 JDBC 드라이버를 12.8.1 버전으로 업그레이드했습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #2f3646; text-align: left;&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #2f3646; text-align: left;&quot;&gt;외부 데이터베이스 커넥터에 다음과 같은 업데이트를 적용했습니다.&lt;/span&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #2f3646; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;JSON을 매개변수 값으로 포함하는 하드코딩된 문자열과 외부 데이터베이스 쿼리&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;활동에 대한 지원을 추가했습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. (티켓 223881)&lt;/li&gt;
&lt;li&gt;&lt;b&gt;외부 데이터베이스 쿼리&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;대화 상자 에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;확인&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에 대한 키보드 단축키로&lt;span&gt;&amp;nbsp;&lt;/span&gt;Ctrl+를&lt;span&gt;&amp;nbsp;&lt;/span&gt;추가했습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. (티켓 223881)Enter&lt;b&gt;&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;Oracle DB에 구성된 경우 TAF 모드를 수정하기 위해 Oracle Library를 23.5.1로 업데이트했습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;FAILOVER_TYPE=SELECT. (티켓 225454, 226404)&lt;/li&gt;
&lt;li&gt;Query External Database의 매개변수 섹션에 스크롤을 추가했습니다. (티켓 227464)&lt;/li&gt;
&lt;li&gt;이제 새 열 및/또는 삭제된 열로 기존 엔터티를 업데이트할 수 있습니다.&lt;/li&gt;
&lt;li&gt;새로운 쿼리를 생성할 때 이제 동일한 데이터베이스 연결 문서의 다른 쿼리에 매핑된 기존 엔터티를 재사용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;We now correctly take into account the excluded jars of managed dependencies when compiling Java actions.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10.16&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #2f3646; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Java 17을 사용하는 경우 사용 중단 경고를 추가했습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;환경 설정 &amp;gt; 배포&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에 관리되는 Java 종속성의 동기화를 비활성화하는 새 설정을 추가했습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 이를 사용하면 Gradle 동기화가 실패하더라도(예: 에어갭 환경) 애플리케이션을 시작할 수 있습니다. Java 종속성이 누락된 경우 컴파일 오류가 발생할 수 있으며 복제 및 버전 충돌을 수동으로 처리해야 합니다. 동기화가 비활성화된 경우 SBOM 생성이 지원되지 않습니다.&lt;/li&gt;
&lt;li&gt;이제 우리는 내보낸 앱과 모듈 패키지에 Java 종속성을 포함합니다. 이는 Gradle 동기화가 비활성화된 경우 사용됩니다.&lt;/li&gt;
&lt;li&gt;Mendix Runtime API 호출을 더 이상 사용하지 않고 .&lt;span&gt;&amp;nbsp;&lt;/span&gt;ICore#addSessionCookies으로 대체했습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;ICore#addMendixCookies. 이 새로운 API 호출에는 애플리케이션이 실행되는 경로가 필요하지 않습니다.&lt;/li&gt;
&lt;li&gt;영어의 기본 날짜 패턴에서 사용자가 날짜 및 시간 입력 필드에 끊지 않는 공백을 삽입해야 하는 문제를 해결했습니다. (티켓 225500)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10.17&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;We now allow you to define parameters of microflows and nanoflows as optional using the&amp;nbsp;&lt;a href=&quot;https://docs.mendix.com/refguide/parameter/#argument&quot;&gt;Argument&lt;/a&gt;&amp;nbsp;property. This means they can be called with an empty argument expression&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; href=&quot;https://docs.mendix.com/refguide/configuration/#headers&quot;&gt;App Configurations에 Headers&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;라는 새 탭을 추가했습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;. 이 탭을 사용하면 개발 중에 사용할 헤더를 로컬로 구성할 수 있습니다.&lt;span&gt; (로컬만인듯)&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;앱에서 단위 크기에 대한 통계를 볼 수 있는 새로운 CLI 명령을 출시했습니다. 자세한 내용은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.mendix.com/refguide/mx-command-line-tool/analyze-mpr/&quot;&gt;MPR Analyze Command를&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;참조하세요 .&lt;/li&gt;
&lt;li&gt;&lt;b&gt;도움말 메뉴 &amp;gt; 지원 도구를&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;통해 Studio Pro 로그 수준을 변경하는 기능을 추가했습니다&lt;span&gt;&amp;nbsp;&lt;/span&gt;.&lt;/li&gt;
&lt;li&gt;Java 동작을 컴파일할 때 전체 디버그 정보를 포함할 수 있도록 하는 '&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;전체 디버그 정보 생성'&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이라는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.mendix.com/refguide/preferences-dialog/#debug-info&quot;&gt;새로운 설정을&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;&lt;b&gt;환경 설정&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에&lt;span&gt;&amp;nbsp;&lt;/span&gt;추가했습니다 .&lt;/li&gt;
&lt;li&gt;지원 중단&lt;/li&gt;
&lt;li&gt;공급업체에서 더 이상 PostgreSQL 12를 지원하지 않으므로 이에 대한 지원을 중단했습니다.&lt;/li&gt;
&lt;li&gt;우리는 더 이상 사용하지 않습니다 .&lt;span&gt;&amp;nbsp;&lt;/span&gt;대신&lt;span&gt;&amp;nbsp;&lt;/span&gt;ICoreAction.getMetaInfo사용할 수 있습니다 .ICoreAction.getMetaInfoJsonString&lt;/li&gt;
&lt;li&gt;알려진 문제&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Call REST 서비스&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Send REST 요청&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;활동 에서 보낸 아웃바운드 REST 요청의 본문은&lt;span&gt;&amp;nbsp;&lt;/span&gt;Studio Pro 버전 10.16까지 적용된 인코딩인 UTF-8 대신 ISO-8859-1 인코딩을 사용하여 잘못 포맷되었습니다. (티켓 235194, 237487)&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10.18&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #2f3646; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;열 이름에 공백과 특수 문자가 포함된 SQL 쿼리에 대한 지원이 외부 데이터베이스 커넥터에 추가되었습니다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Call REST&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #2f3646; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;작업에서 파일 문서를 요청 본문으로 사용하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;Content-Length&lt;span style=&quot;background-color: #ffffff; color: #2f3646; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;헤더가 없는 HTTP 요청이 발생하는 문제를 해결했습니다.&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;We fixed an issue where deployment failed when an entity had one system association (&lt;b&gt;owner&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;or&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;changedBy&lt;/b&gt;) already in the database and a second one was added later.&lt;/li&gt;
&lt;li&gt;We made improvements to the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Changes&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;pane:
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Users can now resize columns to display the complete file path. Additionally, users can hover over the path to see the full file path in a tooltip.&lt;/li&gt;
&lt;li&gt;We updated the button labels in the&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Changes&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;pane, and certain dialogs to use&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;local&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;server&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;instead of&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;mine&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;and&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;theirs&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;for selecting the source when resolving file conflicts.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; href=&quot;https://docs.mendix.com/refguide/version-control/#mpr-format&quot;&gt;MPRv2 format&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Studio Pro 의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;변화&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;창에서 파일 변경 사항을 보고 충돌을 직접 해결할 수 있는 기능을 추가했습니다. 이제 파일 비교 도구를 열어 수정된 파일을 검토하거나&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;변화&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;창에 나열된 변경된 파일이 있는 폴더로 이동할 수 있습니다. 충돌을 해결하려면 로컬 버전을 유지하거나 수신 서버 버전을 수락하기만 하면 됩니다. 이 업데이트는 프로젝트 및 디스크 파일 관리를 간소화합니다. 자세한 내용은&lt;span&gt;&amp;nbsp;&lt;/span&gt;Studio Pro 에서 버전 제어 사용&lt;span&gt;&amp;nbsp;&lt;/span&gt;의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.mendix.com/refguide/using-version-control-in-studio-pro/#status&quot;&gt;상태&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;섹션을 참조하세요.&lt;/li&gt;
&lt;li&gt;Mendix Runtime API 에 데이터베이스 설정에 액세스하기 위한 새로운 메서드인&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://apidocs.rnd.mendix.com/10/runtime/com/mendix/core/conf/Configuration.html#getDatabaseSettingAsString%28%29&quot;&gt;getDatabaseSettingAsString()&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;을 구현했습니다.&lt;/li&gt;
&lt;li&gt;Gradle 8.5 미만 버전은 더 이상 지원되지 않습니다.\&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #2f3646; text-align: left;&quot;&gt;CSS 파일의 줄 끝이 제대로 처리되지 않으므로&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #2f3646; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.mendix.com/refguide/using-version-control-in-studio-pro/&quot;&gt;모든 변화 되돌리기를&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #2f3646; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #2f3646; text-align: left;&quot;&gt;사용하거나 다른 버전 제어 작업을 수행할 때 CSS 파일이&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #2f3646; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://docs.mendix.com/refguide/version-control-menu/#show-changes&quot;&gt;디스크 변화&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #2f3646; text-align: left;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #2f3646; text-align: left;&quot;&gt;대화 상자에 나타납니다.&lt;/span&gt;&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;10.19&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Online&amp;nbsp;Synchronization&amp;nbsp;Mode&amp;nbsp;(Beta)&lt;/li&gt;
&lt;li&gt;PostgreSQL 또는 MariaDB/MySQL과&lt;span&gt;&amp;nbsp;&lt;/span&gt;jdbc:aws-wrapper:&lt;span&gt;&amp;nbsp;&lt;/span&gt;로 시작하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;DatabaseJdbcUrl&lt;span&gt;&amp;nbsp;&lt;/span&gt;을 사용하는 경우 이제&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://github.com/aws/aws-advanced-jdbc-wrapper&quot;&gt;AWS Wrapper JDBC 드라이버를&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;사용하여 데이터베이스에 연결합니다.&lt;/li&gt;
&lt;li&gt;We updated the External Database Connector, which now supports connecting to any database by using the Java dependency specified by the user for the respective database in the module settings.&lt;/li&gt;
&lt;li&gt;엔터티에 이미 데이터베이스에 하나의 시스템 연결(&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;owner&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;changedBy&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;)이 있고 나중에 두 번째 연결이 추가된 경우 배포가 실패하는 문제를 해결했습니다.&lt;/li&gt;
&lt;li&gt;CustomJavaAction을 더 이상 사용하지 않습니다. 대신 UserAction을 사용하세요. Studio Pro 이제 Java 작업의 기본 클래스로 UserAction을 사용합니다.&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>
      <author>k9e4h</author>
      <guid isPermaLink="true">https://k9e4h.tistory.com/520</guid>
      <comments>https://k9e4h.tistory.com/520#entry520comment</comments>
      <pubDate>Wed, 19 Feb 2025 17:56:48 +0900</pubDate>
    </item>
    <item>
      <title>패스트캠퍼스 AI 개발자의 LLM 마스터 클래스(6)</title>
      <link>https://k9e4h.tistory.com/519</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Open AI Finetuning UI&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://platform.openai.com/finetune&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://platform.openai.com/finetune&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일 튜닝 용어 정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) Base model - 공부 전의 학생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) Train - 공부&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) Tokenizer : 책 내용을 작은 단위로 나누어 정리하는 도구&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) Epochs (이포크): 학습 반복 횟수&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 학생이 교재를 처음부터 끝까지 읽는 횟수&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) Batch Size (묶음 크기)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 학생이 한 번에 공부하는 양, 한 번에 한 장? 한 단원?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6) Learning rate (학습률): 학생이 새로운 정보를 배우는 속도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 너무 빠르면 이해가 부족하고, 너무 느리면 비효율적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7)  Weight decay (가중치 감소)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 학생이 공부하면서 중요하지 않은 세부 사항에 너무 만흥ㄴ 신경을 쓰지 않도록하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 과도한 정보 축적으로 인해 집중력이 흐트러지는 것을 방지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8) Gradient clipping&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 과도한 스트레스나 혼란을 피하기 위해 공부량을 제한.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; 흥분을 가라앉히고 꾸준히 학습할 수 있도록 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 기울기 제한? 기울기 자르기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9) Sequence length&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 학생이 한 번에 집중해서 공부할 수 있는 문장의 길이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 너무 길면 이해하기 힘들고 너무 짧으면 문맥 파악이 어려움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10) PEFT (피이에프티 , Parameter-Efficient Fine-Tuning)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 중요한 부분이나 자신에게 필요한 부분만 선택적으로 공부&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이미 알고 있는 부분은 복습 생략, 새로운 부분만 학습, 시험 제출 가능성이 높은 부분만 복습 등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 원래 FineTuning은 전체를 튜닝하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11) LoRA (로라)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 학생이 주요 개념을 이해한 후, 세부 사항을 간단하게 추가하여 이해를 확장하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 압축하는것, 태종태세문단세...&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12) QLoRA&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모델 가중치를 양자화(정밀도 감소)하여 LoRA하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 3.1415926535 를 3.14로 만듬, 저장 공간이 적게 필요함. 연산에 필요한 리소스를 줄임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;FineTuning 튜토리얼 순서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 로딩 - 데이터 로딩 - 파라미터 세팅 - 훈련 - 테스트 - 설치&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.deeplearning.ai/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.deeplearning.ai/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739338352175&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;Home&quot; data-og-description=&quot;DeepLearning.AI | Andrew Ng | Join over 7 million people learning how to use and build AI through our online courses. Earn certifications, level up your skills, and stay ahead of the industry.&quot; data-og-host=&quot;www.deeplearning.ai&quot; data-og-source-url=&quot;https://www.deeplearning.ai/&quot; data-og-url=&quot;https://www.deeplearning.ai/index/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/q4PEm/hyYafFn0Qc/yoXQtQmD5DPbWmckkKNvj0/img.png?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260&quot;&gt;&lt;a href=&quot;https://www.deeplearning.ai/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.deeplearning.ai/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/q4PEm/hyYafFn0Qc/yoXQtQmD5DPbWmckkKNvj0/img.png?width=2400&amp;amp;height=1260&amp;amp;face=0_0_2400_1260');&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;Home&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;DeepLearning.AI | Andrew Ng | Join over 7 million people learning how to use and build AI through our online courses. Earn certifications, level up your skills, and stay ahead of the industry.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.deeplearning.ai&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/mlabonne/llm-course/blob/main/Fine_tune_Llama_2_in_Google_Colab.ipynb&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/mlabonne/llm-course/blob/main/Fine_tune_Llama_2_in_Google_Colab.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739339408214&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;llm-course/Fine_tune_Llama_2_in_Google_Colab.ipynb at main &amp;middot; mlabonne/llm-course&quot; data-og-description=&quot;Course to get into Large Language Models (LLMs) with roadmaps and Colab notebooks. - mlabonne/llm-course&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/mlabonne/llm-course/blob/main/Fine_tune_Llama_2_in_Google_Colab.ipynb&quot; data-og-url=&quot;https://github.com/mlabonne/llm-course/blob/main/Fine_tune_Llama_2_in_Google_Colab.ipynb&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cdLgbK/hyYcfedB2c/28VXqAZmD66cWv2CukgNEK/img.png?width=1200&amp;amp;height=600&amp;amp;face=990_136_1072_226,https://scrap.kakaocdn.net/dn/h9uya/hyYcVzxJgb/DwJIhBa2StLjBuaSceZNF1/img.png?width=1200&amp;amp;height=600&amp;amp;face=990_136_1072_226&quot;&gt;&lt;a href=&quot;https://github.com/mlabonne/llm-course/blob/main/Fine_tune_Llama_2_in_Google_Colab.ipynb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/mlabonne/llm-course/blob/main/Fine_tune_Llama_2_in_Google_Colab.ipynb&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cdLgbK/hyYcfedB2c/28VXqAZmD66cWv2CukgNEK/img.png?width=1200&amp;amp;height=600&amp;amp;face=990_136_1072_226,https://scrap.kakaocdn.net/dn/h9uya/hyYcVzxJgb/DwJIhBa2StLjBuaSceZNF1/img.png?width=1200&amp;amp;height=600&amp;amp;face=990_136_1072_226');&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;llm-course/Fine_tune_Llama_2_in_Google_Colab.ipynb at main &amp;middot; mlabonne/llm-course&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Course to get into Large Language Models (LLMs) with roadmaps and Colab notebooks. - mlabonne/llm-course&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://colab.research.google.com/drive/1eHNWg9gnaXErdAa8_mcvjMupbSS6rDvi&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://colab.research.google.com/drive/1eHNWg9gnaXErdAa8_mcvjMupbSS6rDvi&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739339412865&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;Fine-tune Llama 3 with ORPO.ipynb&quot; data-og-description=&quot;Colab notebook&quot; data-og-host=&quot;colab.research.google.com&quot; data-og-source-url=&quot;https://colab.research.google.com/drive/1eHNWg9gnaXErdAa8_mcvjMupbSS6rDvi&quot; data-og-url=&quot;https://colab.research.google.com/drive/1eHNWg9gnaXErdAa8_mcvjMupbSS6rDvi&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/rjtea/hyYfKjivSH/EaqGKMoQ71LxUmWuKQ9VG1/img.png?width=260&amp;amp;height=260&amp;amp;face=0_0_260_260&quot;&gt;&lt;a href=&quot;https://colab.research.google.com/drive/1eHNWg9gnaXErdAa8_mcvjMupbSS6rDvi&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://colab.research.google.com/drive/1eHNWg9gnaXErdAa8_mcvjMupbSS6rDvi&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/rjtea/hyYfKjivSH/EaqGKMoQ71LxUmWuKQ9VG1/img.png?width=260&amp;amp;height=260&amp;amp;face=0_0_260_260');&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;Fine-tune Llama 3 with ORPO.ipynb&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Colab notebook&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;colab.research.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/aws/amazon-sagemaker-examples/tree/c3ce68a9ef9fc527c88b081c1466f18a4ed99530/introduction_to_amazon_algorithms/jumpstart-foundation-models&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/aws/amazon-sagemaker-examples/tree/c3ce68a9ef9fc527c88b081c1466f18a4ed99530/introduction_to_amazon_algorithms/jumpstart-foundation-models&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739339418263&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;amazon-sagemaker-examples/introduction_to_amazon_algorithms/jumpstart-foundation-models at c3ce68a9ef9fc527c88b081c1466f18a4ed99&quot; data-og-description=&quot;Example   Jupyter notebooks that demonstrate how to build, train, and deploy machine learning models using   Amazon SageMaker. - aws/amazon-sagemaker-examples&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/aws/amazon-sagemaker-examples/tree/c3ce68a9ef9fc527c88b081c1466f18a4ed99530/introduction_to_amazon_algorithms/jumpstart-foundation-models&quot; data-og-url=&quot;https://github.com/aws/amazon-sagemaker-examples/tree/c3ce68a9ef9fc527c88b081c1466f18a4ed99530/introduction_to_amazon_algorithms/jumpstart-foundation-models&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/IspT3/hyYagxxBJn/xHkgasG9sLzRlSDkqttWLK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/hmrka/hyYf0l8v5C/HOgMOTxQUaokAGH1iU56E1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/aws/amazon-sagemaker-examples/tree/c3ce68a9ef9fc527c88b081c1466f18a4ed99530/introduction_to_amazon_algorithms/jumpstart-foundation-models&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/aws/amazon-sagemaker-examples/tree/c3ce68a9ef9fc527c88b081c1466f18a4ed99530/introduction_to_amazon_algorithms/jumpstart-foundation-models&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/IspT3/hyYagxxBJn/xHkgasG9sLzRlSDkqttWLK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/hmrka/hyYf0l8v5C/HOgMOTxQUaokAGH1iU56E1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;amazon-sagemaker-examples/introduction_to_amazon_algorithms/jumpstart-foundation-models at c3ce68a9ef9fc527c88b081c1466f18a4ed99&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Example   Jupyter notebooks that demonstrate how to build, train, and deploy machine learning models using   Amazon SageMaker. - aws/amazon-sagemaker-examples&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://colab.research.google.com/drive/1bexb6SiEdy_8bwp8UgqNWDRg9LWpa_Kz?usp=sharing&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://colab.research.google.com/drive/1bexb6SiEdy_8bwp8UgqNWDRg9LWpa_Kz?usp=sharing&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739339425768&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;FastCampus_Amazon Sagemaker Fine tuning code extract&quot; data-og-description=&quot;Colab notebook&quot; data-og-host=&quot;colab.research.google.com&quot; data-og-source-url=&quot;https://colab.research.google.com/drive/1bexb6SiEdy_8bwp8UgqNWDRg9LWpa_Kz?usp=sharing&quot; data-og-url=&quot;https://colab.research.google.com/drive/1bexb6SiEdy_8bwp8UgqNWDRg9LWpa_Kz&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bjn4Ee/hyYfSIoPI6/y5al98pc7UbUc1ftg0LeNk/img.png?width=260&amp;amp;height=260&amp;amp;face=0_0_260_260&quot;&gt;&lt;a href=&quot;https://colab.research.google.com/drive/1bexb6SiEdy_8bwp8UgqNWDRg9LWpa_Kz?usp=sharing&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://colab.research.google.com/drive/1bexb6SiEdy_8bwp8UgqNWDRg9LWpa_Kz?usp=sharing&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bjn4Ee/hyYfSIoPI6/y5al98pc7UbUc1ftg0LeNk/img.png?width=260&amp;amp;height=260&amp;amp;face=0_0_260_260');&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;FastCampus_Amazon Sagemaker Fine tuning code extract&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Colab notebook&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;colab.research.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://colab.research.google.com/drive/1YkjiVtnpLFV4zZI7c04FeElM4DNYI7hb?usp=sharing&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://colab.research.google.com/drive/1YkjiVtnpLFV4zZI7c04FeElM4DNYI7hb?usp=sharing&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739339429967&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;FastCampus: Alpaca + Llama-3 8b Unsloth 2x faster finetuning.ipynb&quot; data-og-description=&quot;Colab notebook&quot; data-og-host=&quot;colab.research.google.com&quot; data-og-source-url=&quot;https://colab.research.google.com/drive/1YkjiVtnpLFV4zZI7c04FeElM4DNYI7hb?usp=sharing&quot; data-og-url=&quot;https://colab.research.google.com/drive/1YkjiVtnpLFV4zZI7c04FeElM4DNYI7hb&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gHEVC/hyYcjVbyfI/VMLjiXPNqdazIY1Pi33zNK/img.png?width=260&amp;amp;height=260&amp;amp;face=0_0_260_260&quot;&gt;&lt;a href=&quot;https://colab.research.google.com/drive/1YkjiVtnpLFV4zZI7c04FeElM4DNYI7hb?usp=sharing&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://colab.research.google.com/drive/1YkjiVtnpLFV4zZI7c04FeElM4DNYI7hb?usp=sharing&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gHEVC/hyYcjVbyfI/VMLjiXPNqdazIY1Pi33zNK/img.png?width=260&amp;amp;height=260&amp;amp;face=0_0_260_260');&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;FastCampus: Alpaca + Llama-3 8b Unsloth 2x faster finetuning.ipynb&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Colab notebook&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;colab.research.google.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;----&lt;/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;직접 foundation model 만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 데이터 수집 및 전 철&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 수집, 정리, 표준화 등등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 모델 아키텍쳐 및 학습 방법 결정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Transformer, GPT-3, Megatron-Tuning NLG등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 컴퓨팅 자원이 많이 들어간다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터가 많이 필요하고 학습하는데 시간과 비용이 많이 든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Transformer&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 구글에서 2017 만들어진 대표적인 모델 아키텍쳐 , 문맥 이해에 월등함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인코더+ 디코더 : 입력 텍스트 처리는 인코더, 출력 테스트는 디코더&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BERT (구글 2018)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인코더에 집중, 이해에 집중, 모델이 크고 계산량 높음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPT-3 ( OpenAI)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 디코더에 집중, 생성에 초점, 창의적임, 답변 잘함, 답변 계산량 높음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 모델 평가 및 개선&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 평가 방법&amp;nbsp; BLEU, ROUGE, CIDEr&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-  추가 학습, 하이퍼 파라미터 조정을 반복하여 개선 ( 학습률, 배치 크기, 에포크 수, hidden layer 수, 뉴런 수 등등 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LoRA (Low Rank Latent Representation - 저차원 나중 표현)&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;파인튜닝은 거의 다시 학습하는데 LoRA는 마지막 부분만 실행하게 함, 어댑터를 끼우는 느낌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저차원 행렬(metrics)를 사용하여 가중치를 수정&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;Quantization 양자화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아날로그 언어를 디지털화할 때 사용하는 용어&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;계속되는 값이 아니라 뚝뚝 떨어지는 불연속적인 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근사치로 표현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;단순화하여 모델 크기, 메모리 공간을 줄여 속도 높이고 좋은 하드웨어 없이도 동작하게 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확도 손실, 하드웨어 호환성&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bo4WpB/btsMfG17xPZ/kEvW8Mq1NKzjTMpljN2WW0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bo4WpB/btsMfG17xPZ/kEvW8Mq1NKzjTMpljN2WW0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bo4WpB/btsMfG17xPZ/kEvW8Mq1NKzjTMpljN2WW0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbo4WpB%2FbtsMfG17xPZ%2FkEvW8Mq1NKzjTMpljN2WW0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;170&quot; data-origin-width=&quot;549&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;QLoRA 실습&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/peremartra/Large-Language-Model-Notebooks-Course/blob/main/5-Fine%20Tuning/QLoRA_Tuning_PEFT.ipynb&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/peremartra/Large-Language-Model-Notebooks-Course/blob/main/5-Fine%20Tuning/QLoRA_Tuning_PEFT.ipynb&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739340526314&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Large-Language-Model-Notebooks-Course/5-Fine Tuning/QLoRA_Tuning_PEFT.ipynb at main &amp;middot; peremartra/Large-Language-Model-Notebooks&quot; data-og-description=&quot;Practical course about Large Language Models. . Contribute to peremartra/Large-Language-Model-Notebooks-Course development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/peremartra/Large-Language-Model-Notebooks-Course/blob/main/5-Fine%20Tuning/QLoRA_Tuning_PEFT.ipynb&quot; data-og-url=&quot;https://github.com/peremartra/Large-Language-Model-Notebooks-Course/blob/main/5-Fine%20Tuning/QLoRA_Tuning_PEFT.ipynb&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/W5Mtn/hyYaiWoynr/sz4pphi1fDLsV4kp7YNG0k/img.png?width=1200&amp;amp;height=600&amp;amp;face=963_108_1013_164,https://scrap.kakaocdn.net/dn/bYqkmL/hyYcd1N0DM/76UxpK8E6BWPYkP3V543xk/img.png?width=1200&amp;amp;height=600&amp;amp;face=963_108_1013_164&quot;&gt;&lt;a href=&quot;https://github.com/peremartra/Large-Language-Model-Notebooks-Course/blob/main/5-Fine%20Tuning/QLoRA_Tuning_PEFT.ipynb&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/peremartra/Large-Language-Model-Notebooks-Course/blob/main/5-Fine%20Tuning/QLoRA_Tuning_PEFT.ipynb&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/W5Mtn/hyYaiWoynr/sz4pphi1fDLsV4kp7YNG0k/img.png?width=1200&amp;amp;height=600&amp;amp;face=963_108_1013_164,https://scrap.kakaocdn.net/dn/bYqkmL/hyYcd1N0DM/76UxpK8E6BWPYkP3V543xk/img.png?width=1200&amp;amp;height=600&amp;amp;face=963_108_1013_164');&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;Large-Language-Model-Notebooks-Course/5-Fine Tuning/QLoRA_Tuning_PEFT.ipynb at main &amp;middot; peremartra/Large-Language-Model-Notebooks&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Practical course about Large Language Models. . Contribute to peremartra/Large-Language-Model-Notebooks-Course development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ollama 울라마&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;API Key 없이 Local PC에서 LLM 실행 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 보안, 비용등에서 장점이 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://ollama.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://ollama.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1739341022124&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;Ollama&quot; data-og-description=&quot;Get up and running with large language models.&quot; data-og-host=&quot;ollama.com&quot; data-og-source-url=&quot;https://ollama.com/&quot; data-og-url=&quot;https://ollama.com&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/by5jeY/hyYfCeuQzs/AxuCBdAFD8O5klfDLnAuP1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://ollama.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://ollama.com/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/by5jeY/hyYfCeuQzs/AxuCBdAFD8O5klfDLnAuP1/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Ollama&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Get up and running with large language models.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;ollama.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;----&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM Ops Stack&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 - 훈련 - 서비스 만들기 - 서비스 사용하기 - 서비스 모니터링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 파이프라인 - 데이터 수집 및 전처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모델 훈련 학습 인프라 및 프레임워크,하이퍼 파라미터 튜닝 및 최적화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포 - containerization, orchestration, 확장성/로드 밸런싱&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모니터링 - latency, requests conpleted, model drift, updates&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;* model drift = 학습 내용이 노후화되어 반응이 적절하지 않게되는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 을 서비스할 때 직면할 수도있는 문제들&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 프롬프트 버전 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Meta 프롬프트 자체도 업데이트되어야하기때문에 버저닝등 관리해야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 배치/벌크 테스팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 데이터 파이프라인 인터페이스 만들고 관리하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 모델 스피드/가격/성능 요구에 따라 다른 모델 쓰기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 모델 로드 밸런싱&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6) 병목현상 찾기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7) 품질 저하 이유 찾기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8) 데이터 retrieval 최적화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;9) Retrieved data 스토리지 최적화 및 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;10) 데이터 로깅 vs RAI 요구사항 맞추기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;11) Regression 테스트 만들기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- prompt 업데이트나 모델이 변경했을 때 기본적인 테스트 셋이 있어야 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- regression&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.launchableinc.com/blog/seven-types-of-regression-testing/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.launchableinc.com/blog/seven-types-of-regression-testing/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;12) SLA, KPI 만들고 모니터링하기&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Service Level Agreement&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 속도를 향상 시키기 위한 전략 / LLM 속도 개선&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 모델 경량화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 가지치기(pruning) : 불필요한 모델 파라미터 제거&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 한국어만 필요하다면 일본어는 제외한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 양자화(quantization) : 모델 파라미터의 정밀도 감소, 32bit 파라미터를 8bit 로 감소시킨다던지( 소수점을 정수로 변환 등 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 지식 증류 (knowledge distillation) : 작고 빠른 모델에 지식 전달, 대규모 모델에 있는 지식을 전달&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 추론 최적화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 배치 처리 : 여러 오쳥을 한 번에 처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 캐싱 : 자주 사용되는 결과 저장 및 재사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 하드웨어 가속(Hardware Acceleration) : GPU, TPU 등 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 코드 및 알고리즘 최적화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 효율적인 알고리즘 사용 : 요리하는 시간은 같아도 배달하는 시간을 단축 시킨다면 사용자는 더 빨리 음식을 받을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 병렬처리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 비동기 처리 : 실무에서는 가장 많이 쓰는 방법,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 클라우드 리소스 최적화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 인스턴스 유형 선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 자동 확장 (Auto Scaling)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Spot Instance, 유휴 리소스 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 컨테이너화 : Docker, Kubernetes : 자원의 격리와 효율적 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 서버리스 켬퓨팅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 모델 압축 및 공유&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모델 가중치 공유 : 여러 모델 간 가중치 공유&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모델 압축 (Model Compression) : 모델 크기 축소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6) 에너지 효율적인 하드웨어&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 저전력 GPU, TPU 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 에너지 효율적인 데이터 센터 활용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7) 모니터링 + throttling&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 과 보안&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) Prompts&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Prompt leakage : 프롬프트 노출, 유출 ex) 프롬프트에 정치적인건 얘기하지마라, 경쟁사 제품 추천해주지마라 이런 것들이 노출 될 수도 있으니까&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Prompt hijacking (하이제킹) , Prompt Injection&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) Data&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Use RAG&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Monitor &quot;agents&quot; : AI의 권한 주의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 로깅 주의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 세션 데이터 관리 - compliance 주의&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 재 훈련할 때의 데이터 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) API Call Security&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;LLM에서의 보안 대상은?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 보호, 사용자로서의 시스템 보호, 회사 보호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;모댈 개발, 입/출력, 프라이버시, 해커, 의도치 않은 데이터 유출, 접근 허용에 보안적인 주의가 필요 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 보안 가이드라인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 데이터 수집&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 프라이버시 : 수집된 데이터가 데이터 보호규정(GDPR, CCPA등)을 준수하도록 함. 익명화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 유효성 검사 : 데이터 주입 공격을 방지하고 데이터가 악성 콘텐츠가 없도록 하기 위해 입력 데이터를 검증하고 정리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 보안 전송 : 전송 중 데이터를 보호하기 위해 Https, SSL/TLS 등의 보안 프로토콜을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 데이터 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 접근 제어 : 엄격한 접근 제어 및 역할 역할 기반 접근 관리 (RBAC)를 구현하여 권한이 있는 사람만 민감한 데이터에 접근&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 암호화 : 휴지 상태 및 전송 중인 데이터를 암호화하여 무단 접근 및 유출을 방지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 감사 로그 : 무단 활동을 모니터링하고 법의학 분석을 지원하기 위해 데이터 접근 및 수정의 자세한 로그를 유지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 모델 학습&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터 무결성 : 데이터 중독 공격을 방지하여 모델읳 ㅐㅇ동을 조작하지 않도록 학습 데이터의 무결성을 보장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프라이버시 보호 기술 : 학습 데이터의 민감한 정보를 보호하기 위해 차등 프라이버시와 같은 기술을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모델 보안 : 학습 환경을 정기적으로 업데이트하고 패치하여 취약점ㅇ르 방지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4) 프롬프트 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 입력 정리 : 주입 공격을 방지하고 악성 콘텐츠가 포함되지 않도록 프롬프트를 정리하고 검증&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 접근 제한 : 권한이 있는 사용자만 프롬프트 관리 인터페이스 접근할 수 있도록 제한&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모니터링 : 시도된 공격을 나타낼 수 있는 의심스럽거나 비정상적인 활동을 모니터링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5) 모델 배포&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 보안 환경 : 모델을 잠재적 위협으로부터 격리하기 위해 VPC와 같은 보한 환경에 배포&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 컨테이너 보안 : 보안 구성 및 정기 업데이트를 통해 취약점을 완화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- API 보안 : 인증 및 권한 부여 메커니즘, 속도 제한, 입력 유효성 검사로 API 엔드포인트를 보호&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6) 어플리케이션 보안&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 코드 검토 : 정기적인 코드 검토 및 보안 평가를 통해 취약점을 식별하고 완화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 종속성 관리 : 알려진 취약점을 보호하기 위해 도구를 사용하여 Dependency를 스캔하고 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사고 대응 계획 : 보안 침해에 신속히 대응하고 피해를 완화하기 위해 사고 대응 계획을 개발하고 유지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;7) 사용자 인증 및 권한 부여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 강력한 인증 : 사용자 인증 보안을 강화하기 위해 다중 요소 인증(MFA)를 구현&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 세션 관리 : 세션 하이재킹 및 고정을 방지하기 위해 안전한 세션 관리 방법을 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 권한 부여 검사 : 적절한 접근 제어를 보장하기 위해 권한 부여 검사를 정기적으로 검토하고 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8) 모니터링 및 로깅&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 지속적인 모니터링&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 로그 관리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이상 탐지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 각 주제마다 지원하는 파이썬 라이브러리들이 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/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;Evaluation&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한가지 평가로 LLM 모델이 좋은지 아닌지 판단 할 수는 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무엇에 이 모델을 쓸 것인지 시나리오를 고려해야 한다. -&amp;gt; RAI, 보안, UI 등에 영향을 미침&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM의 답변만으로 평가를 하는 것이 아니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;495&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NYB6P/btsMgKc9Kcs/qj49IUkjKgx5yGbQpoA2sk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NYB6P/btsMgKc9Kcs/qj49IUkjKgx5yGbQpoA2sk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NYB6P/btsMgKc9Kcs/qj49IUkjKgx5yGbQpoA2sk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNYB6P%2FbtsMgKc9Kcs%2Fqj49IUkjKgx5yGbQpoA2sk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;840&quot; height=&quot;495&quot; data-origin-width=&quot;840&quot; data-origin-height=&quot;495&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;737&quot; data-origin-height=&quot;308&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MKnGo/btsMh33OQvI/iHCP3BWktILzKZRR1hzzz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MKnGo/btsMh33OQvI/iHCP3BWktILzKZRR1hzzz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MKnGo/btsMh33OQvI/iHCP3BWktILzKZRR1hzzz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMKnGo%2FbtsMh33OQvI%2FiHCP3BWktILzKZRR1hzzz1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;737&quot; height=&quot;308&quot; data-origin-width=&quot;737&quot; data-origin-height=&quot;308&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&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;사용자의 질문 의도를 파악하고 질문을 만들어 내는 것 = rewrite 하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 사용자 - 요즘 돈이 없어서 생활이 너무 힘들고 우울하다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대출 시스템에서 rewirte된 질문은 돈이 없는데 &quot;대출이 가능할까?&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;상담 시스템에서 rewrite된 질문은 생활이 힘들고 우울한데 &quot;생활고를 이길 방법이 있을까?&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당하는 답변을 성공적으로 찾아왔는가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Precision, F1, recall&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;여러 답변 중에서 몇개를 사용 할 것인지? threshold setting&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;파이썬에서 LLM 평가 라이브러리 - RAGAS&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;469&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/W83z3/btsMiYgltNl/Ki4f6LiUjaZWrk4rpd9wa1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/W83z3/btsMiYgltNl/Ki4f6LiUjaZWrk4rpd9wa1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/W83z3/btsMiYgltNl/Ki4f6LiUjaZWrk4rpd9wa1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FW83z3%2FbtsMiYgltNl%2FKi4f6LiUjaZWrk4rpd9wa1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;815&quot; height=&quot;469&quot; data-origin-width=&quot;815&quot; data-origin-height=&quot;469&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;866&quot; data-origin-height=&quot;476&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cK0Kl6/btsMg5BbtoK/XFRbKYa9W3wZXGeZQ4HHq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cK0Kl6/btsMg5BbtoK/XFRbKYa9W3wZXGeZQ4HHq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cK0Kl6/btsMg5BbtoK/XFRbKYa9W3wZXGeZQ4HHq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcK0Kl6%2FbtsMg5BbtoK%2FXFRbKYa9W3wZXGeZQ4HHq1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;866&quot; height=&quot;476&quot; data-origin-width=&quot;866&quot; data-origin-height=&quot;476&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가져온 자료 = RAG에서 찾은 자료&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;833&quot; data-origin-height=&quot;512&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biKpAt/btsMguVQcr0/kixu1Xt2Hbu0tEz1ItgSu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biKpAt/btsMguVQcr0/kixu1Xt2Hbu0tEz1ItgSu1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biKpAt/btsMguVQcr0/kixu1Xt2Hbu0tEz1ItgSu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiKpAt%2FbtsMguVQcr0%2Fkixu1Xt2Hbu0tEz1ItgSu1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;833&quot; height=&quot;512&quot; data-origin-width=&quot;833&quot; data-origin-height=&quot;512&quot;/&gt;&lt;/span&gt;&lt;/figure&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;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자료가 도움이되었는가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자룔르 얼만 ㅏ사용했는가 (쓸데없이 많이 가져왔는가 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자료 중에 정답에 쓰인 부분이 어디에 위치해있는가 (중요성 랭킹)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ann architecture&lt;/p&gt;</description>
      <author>k9e4h</author>
      <guid isPermaLink="true">https://k9e4h.tistory.com/519</guid>
      <comments>https://k9e4h.tistory.com/519#entry519comment</comments>
      <pubDate>Tue, 11 Feb 2025 15:42:22 +0900</pubDate>
    </item>
    <item>
      <title>패스트캠퍼스 AI 개발자의 LLM 마스터 클래스(5)</title>
      <link>https://k9e4h.tistory.com/518</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;----&lt;/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;지금까지 RAG 가 무엇인지 보았고, RAG를 위해 필요한 embedding을 학습했다&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;RAG 아키텍처 타입&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;질문이 들어옴 -&amp;gt; 답변을 열심히 찾아서 정리해서 옴 -&amp;gt; 아나운서에게 이거 보고 답변하라고 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;답변에 필요한 정보를 찾아서&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;정리해서&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 물어볼만한 답변을 밀 ㅣ폴더에 잘 정리해 두기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 사연도 정리해두기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 유툽 댓글도 리서치 해서 잘 정리해두기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - 다시 한 번 추출해서 정리하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RAG 아키텍쳐 샘플&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;384&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/1VZZu/btsL7qdtKeg/sAAnSNpToet0LkclcA1ug0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/1VZZu/btsL7qdtKeg/sAAnSNpToet0LkclcA1ug0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/1VZZu/btsL7qdtKeg/sAAnSNpToet0LkclcA1ug0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F1VZZu%2FbtsL7qdtKeg%2FsAAnSNpToet0LkclcA1ug0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;660&quot; height=&quot;384&quot; data-origin-width=&quot;660&quot; data-origin-height=&quot;384&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;654&quot; data-origin-height=&quot;343&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bElOdx/btsL7v6OCKH/srzR1cjgQhKSqDlDykHjv0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bElOdx/btsL7v6OCKH/srzR1cjgQhKSqDlDykHjv0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bElOdx/btsL7v6OCKH/srzR1cjgQhKSqDlDykHjv0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbElOdx%2FbtsL7v6OCKH%2FsrzR1cjgQhKSqDlDykHjv0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;654&quot; height=&quot;343&quot; data-origin-width=&quot;654&quot; data-origin-height=&quot;343&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;1318&quot; data-origin-height=&quot;763&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H8Mha/btsL7xwO9aT/VL6WnopKMTqFY4MEzyt7k1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H8Mha/btsL7xwO9aT/VL6WnopKMTqFY4MEzyt7k1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H8Mha/btsL7xwO9aT/VL6WnopKMTqFY4MEzyt7k1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH8Mha%2FbtsL7xwO9aT%2FVL6WnopKMTqFY4MEzyt7k1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;1318&quot; height=&quot;763&quot; data-origin-width=&quot;1318&quot; data-origin-height=&quot;763&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존에 가지고있는 데이터를 Json으로 만들어서 Vector DB 형태로도 사용 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Grounding&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(얼마나 사실에 기반하는지)&lt;/span&gt; 하기 위해 많이 사용하는 것이 RAG, FineTuning&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;Fine Tuning 미세 조정&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;401&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sQpR5/btsL8YnEEGJ/VzV0Ek48vDJWGDmDbuWo1K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sQpR5/btsL8YnEEGJ/VzV0Ek48vDJWGDmDbuWo1K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sQpR5/btsL8YnEEGJ/VzV0Ek48vDJWGDmDbuWo1K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsQpR5%2FbtsL8YnEEGJ%2FVzV0Ek48vDJWGDmDbuWo1K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;679&quot; height=&quot;401&quot; data-origin-width=&quot;679&quot; data-origin-height=&quot;401&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;685&quot; data-origin-height=&quot;386&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/KgAzY/btsL7Pebmwk/mtXtY2iR2oqNG2zRjGkopk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/KgAzY/btsL7Pebmwk/mtXtY2iR2oqNG2zRjGkopk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/KgAzY/btsL7Pebmwk/mtXtY2iR2oqNG2zRjGkopk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKgAzY%2FbtsL7Pebmwk%2FmtXtY2iR2oqNG2zRjGkopk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;685&quot; height=&quot;386&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;386&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;684&quot; data-origin-height=&quot;420&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qZbgM/btsL75OAcYP/7sMFlNvpu2vvnnRhBkcBE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qZbgM/btsL75OAcYP/7sMFlNvpu2vvnnRhBkcBE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qZbgM/btsL75OAcYP/7sMFlNvpu2vvnnRhBkcBE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqZbgM%2FbtsL75OAcYP%2F7sMFlNvpu2vvnnRhBkcBE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;684&quot; height=&quot;420&quot; data-origin-width=&quot;684&quot; data-origin-height=&quot;420&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;ex) Oracle 로 하면 잘 되는데 Postgresql로는 안돼요..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) FineTuning을 많이하면 모델의 기본 기능이 저하될 수도 있음&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;gt; RAG 와 파인튜닝은 상호 보완적인 기법이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==&amp;gt; 최신 응답, 최소한의 허위 생성, 적응령을 위해 ㄲㅁㅎfmf tjsxor&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==&amp;gt; 충분한 훈련 데이터가 있는 특정 도메인에서 우수한 정확성을 위해 파인튜닝&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==&amp;gt; 같이 사용하여 하이브리드 모델을 생성&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;ex) 복약지도 - 약의 대한 내용은 자주 바뀌지 않고 질문과 답이 확실한 경우 FineTuning을 사용하고, 특정 환자에게 복약 지도를하는 것은 RAG를 사용한다&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;FineTuning이 많이 쓰이는 분야&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;== 정해지고 반복될 때,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 장르, 혹은 분야&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 의료/과학/보험/자동차/리테일 등 그 분야 내 고유의 언어 혹은 문제 풀이 방식이 있을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정한 일을 수행 할 때 퍼포먼스 올리기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 번역 혹은 특정한 컨텐츠를 생성할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아웃풋 방시이 특수할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 코드 생성, 텍스트의 분위기 설정, 디테일 레벨 설정 등등&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 데이터에 적응 할 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 고객지원, 번역, 텍스트 감정분석, 특정 분야 내의 질답 FAQ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파인튜닝이 별로 일 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 데이터셋이 적을 때&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 원 모델의 훈련 데이터와 내가 쓰고 싶은 시나리고가 아주 다른 경우 파인튜닝으로 극복 안 되는 경우가 많음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 모델을 자주 업데이트 혹은 수정해야함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 더 단순한 방법이 있을 때..&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;649&quot; data-origin-height=&quot;408&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2eCOU/btsL7gXrd5D/BOjEQInMcL79E4pQ6ChpFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2eCOU/btsL7gXrd5D/BOjEQInMcL79E4pQ6ChpFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2eCOU/btsL7gXrd5D/BOjEQInMcL79E4pQ6ChpFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2eCOU%2FbtsL7gXrd5D%2FBOjEQInMcL79E4pQ6ChpFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;649&quot; height=&quot;408&quot; data-origin-width=&quot;649&quot; data-origin-height=&quot;408&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;----&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@adc0612/stateful%EA%B3%BC-stateless-%EC%B0%A8%EC%9D%B4-7tfkp7a4&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@adc0612/stateful%EA%B3%BC-stateless-%EC%B0%A8%EC%9D%B4-7tfkp7a4&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738819774023&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;stateful과 stateless 차이&quot; data-og-description=&quot;클라이언트-서버 관계에서 서버가 클라이언트의 상태를 보존함을 의미한다.클라이언트의 이전 요청이 서버에 잘 전달되었을 때, 클라이언트의 다음 요청이 이전 요청과 관계가 이어지는 것을 &quot; data-og-host=&quot;velog.io&quot; data-og-source-url=&quot;https://velog.io/@adc0612/stateful%EA%B3%BC-stateless-%EC%B0%A8%EC%9D%B4-7tfkp7a4&quot; data-og-url=&quot;https://velog.io/@adc0612/stateful과-stateless-차이-7tfkp7a4&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bDYsvq/hyYb9cD5Vv/7IF0P2PfXd6uqPJiQVb1cK/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500&quot;&gt;&lt;a href=&quot;https://velog.io/@adc0612/stateful%EA%B3%BC-stateless-%EC%B0%A8%EC%9D%B4-7tfkp7a4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://velog.io/@adc0612/stateful%EA%B3%BC-stateless-%EC%B0%A8%EC%9D%B4-7tfkp7a4&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bDYsvq/hyYb9cD5Vv/7IF0P2PfXd6uqPJiQVb1cK/img.png?width=950&amp;amp;height=500&amp;amp;face=0_0_950_500');&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;stateful과 stateless 차이&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;클라이언트-서버 관계에서 서버가 클라이언트의 상태를 보존함을 의미한다.클라이언트의 이전 요청이 서버에 잘 전달되었을 때, 클라이언트의 다음 요청이 이전 요청과 관계가 이어지는 것을&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;velog.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://5equal0.tistory.com/entry/StatefulStateless-Stateful-vs-Stateless-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80-HTTP-%EB%B0%8F-REST&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://5equal0.tistory.com/entry/StatefulStateless-Stateful-vs-Stateless-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80-HTTP-%EB%B0%8F-REST&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738819837081&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;[Stateful/Stateless] Stateful vs. Stateless 서비스와 HTTP 및 REST&quot; data-og-description=&quot;Contents 0. Prologue 1. Stateful Service 2. Stateless Service 3. Why Stateless Service 4. Stateless Service 및 HTTP, 그리고 REST Stateful/Stateless 서비스의 개념을 알아보고, 이를 바탕으로 Stateless 서비스가 최근 각광 받는 이&quot; data-og-host=&quot;5equal0.tistory.com&quot; data-og-source-url=&quot;https://5equal0.tistory.com/entry/StatefulStateless-Stateful-vs-Stateless-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80-HTTP-%EB%B0%8F-REST&quot; data-og-url=&quot;https://5equal0.tistory.com/entry/StatefulStateless-Stateful-vs-Stateless-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80-HTTP-%EB%B0%8F-REST&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bwGSW3/hyYcfxalWj/6PoDXt1akLp3NgQWr6MIt1/img.jpg?width=703&amp;amp;height=250&amp;amp;face=0_0_703_250,https://scrap.kakaocdn.net/dn/nxBlL/hyYcgbMjFy/wKsCUJbVlHNcnwC5tjDZFk/img.jpg?width=703&amp;amp;height=250&amp;amp;face=0_0_703_250,https://scrap.kakaocdn.net/dn/rdoCQ/hyYcdlOPZg/mlVOciEW8RccOftAqMESK0/img.png?width=655&amp;amp;height=562&amp;amp;face=0_0_655_562&quot;&gt;&lt;a href=&quot;https://5equal0.tistory.com/entry/StatefulStateless-Stateful-vs-Stateless-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80-HTTP-%EB%B0%8F-REST&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://5equal0.tistory.com/entry/StatefulStateless-Stateful-vs-Stateless-%EC%84%9C%EB%B9%84%EC%8A%A4%EC%99%80-HTTP-%EB%B0%8F-REST&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bwGSW3/hyYcfxalWj/6PoDXt1akLp3NgQWr6MIt1/img.jpg?width=703&amp;amp;height=250&amp;amp;face=0_0_703_250,https://scrap.kakaocdn.net/dn/nxBlL/hyYcgbMjFy/wKsCUJbVlHNcnwC5tjDZFk/img.jpg?width=703&amp;amp;height=250&amp;amp;face=0_0_703_250,https://scrap.kakaocdn.net/dn/rdoCQ/hyYcdlOPZg/mlVOciEW8RccOftAqMESK0/img.png?width=655&amp;amp;height=562&amp;amp;face=0_0_655_562');&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;[Stateful/Stateless] Stateful vs. Stateless 서비스와 HTTP 및 REST&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contents 0. Prologue 1. Stateful Service 2. Stateless Service 3. Why Stateless Service 4. Stateless Service 및 HTTP, 그리고 REST Stateful/Stateless 서비스의 개념을 알아보고, 이를 바탕으로 Stateless 서비스가 최근 각광 받는 이&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;5equal0.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/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;lt; 시스템에 LLM 을 활용하는 방법 / LLM 활용 법, LLM 비즈니스, LLM 난이도 별 서비스 &amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스가 복잡할 수록&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전문 용어가 많거나, 데이터가 많지 않은 경우 -&amp;gt; RAG를 쉽게 구현 가능한 경우..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실시간이 중요한 경우&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확도가 중요한 경우 ( 메뉴 추천 같은 경우는 정확도 필요 없으니까... )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;multi-turn을 제공해야할 때..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 많을 수록&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 도입에 고려해야할 것이 많아진다. 시간이 소요된다. 복잡해진다.&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;701&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GtI1m/btsL7PFIzD2/reHfVsZ7BIbvrk9CTI7Nb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GtI1m/btsL7PFIzD2/reHfVsZ7BIbvrk9CTI7Nb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GtI1m/btsL7PFIzD2/reHfVsZ7BIbvrk9CTI7Nb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGtI1m%2FbtsL7PFIzD2%2FreHfVsZ7BIbvrk9CTI7Nb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;701&quot; height=&quot;438&quot; data-origin-width=&quot;701&quot; data-origin-height=&quot;438&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;574&quot; data-origin-height=&quot;422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c0pV9i/btsL9sbBM7k/rH7PA09sstgfUxMBcwo9y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c0pV9i/btsL9sbBM7k/rH7PA09sstgfUxMBcwo9y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c0pV9i/btsL9sbBM7k/rH7PA09sstgfUxMBcwo9y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc0pV9i%2FbtsL9sbBM7k%2FrH7PA09sstgfUxMBcwo9y1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;574&quot; height=&quot;422&quot; data-origin-width=&quot;574&quot; data-origin-height=&quot;422&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;453&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0f3jy/btsMaCLqRjl/HfVD4OPfvYumyRfvxrMIK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0f3jy/btsMaCLqRjl/HfVD4OPfvYumyRfvxrMIK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0f3jy/btsMaCLqRjl/HfVD4OPfvYumyRfvxrMIK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0f3jy%2FbtsMaCLqRjl%2FHfVD4OPfvYumyRfvxrMIK0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;608&quot; height=&quot;453&quot; data-origin-width=&quot;608&quot; data-origin-height=&quot;453&quot;/&gt;&lt;/span&gt;&lt;/figure&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;a href=&quot;http://www.ktword.co.kr/test/view/view.php?no=4086&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;http://www.ktword.co.kr/test/view/view.php?no=4086&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738847020985&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;결정론적&quot; data-og-description=&quot;&amp;nbsp; Deterministic, Nondeterministic &amp;nbsp; 결정론적, 비결정론적(2023-05-30)결정론적 모델 비결정론적 모델 비교, Deterministic Model, 결정론적 모델, 결정적 모형, Deterministic, 결정 신호, 확정 신호, Statistical Mode, 통&quot; data-og-host=&quot;www.ktword.co.kr&quot; data-og-source-url=&quot;http://www.ktword.co.kr/test/view/view.php?no=4086&quot; data-og-url=&quot;http://www.ktword.co.kr/test/view/view.php?no=4086&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;http://www.ktword.co.kr/test/view/view.php?no=4086&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;http://www.ktword.co.kr/test/view/view.php?no=4086&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;결정론적&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; Deterministic, Nondeterministic &amp;nbsp; 결정론적, 비결정론적(2023-05-30)결정론적 모델 비결정론적 모델 비교, Deterministic Model, 결정론적 모델, 결정적 모형, Deterministic, 결정 신호, 확정 신호, Statistical Mode, 통&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.ktword.co.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/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;언어모델은 동일한 질문도 다양하게 질문할 수 있기 때문에, TC가 다양하여 답변의 질을 확실하게 테스트 할 수가 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RAG가 있다던지하면 Data retrieval 스텝별로 테스트도 필요하다, 디자인할 때부터 데이터 소스가 여러 곳이라면 Unit Test 방법을 고안하는 것이 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;lt; LLM 디자인의 기본 &amp;gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. LLM 사용 최소화&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 최대한 LLM 사용을 줄이고, 가능한 경우 결정론적 프로그래밍 언어 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 비용 절감 : LLM은 계산 비용이 많이 드는 반면, 결정론적 언어는 효율적&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 속도 향상 : LLM 추론 속도는 느릴 수 있지만, 결정론적 언어는 빠르게 실행&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 테스트 용이성&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 유지 보수 용이성 : 결정론적 코드는 이해하고 유지 관리하기 쉬움&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 처음부터 확장성 및 안정성 고려&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 시스템 설계 단계부터 확장성과 안정성을 고려해야 함 / 안정적인 API 디자인!!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 느린 속도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 높은 비용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 예측 불가능한 결과&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 상용 서비스 제공 시 중&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 응답 품질 확실한 테스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 특히 민감한 분야 ( 의료, 정부, 볍률, 금융 ) 시스템 응답 품질 엄격하게 테스트 해야함&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 이유 : 부정확한 정보, 편향된 겨로가, 비윤리적 결과, 법적 책임&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. RAI, 데이터 개인 정보 보호, 보안 고려&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 책임 있는 AI(RAI), 데이터 개인 정보 보호, 보안은 LLM 시스템 설계 필수 요소&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 윤리적 문제 : 편향 ,차별, 악용 등 윤리적 문제 발생 가능성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 개인 정보 침해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 시스템 해킹 : 보안 취약점 악용시 시스템 손상 및 데이터 유출 가능성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 운용 비용 고려&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 파인 튜닝, RAG 시스템 등등&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;6. LLM 디자인 간소화하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) 싱글턴 vs 멀티턴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 작업 유형 vs 데이터 양 vs 사용자 경험 을 고려하여 정하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) 데이터 소스 숫자 줄이기 ( 데이터 출처 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3) 사용자 세선 서포트 최소화 하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 모델을 사용할 수 있을까 고민하기 전에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 데이터가 있는지 데이터 서빙부터 시작하자.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어떤 모델이 좋은지 평가하는 기준 evaluation metric , 그러나 이 메트릭도 계속 변경 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>기타내용</category>
      <author>k9e4h</author>
      <guid isPermaLink="true">https://k9e4h.tistory.com/518</guid>
      <comments>https://k9e4h.tistory.com/518#entry518comment</comments>
      <pubDate>Tue, 4 Feb 2025 18:46:23 +0900</pubDate>
    </item>
    <item>
      <title>패스트캠퍼스 AI 개발자의 LLM 마스터 클래스(4)</title>
      <link>https://k9e4h.tistory.com/517</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;embedding을 만든다 = 단어나 문장을 숫자 배열/리스트로 만든다&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;1362&quot; data-origin-height=&quot;692&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cnkmWT/btsL4Ok5Kfh/FUW7dbsTy4bdxsTiH56kiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cnkmWT/btsL4Ok5Kfh/FUW7dbsTy4bdxsTiH56kiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cnkmWT/btsL4Ok5Kfh/FUW7dbsTy4bdxsTiH56kiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcnkmWT%2FbtsL4Ok5Kfh%2FFUW7dbsTy4bdxsTiH56kiK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;1362&quot; height=&quot;692&quot; data-origin-width=&quot;1362&quot; data-origin-height=&quot;692&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;vector에서 검색하는 것은 기존 RDB의 PK 를 찾는 것이 아니라 vector 주변 값을 찾는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;키&quot;, &quot;찾는 방법&quot;을 임베딩으로 지정 -&amp;gt; Vector DB&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vector를 Key로 가진다&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;문서를 조각화하여 그 조각에서 키워드 또는 핵심 문장을 찾아 embedding 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 질문은 이런거이고, 유투브에서 데이터를 가져왔어. 이걸 가지고 답변을 해줘.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 내부 로직들은 API에서 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;--&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vector DB 종류&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- pinecone, weaviate, QDrant, Milvus, Chroma 등의 전용 벡터 데이터베이스&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- pinecone은 서비스로서의 소프트웨어로 성공적인 사례&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- weaviate, QDrant, Milvus는 클라우드 서비스와 함께 오픈 소스로 쉽게 배포 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Chroma는 SQLite와 유사해 작은 프로젝트에 적합&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- FAISS (파이스)&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;기존에 있는 DB에 embedding으로 검색하고 싶은 경우 벡터인덱스 지원하는 제품을 사용할 수도 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AMZ : Elasticsearch, Redis, Postgres 등이 벡터 인덱스 지원&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MS : Cognitive 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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1374&quot; data-origin-height=&quot;736&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/odGsK/btsL3iVrmaM/kioG8LZiX1RZOqIQWx6Qak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/odGsK/btsL3iVrmaM/kioG8LZiX1RZOqIQWx6Qak/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/odGsK/btsL3iVrmaM/kioG8LZiX1RZOqIQWx6Qak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FodGsK%2FbtsL3iVrmaM%2FkioG8LZiX1RZOqIQWx6Qak%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;1374&quot; height=&quot;736&quot; data-origin-width=&quot;1374&quot; data-origin-height=&quot;736&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Pre-processing&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문서를 로딩해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Chunkig - 조각화하여&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;임베딩 계산 후 Vector index에 저장&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;Runtime&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 질문에서 임베딩 계산하여 벡터DB에 가서 유사도를 검색한다.&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;Meta Prompt -&amp;gt; 사용자 질문을 감싸는 프롬프트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자 질문 : 만두나 김밥 먹을까?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Meta Prompt : 사용자가 원하는 품목 [만두] 종류 몇 개 예를 들면서 어떻게 맛있게 먹을 수 있는지 추천해줘&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- vector db에서 만두와 유사한 상품과 예를 들어 상품정보등을 같이 프롬프트로 전달해줌&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;응답 : 오늘은 매콤한 사천 군만두 어떠세요? 김치 물만두는 오늘 세일이네요!&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Rangking , cutoff&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색의 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;불필요한 내용이 검색될 수도 있고 검색 내용이 너무 많을 수도 있음 -&amp;gt; 토큰 수 늘어남, 결과 부정확함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 유용한 몇 개만 가지고와서 프롬프트 템플릿을 만들고 LLM에 보내기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 원하는 음식은 [만두 김치만두 김밥 떡볶이 엽기떡볶이 탕수육 ...] 이다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vs&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 원하는 음식은 [만두 김밥]이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;벡터를 찾기 쉽게하기 위해서는 모여있어야 함&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;824&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3BE1m/btsL30zU7Mg/S3fTaaKzHKKmPgebjgRRf1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3BE1m/btsL30zU7Mg/S3fTaaKzHKKmPgebjgRRf1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3BE1m/btsL30zU7Mg/S3fTaaKzHKKmPgebjgRRf1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3BE1m%2FbtsL30zU7Mg%2FS3fTaaKzHKKmPgebjgRRf1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;1302&quot; height=&quot;824&quot; data-origin-width=&quot;1302&quot; data-origin-height=&quot;824&quot;/&gt;&lt;/span&gt;&lt;/figure&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;u&gt;흐름에 맞게&lt;/u&gt; 정해진 사이즈만큼 문장을 나눠야 함.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 문장이 중간에 끊겨도 내용이 연결될 수 있게 청크가 조금씩 겹치게 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;처리하는 문서가 늘 비슷한 포맷이라면 커스텀 청킹이 가능하지만 다른 포맷의 문서에는 적용하기가 어렵다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;청킹을 문장별로? 줄 수 대로? 페이지별로? 문단별로?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;고정 크기 청킹 (보통 1024 토큰)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 구현 간단, 예측 가능&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;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;동적 크기 청킹/semantic ( 데이터의 내용에 따라 블록의 크기가 달라지는 방법)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 유연하고 효율성 증가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;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;정확도 vs 속도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작은 임베딩 : 정확한 임베딩, 그러나 처리하는데 훨씬 오래 걸림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 한문장씩 임베딩 가능 그러나 찾을 때도 문장 하나하나 찾아야하기 때문에 속도가 오래 걸림&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;큰 임베딩 : 빠르지만 정확도가 낮음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vector 인덱싱, 찾기 툴 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히나 소설 같은 경우에는 컨텍스트 없이 이해하기 어려움.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비슷비슷한 유사도일때는 어떤 것을 선택해야할 것인가?&lt;/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;LlamaIndex (라마인덱스)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;PDF, DB, API 에서 데이터를 받아서 청킹, 인덱스를 만들어 줌&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;Langchain tools - text splitters&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; 문장, 문단, HTML, code, markdown 등을 split 할 수 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt; userDefined ( custom character )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후처리 Post-processing&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Relevance&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. moderation 내용 검열 ( 사용자 쿼리에도 적용)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- oepn api 에서 API 제공 ( moderations )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 사용자 쿼리에서도 사용 가능 (pre-processing)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;RAI(윤리적 AI)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. groundedness 사실기반&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. correctness&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;6. cosine similarity&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Moderation API - 이상한 질문은 미리미리 차단하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;프롬프트에 제약사항을 모두 prompt에 넣기 전에 request 넣기 전에 질문을 검열하여 prompt의 토큰을 가볍게 만들자.&lt;/p&gt;
&lt;pre id=&quot;code_1738662400806&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;def get_moderation_results(text):
  response = client.moderations.create(input=text)
  output = response.results[0].to_dict()
  flagged = output[&quot;flagged&quot;]
  rules_contravenced = []
  for key, value in output[&quot;categories&quot;].items():
    if value == True:
      rules_contravenced.append(key)&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;a href=&quot;https://platform.openai.com/docs/guides/moderation&quot;&gt;https://platform.openai.com/docs/guides/moderation&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Azure의 Moderation API 에서는 policy 도 존재&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Gcp에서는 sapty_ratings로 제공&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;groundedness&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;얼마나 사실에 기반했는지&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Ragas (라가스) - python 라이브러리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.ragas.io/en/stable/concepts/metrics/available_metrics/&quot;&gt;https://docs.ragas.io/en/stable/concepts/metrics/available_metrics/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Faithfulness 사실인가?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Answer relevancy : 질문과의 관련성&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Context precision : 가져온 정보의 signal to noise - 랭킹&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- context recall : 가져온 정보로 충분한가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 외&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Context relevancy : 필요한 정보만 있는가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- context entities recall : 가져온 정보중 몇 개를 썼는가&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Answer semantic similarity : 답변과 ground truth 유사도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; metric 다양하게 넣고 테스트해보기&lt;/p&gt;
&lt;pre id=&quot;code_1738662400807&quot; style=&quot;background-color: #f8f8f8; color: #383a42;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;python&quot;&gt;&lt;code&gt;dataset.append(
        {
            &quot;user_input&quot;:query,
            &quot;retrieved_contexts&quot;:relevant_docs,
            &quot;response&quot;:response,
            &quot;reference&quot;:reference
        }
    )&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;</description>
      <category>기타내용</category>
      <author>k9e4h</author>
      <guid isPermaLink="true">https://k9e4h.tistory.com/517</guid>
      <comments>https://k9e4h.tistory.com/517#entry517comment</comments>
      <pubDate>Sat, 1 Feb 2025 18:04:20 +0900</pubDate>
    </item>
    <item>
      <title>패스트캠퍼스 AI 개발자의 LLM 마스터 클래스(3)</title>
      <link>https://k9e4h.tistory.com/516</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 서비스 개발 실습&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색 라이브러리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;langchain-community, duckduckgo-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;RAG - Retrieval-Augmented&amp;nbsp;Generation&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조회해서 생성하는 것, RAG 를 한다는 것은 아나운서가 스크립트 관련된 내용을 쪽지  만들어 놓는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;RAG를 만드는 것은 쪽지 내용을 어떤식으로 채울지 하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유튜브 조회, 요약 라이브러리&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;youtube_search, youbutetranslate-api, pytube&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;faiss-cpu ( 검색내용을 embedding 위한 라이브러리 - 책에 도서번호를 부여하고 카테고리화하는 것 )&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;gt; chat GPT는 제약이 많았지만 langchain 은 그런 제약을 많이 해결해주었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==&amp;gt; langchain이 너무 많이 변경되는 중이라 소스코드가 정상동작하지 않을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==&amp;gt; RAG 에 활용하기 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==&amp;gt; langchain을 사용하지않고 in-house에서 개발하는 경우도 많다. 하지만 빠르게 개발하려면 langchain이 편하긴하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;----&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Function Calling&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;받는 것과 주는 것의 규격이 정확하게 맞춰져있어서 자동화 할 수 있음 ex 공장의 순서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM을 사용하기 위해서 output을 규격화하는 것이 중요하다. - Deterministic / Non-Deterministic&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;2490&quot; data-origin-height=&quot;1036&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2uD18/btsL3ZgwGJm/P5jLITBSY2eZXJiWEobBb0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2uD18/btsL3ZgwGJm/P5jLITBSY2eZXJiWEobBb0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2uD18/btsL3ZgwGJm/P5jLITBSY2eZXJiWEobBb0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2uD18%2FbtsL3ZgwGJm%2FP5jLITBSY2eZXJiWEobBb0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;2490&quot; height=&quot;1036&quot; data-origin-width=&quot;2490&quot; data-origin-height=&quot;1036&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;1636&quot; data-origin-height=&quot;772&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/boyHjr/btsL351ZZzT/WBRZXa17HCPQSL6xhvVLKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/boyHjr/btsL351ZZzT/WBRZXa17HCPQSL6xhvVLKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/boyHjr/btsL351ZZzT/WBRZXa17HCPQSL6xhvVLKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FboyHjr%2FbtsL351ZZzT%2FWBRZXa17HCPQSL6xhvVLKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;1636&quot; height=&quot;772&quot; data-origin-width=&quot;1636&quot; data-origin-height=&quot;772&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;질의할 때마다 응답이 달라짐.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2338&quot; data-origin-height=&quot;1390&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ciQUMJ/btsL2JlnX1q/sux8suQfcbWkqfAE46R7c0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ciQUMJ/btsL2JlnX1q/sux8suQfcbWkqfAE46R7c0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ciQUMJ/btsL2JlnX1q/sux8suQfcbWkqfAE46R7c0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FciQUMJ%2FbtsL2JlnX1q%2Fsux8suQfcbWkqfAE46R7c0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;2338&quot; height=&quot;1390&quot; data-origin-width=&quot;2338&quot; data-origin-height=&quot;1390&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 문제를 해결하기 위해서 Output 의 스키마를 사전 정의하여 전달&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;1462&quot; data-origin-height=&quot;752&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cxitQU/btsL4RPvsjm/QdJZEnL7Hell2fhyUkC0Dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cxitQU/btsL4RPvsjm/QdJZEnL7Hell2fhyUkC0Dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cxitQU/btsL4RPvsjm/QdJZEnL7Hell2fhyUkC0Dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcxitQU%2FbtsL4RPvsjm%2FQdJZEnL7Hell2fhyUkC0Dk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;1462&quot; height=&quot;752&quot; data-origin-width=&quot;1462&quot; data-origin-height=&quot;752&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;functions = 어떤 기능을 원하는지 설명 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;function_call 을 사용하면 최소한 원하는 규격의 응답이 왔는지를 확인 할 수 있음 ( 올바른 응답인지는 알 수 없음 (&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; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;사용자 질문을 받으면&amp;nbsp;&lt;/span&gt;function_call을 이용하여 사용자의 내용을 추출하여 gpt 호출 후 답변을 받는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;답변과 duckduckgo를 이용하여 검색한다.&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;실제로 사용하고싶은 기능과 LLM을 합치기 위해서 function calling을 많이 사용 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM이 생각하는대로 대답하는 것이 아니라 검색등 정확한 데이터를 넘기기 위해. ex) 런던 날씨가 어떄?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹은 원하는 output으로 가공하기 위해서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;response_format을 이용하여 json 형식으로 받을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-----&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM으로 서비스를 만든다는 것은?&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1438&quot; data-origin-height=&quot;964&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bDtvXx/btsL3QRAU9x/C6EVXcNM5TDMpK6q8tXna1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bDtvXx/btsL3QRAU9x/C6EVXcNM5TDMpK6q8tXna1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bDtvXx/btsL3QRAU9x/C6EVXcNM5TDMpK6q8tXna1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbDtvXx%2FbtsL3QRAU9x%2FC6EVXcNM5TDMpK6q8tXna1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;1438&quot; height=&quot;964&quot; data-origin-width=&quot;1438&quot; data-origin-height=&quot;964&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 데이터 보안을 고려할 때는 데이터가 파일로 있는지, DB에 있는지 다른 곳에서 가져와야하는것인지 등을 고려해야 함&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1588&quot; data-origin-height=&quot;886&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2jfKe/btsL2H8XY7m/KBEsHDxZcrofoslXK3DHKK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2jfKe/btsL2H8XY7m/KBEsHDxZcrofoslXK3DHKK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2jfKe/btsL2H8XY7m/KBEsHDxZcrofoslXK3DHKK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2jfKe%2FbtsL2H8XY7m%2FKBEsHDxZcrofoslXK3DHKK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;1588&quot; height=&quot;886&quot; data-origin-width=&quot;1588&quot; data-origin-height=&quot;886&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;grounding information = prompt를 만들기 위해 답변을 합치는 역할&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;검색할 때 Vector DB, embedding 개념 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM의 답변을 답변을 바로 사용자 응답으로 보내는 것이 아니라 응답을 확인하는 단계를 거쳐야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;---&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어 모델의 특성&lt;/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;환각( hallucination )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ChatGPT는 잘못된 정보도 올바른 정보라고 착각할 수 있다. = hallucination 할루시네이션&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그렇기때문에 오픈북으로 정보를 찾을 수 있도록한다 = RAG 알에이지, 래그 , retreival-argumented generation = 검색 증강 생성&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;RAG = 컨닝페이퍼 줄테니까 그거 보고 읽어, 모르는거 아는척하지말고! = langchain을 이용해서 컨닝페이퍼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;langchain의 예시 = 유투브, 웹 검색&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;Grounding 이란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 땅에 붙어 있는 것, 기초 교육&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) LLM은 hallucination(환각)이 많기 때문에 grounding 해야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;grounding 할 수 있는 방법으로 RAG를 많이 사용&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;LLM에 질문하는 방식에 따라서 답변의 수준이 달라지니까 prompt engineering을 통해 LLM을 잘 활용해보자,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 질문을 잘해도 LLM이 모르는 정보는 제대로된 답변을 얻을 수 없음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서, 질문+ 쪽지를 LLM에 전달하자&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;RAG의 패턴&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;910&quot; data-origin-height=&quot;560&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bdOPHu/btsL4nn1uva/371WjaV5vk3sFU38HHzRYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bdOPHu/btsL4nn1uva/371WjaV5vk3sFU38HHzRYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bdOPHu/btsL4nn1uva/371WjaV5vk3sFU38HHzRYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbdOPHu%2FbtsL4nn1uva%2F371WjaV5vk3sFU38HHzRYK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;910&quot; height=&quot;560&quot; data-origin-width=&quot;910&quot; data-origin-height=&quot;560&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;RAG 버전 1. 가장 간단한 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- &lt;u&gt;프롬프트에 데이터 포함&lt;/u&gt;, API Call로 데이터 가져오기&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;896&quot; data-origin-height=&quot;546&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IJY50/btsL5j50fNm/C2KgS9N5EPnV7BpAv0lhj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IJY50/btsL5j50fNm/C2KgS9N5EPnV7BpAv0lhj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IJY50/btsL5j50fNm/C2KgS9N5EPnV7BpAv0lhj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIJY50%2FbtsL5j50fNm%2FC2KgS9N5EPnV7BpAv0lhj0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;896&quot; height=&quot;546&quot; data-origin-width=&quot;896&quot; data-origin-height=&quot;546&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;RAG 버전 2.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;미리 저장되어있는 데이터를 가져와서 프롬프트를 만듬 -&amp;gt; embedding&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM 모델을 몇 번 쓸 수도 있음&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 정중한 이메일을 써야할 때, 미리 저장되어잇는 데이터 중에서 &quot;정중한 이메일&quot; 이라는 라벨링이 되어있는 데이터를 소량(fewshot) 찾아서 함께 담는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) 이메일 카탈로그, 뉴스레터등의 종류를 분류해서 예시로 사용&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;766&quot; data-origin-height=&quot;494&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blFkvi/btsL4zV4Tmc/NbPgsfrsS7gS7pqWwf055k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blFkvi/btsL4zV4Tmc/NbPgsfrsS7gS7pqWwf055k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blFkvi/btsL4zV4Tmc/NbPgsfrsS7gS7pqWwf055k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FblFkvi%2FbtsL4zV4Tmc%2FNbPgsfrsS7gS7pqWwf055k%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;766&quot; height=&quot;494&quot; data-origin-width=&quot;766&quot; data-origin-height=&quot;494&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;RAG 버전3.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Embedding 데이터가 많아질 경우 Vector DB를 사용&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 질문하기 전 부터 데이터를 사전 정의&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;528&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d1LJMM/btsL4pFZIVa/x3rxWkJasMsDJdx5fzwCRK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d1LJMM/btsL4pFZIVa/x3rxWkJasMsDJdx5fzwCRK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d1LJMM/btsL4pFZIVa/x3rxWkJasMsDJdx5fzwCRK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd1LJMM%2FbtsL4pFZIVa%2Fx3rxWkJasMsDJdx5fzwCRK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;834&quot; height=&quot;528&quot; data-origin-width=&quot;834&quot; data-origin-height=&quot;528&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;RAG 버전 4.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM의 Fine turning(미세조정)을 통해&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LLM에게 답변의 예시를 미리 학습 시킴. RAG 이전 버전들과 다른 점은 LLM 호출 시 데이터를 함께 전달하는 것보다는 LLM 응답 이전에 학습을 시켜두는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;------&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AI에서 Embedding이란?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터, 특히 단어나 문장과 같은 텍스트 데이터를 벡터의 형태로 표현하는 과정을 의미합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 벡터는 원래의 텍스트 데이터보다 낮은 차원을 가지며, 기계 학습 모델이 이해할 수 잇는 형태로 변환됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 벡터를 '임베딩 벡터'라고 하며, 이는 데이터의 의미적, 문맥적 특성을 수치화한 것입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;==&amp;gt; 위치 표현&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;564&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sbeKf/btsL3oVk3T6/eFIYggJAZ789bTkwwU7QE1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sbeKf/btsL3oVk3T6/eFIYggJAZ789bTkwwU7QE1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sbeKf/btsL3oVk3T6/eFIYggJAZ789bTkwwU7QE1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsbeKf%2FbtsL3oVk3T6%2FeFIYggJAZ789bTkwwU7QE1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;494&quot; height=&quot;564&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;564&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;886&quot; data-origin-height=&quot;552&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/8hj54/btsL4dsaCOI/o2fNT1u6XiCG7feZKNV89K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/8hj54/btsL4dsaCOI/o2fNT1u6XiCG7feZKNV89K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/8hj54/btsL4dsaCOI/o2fNT1u6XiCG7feZKNV89K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F8hj54%2FbtsL4dsaCOI%2Fo2fNT1u6XiCG7feZKNV89K%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.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;886&quot; height=&quot;552&quot; data-origin-width=&quot;886&quot; data-origin-height=&quot;552&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;cosine similarity 유사도 = 비슷하면 1, 비슷하지 않으면 -1 에 가까움 ( 0.8 이하면 비슷하지 않다고 보면 될 듯)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어, 단어, 문장 뭉치를 줬을 때 유사도를 확인하는 것&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 것을 바탕으로 정확한 단어가 아니더라도 비슷한 단어를 유추할 수 있게 됨&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 문장의 유사도도 검색 가능&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;Semantic search (&amp;lt;-&amp;gt; &lt;span style=&quot;background-color: #ffffff; color: #262626; text-align: start;&quot;&gt;Retrieval&lt;/span&gt; search)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;의미적 표현을 사용하여 색인화 하는것을 포함하는 검색 방법.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정확한 문자열이 아닌 &quot;의미&quot;를 찾기&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;ex) A마트의 상품 주소와 B마트의 상품 주소는 다른 것 처럼.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;text-embedding-ada-002&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;언어 모델에 따라 주로 사용하는 임베딩 모델이 있음.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://platform.openai.com/docs/guides/embeddings&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://platform.openai.com/docs/guides/embeddings&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&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;Output from AI LLMs is Non-Deterministic&lt;/p&gt;</description>
      <category>기타내용</category>
      <author>k9e4h</author>
      <guid isPermaLink="true">https://k9e4h.tistory.com/516</guid>
      <comments>https://k9e4h.tistory.com/516#entry516comment</comments>
      <pubDate>Fri, 31 Jan 2025 23:50:25 +0900</pubDate>
    </item>
  </channel>
</rss>