<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>junnnhhh</title>
    <link>https://junnnhhh.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Wed, 8 Apr 2026 02:28:12 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>junnnhhh</managingEditor>
    <item>
      <title>[Linux] tar 명령어</title>
      <link>https://junnnhhh.tistory.com/51</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;원인)&lt;/b&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;font-family: 'Noto Sans Light';&quot;&gt;오늘 배치 작업 중 오류가 있어서 .sh 스크립트를 확인을 했다.&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;font-family: 'Noto Sans Light';&quot;&gt;확인해보니 파일을 대외계로 송신을 해야하는데 파일이 존재하지 않아 문제가 발생했던 것.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;그래서 수기로 처리하려고 쉘 스크립트 소스를 보는데 아래와 같은 명령어가 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760615016441&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;tar -cvf xxx.tar ./20250801&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;나는 이게 tar 파일을 ./20250801 이라는 폴더에 압축해제를 한다라고 알고 있었는데,&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;font-family: 'Noto Sans Light';&quot;&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;font-family: 'Noto Sans Light';&quot;&gt;요즘 하도 리눅스 명령어를 쓸 일이 없다 보니 다 잊어버린 것 같아 정리가 필요하여 글을 작성한다...&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;tar 란?&lt;/b&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;font-family: 'Noto Sans Light';&quot;&gt;&amp;rarr; 리눅스/유닉스 시스템에서 파일들을 하나로 묶기 위해 사용하는 아카이브 도구&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;※ 아카이브(archive) : 여러 개의 파일이나 폴더를 하나의 파일로 묶어 놓은&amp;nbsp; 것&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp; &amp;nbsp;파일 여러 개를 간편하게 전송하거나 백업하기 위해&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp; &amp;nbsp;디렉토리 구조를 그대로 보존&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp; &amp;nbsp;묶은 다음에 압축해서 공간도 줄일 수 있음.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;tar 목적&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;여러 파일과 디렉토리를 하나의 파일로 묶기 위해 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;보통 백업, 전송, 배포할 때 사용&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;묶는 것만 하고 압축은 하지 않음(필요하면 gzip이나 bzip2와 함께 사용)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;tar 명령어 정리&lt;/b&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;font-family: 'Noto Sans Light';&quot;&gt;[기본형식]&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760615016445&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;tar [옵션] [아카이브파일이름] [대상파일/디렉토리]&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&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;font-family: 'Noto Sans Light';&quot;&gt;[자주 사용하는 옵션]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.5117%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;옵션&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.3721%;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;설명&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.5117%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;-c&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.3721%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;새 아카이브 생성 (create)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.5117%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;-x&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.3721%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;아카이브 풀기 (extract)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.5117%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;-v&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.3721%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;진행 상태 출력 (verbose)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.5117%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;-f&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.3721%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;파일 이름 지정 (file) - 이 옵션은 마지막에 입력하는 것이 좋다.&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.5117%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;-z&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.3721%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;gzip 압축 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.5117%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;-j&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.3721%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;bzip2 압축 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;width: 26.5117%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;-J&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;width: 73.3721%;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;xz 압축 사용&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&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;font-family: 'Noto Sans Light';&quot;&gt;[예제]&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760615016448&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;shell&quot;&gt;&lt;code&gt;# 디렉토리를 .tar 압축
tar -cvf archive.tar ./mydir/

# 디렉토리를 .tar.gz로 압축
tar -czvf archive.tar.gz ./mydir/

# .tar 파일 풀기
tar -xvf archive.tar

# .tar.gz 파일 풀기
tar -xzvf archive.tar.gz

# 특정 디렉토리에 압축 풀기
tar -xzvf archive.tar.gz -C /patch/to/directory&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;[참고] tar vs zip 비교표&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Light';&quot;&gt;항목&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;tar&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;zip&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;원래 목적&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;묶기 (아카이브)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;압축 및 아카이브&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;압축 여부&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;기본적으로 압축 안 함(gzip 등과 함께 써야 압축됨)&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;기본적으로 압축 포함&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;파일 구조&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;전체 파일을 하나로 묶은 후 압축&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;각 파일을 개별 압축한 후 묶음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;명령어 사용&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;tar, gzip, bzip2, xz 등 조합 필요&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;zip, unzip 단독 사용 가능&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;확장자&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;.tar, .tar.gz, .tar.bz2, .tgz 등&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;.zip&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;보존 정보&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;권한, 소유자, 시간 정보 잘 보존&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;일부 정보 보존이 불완전할 수 있음&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;유닉스/리눅스에서의 사용&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;더 일반적, 시스템 백업 등에 많이 사용&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;덜 일반적 (윈도우에서 더 많이 사용)&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>Linux</category>
      <category>archive</category>
      <category>Linux</category>
      <category>tar</category>
      <category>아카이브</category>
      <author>junnnhhh</author>
      <guid isPermaLink="true">https://junnnhhh.tistory.com/51</guid>
      <comments>https://junnnhhh.tistory.com/51#entry51comment</comments>
      <pubDate>Thu, 16 Oct 2025 20:44:10 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] Where절에서 괄호 우선순위가 동작하지 않는 경우 (옵티마이저)</title>
      <link>https://junnnhhh.tistory.com/50</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이슈)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현업 요청으로 개발 중,,, 조건절에 아래와 같이 작성했다.&lt;/p&gt;
&lt;pre id=&quot;code_1760614925003&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;...
WHERE
TABLE.COLUMN_A = VALUE1 AND
(TABLE.COLUMN_B = VALUE2 AND TABLE.COLUMN_C = VALUE3)
...&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;내가 의도한건 괄호에 있는 조건을 먼저 검사를 하게끔 한 것인데, 실제 쿼리를 돌려보니&lt;/p&gt;
&lt;pre id=&quot;code_1760614925003&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;...
WHERE
TABLE.COLUMN_A = VALUE1 AND
TABLE.COLUMN_B = VALUE2 AND 
TABLE.COLUMN_C = VALUE3
...&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이것과 똑같이 동작을 했다...&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;확인을 해보니&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;SQL에 WHERE절의 괄호는 논리적인 평가 순서만 바꿔주고, 옵티마이저가 조건을 실제로 어떻게 적용하는지까지는&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;보장해주질 않는다고 한다...&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;DBMS에서 AND/OR 조건을 최적화에서 인덱스 활용을 다르게 적용&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;따라서 이를 해결하기 위해서는&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;CASE문 또는 서브쿼리를 활용해서 조건 필터를 작성하면 된다!!&lt;/p&gt;</description>
      <category>DB/Oracle</category>
      <category>oracle</category>
      <category>옵티마이저 우선순위</category>
      <author>junnnhhh</author>
      <guid isPermaLink="true">https://junnnhhh.tistory.com/50</guid>
      <comments>https://junnnhhh.tistory.com/50#entry50comment</comments>
      <pubDate>Thu, 16 Oct 2025 20:42:28 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] WITH절이란? (기본 사용법부터 재귀적 WITH절까지)</title>
      <link>https://junnnhhh.tistory.com/49</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이슈)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;새로운 개발 건 때문에 부하 정도를 러프하게라도 알아보려고 일주일치에 대한 통계를 내는 쿼리를 작성을 하던 도중,,,&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;실행 계획을 보니 빨간 글자가 너무 많았다.(대충 쿼리를 잘못짜서 실행하면 속 터진다... 라는 일종의 경고문..)&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;쿼리 구조는 테이블 A에 있는 값과 테이블 B, C, D 각각을 join 하고 group by를 사용해 집계함수를 쓰는 것이였다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;속도가 너무 느려 방법이 없을까 하다가 WITH절을 사용했는데 한번 정리해본다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;WITH절&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 쿼리 앞부분에 하위 쿼리를 미리 정의해두고, 이후 메인 쿼리에서 미리 정의한 쿼리를 참조할 수 있게 해준다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;일종의 임시 뷰(temporary view) 역할을 한다고 생각하면 된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;장점&lt;/b&gt;&lt;/p&gt;
&lt;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;재귀 쿼리 지원 : WITH + CONNECT BY 없이도 계층형 테이터를 재귀적으로 조회할 수 있음(Oracle 11g 이상)&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1760614260417&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;WITH subquery_name AS (
    SELECT ...
    FROM ...
    WHERE ...
)
SELECT *
FROM subquery_name
WHERE ...;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;사용 예시)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1) 기본적인 서브쿼리 팩터링&lt;/p&gt;
&lt;pre id=&quot;code_1760614260418&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;WITH dept_avg AS (
    SELECT department_id, AVG(salary) AS avg_sal
    FROM employees
    GROUP BY department_id
)
SELECT e.employee_id, e.salary, d.avg_sal
FROM employees e
JOIN dept_avg d ON e.department_id = d.department_id
WHERE e.salary &amp;gt; d.avg_sal;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2) 다중 서브쿼리 정의&lt;/p&gt;
&lt;pre id=&quot;code_1760614260419&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;WITH
high_sal AS (
    SELECT employee_id, salary FROM employees WHERE salary &amp;gt; 10000
),
low_sal AS (
    SELECT employee_id, salary FROM employees WHERE salary &amp;lt;= 10000
)
SELECT * FROM high_sal
UNION ALL
SELECT * FROM low_sal;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;재귀적 WITH(Oracle 11g~)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;rarr; 계층 구조 데이터를 재귀적으로 탐색할 수 있게 해주는 문법&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;구조)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760614260421&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;WITH subquery_name (col1, col2, ...) AS (
    -- 1. Anchor member (기준이 되는 최초 쿼리)
    SELECT ...
    FROM ...
    WHERE ...   -- 시작 조건

    UNION ALL

    -- 2. Recursive member (자기 자신을 다시 호출)
    SELECT ...
    FROM ...
    JOIN subquery_name ON ...   -- 재귀적으로 연결
)
SELECT *
FROM subquery_name;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;예제) 숫자 생성시 (1 ~ 10 까지)&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760614260423&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;WITH numbers (n) AS (
    SELECT 1 FROM dual       -- Anchor
    UNION ALL
    SELECT n + 1             -- Recursive
    FROM numbers
    WHERE n &amp;lt; 10
)
SELECT * FROM numbers;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;※주의할 점&lt;/b&gt;&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;무한 루프 방지 &amp;rarr; 반드시 (종료 조건 WHERE절 필요)&lt;/li&gt;
&lt;li&gt;성능&lt;br /&gt;- 큰 데이터셋에서는 인덱스와 필터링 조건을 잘 걸어줘야 함.&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>DB/Oracle</category>
      <category>oracle</category>
      <category>SQL</category>
      <category>WITH절</category>
      <author>junnnhhh</author>
      <guid isPermaLink="true">https://junnnhhh.tistory.com/49</guid>
      <comments>https://junnnhhh.tistory.com/49#entry49comment</comments>
      <pubDate>Thu, 16 Oct 2025 20:31:20 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] EXISTS 란?</title>
      <link>https://junnnhhh.tistory.com/48</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&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;font-family: 'Noto Sans Light';&quot;&gt;쿼리를 보다 보면, EXISTS 구문이 있다.&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;font-family: 'Noto Sans Light';&quot;&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;font-family: 'Noto Sans Light';&quot;&gt;그래서 한번 정리를 해본다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;EXISTS란?&lt;/b&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;font-family: 'Noto Sans Light';&quot;&gt;&amp;rarr; 서브쿼리의 결과 존재 여부를 판단하여 메인 쿼리의 결과를 제어하는 조건문&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;font-family: 'Noto Sans Light';&quot;&gt;&amp;rarr; 즉, EXISTS는 서브쿼리의 결과가 하나라도 있으면 TRUE 없으면 FALSE를 반환&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;※ NOT EXISTS &amp;rarr; 반대로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #f3c000;&quot;&gt;존재하지 않는 경우&lt;/span&gt;만 찾을 때 사용&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760614218026&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT 컬럼명
FROM 테이블A A
WHERE EXISTS (
    SELECT 1
    FROM 테이블B B
    WHERE B.컬럼 = A.컬럼
);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이렇게 보면 IN과 EXISTS가 비슷하다고 볼 수 있는데, 아래 차이를 봐보자&lt;/span&gt;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%; height: 88px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #333333; text-align: start; font-family: 'Noto Sans Light';&quot;&gt;구분&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;EXISTS&amp;nbsp;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;IN&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;비교 기준&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;존재 여부&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;값 목록 포함 여부&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;성능&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;서브쿼리 결과가 많아도,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;첫 행을 찾으면 종료&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;rarr; 큰 데이터에서 유리&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;서브쿼리 결과 전체를 비교해야 함&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 22px;&quot;&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;NULL 영향&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;NULL 관계없이 잘 동작&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;height: 22px;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;서브쿼리 결과에 NULL 있으면 주의 필요&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;</description>
      <category>DB/Oracle</category>
      <category>EXISTS</category>
      <category>oracle</category>
      <category>서브쿼리</category>
      <author>junnnhhh</author>
      <guid isPermaLink="true">https://junnnhhh.tistory.com/48</guid>
      <comments>https://junnnhhh.tistory.com/48#entry48comment</comments>
      <pubDate>Thu, 16 Oct 2025 20:30:39 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] NVL, DECODE, COALESCE</title>
      <link>https://junnnhhh.tistory.com/47</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이슈)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;오늘은 쿼리 분석 중에 NVL 함수가 있었는데, 인자가 한개가 아닌 두개가 있었다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;순간 뭐지.. 라고 고민을 했기에 이렇게 정리를 해본다... DECODE와 COALESECE 함수는 덤으로 정리한다!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;NVL 함수&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;rarr; 컬럼 값이 NULL 일 경우, 지정한 값으로 치환해 준다. (NULL 이 아니면 원래 값을 그대로 반환)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760614154199&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;NVL(컬럼명, 대체값)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f3c000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;※ 데이터 타입 일치 필요 : 첫번째 인자와 두번째 인자는 동일하거나 호환 가능한 타입이어야 함.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;DECODE 함수&lt;/b&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;font-family: 'Noto Sans Light';&quot;&gt;&amp;rarr; 조건 비교 후 값 반환 ( 간단한 IF-ELSE 또는 CASE WHEN 역할 가능)&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760614154199&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;DECODE(표현식, 비교값1, 반환값1, 비교값2, 반환값2, ..., 기본값)&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;font-family: 'Noto Sans Light';&quot;&gt;표현식이 각 비교값과 일치하면 해당 반환값 반환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;아무것도 일치하지 않으면 마지막 기본값 반환 (기본값 생략 시, NULL 반환)&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;COALESCE 함수&lt;/b&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;font-family: 'Noto Sans Light';&quot;&gt;&amp;rarr; 여러 인자 중에서 NULL이 아닌 첫 번째 값을 반환&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;font-family: 'Noto Sans Light';&quot;&gt;&amp;rarr; NVL은 인자가 2개지만, COALESCE는 여러 인자를 넣을 수 있음.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760614154200&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;COALESCE(값1, 값2, 값3, ...)&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;font-family: 'Noto Sans Light';&quot;&gt;왼쪽부터 차례대로 확인해서 NULL이 아닌 첫 번째 값을 반환&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;모든 값이 NULL이면 NULL 반환&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>DB/Oracle</category>
      <category>Coalesce</category>
      <category>decode</category>
      <category>null 처리 함수</category>
      <category>NVL</category>
      <category>oracle</category>
      <author>junnnhhh</author>
      <guid isPermaLink="true">https://junnnhhh.tistory.com/47</guid>
      <comments>https://junnnhhh.tistory.com/47#entry47comment</comments>
      <pubDate>Thu, 16 Oct 2025 20:29:45 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle]  옵티마이저 힌트 LEADING 과 INDEX_SS</title>
      <link>https://junnnhhh.tistory.com/46</link>
      <description>&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;이슈)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;오늘 현업분께 요청이 왔다. 어떠한 화면에서 조회할 수 있는 기간을 한달로 늘려줄 수 없냐는 문의였다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;근데&amp;nbsp; 해당 화면에서 조회할 때 사용되는 테이블들이 데이터 양도 많고, 조회기간을 늘리면 자칫 운영 환경에서 타임아웃이 발생할 수 있기 때문에 확인을 해보고 말씀드린다고 했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;그래서 쿼리를 뜯어보고 있는데,,, 옵티마이저 힌트 부분에 아래와 같은 구문이 있었다...&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760614097491&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;/*+ LEADING(table1 table2) INDEX_SS(table1 index1)*/&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&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;font-family: 'Noto Sans Light';&quot;&gt;그래서 정리를 해본다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;LEADING 힌트&lt;/b&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;font-family: 'Noto Sans Light';&quot;&gt;&amp;rarr; Join 순서를 지정하는 힌트&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;font-family: 'Noto Sans Light';&quot;&gt;Oracle 옵티마이저는 조인 순서를 자동으로 결정하지만, 어떤 경우에서 사용자가 더 효율적인 순서를 알고 있을 때,&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;font-family: 'Noto Sans Light';&quot;&gt;해당 힌트(LEADING)을 사용하면 조인 순서를 직접 지정할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760614097493&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT /*+ LEADING(t1 t2 t3) */ ...
FROM table1 t1
JOIN table2 t2 ON ...
JOIN table3 t3 ON ...;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;LEADING 안에 t1 &amp;rarr; t2 &amp;rarr; t3 순으로 써져 있는데,&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;font-family: 'Noto Sans Light';&quot;&gt;이 순서 그대로 조인을 수행하도록 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;INDEX_SS 힌트&lt;/b&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;font-family: 'Noto Sans Light';&quot;&gt;&amp;rarr; Index Skip Scan&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;font-family: 'Noto Sans Light';&quot;&gt;복합 인덱스가 있을 때, 선두 컬럼이 조건에 없더라고 뒤쪽 컬럼으로 인덱스를 사용할 수 있게 하는 방식&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760614097495&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;SELECT /*+ INDEX_SS(emp emp_idx_deptno_ename) */ *
FROM emp
WHERE ename = 'SMITH';&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;여기서 emp_idx_deptno_ename는 (deptno, ename)으로 구성되어 있다고 가정을 해보자.&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;font-family: 'Noto Sans Light';&quot;&gt;조건절에 deptno가 없으므로 INDEX_SS를 이용하여 선두 컬럼인 deptno를 skip하고 ename으로 scan하라고 지시한다.&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;font-family: 'Noto Sans Light';&quot;&gt;&amp;rarr; 일반적인 range scan 보다 느릴 수 있으나, full table scan 보다는 빠를 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&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;font-family: 'Noto Sans Light';&quot;&gt;운영 DB에서 해당 쿼리로 한달 기간을 잡고 돌려보니 별 이상 없었다.(역시 DBA분이 쿼리 튜닝을 잘해주신 것 같다..)&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;font-family: 'Noto Sans Light';&quot;&gt;타임아웃 걱정은 괜한 걱정이였지만, 내가 모르는 부분을 공부할 수 있어서 좋았다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>DB/Oracle</category>
      <category>index_ss</category>
      <category>Leading</category>
      <category>oracle</category>
      <category>옵티마이저</category>
      <category>인덱스</category>
      <author>junnnhhh</author>
      <guid isPermaLink="true">https://junnnhhh.tistory.com/46</guid>
      <comments>https://junnnhhh.tistory.com/46#entry46comment</comments>
      <pubDate>Thu, 16 Oct 2025 20:28:45 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] INSERT 내부에 SELECT절</title>
      <link>https://junnnhhh.tistory.com/45</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;최근 개발하는 것 중 테이블에 신규 컬럼 추가가 필요해서 추가를 하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;`ORA-00947: not enough values ...`&lt;/b&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;font-family: 'Noto Sans Light';&quot;&gt;insert 할 때, 테이블의 컬럼 수를 못채운 상태로 작업을 해서 발생한 오류이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;오류난 쿼리를 보니깐 아래 쿼리에서 발생한 오류였다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760614003628&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;/*
기존 TABLE1의 컬럼 = PK1, COL1, COL2
현재 TABLE1의 컬럼 = PK1, COL1, COL2, COL3
*/

-- 오류가 발생한 쿼리
INSERT INTO TABLE1
(
    SELECT 
        A.PK1 + 1, -- PK가 값이 다른 상태로 넣는다는 것을 표현
        A.COL1,
        A.COL2
 	FROM TABLE1 A
    WHERE A.PK1 = 1
)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;INSERT문 안에 VALUES절이 없고 SELECT를 하고 그대로 INSERT 처리를 하는 쿼리였다.&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;background-color: #f3c000; font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;따라서 VALUES절이 명시되어 있지 않기 때문에 SELECT 할 때, COL3에 대한 정보도 들어가야했다...&lt;/b&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;font-family: 'Noto Sans Light';&quot;&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;font-family: 'Noto Sans Light';&quot;&gt;앞으로는 더 세심하게 살펴봐야겠다!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;해결방안)&lt;/b&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;1. SELECT절에 신규 컬럼 추가&lt;/b&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;2. INSERT문에 VALUES절 추가&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;그리고 VALUES절에 대상 컬럼들을 명시하면 테이블 컬럼 추가가 있을 때, 영향도가 없기 때문에&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;font-family: 'Noto Sans Light';&quot;&gt;항상 VALUES절을 명시해주는 방법으로 작업을 하는 것이 좋겠다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>DB/Oracle</category>
      <category>insert select 오류</category>
      <category>ORA-00947</category>
      <category>oracle</category>
      <category>SQL</category>
      <author>junnnhhh</author>
      <guid isPermaLink="true">https://junnnhhh.tistory.com/45</guid>
      <comments>https://junnnhhh.tistory.com/45#entry45comment</comments>
      <pubDate>Thu, 16 Oct 2025 20:27:12 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] 병렬처리 parallel</title>
      <link>https://junnnhhh.tistory.com/44</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;회사에서 개발/테스트 환경에서 사용하는 테이블 중, 특정 컬럼 값을 null로 update 하는 작업이 있었다.&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;font-family: 'Noto Sans Light';&quot;&gt;근데 내 파트쪽 테이블 데이터 수가 적은건 100만개,,, 많게는 1억개 정도 됐던걸로 확인을 했다.&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;font-family: 'Noto Sans Light';&quot;&gt;다른 파트들에서도 작업을 해서 그런지 select 뿐만 아니라 update 자체도 오래걸렸다...&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;그래서 pk를 나눠서 처리를 하던 도중 사수님이 UPDATE문에&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;/*+ enable_parallel_dml parallel(10) */&lt;/b&gt;&amp;nbsp;힌트를 추가하고 실행해보라고 하셨다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;역시,,, 이렇게 하니깐 실행 시간이 엄청 줄여서 처리를 할 수 있었다!&lt;/span&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;parallel의 경우, 시스템 자원을 끌어다 써서 최대 효율을 내는 것인데, 당연히 운영이나 서비스에서 사용하면 안되는 작업&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;font-family: 'Noto Sans Light';&quot;&gt;(시스템 자원을 많이 잡아먹기 때문에)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;parallel을 쓰는 경우를 생각해보자면, 아래와 같다고 생각한다.&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;font-family: 'Noto Sans Light';&quot;&gt;1. 배치작업&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;font-family: 'Noto Sans Light';&quot;&gt;2. DB툴에서 일괄적으로 대량의 데이터 처리가 필요하는 경우&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;parallel dml을 사용할 때는 alter session을 해주어야 하는데,&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;font-family: 'Noto Sans Light';&quot;&gt;&lt;b&gt;ALTER SESSION PARALLEL DML ENABLE;&lt;/b&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;font-family: 'Noto Sans Light';&quot;&gt;명령어로 해당 옵션을 켜야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;Oracle 12c DB 부터는&amp;nbsp;&lt;b&gt;/*+ enable parallel_dml */&lt;/b&gt;을 통하여 힌트를 통해서도 같은 효과를 낼 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;병렬처리 할 때,&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1760612221737&quot; class=&quot;actionscript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;/*+ parallel */
/*+ parallel(병렬프로세스 수) */
/*+ parallel(테이블, 병렬프로세스 수) */&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&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;font-family: 'Noto Sans Light';&quot;&gt;이 수는 어느 정도인지 모르기에 안전하게 병렬프로세스 수를 지정하여 사용하자.&lt;/span&gt;&lt;/p&gt;</description>
      <category>DB/Oracle</category>
      <category>hint</category>
      <category>oracle</category>
      <category>Parallel</category>
      <category>SQL</category>
      <category>병렬처리</category>
      <author>junnnhhh</author>
      <guid isPermaLink="true">https://junnnhhh.tistory.com/44</guid>
      <comments>https://junnnhhh.tistory.com/44#entry44comment</comments>
      <pubDate>Thu, 16 Oct 2025 19:57:37 +0900</pubDate>
    </item>
    <item>
      <title>Gradle 설치하기</title>
      <link>https://junnnhhh.tistory.com/39</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Light';&quot;&gt;개인 프로젝트를 하면서 AWS 배포하는 과정에서 Gradle를 써야하는 일이 생겨 설치방법을 찾아보면서 공유하면 좋을 것 같아 글을 써본다.&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 Light';&quot;&gt;참고 : &lt;a href=&quot;https://keun.me/gradle/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://keun.me/gradle/&lt;/a&gt;&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732618102774&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;리눅스 Gradle 최신버전 설치&quot; data-og-description=&quot;1. 설치할 Gradle 버전 확인 https://gradle.org/install/ Java 17 환경의 프로젝트를 개발중이므로 7.3이상의 버전을 설치해야함 2. wget 설치하기 sudo apt install wget 3. 설치할 버전의 Gradle zip파일 다운 wget https:/&quot; data-og-host=&quot;keun.me&quot; data-og-source-url=&quot;https://keun.me/gradle/&quot; data-og-url=&quot;https://keun.me/gradle/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sg4in/hyXDgKMMYF/pG4VwFZtVDTYLfaY78Mnu1/img.jpg?width=5000&amp;amp;height=3500&amp;amp;face=0_0_5000_3500,https://scrap.kakaocdn.net/dn/bUUbiQ/hyXDlk8EaG/lar82HOszhoG7eQ3QsJyZ1/img.jpg?width=5000&amp;amp;height=3500&amp;amp;face=0_0_5000_3500&quot;&gt;&lt;a href=&quot;https://keun.me/gradle/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://keun.me/gradle/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sg4in/hyXDgKMMYF/pG4VwFZtVDTYLfaY78Mnu1/img.jpg?width=5000&amp;amp;height=3500&amp;amp;face=0_0_5000_3500,https://scrap.kakaocdn.net/dn/bUUbiQ/hyXDlk8EaG/lar82HOszhoG7eQ3QsJyZ1/img.jpg?width=5000&amp;amp;height=3500&amp;amp;face=0_0_5000_3500');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;리눅스 Gradle 최신버전 설치&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;1. 설치할 Gradle 버전 확인 https://gradle.org/install/ Java 17 환경의 프로젝트를 개발중이므로 7.3이상의 버전을 설치해야함 2. wget 설치하기 sudo apt install wget 3. 설치할 버전의 Gradle zip파일 다운 wget https:/&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;keun.me&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;요 글을 쓰신 분께서 내용을 간략하지만 아주 깔끔하게 정리해주셨다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, 설치할 Gradle 버전을 확인한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나의 경우 8.10.2 버전이 필요하여 해당 버전으로 설치를 할 예정이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. wget 설치하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo apt install wget&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. wget으로 gradle zip 파일 다운&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo wget &lt;a href=&quot;https://services.gradle.org/distributions/gradle-8.10.2-bin.zip&quot;&gt;https://services.gradle.org/distributions/gradle-8.10.2-bin.zip&lt;/a&gt; -P /tmp&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. unzip 패키지 설치&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo apt install unzip&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. gradle-8.10.2-bin.zip 압축해제&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo unzip -d /opt/gradle /tmp/gradle-810.2-bin.zip&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ls /opt/gradle/gradle-8.10.2&lt;/p&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;5. 환경변수 sh 파일 등록&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo vi /etc/profile.d/gradle.sh&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;export GRADLE_HOME=/opt/gradle/gradle-8.10.2&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;export PATH=${GRADLE_HOME}/bin:${PATH}&lt;/p&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;6. gradle 스크립트 실행 및 로드&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo chmod +x /etc/profile.d/gradle.sh&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;source /etc/profile.sh/gradle.sh&lt;/p&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;7. gradle 버전 확인하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gradle -v&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Linux</category>
      <category>Gradle</category>
      <category>Linux</category>
      <author>junnnhhh</author>
      <guid isPermaLink="true">https://junnnhhh.tistory.com/39</guid>
      <comments>https://junnnhhh.tistory.com/39#entry39comment</comments>
      <pubDate>Tue, 26 Nov 2024 20:01:51 +0900</pubDate>
    </item>
    <item>
      <title>Vue.js 프로젝트를 Nginx에 배포하기</title>
      <link>https://junnnhhh.tistory.com/38</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(막혔던 점)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬에서 Vue 프로젝트를 실행했을 때는 단순 `npm run dev'를 통해서 실행을 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서, AWS 환경에서도 `npm run dev`를 실행 후, 기본 포트인 5173에 대한 AWS Inbound 규칙을 설정해주면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공인IP를 입력했을 때, 연결이 될거라고 생각을 했었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;웹서버(Apache, Nginx ...)를 띄워 그 안에서 vue 프로젝트를 실행시켜야 접속이 가능하다는 것을 잊고 있었다..!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style5&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;※Amazon Linux 기준으로 작성&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) Nginx 설치&lt;/p&gt;
&lt;pre id=&quot;code_1732284664044&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo yum install nginx -y&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2) Nginx 재기동 및 상태 확인&lt;/p&gt;
&lt;pre id=&quot;code_1732284898519&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctl restart nginx
sudo systemctl status nginx&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;263&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b9iAjP/btsKSSp7aeX/lkO5j2RNe4FG7ZpOrFJRBk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b9iAjP/btsKSSp7aeX/lkO5j2RNe4FG7ZpOrFJRBk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b9iAjP/btsKSSp7aeX/lkO5j2RNe4FG7ZpOrFJRBk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb9iAjP%2FbtsKSSp7aeX%2FlkO5j2RNe4FG7ZpOrFJRBk%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;848&quot; height=&quot;263&quot; data-origin-width=&quot;848&quot; data-origin-height=&quot;263&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IP 접속을 하게 되면, 아래와 같이 잘 연결되는 것을 확인할 수 있음!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;548&quot; data-origin-height=&quot;203&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvmb6p/btsKTGvHead/NGx7ci7btJrNG7Z2F0kb80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvmb6p/btsKTGvHead/NGx7ci7btJrNG7Z2F0kb80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvmb6p/btsKTGvHead/NGx7ci7btJrNG7Z2F0kb80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdvmb6p%2FbtsKTGvHead%2FNGx7ci7btJrNG7Z2F0kb80%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;548&quot; height=&quot;203&quot; data-origin-width=&quot;548&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;3) Vue Project를 빌드 후 화면에 띄우기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, Vue Project 폴더로 들어간 후 `npm run build`를 실행하자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;16&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vnzhW/btsKSPAcLAo/x1ti6SbCrxBtbhkISS2Ga0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vnzhW/btsKSPAcLAo/x1ti6SbCrxBtbhkISS2Ga0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vnzhW/btsKSPAcLAo/x1ti6SbCrxBtbhkISS2Ga0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvnzhW%2FbtsKSPAcLAo%2Fx1ti6SbCrxBtbhkISS2Ga0%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;1228&quot; height=&quot;16&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;16&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 dist라는 폴더가 생겼을 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 폴더를 /var/www/html/ 하위로 이동시켜주자. ( sudo mv dist /var/www/html )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 이제 nginx 설정 파일을 수정해줘야한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/etc/nginx/nginx.conf 파일을 열고 아래와 같이 내용을 수정해준다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;233&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dpKdoi/btsKT9K8bZB/nYJjLEXKOeGwJXuiWpLR8k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dpKdoi/btsKT9K8bZB/nYJjLEXKOeGwJXuiWpLR8k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dpKdoi/btsKT9K8bZB/nYJjLEXKOeGwJXuiWpLR8k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdpKdoi%2FbtsKT9K8bZB%2FnYJjLEXKOeGwJXuiWpLR8k%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;602&quot; height=&quot;233&quot; data-origin-width=&quot;602&quot; data-origin-height=&quot;233&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이후 `sudo systemctl restart nginx`를 통해 재기동을 해주고 IP로 접속을 해보면&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRMOqu/btsKTnQHTjb/mykcz5JRYydkH99gENx0UK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRMOqu/btsKTnQHTjb/mykcz5JRYydkH99gENx0UK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRMOqu/btsKTnQHTjb/mykcz5JRYydkH99gENx0UK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRMOqu%2FbtsKTnQHTjb%2Fmykcz5JRYydkH99gENx0UK%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;1236&quot; height=&quot;242&quot; data-origin-width=&quot;1236&quot; data-origin-height=&quot;242&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 정상으로 뜨는 것을 확인할 수 있다!&lt;/p&gt;</description>
      <category>Linux</category>
      <category>aws</category>
      <category>nginx</category>
      <category>vue</category>
      <category>리눅스</category>
      <category>서버</category>
      <category>웹서버</category>
      <author>junnnhhh</author>
      <guid isPermaLink="true">https://junnnhhh.tistory.com/38</guid>
      <comments>https://junnnhhh.tistory.com/38#entry38comment</comments>
      <pubDate>Fri, 22 Nov 2024 23:30:54 +0900</pubDate>
    </item>
  </channel>
</rss>