<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>알게된 것을 기록하는 공간</title>
    <link>https://toddlerprogrammer.tistory.com/</link>
    <description>(๑˘ ᵕ˘๑)</description>
    <language>ko</language>
    <pubDate>Tue, 16 Jun 2026 12:11:42 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>알굼</managingEditor>
    <image>
      <title>알게된 것을 기록하는 공간</title>
      <url>https://tistory1.daumcdn.net/tistory/3870980/attach/def5f0f97168427b9194fb8101a96396</url>
      <link>https://toddlerprogrammer.tistory.com</link>
    </image>
    <item>
      <title>[Tomcat clean 오류] Could not delete org.eclipse.wst.server.core\tmp0\. May be locked by another process.</title>
      <link>https://toddlerprogrammer.tistory.com/179</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;문제상황&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;톰캣 클린시 아래와 같은 에러 메세지와 함께 클린되지 않았다.&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;Could not delete D:\Dev\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtp\webapps\web\WEB-INF\lib\com-1.0.0.jar. May be locked by another process.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;1050&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E3VzI/btsObJ3zV9C/faTfaJGFutKKTmkHlgWY31/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E3VzI/btsObJ3zV9C/faTfaJGFutKKTmkHlgWY31/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E3VzI/btsObJ3zV9C/faTfaJGFutKKTmkHlgWY31/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE3VzI%2FbtsObJ3zV9C%2FfaTfaJGFutKKTmkHlgWY31%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;302&quot; height=&quot;338&quot; data-origin-width=&quot;939&quot; data-origin-height=&quot;1050&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;원인&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Tomcat 프로세스가 백그라운드에서 완전히 종료되지 않아서 그렇다. 완전히 종료되지 않았을 경우, 파일이 lock 상태가 되어 clean&amp;nbsp; 불가하다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;해결방법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러 메세지에서 말하는 tmp0 폴더를 삭제 후 Clean 한다. tmp0 폴더는 이클립스 내부 톰캣 버서의 임시 배포 디렉토리이므로, 해당 폴더 삭제하여 톰캣 서버의 임시 리소스들을 강제로 초기화 및 재배포 가능하다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2059&quot; data-origin-height=&quot;1256&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bM9d69/btsOa9V1Jll/xpJ4Agerzd5fsBuOQZaa21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bM9d69/btsOa9V1Jll/xpJ4Agerzd5fsBuOQZaa21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bM9d69/btsOa9V1Jll/xpJ4Agerzd5fsBuOQZaa21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbM9d69%2FbtsOa9V1Jll%2FxpJ4Agerzd5fsBuOQZaa21%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;680&quot; height=&quot;415&quot; data-origin-width=&quot;2059&quot; data-origin-height=&quot;1256&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;</description>
      <category>Work/운영유지보수</category>
      <category>could not delete jar</category>
      <category>may be locked by another process.</category>
      <category>tomcat clean 오류</category>
      <category>톰캣 클린안됨</category>
      <category>톰캣 클린오류</category>
      <author>알굼</author>
      <guid isPermaLink="true">https://toddlerprogrammer.tistory.com/179</guid>
      <comments>https://toddlerprogrammer.tistory.com/179#entry179comment</comments>
      <pubDate>Sun, 25 May 2025 18:19:43 +0900</pubDate>
    </item>
    <item>
      <title>[Oz Report 8.0] 오즈 8 라이센스 변경</title>
      <link>https://toddlerprogrammer.tistory.com/178</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 오즈라이센스를 발급받는다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1491&quot; data-origin-height=&quot;858&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBbP5j/btsNtqisxRf/YRf852RY5SKfbXefA9QqUk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBbP5j/btsNtqisxRf/YRf852RY5SKfbXefA9QqUk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBbP5j/btsNtqisxRf/YRf852RY5SKfbXefA9QqUk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBbP5j%2FbtsNtqisxRf%2FYRf852RY5SKfbXefA9QqUk%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;698&quot; height=&quot;402&quot; data-origin-width=&quot;1491&quot; data-origin-height=&quot;858&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. Designer 파일명을 ozlicense.xml 로 변경한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 아래 경로에 ozlicense.xml 파일을 놓는다.&lt;br /&gt;&amp;nbsp; - C:\Program&amp;nbsp;Files&amp;nbsp;(x86)\FORCS\OZ&amp;nbsp;Report&amp;nbsp;8.0\OZ&amp;nbsp;Enterprise&amp;nbsp;Manager&amp;nbsp;8.0\license&lt;br /&gt;&amp;nbsp; - C:\Program&amp;nbsp;Files&amp;nbsp;(x86)\FORCS\OZ&amp;nbsp;Report&amp;nbsp;8.0\OZ&amp;nbsp;Query&amp;nbsp;Designer&amp;nbsp;8.0\license&lt;br /&gt;&amp;nbsp; - C:\Program&amp;nbsp;Files&amp;nbsp;(x86)\FORCS\OZ&amp;nbsp;Report&amp;nbsp;8.0\OZ&amp;nbsp;Report&amp;nbsp;Designer&amp;nbsp;8.0\license&lt;br /&gt;&amp;nbsp; - C:\Program&amp;nbsp;Files&amp;nbsp;(x86)\FORCS\OZ&amp;nbsp;Report&amp;nbsp;8.0\OZ&amp;nbsp;Repository&amp;nbsp;Manager&amp;nbsp;8.0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4. oz 프로그램 실행하여 적용되었는지 확인한다.&lt;/p&gt;</description>
      <category>Work/운영유지보수</category>
      <category>oz 라이센스 변경</category>
      <category>oz라이센스</category>
      <category>오즈 라이센스 변경</category>
      <category>오즈8 라이센스 변경</category>
      <author>알굼</author>
      <guid isPermaLink="true">https://toddlerprogrammer.tistory.com/178</guid>
      <comments>https://toddlerprogrammer.tistory.com/178#entry178comment</comments>
      <pubDate>Mon, 21 Apr 2025 00:39:54 +0900</pubDate>
    </item>
    <item>
      <title>[MSSQL] MSSQL 쿼리문에서 NOLOCK 사용해야하는 이유</title>
      <link>https://toddlerprogrammer.tistory.com/177</link>
      <description>&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;1. (NOLOCK)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;SELECT 쿼리에서 테이블 &lt;b&gt;공유 잠금을 피하고 다른 트랜잭션이 테이블을 업데이트하는 동안에도 읽을 수 있도록 하는 힌트.&lt;/b&gt; &lt;i&gt;&quot;읽기 잠금&quot; &lt;/i&gt;을 건너뛰므로 성능 향상 효과가 있다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&lt;/span&gt;① NOLOCK 사용&lt;br /&gt;: 쿼리 실행시간이 긴 SELECT 쿼리 실행 중에도 다른사용자가 테이블에 INSERT, UPDATE, DELETE 가능&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;333&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/yrhoG/btsJSslgSa5/eBw0ki01mdqBG9PnSDXa1k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/yrhoG/btsJSslgSa5/eBw0ki01mdqBG9PnSDXa1k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/yrhoG/btsJSslgSa5/eBw0ki01mdqBG9PnSDXa1k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FyrhoG%2FbtsJSslgSa5%2FeBw0ki01mdqBG9PnSDXa1k%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;333&quot; data-origin-width=&quot;703&quot; data-origin-height=&quot;333&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1727845389078&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.ORDERID
     , A.ORDERDATE
     , B.CUSTOMERNAME
     , C.PRODUCTNAME
     , C.QUANTITY
  FROM ORDERS A (NOLOCK)
  JOIN CUSTOMERS B (NOLOCK) ON A.CUSTOMERID = B.CUSTOMERID
  JOIN ORDERDETAILS C (NOLOCK) ON A.ORDERID = C.ORDERID
 WHERE 1=1
   AND A.ORDERDATE &amp;gt; '2024-01-01';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;② NOLOCK 미사용&lt;br /&gt;: 쿼리 실행시간이 긴 SELECT 쿼리 실행이 끝나기 전까지 &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;다른 사용자는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt; INSERT, UPDATE, DELETE 불가&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;336&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/OwTZP/btsJSuQ3hCL/dKpgtx7LgssMXb0e1PZk6k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/OwTZP/btsJSuQ3hCL/dKpgtx7LgssMXb0e1PZk6k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/OwTZP/btsJSuQ3hCL/dKpgtx7LgssMXb0e1PZk6k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FOwTZP%2FbtsJSuQ3hCL%2FdKpgtx7LgssMXb0e1PZk6k%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;686&quot; height=&quot;342&quot; data-origin-width=&quot;674&quot; data-origin-height=&quot;336&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1727845570184&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.ORDERID
     , A.ORDERDATE
     , B.CUSTOMERNAME
     , C.PRODUCTNAME
     , C.QUANTITY
  FROM ORDERS A
  JOIN CUSTOMERS B ON A.CUSTOMERID = B.CUSTOMERID
  JOIN ORDERDETAILS C ON A.ORDERID = C.ORDERID
 WHERE 1=1
   AND A.ORDERDATE &amp;gt; '2024-01-01';&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;2. 장점&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;div style=&quot;color: #333333; text-align: start;&quot;&gt;
&lt;div data-message-author-role=&quot;assistant&quot; data-message-id=&quot;e3d7235b-9545-46e1-b2cb-b28a0d4a692d&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;- 데이터베이스에서 동시성 제어를 위해 사용한다. &lt;/span&gt;성능 이슈가 있거나 동시성 제어가 중요한 시스템에서 NOLOCK 을 사용해 데이터 일관성에 대한 리스크를 감수하고,&amp;nbsp;데이터를 더 빠르게 읽는다.&lt;br /&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;- &lt;span style=&quot;color: #ee2323;&quot;&gt;NOLOCK 힌트를 사용하면 공유 잠금을 걸지 않기 때문에 SELECT가 실행되는 동안에도 다른 트랜잭션에서&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;INSERT, UPDATE, DELETE&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;등의 쓰기 작업이 가능하다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;3. 단점&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;(NOLOCK)을 사용하면 테이블의 데이터를 더 빠르게 조회할 수 있고, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;동시성이 향상되지만, 읽어들이는 데이터의&lt;/span&gt;&amp;nbsp;&lt;b&gt;일관성&lt;/b&gt;이 떨어질 수 있다. 성능이 중요한 시스템에서 사용할 수 있지만, &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;데이터 일관성이 중요한 시스템에서는 사용에 주의해야 한다.&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;① Dirty Read&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;: 아직 커밋되지 않은 데이터를 읽어서 부정확한 정보를 조회할 가능성이 있다.&lt;br /&gt;&lt;/span&gt;② Non-repeatable Read&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;: 읽는 중에 데이터가 변경되어 동일한 쿼리를 반복해서 실행할 때 결과가 달라질 수 있다.&amp;nbsp;&lt;br /&gt;&lt;/span&gt;③ Phantom Read&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;: 읽는 중에 레코드가 추가, 삭제되어 결과에 영향을 줄 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;4. 기타&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;시스템을 유지보수하는 경우, 운영 DB에 직접 접근하여 업무 처리를 하는 경우가 많다. 이때 실행시간이 긴 쿼리를 SELECT 하면 업무 시스템 성능에 직접적으로 영향을 줄 수 있기 때문에 업무 중에는 무조건 NOLOCK 힌트를 붙여야 한다. (라고 선배한테 배웠다.) SM 담당자는 무조건 NOLOCK을 쓰는 것을 습관화해야 한다 !!! ⭐⭐⭐⭐⭐&lt;/span&gt;&lt;/p&gt;</description>
      <category>Dev/Database</category>
      <category>mssql</category>
      <category>mssql nolock</category>
      <category>nolock 기능</category>
      <category>nolock 하는 이유</category>
      <category>시스템유지보수</category>
      <category>유지보수 팁</category>
      <category>유지보수 하는일</category>
      <author>알굼</author>
      <guid isPermaLink="true">https://toddlerprogrammer.tistory.com/177</guid>
      <comments>https://toddlerprogrammer.tistory.com/177#entry177comment</comments>
      <pubDate>Wed, 2 Oct 2024 14:07:18 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] 데이터 중복처리 막는법, for update 사용</title>
      <link>https://toddlerprogrammer.tistory.com/176</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;FOR UPDATE 하면 오라클에서 중복처리를 막을 수 있는데, ORACLE은 row 단위로 LOCK을 하므로 해당 데이터만 중복 접근을 막아주는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자가 화면에서 버튼을 눌러 프로시저에서 STUDENT 테이블의 데이터를 수정하던 도중에, 사용자가 버튼을 한번 더 눌렀을 때, 서비스단에서 걸어둔 처리 완료 플래그 validation에 걸리지 않을 수 있다.&amp;nbsp;&lt;br /&gt;왜냐하면, &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;프로시저가 다 돌고나서 완료 플래그 처리하기전이기 때문이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;LOCK 을 걸고자 하는 데이터를 가져오는 쿼리에&amp;nbsp; FOR UPDATE 만 붙혀주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1724832555899&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *
           INTO v_student
           FROM STUDENT
          WHERE NAME = P_NAME
            AND STDKY = v_stdky
FOR UPDATE;&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 style=&quot;color: #dddddd;&quot;&gt;&lt;s&gt;&amp;lt;추가 확인 필요한 사항&amp;gt;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #dddddd;&quot;&gt;&lt;s&gt;1. 중복처리를 막기위해서 내생각에는 서비스단에서 &lt;/s&gt;&lt;/span&gt;&lt;span style=&quot;color: #dddddd;&quot;&gt;&lt;s&gt;처리중 플래그 update -&amp;gt; 프로시저 호출 하면 될거같고, 에러처리가 났을 때, try- catch 로 막아두면 될 것 같은데 &lt;/s&gt;&lt;/span&gt;&lt;span style=&quot;color: #dddddd;&quot;&gt;&lt;s&gt;책임님 말로는, 롤백하는 로직도 만들어야 하고, 동시처리? 를 구현해야한다고 하신다.&amp;nbsp;&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #dddddd;&quot;&gt;&lt;s&gt;2. 한 프로시저에서 두 개 이상의 FOR UPDATE 가 가능한지?&lt;/s&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Dev/Database</category>
      <category>for update</category>
      <category>oracle for update</category>
      <category>oracle 중복처리</category>
      <category>프로시저 중복처리</category>
      <author>알굼</author>
      <guid isPermaLink="true">https://toddlerprogrammer.tistory.com/176</guid>
      <comments>https://toddlerprogrammer.tistory.com/176#entry176comment</comments>
      <pubDate>Wed, 28 Aug 2024 17:24:32 +0900</pubDate>
    </item>
    <item>
      <title>[Windows] 신뢰할 수 있는 사이트 등록하는 법</title>
      <link>https://toddlerprogrammer.tistory.com/175</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;401&quot; data-origin-height=&quot;211&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ebvKvI/btsIZb4GwQX/LksHjqA25CQwmtARA7m3dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ebvKvI/btsIZb4GwQX/LksHjqA25CQwmtARA7m3dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ebvKvI/btsIZb4GwQX/LksHjqA25CQwmtARA7m3dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FebvKvI%2FbtsIZb4GwQX%2FLksHjqA25CQwmtARA7m3dk%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;401&quot; height=&quot;211&quot; data-origin-width=&quot;401&quot; data-origin-height=&quot;211&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Window + R 하여 실행창 열기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. inetcpl.cpl 입력&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. 보안 &amp;gt; 사이트 &amp;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;477&quot; data-origin-height=&quot;614&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cDKydJ/btsIW5d3atb/y9KD9386tHHJS4Vc8LD4VK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cDKydJ/btsIW5d3atb/y9KD9386tHHJS4Vc8LD4VK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cDKydJ/btsIW5d3atb/y9KD9386tHHJS4Vc8LD4VK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcDKydJ%2FbtsIW5d3atb%2Fy9KD9386tHHJS4Vc8LD4VK%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;394&quot; height=&quot;507&quot; data-origin-width=&quot;477&quot; data-origin-height=&quot;614&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;444&quot; data-origin-height=&quot;394&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/5I6ER/btsIYYErB9b/sfMEu7VBG8InhbeLMqYMpK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/5I6ER/btsIYYErB9b/sfMEu7VBG8InhbeLMqYMpK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/5I6ER/btsIYYErB9b/sfMEu7VBG8InhbeLMqYMpK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F5I6ER%2FbtsIYYErB9b%2FsfMEu7VBG8InhbeLMqYMpK%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;444&quot; height=&quot;394&quot; data-origin-width=&quot;444&quot; data-origin-height=&quot;394&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>Work/운영유지보수</category>
      <author>알굼</author>
      <guid isPermaLink="true">https://toddlerprogrammer.tistory.com/175</guid>
      <comments>https://toddlerprogrammer.tistory.com/175#entry175comment</comments>
      <pubDate>Thu, 8 Aug 2024 15:14:33 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] SELECT 1 FROM 의미, SELECT 1 의미, SELECT 1 FROM table 의 의미와 사용 예시</title>
      <link>https://toddlerprogrammer.tistory.com/174</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 개요&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;SELECT 1 FROM table&quot; 구문은 주어진 테이블의 각 행에 대해 숫자 1을 반환한다.&lt;br /&gt;만약 테이블에 N개의 행이 있다면, 결과로 N개의 1이 반환된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;ex) &lt;/b&gt;users&lt;span style=&quot;background-color: #ffffff; color: #121512; text-align: start;&quot;&gt;라는 &lt;span style=&quot;background-color: #ffffff; color: #121512; text-align: start;&quot;&gt;3개의 행을 가지는 &lt;/span&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;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;b&gt;id&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;b&gt;name&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%; text-align: center;&quot;&gt;&lt;b&gt;age&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;1&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Alice&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;30&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;2&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Bob&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;25&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;3&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;Carol&lt;/td&gt;
&lt;td style=&quot;width: 33.3333%;&quot;&gt;28&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;background-color: #ffffff; color: #121512; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #121512; text-align: start;&quot;&gt;이 테이블이 있을 때 &quot;SELECT 1 FROM users&quot; 구문을 실행하면 다음과 같은 결과가 반환된다.&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;style12&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%; text-align: center;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 100%;&quot;&gt;1&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;p style=&quot;background-color: #ffffff; color: #121512; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 시사점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #121512; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SQL에서 1은 TRUE를 의미하므로,&amp;nbsp; &quot;SELECT 1 FROM ...&quot; 형식의 구문은 논리식으로 사용될 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #121512; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. 사용 예시 - EXISTS 조건&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #121512; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;보통 이 구문은 WHERE 절의 (NOT) EXISTS 안에 있는 서브쿼리로 사용된다.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1720499557358&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;-- 예시 쿼리 1: 특정 사용자가 존재하는지 확인
SELECT
    1
FROM
    users
WHERE
    id = 1;

-- 예시 쿼리 2: 데이터의 존재 유무에 따라 동작
SELECT
    *
FROM
    orders
WHERE
    EXISTS (
        SELECT
            1
        FROM
            users
        WHERE
            users.id = orders.user_id
    );&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #121512; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;첫 번째 예시 쿼리에서, 특정 사용자의 존재 여부를 확인하기 위해 사용할 수 있다. id가 1인 사용자가 존재하면 1을 반환한다. 두 번째 예시 쿼리에서, orders 테이블의 각 주문이 users 테이블의 사용자에 의해서 이루어졌는지 확인하기 위해 사용할 수 있다. EXISTS 조건문은 orders 테이블의 각 행에 대해 users.id = orders.user_id 조건을 만족하는 행이 존재하면 TRUE를 반환한다. 이때 &quot;SELECT 1 FROM users&quot; 로 존재 여부만 확인하므로, 더 간단하게 쓸 수 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #121512; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 장점&lt;/b&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #121512; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;특정 조건을 만족하는 데이터가 존재하는지 여부만 중요할 때, &quot;SELECT * FROM ...&quot; 대신 &quot;SELECT 1 FROM ...&quot;을 사용하면 더 간단하다.&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;불필요한 데이터를 모두 조회하지 않고 존재 여부만 판단할 수 있어 효율적이다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>Dev/Database</category>
      <category>oracle not exists 사용법</category>
      <category>oracle select 1 from</category>
      <category>select 1 from</category>
      <category>select 1 from table</category>
      <category>존재여부만 확인하기</category>
      <author>알굼</author>
      <guid isPermaLink="true">https://toddlerprogrammer.tistory.com/174</guid>
      <comments>https://toddlerprogrammer.tistory.com/174#entry174comment</comments>
      <pubDate>Wed, 10 Jul 2024 14:36:53 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle/MSSQL] 인덱스 종류, 인덱스 종류별 속도, 인덱스 스캔 종류, 인덱스 스캔 종류별 속도</title>
      <link>https://toddlerprogrammer.tistory.com/173</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;인덱스 스캔? &lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;div&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&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 data-message-id=&quot;4dbf52c0-9cce-4a0b-801a-0af2fb29749e&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;Unique Index Scan (유일 인덱스 스캔)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;유일한 값만을 찾기 때문에 가장 빠름.&lt;/li&gt;
&lt;li&gt;유일한 인덱스가 적용된 컬럼에 대해 특정 값을 조회할 때 사용&lt;br /&gt;ex) SELECT * FROM table WHERE unique_column = 'value'&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Index Range Scan (인덱스 범위 스캔)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인덱스의 특정 범위 내에서 여러 행을 찾을 때 사용.&lt;/li&gt;
&lt;li&gt;일반적으로 조건절에 범위 조건이 포함될 때 사용&lt;br /&gt;ex) SELECT * FROM table WHERE indexed_column BETWEEN 'value1' AND 'value2'&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Index Skip Scan (인덱스 스킵 스캔)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인덱스의 선행 컬럼이 조건에 포함되지 않았을 때 사용&lt;/li&gt;
&lt;li&gt;인덱스의 일부 컬럼을 건너뛰고 후속 컬럼을 사용하여 검색&lt;/li&gt;
&lt;li&gt;ex) SELECT * FROM table WHERE indexed_column2 = 'value' (indexed_column1은 조건에 포함되지 않음)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Index Full Scan (인덱스 풀 스캔)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인덱스 전체를 순차적으로 스캔&lt;/li&gt;
&lt;li&gt;주로 인덱스의 선행 컬럼 조건이 없거나, 인덱스 전체에 대한 접근이 필요한 경우 사용&lt;/li&gt;
&lt;li&gt;ex) SELECT * FROM table WHERE non_indexed_column = 'value'&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Index Fast Full Scan (인덱스 패스트 풀 스캔)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인덱스의 전체 데이터를 빠르게 스캔.&lt;/li&gt;
&lt;li&gt;테이블 전체 스캔 대신 사용되며, 모든 인덱스 컬럼에 접근해야 하는 경우에 유용함.&lt;/li&gt;
&lt;li&gt;ex) SELECT indexed_column1, indexed_column2 FROM table&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Index Join Scan (인덱스 조인 스캔)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;여러 인덱스를 조인하여 데이터 검색&lt;/li&gt;
&lt;li&gt;주로 복합 인덱스를 사용할 수 없는 경우 사용됨&lt;/li&gt;
&lt;li&gt;ex) SELECT * FROM table WHERE indexed_column1 = 'value1' AND indexed_column2 = 'value2'&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Index Block Scan (인덱스 블록 스캔)&lt;/b&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인덱스의 블록을 한 번에 읽어들이는 방식으로 대량의 데이터에 접근할 때 사용.&lt;/li&gt;
&lt;li&gt;특정 데이터베이스 시스템에서만 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Dev/Database</category>
      <category>oracle 인덱스스캔종류</category>
      <category>오라클 인덱스 종류</category>
      <category>인덱스 속도</category>
      <category>인덱스 종류</category>
      <category>인덱스 종류별 속도</category>
      <category>인덱스스캔종류</category>
      <category>인덱스스캔종류별 속도</category>
      <author>알굼</author>
      <guid isPermaLink="true">https://toddlerprogrammer.tistory.com/173</guid>
      <comments>https://toddlerprogrammer.tistory.com/173#entry173comment</comments>
      <pubDate>Tue, 9 Jul 2024 08:32:04 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle/MSSQL] WHERE 조건절 순서에 따른 속도차이, 조건절 순서 속도, WHERE 절 속도차이</title>
      <link>https://toddlerprogrammer.tistory.com/172</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;TABLE에서 INDEX 가 참조하는 컬럼이 A,B,C 일때, 아래 두 쿼리중에 실행속도는 뭐가 더 빠를까?&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. SELECT * FROM TABLE WHERE A = 1 AND B=2 AND C=3 &lt;br /&gt;2. SELECT * FROM TABLE WHERE A = 1 AND C=3 AND B=2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;두 쿼리의 실행 속도는 사실상 동일하다. 왜냐하면, 데이터베이스의 쿼리 최적화 엔진이 WHERE 절의 조건 순서를 자동으로 최적화하여 가장 효율적인 방법으로 쿼리를 실행하기 때문이다. &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;옵티마이저가 똑똑해서 쿼리의 WHERE절을 살펴보고 키가 있는것을 우선 적용해 검색을 한다. 단, 인덱스의 쿼리가 모두 조건절에 들어있어야 인덱스를 100% 활용한다고 볼 수 있다.&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;​&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를 들어, 다음 두 쿼리는:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;SELECT * FROM TABLE WHERE A = 1 AND B=2 AND C=3&lt;/li&gt;
&lt;li&gt;SELECT * FROM TABLE WHERE A = 1 AND C=3 AND B=2&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 경우, 인덱스가 컬럼 A, B, C 순으로 정의되어 있다면 데이터베이스는 이 인덱스를 사용하여 조건을 효율적으로 평가할 것입니다.&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; WHERE 절의 조건 순서는 인덱스를 사용하는 데 있어 차이를 만들지 않는다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대부분의 데이터베이스 시스템(예: Oracle, MySQL, PostgreSQL)은 &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;쿼리 최적화 엔진이 WHERE 절의 조건을 최적의 순서로 재배열하여 인덱스를 최대한 활용할 수 있도록 한다.&lt;/b&gt; &lt;b&gt;그러므로, 두 쿼리의 실행 속도는 동일하다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;단, 아래와 같은 쿼리일때는 선행 컬럼인 A 를 포함하지 않기 때문에 인덱스가 적용되지 않는다.&lt;br /&gt;선행컬럼을 포함해야만 인덱스가 적용된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1. SELECT * FROM TABLE WHERE C=1, D=1, E=1;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;</description>
      <category>Dev/Database</category>
      <category>mssql</category>
      <category>oracle</category>
      <category>where절 속도차이</category>
      <category>where절 순서 속도</category>
      <category>쿼리튜닝</category>
      <author>알굼</author>
      <guid isPermaLink="true">https://toddlerprogrammer.tistory.com/172</guid>
      <comments>https://toddlerprogrammer.tistory.com/172#entry172comment</comments>
      <pubDate>Thu, 4 Jul 2024 13:40:53 +0900</pubDate>
    </item>
    <item>
      <title>[Javascript] 자바스크립트 실행시간, 자바스트립트 디버깅</title>
      <link>https://toddlerprogrammer.tistory.com/171</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;자바스크립트에서 기본 객체인 Date() 를 이용하여 쉽게 실행시간을 측정할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1719890689243&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;function hello() {
  console.log('start hello');
}

let start = new Date();  // 시작
console.log('시작시간: ' + start.toISOString());	// 시작한 시간 2024-07-03T06:49:04.927Z
hello();
let end = new Date();  // 종료

console.log('소요시간 = ' + (end - start)); // 경과시간(ms)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Dev/Frontend</category>
      <category>javascript 디버깅</category>
      <category>javascript 실행시간</category>
      <category>자바스크립트 실행시간</category>
      <author>알굼</author>
      <guid isPermaLink="true">https://toddlerprogrammer.tistory.com/171</guid>
      <comments>https://toddlerprogrammer.tistory.com/171#entry171comment</comments>
      <pubDate>Wed, 3 Jul 2024 16:04:42 +0900</pubDate>
    </item>
    <item>
      <title>[Java/Eclipse] 디버깅 로그, 자바 현재시간, 현재타임, 프로그램 소요시간, java 소요시간, java 시스템시간, java 로그찍기</title>
      <link>https://toddlerprogrammer.tistory.com/170</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;java 서비스 실행시간을 측정하기 위하여 currentTimeMillis() 라는 시스템 함수를 사용할 수 있다.&lt;br /&gt;서비스 호출 전, 후로 시간을 기록한 다음, log4j 를 이용하여 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1719885925359&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@RequestMapping(&quot;/wms/inbound/json/SaveStudentInfo.*&quot;)
public String SaveStudentInfo(HttpServletRequest request, Map model) throws Exception{
	// 시작시간
	long start = System.currentTimeMillis();
	DataMap map = (DataMap)request.getAttribute(CommonConfig.PARAM_ATT_KEY);
    
	// 서비스 실행
	Object data = StudentService.saveStudentInfo(map);
	model.put(&quot;data&quot;, data);
    
    // 종료시간
	long end = System.currentTimeMillis();
    
    // 소요시간
	log.info(&quot;소요시간 = &quot; + (end - start) + &quot;초&quot;);
	return JSON_VIEW;
}&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Dev/Backend</category>
      <category>java 로그찍기</category>
      <category>java 소요시간</category>
      <category>java 시스템시간</category>
      <category>java 현재시간</category>
      <category>자바 디버깅로그</category>
      <category>자바 로그</category>
      <category>자바 시스템 타임</category>
      <category>자바 시스템시간</category>
      <category>자바 현재시간</category>
      <category>프로그램 소요시간</category>
      <author>알굼</author>
      <guid isPermaLink="true">https://toddlerprogrammer.tistory.com/170</guid>
      <comments>https://toddlerprogrammer.tistory.com/170#entry170comment</comments>
      <pubDate>Tue, 2 Jul 2024 11:11:22 +0900</pubDate>
    </item>
  </channel>
</rss>