<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Baro's B</title>
    <link>https://rokforest.tistory.com/</link>
    <description>나 의 그 냥 메 모 장</description>
    <language>ko</language>
    <pubDate>Fri, 7 Aug 2026 22:34:15 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>Baro_forest</managingEditor>
    <image>
      <title>Baro's B</title>
      <url>https://tistory1.daumcdn.net/tistory/5457815/attach/b84a75117856418ab1fa259f7ff71a46</url>
      <link>https://rokforest.tistory.com</link>
    </image>
    <item>
      <title>세일즈포스 월드투어 후기</title>
      <link>https://rokforest.tistory.com/333</link>
      <description>&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;고객사의 SR을 쳐내고 ,, 지금은&amp;nbsp; 조금 여유가 있어서 회사에서 세일즈포스 월드투어가 있는걸 홍보 했는데 선정되서&amp;nbsp; 다녀왔다 !&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-06-21 오후 9.50.29.png&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;1300&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Lrjyi/btsH9JtX7wT/MfECeB67LeR6gCwbsKTEm0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Lrjyi/btsH9JtX7wT/MfECeB67LeR6gCwbsKTEm0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Lrjyi/btsH9JtX7wT/MfECeB67LeR6gCwbsKTEm0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLrjyi%2FbtsH9JtX7wT%2FMfECeB67LeR6gCwbsKTEm0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;473&quot; height=&quot;510&quot; data-filename=&quot;스크린샷 2024-06-21 오후 9.50.29.png&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;1300&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;3024&quot; data-origin-height=&quot;2470&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qiEki/btsH7DoXiZc/HMYsG4QUoVkMwC9uI3kOH0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qiEki/btsH7DoXiZc/HMYsG4QUoVkMwC9uI3kOH0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qiEki/btsH7DoXiZc/HMYsG4QUoVkMwC9uI3kOH0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqiEki%2FbtsH7DoXiZc%2FHMYsG4QUoVkMwC9uI3kOH0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;515&quot; height=&quot;421&quot; data-origin-width=&quot;3024&quot; data-origin-height=&quot;2470&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;&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-06-21 오후 9.56.51.png&quot; data-origin-width=&quot;1696&quot; data-origin-height=&quot;968&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bb3j7L/btsH9H31P9O/UrNIMSn9Sb4Hh56kmkw9s1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bb3j7L/btsH9H31P9O/UrNIMSn9Sb4Hh56kmkw9s1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bb3j7L/btsH9H31P9O/UrNIMSn9Sb4Hh56kmkw9s1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbb3j7L%2FbtsH9H31P9O%2FUrNIMSn9Sb4Hh56kmkw9s1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;589&quot; height=&quot;336&quot; data-filename=&quot;스크린샷 2024-06-21 오후 9.56.51.png&quot; data-origin-width=&quot;1696&quot; data-origin-height=&quot;968&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;이번 소개에서는 주로 AI 에 대한 이야기를 많이 했어서 앞으로의 비전에 대해서 생각을 하게 됐다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-06-21 오후 10.04.47.png&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;422&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNNslN/btsH9d3plb3/W8ki8na4DseCPmFZmEqPtk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNNslN/btsH9d3plb3/W8ki8na4DseCPmFZmEqPtk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNNslN/btsH9d3plb3/W8ki8na4DseCPmFZmEqPtk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNNslN%2FbtsH9d3plb3%2FW8ki8na4DseCPmFZmEqPtk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;567&quot; height=&quot;307&quot; data-filename=&quot;스크린샷 2024-06-21 오후 10.04.47.png&quot; data-origin-width=&quot;780&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;&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-filename=&quot;스크린샷 2024-06-21 오후 10.05.16.png&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;1290&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eCAeqC/btsH9oXW9nn/2FHs2L8boYKhifpKcm4Rb1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eCAeqC/btsH9oXW9nn/2FHs2L8boYKhifpKcm4Rb1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eCAeqC/btsH9oXW9nn/2FHs2L8boYKhifpKcm4Rb1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeCAeqC%2FbtsH9oXW9nn%2F2FHs2L8boYKhifpKcm4Rb1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;535&quot; height=&quot;726&quot; data-filename=&quot;스크린샷 2024-06-21 오후 10.05.16.png&quot; data-origin-width=&quot;950&quot; data-origin-height=&quot;1290&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;&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>Saelsforcee</category>
      <author>Baro_forest</author>
      <guid isPermaLink="true">https://rokforest.tistory.com/333</guid>
      <comments>https://rokforest.tistory.com/333#entry333comment</comments>
      <pubDate>Fri, 21 Jun 2024 22:09:30 +0900</pubDate>
    </item>
    <item>
      <title>Salesforce Standard label 변경</title>
      <link>https://rokforest.tistory.com/309</link>
      <description>&lt;p id=&quot;ChangeaFieldLabel-ChangeaStandardSalesforcefield&quot; style=&quot;background-color: #ffffff; color: #1eaeb4; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #3d3935;&quot;&gt;표준 Salesforce 필드 변경하기&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;color: #3d3935;&quot;&gt;설정(Setup)&amp;nbsp; &amp;gt; 홈 &amp;gt; 사용자 인터페이스 &amp;gt; 탭 및 레이블 이름 변경으로 들어간다&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;255&quot; data-origin-height=&quot;187&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kL1ur/btsBohklZhp/ZdQp8l0kVYRM7c5Kk9LpdK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kL1ur/btsBohklZhp/ZdQp8l0kVYRM7c5Kk9LpdK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kL1ur/btsBohklZhp/ZdQp8l0kVYRM7c5Kk9LpdK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkL1ur%2FbtsBohklZhp%2FZdQp8l0kVYRM7c5Kk9LpdK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;255&quot; height=&quot;187&quot; data-origin-width=&quot;255&quot; data-origin-height=&quot;187&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;언어를 선택&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;447&quot; data-origin-height=&quot;436&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MXB2a/btsBl73ksVw/tM97I4tiO9DdO3K8730odK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MXB2a/btsBl73ksVw/tM97I4tiO9DdO3K8730odK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MXB2a/btsBl73ksVw/tM97I4tiO9DdO3K8730odK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMXB2a%2FbtsBl73ksVw%2FtM97I4tiO9DdO3K8730odK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;447&quot; height=&quot;436&quot; data-origin-width=&quot;447&quot; data-origin-height=&quot;436&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;204&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Dm0X0/btsBmS6aHva/I39zLWAPlUm7A1AyVLe9Ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Dm0X0/btsBmS6aHva/I39zLWAPlUm7A1AyVLe9Ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Dm0X0/btsBmS6aHva/I39zLWAPlUm7A1AyVLe9Ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDm0X0%2FbtsBmS6aHva%2FI39zLWAPlUm7A1AyVLe9Ok%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;572&quot; height=&quot;204&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;204&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;360&quot; data-origin-height=&quot;57&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bl4lg0/btsBjR03lsO/03PaNr7hpEtCAjSDCG1g30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bl4lg0/btsBjR03lsO/03PaNr7hpEtCAjSDCG1g30/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bl4lg0/btsBjR03lsO/03PaNr7hpEtCAjSDCG1g30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbl4lg0%2FbtsBjR03lsO%2F03PaNr7hpEtCAjSDCG1g30%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;360&quot; height=&quot;57&quot; data-origin-width=&quot;360&quot; data-origin-height=&quot;57&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;변경할 필드의 이름을 변경 후 저장을 해주면&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Standard 필드를 변경 할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&amp;nbsp;** 주의사항&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Standard 필드 중에 조회관계에 해당하는 필드는 해당 오브젝트에서 나오지 않는다.&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;견적(Quote) 에해당하는 AccountID(조회)필드를 변경하려고 했는데 ,, 해당필드는 나오지 않아서&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. 위 방법처럼 탭 및 레이블 이름 변경 에서 거래처(Accounts)오브젝트에서 AccountName 을 변경하기.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(AccountName 을 변경하게 된다면 Org에 모든 AccountName의 라벨이 변경되니 주의)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Quote에 Fomula필드를 추가해 값을 그대로 가져오는 방법을 사용 할 수도 있다.&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;</description>
      <category>Saelsforcee</category>
      <author>Baro_forest</author>
      <guid isPermaLink="true">https://rokforest.tistory.com/309</guid>
      <comments>https://rokforest.tistory.com/309#entry309comment</comments>
      <pubDate>Mon, 4 Dec 2023 14:24:38 +0900</pubDate>
    </item>
    <item>
      <title>Apex Lead Batch + Schedulable</title>
      <link>https://rokforest.tistory.com/295</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Batch 에 Schedule 를 추가 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Schedulable 인터페이스를 추가하고 ,&amp;nbsp; batch class 를 호출할 수있게 excute를 추가 함.&lt;/p&gt;
&lt;pre id=&quot;code_1701174845268&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;global class LeadStatusBatch implements Database.Batchable&amp;lt;sObject&amp;gt;, Database.stateful, Schedulable {
    // 추가한부분  
    global void execute(SchedulableContext sc){
        System.debug('☆★☆★☆★☆★☆★ execute');
        LeadStatusBatch b = new LeadStatusBatch(); 
        Database.executeBatch(b,200);
    }
    

    global Database.QueryLocator start(Database.BatchableContext BC) {
        System.debug(':::: Batch Start::::');

        String query = 'SELECT ';
               query += 'Id, ';
               query += 'Status, ';
               query += 'CreatedDate ';
               query += 'FROM Lead ';
               query += 'WHERE (Status = \'신규\' OR Status = \'수요검색 \') ';
               query += 'AND CreatedDate &amp;lt; LAST_N_DAYS: 90';
              
               System.debug(query);

        return Database.getQueryLocator(query);
    }

    
    global void execute(Database.BatchableContext bc, List&amp;lt;Lead&amp;gt; scope) {
        System.debug(':::: Batch execute ::::');
        System.debug('scope is' + scope );
        List&amp;lt;Lead&amp;gt; leadList = new List&amp;lt;Lead&amp;gt;();
        try {
            if(scope.size() &amp;gt; 0){
                for(Lead  ld : scope){
                    ld.Status = '수요없음';
                    leadList.add(ld);
                }
            update leadList;
            }
        } catch (Exception e)  {
            System.debug('exception : '+ e );
        }
    }
    
    global void finish(Database.BatchableContext BC) {
        System.debug(':::: Batch Finish::::');
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-token-index=&quot;0&quot;&gt;Salesforce Standard Out of Box Schedule (세일즈포스에서 스케쥴 등록 하기)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;**필수사항&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;class 에&amp;nbsp; 인터페이스 Schedulable 을 구현 해야 함.&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;pre id=&quot;code_1701174993548&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implements Schedulable&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;2. batch class 내에&amp;nbsp; 메서드를 추가 해줘야 Schedule을 통해서 Batch를 동작 시킴&lt;/p&gt;
&lt;pre id=&quot;code_1701175177633&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;global void execute(SchedulableContext sc){
        System.debug('☆★☆★☆★☆★☆★ execute');
        LeadStatusBatch b = new LeadStatusBatch(); 
        Database.executeBatch(b,200);
    }&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 스케쥴러를 등록하는 방법은 &lt;span data-token-index=&quot;1&quot;&gt;Setup &amp;gt;&amp;gt; Home &amp;gt;&amp;gt; apex 검색 &amp;gt;&amp;gt; Apex Classes &amp;gt;&amp;gt;Schedule Apex 클릭&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;81&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/H5Vcf/btsA9Uh0EWA/Xey7RoY84dxlslEqdltaiK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/H5Vcf/btsA9Uh0EWA/Xey7RoY84dxlslEqdltaiK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/H5Vcf/btsA9Uh0EWA/Xey7RoY84dxlslEqdltaiK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FH5Vcf%2FbtsA9Uh0EWA%2FXey7RoY84dxlslEqdltaiK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;526&quot; height=&quot;81&quot; data-filename=&quot;Untitled.png&quot; data-origin-width=&quot;526&quot; data-origin-height=&quot;81&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (1).png&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;534&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cW8d7b/btsA9POxDTX/eim7WMEvx8oNKvafrA4Rx0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cW8d7b/btsA9POxDTX/eim7WMEvx8oNKvafrA4Rx0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cW8d7b/btsA9POxDTX/eim7WMEvx8oNKvafrA4Rx0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcW8d7b%2FbtsA9POxDTX%2Feim7WMEvx8oNKvafrA4Rx0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;703&quot; height=&quot;534&quot; data-filename=&quot;Untitled (1).png&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;534&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;위 화면에서 Apex Class를 등록하고 스케쥴 실행하는 날짜와 시간 요일을 지정 할 수 있다.( 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;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;**** Schedule Apex 를 한번 설정하면 수정 불가능 삭제만 가능하다&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 등록한 Schedule 확인하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Setup &amp;gt;&amp;gt; Enviroments &amp;gt;&amp;gt; Jobs &amp;gt;&amp;gt; Scheduled Jobs 에서 확인 가능&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-filename=&quot;Untitled (2).png&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;97&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YUNlf/btsA2Zk7FlL/jOhDCoJIhNFXNukrkxRdZk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YUNlf/btsA2Zk7FlL/jOhDCoJIhNFXNukrkxRdZk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YUNlf/btsA2Zk7FlL/jOhDCoJIhNFXNukrkxRdZk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYUNlf%2FbtsA2Zk7FlL%2FjOhDCoJIhNFXNukrkxRdZk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1202&quot; height=&quot;97&quot; data-filename=&quot;Untitled (2).png&quot; data-origin-width=&quot;1202&quot; data-origin-height=&quot;97&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;&lt;b&gt;3. Batch class 실행 확인하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 시간전에 Develop console에 들어가서 지정된 시간이 되면 실행이 될것이고 log 를 확인&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Untitled (3).png&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bc7oGA/btsA1c523SL/ZWvZpOfcJVSxKWVFJ1ldKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bc7oGA/btsA1c523SL/ZWvZpOfcJVSxKWVFJ1ldKk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bc7oGA/btsA1c523SL/ZWvZpOfcJVSxKWVFJ1ldKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbc7oGA%2FbtsA1c523SL%2FZWvZpOfcJVSxKWVFJ1ldKk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;619&quot; height=&quot;178&quot; data-filename=&quot;Untitled (3).png&quot; data-origin-width=&quot;619&quot; data-origin-height=&quot;178&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;&amp;nbsp;&lt;/p&gt;</description>
      <category>Saelsforcee</category>
      <author>Baro_forest</author>
      <guid isPermaLink="true">https://rokforest.tistory.com/295</guid>
      <comments>https://rokforest.tistory.com/295#entry295comment</comments>
      <pubDate>Fri, 24 Nov 2023 09:32:01 +0900</pubDate>
    </item>
    <item>
      <title>Apex Lead Batch (2) Testcode</title>
      <link>https://rokforest.tistory.com/288</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;apex batch를 만들었었으니 test 코드를 작성 !!&lt;/p&gt;
&lt;pre id=&quot;code_1701065634942&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@isTest
public class LeadBatch_Test {
    
    @TestSetup
    static void makeData() {
    }
    	@isTest
        static void LeadUpdate(){

            Lead objLead = new Lead();
            objLead.Status= '수요검색';
            objLead.LastName= 'YUN';
            objLead.Company= 'TestCompany';
            objLead.CreatedDate= datetime.newInstance(2020, 10, 10, 13, 30, 0);
            insert objLead;
            
            Test.startTest();
            Database.executeBatch(new LeadBatch(),200);
            Test.stopTest();

            
            Lead updatedLead = [SELECT Id,Status FROM Lead WHERE Id =:objLead.Id];

            System.assertEquals(updatedLead.Status,'수요없음');
        }   

}&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;Lead를 추가하고 , batch를 돌렸을경우 lead의 status의 값을 검증 확인.&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;처음에 makeData에다가 먼저 lead값을 하나 만들었는데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 updateDead를 할때 문제가 생겨 아래 메서드에다가 전부 다 추가해서 처리 했다.&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Saelsforcee</category>
      <author>Baro_forest</author>
      <guid isPermaLink="true">https://rokforest.tistory.com/288</guid>
      <comments>https://rokforest.tistory.com/288#entry288comment</comments>
      <pubDate>Mon, 20 Nov 2023 13:54:23 +0900</pubDate>
    </item>
    <item>
      <title>Apex Lead Batch (1)</title>
      <link>https://rokforest.tistory.com/287</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;요구사항&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Lead의 상태가 90일 이후에도 기회전환이 안된 상태라면 수요없음으로 변환.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Batch가 TrailHead 이후에는 처음이라 조금찾아보면서 했다.&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;우선 batch를 크게보자면 start 에서 query를 가져오고, 가져온 query를 기반으로 excute에서 비즈니스로직을 통해&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일련의 처리를하고, finish 에서 추가작업을 한다(이메일, 알림 등등)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1701064472261&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;global class LeadStatusBatch implements Database.Batchable&amp;lt;sObject&amp;gt;, Database.stateful {

    global Database.QueryLocator start(Database.BatchableContext BC) {
        System.debug(':::: Batch Start::::');

        String query = 'SELECT ';
               query += 'Id, ';
               query += 'Status, ';
               query += 'CreatedDate ';
               query += 'FROM Lead ';
               query += 'WHERE (Status = \'신규\' OR Status = \'수요검색 \') ';
               query += 'AND CreatedDate &amp;lt; LAST_N_DAYS: 90';
              
               System.debug(query);

        return Database.getQueryLocator(query);
    }

    
    global void execute(Database.BatchableContext bc, List&amp;lt;Lead&amp;gt; scope) {
        System.debug(':::: Batch execute ::::');
        System.debug('scope is' + scope );
        List&amp;lt;Lead&amp;gt; leadList = new List&amp;lt;Lead&amp;gt;();
        try {
            if(scope.size() &amp;gt; 0){
                for(Lead  ld : scope){
                    ld.Status = '수요없음';
                    leadList.add(ld);
                }
            update leadList;
            }
        } catch (Exception e)  {
            System.debug('exception : '+ e );
        }
    }
    
    global void finish(Database.BatchableContext BC) {
        System.debug(':::: Batch Finish::::');
    }
}&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;start에서 요구조건에 해당하는 값을 찾기 위해서 where절에서 조건을 통해&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변환x , 상태가 신규 or 수요검색 이고 생성일자가 90일 이내인 데이터를 찾아온다&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;excute에서는&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;scope.size() &amp;gt; 0&amp;nbsp; 이라는 조건도 사실 필요없는데 혹시 몰라 검증을 한번 더 추가 했다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;( start 에서 데이터가 없으면 배치가 실행되지 않음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에 status 값을 변경하고 DML문을 통해 update 를 실행한다.&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;finish는 batch작업만 실행하고 추가로 알림,이메일과 같은 이벤트는 요구사항이 없어 추가하지 않았다.&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;다음에는 batch를 등록했으니 스케쥴러를 통해서 자동으로 매일 업데이트를 할 예정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Saelsforcee</category>
      <author>Baro_forest</author>
      <guid isPermaLink="true">https://rokforest.tistory.com/287</guid>
      <comments>https://rokforest.tistory.com/287#entry287comment</comments>
      <pubDate>Mon, 20 Nov 2023 13:54:16 +0900</pubDate>
    </item>
    <item>
      <title>Salesforce Standard PDF Features</title>
      <link>https://rokforest.tistory.com/283</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;세일즈포스에 있는 PDF만들기&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;gt;&amp;gt; 홈 &amp;gt;&amp;gt; 기능설정 &amp;gt;&amp;gt; 판매 &amp;gt;&amp;gt; 견적서 &amp;gt;&amp;gt; 대기열 템플릿 에서 Standard 기능을 활용 할 수 있다&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-filename=&quot;스크린샷 2023-11-18 오후 4.23.02.png&quot; data-origin-width=&quot;1820&quot; data-origin-height=&quot;706&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cU55Y6/btsAw23e2pP/Oj5f1WvlGl6GmYosKXSWFK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cU55Y6/btsAw23e2pP/Oj5f1WvlGl6GmYosKXSWFK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cU55Y6/btsAw23e2pP/Oj5f1WvlGl6GmYosKXSWFK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcU55Y6%2FbtsAw23e2pP%2FOj5f1WvlGl6GmYosKXSWFK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;623&quot; height=&quot;242&quot; data-filename=&quot;스크린샷 2023-11-18 오후 4.23.02.png&quot; data-origin-width=&quot;1820&quot; data-origin-height=&quot;706&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-11-18 오후 4.24.24.png&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;570&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bj69JG/btsAxTLJVEb/WQhm6JL8D8DiHLAMoV6Luk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bj69JG/btsAxTLJVEb/WQhm6JL8D8DiHLAMoV6Luk/img.png&quot; data-alt=&quot;pdf test 는 visualfoece+aura Test를 위해 만든 custom 입니다 ..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bj69JG/btsAxTLJVEb/WQhm6JL8D8DiHLAMoV6Luk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbj69JG%2FbtsAxTLJVEb%2FWQhm6JL8D8DiHLAMoV6Luk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;276&quot; height=&quot;248&quot; data-filename=&quot;스크린샷 2023-11-18 오후 4.24.24.png&quot; data-origin-width=&quot;634&quot; data-origin-height=&quot;570&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;pdf test 는 visualfoece+aura Test를 위해 만든 custom 입니다 ..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-11-18 오후 4.25.57.png&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;586&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LDqNp/btsAxikH6Fy/k9xxKeUWpWTdk1J100aUwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LDqNp/btsAxikH6Fy/k9xxKeUWpWTdk1J100aUwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LDqNp/btsAxikH6Fy/k9xxKeUWpWTdk1J100aUwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLDqNp%2FbtsAxikH6Fy%2Fk9xxKeUWpWTdk1J100aUwk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;484&quot; height=&quot;198&quot; data-filename=&quot;스크린샷 2023-11-18 오후 4.25.57.png&quot; data-origin-width=&quot;1430&quot; data-origin-height=&quot;586&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-11-18 오후 4.26.29.png&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/barI5f/btsAxfhekwk/qEa6KnEo5MMAu2WPv8JvrK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/barI5f/btsAxfhekwk/qEa6KnEo5MMAu2WPv8JvrK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/barI5f/btsAxfhekwk/qEa6KnEo5MMAu2WPv8JvrK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbarI5f%2FbtsAxfhekwk%2FqEa6KnEo5MMAu2WPv8JvrK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;406&quot; height=&quot;93&quot; data-filename=&quot;스크린샷 2023-11-18 오후 4.26.29.png&quot; data-origin-width=&quot;760&quot; data-origin-height=&quot;174&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;*대기열 템플릿&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대기열 템플릿을 이용해서 해당하는 PDF의 구조나 원하는 field 값들을 변경해서 원하는 견적서 PDF를 만들 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 여러가지 템플릿을 만들어서 RecordType 별 또는 사업부별로 구분해서 원하는 foam을 얻을수 있다.&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;*PDF만들기 버튼&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pdf 만들기 버튼을 누르면 여러 템플릿을 선택 가능.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후에는 해당하는 pdf를 미리보기를 통해서 견적 foam을 볼수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우상단에 버튼을 보면 해당 pdf 를 다운로드 하거나 프린터를 할수도 있고 ,, 아래에 있는 버튼을 통해서&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 견적에 대해서 저장을 통해 rev 같이 활용 할 수도 있다.&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;프로젝트 진행중에 견적에 대한 PDF만들기의 Task 가 있어서 ,, 기존에 사용하던 Visualforce + Aura 를 이용해서&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pdf를 만들고 있던 와중에 확인 해보니 ,, 스탠다드에 다 있는 기능들이라 ,, 굳이 만들지 않고 진행하기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Saelsforcee</category>
      <category>Saelsforce</category>
      <author>Baro_forest</author>
      <guid isPermaLink="true">https://rokforest.tistory.com/283</guid>
      <comments>https://rokforest.tistory.com/283#entry283comment</comments>
      <pubDate>Tue, 24 Oct 2023 08:25:59 +0900</pubDate>
    </item>
    <item>
      <title>[SQL] Optimizer 옵티마이저 란 ?</title>
      <link>https://rokforest.tistory.com/280</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;옵티마이저(Optimizer)&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵티마이저란 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;가장 효율적인 방법을 통해 SQL을 수행할 최적의 처리 경로를 생성해주는 DBMS의 핵심 엔진이다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;사용자가 구조화된 질의어(SQL)로 결과 집합을 요구하면, 이를 생성하는데 필요한 처리경로는 DBMS에 내장된 옵티마이저가 자동으로&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;생성해준다. 옵티마이저가 생성한 SQL 처리경로를 &lt;b&gt;실행계획(Excution Plan)&lt;/b&gt; 이라고 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;실행계획(Excution Plan)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;동일한 결과가 나오는 SQL 이라도 어떻게 실행하는지에 따라서 성능이 달라질 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;옵티마이저는 데이터 딕셔너리(Data Dictionary)에 있는 오브젝트 통계,시스템 통계 등의 정보를 사용해서 예상되는&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;비용을 평가하여 여러 &lt;b&gt;실행계획(Excution Plan) 을 작성한다&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;옵티마이저는 이들의 비용을 연산해 가장 낮은 비용을 가진 실행계획을 선택한다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;옵티마이저의 SQL 최적화 과정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. 사용자가 던진 쿼리 수행을 위해서 후보군이 될만한 실행 계획을 찾는다&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. 데이터 딕셔너리(Data Dictionary)에 미리 수집해 놓은 오브젝트 통계 및 시스템 통계정보를 이용해 각 실행계획의 예상 비용을 산정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 각 실행계획을 비교하여 최저비용을 갖는 하나를 선택&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;옵티마이저의 종류&lt;/span&gt;&lt;/b&gt;&lt;/h4&gt;
&lt;p 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;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;규칙 기반 옵티마이저&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;비용 기반 옵티마이저&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;개념&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;사전에 정의된 규칙 기반&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;최소비용 계산 실행계획 수립&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;기준&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;실행우선 순위(Ranking)&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;액세스 비용(Cost)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;인덱스&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;인덱스 존재 시 가장 우선시 사용&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Cost에 의한 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;성능&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;사용자 SQL작성 숙련도&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;옵티마이저 예측 성능&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;장점&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;판단이 매우 규칙적 실행 예상 가능&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;통계 정보를 통한 현실 요소 적용&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;단점&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;예측 통계정보 요소 무시&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;최소 성능 보장 계획의 예측 제어 어려움&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;사례&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;AND 중심 양쪽 &quot;=&quot; 시 Index Merge 사용&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;AND 중심 양쪽 &quot;=&quot; 시 분포도별 Index 선택&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;규칙 기반 옵티마이저(RBO : Rule - Based Optimizer)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;규칙기반 옵티마이저는 실행 속도가 빠른순으로 규칙을 세워두고 우선순위가 높은 방법을 선택하는 옵티마이저 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 말하는 규칙이란 액세스 경로별 우선순위로서 인덱스의 구조, 연산, 조건절 형태가 순위를 결정짓는 주 요인이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;규칙의 순서는 표와 같다.&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #222222; text-align: start; border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;우선순위&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;설명&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;ROWID를 사용한 단일 행인 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;클러스터 조인에 의한 단일 행인 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;유일하거나 기본키(Primary key)를 가진 해시 클러스터 키에 의한 단일 행인 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;4&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;유일하거나 기본키(Primary key)에 의한 단일 행인 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;5&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;클러스터 조인인 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;6&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;해시 클러스터 조인인 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;7&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;인덱스 클러스터 키인 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;8&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;복합 칼럼 인덱스인 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;9&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;단일 칼럼 인덱스인 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;10&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;인덱스가 구성된 칼럼에서 제한된 범위를 검색하는 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;11&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;인덱스가 구성된 칼럼에서 무제한 범위를 검색하는 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;12&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;정렬-병합(Sort-Merge) 조인인 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;13&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;인덱스가 구성된 칼럼에서 MAX 혹은 MIN을 구하는 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;14&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;인덱스가 구성된 칼럼에서 ORDER BY를 실행하는 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;15&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;전체 테이블을 스캔(FULL TABLE SCAN)하는 경우&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;비용 기반 옵티마이저(CBO : Cost - Based Optimizer)&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비용 기반 옵티마이저란 말 그대로 비용을 기반으로 최적화를 수행하는 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 말하는 '비용'이란 쿼리를 수행하는데 소요되는 일의 량 또는 시간을 뜻한다. CBO는 실행 계획을 최대 2000개 까지 세운 뒤 비용이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최소한으로 나온 실행 계획을 수행 하게 된다. 이때 실행계획을 수립할 때 판단 기준이 되는 비용은 실제 비용이 아니라 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;예상치&lt;/b&gt;&lt;/span&gt; 이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 CBO는 비용을 예측하기 위해 테이블, 인덱스, 칼럼 등의 다양한 객체 통계정보 및 시스템 통계정보(CPU 속도, 디스크 I/O 속도 등)&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;Reperence&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://code-lab1.tistory.com/137&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://code-lab1.tistory.com/137&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SQL</category>
      <author>Baro_forest</author>
      <guid isPermaLink="true">https://rokforest.tistory.com/280</guid>
      <comments>https://rokforest.tistory.com/280#entry280comment</comments>
      <pubDate>Wed, 31 May 2023 16:30:42 +0900</pubDate>
    </item>
    <item>
      <title>[SQL] Window Function 윈도우 함수</title>
      <link>https://rokforest.tistory.com/278</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;윈도우 함수(Window Functoin)&lt;/b&gt;&lt;/h4&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;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;행과 행간의 관계를 쉽게 정의하기 위해 만들어진 함수&lt;/span&gt;&lt;/b&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;기존 SQL 언어는 컬럼과 컬럼간의 연산 과 비교, 집계에 특화되어 있는 언어인데 반해 행과 행간의 관계를 정의하거나&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비교, 연산 하는 것은 하나의 SQL 문으로 처리하기가 매우 번거롭다.&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;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Window Function 문법&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1685433918173&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT WINDOW_FUNCTION(컬럼) OVER([PARTITION BY 컬럼] [ORDER BY 컬럼])
FROM 테이블;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;OVER : OVER은 윈도우 함수에서 꼭 들어가야 하며 OVER 내부에 PARTITION BY 절과 ORDER BY 절이 들어간다.&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;PARTITION BY: 전체 집합을 어떤 기준컬럼에 따라 나눌지를 결정하는 부분.&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;ORDER BY: 어떤 컬럼을 기준으로 순위를 정할지 결정하는 부분&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;Window Function(윈도우 함수) 종류&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;함수&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;-&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;순위함수&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;RANK, DENSE_RANK, ROW_NUMBER&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;일반 집계 함수&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;SUM,MAX,MIN,AVG,COUNT&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;SQL Server에서는 OVER절 내에서&amp;nbsp;&lt;br /&gt;ORDER BY 지원하지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;그룹 내 행 순서 함수&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;FIRST_VALUE, LAST_VALUE,&lt;br /&gt;LAG, LEAD&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;SQL Server에서는 지원하지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;그룹 내 비율 함수&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;RATIO_TO_REPORT,PERCENT_RANK,&lt;br /&gt;CUME_DIST,NTILE&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; height: 19px; text-align: center;&quot;&gt;NTILE 제외 &lt;br /&gt;SQL Server에서는 지원하지 않음&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;GROUP BY(그룹화함수) 와 의 차이점 ?&lt;/b&gt;&lt;/h4&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 95px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style14&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;GROUP BY&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;윈도우 함수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;기능&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;자르기 + 집약&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;자르기&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 38px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 38px;&quot;&gt;특징&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 38px;&quot;&gt;1. group by 에 지정된 컬럼 데이터를 자르고&lt;br /&gt;2.집계 함수를 이용해 집약시킨다&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 38px;&quot;&gt;1. Partition by 에 지정된 컬럼으로 &lt;br /&gt;데이터를 자른다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 19px;&quot;&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;차이점&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;행의 수가 줄어든다&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center; height: 19px;&quot;&gt;행의 수가 그대로 유지된다&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;1. group by&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1685435246522&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select address, count(*) 
from address 
group by 1;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dHuex1/btsh4m5fUfr/bW7ymYyW9mBGbrbo9zv6L0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dHuex1/btsh4m5fUfr/bW7ymYyW9mBGbrbo9zv6L0/img.png&quot; data-alt=&quot;이미지 출처 : https://schatz37.tistory.com/12&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dHuex1/btsh4m5fUfr/bW7ymYyW9mBGbrbo9zv6L0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdHuex1%2Fbtsh4m5fUfr%2FbW7ymYyW9mBGbrbo9zv6L0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;339&quot; height=&quot;211&quot; data-origin-width=&quot;339&quot; data-origin-height=&quot;211&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 출처 : https://schatz37.tistory.com/12&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;2. 윈도우 함수&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1685435254004&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;select address , count(*) over(partition by address) 
from address;&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lLSIq/btsh16h7PCC/K6pBKyLUTPKqt0R1YRl9GK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lLSIq/btsh16h7PCC/K6pBKyLUTPKqt0R1YRl9GK/img.png&quot; data-alt=&quot;이미지 출처 :&amp;amp;nbsp; https://schatz37.tistory.com/12&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lLSIq/btsh16h7PCC/K6pBKyLUTPKqt0R1YRl9GK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlLSIq%2Fbtsh16h7PCC%2FK6pBKyLUTPKqt0R1YRl9GK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;340&quot; height=&quot;329&quot; data-origin-width=&quot;340&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;이미지 출처 :&amp;nbsp; https://schatz37.tistory.com/12&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;group by 는 집약기능을 통해서 행의 수를 줄어들고, 반면에 윈도우 함수는 집약기능이 없기때문에 행수가 그대로 남아있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;성능?&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;윈도우 함수는 복잡한 쿼리를 간단하게 작성할수 있다. 그렇다면 성능적인 측면은 ?&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;윈도우 함수에는 기본적으로 정렬(Sort)의 과정이 들어가있다. 그렇다면 성능적으로는 우수하지 않다! (일을 추가로 하니까!)&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;복잡한 쿼리를 줄이고 성능을 내기 위해서는 Join 과 서브쿼리를 적절히 사용해서 스캔해야 하는 행의 수를 줄여서 적절히&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;사용 한다면 더 높은 성능을 낼수 있다&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>SQL</category>
      <author>Baro_forest</author>
      <guid isPermaLink="true">https://rokforest.tistory.com/278</guid>
      <comments>https://rokforest.tistory.com/278#entry278comment</comments>
      <pubDate>Tue, 30 May 2023 17:40:01 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] LAG, LEAD 함수</title>
      <link>https://rokforest.tistory.com/277</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;LAG, LEAD 함수&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;LAG / LEAD (컬럼명 [,offset] [,default]) OVER([PARTITION BY 컬럼] ORDER BY 컬럼 )&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;★ SQL SERVER 에서는 지원하지 않는 함수이다 !&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;LAG 함수 - 이전 행의 값을 리턴한다&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;LEAD 함수 - 다음 행의 값을 리턴한다&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;offset - 값을 가져올 행의 위치 ( 기본값 1 ) - 생략가능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;default - 값이 없을 경우의 기본값 - 생략가능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;PARTITION BY - 그룹 컬럼명 - 생략가능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ORDER BY - 정렬 컬럼명 - 필수&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;LAG / LEAD 함수&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1685425813467&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
	number,
	weight,
	LAG(number) OVER(ORDER BY number) AS numberlag ,
	LEAD(number) OVER(ORDER BY number) AS numberlead
FROM
	table
WHERE
	number IN ('1','2','3')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;numberlag&lt;/b&gt;&amp;nbsp; - 이전행의 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;numberlead&lt;/b&gt; - 다음행의 값&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 예시에서 LAG(number&amp;nbsp; , 3) 으로 변경하면 3번째 이전 행의 값을 표시한다.&lt;/p&gt;
&lt;pre id=&quot;code_1685426098344&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
	number,
	weight,
	LAG(number,3) OVER(ORDER BY number) AS numberlag ,
	LEAD(number,3) OVER(ORDER BY number) AS numberlead
FROM
	table
WHERE
	number IN ('1','2','3')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;default 값&lt;/b&gt;&lt;b&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1685426150134&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
	number,
	weight,
	LAG(number,3,0000) OVER(ORDER BY number) AS numberlag ,
	LEAD(number,3,0000) OVER(ORDER BY number) AS numberlead
FROM
	table
WHERE
	number IN ('1','2','3')&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;number의 컬럼에서 3번째 전의 값을 가져오는데 값이없을 경우 0000의 값으로 표시한다.&lt;/p&gt;</description>
      <category>SQL</category>
      <author>Baro_forest</author>
      <guid isPermaLink="true">https://rokforest.tistory.com/277</guid>
      <comments>https://rokforest.tistory.com/277#entry277comment</comments>
      <pubDate>Tue, 30 May 2023 14:56:53 +0900</pubDate>
    </item>
    <item>
      <title>[JAVA] startsWith() , endsWith()</title>
      <link>https://rokforest.tistory.com/276</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;startsWith() , endsWith() 함수를 사용하면 대상 문자열이 특정 문자 또는 문자열로 시작하거나 끝나는지에 대해서 확인할수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;boolean startWith()&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-24 오후 1.28.47.png&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;107&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/UHcek/btshar8DJn8/Ea4vyRM54P4iNAlDKqylQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/UHcek/btshar8DJn8/Ea4vyRM54P4iNAlDKqylQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/UHcek/btshar8DJn8/Ea4vyRM54P4iNAlDKqylQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FUHcek%2Fbtshar8DJn8%2FEa4vyRM54P4iNAlDKqylQk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;359&quot; height=&quot;107&quot; data-filename=&quot;스크린샷 2023-05-24 오후 1.28.47.png&quot; data-origin-width=&quot;359&quot; data-origin-height=&quot;107&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;&quot;안녕하세요&quot; 에서 &quot;안&quot; 으로 시작하는지 확인 // true&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;그렇다면 공백으로 시작한다면?&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-24 오후 1.32.06.png&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;122&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lXaO3/btsg8dwNeWh/ZDsWtdyfXnmHGHIKBycvXK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lXaO3/btsg8dwNeWh/ZDsWtdyfXnmHGHIKBycvXK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lXaO3/btsg8dwNeWh/ZDsWtdyfXnmHGHIKBycvXK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlXaO3%2Fbtsg8dwNeWh%2FZDsWtdyfXnmHGHIKBycvXK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;365&quot; height=&quot;122&quot; data-filename=&quot;스크린샷 2023-05-24 오후 1.32.06.png&quot; data-origin-width=&quot;365&quot; data-origin-height=&quot;122&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공백으로 시작한다면,&amp;nbsp; &quot;오&quot; 에 대한 값은 false 를 반환한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;boolean endsWith()&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;endsWith 는 startsWith 와 반대의 성격을 가지므로 끝나는 값을 확인할때 사용한다&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 alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-24 오후 1.36.27.png&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;103&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eksgGa/btshgpoM1jX/GQhZr3c41kZmS5k0Jwmkk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eksgGa/btshgpoM1jX/GQhZr3c41kZmS5k0Jwmkk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eksgGa/btshgpoM1jX/GQhZr3c41kZmS5k0Jwmkk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FeksgGa%2FbtshgpoM1jX%2FGQhZr3c41kZmS5k0Jwmkk1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;345&quot; height=&quot;103&quot; data-filename=&quot;스크린샷 2023-05-24 오후 1.36.27.png&quot; data-origin-width=&quot;345&quot; data-origin-height=&quot;103&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&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2023-05-24 오후 1.36.21.png&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z6bV5/btsg86dcDKj/92Z9BJG8oNe4DmOXDikhZK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z6bV5/btsg86dcDKj/92Z9BJG8oNe4DmOXDikhZK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z6bV5/btsg86dcDKj/92Z9BJG8oNe4DmOXDikhZK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ6bV5%2Fbtsg86dcDKj%2F92Z9BJG8oNe4DmOXDikhZK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;381&quot; height=&quot;203&quot; data-filename=&quot;스크린샷 2023-05-24 오후 1.36.21.png&quot; data-origin-width=&quot;381&quot; data-origin-height=&quot;203&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;startsWith 와 같은 값을 반환한다.&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://school.programmers.co.kr/learn/courses/30/lessons/131128&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://school.programmers.co.kr/learn/courses/30/lessons/131128&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;의 문제를 확인하면서 0으로 시작하는 값걸러내야 할때 사용하는 것을 보고 함수를 사용하는 방법이 있길레 확인 해서 사용해보니 더 편리했다.&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;if( sb.toString().startsWith(&quot;0&quot;)&amp;nbsp; &amp;gt;&amp;nbsp; &quot;0&quot;&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>JAVA</category>
      <author>Baro_forest</author>
      <guid isPermaLink="true">https://rokforest.tistory.com/276</guid>
      <comments>https://rokforest.tistory.com/276#entry276comment</comments>
      <pubDate>Wed, 24 May 2023 13:39:09 +0900</pubDate>
    </item>
  </channel>
</rss>