<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>파워노트</title>
    <link>https://powernote.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Mon, 8 Jun 2026 13:17:52 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>파워킴</managingEditor>
    <item>
      <title>범위 검색 비교 연산자 보다는 BETWEEN ~ AND 사용하기</title>
      <link>https://powernote.tistory.com/70</link>
      <description>&lt;h3 style=&quot;box-sizing: border-box; margin-bottom: 5px; border-right-width: 0px; word-spacing: 3px; margin-top: 5px; border-bottom: #0404B4 2px solid; border-left: #0404B4 12px solid; letter-spacing: 1px; line-height: 1.5; border-top-width: 0px; margin-right: 0px; border-image: initial; padding: 3px 5px 3px 5px;&quot; data-ke-size=&quot;size23&quot;&gt;BETWEEN&amp;nbsp;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;BETWEEN연산자를 사용하면 테스트할 범위를 지정할 수 있습니다&amp;nbsp;.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;연산자를 사용하여 BETWEEN 문에서&amp;nbsp; 반환된 행에 대한 검색 조건을 구성하면&amp;nbsp;&lt;a href=&quot;https://www.oracletutorial.com/oracle-basics/oracle-select/&quot;&gt;SELECT&lt;/a&gt;값이 지정된 범위에 있는 행만 반환됩니다.&lt;/li&gt;
&lt;li&gt;다음은 &lt;span&gt;BETWEEN&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/span&gt;연산자 의 구문을 보여줍니다 .&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1668604966174&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;expression [ NOT ] BETWEEN low AND high&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;해당구문은 아래와 같음을 의미 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1668605775746&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;value &amp;gt;= low AND value &amp;lt;= high&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;h3 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 6px; word-spacing: 3px; border-bottom-style: solid; border-bottom-color: #cccccc; padding: 3px 7px; border-left-style: solid; border-left-color: #55555b; margin: 5px 8px; letter-spacing: 1px; line-height: 1.2; border-image: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;between 예제 - 사이 숫자값&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;text-align: left;&quot; 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;144&quot; data-origin-height=&quot;165&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/WbhDh/btrRn0O0aJc/D2jaXfyr2SQtptigXn0Gak/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/WbhDh/btrRn0O0aJc/D2jaXfyr2SQtptigXn0Gak/img.png&quot; data-alt=&quot;[ 상품 테이블 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/WbhDh/btrRn0O0aJc/D2jaXfyr2SQtptigXn0Gak/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWbhDh%2FbtrRn0O0aJc%2FD2jaXfyr2SQtptigXn0Gak%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;144&quot; height=&quot;165&quot; data-origin-width=&quot;144&quot; data-origin-height=&quot;165&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 상품 테이블 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다음 구문은 비용이 500에서 600 사이인 제품을 반환합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1668605964623&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
    product_name,
    standard_cost
FROM
    products
WHERE
    standard_cost BETWEEN 500 AND 600
ORDER BY
    standard_cost;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #f5f5f5; color: #da1039;&quot;&gt;standard_cost 열이 500~600 범위를 비교 하여 해당범위 제품만을 반환했습니다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f5f5f5; color: #da1039;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #f5f5f5; color: #da1039;&quot;&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;329&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bx4TwM/btrRoRcYmxo/kx9yMiVBw6EsIKe6xSFwk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bx4TwM/btrRoRcYmxo/kx9yMiVBw6EsIKe6xSFwk1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bx4TwM/btrRoRcYmxo/kx9yMiVBw6EsIKe6xSFwk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbx4TwM%2FbtrRoRcYmxo%2Fkx9yMiVBw6EsIKe6xSFwk1%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;356&quot; height=&quot;329&quot; data-origin-width=&quot;356&quot; data-origin-height=&quot;329&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 6px; word-spacing: 3px; border-bottom-style: solid; border-bottom-color: #cccccc; padding: 3px 7px; border-left-style: solid; border-left-color: #55555b; margin: 5px 8px; letter-spacing: 1px; line-height: 1.2; border-image: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;between 예제 - 사이 숫자값이 아닌경우&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;다음 구문은 비용이 500에서 600 사이인 제품이 아닌경우만을 반환 합니다 .&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1668606147813&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
    product_name,
    standard_cost
FROM
    products
WHERE
    standard_cost NOT BETWEEN 500 AND 600
ORDER BY
    product_name;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;standard_cost 열이 500~600 가 아닌 제품을 반환&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;386&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF6G5I/btrRpZhhqbG/iWiGOPecPDnckKKtctabP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF6G5I/btrRpZhhqbG/iWiGOPecPDnckKKtctabP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF6G5I/btrRpZhhqbG/iWiGOPecPDnckKKtctabP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF6G5I%2FbtrRpZhhqbG%2FiWiGOPecPDnckKKtctabP0%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;386&quot; height=&quot;203&quot; data-origin-width=&quot;386&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 6px; word-spacing: 3px; border-bottom-style: solid; border-bottom-color: #cccccc; padding: 3px 7px; border-left-style: solid; border-left-color: #55555b; margin: 5px 8px; letter-spacing: 1px; line-height: 1.2; border-image: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;between 예제 - 날짜값 비교 ( X )&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/h3&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;144&quot; data-origin-height=&quot;145&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDbjPJ/btrRn5JsuAY/4k2fPU0RBjmdNXQwXTzTk1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDbjPJ/btrRn5JsuAY/4k2fPU0RBjmdNXQwXTzTk1/img.png&quot; data-alt=&quot;[ 주문 테이블 ]&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDbjPJ/btrRn5JsuAY/4k2fPU0RBjmdNXQwXTzTk1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDbjPJ%2FbtrRn5JsuAY%2F4k2fPU0RBjmdNXQwXTzTk1%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;144&quot; height=&quot;145&quot; data-origin-width=&quot;144&quot; data-origin-height=&quot;145&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;[ 주문 테이블 ]&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;주문일이 2016-12-01 과 2016-12-31 사이의 주문값만을 반환 합니다 .&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1668606241933&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT
    order_id,
    customer_id,
    status,
    order_date
FROM
    orders
WHERE
     order_date BETWEEN TO_DATE( '2016-12-01', 'YYYY-MM-DD' ) AND  TO_DATE( '2016-12-31', 'YYYY-MM-DD' )
ORDER BY
    order_date;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;결과는 다음과 같습니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;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;310&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/X8mkv/btrRnJ7Phz1/DW3KzCSn1gozjxJQ4eFt3K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/X8mkv/btrRnJ7Phz1/DW3KzCSn1gozjxJQ4eFt3K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/X8mkv/btrRnJ7Phz1/DW3KzCSn1gozjxJQ4eFt3K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FX8mkv%2FbtrRnJ7Phz1%2FDW3KzCSn1gozjxJQ4eFt3K%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;310&quot; data-origin-width=&quot;572&quot; data-origin-height=&quot;310&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h3 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 6px; word-spacing: 3px; border-bottom-style: solid; border-bottom-color: #cccccc; padding: 3px 7px; border-left-style: solid; border-left-color: #55555b; margin: 5px 8px; letter-spacing: 1px; line-height: 1.2; border-image: initial;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&lt;span style=&quot;font-size: 21px;&quot;&gt;between 예제 - 날짜값 비교 ( 시간값 포함 )&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;날짜 비교시에는 주의 사항이 있다 .&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;2016-12-10 과 2016-12-02 날짜로&amp;nbsp; 비교 조회시 2016-12-02 일 날짜의 정보를 반환하지 못한다 .&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1668607169623&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; SELECT
    order_id,
    customer_id,
    status,
    order_date
FROM
    orders
WHERE
    order_date BETWEEN TO_DATE( '2016-12-01', 'YYYY-MM-DD' ) AND  TO_DATE( '2016-12-02', 'YYYY-MM-DD' )
ORDER BY
    order_date;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;아래와 같이 2016-12-02일 날짜가 반환되지 않았다.. 의도 하지 않은 결과이다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;183&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvIGaQ/btrRnDfEaeI/kBx5NgyDLeGs8ShfjpoGlK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvIGaQ/btrRnDfEaeI/kBx5NgyDLeGs8ShfjpoGlK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvIGaQ/btrRnDfEaeI/kBx5NgyDLeGs8ShfjpoGlK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvIGaQ%2FbtrRnDfEaeI%2FkBx5NgyDLeGs8ShfjpoGlK%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;390&quot; height=&quot;180&quot; data-origin-width=&quot;396&quot; data-origin-height=&quot;183&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;pre id=&quot;code_1668608902361&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt; SELECT
    order_id,
    customer_id,
    status,
    order_date
FROM
    orders
WHERE
    order_date BETWEEN TO_DATE( '2016-12-01', 'YYYY-MM-DD' ) 
          AND  TO_DATE( '2016-12-02', 'YYYY-MM-DD' ) + 0.99999
ORDER BY
    order_date;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2016-12-02 날짜를 포함한 내용을 처리 하고 싶다면 해당 날짜의 23:59:59 초 나타내야 한다.&amp;nbsp;&lt;/li&gt;
&lt;li&gt;또는&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt; 0.99999&lt;/b&gt; &lt;/span&gt;를 더하여&amp;nbsp; 2016-12-02 23:59:59 초가 되도록 한다.\&lt;/li&gt;
&lt;li&gt;날짜 비교의 경우&amp;nbsp; DATE type의 경우 기본적으로 시분초를 포함하는 데이터이므로&amp;nbsp;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;2016-12-01 00:00:00 ~ 2016-12-02:00:00:00&lt;/b&gt;&lt;/span&gt;&amp;nbsp; 의&amp;nbsp; 데이터를 처리한다. 그러므로 2016-12-02 일의 데이터를 포함시키고자 한다면 2016-12-02 23:59:59 초의 데이터와 비교 처리 해야 한다.&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>oracle</category>
      <category>between</category>
      <category>between date</category>
      <category>between 날짜</category>
      <category>date</category>
      <category>oracle</category>
      <category>oracle between</category>
      <category>날짜비교</category>
      <author>파워킴</author>
      <guid isPermaLink="true">https://powernote.tistory.com/70</guid>
      <comments>https://powernote.tistory.com/70#entry70comment</comments>
      <pubDate>Wed, 16 Nov 2022 21:32:11 +0900</pubDate>
    </item>
    <item>
      <title>Python 개발 환경 구성</title>
      <link>https://powernote.tistory.com/69</link>
      <description>&lt;h3 style=&quot;box-sizing: border-box; margin-bottom: 5px; border-right-width: 0px; word-spacing: 3px; margin-top: 5px; border-bottom: #0404B4 2px solid; border-left: #0404B4 12px solid; letter-spacing: 1px; line-height: 1.5; border-top-width: 0px; margin-right: 0px; border-image: initial; padding: 3px 5px 3px 5px;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;ubuntu 환경에서 정리&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 6px; word-spacing: 3px; border-bottom-style: solid; border-bottom-color: #cccccc; padding: 3px 7px; border-left-style: solid; border-left-color: #55555b; margin: 5px 8px; letter-spacing: 1px; line-height: 1.2; border-image: initial;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;설치&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;sudo apt update&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;sudo apt install python3&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;sudo apt install python3-venv&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;sudo apt install python3-pip&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 6px; word-spacing: 3px; border-bottom-style: solid; border-bottom-color: #cccccc; padding: 3px 7px; border-left-style: solid; border-left-color: #55555b; margin: 5px 8px; letter-spacing: 1px; line-height: 1.2; border-image: initial;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;가상환경 사용&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;mkdir hello&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;cd hello &lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;python3 -m venv .myenv&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;source ./.myenv/bin/activate&amp;nbsp; &lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp;&lt;b&gt;[가상환경 활성화 ]&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Windows에서는 ./.myenv/Scripts/activate&lt;/blockquote&gt;
&lt;p style=&quot;position: absolute;&quot; 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;443&quot; data-origin-height=&quot;64&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BQtJ7/btrPQfGLB2U/DsFa5K2pYzQVgmYQH0Goq1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BQtJ7/btrPQfGLB2U/DsFa5K2pYzQVgmYQH0Goq1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BQtJ7/btrPQfGLB2U/DsFa5K2pYzQVgmYQH0Goq1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBQtJ7%2FbtrPQfGLB2U%2FDsFa5K2pYzQVgmYQH0Goq1%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;443&quot; height=&quot;64&quot; data-origin-width=&quot;443&quot; data-origin-height=&quot;64&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;deactivate &lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&amp;nbsp;&lt;b&gt;[가상환경 비활성화 ]&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;54&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ytNzE/btrUOQPPIzk/4KgjHPxs8lAw8FwZR6iUmk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ytNzE/btrUOQPPIzk/4KgjHPxs8lAw8FwZR6iUmk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ytNzE/btrUOQPPIzk/4KgjHPxs8lAw8FwZR6iUmk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FytNzE%2FbtrUOQPPIzk%2F4KgjHPxs8lAw8FwZR6iUmk%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;620&quot; height=&quot;54&quot; data-origin-width=&quot;620&quot; data-origin-height=&quot;54&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 style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 6px; word-spacing: 3px; border-bottom-style: solid; border-bottom-color: #cccccc; padding: 3px 7px; border-left-style: solid; border-left-color: #55555b; margin: 5px 8px; letter-spacing: 1px; line-height: 1.2; border-image: initial;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Nanum Gothic';&quot;&gt;가상환경 진행 ( 자주&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;사용하는&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;모듈&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;설치 )&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;sudo pip install bs4&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;sudo pip install requests&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;sudo pip install selenium&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 6px; word-spacing: 3px; border-bottom-style: solid; border-bottom-color: #cccccc; padding: 3px 7px; border-left-style: solid; border-left-color: #55555b; margin: 5px 8px; letter-spacing: 1px; line-height: 1.2; border-image: initial;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;개발&lt;/span&gt;&lt;span&gt; Dependency &lt;/span&gt;&lt;span&gt;저장&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;pip freeze &amp;gt; pip-requirements.txt&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;vi pip-requirements.txt&lt;/span&gt;&lt;span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;309&quot; data-origin-height=&quot;170&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dK8Lzr/btrPOYTVhMF/NuIs6PJhENgW714KPNOLA0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dK8Lzr/btrPOYTVhMF/NuIs6PJhENgW714KPNOLA0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dK8Lzr/btrPOYTVhMF/NuIs6PJhENgW714KPNOLA0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdK8Lzr%2FbtrPOYTVhMF%2FNuIs6PJhENgW714KPNOLA0%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;309&quot; height=&quot;170&quot; data-origin-width=&quot;309&quot; data-origin-height=&quot;170&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;box-sizing: border-box; font-family: Arial, 돋움, Dotum, AppleGothic, sans-serif; border-width: 0px 0px 2px 6px; word-spacing: 3px; border-bottom-style: solid; border-bottom-color: #cccccc; padding: 3px 7px; border-left-style: solid; border-left-color: #55555b; margin: 5px 8px; letter-spacing: 1px; line-height: 1.2; border-image: initial;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span&gt;저장된&lt;/span&gt;&lt;span&gt; Dependency &lt;/span&gt;&lt;span&gt;설치&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;pi&lt;/span&gt;&lt;span&gt;p install pip-requirements.txt&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>python</category>
      <category>freeze</category>
      <category>PIP</category>
      <category>Python</category>
      <category>python venv</category>
      <category>python 개발환경</category>
      <category>requirements</category>
      <category>가상환경설정</category>
      <author>파워킴</author>
      <guid isPermaLink="true">https://powernote.tistory.com/69</guid>
      <comments>https://powernote.tistory.com/69#entry69comment</comments>
      <pubDate>Fri, 28 Oct 2022 22:26:36 +0900</pubDate>
    </item>
    <item>
      <title>[ 오라클 팁 ]  콤마로 나열된 배열 스트링에서 단어 찾기. feature REGEXP_LIKE</title>
      <link>https://powernote.tistory.com/68</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;!--문단 마지막 사용 시작--&gt;&lt;/p&gt;
&lt;p style=&quot;float: none; clear: none;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;font-family: dotum, sans-serif; color: #1f1f1f; border-left: 10px solid #ff327f; margin: 0px 0px 10px; letter-spacing: -1px; line-height: normal; font-stretch: normal; padding: 0px 0px 0px 7px;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-size: 21px; color: #ff327f; font-family: Arial;&quot;&gt;REGEXP_LIKE 를 사용한 정규화 식으로&amp;nbsp; 데이터 찾기&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;!--문단 마지막 사용 끝--&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;콤마로&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;나열된&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;배열&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;스트링에서&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;단어&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;찾기&lt;/span&gt;&lt;span&gt;. &lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;[ 테스트 쿼리 ]&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1666959040295&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;WITH NAMET AS
(
    SELECT '홍길동, 이길동, 김동길' NAME FROM DUAL
    UNION
    SELECT '홍길1, 이동길, 김김동' NAME FROM DUAL
    UNION
    SELECT '홍길2, 이동길3, 김김동' NAME FROM DUAL
)



SELECT * FROM NAMET
WHERE REGEXP_LIKE (NAME, '(^|,) 이동길($|,)')
;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;REGEXP_LIKE (NAME, '(^|,) 이동길($|,)')&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&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;($|,) : 마지막이 거나 , 인지&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&amp;nbsp;[쿼리 결과 ]&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;180&quot; data-origin-height=&quot;42&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bX7tOk/btrPQIBFn4z/DklwOvcmQDkzuPTAw4OKO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bX7tOk/btrPQIBFn4z/DklwOvcmQDkzuPTAw4OKO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bX7tOk/btrPQIBFn4z/DklwOvcmQDkzuPTAw4OKO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbX7tOk%2FbtrPQIBFn4z%2FDklwOvcmQDkzuPTAw4OKO1%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;180&quot; height=&quot;42&quot; data-origin-width=&quot;180&quot; data-origin-height=&quot;42&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>oracle</category>
      <category>oracle</category>
      <category>REGEXP_LIKE</category>
      <category>Where</category>
      <category>배열스트링</category>
      <category>콤마</category>
      <author>파워킴</author>
      <guid isPermaLink="true">https://powernote.tistory.com/68</guid>
      <comments>https://powernote.tistory.com/68#entry68comment</comments>
      <pubDate>Fri, 28 Oct 2022 21:14:03 +0900</pubDate>
    </item>
    <item>
      <title>[ 오라클 팁 ] 오라클 테이블 복사하기.</title>
      <link>https://powernote.tistory.com/67</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;1. 테이블 복사 스키마 (데이터도 복사O)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CREATE TABLE&lt;span&gt; &lt;b&gt;&lt;span&gt;[NEW_TABLE] &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;AS&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SELECT * FROM&lt;span&gt; &lt;b&gt;&lt;span&gt;[OLD_TABLE]&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;/b&gt;&lt;/span&gt;[WHERE 절]&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;span&gt;2. 테이블 구조만 복사&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CREATE TABLE&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;[NEW_TABLE]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;AS&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SELECT * FROM&lt;b&gt;&lt;span&gt; [OLD_TABLE]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;WHERE 1=2&amp;nbsp; ( where절은 true가 아닌값을 조건으로 처리 )&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;span style=&quot;color: #000000;&quot;&gt;3. 테이블은 이미 생성되어 있고 데이터만 복사 (&lt;/span&gt;&lt;span&gt;&lt;span&gt;테이블 구조가 동일한 경우&lt;/span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;INSERT INTO &lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;[NEW_TABLE]&lt;/span&gt;&lt;/b&gt;&amp;nbsp;SELECT * FROM&lt;span&gt; &lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[OLD_TABLE]&lt;/span&gt;&lt;span&gt; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;[WHERE 절]&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size18&quot;&gt;&lt;br /&gt;&lt;b&gt;&lt;span&gt;4. 테이블은 이미 생성되어 있고 데이터만 복사 (&lt;span&gt;테이블 구조가 다른 경우&lt;/span&gt;)&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;INSERT INTO &lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;[NEW_TABLE]&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/span&gt;(ID, NAME, TEL) SELECT ID, NAME, TEL FROM &lt;b&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;[OLD_TABLE]&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;</description>
      <category>oracle</category>
      <category>create table</category>
      <category>oracle</category>
      <category>테이블 복사</category>
      <author>파워킴</author>
      <guid isPermaLink="true">https://powernote.tistory.com/67</guid>
      <comments>https://powernote.tistory.com/67#entry67comment</comments>
      <pubDate>Mon, 26 Sep 2022 21:26:58 +0900</pubDate>
    </item>
    <item>
      <title>oracle 테이블 정보, 컬럼 정보, 인덱스 정보, 코멘트 정보, 시노님 정보 조회</title>
      <link>https://powernote.tistory.com/66</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1.&amp;nbsp;접두사&amp;nbsp;종류&amp;nbsp;3가지&amp;nbsp;:&amp;nbsp;권한&amp;nbsp;및&amp;nbsp;조회&amp;nbsp;범위에&amp;nbsp;따라&amp;nbsp;사용 &lt;br /&gt;-&amp;nbsp;DBA/ALL/USER &lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;Object&amp;nbsp;조회&amp;nbsp;:&amp;nbsp;오브젝트&amp;nbsp;조회 &lt;br /&gt;SELECT&amp;nbsp;* &lt;br /&gt;FROM&amp;nbsp;ALL_OBJECTS &lt;br /&gt;WHERE&amp;nbsp;OBJECT_NAME&amp;nbsp;LIKE&amp;nbsp;'명' &lt;br /&gt;&lt;br /&gt;&lt;br /&gt;3.&amp;nbsp;테이블&amp;nbsp;조회&amp;nbsp; &lt;br /&gt;SELECT&amp;nbsp;* &lt;br /&gt;FROM&amp;nbsp;ALL_TABLES &lt;br /&gt;WHERE&amp;nbsp;TABLE_NAME&amp;nbsp;LIKE&amp;nbsp;'명' &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;4.&amp;nbsp;Synonym&amp;nbsp;조회 &lt;br /&gt;SELECT&amp;nbsp;* &lt;br /&gt;FROM&amp;nbsp;ALL_SYNONYMS &lt;br /&gt;WHERE&amp;nbsp;SYNONYM_NAME&amp;nbsp;=&amp;nbsp;'명' &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;5.&amp;nbsp;인덱스&amp;nbsp;정보&amp;nbsp;조회 &lt;br /&gt;SELECT&amp;nbsp;* &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FROM&amp;nbsp;ALL_IND_COLUMNS &lt;br /&gt;&amp;nbsp;WHERE&amp;nbsp;TABLE_NAME&amp;nbsp;=&amp;nbsp;'테이블명' &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;6.&amp;nbsp;컬럼&amp;nbsp;정보&amp;nbsp;조회 &lt;br /&gt;SELECT&amp;nbsp;* &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;FROM&amp;nbsp;ALL_TAB_COLUMNS &lt;br /&gt;&amp;nbsp;WHERE&amp;nbsp;TABLE_NAME&amp;nbsp;=&amp;nbsp;'테이블명' &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;7.&amp;nbsp;테이블&amp;nbsp;COMMENT&amp;nbsp;조회 &lt;br /&gt;&amp;nbsp;&amp;nbsp;SELECT&amp;nbsp;* &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FROM&amp;nbsp;ALL_TAB_COMMENTS &lt;br /&gt;&amp;nbsp;&amp;nbsp;WHERE&amp;nbsp;TABLE_NAME&amp;nbsp;=&amp;nbsp;'테이블명' &lt;br /&gt;&lt;br /&gt;&amp;nbsp; &lt;br /&gt;&lt;br /&gt;8.&amp;nbsp;컬럼(COLUMN)&amp;nbsp;COMMENT&amp;nbsp;조회 &lt;br /&gt;&amp;nbsp;&amp;nbsp;SELECT&amp;nbsp;* &lt;br /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;FROM&amp;nbsp;ALL_COL_COMMENTS &lt;br /&gt;&amp;nbsp;&amp;nbsp;WHERE&amp;nbsp;TABLE_NAME&amp;nbsp;=&amp;nbsp;'테이블명'&lt;/p&gt;</description>
      <category>oracle</category>
      <author>파워킴</author>
      <guid isPermaLink="true">https://powernote.tistory.com/66</guid>
      <comments>https://powernote.tistory.com/66#entry66comment</comments>
      <pubDate>Mon, 26 Sep 2022 21:20:43 +0900</pubDate>
    </item>
    <item>
      <title>[TIP] Oracle CHAR(8) 은 고정자리수 .. '0' 이 아니라 '0        ' 이였다.</title>
      <link>https://powernote.tistory.com/65</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[참고]&amp;nbsp; &lt;a href=&quot;https://kasckasc.tistory.com/entry/Oracle-CHAR-VARCHAR-VARCHAR2-%EC%B0%A8%EC%9D%B4&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://kasckasc.tistory.com/entry/Oracle-CHAR-VARCHAR-VARCHAR2-%EC%B0%A8%EC%9D%B4&lt;/a&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;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;* CHAR와 VARCHAR (VARCHAR2)의 비교&lt;/span&gt;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;문자의 경우 CHAR와 VARCHAR의 차이는 저장 영역과 문자열의 비교 방법이다.&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;VARCHAR 유형은 가변 길이이므로 필요한 영역은 실제 데이터 크기뿐이다. 그렇기 때문에 길이가 다양한 컬럼과, 정의된 길이와 실제 데이터 길이에 차이가 있는 컬럼에 적합하다.&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;저장 측면에서도 CHAR 유형보다 작은 영역에 저장할 수 있으므로 장점이 있다.&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;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;비교 방법에서도 차이가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #dddddd; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;CHAR 에서는 문자열을 비교할 때 공백을 채워서 비교하는 방법을 사용한다. CHAR(8) 이고 'AA'가 저장되어 있다면, 'AA' 뒤에 공백 6자리를 붙여 8자리로 비교하는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; background-color: #dddddd; font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;따라서 &amp;nbsp;'AA' = 'AA &amp;nbsp;' 은 실제로 'AA &amp;nbsp; &amp;nbsp; &amp;nbsp;' = 'AA &amp;nbsp; &amp;nbsp; &amp;nbsp;' 가 되어 같다는 결과가 나온다.&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;&amp;nbsp;&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;반면에 VARCHAR 에서는 공백도 하나의 문자로 취급하므로 끝에 공백이 들어가면 다른 문자로 판단한다.&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;같은 예로 들면 'AA' != 'AA ' &amp;nbsp;로 공백이 있어 서로 다른 문자로 판단한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;따라서 이름, 주소 등의&amp;nbsp;&lt;b&gt;길이가 변할 수 있는 값&lt;/b&gt;은&amp;nbsp;&lt;b&gt;VARCHAR&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;사번, 주민등록번호와 같이&amp;nbsp;&lt;b&gt;길이가 일정한 데이터&lt;/b&gt;는&amp;nbsp;&lt;b&gt;CHAR&lt;/b&gt;를 사용하는게 좋다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;더불어 오라클에서는 VARCHAR는 추후 별도의 데이터유형으로 사용할 예정이기에&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;VARCHAR2를 사용하는 것을 권장하고 있다.&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>oracle</category>
      <category>Char</category>
      <category>oracle</category>
      <category>VARCHAR</category>
      <category>VARCHAR2</category>
      <author>파워킴</author>
      <guid isPermaLink="true">https://powernote.tistory.com/65</guid>
      <comments>https://powernote.tistory.com/65#entry65comment</comments>
      <pubDate>Thu, 17 Mar 2022 10:13:46 +0900</pubDate>
    </item>
    <item>
      <title>tomcat 성능 향상. maxKeepAliveRequests=&amp;quot;1&amp;quot;</title>
      <link>https://powernote.tistory.com/64</link>
      <description>&lt;h3 data-ke-size=&quot;size23&quot;&gt;# 톰캣 튜닝 및 성능 향상과 관련. ( server.xml )&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;https://bcho.tistory.com/788&lt;br /&gt;조대협님의 글을 참고 한다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&amp;lt;Connector URIEncoding=&quot;utf-8&quot; port=&quot;8080&quot; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; protocol=&quot;HTTP/1.1&quot; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; connectionTimeout=&quot;3000&quot; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; redirectPort=&quot;8443&quot; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxThreads=&quot;1000&quot; &lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; maxKeepAliveRequests=&quot;1&quot;/&amp;gt;&lt;/blockquote&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #fcfcfc; color: #666666;&quot;&gt;maxKeepAliveRequests=&quot;1&quot; : &lt;span style=&quot;color: #555555;&quot;&gt;Kepp Alive&lt;/span&gt;&lt;span style=&quot;color: #555555;&quot;&gt;를 사용하지 않기위한 설정. 기본값은 100&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;</description>
      <category>spring legacy</category>
      <author>파워킴</author>
      <guid isPermaLink="true">https://powernote.tistory.com/64</guid>
      <comments>https://powernote.tistory.com/64#entry64comment</comments>
      <pubDate>Fri, 11 Mar 2022 14:34:33 +0900</pubDate>
    </item>
    <item>
      <title>@Async @Scheduler  ThreadPool 생성 및 사용.</title>
      <link>https://powernote.tistory.com/63</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;* Scheduler 및 비동기 처리 에 대해 Thread pool 생성 설정 및 사용을 해보자 .&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, 돋움, sans-serif;&quot;&gt;# xml 설정.&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ servlet-context.xml ]&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;task:executor id=&quot;AsyncExecutor&quot; pool-size=&quot;10-100&quot; queue-capacity=&quot;50&quot; /&amp;gt;
&amp;lt;task:scheduler id=&quot;SchedulerExecutor&quot; pool-size=&quot;5&quot; /&amp;gt;
&amp;lt;!-- @Async and @Scheduler 설정 executor 는 기본으로 사용할 executor 설정. 설정이 없을때는 @Async--&amp;gt;
&amp;lt;task:annotation-driven executor=&quot;AsyncExecutor&quot; scheduler=&quot;SchedulerExecutor&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;task:execute :&amp;nbsp; Async 비동기 처리시에 사용할 pool 설정.&lt;br /&gt;task:scheduler :&amp;nbsp; scheduler 에서 사용할 pool 설정&lt;br /&gt;task:annotation-driven : @Async @Scheduler 사용가능하게 하며,&amp;nbsp; 기본 async executor 및 scheduler 를 설정한다.&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;** (주의 사항 ) executor 가 설정되어 있지 않은경우 기본적으로 @Async&amp;nbsp; &amp;nbsp; &amp;nbsp;와 같이 (id 지정 사용없이 )를 사용하면 SimpleAsyncTaskExecutor를 이용하게 되어&amp;nbsp; 쓰레드제한 없이 무한으로 처리된다.&amp;nbsp;&lt;br /&gt;** 따라서 @Async(&quot;AsyncExecutor&quot;) 와 같이 명시적으로 사용하는것이&amp;nbsp; 깔끔함.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ * Scheduler -&amp;nbsp; &amp;nbsp;class 내에서의 사용 ]&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Scheduled(cron = &quot;10 * * * * *&quot;)
public void scheldulerlog() {
    log.info(&quot;############# Scheduler ############## [[ &quot; + Thread.currentThread().getName());
    try {
        Thread.sleep(2000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    log.info(&quot;############# Scheduler ############## ]] &quot; + Thread.currentThread().getName());
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ scheduled cron 표현식 ]&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;( cron = 10 * * * * * )
          1 2 3 4 5 6
1 : 초(0-59)
2 : 분(0-59)
3 : 시간(0-23)
4 : 일 (1-31)
5 : 월 (1-12)
6 : 요일 (0-7) 0과 7은 일요일이며, 1부터월요일 6이 토요일
* : 모든조건
? : 설정 값 없을 때 (날짜와 요일에서만 사용가능 )
- : 범위지정
, : 여러값 지정
/ : 초기값과 증가치 설정&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&gt;[&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;* Async -&amp;nbsp; &amp;nbsp;class 내에서의 사용 ]&amp;nbsp;&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;제약사항 :&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; 1. public 한 메소드에만 써야한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; 2. 같은 클레스 안에서 @Async를 적용한 메소드를 사용하면 작동하지 않는다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&amp;nbsp; &amp;nbsp; 3. return Type이 void이거나&amp;nbsp;Future객체를 사용해야 한다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;@Async(&quot;AsyncExecutor&quot;)
public void backgroundJob() {
    log.info(&quot;############# Async ############## [[&quot; + Thread.currentThread().getName());

    try {
        Thread.sleep(5000);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }

    log.info(&quot;############# Async ############## ]]&quot; + Thread.currentThread().getName());
}&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;</description>
      <category>spring legacy</category>
      <author>파워킴</author>
      <guid isPermaLink="true">https://powernote.tistory.com/63</guid>
      <comments>https://powernote.tistory.com/63#entry63comment</comments>
      <pubDate>Tue, 8 Mar 2022 00:54:07 +0900</pubDate>
    </item>
    <item>
      <title>spring legacy project 에서 log4j2.xml 을 profile로 관리 할때</title>
      <link>https://powernote.tistory.com/62</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;* spring 에서 logging 시스템은 중요한 부분을 차지 한다.&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;# log4j2.xml 의 profile별 관리&amp;nbsp;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;나의 경우 테스트 환경과 운영 서버 환경의 logfile 저장 경로가 달라 profile 별로 설정을 고려 해야 했다&lt;br /&gt;예를 들면 &lt;br /&gt;- 나의 로컬 개발 환경은 로그 저장경로가 /svc/powernote,&lt;br /&gt;- 운영 서버의 로그 저장경로는 /home/opc/logs&lt;/blockquote&gt;
&lt;pre id=&quot;code_1646389962944&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;Configuration xmlns=&quot;http://logging.apache.org/log4j/2.0/config&quot;&amp;gt;
    &amp;lt;Properties&amp;gt;
        &amp;lt;SystemPropertyArbiter propertyName=&quot;spring.profiles.active&quot; propertyValue=&quot;bhkim&quot;&amp;gt;
            &amp;lt;Property name=&quot;logPath&quot;&amp;gt;/svc/powernote&amp;lt;/Property&amp;gt; 
        &amp;lt;/SystemPropertyArbiter&amp;gt;
        &amp;lt;SystemPropertyArbiter propertyName=&quot;spring.profiles.active&quot; propertyValue=&quot;prod&quot;&amp;gt;
            &amp;lt;Property name=&quot;logPath&quot;&amp;gt;/home/svc/logs&amp;lt;/Property&amp;gt; 
        &amp;lt;/SystemPropertyArbiter&amp;gt;
        &amp;lt;Property name=&quot;layoutPattern&quot;&amp;gt;
                %style{%d{yyyy/MM/dd HH:mm:ss,SSS}}{cyan} %highlight{[%-5p]}{FATAL=bg_red, ERROR=red,
                INFO=green, DEBUG=blue} [%C{1.}] %style{[%t]}{yellow}- %m%n
        &amp;lt;/Property&amp;gt;
    &amp;lt;/Properties&amp;gt;
    &amp;lt;Appenders&amp;gt;
         &amp;lt;File name=&quot;file&quot; fileName=&quot;${logPath}/sample.log&quot; append=&quot;false&quot;&amp;gt;
            &amp;lt;PatternLayout pattern=&quot;${layoutPattern}&quot; /&amp;gt;
         &amp;lt;/File&amp;gt;
    &amp;lt;/Appenders&amp;gt;
 ...
 &amp;lt;/Configuration&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- SystemPropertyArbiter 를 통해 설정 할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- propertyName 는 properties 의 Key 값 이다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- propertyValue 는 properties 의 값에 해당한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;#&lt;span&gt;&amp;nbsp;&lt;/span&gt;log4j2-xxx.xml 의&amp;nbsp; 별도 관리 파일 ( 파일명 변경 및 위치 변경 )&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;서버 운영 환경에서의 별도로 로그를 꾸준히 설정을 변경하고 관리가 필요하여 외부 파일을 설정하는경우가 있다.&lt;br /&gt;이때 유용할 듯 하다.&lt;br /&gt;-Dlog4j.configurationFile 옵션 셜정을 통해 해결.&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;* 톰캣 실행시 catalina.sh 파일에 해당 옵션을 주어 실행하면&amp;nbsp; 해당 로그파일을 설정할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1646390398624&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;JAVA_OPTS=&quot;$JAVA_OPTS -Dlog4j.configurationFile=/home/svc/config/log4j2-prod.xml&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# 참고적으로 ~~&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;web.xml 에 아래와 같은 설정은 log4j2 에서는 통하지 않는것을&amp;nbsp; 알고 있으며 테스트 시에도 동작 하지 않는다.&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;&amp;lt;context-param&amp;gt;
   &amp;lt;param-name&amp;gt;log4jConfigLocation&amp;lt;/param-name&amp;gt;
   &amp;lt;param-value&amp;gt;classpath:log4j-${spring.profiles.active}.xml&amp;lt;/param-value&amp;gt;
&amp;lt;/context-param&amp;gt;
&amp;lt;listener&amp;gt;
   &amp;lt;listener-class&amp;gt;org.springframework.web.util.Log4jConfigListener&amp;lt;/listener-class&amp;gt;
&amp;lt;/listener&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한 spring 4.2.1 에서는 log4j 1.x가 EOL 로&amp;nbsp; &amp;nbsp;Deprecated Class로 관리 되고 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;527&quot; data-origin-height=&quot;216&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BsOas/btru7rt6vTW/gfrtsXnGY7w0Ik85Z3OqJ1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BsOas/btru7rt6vTW/gfrtsXnGY7w0Ik85Z3OqJ1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BsOas/btru7rt6vTW/gfrtsXnGY7w0Ik85Z3OqJ1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBsOas%2Fbtru7rt6vTW%2FgfrtsXnGY7w0Ik85Z3OqJ1%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;527&quot; height=&quot;216&quot; data-origin-width=&quot;527&quot; data-origin-height=&quot;216&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;그거므로 되도록이면 log4j2 를 사용하고&amp;nbsp; 경로 설정및 파일명 변경에 대해서는&amp;nbsp; catalina, 또는 java 실행 옵션으로 지정하는것이 좋을것 같다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Java 실행변수 -Dlog4j.configuration를 통한 log4j2.xml 위치 변경이 가능 합니다.&lt;br /&gt;또는 catarina 옵션 설정으로 set CATALINA_OPTS=-Dlog4j.configuration=log4j.xml 가능 합니다.&lt;br /&gt;[참고 ] : https://www.egovframe.go.kr/home/qainfo/qainfoRead.do?menuNo=69&amp;amp;qaId=QA_00000000000013124&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>spring legacy</category>
      <category>catalina log</category>
      <category>catalina.sh</category>
      <category>Java</category>
      <category>log4j profile</category>
      <category>log4j2</category>
      <category>profile</category>
      <category>Spring</category>
      <author>파워킴</author>
      <guid isPermaLink="true">https://powernote.tistory.com/62</guid>
      <comments>https://powernote.tistory.com/62#entry62comment</comments>
      <pubDate>Fri, 4 Mar 2022 19:41:01 +0900</pubDate>
    </item>
    <item>
      <title>spring properties 에 대해서...</title>
      <link>https://powernote.tistory.com/61</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;* 대충 정리 하자면 spring 3.1 정도에서&amp;nbsp; 좀 변화가 있었던거 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;# 일반적인 xml 설정.&amp;nbsp;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Spring 3.1이전에는&amp;lt;context:property-placeholder&amp;gt;를 정의하면 PropertyPlaceholderConfigurer를 사용하였다. Environment를 이용해 해당값을 가져올수 있다.&lt;br /&gt;물론 spring 3.1 이후에도 사용가능 하다.&lt;/blockquote&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;&amp;lt;context:property-placeholder location=&quot;/WEB-INF/config/jdbc-${spring.profiles.active}.properties&quot;  file-encoding=&quot;UTF-8&quot; /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;# property의 사용&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ application.properties ]&lt;/p&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;app.message.hello=&quot;i am a boy&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ class ]&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;@Value(&quot;${app.message.hello}&quot;)
String hello;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ class 내에서의 사용 ]&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot;&gt;&lt;code&gt;log.info(&quot;hello : {}&quot;, hello);&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;# spring 3.1 이후 변화&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;spring 3.1 이후 부터는 PropertySourcesPlaceholderConfigurer를 내부에서 사용하고 있으며 ${...} 값을 찾지 못하면 Environment에서 Properties를 가져온다. 그러나 Environment 변수에는 직접적으로 setting할수는 없어 Environment 변수 setting이 필요한 경우에는 PropertySource를 통해 사용자정의 구현이 필요 하다.&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;# PropertySourcesPlaceholderConfigurer&amp;nbsp; xml 설정.&amp;nbsp;&lt;/h3&gt;
&lt;pre class=&quot;dust&quot;&gt;&lt;code&gt;&amp;lt;beans:bean id=&quot;propertyConfigurer&quot; class=&quot;org.springframework.context.support.PropertySourcesPlaceholderConfigurer&quot;&amp;gt;
   &amp;lt;!-- 아래 properties 목록에서 없는 properties는 무시 --&amp;gt;
   &amp;lt;beans:property name=&quot;ignoreResourceNotFound&quot; value=&quot;true&quot; /&amp;gt;
       &amp;lt;!-- 만약 설정 요소가 존재하지 않아도 서버를 멈추지 않고 정상적으로 작동될 수 있도록 해줍니다. --&amp;gt;
   &amp;lt;beans:property name=&quot;ignoreUnresolvablePlaceholders&quot; value=&quot;true&quot; /&amp;gt;
   &amp;lt;beans:property name=&quot;locations&quot;&amp;gt;
      &amp;lt;beans:list&amp;gt;
         &amp;lt;beans:value&amp;gt;classpath:application.properties&amp;lt;/beans:value&amp;gt;
         &amp;lt;beans:value&amp;gt;classpath:application-${spring.profiles.active}.properties&amp;lt;/beans:value&amp;gt;
         &amp;lt;beans:value&amp;gt;classpath:test.properties&amp;lt;/beans:value&amp;gt;
      &amp;lt;/beans:list&amp;gt;
   &amp;lt;/beans:property&amp;gt;
&amp;lt;/beans:bean&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;# property의 설정이나 사용은 동일 하다.&lt;/h3&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;# Environment 환경변수 값에 property setting ( &lt;span style=&quot;background-color: #ffffff; color: #333333;&quot;&gt;&lt;span style=&quot;background-color: #f6e199;&quot;&gt;PropertySources&lt;/span&gt; )&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;Environment 환경변수에 직접 properties 값을 로딩할 수 있다.&amp;nbsp;&lt;/blockquote&gt;
&lt;pre class=&quot;less&quot;&gt;&lt;code&gt;@Configuration
@PropertySources({
        @PropertySource(&quot;classpath:application.properties&quot;),
        @PropertySource(value = &quot;classpath:/application-${spring.profiles.active}.properties&quot;, ignoreResourceNotFound = true)
})
public class AppConfig {

}
&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;# property의 사용&amp;nbsp;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ application.properties ]&lt;/p&gt;
&lt;pre class=&quot;shell&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;app.message.hello=&quot;i am a boy&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ application-prod.properties ]&lt;/p&gt;
&lt;pre class=&quot;ini&quot;&gt;&lt;code&gt;app.message.hello=&quot;how are you?&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ class ]&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Autowired
Environment env;

@Value(&quot;${app.message.hello}&quot;)
String hello;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ class 내에서의 사용 ]&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;environment 변수 및 Value를 통한 사용 모두 가능 하다 .&lt;/blockquote&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;log.info(&quot;app.message.hello {}&quot; , env.getProperty(&quot;app.message.hello&quot;) );
log.info(&quot;properties app.message.hello {}&quot; , hello );&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;color: #333333; background-color: #f6e199;&quot;&gt;# 추가적으로 Apache&amp;nbsp; PropertiesConfiguration&amp;nbsp;&lt;/span&gt;&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;apache commons lib를 통한&amp;nbsp; 프로퍼티변경을&amp;nbsp; 톰캣 재기동없이 반영할 수 있다. 서버 운영시에 가장 많이 사용되지 않나 싶다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ pom.xml ] dependency 설정&amp;nbsp;&lt;/p&gt;
&lt;pre class=&quot;xml&quot;&gt;&lt;code&gt;&amp;lt;!-- commons-configuration PropertiesConfiguration 를 통한 property 관리 --&amp;gt;
&amp;lt;dependency&amp;gt;
   &amp;lt;groupId&amp;gt;commons-configuration&amp;lt;/groupId&amp;gt;
   &amp;lt;artifactId&amp;gt;commons-configuration&amp;lt;/artifactId&amp;gt;
   &amp;lt;version&amp;gt;1.10&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ servlet-context.xml ]&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;&amp;lt;bean id=&quot;propertyReloading&quot; class=&quot;org.apache.commons.configuration.reloading.FileChangedReloadingStrategy&quot; /&amp;gt;

&amp;lt;bean id=&quot;runtimeProperties&quot; class=&quot;org.apache.commons.configuration.PropertiesConfiguration&quot;&amp;gt;
   &amp;lt;constructor-arg type=&quot;java.lang.String&quot; value=&quot;${app.runtime.property.filepath}&quot; /&amp;gt;
   &amp;lt;property name=&quot;reloadingStrategy&quot; ref=&quot;propertyReloading&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;${app.runtime.property.filepath} 는&amp;nbsp; properties 로 사용할 외부 경로를 넣어주면 된다.&amp;nbsp;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ class 내&amp;nbsp; 사용을 위한 주입 ]&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;@Autowired
private PropertiesConfiguration runtimeProperties;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[ class 내에서의 사용 ]&lt;/p&gt;
&lt;pre class=&quot;java&quot; data-ke-language=&quot;java&quot;&gt;&lt;code&gt;model.addAttribute(&quot;app.title&quot;, runtimeProperties.getProperty(&quot;app.title&quot;));
model.addAttribute(&quot;app.configYN&quot;, runtimeProperties.getProperty(&quot;app.configYN&quot;));&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>spring legacy</category>
      <category>@Value</category>
      <category>PropertyPlaceholderConfigurer</category>
      <category>PropertySourcesPlaceholderConfigurer</category>
      <category>Spring</category>
      <category>spring legacy</category>
      <category>spring properties</category>
      <author>파워킴</author>
      <guid isPermaLink="true">https://powernote.tistory.com/61</guid>
      <comments>https://powernote.tistory.com/61#entry61comment</comments>
      <pubDate>Fri, 4 Mar 2022 19:24:07 +0900</pubDate>
    </item>
  </channel>
</rss>