<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>스마일데이</title>
    <link>https://nizimo.tistory.com/</link>
    <description>원주소년</description>
    <language>ko</language>
    <pubDate>Fri, 10 Apr 2026 01:44:47 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>intseq</managingEditor>
    <image>
      <title>스마일데이</title>
      <url>https://t1.daumcdn.net/cfile/tistory/223A30425314439636</url>
      <link>https://nizimo.tistory.com</link>
    </image>
    <item>
      <title>[맥] 휴지통 비워지지 않을 때 (항목이 사용 중이기 때문에 작업을 완료할 수 없습니다.)출처:</title>
      <link>https://nizimo.tistory.com/343</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://effectivecode.tistory.com/749&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://effectivecode.tistory.com/749&lt;/a&gt;&amp;nbsp;[known:티스토리]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;항목을&amp;nbsp;이동&amp;nbsp;또는&amp;nbsp;복사하거나&amp;nbsp;휴지통을&amp;nbsp;비우는&amp;nbsp;것과&amp;nbsp;같은&amp;nbsp;다른&amp;nbsp;작업에서&amp;nbsp;사용&amp;nbsp;중이기&amp;nbsp;때문에&amp;nbsp;&amp;lsquo;휴지통&amp;rsquo;을(를)&amp;nbsp;지금&amp;nbsp;열&amp;nbsp;수&amp;nbsp;없습니다.&amp;nbsp;현재&amp;nbsp;작업이&amp;nbsp;완료되면&amp;nbsp;다시&amp;nbsp;시도하십시오.&amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이상한 소스폴더를 받아 내용을 보니 중첩된 폴더를 너무 많이 사용하고 있었다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;images/images/images/images .... 이런식으로 되어 있어 복사 항목의 이름이 너무 길어 복사도 안되고 소스도 꼬이고 말그대로 엉망이라 정리를 하려다 보니 몇 번 압축을 풀고 삭제를 해서 휴지통으로 넣고 비우기를 눌렀더니 항목이 사용중이라고 한다. 그래서 휴지통 비우기가 안된다.&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&gt;터미널을 열고&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;cd ~/.Trash&lt;/span&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&gt;ls 명령어로 비워지지 않는 폴더나 파일들을 확인한다.&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&gt;다음 명령을 입력한다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;sudo rm -rf ~/.Trash/*&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&gt;sudo로 입력하기 때문에 password: 입력후 엔터를 치면 된다.&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&gt;다시 ls명령어로 확인을 해보면 깔끔하게 비워져있다. ^^;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그래서 유닉스 명령어나 쉘 프로그래밍을 해보는게 많은 도움이 될 것 같은데 ...&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&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&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;a href=&quot;https://effectivecode.tistory.com/749&quot;&gt;https://effectivecode.tistory.com/749&lt;/a&gt; [known:티스토리]&lt;/p&gt;</description>
      <category>MAC</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/343</guid>
      <comments>https://nizimo.tistory.com/343#entry343comment</comments>
      <pubDate>Tue, 3 Mar 2026 16:03:12 +0900</pubDate>
    </item>
    <item>
      <title>svn command창으로 실행하기</title>
      <link>https://nizimo.tistory.com/342</link>
      <description>&lt;div&gt;
&lt;h2 style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #222222;&quot; href=&quot;https://skmagic.tistory.com/395&quot;&gt;svn command창으로 실행하기&lt;/a&gt;&lt;/h2&gt;
&lt;div style=&quot;color: #999999;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc; text-align: center;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;&lt;a style=&quot;color: #666666;&quot; href=&quot;https://skmagic.tistory.com/category/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D/%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D%EC%9D%BC%EB%B0%98&quot;&gt;프로그래밍/프로그래밍일반&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;2014. 2. 5. 14:19&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: justify;&quot;&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;TortoiseSVN 을 사용할 경우.&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;Tortoise SVN을 사용할 경우&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;command로 실행하는 방법은 크게 2가지 이다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;1.svn.exe를 이용하는 방법&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;2.TortoiseProc.exe를 이용하는 방법&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #eeeeee;&quot;&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;1. SVN Command&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svnadmin dump&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- 저장소 백업&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- svnadmin dump [저장소 폴더명] &amp;gt; [덤프 파일명]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- ex) svnadmin dump project_sample &amp;gt; dump_project_sanmple_20010131&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svnadmin load&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- 저장소 복원&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- svnadmin load [저장소 폴더명] &amp;lt; [덤프 파일명]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- ex) svnadmin create project_sample&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;svnadmin load&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;project_sample &amp;lt; dump_project_sanmple_20010131&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn checkout&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp; - svn 서버에서 소스 내려받기&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp; - svn checkout svn://192.168.2.2/App App&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp; - svn checkout -r 100 svn://192.168.2.2/App App&amp;nbsp;&amp;nbsp; (revision 100번 소스 받기)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn checkout -r HEAD svn://192.168.9.128/sample_repos sample_HEAD &amp;nbsp; &amp;nbsp; (마지막 리비전 받기)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- 자세한 것은 svn checkout --help 참고&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn export&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;color: #6a5947;&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; -&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;버전관리 정보 없는 깨끗한 사본을 받아옴&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #6a5947;&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; - svn export --help&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #6a5947;&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; - svn export -r 1 svn://192.168.0.12/sample_repos sample_pos&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;color: #6a5947;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/div&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn commit 파일명 or 폴더명&amp;nbsp;or ./&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp; -&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn commit 했을 때 소스 파일에서 out of date 에러 날 때는 그 사이에 svn에 소스가 업데이트 됬다는 의미이다. 따라서, out of date 에러났을 때는 svn update을 실행해서 동기화를 한 후에 commit을 하면 된다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp; - commit 하기전에는 update를 실행하여 out of date 에러를 막자.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- 예)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; # svn commit&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; # svn commit ./test/test.h&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn resolved -R ./&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;- 소스 충돌 날 때 이놈으로 풀면 됨.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn cleanup&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp; - 소스가 lock 되 있을 경우 이 명령으로 해제 한다. lock 되는 원인은 알아서 찾는다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn update&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp; - 서버와 소스 동기화.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; A&amp;nbsp; Added&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;D&amp;nbsp; Deleted&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; U&amp;nbsp; Updated&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; C&amp;nbsp;&amp;nbsp;Conflict&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; G&amp;nbsp; Merged&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; E&amp;nbsp;&amp;nbsp;Existed&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp; - commit 하기전에는 소스 충돌을 막기 위해 update를 실행해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp; - update를 했는데 에러가 났을 경우에는 각각의 revision을 따로 update 해본다. 경험상 한번에 할 경우에 드물게 에러가 나는 경우가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #svn update -r 100&amp;nbsp;&amp;nbsp; --&amp;gt; 100은 revision number&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; #svn update -r 101&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn log&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;-&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn user가&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;commit한 로그 볼 때 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; #&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn log svn://192.168.9.128/&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;sample_repos &amp;nbsp; &amp;nbsp; ==&amp;gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;주의) svn path를 안주면 마지막 로그를 빼먹는다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;# svn log -l 10&amp;nbsp;&amp;nbsp; (상위 10개의 로그만 보기) &amp;nbsp; &amp;nbsp; &amp;nbsp; ==&amp;gt; 주의) svn path를 안주면 마지막 로그를 빼먹는다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; # svn log -l 10&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn://192.168.9.128/sample_repos&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- commit log 수정하기&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; #&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn propset --revprop -r [리비전번호] svn:log &amp;ldquo;수정할 메세지&amp;rdquo;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;참고:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://altistory.net/929&quot;&gt;http://altistory.net/929&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; # TortoiseSVN 사용할 때 show log 선택 후에 로그 패널에서 마우스 오른쪽 버튼 클릭하면 &quot;Edit log message&quot; 나온다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn mkdir&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;-&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;repository에 folder 생성한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;- #&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn mkdir svn://192.168.163.11/TEST_repo/&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;test_folder&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn import&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;- 처음으로&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;repository에 파일 추가하기.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; - 주의할점은 *.a 같은 파일은 추가 안될 수 있으니&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;--no-ignore&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;옵션 사용하기.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; - # svn import&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;import_path&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;svn://192.168.163.11/TEST_repo/import_path&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;--no-ignore&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn add&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- 새로 만든 파일 추가 하기. import와 똑같이 사용 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- # svn add&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;--no-ignore&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;[path]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn delete (or del, remove)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- 파일, 폴더 삭제&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- # svn del [FILE_NAME] or [DIR]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- # svn del svn://192.168.16.11/TEST_repo/test_dir&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; --&amp;gt; commit도 동시에 된다. help 참고.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn switch(or sw)&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;- 저장소 이름 변경할 때&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #eeeeee; color: #6a5947;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; # mv sample_repo1 sample_repo2 (su 로그인 후 저장소 이름을 직접 변경)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; # svn switch --relocate svn:/192.168.9.128/sample_repo1&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn:/192.168.9.128/sample_repo2&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;--&amp;gt; repository에서 다운받은 곳에서 명령을 실행한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &quot;svn: E155007: 작업 사본이 아닙니다.(Not a working copy)&quot; 이 에러는 .svn 없는 곳에서 svn 명령을 실행&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;했을 때 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;-&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;저장소 IP 변경할 때&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #eeeeee; color: #6a5947;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;# svn switch --relocate svn:/&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;192.168.30.198&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;/sample_repo1&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn:/&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;192.168.30.122&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;/sample_repo1&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn diff&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; - 두 revision 비교 또는 file 비교&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp; - 참고:&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://pokute.tistory.com/201&quot;&gt;http://pokute.tistory.com/201&lt;/a&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #eeeeee; color: #6a5947;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;변경된 파일만 출력&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;#&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;svn diff | awk '/^Index/ {print $NF}'&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;div style=&quot;background-color: #eeeeee;&quot;&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;두 리비전 비교&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;# svn diff -r 100:101&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;두 리비전의 파일비교&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;#svn diff -r 100:101 file_path&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;참고 링크 :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://blog.daum.net/rayolla/251&quot;&gt;http://blog.daum.net/rayolla/251&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #6a5947;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #eeeeee;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;2.거북이 SVN을 이용해서&lt;span&gt;&amp;nbsp;&lt;/span&gt;실행하기&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;ex)&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;TortoiseProc.exe /command:update /path:&quot;경로&quot; /closeonend:0&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;참고링크 :&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #5d5d5d;&quot;&gt;&lt;/span&gt;&lt;a href=&quot;http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-automation.html&quot;&gt;http://tortoisesvn.net/docs/release/TortoiseSVN_en/tsvn-automation.html&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/342</guid>
      <comments>https://nizimo.tistory.com/342#entry342comment</comments>
      <pubDate>Fri, 19 Sep 2025 16:35:43 +0900</pubDate>
    </item>
    <item>
      <title>1. 데이터 사이언스 개요 (1.1 데이터 사이언스란?)출처: https://gangdonggil.tistory.com/1382 [개발_노트:티스토리]</title>
      <link>https://nizimo.tistory.com/341</link>
      <description>&lt;div&gt;
&lt;h1&gt;&lt;b&gt;1.1 데이터 사이언스란?&lt;/b&gt;&lt;/h1&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.1.1 데이터 사이언스의 정의&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 사이언스(Data Science)는 데이터를 &lt;b&gt;수집, 처리, 분석, 모델링하여 가치 있는 인사이트(통찰력)를 도출하고 의사 결정을 지원하는 학문이자 기술 분야&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 사이언스는 단순한 데이터 분석을 넘어 &lt;b&gt;빅데이터, 인공지능(AI), 머신러닝(ML)&lt;/b&gt; 등과 결합하여 더욱 정교한 의사 결정을 가능하게 한다. 현대 사회에서는 방대한 양의 데이터를 효과적으로 처리하고 활용하는 것이 중요해졌으며, 데이터 사이언스는 이를 최적화하는 데 핵심적인 역할을 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;데이터 사이언스를 구성하는 주요 요소&lt;/b&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;b&gt;통계학(Statistics)&lt;/b&gt;: 데이터를 요약하고 패턴을 분석하여 의미를 도출&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 분석(Data Analysis)&lt;/b&gt;: 데이터를 정리, 시각화, 해석하여 유용한 정보 제공&lt;/li&gt;
&lt;li&gt;&lt;b&gt;머신러닝(Machine Learning)&lt;/b&gt;: 데이터를 학습하여 패턴을 찾고 예측 모델 구축&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 엔지니어링(Data Engineering)&lt;/b&gt;: 대규모 데이터를 저장, 관리, 처리하는 기술&lt;/li&gt;
&lt;li&gt;&lt;b&gt;데이터 시각화(Data Visualization)&lt;/b&gt;: 데이터를 직관적으로 표현하여 쉽게 이해하도록 지원&lt;/li&gt;
&lt;li&gt;&lt;b&gt;도메인 지식(Domain Knowledge)&lt;/b&gt;: 특정 산업(의료, 금융, 마케팅 등)에 대한 이해를 바탕으로 분석 수행&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;데이터 사이언스의 핵심 목표&lt;/b&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;b&gt;인사이트(통찰력)를 도출하여 문제 해결&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;데이터 기반의 의사 결정을 &lt;b&gt;자동화하여 효율성 증대&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;미래를 예측하는 모델을 구축&lt;/b&gt;하여 비즈니스 및 연구 분야에 활용&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 사이언스는 기업의 성과 개선, 연구 혁신, 정책 결정 등 다양한 영역에서 중요한 역할을 하며, 데이터를 활용하는 모든 분야에서 필수적인 요소로 자리 잡고 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.1.2 데이터 분석과 머신러닝의 차이&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 분석(Data Analysis)과 머신러닝(Machine Learning)은 데이터 사이언스의 핵심 요소이지만, 목적과 방법론이 다르다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;데이터 분석 (Data Analysis)&lt;/b&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;b&gt;패턴과 인사이트(통찰력)를 도출&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;주요 기법: 통계 분석, 탐색적 데이터 분석(EDA), 데이터 시각화, 가설 검정&lt;/li&gt;
&lt;li&gt;결과: 데이터에 대한 해석과 설명&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;머신러닝 (Machine Learning)&lt;/b&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;b&gt;자동으로 패턴을 학습하고 예측하는 모델을 구축&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;주요 기법: 지도 학습(Regression, Classification), 비지도 학습(Clustering, Dimensionality Reduction)&lt;/li&gt;
&lt;li&gt;결과: 예측 모델, 자동화된 의사 결정 시스템&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;데이터 분석 vs 머신러닝 비교 표&lt;/b&gt;&lt;/h3&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-style=&quot;style12&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt; 비교 항목 &lt;/b&gt;&lt;/td&gt;
&lt;td&gt;데이터 분석 (Data Analysis)&lt;/td&gt;
&lt;td&gt;머신러닝 (Machine Learning)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;데이터의 의미와 패턴을 찾음&lt;/td&gt;
&lt;td&gt;패턴을 학습하여 미래를 예측&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;방법론&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;통계 분석, EDA, 데이터 시각화&lt;/td&gt;
&lt;td&gt;지도학습, 비지도학습, 강화학습&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;출력 결과&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;데이터의 해석 및 설명&lt;/td&gt;
&lt;td&gt;자동화된 예측 및 의사 결정&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;b&gt;활용 사례&lt;/b&gt;&lt;/td&gt;
&lt;td&gt;고객 구매 패턴 분석, A/B 테스트&lt;/td&gt;
&lt;td&gt;추천 시스템, 이미지 인식, 자율주행&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 분석은 &lt;b&gt;데이터를 탐색하고 해석하여 의미를 도출하는 과정&lt;/b&gt;이며, 머신러닝은 &lt;b&gt;데이터를 학습하여 자동으로 패턴을 찾고 미래를 예측하는 방법론&lt;/b&gt;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 분석은 머신러닝을 포함할 수도 있지만, 머신러닝은 분석보다 &lt;b&gt;예측 및 자동화에 초점&lt;/b&gt;을 맞춘다는 점에서 차이가 있다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1.1.3 데이터 사이언스가 활용되는 분야&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;데이터 사이언스는 다양한 산업에서 &lt;b&gt;비즈니스 가치 창출과 문제 해결&lt;/b&gt;을 위해 활용되며, 기업과 연구 기관뿐만 아니라 공공 분야에서도 중요한 역할을 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;금융(Finance)&lt;/b&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;b&gt;사기 탐지(Fraud Detection)&lt;/b&gt;: 신용카드 결제 및 금융 거래 데이터를 분석하여 이상 패턴 감지&lt;/li&gt;
&lt;li&gt;&lt;b&gt;투자 및 리스크 관리(Investment &amp;amp; Risk Management)&lt;/b&gt;: 주식시장 데이터 분석 및 알고리즘 트레이딩&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고객 맞춤 금융 서비스&lt;/b&gt;: 개인 맞춤형 금융 상품 추천&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;의료(Healthcare)&lt;/b&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;b&gt;질병 예측 및 진단(Disease Prediction &amp;amp; Diagnosis)&lt;/b&gt;: 의료 데이터를 분석하여 질병 발병 가능성 예측&lt;/li&gt;
&lt;li&gt;&lt;b&gt;의료 영상 분석(Medical Image Analysis)&lt;/b&gt;: 딥러닝을 활용한 CT, MRI, X-ray 진단 자동화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;병원 운영 최적화(Hospital Management Optimization)&lt;/b&gt;: 환자 대기 시간 예측 및 병상 관리&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;마케팅 및 고객 분석(Marketing &amp;amp; Customer Analytics)&lt;/b&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;b&gt;추천 시스템(Recommendation System)&lt;/b&gt;: 고객의 소비 패턴을 분석하여 맞춤형 제품 추천&lt;/li&gt;
&lt;li&gt;&lt;b&gt;고객 세분화(Customer Segmentation)&lt;/b&gt;: K-Means 클러스터링을 활용한 고객 그룹화&lt;/li&gt;
&lt;li&gt;&lt;b&gt;광고 최적화(Ad Optimization)&lt;/b&gt;: A/B 테스트 및 데이터 기반 광고 성과 분석&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;자율주행 및 스마트 모빌리티(Autonomous Vehicles &amp;amp; Smart Mobility)&lt;/b&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;b&gt;자율주행 자동차(Autonomous Vehicles)&lt;/b&gt;: 딥러닝을 활용한 객체 탐지 및 실시간 주행 예측&lt;/li&gt;
&lt;li&gt;&lt;b&gt;교통 흐름 예측(Traffic Flow Prediction)&lt;/b&gt;: 실시간 도로 데이터 분석을 통한 교통 체증 예측&lt;/li&gt;
&lt;li&gt;&lt;b&gt;공유 모빌리티 최적화(Shared Mobility Optimization)&lt;/b&gt;: 차량 이용 패턴 분석을 통한 최적 배차 모델 구축&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;결론&lt;/b&gt;&lt;/h2&gt;
&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;데이터를 효과적으로 분석하고 모델링하여 &lt;b&gt;비즈니스 가치와 효율성을 극대화&lt;/b&gt;하는 역할을 하며, 점점 더 많은 기업과 연구 기관에서 필수적인 요소로 자리 잡고 있다.&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;reaction-1382&quot; data-tistory-react-app=&quot;Reaction&quot;&gt;
&lt;div&gt;&lt;span&gt;좋아요&lt;/span&gt;&lt;span&gt;2&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;button data-blog-title=&quot;개발_노트&quot; data-relative-pc-url=&quot;/1382&quot; data-pc-url=&quot;https://gangdonggil.tistory.com/1382&quot; data-profile-name=&quot;개발_노트&quot; data-profile-image=&quot;https://tistory1.daumcdn.net/tistory/6925663/attach/7b39285234874926a543cfb8a174ade4&quot; data-description=&quot;1.1 데이터 사이언스란?1.1.1 데이터 사이언스의 정의데이터 사이언스(Data Science)는 데이터를 수집, 처리, 분석, 모델링하여 가치 있는 인사이트(통찰력)를 도출하고 의사 결정을 지원하는 학문이자 기술 분야이다.데이터 사이언스는 단순한 데이터 분석을 넘어 빅데이터, 인공지능(AI), 머신러닝(ML) 등과 결합하여 더욱 정교한 의사 결정을 가능하게 한다. 현대 사회에서는 방대한 양의 데이터를 효과적으로 처리하고 활용하는 것이 중요해졌으며, 데이터 사이언스는 이를 최적화하는 데 핵심적인 역할을 한다.데이터 사이언스를 구성하는 주요 요소통계학(Statistics): 데이터를 요약하고 패턴을 분석하여 의미를 도출데이터 분석(Data Analysis): 데이터를 정리, 시각화, 해석하여 유용한 정보..&quot; data-title=&quot;데이터 사이언스 - 1. 데이터 사이언스 개요 (1.1 데이터 사이언스란?)&quot; data-thumbnail-url=&quot;https://t1.daumcdn.net/tistory_admin/static/images/openGraph/opengraph.png&quot;&gt;&lt;span&gt;공유하기&lt;/span&gt;&lt;/button&gt;
&lt;div id=&quot;tistorySnsLayer&quot;&gt;
&lt;div&gt;&lt;button data-tiara-copy=&quot;URL복사&quot; data-tiara-layer=&quot;copy_url&quot; data-tiara-action-name=&quot;공유_클릭&quot; data-service=&quot;url&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;URL 복사&lt;/span&gt;&lt;/button&gt;&lt;button data-tiara-copy=&quot;카카오톡 공유&quot; data-tiara-layer=&quot;kakao&quot; data-tiara-action-name=&quot;공유_클릭&quot; data-service=&quot;kakaotalk&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;카카오톡 공유&lt;/span&gt;&lt;/button&gt;&lt;button data-tiara-copy=&quot;페이스북 공유&quot; data-tiara-layer=&quot;facebook&quot; data-tiara-action-name=&quot;공유_클릭&quot; data-service=&quot;facebook&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;페이스북 공유&lt;/span&gt;&lt;/button&gt;&lt;button data-tiara-copy=&quot;엑스 공유&quot; data-tiara-layer=&quot;X&quot; data-tiara-action-name=&quot;공유_클릭&quot; data-service=&quot;twitter&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;엑스 공유&lt;/span&gt;&lt;/button&gt;&lt;span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div data-category-visibility=&quot;public&quot; data-entry-visibility=&quot;public&quot; data-entry-id=&quot;1382&quot;&gt;&lt;button&gt;&lt;span&gt;게시글 관리&lt;/span&gt;&lt;/button&gt;
&lt;div id=&quot;tistoryEtcLayer&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;button data-tiara-copy=&quot;구독하기&quot; data-tiara-action-name=&quot;구독 버튼_클릭&quot; data-device=&quot;web_pc&quot; data-url=&quot;https://gangdonggil.tistory.com/1382&quot; data-blog-id=&quot;6925663&quot;&gt;&lt;/button&gt;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://gangdonggil.tistory.com/1382&quot;&gt;https://gangdonggil.tistory.com/1382&lt;/a&gt; [개발_노트:티스토리]&lt;/p&gt;</description>
      <category>study/AI</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/341</guid>
      <comments>https://nizimo.tistory.com/341#entry341comment</comments>
      <pubDate>Mon, 28 Jul 2025 08:47:51 +0900</pubDate>
    </item>
    <item>
      <title>11. 시계열 데이터 분석 (11.2 시계열 모델링 (Time Series Modeling))              출처: https://gangdonggil.tistory.com/1411 [개발_노트:티스토리]</title>
      <link>https://nizimo.tistory.com/340</link>
      <description>&lt;h1&gt;&lt;b&gt;11.2 시계열 모델링 (Time Series Modeling)&lt;/b&gt;&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시계열 모델링은 &lt;b&gt;시간에 따라 변하는 데이터를 분석하고 미래를 예측하는 기법&lt;/b&gt;이다.&lt;br /&gt;전통적인 통계 모델인 &lt;b&gt;ARIMA, SARIMA&lt;/b&gt;와 딥러닝을 활용한 &lt;b&gt;LSTM 모델&lt;/b&gt;이 대표적인 방법이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 장에서는 &lt;b&gt;ARIMA, SARIMA 모델과 LSTM을 활용한 시계열 예측 기법&lt;/b&gt;을 다룬다.&lt;/p&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;11.2.1 ARIMA 모델 (AutoRegressive Integrated Moving Average)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1) ARIMA란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ARIMA(자기회귀 누적 이동 평균)는 &lt;b&gt;시계열 데이터를 기반으로 미래 값을 예측하는 대표적인 통계적 모델&lt;/b&gt;이다.&lt;br /&gt;이 모델은 &lt;b&gt;자기회귀(AR), 차분(I), 이동 평균(MA)의 조합으로 시계열 데이터를 분석&lt;/b&gt;한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;ARIMA 모델 구성 요소&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;b&gt;AR (AutoRegressive, 자기회귀)&lt;/b&gt;: 과거 값(시간 t 이전 값들)을 사용하여 현재 값을 예측&lt;/li&gt;
&lt;li&gt;&lt;b&gt;I (Integrated, 차분)&lt;/b&gt;: 데이터의 안정성을 확보하기 위해 차분 연산 수행&lt;/li&gt;
&lt;li&gt;&lt;b&gt;MA (Moving Average, 이동 평균)&lt;/b&gt;: 과거의 예측 오차를 사용하여 현재 값을 예측&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;ARIMA 모델 수식&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;Y_t = c + &amp;phi;_1 * Y_{t-1} + &amp;phi;_2 * Y_{t-2} + ... + &amp;theta;_1 * e_{t-1} + &amp;theta;_2 * e_{t-2} + ... + e_t
&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;b&gt;Y_t&lt;/b&gt;: 현재 값&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&amp;phi;&lt;/b&gt;: 자기회귀 계수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;&amp;theta;&lt;/b&gt;: 이동 평균 계수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;e_t&lt;/b&gt;: 예측 오차&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2) ARIMA 모델 적용 (Python 코드 예제)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;Python 코드 예제 (ARIMA 모델을 활용한 시계열 예측)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from statsmodels.tsa.arima.model import ARIMA

# 가상의 시계열 데이터 생성
date_range = pd.date_range(start=&quot;2023-01-01&quot;, periods=100, freq=&quot;D&quot;)
np.random.seed(42)
data = np.cumsum(np.random.normal(loc=0, scale=2, size=100)) + 100
df = pd.DataFrame({&quot;Date&quot;: date_range, &quot;Value&quot;: data})
df.set_index(&quot;Date&quot;, inplace=True)

# ARIMA 모델 학습 (p=2, d=1, q=2 설정)
model = ARIMA(df[&quot;Value&quot;], order=(2, 1, 2))
model_fit = model.fit()

# 예측 수행 (향후 10일)
forecast = model_fit.forecast(steps=10)

# 결과 시각화
plt.figure(figsize=(10, 5))
plt.plot(df, label=&quot;Actual Data&quot;)
plt.plot(pd.date_range(start=df.index[-1], periods=11, freq=&quot;D&quot;)[1:], forecast, label=&quot;ARIMA Forecast&quot;, linestyle=&quot;dashed&quot;, color=&quot;red&quot;)
plt.xlabel(&quot;Date&quot;)
plt.ylabel(&quot;Value&quot;)
plt.title(&quot;ARIMA 모델 예측 결과&quot;)
plt.legend()
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;ARIMA 모델 활용&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;order=(p, d, q)에서
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;p&lt;/b&gt;: 자기회귀 차수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;d&lt;/b&gt;: 차분 차수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;q&lt;/b&gt;: 이동 평균 차수&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;model_fit.forecast(steps=n)을 사용해 &lt;b&gt;미래 n일 예측 가능&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;11.2.2 SARIMA 모델 (Seasonal ARIMA, 계절성 ARIMA)&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1) SARIMA란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SARIMA는 &lt;b&gt;ARIMA 모델에 계절성(Seasonality) 요소를 추가한 모델&lt;/b&gt;이다.&lt;br /&gt;계절성을 포함하는 시계열 데이터(예: 월별 판매량, 계절별 온도 변화)에서는 &lt;b&gt;ARIMA보다 SARIMA가 더 적합&lt;/b&gt;하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;SARIMA 모델 구성 요소&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;b&gt;ARIMA(p, d, q) 모델을 기반으로 계절성 요소 추가&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;계절성 차수(P, D, Q, m)&lt;/b&gt;가 추가됨
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;P&lt;/b&gt;: 계절성 자기회귀 차수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;D&lt;/b&gt;: 계절성 차분 차수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;Q&lt;/b&gt;: 계절성 이동 평균 차수&lt;/li&gt;
&lt;li&gt;&lt;b&gt;m&lt;/b&gt;: 계절 주기 (예: 월별 데이터라면 m=12)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;SARIMA 모델 수식&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;SARIMA(p, d, q) &amp;times; (P, D, Q, m)
&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;b&gt;일반 ARIMA(p, d, q) 모델에 계절성 요소 (P, D, Q, m)를 포함&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2) SARIMA 모델 적용 (Python 코드 예제)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;Python 코드 예제 (SARIMA 모델을 활용한 시계열 예측)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;from statsmodels.tsa.statespace.sarimax import SARIMAX

# SARIMA 모델 학습 (p=1, d=1, q=1) &amp;times; (P=1, D=1, Q=1, m=12)
sarima_model = SARIMAX(df[&quot;Value&quot;], order=(1, 1, 1), seasonal_order=(1, 1, 1, 12))
sarima_fit = sarima_model.fit()

# 예측 수행 (향후 10일)
sarima_forecast = sarima_fit.forecast(steps=10)

# 결과 시각화
plt.figure(figsize=(10, 5))
plt.plot(df, label=&quot;Actual Data&quot;)
plt.plot(pd.date_range(start=df.index[-1], periods=11, freq=&quot;D&quot;)[1:], sarima_forecast, label=&quot;SARIMA Forecast&quot;, linestyle=&quot;dashed&quot;, color=&quot;red&quot;)
plt.xlabel(&quot;Date&quot;)
plt.ylabel(&quot;Value&quot;)
plt.title(&quot;SARIMA 모델 예측 결과&quot;)
plt.legend()
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;SARIMA 모델 활용&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;seasonal_order=(P, D, Q, m)를 설정하여 &lt;b&gt;계절성 반영 가능&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;주기적 변동이 있는 데이터에서 강력한 성능 발휘&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;11.2.3 LSTM을 활용한 시계열 예측&lt;/b&gt;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;1) LSTM이란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;LSTM(Long Short-Term Memory)은 &lt;b&gt;딥러닝 기반의 시계열 예측 모델&lt;/b&gt;로,&lt;br /&gt;장기적인 패턴을 학습할 수 있어 ARIMA, SARIMA보다 &lt;b&gt;더 복잡한 데이터 패턴을 예측하는 데 유리&lt;/b&gt;하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;LSTM의 특징&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;b&gt;장기 의존성(Long-Term Dependency) 학습 가능&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;비선형 관계를 학습할 수 있어 복잡한 시계열 데이터에 적합&lt;/b&gt;&lt;/li&gt;
&lt;li&gt;&lt;b&gt;대량의 데이터에서 강력한 성능 발휘&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;2) LSTM을 활용한 시계열 예측 (Python 코드 예제)&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;  &lt;b&gt;Python 코드 예제 (LSTM 기반 시계열 예측 모델 구현)&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;import tensorflow as tf
from tensorflow.keras import layers
from sklearn.preprocessing import MinMaxScaler

# 데이터 정규화 (LSTM은 데이터 정규화 필요)
scaler = MinMaxScaler()
df[&quot;Scaled_Value&quot;] = scaler.fit_transform(df[[&quot;Value&quot;]])

# 입력 데이터 생성 (과거 10일 데이터를 기반으로 예측)
sequence_length = 10
X, y = [], []
for i in range(len(df) - sequence_length):
    X.append(df[&quot;Scaled_Value&quot;].values[i:i+sequence_length])
    y.append(df[&quot;Scaled_Value&quot;].values[i+sequence_length])

X, y = np.array(X), np.array(y)

# LSTM 모델 생성
model = tf.keras.Sequential([
    layers.LSTM(50, return_sequences=True, input_shape=(sequence_length, 1)),
    layers.LSTM(50, return_sequences=False),
    layers.Dense(1)
])

# 모델 컴파일 및 학습
model.compile(optimizer=&quot;adam&quot;, loss=&quot;mse&quot;)
model.fit(X, y, epochs=20, batch_size=16)

# 예측 수행
y_pred = model.predict(X)

# 결과 시각화
plt.figure(figsize=(10, 5))
plt.plot(df.index[sequence_length:], y, label=&quot;Actual Data&quot;, alpha=0.5)
plt.plot(df.index[sequence_length:], y_pred, label=&quot;LSTM Prediction&quot;, linestyle=&quot;dashed&quot;, color=&quot;red&quot;)
plt.xlabel(&quot;Date&quot;)
plt.ylabel(&quot;Value&quot;)
plt.title(&quot;LSTM 모델 예측 결과&quot;)
plt.legend()
plt.show()
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;LSTM 활용&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;데이터 정규화 필요 (MinMaxScaler)&lt;/li&gt;
&lt;li&gt;과거 데이터를 기반으로 &lt;b&gt;미래 값 예측 가능&lt;/b&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;결론&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;✅ &lt;b&gt;ARIMA&lt;/b&gt; &amp;rarr; 단기적인 예측에 강점, 간단한 시계열 분석에 적합&lt;br /&gt;✅ &lt;b&gt;SARIMA&lt;/b&gt; &amp;rarr; 계절성을 반영한 시계열 분석에 적합&lt;br /&gt;✅ &lt;b&gt;LSTM&lt;/b&gt; &amp;rarr; 복잡한 패턴을 학습하고 장기 예측에 강력한 성능 발휘&lt;/p&gt;
&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;출처: &lt;a href=&quot;https://gangdonggil.tistory.com/1411&quot;&gt;https://gangdonggil.tistory.com/1411&lt;/a&gt; [개발_노트:티스토리]&lt;/p&gt;</description>
      <category>study/AI</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/340</guid>
      <comments>https://nizimo.tistory.com/340#entry340comment</comments>
      <pubDate>Mon, 28 Jul 2025 08:47:04 +0900</pubDate>
    </item>
    <item>
      <title>웹진 2022년 11월호 &amp;ldquo;딥러닝 기반 시계열 예측(Time Series Forecasting) 모델 동향&amp;rdquo;</title>
      <link>https://nizimo.tistory.com/339</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-message-id=&quot;7f4b71a1-64ff-4c29-a49d-09fdf9efcf91&quot; data-message-author-role=&quot;user&quot;&gt;
&lt;div&gt;
&lt;div data-multiline=&quot;&quot;&gt;
&lt;div&gt;&lt;a href=&quot;https://ppta.or.kr/webzine/2022_11/a1.html&quot;&gt;https://ppta.or.kr/webzine/2022_11/a1.html&lt;/a&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-message-model-slug=&quot;gpt-4o&quot; data-message-id=&quot;309c5a7c-7842-45b5-a3b7-6862fcde5414&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-end=&quot;37&quot; data-start=&quot;0&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아래는 요청하신 PPTA 웹진 2022년 11월호 &amp;ldquo;딥러닝 기반 시계열 예측(Time Series Forecasting) 모델 동향&amp;rdquo; 페이지 내용을 &lt;b&gt;공적이고 전문적인 스타일&lt;/b&gt;로 &lt;b&gt;간결하게 정리&lt;/b&gt;한 것입니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr data-end=&quot;42&quot; data-start=&quot;39&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;54&quot; data-start=&quot;44&quot; data-ke-size=&quot;size26&quot;&gt;  개요&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;212&quot; data-start=&quot;55&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;134&quot; data-start=&quot;55&quot;&gt;&lt;span&gt;&lt;b&gt;주제&lt;/b&gt;: 금융, 기후, 의료, 교통 등 다양한 분야에서 활용되는 &lt;b&gt;시계열 데이터 예측&lt;/b&gt;의 최근 딥러닝 모델 동향. 전통적 통계모델(ARIMA, VAR)과 대비해 &lt;b&gt;RNN 계열&lt;/b&gt;, &lt;b&gt;Neural ODE/CDE&lt;/b&gt;, &lt;b&gt;Transformer 계열&lt;/b&gt;, &lt;b&gt;GCN 계열&lt;/b&gt; 모델을 중심으로 소개.&lt;/span&gt; &lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://ppta.or.kr/webzine/2022_11/a1.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;정부조달기술진흥협회&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;212&quot; data-start=&quot;135&quot;&gt;&lt;span&gt;&lt;b&gt;저자&lt;/b&gt;: 임선규 과장 (금융결제원), 개인 의견임을 명시.&lt;/span&gt; &lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://ppta.or.kr/webzine/2022_11/a1.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;정부조달기술진흥협회&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;217&quot; data-start=&quot;214&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;229&quot; data-start=&quot;219&quot; data-ke-size=&quot;size26&quot;&gt;I. 서론&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;437&quot; data-start=&quot;230&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;397&quot; data-start=&quot;230&quot;&gt;&lt;span&gt;시계열 데이터 예측은 오랜 전통의 연구 분야로,&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;397&quot; data-start=&quot;274&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;315&quot; data-start=&quot;274&quot;&gt;&lt;span&gt;&lt;b&gt;ARIMA&lt;/b&gt;ㆍ&lt;b&gt;VAR&lt;/b&gt; 같은 통계 기반 모델에 더해&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;397&quot; data-start=&quot;318&quot;&gt;&lt;span&gt;&lt;b&gt;RNN&lt;/b&gt;, &lt;b&gt;GRU&lt;/b&gt;, &lt;b&gt;LSTM&lt;/b&gt; 등 딥러닝 기반 모델 연구가 활발히 이루어짐&lt;/span&gt; &lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://ppta.or.kr/webzine/2022_11/a1.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;정부조달기술진흥협회&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;437&quot; data-start=&quot;398&quot;&gt;&lt;span&gt;논문 구조: RNN 계열(II장), ODE/CDE 기반(III장), Transformer 기반(IV장), 공간-시간 정보 활용 GCN 계열(V장), 적용 환경(VI장) 순.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;442&quot; data-start=&quot;439&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;462&quot; data-start=&quot;444&quot; data-ke-size=&quot;size26&quot;&gt;II. RNN 계열 모델&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;720&quot; data-start=&quot;463&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;546&quot; data-start=&quot;463&quot;&gt;&lt;span&gt;&lt;b&gt;RNN&lt;/b&gt;은 순환적 구조로 시계열 데이터를 다루지만, 장기 의존성 문제(long‑term dependency)가 존재&lt;/span&gt; &lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://ppta.or.kr/webzine/2022_11/a1.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;정부조달기술진흥협회&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;720&quot; data-start=&quot;547&quot;&gt;&lt;span&gt;이를 보완한 &lt;b&gt;LSTM&lt;/b&gt;, &lt;b&gt;GRU&lt;/b&gt;&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;720&quot; data-start=&quot;593&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;636&quot; data-start=&quot;593&quot;&gt;&lt;span&gt;LSTM: forget/input/output 게이트 구조로 장기 패턴 학습 가능&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;720&quot; data-start=&quot;639&quot;&gt;&lt;span&gt;GRU: reset/update 게이트, 파라미터 수 적고 학습 속도 빠름&lt;/span&gt; &lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://ppta.or.kr/webzine/2022_11/a1.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;정부조달기술진흥협회&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;725&quot; data-start=&quot;722&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;752&quot; data-start=&quot;727&quot; data-ke-size=&quot;size26&quot;&gt;III. ODE / CDE 기반 모델&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1058&quot; data-start=&quot;753&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1058&quot; data-start=&quot;753&quot;&gt;&lt;span&gt;기존 RNN&amp;middot;LSTM&amp;middot;GRU는 &lt;b&gt;불연속 데이터&lt;/b&gt; 기반이며, &lt;b&gt;Neural ODE&lt;/b&gt;와 &lt;b&gt;Neural CDE&lt;/b&gt;는&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1058&quot; data-start=&quot;799&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;842&quot; data-start=&quot;799&quot;&gt;&lt;span&gt;연속적 hidden state dynamics를 &lt;b&gt;미분 방정식&lt;/b&gt; 개념으로 모델링&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;928&quot; data-start=&quot;845&quot;&gt;&lt;span&gt;&lt;b&gt;Neural ODE&lt;/b&gt;: 연속 모델링과 메모리 효율성을 동시에 확보 (역전파 시 ODE solver 사용)&lt;/span&gt; &lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://ppta.or.kr/webzine/2022_11/a1.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;정부조달기술진흥협회&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;974&quot; data-start=&quot;931&quot;&gt;&lt;span&gt;&lt;b&gt;ODE‑RNN&lt;/b&gt;: 불규칙 시계열 처리에 적합&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1058&quot; data-start=&quot;977&quot;&gt;&lt;span&gt;&lt;b&gt;Neural CDE&lt;/b&gt;: controlled differential equations 기반으로 irregular time series에 특화&lt;/span&gt; &lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://ppta.or.kr/webzine/2022_11/a1.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;정부조달기술진흥협회&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1063&quot; data-start=&quot;1060&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1091&quot; data-start=&quot;1065&quot; data-ke-size=&quot;size26&quot;&gt;IV. Transformer 계열 모델&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1265&quot; data-start=&quot;1092&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1265&quot; data-start=&quot;1092&quot;&gt;&lt;span&gt;Transformer는 자연어처리 기반 기술이나,&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1265&quot; data-start=&quot;1138&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1181&quot; data-start=&quot;1138&quot;&gt;&lt;span&gt;&lt;b&gt;Seq2Seq + Attention&lt;/b&gt; 구조를 통해 &lt;b&gt;장기 의존성 문제&lt;/b&gt; 개선&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1265&quot; data-start=&quot;1184&quot;&gt;&lt;span&gt;Transformer 계열은 시계열 예측에 더 최적화된 구조로 발전 중&lt;/span&gt; &lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://ppta.or.kr/webzine/2022_11/a1.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;정부조달기술진흥협회&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1270&quot; data-start=&quot;1267&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1289&quot; data-start=&quot;1272&quot; data-ke-size=&quot;size26&quot;&gt;V. GCN 계열 모델&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1463&quot; data-start=&quot;1290&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1463&quot; data-start=&quot;1290&quot;&gt;&lt;span&gt;**GCN (Graph Convolutional Network)**은 시계열이 &lt;b&gt;공간 정보&lt;/b&gt;도 포함할 경우 효과적&lt;/span&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1463&quot; data-start=&quot;1336&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1379&quot; data-start=&quot;1336&quot;&gt;&lt;span&gt;예: 교통량 예측&amp;mdash;도로망의 공간 구조와 시간을 함께 모델링&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1463&quot; data-start=&quot;1382&quot;&gt;&lt;span&gt;CNN 개념을 그래프 구조에 확장하여 시계열 예측에 적용&lt;/span&gt; &lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://ppta.or.kr/webzine/2022_11/a1.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;정부조달기술진흥협회&lt;/span&gt;&lt;span&gt;+3&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;정부조달기술진흥협회&lt;/span&gt;&lt;span&gt;+3&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;정부조달기술진흥협회&lt;/span&gt;&lt;span&gt;+3&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1468&quot; data-start=&quot;1465&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1487&quot; data-start=&quot;1470&quot; data-ke-size=&quot;size26&quot;&gt;VI. 모델 활용 환경&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;1613&quot; data-start=&quot;1488&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;1531&quot; data-start=&quot;1488&quot;&gt;&lt;span&gt;대부분 모델은 &lt;b&gt;PyTorch 등 개발 프레임워크 패키지&lt;/b&gt;나 &lt;b&gt;GitHub 오픈 소스 코드&lt;/b&gt; 형태로 제공됨&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;1613&quot; data-start=&quot;1532&quot;&gt;&lt;span&gt;실험 환경 구축 시 접근성과 활용 사례가 풍부하며, 실제 데이터 분석 및 예측 실험에 바로 적용 가능&lt;/span&gt; &lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://ppta.or.kr/webzine/2022_11/a1.html?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;정부조달기술진흥협회&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;hr data-end=&quot;1618&quot; data-start=&quot;1615&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1630&quot; data-start=&quot;1620&quot; data-ke-size=&quot;size26&quot;&gt;✅ 요약 정리&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;모델 계열특징 요약
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1944&quot; data-start=&quot;1632&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1944&quot; data-start=&quot;1682&quot;&gt;
&lt;tr data-end=&quot;1735&quot; data-start=&quot;1682&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1697&quot; data-start=&quot;1682&quot;&gt;RNN&amp;middot;LSTM&amp;middot;GRU&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;1735&quot; data-start=&quot;1697&quot;&gt;순차적 예측, 장기 의존성 문제 존재 &amp;rarr; 게이트 방식으로 보완&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1820&quot; data-start=&quot;1736&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1753&quot; data-start=&quot;1736&quot;&gt;Neural ODE/CDE&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;1820&quot; data-start=&quot;1753&quot;&gt;continuous hidden state modeling, 메모리 효율성과 irregular data 처리 우수&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1886&quot; data-start=&quot;1821&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1837&quot; data-start=&quot;1821&quot;&gt;Transformer&lt;/td&gt;
&lt;td data-col-size=&quot;md&quot; data-end=&quot;1886&quot; data-start=&quot;1837&quot;&gt;Attention 기반, 장기 의존성 문제 해결, NLP에서 시계열 예측으로 확장&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1944&quot; data-start=&quot;1887&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1902&quot; data-start=&quot;1887&quot;&gt;GCN&lt;/td&gt;
&lt;td data-end=&quot;1944&quot; data-start=&quot;1902&quot; data-col-size=&quot;md&quot;&gt;공간+시간 정보 함께 활용, 교통 등 그래프 특성 데이터 예측에 강점&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;hr data-end=&quot;1949&quot; data-start=&quot;1946&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-end=&quot;1967&quot; data-start=&quot;1951&quot; data-ke-size=&quot;size26&quot;&gt;  추천 학습 방향&lt;/h2&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2154&quot; data-start=&quot;1968&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2084&quot; data-start=&quot;1968&quot;&gt;직접 코딩 실험 또는 Kaggle 등 예측 대회 데이터 사용하여,
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;2084&quot; data-start=&quot;2011&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;2084&quot; data-start=&quot;2011&quot;&gt;실습 중심으로 &lt;b&gt;LSTM&lt;/b&gt;, &lt;b&gt;Transformer&lt;/b&gt;, &lt;b&gt;GCN 기반 시계열 모델&lt;/b&gt;을 비교해 보는 것 권장합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li data-end=&quot;2154&quot; data-start=&quot;2085&quot;&gt;논문이나 모델별 &lt;b&gt;GitHub 구현 코드&lt;/b&gt; 확인 후, 적용 사례 중심으로 분석해보시면 이해가 훨씬 수월하실 것입니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;2206&quot; data-start=&quot;2156&quot; data-ke-size=&quot;size16&quot;&gt;추가적으로 알고 싶은 부분이나, 예제 코드&amp;middot;모델 추천 요청 있으면 언제든지 말씀해 주세요.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>study</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/339</guid>
      <comments>https://nizimo.tistory.com/339#entry339comment</comments>
      <pubDate>Mon, 28 Jul 2025 08:42:15 +0900</pubDate>
    </item>
    <item>
      <title>[JBoss EAP 7] JBoss EAP 7.3 주요 설정 내용</title>
      <link>https://nizimo.tistory.com/337</link>
      <description>&lt;div&gt;
&lt;div&gt;&lt;span&gt;IT 이야기/JBoss EAP&lt;/span&gt;
&lt;h1&gt;[JBoss EAP 7] JBoss EAP 7.3 주요 설정 내용&lt;/h1&gt;
&lt;span&gt; &lt;span&gt;by 찬찬이 아빠&lt;/span&gt; &lt;span&gt;2023. 4. 11.&lt;/span&gt; &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;반응형&lt;/div&gt;
&lt;ins data-ad-status=&quot;filled&quot; data-adsbygoogle-status=&quot;done&quot; data-ad-format=&quot;auto&quot; data-ad-client=&quot;ca-pub-7042950186351982&quot; data-ad-host=&quot;ca-host-pub-9691043933427338&quot;&gt;
&lt;div id=&quot;aswift_4_host&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/ins&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;600&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot; width=&quot;50%&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;span&gt; 1. JBoss EAP 7 버전 정보&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot; data-ke-style=&quot;style15&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;버전&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;color: #ffffff;&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;출시일&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;JBoss EAP 7.3.7&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;2021.05&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;600&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot; width=&quot;50%&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;nbsp;&lt;span&gt;&lt;span&gt; 2. JBoss EAP 7 주요 실행 스크립트&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) /JBOSS/domains/노드명/bin/env.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628835773720&quot; class=&quot;routeros&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;#!/bin/sh

DATE=`date +%Y%m%d%H%M%S`

##### JBoss EAP Directory Setup #####
export JBOSS_HOME=/JBOSS/jboss-eap-7.3
export JAVA_HOME=/usr/lib/jvm/java-1.8.0
export DOMAIN_BASE=/JBOSS/domains
export SERVER_NAME=AP_name10
export HOST_NAME=`hostname`

##### Configuration File #####
export CONFIG_FILE=standalone-ha.xml
export PORT_OFFSET=0
export JBOSS_USER=jboss

##### Bind Address #####
export BIND_ADDR=`hostname -i`
export MGMT_ADDR=$BIND_ADDR
export CONTROLLER_IP=$MGMT_ADDR
let CONTROLLER_PORT=9991+$PORT_OFFSET
export CONTROLLER_PORT

export LAUNCH_JBOSS_IN_BACKGROUND=true

##### Multicast IP for standalone-ha.xml #####
##### MIP, Change Please #####
export MULTICAST_ADDR=230.20.61.1
export JMS_MULTICAST_ADDR=231.20.61.1
export MODCLUSTER_MULTICAST_ADDR=224.20.61.100

export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.default.multicast.address=$MULTICAST_ADDR&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.messaging.group.address=$JMS_MULTICAST_ADDR&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.modcluster.multicast.address=$MODCLUSTER_MULTICAST_ADDR&quot;

##### TCP mode can be used when multicast is not preferable or allowed by security policies.
#### https://access,redhat.com/solutions/3021711
#export TCP_MULTICAST_ADDR=was1[7600],was2[7600]

#export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.jgroups.transport.machine=$SERVER_NAME&quot;
#export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.cluster.tcp.initial_hosts=$TCP_MULTICAST_ADDR&quot;

export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.tx.node.id=$SERVER_NAME&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.as.management.blocking.timeout=600&quot;
export LOG_HOME=/CLOUD/JBOSS/LOG/$SERVER_NAME

##### JBoss EAP System module and User module directory #####
export JBOSS_MODULEPATH=$JBOSS_HOME/modules

# JVM Options : Server
export JAVA_OPTS=&quot;-server $JAVA_OPTS&quot;

# JVM Options : Memory
export JAVA_OPTS=&quot; $JAVA_OPTS -Xss2m -Xms1024m -Xmx2048m -XX:MaxMetaspaceSize=512m&quot;

export JAVA_OPTS=&quot; $JAVA_OPTS -XX:+PrintGCTimeStamps&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -XX:+PrintGCDetails&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Xloggc:$LOG_HOME/gclog/gc_$DATE.log&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -XX:+UseParallelGC&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -XX:+ExplicitGCInvokesConcurrent&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -XX:HeapDumpPath=$LOG_HOME/gclog/java_pid_$DATE.hprof&quot;

# Linux Large Page Setting
#export JAVA_OPTS=&quot; $JAVA_OPTS -XX:+UseLargePages&quot;

export JAVA_OPTS=&quot; $JAVA_OPTS -verbose:gc&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Djava.net.preferIPv4Stack=true&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Dorg.jboss.resolver.warning=true&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Dsun.rmi.dgc.client.gcInterval=3600000 &quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Dsun.rmi.dgc.server.gcInterval=3600000&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Djava.awt.headless=true&quot;

export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.server.base.dir=$DOMAIN_BASE/$SERVER_NAME&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.socket.binding.port-offset=$PORT_OFFSET&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.node.name=${SERVER_NAME}&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.bind.address.management=$MGMT_ADDR&quot;
export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.bind.address=$BIND_ADDR&quot;

export JAVA_OPTS=&quot; $JAVA_OPTS -Dserver.mode=local&quot;

# Use log4j in application
export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.server.log.dir=$LOG_HOME &quot;

echo &quot;=================================================&quot;
echo &quot;JBOSS_HOME=$JBOSS_HOME&quot;
echo &quot;DOMAIN_BASE=$DOMAIN_BASE&quot;
echo &quot;SERVER_NAME=$SERVER_NAME&quot;
echo &quot;CONFIG_FILE=$CONFIG_FILE&quot;
echo &quot;BIND_ADDR=$BIND_ADDR&quot;
echo &quot;PORT_OFFSET=$PORT_OFFSET&quot;
echo &quot;CONTROLLER=$CONTROLLER_IP:$CONTROLLER_PORT&quot;
echo &quot;jboss.node.name=${SERVER_NAME}&quot;
echo &quot;=================================================&quot;

##### SCOUTER Setting
#SCOUTER_OPT=&quot;-javaagent:/scouter/agent.java_6_7/scouter.agent.jar -Dscouter.config=/scouter/agent.java_6_7/conf/AP_anme10.conf&quot;
#export JAVA_OPTS=&quot; $JAVA_OPTS $SCOUTER_OPT&quot;
#export JAVA_OPTS=&quot; $JAVA_OPTS -Djboss.modules.system.pkgs=org.jboss.byteman,scouter&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;2) /JBOSS/domains/노드명/bin/env.properties&lt;/p&gt;
&lt;pre id=&quot;code_1628834717463&quot; class=&quot;stylus&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;org.apache.catalina.connector.URI_ENCODING=UTF-8
org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING=true
org.apache.coyote.http11.Http11Protocol.MAX_HEADER_SIZE=8192
org.apache.coyote.ajp.DEFAULT_CONNECTION_TIME=60000
org.apache.coyote.http11.DEFAULT_CONNECTION_TIMEOUT=60000
org.apache.tomcat.util.http.Parameters.MAX_COUNT=10000
file.encoding=UTF-8
#jvmRoute=AP_name10
UseJK=true&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;3) /JBOSS/domains/노드명/bin/add-user.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628821067316&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#!/bin/sh

. ./env.sh

# JAVA_OPTS=&quot;$JAVA_OPTS -Djboss.domain.config.user.dir=../domain/configuration&quot;
JAVA_OPTS=&quot;$JAVA_OPTS -Djboss.server.config.user.dir=$DOMAIN_BASE/$SERVER_NAME/configuration&quot;

$JBOSS_HOME/bin/add-user.sh $@&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;4) /JBOSS/domains/노드명/bin/dbms-encryption-password.sh&lt;/p&gt;
&lt;pre id=&quot;code_1629447976532&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;#!/bin/sh

JAVA_HOME=/usr/lib/jvm/jre-1.8.0/bin
JBOSS_HOME=/JBOSS/jboss-eap-7.3

picketbox=`find ${JBOSS_HOME}/ -type f -name &quot;picketbox*&quot; | sort | head -n 1`
jboss_logging=`find ${JBOSS_HOME}/ -type f -name &quot;jboss-logging*&quot;`
module_name=org.picketbox.datasource.security.SecureIdentityLoginModule

export CLASSPATH=${picketbox}:${jboss_logging}

if [ -d $JAVA_HOME ]; then
	read -p &quot;Input Database Password : &quot; dbpassword
    ${JAVA_HOME}/java -cp $CLASSPATH ${module_name} ${dbpassword}
else
	echo &quot;JAVA 1.8 is not installed. Please install and try again.&quot;
fi&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;5) /JBOSS/domains/노드명/bin/dump.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628821183102&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#!/bin/sh

. ./env.sh

for count in 1 2 3; do
	echo &quot;Thread Dump : $count&quot;
    for i in `ps -ef | grep java |grep &quot;SERVER=$SERVER_NAME &quot; | awk '{priont $2}'`;do
    echo &quot;+kill -3 $i&quot;
    kill -3 $i
    echo &quot;sleep 1 sec&quot;
    sleep 1
    done
    echo &quot;done&quot;
    sleep 3
done&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;6) /JBOSS/domains/노드명/bin/jboss-cli.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628837239414&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#!/bin/sh

. ./env.sh

export JAVA_OPTS=&quot; -Djava.awt.headless=false $JAVA_OPTS&quot;

$JBOSS_HOME/bin/jboss-cli.sh --controller=$CONTROLLER_IP:$CONTROLLER_PORT --connect $@&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;7) /JBOSS/domains/노드명/bin/jconsole.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628837314486&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#!/bin/sh

. ./env.sh

echo &quot;================================================================&quot;
echo &quot;   JXM URL : service:jmx:remoting-jmx://$MGMT_ADDR:$CONTROLLER_PORT&quot;
echo &quot;================================================================&quot;
$JBOSS_HOME/bin/jconsole.sh&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;8) /JBOSS/domains/노드명/bin/jdr.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628837350369&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#!/bin/sh

. ./env.sh

$JBOSS_HOME/bin/jdr.sh $@&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;9) /JBOSS/domains/노드명/bin/kill.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628837414932&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#!/bin/sh

. ./env.sh

ps -ef | grep java | grep &quot;SERVER=$SERVER_NAME &quot; | awk {'print &quot;kill -9 &quot; $2'} | sh -x
ps -ef | grep &quot;tail&quot; | grep &quot;$SERVER_NAME&quot; | awk {'print &quot;kill -9 &quot; $2'} | sh -x&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;10) /JBOSS/domains/노드명/bin/shutdown.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628837473614&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#!/bin/sh

. ./env.sh

$JBOSS_HOME/bin/jboss-cli.sh --connect --controller=$CONTROLLER_IP:$CONTROLLER_PORT --command=:shutdown

tail -f $LOG_HOME/nohup/$SERVER_NAME.out&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;11) /JBOSS/domains/노드명/bin/start.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628838453278&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;#!/bin/sh

DATE=`date +%Y%m%d%H%M%S`

. ./env.sh

PID=`ps -ef | grep java | grep &quot;=$SERVER_NAME &quot; | awk '{print $2}'`
echo $PID

if [ e$PID != &quot;e&quot; ]
then
	echo &quot;JBoss SERVER - $SERVER_NAME is already Running...&quot;
    exit;
fi

UNAME=`id -u -n`
if [ e$UNAME != &quot;e$JBOSS_USER&quot; ]
then
	echo &quot;Use $JBOSS_USER account to start JBoss SERVER - $SERVER_NAME...&quot;
    exit;
fi

echo $JAVA_OPTS

if [ ! -f $LOG_HOME/server.log ]; then
	touch $LOG_HOME/server.log
fi

nohup $JBOSS_HOME/bin/standalone.sh -DSERVER=$SERVER_NAME -P=$DOMAIN_BASE/$SERVER_NAME/bin/env.properties -c $CONFIG_FILE &amp;gt;&amp;gt; $LOG_HOME/nohup/${SERVER_NAME}_${date}.out &amp;amp;

if [ e$1 = &quot;enotail&quot; ]
then
	echo &quot;Starting... $SERVER_NAME&quot;
    exit;
fi

tail -f $LOG_HOME/server.log &amp;amp;
tail $LOG_HOME/server.log -n0 -F | while read line; do
	if [[ $line =~ ' started in ' ]] &amp;amp;&amp;amp; [[ $line =~ ' - Started ' ]] || [[ $line =~ ' ERROR ' ]]; then
    	pkill -9 -P $$ tail
    fi
done&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;12) /JBOSS/domains/노드명/bin/status.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628837531160&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#!/bin/sh

. ./env.sh

ps -ef | grep java | grep &quot;SERVER=$SERVER_NAME &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;13) /JBOSS/domains/노드명/bin/stop.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628837558060&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#!/bin/sh

. ./env.sh

ps -ef | grep java | grep &quot;SERVER=$SERVER_NAME &quot; | awk {'print &quot;kill -15 &quot; $2'} sh -x
ps -ef | grep &quot;tail&quot; | grep &quot;$SERVER_NAME&quot; | awk {'print &quot;kill -15 &quot; $2'} | sh -x&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;14) /JBOSS/domains/노드명/bin/tail.sh&lt;/p&gt;
&lt;pre id=&quot;code_1629448859123&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#!/bin/sh

. ./env.sh

tail -f $LOG_HOME/server.log&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;15) /JBOSS/domains/노드명/bin/scripts/jboss_start.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628839440559&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;#!/bin/sh

JBOSS_DIR=&quot;/JBOSS/domains&quot;

unset JBOSS_NODE DATE JBOSS_BIN_DIR PNODE_NAME UNAME JBOSS_HOME JAVA_HOME DOMAIN_BASE SERVER_NAME HOST_NAME CONFIG_FILE PORT_OFFSET JBOSS_USER BIND_ADDR CONTROLLER_IP CONTROLLER_PORT MULTICAST_ADDR JMS_MULTICAST_ADDR MODCLUSTER_MULTICAST_ADDR JAVA_OPTS LOG_HOME JBOSS_MODULEPATH

if [ `ls -F $JBOSS_DIR | grep / | wc -l` -eq 1 ]; then
	node_list=`ls -F $JBOSS_DIR | grep / | cut -d/ -f1`
	JBOSS_BIN_DIR=$JBOSS_DIR/${node_list}/bin
    
	if [ ! -d $JBOSS_BIN_DIR ]; then
		JBOSS_BIN_DIR=$JBOSS_DIR/${node_list}
	fi
    
    DATE=`date +%Y%m%d%H%M%S`
    if [ -f ${JBOSS_BIN_DIR}/env.sh ]; then
    	. ${JBOSS_BIN_DIR}/env.sh
    else
    	echo -e &quot;\n======================================&quot;
        echo -e &quot;${node_list} node are env.sh file not found\n&quot;
        echo -e &quot;\n======================================&quot;
        echo -e &quot;Rerun script after node name resolution\n&quot;
        exit;
    fi
    
    PID=`ps -ef | grep java | grep &quot;=$SERVER_NAME &quot; | awk '{print $2}'`    
    echo $PID
    
    if [ e$PID != &quot;e&quot; ]; then
		echo &quot;JBoss SERVER - $SERVER_NAME is already Running...&quot;
        exit;
	fi
    
    UNAME=`id -u -n`
	if [ e$UNAME != &quot;e$JBOSS_USER&quot; ]; then
		echo &quot;Use $JBOSS_USER account to start JBoss SERVER - $SERVER_NAME...&quot;
		exit;
	fi
    
	echo $JAVA_OPTS
    if [ ! -f $LOG_HOME/server.log ]; then
    	touch $LOG_HOME/server.log
    fi
    
	nohup $JBOSS_HOME/bin/standalone.sh -DSERVER=$SERVER_NAME -P=$JBOSS_BIN_DIR/env.properties -c $CONFIG_FILE &amp;gt;&amp;gt; $LOG_HOME/nohup/${SERVER_NAME}_${DATE}.out &amp;amp;

	if [ e$1 = &quot;enotail&quot; ]; then
		echo &quot;Starting... $SERVER_NAME&quot;
		exit;
	fi

	tail -f $LOG_HOME/server.log &amp;amp;
    tail $LOG_HOME/server.log -n0 -F | while read line; do
    	if [[ $line =~ ' started in ' ]] &amp;amp;&amp;amp; [[ &amp;amp;line =~ ' - Started ' ]] || [[ $line =~ ' ERROR ' ]]; then
        	pkill -9 -P $$ tail
        fi
    done
else
	node_check=`ps ax | grep jboss | grep &quot;DSERVER&quot; | grep &quot;standalone.sh&quot; | egrep -v &quot;java|grep&quot; | awk -F= '{print $2}' | awk '{print $1}' | sort -u`
    node_name=`echo ${node_check} | grep -v -e '^$' | tr &quot; &quot; &quot;|&quot;`
    if [[ ${node_name} == &quot;&quot; ]]; then
    	NODE_LIST=`ls -F $JBOSS_DIR | grep / | cut -d/ -f1 | grep -v -e '^$' | tr &quot;\n&quot; &quot;\t&quot;`
    else
    	NODE_LIST=`ls -F $JBOSS_DIR | grep / | cut -d/ -f1 | egrep -v &quot;${node_name}&quot; | grep -v -e '^$' | tr &quot;\n&quot; &quot;\t&quot;`
    fi
    
    if [ `echo ${NODE_LIST} | grep -v -e '^$' | wc -l` -eq 1 ]; then
    	echo -e &quot;\nInput JBoss Node Name.&quot;
        echo -e &quot;\\033[0;31mNode List : \\033[0;32m ${NODE_LIST} \\033[0;39m\n&quot;
        read -p &quot; [ JBoss Node Name ] : &quot; ID
        
        JBOSS_NODE=$JBOSS_DIR/${ID}
        
        if [[ $ID == &quot;&quot; ]]; then
        	echo -e &quot;\nSpace or Enter is not allowed..&quot;
            echo -e &quot;\\033[0;31mNode List : \\033[0;32m ${NODE_LIST} \\033[0;39m\n&quot;
            echo -e &quot;Rerun script after node name resolution\n&quot;
            exit;
        elif [ -d $JBOSS_NODE ]; then
        	JBOSS_BIN_DOR=$JBOSS_NODE/bin
            if [ ! -d $JBOSS_BIN_DIR ]; then
            	JBOSS_BIN_DIR=$JBOSS_NODE
            fi
            
            DATE=`date +%Y%m%d%H%M%S`
            if [ -f ${JBOSS_BIN_DIR}/env.sh ]; then
    			. ${JBOSS_BIN_DIR}/env.sh
            else
               	echo -e &quot;\n======================================&quot;
                echo -e &quot;${node_list} node are env.sh file not found\n&quot;
                echo -e &quot;\n======================================&quot;
                echo -e &quot;Rerun script after node name resolution\n&quot;
                exit;
            fi
            
            PID=`ps -ef | grep java | grep &quot;=$SERVER_NAME &quot; | awk '{print $2}'`    
            echo $PID
            if [ e$PID != &quot;e&quot; ]; then
            	echo &quot;JBoss SERVER - $SERVER_NAME is already Running...&quot;
                exit;
            fi
            
            UNAME=`id -u -n`
            if [ e$UNAME != &quot;e$JBOSS_USER&quot; ]; then
            	echo &quot;Use $JBOSS_USER account to start JBoss SERVER - $SERVER_NAME...&quot;
               exit;
            fi
            
            echo $JAVA_OPTS
            nohup $JBOSS_HOME/bin/standalone.sh -DSERVER=$SERVER_NAME -P=$JBOSS_BIN_DIR/env.properties -c $CONFIG_FILE &amp;gt;&amp;gt; $LOG_HOME/nohup/${SERVER_NAME}_${DATE}.out &amp;amp;
			
            if [ e$1 = &quot;enotail&quot; ]; then
            	echo &quot;Starting... $SERVER_NAME&quot;
                exit;
            fi
            
            tail -f $LOG_HOME/server.log &amp;amp;
            tail $LOG_HOME/server.log -n0 -F | while read line; do
            	if [[ $line =~ ' started in ' ]] &amp;amp;&amp;amp; [[ &amp;amp;line =~ ' - Started ' ]] || [[ $line =~ ' ERROR ' ]]; then
        			pkill -9 -P $$ tail
        		fi
            done
        else
        	echo -e &quot;\nNo Search Node Name : ${ID}&quot;
            echo -e &quot;\\033[0;31mNode List : \\033[0;32m ${NODE_LIST} \\033[0;39m\n&quot;
            echo -e &quot;Rerun script after node name resolution\n&quot;
            exit;
        fi
    else
    	echo -e &quot;\nAll JBoss Nodes are Running!!\n&quot;
    if
fi&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;16) /JBOSS/domains/노드명/bin/scripts/jboss_stop.sh&lt;/p&gt;
&lt;pre id=&quot;code_1628839615984&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;#!/bin/sh

JBOSS_DIR=`ps ax | grep jboss | grep &quot;DSERVER&quot; | grep &quot;standalone.sh&quot; | egrep -v &quot;grep&quot; | awk -F-P= '{print $2}' | awk -F/ '{print &quot;/&quot; $2, $3, $4}' | sort -u | tr &quot; &quot; &quot;/&quot;`

node_check=`ps ax | grep jboss | grep &quot;DSERVER&quot; | grep &quot;standalone.sh&quot; | egrep -v &quot;grep&quot; | awk -F= '{print $2}' awk '{print $1}' | sort -u`

unset JBOSS_NODE DATE JBOSS_BIN_DIR PNODE_NAME UNAME JBOSS_HOME JAVA_HOME DOMAIN_BASE SERVER_NAME HOST_NAME CONFIG_FILE PORT_OFFSET JBOSS_USER BIND_ADDR CONTROLLER_IP CONTROLLER_PORT MULTICAST_ADDR JMS_MULTICAST_ADDR MODCLUSTER_MULTICAST_ADDR JAVA_OPTS LOG_HOME JBOSS_MODULEPATH

if [ `echo ${node_check} | grep -v -e '^$' | tr &quot; &quot; &quot;\n&quot; | wc -l` -ge 1 ]; then
	for ID in ${node_check[@]}
    do
    	JBOSS_NODE=$JBOSS_DIR/${ID}
        echo -e &quot;\n Do you want ot stop the\\033]0;32m ${ID}\\033[0;39m Node?&quot;
        JBOSS_BIN_DIR=${JBOSS_NODE}/bin
        if [ ! -d ${JBOSS_BIN_DIR} ]; then
        	JBOSS_BIN_DIR=${JBOSS_NODE}
        fi
        
        DATE=`date +%Y%m%d%H%M%S`
        if [ -f ${JBOSS_BIN_DIR/env.sh ]; then
        	. ${JBOSS_BIN_DIR}/env.sh
        else
        	echo -e &quot;\n====================================&quot;
            echo -e &quot;${ID} are env.sh file not found&quot;
            echo -e &quot;\n====================================&quot;
            continue;
        fi
        echo -e &quot;\n&quot;
        read -p &quot; [ Input Yes or No  : ] &quot; answer
        	case $answer in
            	[yY]* )
                	ps -ef | grep &quot;java&quot; | grep &quot;${JBOSS_NODE}&quot; | awk {'print &quot;kill -15 &quot; $2'} | sh -x &amp;amp;&amp;amp; \
                    ps -ef | grep &quot;tail&quot; | grep &quot;${ID}&quot; | awk {'print &quot;kill -15 &quot; $2'} | sh -x;;
                [nN]* )
                	continue;;
                * )
                	echo -e &quot;\n You must enter Yes or No. Rerun the shell. &quot;;
            esac
        echo -e &quot;\n&quot;
    done
else
	echo -e &quot;JBoss Service is not Running!!\n&quot;
fi&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;17) /JBOSS/domains/노드명/bin/scripts/jboss_kill.sh&lt;/p&gt;
&lt;pre id=&quot;code_1629695154428&quot; class=&quot;bash&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;#!/bin/sh

JBOSS_DIR=`ps ax | grep jboss | grep &quot;DSERVER&quot; | grep &quot;standalone.sh&quot; | egrep -v &quot;grep&quot; | awk -F-P= '{print $2}' | awk -F/ '{print &quot;/&quot; $2, $3, $4}' | sort -u | tr &quot; &quot; &quot;/&quot;`

node_check=`ps ax | grep jboss | grep &quot;DSERVER&quot; | grep &quot;standalone.sh&quot; | egrep -v &quot;grep&quot; | awk -F= '{print $2}' awk '{print $1}' | sort -u`

unset JBOSS_NODE DATE JBOSS_BIN_DIR PNODE_NAME UNAME JBOSS_HOME JAVA_HOME DOMAIN_BASE SERVER_NAME HOST_NAME CONFIG_FILE PORT_OFFSET JBOSS_USER BIND_ADDR CONTROLLER_IP CONTROLLER_PORT MULTICAST_ADDR JMS_MULTICAST_ADDR MODCLUSTER_MULTICAST_ADDR JAVA_OPTS LOG_HOME JBOSS_MODULEPATH

if [ `echo ${node_check} | grep -v -e '^$' | tr &quot; &quot; &quot;\n&quot; | wc -l` -ge 1 ]; then
	for ID in ${node_check[@]}
    do
    	JBOSS_NODE=$JBOSS_DIR/${ID}
        echo -e &quot;\n Do you want ot stop the\\033]0;32m ${ID}\\033[0;39m Node?&quot;
        JBOSS_BIN_DIR=${JBOSS_NODE}/bin
        if [ ! -d ${JBOSS_BIN_DIR} ]; then
        	JBOSS_BIN_DIR=${JBOSS_NODE}
        fi
        
        DATE=`date +%Y%m%d%H%M%S`
        if [ -f ${JBOSS_BIN_DIR/env.sh ]; then
        	. ${JBOSS_BIN_DIR}/env.sh
        else
        	echo -e &quot;\n====================================&quot;
            echo -e &quot;${ID} are env.sh file not found&quot;
            echo -e &quot;\n====================================&quot;
            continue;
        fi
        echo -e &quot;\n&quot;
        read -p &quot; [ Input Yes or No  : ] &quot; answer
        	case $answer in
            	[yY]* )
                	ps -ef | grep &quot;java&quot; | grep &quot;${JBOSS_NODE}&quot; | awk {'print &quot;kill -9 &quot; $2'} | sh -x &amp;amp;&amp;amp; \
                    ps -ef | grep &quot;tail&quot; | grep &quot;${ID}&quot; | awk {'print &quot;kill -9 &quot; $2'} | sh -x;;
                [nN]* )
                	continue;;
                * )
                	echo -e &quot;\n You must enter Yes or No. Rerun the shell. &quot;;
            esac
        echo -e &quot;\n&quot;
    done
else
	echo -e &quot;JBoss Service is not Running!!\n&quot;
fi&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;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; width=&quot;600&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: left;&quot; width=&quot;50%&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;nbsp;&lt;span&gt;&lt;span&gt; 3. JBoss EAP 7 주요 설정 내용&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1) /JBOSS/domains/노드명/configuration/logging.properties&lt;/p&gt;
&lt;pre id=&quot;code_1628840496591&quot; class=&quot;ini&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# Note this file has been generated and will be overwritten if a
# logging subsystem has been defined in the XML configuration.

# Additional loggers to configure (the root logger is always configured)
loggers=sun.rmi,org.jboss.as.config,io.jaegertracing.Configuration,com.arjuna

logger.level=INFO
logger.handlers=FILE,CONSOLE

logger.sun.rmi.level=WARN
logger.sun.rmi.useParentHandlers=true

logger.org.jboss.as.config.level=DEBUG
logger.org.jboss.as.config.useParentHandlers=true

logger.io.jaegertracing.Configuration.level=WARN
logger.io.jaegertracing.Configuration.useParentHandlers=true

logger.org.apache.tomcat.util.modeler.level=WARN
logger.org.apache.tomcat.util.modeler.useParentHandlers=true

logger.com.arjuna.level=WARN
logger.com.arjuna.useParentHandlers=true

handler.CONSOLE=org.jboss.logmanager.handlers.ConsoleHandler
handler.CONSOLE.level=WARN
handler.CONSOLE.formatter=COLOR-PATTERN
handler.CONSOLE.properties=enabled,autoFlush,target
handler.CONSOLE.enabled=true
handler.CONSOLE.autoFlush=true
handler.CONSOLE.target=SYSTEM_OUT

handler.FILE=org.jboss.logmanager.handlers.PeriodicRotatingFileHandler
handler.FILE.level=ALL
handler.FILE.formatter=PATTERN
handler.FILE.properties=append,autoFlush,enabled,suffix,fileName
handler.FILE.append=true
handler.FILE.autoFlush=true
handler.FILE.enabled=true
handler.FILE.suffix=.yyyy-mm-dd
handler.FILE.fileName=/JBOSS/LOG/AP_name10/server.log

formatter.PATTERN=org.jboss.logmanager.formatters.PatternFormatter
formatter.PATTERN.properties=pattern
formatter.PATTERN.pattern=%d{yyyy-mm-dd HH\:mm\:ss,SSS} %-5p [%c] (t) %s%E%n

formatter.COLOR-PATTERN=org.jboss.logmanager.formatters.PatternFormatter
formatter.COLOR-PATTERN.properties=pattern
formatter.COLOR-PATTERN.pattern=%K{level}%d{HH\:mm\:ss,SSS} %-5p [%c] (%t) %s%E%n&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;2) /JBOSS/domains/노드명/configuration/standalone.xml&lt;/p&gt;
&lt;pre id=&quot;code_1628840777525&quot; class=&quot;dust&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt;

&amp;lt;server xmlns=&quot;urn:jboss:domain:11.0&quot;&amp;gt;
	&amp;lt;extensions&amp;gt;
    	&amp;lt;extension module=&quot;org.jboss.as.clustering.infinispan&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.connector&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.deployment-scanner&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.ee&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.ejb3&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.jaxrs&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.jdr&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.jmx&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.jpa&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.jsf&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.logging&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.mail&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.naming&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.pojo&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.remoting&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.sar&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.security&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.transactions&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.webservices&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.weld&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.batch.jberet&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.bean-validation&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.clustering.web&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.core-management&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.discovery&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.ee-security&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.elytron&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.io&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.microprofile.config-smallrye&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.microprofile.health-smallrye&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.microprofile.metrics-smallrye&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.microprofile.opentracing-smallrye&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.request-controller&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.security.manager&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.undertow&quot;/&amp;gt;
	&amp;lt;/extensions&amp;gt;
    &amp;lt;management&amp;gt;
    	&amp;lt;security-realms&amp;gt;
        	&amp;lt;security-realm name=&quot;ManagementRealm&quot;&amp;gt;
            	&amp;lt;authentication&amp;gt;
                	&amp;lt;local default-user=&quot;$local&quot; skip-group-loading=&quot;true&quot;/&amp;gt;
                    &amp;lt;properties path=&quot;mgmt-users.properties&quot; relative-to=&quot;jboss.server.config.dir&quot;/&amp;gt;
                &amp;lt;/authentication&amp;gt;
                &amp;lt;authorization map-groups-to-roles=&quot;false&quot;&amp;gt;
                	&amp;lt;properties path=&quot;mgmt-groups.properties&quot; relative-to=&quot;jboss.server.config.dir&quot;/&amp;gt;
                &amp;lt;/authorization&amp;gt;
            &amp;lt;/security-realm&amp;gt;
            &amp;lt;security-realm name=&quot;ApplicationRealm&quot;&amp;gt;
            	&amp;lt;server-identities&amp;gt;
                	&amp;lt;ssl&amp;gt;
                    &amp;lt;!--	&amp;lt;keystore path=&quot;application.keystore&quot; relative-to=&quot;jboss.server.config.dir&quot; keystore-password=&quot;password&quot; alias=&quot;server&quot; key-password=&quot;password&quot; generate-self-signed-certificate-host=&quot;localhost&quot;/&amp;gt; --&amp;gt;
                    &amp;lt;/ssl&amp;gt;
                &amp;lt;/server-identities&amp;gt;
                &amp;lt;authentication&amp;gt;
                	&amp;lt;local default-user=&quot;$local&quot; allowed-users=&quot;*&quot; skip-group-loading=&quot;true&quot;/&amp;gt;
                    &amp;lt;properties path=&quot;application-users.properties&quot; relative-to=&quot;jboss.server.config.dir&quot;/&amp;gt;
                &amp;lt;/authentication&amp;gt;&amp;gt;
                &amp;lt;authorization&amp;gt;
                	&amp;lt;properties path=&quot;application-roles.properties&quot; relative-to=&quot;jboss.server.config.dir&quot;/&amp;gt;
                &amp;lt;/authorization&amp;gt;
            &amp;lt;/security-realm&amp;gt;
        &amp;lt;/security-realms&amp;gt;
        &amp;lt;audit-log&amp;gt;
        	&amp;lt;formatters&amp;gt;
            	&amp;lt;json-formatter name=&quot;json-formatter&quot;/&amp;gt;
            &amp;lt;/formatters&amp;gt;
            &amp;lt;handlers&amp;gt;
            	&amp;lt;file-handler name=&quot;file&quot; formatter=&quot;json-formatter&quot; relative-to=&quot;jboss.server.data.dir&quot; path=&quot;audit-log.log&quot;/&amp;gt;
            &amp;lt;/handlers&amp;gt;
            &amp;lt;logger log-boot=&quot;true&quot; log-read-only=&quot;false&quot; enabled=&quot;false&quot;&amp;gt;
            	&amp;lt;handlers&amp;gt;
                	&amp;lt;handler name=&quot;file&quot;/&amp;gt;
                &amp;lt;/handlers&amp;gt;
            &amp;lt;/logger&amp;gt;
        &amp;lt;/audit-log&amp;gt;
        &amp;lt;management-interfaces&amp;gt;
        	&amp;lt;http-interface security-realm=&quot;ManagementRealm&quot;&amp;gt;
            	&amp;lt;http-upgrade enabled=&quot;true&quot;/&amp;gt;
            	&amp;lt;socket-binding native=&quot;management-http&quot;/&amp;gt;
            &amp;lt;/http-interface&amp;gt;            
       &amp;lt;/management-interfaces&amp;gt;
       &amp;lt;access-contorl provider=&quot;simple&quot;&amp;gt;
           &amp;lt;role-mapping&amp;gt;
               &amp;lt;role name=&quot;SuperUser&quot;&amp;gt;
                   &amp;lt;include&amp;gt;
                       &amp;lt;user name=&quot;$local&quot;/&amp;gt;
                   &amp;lt;/include&amp;gt;
               &amp;lt;/role&amp;gt;
           &amp;lt;/role-mapping&amp;gt;
       &amp;lt;/access-control&amp;gt;
   &amp;lt;/management&amp;gt;
   &amp;lt;profile&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:logging:8.0&quot;&amp;gt;
           &amp;lt;console-handler name=&quot;CONSOLE&quot;&amp;gt;
               &amp;lt;level name=&quot;ERROR&quot;/&amp;gt;
               &amp;lt;formatter&amp;gt;
                   &amp;lt;named-formatter name=&quot;COLOR-PATTERN&quot;/&amp;gt;
               &amp;lt;/formatter&amp;gt;
           &amp;lt;/console-handler&amp;gt;
           &amp;lt;periodic-rotating-file-handler name=&quot;FILE&quot; autoflush=&quot;true&quot;&amp;gt;
               &amp;lt;formatter&amp;gt;
                   &amp;lt;named-formatter name=&quot;PATTERN&quot;/&amp;gt;
               &amp;lt;/formatter&amp;gt;
               &amp;lt;file relative-to=&quot;jboss.server.log.dir&quot; path=&quot;server.log&quot;/&amp;gt;
               &amp;lt;suffix value=&quot;.yyyy-MM-dd&quot;/&amp;gt;
               &amp;lt;append value=&quot;true&quot;/&amp;gt;
           &amp;lt;/periodic-rotating-file-handler&amp;gt;
           &amp;lt;logger category=&quot;com.arjuna&quot;&amp;gt;
               &amp;lt;level name=&quot;WARN&quot;/&amp;gt;
           &amp;lt;/logger&amp;gt;
           &amp;lt;logger category=&quot;io.jaegertracing.Configuration&quot;&amp;gt;
               &amp;lt;level name=&quot;WARN&quot;/&amp;gt;
           &amp;lt;/logger&amp;gt;
           &amp;lt;logger category=&quot;org.jboss.as.config&quot;&amp;gt;
               &amp;lt;level name=&quot;DEBUG&quot;/&amp;gt;
           &amp;lt;/logger&amp;gt;
           &amp;lt;logger category=&quot;sun.rmi&quot;&amp;gt;
               &amp;lt;level name=&quot;WARN&quot;/&amp;gt;
           &amp;lt;/logger&amp;gt;
           &amp;lt;root-logger&amp;gt;
               &amp;lt;level name=&quot;INFO&quot;/&amp;gt;
               &amp;lt;handlers&amp;gt;
                   &amp;lt;handler name=&quot;CONSOLE&quot;/&amp;gt;
                   &amp;lt;handler name=&quot;FILE&quot;/&amp;gt;
               &amp;lt;/handlers&amp;gt;
           &amp;lt;/root-logger&amp;gt;
           &amp;lt;formatter name=&quot;PATTERN&quot;&amp;gt;
               &amp;lt;pattern-formatter pattern=&quot;%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n&quot;/&amp;gt;
           &amp;lt;/formatter&amp;gt;
           &amp;lt;formatter name=&quot;COLOR-PATTERN&quot;&amp;gt;
               &amp;lt;pattern-formatter pattern=&quot;%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n&quot;/&amp;gt;
           &amp;lt;/formatter&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:batch-jberet:2.0&quot;&amp;gt;
           &amp;lt;default-job-repository name=&quot;in-memory&quot;/&amp;gt;
           &amp;lt;default-thread-pool name=&quot;batch&quot;/&amp;gt;
           &amp;lt;job-repository name=&quot;in-menory&quot;&amp;gt;
               &amp;lt;in-memory/&amp;gt;
           &amp;lt;/job-repository&amp;gt;
           &amp;lt;thread-pool name=&quot;batch&quot;&amp;gt;
               &amp;lt;max-threads count=&quot;10&quot;/&amp;gt;
               &amp;lt;keepalive-time time=&quot;30&quot; unit=&quot;seconds&quot;/&amp;gt;
           &amp;lt;/thread-pool&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:bean-validation:1.0&quot;/&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:core-management:1.0&quot;/&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:datasources:5.0&quot;&amp;gt;
           &amp;lt;datasources&amp;gt;
               &amp;lt;datasource jndi-name=&quot;java:jboss/cubridDS&quot; pool-name=&quot;cubridDS&quot; enabled=&quot;true&quot;&amp;gt;
                   &amp;lt;connection-url&amp;gt;jdbc:cubrid:dbmshost1:33000:db명:::?hold_cursor=no&amp;amp;amp;charset=utf-8&amp;lt;/connection-url&amp;gt;
                   &amp;lt;driver-class&amp;gt;cubrid.jdbc.dirver.CUBRIDDriver&amp;lt;/driver-class&amp;gt;
                   &amp;lt;driver&amp;gt;cubrid&amp;lt;/driver&amp;gt;
                   &amp;lt;pool&amp;gt;
                       &amp;lt;min-pool-size&amp;gt;5&amp;lt;/min-pool-size&amp;gt;
                       &amp;lt;max-pool-size&amp;gt;50&amp;lt;/max-pool-size&amp;gt;
                       &amp;lt;prefill&amp;gt;false&amp;lt;/prefill&amp;gt;
                       &amp;lt;use-strict-min&amp;gt;true&amp;lt;/use-strict-min&amp;gt;
                   &amp;lt;/pool&amp;gt;
                   &amp;lt;timeout&amp;gt;
                       &amp;lt;blocking-timeout-millis&amp;gt;300000&amp;lt;/blocking-timeout-millis&amp;gt;
                       &amp;lt;idle-timeout-minutes&amp;gt;10&amp;lt;/idle-timeout-minutes&amp;gt;
                   &amp;lt;/timeout&amp;gt;
                   &amp;lt;security&amp;gt;
                       &amp;lt;security-domain&amp;gt;cubrid-password&amp;lt;/security-domain&amp;gt;                       
                   &amp;lt;/security&amp;gt;
                   &amp;lt;validation&amp;gt;
                       &amp;lt;check-valid-connection-sql&amp;gt;select 1&amp;lt;/check-valid-connection-sql&amp;gt;
                       &amp;lt;validate-on-match&amp;gt;true&amp;lt;/validate-on-match&amp;gt;
                       &amp;lt;background-validation&amp;gt;false&amp;lt;/background-validation&amp;gt;
                   &amp;lt;/validation&amp;gt;
                   &amp;lt;statement&amp;gt;
                       &amp;lt;share-prepared-statements&amp;gt;false&amp;lt;/share-prepared-statements&amp;gt;
                   &amp;lt;/statement&amp;gt;
               &amp;lt;/datasource&amp;gt;
               &amp;lt;datasource jndi-name=&quot;java:jboss/postgresDS&quot; pool-name=&quot;postgresDS&quot; enabled=&quot;false&quot;&amp;gt;
                   &amp;lt;connection-url&amp;gt;jdbc:postgresql://dbmshost1:5432/postgres&amp;lt;/connection-url&amp;gt;
                   &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;
                   &amp;lt;driver&amp;gt;postgres&amp;lt;/driver&amp;gt;
                   &amp;lt;pool&amp;gt;
                       &amp;lt;min-pool-size&amp;gt;5&amp;lt;/min-pool-size&amp;gt;
                       &amp;lt;max-pool-size&amp;gt;50&amp;lt;/max-pool-size&amp;gt;
                       &amp;lt;prefill&amp;gt;false&amp;lt;/prefill&amp;gt;
                       &amp;lt;use-strict-min&amp;gt;true&amp;lt;/use-strict-min&amp;gt;
                   &amp;lt;/pool&amp;gt;
                   &amp;lt;timeout&amp;gt;
                       &amp;lt;blocking-timeout-millis&amp;gt;300000&amp;lt;/blocking-timeout-millis&amp;gt;
                       &amp;lt;idle-timeout-minutes&amp;gt;10&amp;lt;/idle-timeout-minutes&amp;gt;
                   &amp;lt;/timeout&amp;gt;
                   &amp;lt;security&amp;gt;
                       &amp;lt;security-domanin&amp;gt;cubrid-password&amp;lt;/security-domain&amp;gt;
                   &amp;lt;/security&amp;gt;                  
                   &amp;lt;validation&amp;gt;
                       &amp;lt;check-valid-connection-sql&amp;gt;select 1&amp;lt;/check-valid-connection-sql&amp;gt;
                       &amp;lt;validate-on-match&amp;gt;true&amp;lt;/validate-on-match&amp;gt;
                       &amp;lt;background-validation&amp;gt;false&amp;lt;/background-validation&amp;gt;
                       &amp;lt;valid-connection-checker class-name=&quot;org.jboss.jca.adapters.jdbc.etensions.postgres.PostgreSQLValidConnectionChecker&quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;
                       &amp;lt;exception-sorter class-name=&quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter&quot;&amp;gt;&amp;lt;/exception-sorter&amp;gt;
                   &amp;lt;/validation&amp;gt;
                   &amp;lt;statement&amp;gt;
                       &amp;lt;share-prepared-statements&amp;gt;false&amp;lt;/share-prepared-statements&amp;gt;
                   &amp;lt;/statement&amp;gt;
               &amp;lt;/datasource&amp;gt;
               &amp;lt;drivers&amp;gt;
                   &amp;lt;driver name=&quot;cubrid&quot; module=&quot;cubrid&quot;&amp;gt;
                       &amp;lt;driver-class&amp;gt;cubrid.jdbc.driver.CUBRIDDriver&amp;lt;/driver-class&amp;gt;
                   &amp;lt;/driver&amp;gt;
                   &amp;lt;driver name=&quot;postgres&quot; module=&quot;postgres&quot;&amp;gt;
                       &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/dirver-class&amp;gt;
                   &amp;lt;/driver&amp;gt;
               &amp;lt;/drivers&amp;gt;
           &amp;lt;/datasources&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:deployment-scanner:2.0&quot;&amp;gt;
           &amp;lt;deployment-scanner path=&quot;deployments&quot; relative-to=&quot;jboss.server.base.dir&quot; scan-interval=&quot;0&quot; scan-enabled=&quot;false&quot; runtime-failure-causes-rollback=&quot;${jboss.deployment.scanner.rollback.on.failure:false}&quot;/&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:discovery:1.0&quot;/&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:distributable-web:2.0&quot; default-session-management=&quot;default&quot; dafault-single-sign-on-management=&quot;default&quot;&amp;gt;
           &amp;lt;infinispan-session-management name=&quot;default&quot; cache-container=&quot;web&quot; granularity=&quot;SESSION&quot;&amp;gt;
               &amp;lt;primary-owner-affinity/&amp;gt;
           &amp;lt;/infinispan-session-management&amp;gt;
           &amp;lt;infinispan-single-sign-on-management name=&quot;default&quot; cache-container=&quot;web&quot; cache=&quot;sso&quot;/&amp;gt;
           &amp;lt;infinispan-routing cache-container=&quot;web&quot; cache=&quot;routing&quot;/&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:ee:4.0&quot;&amp;gt;
           &amp;lt;spec-descriptor-property-replacement&amp;gt;false&amp;lt;/spec-descriptor-property-replacement&amp;gt;
           &amp;lt;concurrent&amp;gt;
               &amp;lt;context-services&amp;gt;
                   &amp;lt;context-service name=&quot;default&quot; jnid-name=&quot;java:jboss/ee/concurrency/context/default&quot; use-transaction-setup-provider=&quot;true&quot;/&amp;gt;
               &amp;lt;/context-services&amp;gt;
               &amp;lt;managed-thread-factories&amp;gt;
                   &amp;lt;managed-thread-factory name=&quot;default&quot; jndi-name=&quot;java:jboss/ee/concurrency/factory/default&quot; context-service=&quot;default&quot;/&amp;gt;
               &amp;lt;/managed-thread-factories&amp;gt;
               &amp;lt;managed-executor-services&amp;gt;
                   &amp;lt;managed-executor-service name=&quot;default&quot; jndi-name=&quot;java:jboss/ee/concurrency/executor/default&quot; context-service=&quot;default&quot; hung-task-threshold=&quot;60000&quot; keepalive-time=&quot;5000&quot;/&amp;gt;
               &amp;lt;/managed-executor-services&amp;gt;
               &amp;lt;managed-scheduled-executor-services&amp;gt;
                   &amp;lt;managed-scheduled-executor-service name=&quot;default&quot; jndi-name=&quot;java:jboss/ee/concurrency/scheduler/default&quot; context-service=&quot;default&quot; hung-task-threshold=&quot;60000&quot; keepalive-time=&quot;3000&quot;/&amp;gt;
               &amp;lt;/managed-scheduled-executor-services&amp;gt;
           &amp;lt;/concurrent&amp;gt;
           &amp;lt;default-bindings context-service=&quot;java:jboss/ee/concurrency/context/default&quot; datasource=&quot;java:/jboss/cubridDS&quot; managed-executor-service=&quot;java:jboss/ee/concurrency/scheduler/default&quot; managed-thread-factory=&quot;java:jboss/ee/concurrency/factory/default&quot;/&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:ee-security:1.0&quot;/&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:ejb3:6.0&quot;&amp;gt;       
           &amp;lt;session-bean&amp;gt;
               &amp;lt;stateless&amp;gt;
                   &amp;lt;bean-instance-pool-ref pool-name=&quot;slsb-strict-max-pool&quot;/&amp;gt;
               &amp;lt;/stateless&amp;gt;
               &amp;lt;stateful default-access-timeout=&quot;5000&quot; cache-ref=&quot;simple&quot; passivation-disabled-cache-ref=&quot;simple&quot;/&amp;gt;
               &amp;lt;singleton default-access-timeout=&quot;5000&quot;/&amp;gt;
           &amp;lt;/session-bean&amp;gt;
           &amp;lt;pools&amp;gt;
               &amp;lt;bean-instance-pools&amp;gt;
                   &amp;lt;strict-max-pool name=&quot;mdb-strict-max-pool&quot; derive-size=&quot;from-cpu-count&quot; instance-acquisition-timeout=&quot;5&quot; instance-acquisition-time-unit=&quot;MINUTES&quot;/&amp;gt;
                   &amp;lt;strict-max-pool name=&quot;slsb-strict-max-pool&quot; derive-size=&quot;from-worker-pools&quot; instance-acquisition-timeout=&quot;5&quot; instance-acquisition-timeout-unit=&quot;MINUTES&quot;/&amp;gt;
               &amp;lt;/bean-instance-pools&amp;gt;
           &amp;lt;/pools&amp;gt;
           &amp;lt;caches&amp;gt;
               &amp;lt;cache name=&quot;simple&quot;/&amp;gt;
               &amp;lt;cache name=&quot;distributable&quot; passivation-store-ref=&quot;infinispan&quot; aliases=&quot;passivating clustered&quot;/&amp;gt;
           &amp;lt;/caches&amp;gt;
           &amp;lt;passivation-stores&amp;gt;
               &amp;lt;passivation-store name=&quot;infinispan&quot; cache-container=&quot;ejb&quot; max-size=&quot;10000&quot;/&amp;gt;
           &amp;lt;/pasivation-stores&amp;gt;
           &amp;lt;async thread-pool-name=&quot;default&quot;/&amp;gt;
           &amp;lt;timer-service thread-pool-name=&quot;default&quot; default-data-store=&quot;default-file-store&quot;&amp;gt;
               &amp;lt;data-stores&amp;gt;
                   &amp;lt;file-data-store name=&quot;default-file-store&quot; path=&quot;timer-service-data&quot; relative-to=&quot;jboss.server.data.dir&quot;/&amp;gt;
               &amp;lt;/data-stores&amp;gt;
           &amp;lt;/timer-service&amp;gt;
           &amp;lt;remote connector-ref=&quot;http-remoting-connector&quot; thread-pool-name=&quot;default&quot;&amp;gt;
               &amp;lt;chnnel-creation-options&amp;gt;
                   &amp;lt;option name=&quot;MAX_OUTBOUND-MESSAGES&quot; value=&quot;1234&quot; type=&quot;remoting&quot;/&amp;gt;
               &amp;lt;/chnnel-creation-options&amp;gt;
           &amp;lt;/remote&amp;gt;
           &amp;lt;thread-pools&amp;gt;
               &amp;lt;thread-pool name=&quot;default&quot;&amp;gt;
                   &amp;lt;max-threads count=&quot;10&quot;/&amp;gt;
                   &amp;lt;keepalive-time time=&quot;60&quot; unit=&quot;seconds&quot;/&amp;gt;
               &amp;lt;/thread-pool&amp;gt;
           &amp;lt;/thread-pools&amp;gt;
           &amp;lt;default-security-domain value=&quot;other&quot;/&amp;gt;
           &amp;lt;default-missing-method-permissions-deny-access value=&quot;true&quot;/&amp;gt;
           &amp;lt;statistics enabled=&quot;${wildfly.ejb3.statistics-enabled:${wildfly.statistics-enabled:false}}&quot;/&amp;gt;
           &amp;lt;log-system-exceptions value=&quot;true&quot;/&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:wildfly:elytron:8.0&quot; final-providers=&quot;combinde-providers&quot; disallowed-providers=&quot;OracleUcrypto&quot;&amp;gt;
           &amp;lt;providers&amp;gt;
               &amp;lt;aggregate-providers name=&quot;combined-providers&quot;&amp;gt;
                   &amp;lt;providers name=&quot;elytron&quot;/&amp;gt;
                   &amp;lt;providers name=&quot;openssl&quot;/&amp;gt;
               &amp;lt;/aggregate-providers&amp;gt;
               &amp;lt;provider-loader name=&quot;elytron&quot; module=&quot;org.wildfly.security.elytron&quot;/&amp;gt;
               &amp;lt;provider-loader name=&quot;openssl&quot; module=&quot;org.wildfly.openssl&quot;/&amp;gt;
           &amp;lt;/providers&amp;gt;
           &amp;lt;audit-logging&amp;gt;
               &amp;lt;file-audit-log name=&quot;local-audit&quot; path=&quot;audit.log&quot; relative-to=&quot;jboss.server.log.dir&quot; format=&quot;JSON&quot;/&amp;gt;
           &amp;lt;/audit-logging&amp;gt;
           &amp;lt;security-domains&amp;gt;
               &amp;lt;security-domain name=&quot;ApplicationDomain&quot; default-realm=&quot;ApplicationRealm&quot; permission-mapper=&quot;default-permission-mapper&quot;&amp;gt;
                   &amp;lt;realm name=&quot;ApplicationRealm&quot; role-decoder=&quot;groups-to-roles&quot;/&amp;gt;
                   &amp;lt;realm name=&quot;local&quot;/&amp;gt;
               &amp;lt;/security-domain&amp;gt;
               &amp;lt;security-domain name=&quot;ManagementDomain&quot; default-realm=&quot;ManagementRealm&quot; permission-mapper=&quot;default-permission-mapper&quot;&amp;gt;
                   &amp;lt;realm name=&quot;ManagementRealm&quot; role-decoder=&quot;groups-to-roles&quot;/&amp;gt;
                   &amp;lt;realm name=&quot;local&quot; role-mapper=&quot;super-user-mapper&quot;/&amp;gt;
               &amp;lt;/security-domain&amp;gt;
           &amp;lt;/security-domains&amp;gt;
           &amp;lt;security-realms&amp;gt;
               &amp;lt;identity-realm name=&quot;local&quot; identity=&quot;$local&quot;/&amp;gt;
               &amp;lt;properties-realm name=&quot;ApplicationRealm&quot;&amp;gt;
                   &amp;lt;users-properties path=&quot;application-users.properties&quot; relative-to=&quot;jboss.server.config.dir&quot; digest-realm-name=&quot;ApplicationRealm&quot;/&amp;gt;
                   &amp;lt;groups-properties path=&quot;application-roles.properties&quot; relative-to=&quot;jboss.server.config.dir&quot;/&amp;gt;
               &amp;lt;/properties-realm&amp;gt;
               &amp;lt;properties-realm name=&quot;ManagementRealm&quot;&amp;gt;
                   &amp;lt;users-properties path=&quot;mgmt-users.properties&quot; relative-to=&quot;jboss.server.config.dir&quot; digest-realm-name=&quot;ManagementRealm&quot;/&amp;gt;
                   &amp;lt;groups-properties path=&quot;mgmt-groups.properties&quot; relative-to=&quot;jboss.server.config.dir&quot;/&amp;gt;
               &amp;lt;/properties-realm&amp;gt;
           &amp;lt;/security-realms&amp;gt;
           &amp;lt;mappers&amp;gt;
               &amp;lt;simple-permission-mapper name=&quot;default-permission-mapper&quot; mapping-mode=&quot;first&quot;&amp;gt;
                   &amp;lt;permission-mapping&amp;gt;
                       &amp;lt;principal name=&quot;anonymous&quot;/&amp;gt;
                       &amp;lt;permission-set name=&quot;default-permissions&quot;/&amp;gt;
                   &amp;lt;/permission-mapping&amp;gt;
                   &amp;lt;permission-mapping match-all=&quot;true&quot;&amp;gt;
                       &amp;lt;permission-set name=&quot;login-permission&quot;/&amp;gt;
                       &amp;lt;permission-set name=&quot;default-permissions&quot;/&amp;gt;
                   &amp;lt;/permission-mapping&amp;gt;
               &amp;lt;/simple-permission-mapper&amp;gt;
               &amp;lt;constant-realm-mapper name=&quot;local&quot; realm-name=&quot;local&quot;/&amp;gt;
               &amp;lt;simple-role-decoder name=&quot;groups-to-roles&quot; attribute=&quot;groups&quot;/&amp;gt;
               &amp;lt;constant-role-mapper name=&quot;super-user-mapper&quot;&amp;gt;
                   &amp;lt;role name=&quot;SuperUser&quot;/&amp;gt;
               &amp;lt;/constant-role-mapper&amp;gt;
           &amp;lt;/mappers&amp;gt;
           &amp;lt;permission-sets&amp;gt;
               &amp;lt;permission-set name=&quot;login-permission&quot;&amp;gt;
                   &amp;lt;permission class-name=&quot;org.wildfly.security.auth.permission.LoginPermission&quot;/&amp;gt;
               &amp;lt;/permission-set&amp;gt;
               &amp;lt;permission-set name=&quot;default-permissions&quot;&amp;gt;
                   &amp;lt;permission class-name=&quot;org.wildfly.extension.batch.jberet.deployment.BatchPermission&quot; module=&quot;org.wildfly.extension.batch.jberet&quot; target-name=&quot;*&quot;/&amp;gt;
                   &amp;lt;permission class-name=&quot;org.wildfly.transaction.client.RemoteTransactionPermission&quot; module=&quot;org.wildfly.transaction.client&quot;/&amp;gt;
                   &amp;lt;permission class-name=&quot;org.jboss.ejb.client.RemoteEJBPermission&quot; module=&quot;org.jboss.ejb-client&quot;/&amp;gt;
               &amp;lt;/permission-set&amp;gt;
           &amp;lt;/permission-sets&amp;gt;
           &amp;lt;http&amp;gt;
               &amp;lt;http-authentication-factory name=&quot;management-http-authentication&quot; security-domain=&quot;ManagementDomain&quot; http-server-mechanism-factory=&quot;global&quot;&amp;gt;
                   &amp;lt;mechanism-configuration&amp;gt;
                       &amp;lt;mechanism mechanism-name=&quot;DIGEST&quot;&amp;gt;
                           &amp;lt;mechanism-realm realm-name=&quot;ManagementRealm&quot;/&amp;gt;
                       &amp;lt;/mechanism&amp;gt;
                   &amp;lt;/mechanism-configuration&amp;gt;
               &amp;lt;/http-authentication-factory&amp;gt;
               &amp;lt;provider-http-server-mechanism-factory name=&quot;global&quot;/&amp;gt;
           &amp;lt;/http&amp;gt;
           &amp;lt;sasl&amp;gt;
               &amp;lt;sasl-authentication-factory name=&quot;application-sasl-authentication&quot; sasl-server-factory=&quot;configured&quot; security-domain=&quot;ApplicationDomain&quot;&amp;gt;
                   &amp;lt;mechanism-configuration&amp;gt;
                       &amp;lt;mechanism mechanism-name=&quot;JBOSS-LOCAL-USER&quot; realm-mapper=&quot;local&quot;/&amp;gt;
                       &amp;lt;mechanism mechanism-name=&quot;DIGEST-MD5&quot;&amp;gt;
                           &amp;lt;mechanism-realm realm-name=&quot;ApplicationRealm&quot;/&amp;gt;
                       &amp;lt;/mechanism&amp;gt;
                   &amp;lt;/mechanism-configuration&amp;gt;
               &amp;lt;/sasl-authentication-factory&amp;gt;
               &amp;lt;sasl-authentication-factory name=&quot;management-sasl-authentication&quot; sasl-server-factory=&quot;configured&quot; security-domain=&quot;ManagementDomain&quot;&amp;gt;
                   &amp;lt;mechanism-configuration&amp;gt;
                       &amp;lt;mechanism mechanism-name=&quot;JBOSS-LOCAL-USER&quot; realm-mapper=&quot;local&quot;/&amp;gt;
                       &amp;lt;mechanism mechanism-name=&quot;DIGEST-MD5&quot;&amp;gt;
                           &amp;lt;mechanism-realm realm-name=&quot;ManagementRealm&quot;/&amp;gt;
                       &amp;lt;/mechanism&amp;gt;
                   &amp;lt;/mechanism-configuration&amp;gt;
               &amp;lt;/sasl-authentication-factory&amp;gt;
               &amp;lt;configurable-sasl-server-factory name=&quot;configured&quot; sasl-server-factory=&quot;elytron&quot;&amp;gt;
                   &amp;lt;properties&amp;gt;
                       &amp;lt;property name=&quot;wildfily.sasl.local-user.default-user&quot; value=&quot;$local&quot;/&amp;gt;
                   &amp;lt;/properties&amp;gt;
               &amp;lt;/configurable-sasl-server-factory&amp;gt;
               &amp;lt;mechanism-provider-filtering-sasl-server-factory name=&quot;elytron&quot; sasl-server-factory=&quot;global&quot;&amp;gt;
                   &amp;lt;filters&amp;gt;
                       &amp;lt;filter provider-name=&quot;WildFlyElytron&quot;/&amp;gt;
                   &amp;lt;/filters&amp;gt;
               &amp;lt;/mechanism-provider-filtering-sasl-server-factory&amp;gt;
               &amp;lt;provider-sasl-server-factory name=&quot;global&quot;/&amp;gt;
           &amp;lt;/sasl&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:infinispan:9.0&quot;&amp;gt;
           &amp;lt;cache-container name=&quot;web&quot; default-cache=&quot;passivation&quot; module=&quot;org.wildfly.clustering.web.infinispan&quot;&amp;gt;
               &amp;lt;local-cache name=&quot;passivation&quot;&amp;gt;
                   &amp;lt;locking isolation=&quot;REPEATABLE_READ&quot;/&amp;gt;
                   &amp;lt;transaction mode=&quot;BATCH&quot;/&amp;gt;
                   &amp;lt;file-store passivation=&quot;true&quot; purge=&quot;false&quot;/&amp;gt;
               &amp;lt;/local-cache&amp;gt;
               &amp;lt;local-cache name=&quot;sso&quot;&amp;gt;
                   &amp;lt;locking isolation=&quot;REPEATABLE_READ&quot;/&amp;gt;
                   &amp;lt;transaction mode=&quot;BATCH&quot;/&amp;gt;
               &amp;lt;/local-cache&amp;gt;
               &amp;lt;local-cache name=&quot;routing&quot;/&amp;gt;
           &amp;lt;/cache-container&amp;gt;
           &amp;lt;cache-container name=&quot;server&quot; default-cache=&quot;default&quot; module=&quot;org.wildfly.clustering.server&quot;&amp;gt;
               &amp;lt;local-cache name=&quot;default&quot;&amp;gt;
                   &amp;lt;transaction mode=&quot;BATCH&quot;/&amp;gt;
               &amp;lt;/local-cache&amp;gt;
           &amp;lt;cache-container&amp;gt;
           &amp;lt;cache-container name=&quot;ejb&quot; aliases=&quot;sfsb&quot; default-cache=&quot;passivation&quot; module=&quot;org.wildfly.clustering.ejb.infinispan&quot;&amp;gt;
               &amp;lt;local-cache name=&quot;passivation&quot;&amp;gt;
                   &amp;lt;locking isolation=&quot;REPEATABLE_READ&quot;/&amp;gt;
                   &amp;lt;transaction mode=&quot;BATCH&quot;/&amp;gt;
                   &amp;lt;file-store passivation=&quot;true&quot; purge=&quot;false&quot;/&amp;gt;
               &amp;lt;/local-cache&amp;gt;
           &amp;lt;cache-container&amp;gt;    
           &amp;lt;cache-container name=&quot;hibernate&quot; module=&quot;org.infinispan.hibernate-cache&quot;&amp;gt;
               &amp;lt;local-cache name=&quot;entity&quot;&amp;gt;
                   &amp;lt;object-memory size=&quot;10000&quot;/&amp;gt;
                   &amp;lt;expiration max-idle=&quot;100000&quot;/&amp;gt;
               &amp;lt;/local-cache&amp;gt;
               &amp;lt;local-cache name=&quot;local-query&quot;/&amp;gt;
                   &amp;lt;object-memory size=&quot;10000&quot;/&amp;gt;
                   &amp;lt;expiration max-idle=&quot;100000&quot;/&amp;gt;
               &amp;lt;/local-cache&amp;gt;
               &amp;lt;local-cache name=&quot;timestamps&quot;/&amp;gt;
           &amp;lt;/cache-container&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:io:3.0&quot;&amp;gt;
           &amp;lt;worker name=&quot;default&quot;/&amp;gt;
           &amp;lt;buffer-pool name=&quot;default&quot;/&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jaxrs:1.0&quot;/&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jca:5.0&quot;&amp;gt;
           &amp;lt;archive-validation enabled=&quot;true&quot; fail-on-error=&quot;true&quot; fail-on-warn=&quot;false&quot;/&amp;gt;
           &amp;lt;bean-validation enabled=&quot;true&quot;/&amp;gt;
           &amp;lt;default-workmanager&amp;gt;
               &amp;lt;short-running-threads&amp;gt;
                   &amp;lt;core-threads count=&quot;50&quot;/&amp;gt;
                   &amp;lt;queue-length count=&quot;50&quot;/&amp;gt;
                   &amp;lt;max-threads count=&quot;50&quot;/&amp;gt;
                   &amp;lt;keepalive-time time=&quot;10&quot; unit=&quot;seconds&quot;/&amp;gt;
               &amp;lt;/short-running-threads&amp;gt;
               &amp;lt;long-running-threads&amp;gt;
                   &amp;lt;core-threads count=&quot;50&quot;/&amp;gt;
                   &amp;lt;queue-length count=&quot;50&quot;/&amp;gt;
                   &amp;lt;max-threads count=&quot;50&quot;/&amp;gt;
                   &amp;lt;keepalive-time time=&quot;10&quot; unit=&quot;seconds&quot;/&amp;gt;
               &amp;lt;/short-running-threads&amp;gt;
          &amp;lt;/default-workmanager&amp;gt;
          &amp;lt;cached-connection-manager/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jdr:1.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jmx:1.3&quot;&amp;gt;
          &amp;lt;expose-resolved-model/&amp;gt;
          &amp;lt;expose-expression-model/&amp;gt;
          &amp;lt;remoting-connector/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jpa:1.1&quot;&amp;gt;
          &amp;lt;jpa default-datasource=&quot;&quot; default-extended-persistence-inheritance=&quot;DEEP&quot;/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jsf:1.1&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:mail:3.0&quot;&amp;gt;
          &amp;lt;mail-session name=&quot;default&quot; jndi-name=&quot;java:jboss/mail/Default&quot;&amp;gt;
              &amp;lt;smtp-server outbound-socket-binding-ref=&quot;mail-smtp&quot;/&amp;gt;
          &amp;lt;/mail-session&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:wildfly:microprofile-config-smallrye:1.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:wildfly:microprofile-health-smallrye:2.0&quot; security-enabled=&quot;false&quot; empty-liveness-checks-status=&quot;${env.MP_HEALTH_EMPTY_LIVENESS_CHECKS_STATUS:UP}&quot; empty-readiness-checks-status=&quot;${env.MP_HEALTH_EMPTY_READINESS_CHECKS_STATUS:UP}&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:wildfly:microprofile-metrics-smallrye:2.0&quot; security-enabled=&quot;false&quot; exposed-subsystems=&quot;*&quot; prefix=&quot;${wildfly.metrics.prefix:jboss}&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:wildfly:microprofile-opentracing-smallrye:1.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:naming:2.0&quot;&amp;gt;
          &amp;lt;remote-naming/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:pojo:1.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:remoting:4.0&quot;&amp;gt;
          &amp;lt;connector name=&quot;http-remoting-connector&quot; connector-ref=&quot;default&quot; security-realm=&quot;ApplicationRealm&quot;/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:request-controller:1.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:resource-adapters:5.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:sar:1.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:security:2.0&quot;&amp;gt;
          &amp;lt;security-domains&amp;gt;
              &amp;lt;security-domain name=&quot;cubrid-password&quot; cache-type=&quot;default&quot;&amp;gt;
                  &amp;lt;authentication&amp;gt;
                      &amp;lt;login-module code=&quot;org.picketbox.datasource.security.SecureIdentityLoginModule&quot; flag=&quot;required&quot;&amp;gt;
                          &amp;lt;module-option name=&quot;username&quot; value=&quot;public&quot;/&amp;gt;
                          &amp;lt;module-option name=&quot;password&quot; value=&quot;2d6219b35e931895a11f65ce06a77a33c&quot;/&amp;gt;
                          &amp;lt;module-option name=&quot;managedConnectionFactoryName&quot; value=&quot;jbossjca:service=LocalTxCM,name=cubridDS&quot;/&amp;gt;
                      &amp;lt;/login-module&amp;gt;
                  &amp;lt;/authentication&amp;gt;
              &amp;lt;/security-domain&amp;gt;
              &amp;lt;security-domain name=&quot;other&quot; cache-type=&quot;default&quot;&amp;gt;
                  &amp;lt;authentication&amp;gt;
                      &amp;lt;login-module code=&quot;Remoting&quot; flag=&quot;optional&quot;&amp;gt;
                          &amp;lt;module-option name=&quot;password-stacking&quot; value=&quot;useFirstPass&quot;/&amp;gt;
                      &amp;lt;/login-module&amp;gt;
                      &amp;lt;login-module code=&quot;RealmDirect&quot; flag=&quot;required&quot;&amp;gt;
                          &amp;lt;module-option name=&quot;password-stacking&quot; value=&quot;useFirstPass&quot;/&amp;gt;
                      &amp;lt;/login-module&amp;gt;
                  &amp;lt;/authentication&amp;gt;
              &amp;lt;/security-domain&amp;gt;
              &amp;lt;security-domain name=&quot;jboss-web-policy&quot; cache-type=&quot;default&quot;&amp;gt;
                  &amp;lt;authorization&amp;gt;
                      &amp;lt;policy-module code=&quot;Delegating&quot; flag=&quot;required&quot;/&amp;gt;
                  &amp;lt;/authorization&amp;gt;
              &amp;lt;/security-domain&amp;gt;
              &amp;lt;security-domain name=&quot;jaspitest&quot; cache-type=&quot;default&quot;&amp;gt;
                  &amp;lt;authentication-jaspi&amp;gt;
                      &amp;lt;login-module-stack name=&quot;dummy&quot;&amp;gt;
                          &amp;lt;login-module code=&quot;Dummy&quot; flag=&quot;optional&quot;/&amp;gt;
                      &amp;lt;/login-module-stack&amp;gt;
                      &amp;lt;auth-module code=&quot;Dummy&quot;/&amp;gt;
                  &amp;lt;/authentication-jaspi&amp;gt;
              &amp;lt;/security-domain&amp;gt;
              &amp;lt;security-domain name=&quot;jboss-ejb-policy&quot; cache-type=&quot;default&quot;&amp;gt;
                  &amp;lt;authorization&amp;gt;
                      &amp;lt;policy-module code=&quot;Delegating&quot; flag=&quot;required&quot;/&amp;gt;
                  &amp;lt;/authrization&amp;gt;
              &amp;lt;/security-domain&amp;gt;
          &amp;lt;/security-domains&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:security-manager:1.0&quot;&amp;gt;
          &amp;lt;deployment-permissions&amp;gt;
              &amp;lt;maximum-set&amp;gt;
                  &amp;lt;permission class=&quot;java.security.AllPermission&quot;/&amp;gt;
              &amp;lt;/maximum-set&amp;gt;
          &amp;lt;/deployment-permissions&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:transaction:5.0&quot;&amp;gt;
          &amp;lt;core-environment node-identifier=&quot;${jboss.tx.node.id:1}&quot;&amp;gt;
              &amp;lt;process-id&amp;gt;
                  &amp;lt;uuid/&amp;gt;
              &amp;lt;/process-id&amp;gt;
          &amp;lt;/core-environment&amp;gt;
          &amp;lt;recovery-environment socket-binding=&quot;txn-recovery-environment&quot; status-socket-binding=&quot;txn-status-manager&quot;/&amp;gt;
          &amp;lt;coordinator-environment statistics-enabled=&quot;${wildfly.transactions.statistics-enabled:${wildfly.statistics-enabled:false}}&quot;/&amp;gt;
          &amp;lt;object-store path=&quot;tx-object-store&quot; relative-to=&quot;jboss.server.data.dir&quot;/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:undertow:10.0&quot; default-server=&quot;default-server&quot; default-virtual-host=&quot;default-host&quot; default-servlet-container=&quot;default&quot; default-security-domain=&quot;other&quot; statistics-enabled=&quot;${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}&quot;&amp;gt;
          &amp;lt;buffer-cache name=&quot;default&quot;/&amp;gt;
          &amp;lt;server name=&quot;default-server&quot;&amp;gt;
              &amp;lt;ajp-listener name=&quot;ajp&quot; max-post-size=&quot;524288000&quot; socket-binding=&quot;ajp&quot; max-connections=&quot;1024&quot;/&amp;gt;
              &amp;lt;http-listener name=&quot;default&quot; max-post-size=&quot;524288000&quot; socket-binding=&quot;http&quot; redirect-socket=&quot;https&quot; enable-http2=&quot;true&quot;/&amp;gt;
              &amp;lt;http-listener name=&quot;https&quot; max-post-size=&quot;524288000&quot; socket-binding=&quot;https&quot; security-realm=&quot;ApplicationRealm&quot; enable-http2=&quot;true&quot;/&amp;gt;
              &amp;lt;host name=&quot;default-host&quot; alias=&quot;localhost&quot;&amp;gt;
                  &amp;lt;location name=&quot;/&quot; handler=&quot;welcom-content&quot;/&amp;gt;
                  &amp;lt;http-invoker security-realm=&quot;ApplicationRealm&quot;/&amp;gt;
                  &amp;lt;filter-ref name=&quot;secret-checker&quot; predicate=&quot;equals(%p,${jboss.ajp.port:8009})&quot;/&amp;gt;
              &amp;lt;/host&amp;gt;
          &amp;lt;/server&amp;gt;
          &amp;lt;servlet-container name=&quot;default&quot;&amp;gt;
              &amp;lt;jsp-config x-powered-by=&quot;false&quot; development=&quot;false&quot; check-interval=&quot;60&quot;/&amp;gt;
              &amp;lt;websockets/&amp;gt;
          &amp;lt;/servlet-container&amp;gt;
          &amp;lt;filters&amp;gt;
              &amp;lt;expression-filter name=&quot;secret-checker&quot; expression=&quot;not equals(%{r,secret}, 'Q2xvdWQxMjMj') -&amp;gt; response-code(403)&quot;/&amp;gt;
          &amp;lt;/filters&amp;gt;
          &amp;lt;handlers&amp;gt;
              &amp;lt;file name=&quot;welcome-content&quot; path=&quot;${jboss.home.dir}/welcome-content&quot;/&amp;gt;
          &amp;lt;/handlers&amp;gt;
      &amp;lt;/subsystem&amp;gt;                 
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:webservices:2.0&quot; statistics-enabled=&quot;${wildfly.webservices.statistics-enabled:${wildfly.statistics-enabled:false}}&quot;&amp;gt;
          &amp;lt;wsdl-host&amp;gt;${jboss.bind.address:127.0.0.1}&amp;lt;/wsdl-host&amp;gt;
          &amp;lt;endpoint-config name=&quot;Standard-Endpoint-Config&quot;/&amp;gt;
          &amp;lt;endpoint-config name=&quot;Recording-Endpoint-Config&quot;&amp;gt;
              &amp;lt;pre-handler-chain name=&quot;recording-handlers&quot; protocol-bindings=&quot;##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM&quot;&amp;gt;
                  &amp;lt;handler name=&quot;RecordingHandler&quot; class=&quot;org.jboss.ws.common.invocation.RecordingServerHandler&quot;/&amp;gt;
              &amp;lt;/pre-handler-chain&amp;gt;
          &amp;lt;/endpoint-config&amp;gt;
          &amp;lt;client-config name=&quot;Standard-Client-Config&quot;/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:weld:4.0&quot;/&amp;gt;
   &amp;lt;/profile&amp;gt;
   &amp;lt;interfaces&amp;gt;
       &amp;lt;interface name=&quot;management&quot;&amp;gt;
           &amp;lt;inet-address value=&quot;${jboss.bind.address.management:127.0.0.1}&quot;/&amp;gt;
       &amp;lt;/interface&amp;gt;
       &amp;lt;interface name=&quot;public&quot;&amp;gt;
           &amp;lt;inet-address value=&quot;${jboss.bind.address:127.0.0.1}&quot;/&amp;gt;
       &amp;lt;/interface&amp;gt;       
   &amp;lt;/interfaces&amp;gt;
   &amp;lt;socket-binding-group name=&quot;standard-sockets&quot; default-interface=&quot;public&quot; port-offset=&quot;${jboss.socket.binding.port-offset:0}&quot;&amp;gt;
       &amp;lt;socket-binding name=&quot;ajp&quot; port=&quot;8009&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;http&quot; port=&quot;8081&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;https&quot; port=&quot;8443&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;management-http&quot; interface=&quot;management&quot; port=&quot;${jboss.management.http.port:9991}&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;management-https&quot; interface=&quot;management&quot; port=&quot;${jboss.management.https.port:9993}&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;txn-recovery-environment&quot; port=&quot;4712&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;txn-status-manager&quot; port=&quot;4713&quot;/&amp;gt;
       &amp;lt;outbound-socket-binding name=&quot;mail-smtp&quot;&amp;gt;
           &amp;lt;remote-destination host=&quot;localhost&quot; port=&quot;25&quot;/&amp;gt;
       &amp;lt;/outbound-socket-binding&amp;gt;
   &amp;lt;/socket-binding-group&amp;gt;
   &amp;lt;deployments&amp;gt;
       &amp;lt;deployment name=&quot;sample.war&quot; runtime-name=&quot;sample.war&quot; enabled=&quot;false&quot;&amp;gt;
           &amp;lt;fs-exploded path=&quot;/WebApp/deploy/sample.war&quot;/&amp;gt;
       &amp;lt;/deployment&amp;gt;
   &amp;lt;/deployments&amp;gt;
&amp;lt;/server&amp;gt;&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;3) /JBOSS/domains/노드명/configuration/standalone-ha.xml&lt;/p&gt;
&lt;pre id=&quot;code_1629432178620&quot; class=&quot;dust&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&amp;lt;?xml version='1.0' encoding='UTF-8'?&amp;gt;

&amp;lt;server xmlns=&quot;urn:jboss:domain:11.0&quot;&amp;gt;
	&amp;lt;extensions&amp;gt;
    	&amp;lt;extension module=&quot;org.jboss.as.clustering.infinispan&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.clustering.jgroups&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.connector&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.deployment-scanner&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.ee&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.ejb3&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.jaxrs&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.jdr&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.jmx&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.jpa&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.jsf&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.logging&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.mail&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.modcluster&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.naming&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.pojo&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.remoting&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.sar&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.security&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.transactions&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.webservices&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.jboss.as.weld&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.batch.jberet&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.bean-validation&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.clustering.web&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.core-management&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.discovery&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.ee-security&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.elytron&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.io&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.microprofile.config-smallrye&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.microprofile.health-smallrye&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.microprofile.metrics-smallrye&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.microprofile.opentracing-smallrye&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.request-controller&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.security.manager&quot;/&amp;gt;
        &amp;lt;extension module=&quot;org.wildfly.extension.undertow&quot;/&amp;gt;
	&amp;lt;/extensions&amp;gt;
    &amp;lt;management&amp;gt;
    	&amp;lt;security-realms&amp;gt;
        	&amp;lt;security-realm name=&quot;ManagementRealm&quot;&amp;gt;
            	&amp;lt;authentication&amp;gt;
                	&amp;lt;local default-user=&quot;$local&quot; skip-group-loading=&quot;true&quot;/&amp;gt;
                    &amp;lt;properties path=&quot;mgmt-users.properties&quot; relative-to=&quot;jboss.server.config.dir&quot;/&amp;gt;
                &amp;lt;/authentication&amp;gt;
                &amp;lt;authorization map-groups-to-roles=&quot;false&quot;&amp;gt;
                	&amp;lt;properties path=&quot;mgmt-groups.properties&quot; relative-to=&quot;jboss.server.config.dir&quot;/&amp;gt;
                &amp;lt;/authorization&amp;gt;
            &amp;lt;/security-realm&amp;gt;
            &amp;lt;security-realm name=&quot;ApplicationRealm&quot;&amp;gt;
            	&amp;lt;server-identities&amp;gt;
                	&amp;lt;ssl&amp;gt;
                    &amp;lt;!--	&amp;lt;keystore path=&quot;application.keystore&quot; relative-to=&quot;jboss.server.config.dir&quot; keystore-password=&quot;password&quot; alias=&quot;server&quot; key-password=&quot;password&quot; generate-self-signed-certificate-host=&quot;localhost&quot;/&amp;gt; --&amp;gt;
                    &amp;lt;/ssl&amp;gt;
                &amp;lt;/server-identities&amp;gt;
                &amp;lt;authentication&amp;gt;
                	&amp;lt;local default-user=&quot;$local&quot; allowed-users=&quot;*&quot; skip-group-loading=&quot;true&quot;/&amp;gt;
                    &amp;lt;properties path=&quot;application-users.properties&quot; relative-to=&quot;jboss.server.config.dir&quot;/&amp;gt;
                &amp;lt;/authentication&amp;gt;&amp;gt;
                &amp;lt;authorization&amp;gt;
                	&amp;lt;properties path=&quot;application-roles.properties&quot; relative-to=&quot;jboss.server.config.dir&quot;/&amp;gt;
                &amp;lt;/authorization&amp;gt;
            &amp;lt;/security-realm&amp;gt;
        &amp;lt;/security-realms&amp;gt;
        &amp;lt;audit-log&amp;gt;
        	&amp;lt;formatters&amp;gt;
            	&amp;lt;json-formatter name=&quot;json-formatter&quot;/&amp;gt;
            &amp;lt;/formatters&amp;gt;
            &amp;lt;handlers&amp;gt;
            	&amp;lt;file-handler name=&quot;file&quot; formatter=&quot;json-formatter&quot; relative-to=&quot;jboss.server.data.dir&quot; path=&quot;audit-log.log&quot;/&amp;gt;
            &amp;lt;/handlers&amp;gt;
            &amp;lt;logger log-boot=&quot;true&quot; log-read-only=&quot;false&quot; enabled=&quot;false&quot;&amp;gt;
            	&amp;lt;handlers&amp;gt;
                	&amp;lt;handler name=&quot;file&quot;/&amp;gt;
                &amp;lt;/handlers&amp;gt;
            &amp;lt;/logger&amp;gt;
        &amp;lt;/audit-log&amp;gt;
        &amp;lt;management-interfaces&amp;gt;
        	&amp;lt;http-interface security-realm=&quot;ManagementRealm&quot;&amp;gt;
            	&amp;lt;http-upgrade enabled=&quot;true&quot;/&amp;gt;
            	&amp;lt;socket-binding native=&quot;management-http&quot;/&amp;gt;
            &amp;lt;/http-interface&amp;gt;            
       &amp;lt;/management-interfaces&amp;gt;
       &amp;lt;access-contorl provider=&quot;simple&quot;&amp;gt;
           &amp;lt;role-mapping&amp;gt;
               &amp;lt;role name=&quot;SuperUser&quot;&amp;gt;
                   &amp;lt;include&amp;gt;
                       &amp;lt;user name=&quot;$local&quot;/&amp;gt;
                   &amp;lt;/include&amp;gt;
               &amp;lt;/role&amp;gt;
           &amp;lt;/role-mapping&amp;gt;
       &amp;lt;/access-control&amp;gt;
   &amp;lt;/management&amp;gt;
   &amp;lt;profile&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:logging:8.0&quot;&amp;gt;
           &amp;lt;console-handler name=&quot;CONSOLE&quot;&amp;gt;
               &amp;lt;level name=&quot;ERROR&quot;/&amp;gt;
               &amp;lt;formatter&amp;gt;
                   &amp;lt;named-formatter name=&quot;COLOR-PATTERN&quot;/&amp;gt;
               &amp;lt;/formatter&amp;gt;
           &amp;lt;/console-handler&amp;gt;
           &amp;lt;periodic-rotating-file-handler name=&quot;FILE&quot; autoflush=&quot;true&quot;&amp;gt;
               &amp;lt;formatter&amp;gt;
                   &amp;lt;named-formatter name=&quot;PATTERN&quot;/&amp;gt;
               &amp;lt;/formatter&amp;gt;
               &amp;lt;file relative-to=&quot;jboss.server.log.dir&quot; path=&quot;server.log&quot;/&amp;gt;
               &amp;lt;suffix value=&quot;.yyyy-MM-dd&quot;/&amp;gt;
               &amp;lt;append value=&quot;true&quot;/&amp;gt;
           &amp;lt;/periodic-rotating-file-handler&amp;gt;
           &amp;lt;logger category=&quot;com.arjuna&quot;&amp;gt;
               &amp;lt;level name=&quot;WARN&quot;/&amp;gt;
           &amp;lt;/logger&amp;gt;
           &amp;lt;logger category=&quot;io.jaegertracing.Configuration&quot;&amp;gt;
               &amp;lt;level name=&quot;WARN&quot;/&amp;gt;
           &amp;lt;/logger&amp;gt;
           &amp;lt;logger category=&quot;org.jboss.as.config&quot;&amp;gt;
               &amp;lt;level name=&quot;DEBUG&quot;/&amp;gt;
           &amp;lt;/logger&amp;gt;
           &amp;lt;logger category=&quot;sun.rmi&quot;&amp;gt;
               &amp;lt;level name=&quot;WARN&quot;/&amp;gt;
           &amp;lt;/logger&amp;gt;
           &amp;lt;root-logger&amp;gt;
               &amp;lt;level name=&quot;INFO&quot;/&amp;gt;
               &amp;lt;handlers&amp;gt;
                   &amp;lt;handler name=&quot;CONSOLE&quot;/&amp;gt;
                   &amp;lt;handler name=&quot;FILE&quot;/&amp;gt;
               &amp;lt;/handlers&amp;gt;
           &amp;lt;/root-logger&amp;gt;
           &amp;lt;formatter name=&quot;PATTERN&quot;&amp;gt;
               &amp;lt;pattern-formatter pattern=&quot;%d{yyyy-MM-dd HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n&quot;/&amp;gt;
           &amp;lt;/formatter&amp;gt;
           &amp;lt;formatter name=&quot;COLOR-PATTERN&quot;&amp;gt;
               &amp;lt;pattern-formatter pattern=&quot;%K{level}%d{HH:mm:ss,SSS} %-5p [%c] (%t) %s%e%n&quot;/&amp;gt;
           &amp;lt;/formatter&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:batch-jberet:2.0&quot;&amp;gt;
           &amp;lt;default-job-repository name=&quot;in-memory&quot;/&amp;gt;
           &amp;lt;default-thread-pool name=&quot;batch&quot;/&amp;gt;
           &amp;lt;job-repository name=&quot;in-menory&quot;&amp;gt;
               &amp;lt;in-memory/&amp;gt;
           &amp;lt;/job-repository&amp;gt;
           &amp;lt;thread-pool name=&quot;batch&quot;&amp;gt;
               &amp;lt;max-threads count=&quot;10&quot;/&amp;gt;
               &amp;lt;keepalive-time time=&quot;30&quot; unit=&quot;seconds&quot;/&amp;gt;
           &amp;lt;/thread-pool&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:bean-validation:1.0&quot;/&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:core-management:1.0&quot;/&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:datasources:5.0&quot;&amp;gt;
           &amp;lt;datasources&amp;gt;
               &amp;lt;datasource jndi-name=&quot;java:jboss/cubridDS&quot; pool-name=&quot;cubridDS&quot; enabled=&quot;true&quot;&amp;gt;
                   &amp;lt;connection-url&amp;gt;jdbc:cubrid:dbmshost1:33000:db명:::?altHosts=dbmshost2:33000&amp;amp;amp;hold_cursor=no&amp;amp;amp;charset=utf-8&amp;lt;/connection-url&amp;gt;
                   &amp;lt;driver-class&amp;gt;cubrid.jdbc.dirver.CUBRIDDriver&amp;lt;/driver-class&amp;gt;
                   &amp;lt;driver&amp;gt;cubrid&amp;lt;/driver&amp;gt;
                   &amp;lt;pool&amp;gt;
                       &amp;lt;min-pool-size&amp;gt;5&amp;lt;/min-pool-size&amp;gt;
                       &amp;lt;max-pool-size&amp;gt;50&amp;lt;/max-pool-size&amp;gt;
                       &amp;lt;prefill&amp;gt;false&amp;lt;/prefill&amp;gt;
                       &amp;lt;use-strict-min&amp;gt;true&amp;lt;/use-strict-min&amp;gt;
                   &amp;lt;/pool&amp;gt;
                   &amp;lt;timeout&amp;gt;
                       &amp;lt;blocking-timeout-millis&amp;gt;300000&amp;lt;/blocking-timeout-millis&amp;gt;
                       &amp;lt;idle-timeout-minutes&amp;gt;10&amp;lt;/idle-timeout-minutes&amp;gt;
                   &amp;lt;/timeout&amp;gt;
                   &amp;lt;security&amp;gt;
                       &amp;lt;security-domain&amp;gt;cubrid-password&amp;lt;/security-domain&amp;gt;                       
                   &amp;lt;/security&amp;gt;
                   &amp;lt;validation&amp;gt;
                       &amp;lt;check-valid-connection-sql&amp;gt;select 1&amp;lt;/check-valid-connection-sql&amp;gt;
                       &amp;lt;validate-on-match&amp;gt;true&amp;lt;/validate-on-match&amp;gt;
                       &amp;lt;background-validation&amp;gt;false&amp;lt;/background-validation&amp;gt;
                   &amp;lt;/validation&amp;gt;
                   &amp;lt;statement&amp;gt;
                       &amp;lt;share-prepared-statements&amp;gt;false&amp;lt;/share-prepared-statements&amp;gt;
                   &amp;lt;/statement&amp;gt;
               &amp;lt;/datasource&amp;gt;
               &amp;lt;datasource jndi-name=&quot;java:jboss/postgresDS&quot; pool-name=&quot;postgresDS&quot; enabled=&quot;false&quot;&amp;gt;
                   &amp;lt;connection-url&amp;gt;jdbc:postgresql://dbmshost1:5432,dbmshost2:5432/postgres&amp;lt;/connection-url&amp;gt;
                   &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/driver-class&amp;gt;
                   &amp;lt;driver&amp;gt;postgres&amp;lt;/driver&amp;gt;
                   &amp;lt;pool&amp;gt;
                       &amp;lt;min-pool-size&amp;gt;5&amp;lt;/min-pool-size&amp;gt;
                       &amp;lt;max-pool-size&amp;gt;50&amp;lt;/max-pool-size&amp;gt;
                       &amp;lt;prefill&amp;gt;false&amp;lt;/prefill&amp;gt;
                       &amp;lt;use-strict-min&amp;gt;true&amp;lt;/use-strict-min&amp;gt;
                   &amp;lt;/pool&amp;gt;
                   &amp;lt;timeout&amp;gt;
                       &amp;lt;blocking-timeout-millis&amp;gt;300000&amp;lt;/blocking-timeout-millis&amp;gt;
                       &amp;lt;idle-timeout-minutes&amp;gt;10&amp;lt;/idle-timeout-minutes&amp;gt;
                   &amp;lt;/timeout&amp;gt;
                   &amp;lt;security&amp;gt;
                       &amp;lt;security-domanin&amp;gt;cubrid-password&amp;lt;/security-domain&amp;gt;
                   &amp;lt;/security&amp;gt;                  
                   &amp;lt;validation&amp;gt;
                       &amp;lt;check-valid-connection-sql&amp;gt;select 1&amp;lt;/check-valid-connection-sql&amp;gt;
                       &amp;lt;validate-on-match&amp;gt;true&amp;lt;/validate-on-match&amp;gt;
                       &amp;lt;background-validation&amp;gt;false&amp;lt;/background-validation&amp;gt;
                       &amp;lt;valid-connection-checker class-name=&quot;org.jboss.jca.adapters.jdbc.etensions.postgres.PostgreSQLValidConnectionChecker&quot;&amp;gt;&amp;lt;/valid-connection-checker&amp;gt;
                       &amp;lt;exception-sorter class-name=&quot;org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter&quot;&amp;gt;&amp;lt;/exception-sorter&amp;gt;
                   &amp;lt;/validation&amp;gt;
                   &amp;lt;statement&amp;gt;
                       &amp;lt;share-prepared-statements&amp;gt;false&amp;lt;/share-prepared-statements&amp;gt;
                   &amp;lt;/statement&amp;gt;
               &amp;lt;/datasource&amp;gt;
               &amp;lt;drivers&amp;gt;
                   &amp;lt;driver name=&quot;cubrid&quot; module=&quot;cubrid&quot;&amp;gt;
                       &amp;lt;driver-class&amp;gt;cubrid.jdbc.driver.CUBRIDDriver&amp;lt;/driver-class&amp;gt;
                   &amp;lt;/driver&amp;gt;
                   &amp;lt;driver name=&quot;postgres&quot; module=&quot;postgres&quot;&amp;gt;
                       &amp;lt;driver-class&amp;gt;org.postgresql.Driver&amp;lt;/dirver-class&amp;gt;
                   &amp;lt;/driver&amp;gt;
               &amp;lt;/drivers&amp;gt;
           &amp;lt;/datasources&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:deployment-scanner:2.0&quot;&amp;gt;
           &amp;lt;deployment-scanner path=&quot;deployments&quot; relative-to=&quot;jboss.server.base.dir&quot; scan-interval=&quot;0&quot; scan-enabled=&quot;false&quot; runtime-failure-causes-rollback=&quot;${jboss.deployment.scanner.rollback.on.failure:false}&quot;/&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:discovery:1.0&quot;/&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:distributable-web:2.0&quot; default-session-management=&quot;default&quot; dafault-single-sign-on-management=&quot;default&quot;&amp;gt;
           &amp;lt;infinispan-session-management name=&quot;default&quot; cache-container=&quot;web&quot; granularity=&quot;SESSION&quot;&amp;gt;
               &amp;lt;primary-owner-affinity/&amp;gt;
           &amp;lt;/infinispan-session-management&amp;gt;
           &amp;lt;infinispan-single-sign-on-management name=&quot;default&quot; cache-container=&quot;web&quot; cache=&quot;sso&quot;/&amp;gt;
           &amp;lt;infinispan-routing cache-container=&quot;web&quot; cache=&quot;routing&quot;/&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:ee:4.0&quot;&amp;gt;
           &amp;lt;spec-descriptor-property-replacement&amp;gt;false&amp;lt;/spec-descriptor-property-replacement&amp;gt;
           &amp;lt;concurrent&amp;gt;
               &amp;lt;context-services&amp;gt;
                   &amp;lt;context-service name=&quot;default&quot; jnid-name=&quot;java:jboss/ee/concurrency/context/default&quot; use-transaction-setup-provider=&quot;true&quot;/&amp;gt;
               &amp;lt;/context-services&amp;gt;
               &amp;lt;managed-thread-factories&amp;gt;
                   &amp;lt;managed-thread-factory name=&quot;default&quot; jndi-name=&quot;java:jboss/ee/concurrency/factory/default&quot; context-service=&quot;default&quot;/&amp;gt;
               &amp;lt;/managed-thread-factories&amp;gt;
               &amp;lt;managed-executor-services&amp;gt;
                   &amp;lt;managed-executor-service name=&quot;default&quot; jndi-name=&quot;java:jboss/ee/concurrency/executor/default&quot; context-service=&quot;default&quot; hung-task-threshold=&quot;60000&quot; keepalive-time=&quot;5000&quot;/&amp;gt;
               &amp;lt;/managed-executor-services&amp;gt;
               &amp;lt;managed-scheduled-executor-services&amp;gt;
                   &amp;lt;managed-scheduled-executor-service name=&quot;default&quot; jndi-name=&quot;java:jboss/ee/concurrency/scheduler/default&quot; context-service=&quot;default&quot; hung-task-threshold=&quot;60000&quot; keepalive-time=&quot;3000&quot;/&amp;gt;
               &amp;lt;/managed-scheduled-executor-services&amp;gt;
           &amp;lt;/concurrent&amp;gt;
           &amp;lt;default-bindings context-service=&quot;java:jboss/ee/concurrency/context/default&quot; datasource=&quot;java:/jboss/cubridDS&quot; managed-executor-service=&quot;java:jboss/ee/concurrency/scheduler/default&quot; managed-thread-factory=&quot;java:jboss/ee/concurrency/factory/default&quot;/&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:ee-security:1.0&quot;/&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:ejb3:6.0&quot;&amp;gt;       
           &amp;lt;session-bean&amp;gt;
               &amp;lt;stateless&amp;gt;
                   &amp;lt;bean-instance-pool-ref pool-name=&quot;slsb-strict-max-pool&quot;/&amp;gt;
               &amp;lt;/stateless&amp;gt;
               &amp;lt;stateful default-access-timeout=&quot;5000&quot; cache-ref=&quot;simple&quot; passivation-disabled-cache-ref=&quot;simple&quot;/&amp;gt;
               &amp;lt;singleton default-access-timeout=&quot;5000&quot;/&amp;gt;
           &amp;lt;/session-bean&amp;gt;
           &amp;lt;pools&amp;gt;
               &amp;lt;bean-instance-pools&amp;gt;
                   &amp;lt;strict-max-pool name=&quot;mdb-strict-max-pool&quot; derive-size=&quot;from-cpu-count&quot; instance-acquisition-timeout=&quot;5&quot; instance-acquisition-time-unit=&quot;MINUTES&quot;/&amp;gt;
                   &amp;lt;strict-max-pool name=&quot;slsb-strict-max-pool&quot; derive-size=&quot;from-worker-pools&quot; instance-acquisition-timeout=&quot;5&quot; instance-acquisition-timeout-unit=&quot;MINUTES&quot;/&amp;gt;
               &amp;lt;/bean-instance-pools&amp;gt;
           &amp;lt;/pools&amp;gt;
           &amp;lt;caches&amp;gt;
               &amp;lt;cache name=&quot;simple&quot;/&amp;gt;
               &amp;lt;cache name=&quot;distributable&quot; passivation-store-ref=&quot;infinispan&quot; aliases=&quot;passivating clustered&quot;/&amp;gt;
           &amp;lt;/caches&amp;gt;
           &amp;lt;passivation-stores&amp;gt;
               &amp;lt;passivation-store name=&quot;infinispan&quot; cache-container=&quot;ejb&quot; max-size=&quot;10000&quot;/&amp;gt;
           &amp;lt;/pasivation-stores&amp;gt;
           &amp;lt;async thread-pool-name=&quot;default&quot;/&amp;gt;
           &amp;lt;timer-service thread-pool-name=&quot;default&quot; default-data-store=&quot;default-file-store&quot;&amp;gt;
               &amp;lt;data-stores&amp;gt;
                   &amp;lt;file-data-store name=&quot;default-file-store&quot; path=&quot;timer-service-data&quot; relative-to=&quot;jboss.server.data.dir&quot;/&amp;gt;
               &amp;lt;/data-stores&amp;gt;
           &amp;lt;/timer-service&amp;gt;
           &amp;lt;remote connector-ref=&quot;http-remoting-connector&quot; thread-pool-name=&quot;default&quot;&amp;gt;
               &amp;lt;chnnel-creation-options&amp;gt;
                   &amp;lt;option name=&quot;MAX_OUTBOUND-MESSAGES&quot; value=&quot;1234&quot; type=&quot;remoting&quot;/&amp;gt;
               &amp;lt;/chnnel-creation-options&amp;gt;
           &amp;lt;/remote&amp;gt;
           &amp;lt;thread-pools&amp;gt;
               &amp;lt;thread-pool name=&quot;default&quot;&amp;gt;
                   &amp;lt;max-threads count=&quot;10&quot;/&amp;gt;
                   &amp;lt;keepalive-time time=&quot;60&quot; unit=&quot;seconds&quot;/&amp;gt;
               &amp;lt;/thread-pool&amp;gt;
           &amp;lt;/thread-pools&amp;gt;
           &amp;lt;default-security-domain value=&quot;other&quot;/&amp;gt;
           &amp;lt;default-missing-method-permissions-deny-access value=&quot;true&quot;/&amp;gt;
           &amp;lt;statistics enabled=&quot;${wildfly.ejb3.statistics-enabled:${wildfly.statistics-enabled:false}}&quot;/&amp;gt;
           &amp;lt;log-system-exceptions value=&quot;true&quot;/&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:wildfly:elytron:8.0&quot; final-providers=&quot;combinde-providers&quot; disallowed-providers=&quot;OracleUcrypto&quot;&amp;gt;
           &amp;lt;providers&amp;gt;
               &amp;lt;aggregate-providers name=&quot;combined-providers&quot;&amp;gt;
                   &amp;lt;providers name=&quot;elytron&quot;/&amp;gt;
                   &amp;lt;providers name=&quot;openssl&quot;/&amp;gt;
               &amp;lt;/aggregate-providers&amp;gt;
               &amp;lt;provider-loader name=&quot;elytron&quot; module=&quot;org.wildfly.security.elytron&quot;/&amp;gt;
               &amp;lt;provider-loader name=&quot;openssl&quot; module=&quot;org.wildfly.openssl&quot;/&amp;gt;
           &amp;lt;/providers&amp;gt;
           &amp;lt;audit-logging&amp;gt;
               &amp;lt;file-audit-log name=&quot;local-audit&quot; path=&quot;audit.log&quot; relative-to=&quot;jboss.server.log.dir&quot; format=&quot;JSON&quot;/&amp;gt;
           &amp;lt;/audit-logging&amp;gt;
           &amp;lt;security-domains&amp;gt;
               &amp;lt;security-domain name=&quot;ApplicationDomain&quot; default-realm=&quot;ApplicationRealm&quot; permission-mapper=&quot;default-permission-mapper&quot;&amp;gt;
                   &amp;lt;realm name=&quot;ApplicationRealm&quot; role-decoder=&quot;groups-to-roles&quot;/&amp;gt;
                   &amp;lt;realm name=&quot;local&quot;/&amp;gt;
               &amp;lt;/security-domain&amp;gt;
               &amp;lt;security-domain name=&quot;ManagementDomain&quot; default-realm=&quot;ManagementRealm&quot; permission-mapper=&quot;default-permission-mapper&quot;&amp;gt;
                   &amp;lt;realm name=&quot;ManagementRealm&quot; role-decoder=&quot;groups-to-roles&quot;/&amp;gt;
                   &amp;lt;realm name=&quot;local&quot; role-mapper=&quot;super-user-mapper&quot;/&amp;gt;
               &amp;lt;/security-domain&amp;gt;
           &amp;lt;/security-domains&amp;gt;
           &amp;lt;security-realms&amp;gt;
               &amp;lt;identity-realm name=&quot;local&quot; identity=&quot;$local&quot;/&amp;gt;
               &amp;lt;properties-realm name=&quot;ApplicationRealm&quot;&amp;gt;
                   &amp;lt;users-properties path=&quot;application-users.properties&quot; relative-to=&quot;jboss.server.config.dir&quot; digest-realm-name=&quot;ApplicationRealm&quot;/&amp;gt;
                   &amp;lt;groups-properties path=&quot;application-roles.properties&quot; relative-to=&quot;jboss.server.config.dir&quot;/&amp;gt;
               &amp;lt;/properties-realm&amp;gt;
               &amp;lt;properties-realm name=&quot;ManagementRealm&quot;&amp;gt;
                   &amp;lt;users-properties path=&quot;mgmt-users.properties&quot; relative-to=&quot;jboss.server.config.dir&quot; digest-realm-name=&quot;ManagementRealm&quot;/&amp;gt;
                   &amp;lt;groups-properties path=&quot;mgmt-groups.properties&quot; relative-to=&quot;jboss.server.config.dir&quot;/&amp;gt;
               &amp;lt;/properties-realm&amp;gt;
           &amp;lt;/security-realms&amp;gt;
           &amp;lt;mappers&amp;gt;
               &amp;lt;simple-permission-mapper name=&quot;default-permission-mapper&quot; mapping-mode=&quot;first&quot;&amp;gt;
                   &amp;lt;permission-mapping&amp;gt;
                       &amp;lt;principal name=&quot;anonymous&quot;/&amp;gt;
                       &amp;lt;permission-set name=&quot;default-permissions&quot;/&amp;gt;
                   &amp;lt;/permission-mapping&amp;gt;
                   &amp;lt;permission-mapping match-all=&quot;true&quot;&amp;gt;
                       &amp;lt;permission-set name=&quot;login-permission&quot;/&amp;gt;
                       &amp;lt;permission-set name=&quot;default-permissions&quot;/&amp;gt;
                   &amp;lt;/permission-mapping&amp;gt;
               &amp;lt;/simple-permission-mapper&amp;gt;
               &amp;lt;constant-realm-mapper name=&quot;local&quot; realm-name=&quot;local&quot;/&amp;gt;
               &amp;lt;simple-role-decoder name=&quot;groups-to-roles&quot; attribute=&quot;groups&quot;/&amp;gt;
               &amp;lt;constant-role-mapper name=&quot;super-user-mapper&quot;&amp;gt;
                   &amp;lt;role name=&quot;SuperUser&quot;/&amp;gt;
               &amp;lt;/constant-role-mapper&amp;gt;
           &amp;lt;/mappers&amp;gt;
           &amp;lt;permission-sets&amp;gt;
               &amp;lt;permission-set name=&quot;login-permission&quot;&amp;gt;
                   &amp;lt;permission class-name=&quot;org.wildfly.security.auth.permission.LoginPermission&quot;/&amp;gt;
               &amp;lt;/permission-set&amp;gt;
               &amp;lt;permission-set name=&quot;default-permissions&quot;&amp;gt;
                   &amp;lt;permission class-name=&quot;org.wildfly.extension.batch.jberet.deployment.BatchPermission&quot; module=&quot;org.wildfly.extension.batch.jberet&quot; target-name=&quot;*&quot;/&amp;gt;
                   &amp;lt;permission class-name=&quot;org.wildfly.transaction.client.RemoteTransactionPermission&quot; module=&quot;org.wildfly.transaction.client&quot;/&amp;gt;
                   &amp;lt;permission class-name=&quot;org.jboss.ejb.client.RemoteEJBPermission&quot; module=&quot;org.jboss.ejb-client&quot;/&amp;gt;
               &amp;lt;/permission-set&amp;gt;
           &amp;lt;/permission-sets&amp;gt;
           &amp;lt;http&amp;gt;
               &amp;lt;http-authentication-factory name=&quot;management-http-authentication&quot; security-domain=&quot;ManagementDomain&quot; http-server-mechanism-factory=&quot;global&quot;&amp;gt;
                   &amp;lt;mechanism-configuration&amp;gt;
                       &amp;lt;mechanism mechanism-name=&quot;DIGEST&quot;&amp;gt;
                           &amp;lt;mechanism-realm realm-name=&quot;ManagementRealm&quot;/&amp;gt;
                       &amp;lt;/mechanism&amp;gt;
                   &amp;lt;/mechanism-configuration&amp;gt;
               &amp;lt;/http-authentication-factory&amp;gt;
               &amp;lt;provider-http-server-mechanism-factory name=&quot;global&quot;/&amp;gt;
           &amp;lt;/http&amp;gt;
           &amp;lt;sasl&amp;gt;
               &amp;lt;sasl-authentication-factory name=&quot;application-sasl-authentication&quot; sasl-server-factory=&quot;configured&quot; security-domain=&quot;ApplicationDomain&quot;&amp;gt;
                   &amp;lt;mechanism-configuration&amp;gt;
                       &amp;lt;mechanism mechanism-name=&quot;JBOSS-LOCAL-USER&quot; realm-mapper=&quot;local&quot;/&amp;gt;
                       &amp;lt;mechanism mechanism-name=&quot;DIGEST-MD5&quot;&amp;gt;
                           &amp;lt;mechanism-realm realm-name=&quot;ApplicationRealm&quot;/&amp;gt;
                       &amp;lt;/mechanism&amp;gt;
                   &amp;lt;/mechanism-configuration&amp;gt;
               &amp;lt;/sasl-authentication-factory&amp;gt;
               &amp;lt;sasl-authentication-factory name=&quot;management-sasl-authentication&quot; sasl-server-factory=&quot;configured&quot; security-domain=&quot;ManagementDomain&quot;&amp;gt;
                   &amp;lt;mechanism-configuration&amp;gt;
                       &amp;lt;mechanism mechanism-name=&quot;JBOSS-LOCAL-USER&quot; realm-mapper=&quot;local&quot;/&amp;gt;
                       &amp;lt;mechanism mechanism-name=&quot;DIGEST-MD5&quot;&amp;gt;
                           &amp;lt;mechanism-realm realm-name=&quot;ManagementRealm&quot;/&amp;gt;
                       &amp;lt;/mechanism&amp;gt;
                   &amp;lt;/mechanism-configuration&amp;gt;
               &amp;lt;/sasl-authentication-factory&amp;gt;
               &amp;lt;configurable-sasl-server-factory name=&quot;configured&quot; sasl-server-factory=&quot;elytron&quot;&amp;gt;
                   &amp;lt;properties&amp;gt;
                       &amp;lt;property name=&quot;wildfily.sasl.local-user.default-user&quot; value=&quot;$local&quot;/&amp;gt;
                   &amp;lt;/properties&amp;gt;
               &amp;lt;/configurable-sasl-server-factory&amp;gt;
               &amp;lt;mechanism-provider-filtering-sasl-server-factory name=&quot;elytron&quot; sasl-server-factory=&quot;global&quot;&amp;gt;
                   &amp;lt;filters&amp;gt;
                       &amp;lt;filter provider-name=&quot;WildFlyElytron&quot;/&amp;gt;
                   &amp;lt;/filters&amp;gt;
               &amp;lt;/mechanism-provider-filtering-sasl-server-factory&amp;gt;
               &amp;lt;provider-sasl-server-factory name=&quot;global&quot;/&amp;gt;
           &amp;lt;/sasl&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:infinispan:9.0&quot;&amp;gt;
           &amp;lt;cache-container name=&quot;web&quot; default-cache=&quot;dist&quot; module=&quot;org.wildfly.clustering.web.infinispan&quot;&amp;gt;
               &amp;lt;transport lock-timeout=&quot;60000&quot;/&amp;gt;
               &amp;lt;replicated-cache name=&quot;sso&quot;&amp;gt;
                   &amp;lt;locking isolation=&quot;REPEATABLE_READ&quot;/&amp;gt;
                   &amp;lt;transaction mode=&quot;BATCH&quot;/&amp;gt;
               &amp;lt;/replicated-cache&amp;gt;
               &amp;lt;replicated-cache name=&quot;routing&quot;/&amp;gt;
               &amp;lt;distributed-cache name=&quot;dist&quot;&amp;gt;
                   &amp;lt;locking isolation=&quot;REPEATABLE_READ&quot;/&amp;gt;
                   &amp;lt;transaction mode=&quot;BATCH&quot;/&amp;gt;
                   &amp;lt;file-store/&amp;gt;
               &amp;lt;/distributed-cache&amp;gt;               
           &amp;lt;/cache-container&amp;gt;
           &amp;lt;cache-container name=&quot;server&quot; aliases=&quot;singleton cluster&quot; default-cache=&quot;default&quot; module=&quot;org.wildfly.clustering.server&quot;&amp;gt;
               &amp;lt;transport lock-timeout=&quot;60000&quot;/&amp;gt;
                   &amp;lt;transaction mode=&quot;BATCH&quot;/&amp;gt;
               &amp;lt;/replicated-cache&amp;gt;               
           &amp;lt;cache-container&amp;gt;
           &amp;lt;cache-container name=&quot;ejb&quot; aliases=&quot;sfsb&quot; default-cache=&quot;dist&quot; module=&quot;org.wildfly.clustering.ejb.infinispan&quot;&amp;gt;
               &amp;lt;transport lock-timeout=&quot;60000&quot;/&amp;gt;
               &amp;lt;distributed-cache name=&quot;dist&quot;&amp;gt;
                   &amp;lt;locking isolation=&quot;REPEATABLE_READ&quot;/&amp;gt;
                   &amp;lt;transaction mode=&quot;BATCH&quot;/&amp;gt;
                   &amp;lt;file-store/&amp;gt;
               &amp;lt;/distributed-cache&amp;gt;               
           &amp;lt;cache-container&amp;gt;    
           &amp;lt;cache-container name=&quot;hibernate&quot; module=&quot;org.infinispan.hibernate-cache&quot;&amp;gt;
               &amp;lt;transport lock-timeout=&quot;60000&quot;/&amp;gt;
               &amp;lt;local-cache name=&quot;local-query&quot;&amp;gt;
                   &amp;lt;object-memory size=&quot;10000&quot;/&amp;gt;
                   &amp;lt;expiration max-idle=&quot;100000&quot;/&amp;gt;
               &amp;lt;/local-cache&amp;gt;
               &amp;lt;invalidation-cache name=&quot;entity&quot;/&amp;gt;
                   &amp;lt;object-memory size=&quot;10000&quot;/&amp;gt;
                   &amp;lt;expiration max-idle=&quot;100000&quot;/&amp;gt;
               &amp;lt;/invalidation-cache&amp;gt;
               &amp;lt;replicated-cache name=&quot;timestamps&quot;/&amp;gt;
           &amp;lt;/cache-container&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:io:3.0&quot;&amp;gt;
           &amp;lt;worker name=&quot;default&quot;/&amp;gt;
           &amp;lt;buffer-pool name=&quot;default&quot;/&amp;gt;
       &amp;lt;/subsystem&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jaxrs:1.0&quot;/&amp;gt;
       &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jca:5.0&quot;&amp;gt;
           &amp;lt;archive-validation enabled=&quot;true&quot; fail-on-error=&quot;true&quot; fail-on-warn=&quot;false&quot;/&amp;gt;
           &amp;lt;bean-validation enabled=&quot;true&quot;/&amp;gt;
           &amp;lt;default-workmanager&amp;gt;
               &amp;lt;short-running-threads&amp;gt;
                   &amp;lt;core-threads count=&quot;50&quot;/&amp;gt;
                   &amp;lt;queue-length count=&quot;50&quot;/&amp;gt;
                   &amp;lt;max-threads count=&quot;50&quot;/&amp;gt;
                   &amp;lt;keepalive-time time=&quot;10&quot; unit=&quot;seconds&quot;/&amp;gt;
               &amp;lt;/short-running-threads&amp;gt;
               &amp;lt;long-running-threads&amp;gt;
                   &amp;lt;core-threads count=&quot;50&quot;/&amp;gt;
                   &amp;lt;queue-length count=&quot;50&quot;/&amp;gt;
                   &amp;lt;max-threads count=&quot;50&quot;/&amp;gt;
                   &amp;lt;keepalive-time time=&quot;10&quot; unit=&quot;seconds&quot;/&amp;gt;
               &amp;lt;/short-running-threads&amp;gt;
          &amp;lt;/default-workmanager&amp;gt;
          &amp;lt;cached-connection-manager/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jdr:1.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jgroups:7.0&quot;&amp;gt;
          &amp;lt;channels default=&quot;ee&quot;&amp;gt;
              &amp;lt;channel name=&quot;ee&quot; stack&quot;udp&quot; cluster=&quot;ejb&quot;/&amp;gt;
          &amp;lt;/channels&amp;gt;
          &amp;lt;stacks&amp;gt;
              &amp;lt;stack name=&quot;udp&quot;&amp;gt;
                  &amp;lt;transport type=&quot;UDP&quot; socket-binding=&quot;jgroups-udp&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;PING&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;MERGE3&quot;/&amp;gt;
                  &amp;lt;socket-protocol type=&quot;FD_SOCK&quot; socket-binding=&quot;jgroups-udp-fd&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;FD_ALL&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;VERIFY_SUSPECT&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;pbcast.NAKACK2&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;UNICAST3&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;pbcast.STABLE&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;pbcast.GMS&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;UFC&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;MFC&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;FRAG3&quot;/&amp;gt;
              &amp;lt;/stack&amp;gt;
              &amp;lt;stack name=&quot;tcp&quot;&amp;gt;
                  &amp;lt;transport type=&quot;TCP&quot; socket-binding=&quot;jgroups-tcp&quot;/&amp;gt;
                  &amp;lt;!-- &amp;lt;protocol type=&quot;TCPPING&quot;/&amp;gt;
                      &amp;lt;property name=&quot;initial_hosts&quot;&amp;gt;${jboss.cluster.tcp.initial_hosts}&amp;lt;/property&amp;gt;
                      &amp;lt;property name=&quot;port_range&quot;&amp;gt;0&amp;lt;/property&amp;gt;
                  &amp;lt;/protocol&amp;gt; --&amp;gt;
                  &amp;lt;!-- &amp;lt;socket-protocol type=&quot;MPING&quot; socket-binding=&quot;jgroups-mping&quot;/&amp;gt; --&amp;gt;
                  &amp;lt;protocol type=&quot;MERGE3&quot;/&amp;gt;
                  &amp;lt;socket-protocol type=&quot;FD_SOCK&quot; socket-binding=&quot;jgroups-tcp-fd&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;FD_ALL&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;VERIFY_SUSPECT&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;pbcast.NAKACK2&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;UNICAST3&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;pbcast.STABLE&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;pbcast.GMS&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;MFC&quot;/&amp;gt;
                  &amp;lt;protocol type=&quot;FRAG3&quot;/&amp;gt;
              &amp;lt;/stack&amp;gt;
          &amp;lt;/stacks&amp;gt;
      &amp;lt;/subsystem&amp;gt;                  
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jmx:1.3&quot;&amp;gt;
          &amp;lt;expose-resolved-model/&amp;gt;
          &amp;lt;expose-expression-model/&amp;gt;
          &amp;lt;remoting-connector/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jpa:1.1&quot;&amp;gt;
          &amp;lt;jpa default-datasource=&quot;&quot; default-extended-persistence-inheritance=&quot;DEEP&quot;/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:jsf:1.1&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:mail:3.0&quot;&amp;gt;
          &amp;lt;mail-session name=&quot;default&quot; jndi-name=&quot;java:jboss/mail/Default&quot;&amp;gt;
              &amp;lt;smtp-server outbound-socket-binding-ref=&quot;mail-smtp&quot;/&amp;gt;
          &amp;lt;/mail-session&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:wildfly:microprofile-config-smallrye:1.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:wildfly:microprofile-health-smallrye:2.0&quot; security-enabled=&quot;false&quot; empty-liveness-checks-status=&quot;${env.MP_HEALTH_EMPTY_LIVENESS_CHECKS_STATUS:UP}&quot; empty-readiness-checks-status=&quot;${env.MP_HEALTH_EMPTY_READINESS_CHECKS_STATUS:UP}&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:wildfly:microprofile-metrics-smallrye:2.0&quot; security-enabled=&quot;false&quot; exposed-subsystems=&quot;*&quot; prefix=&quot;${wildfly.metrics.prefix:jboss}&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:wildfly:microprofile-opentracing-smallrye:1.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:modcluster:5.0&quot;&amp;gt;
          &amp;lt;proxy name=&quot;default&quot; advertise-socket=&quot;modcluster&quot; listener=&quot;ajp&quot;&amp;gt;
              &amp;lt;dynamic-load-provider&amp;gt;
                  &amp;lt;load-metric type=&quot;cpu&quot;/&amp;gt;
              &amp;lt;/dynamic-load-provider&amp;gt;
          &amp;lt;/proxy&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:naming:2.0&quot;&amp;gt;
          &amp;lt;remote-naming/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:pojo:1.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:remoting:4.0&quot;&amp;gt;
          &amp;lt;http-connector name=&quot;http-remoting-connector&quot; connector-ref=&quot;default&quot; security-realm=&quot;ApplicationRealm&quot;/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:request-controller:1.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:resource-adapters:5.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:sar:1.0&quot;/&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:security:2.0&quot;&amp;gt;
          &amp;lt;security-domains&amp;gt;
              &amp;lt;security-domain name=&quot;cubrid-password&quot; cache-type=&quot;default&quot;&amp;gt;
                  &amp;lt;authentication&amp;gt;
                      &amp;lt;login-module code=&quot;org.picketbox.datasource.security.SecureIdentityLoginModule&quot; flag=&quot;required&quot;&amp;gt;
                          &amp;lt;module-option name=&quot;username&quot; value=&quot;public&quot;/&amp;gt;
                          &amp;lt;module-option name=&quot;password&quot; value=&quot;2d6219b35e931895a11f65ce06a77a33c&quot;/&amp;gt;
                          &amp;lt;module-option name=&quot;managedConnectionFactoryName&quot; value=&quot;jbossjca:service=LocalTxCM,name=cubridDS&quot;/&amp;gt;
                      &amp;lt;/login-module&amp;gt;
                  &amp;lt;/authentication&amp;gt;
              &amp;lt;/security-domain&amp;gt;
              &amp;lt;security-domain name=&quot;other&quot; cache-type=&quot;default&quot;&amp;gt;
                  &amp;lt;authentication&amp;gt;
                      &amp;lt;login-module code=&quot;Remoting&quot; flag=&quot;optional&quot;&amp;gt;
                          &amp;lt;module-option name=&quot;password-stacking&quot; value=&quot;useFirstPass&quot;/&amp;gt;
                      &amp;lt;/login-module&amp;gt;
                      &amp;lt;login-module code=&quot;RealmDirect&quot; flag=&quot;required&quot;&amp;gt;
                          &amp;lt;module-option name=&quot;password-stacking&quot; value=&quot;useFirstPass&quot;/&amp;gt;
                      &amp;lt;/login-module&amp;gt;
                  &amp;lt;/authentication&amp;gt;
              &amp;lt;/security-domain&amp;gt;
              &amp;lt;security-domain name=&quot;jboss-web-policy&quot; cache-type=&quot;default&quot;&amp;gt;
                  &amp;lt;authorization&amp;gt;
                      &amp;lt;policy-module code=&quot;Delegating&quot; flag=&quot;required&quot;/&amp;gt;
                  &amp;lt;/authorization&amp;gt;
              &amp;lt;/security-domain&amp;gt;
              &amp;lt;security-domain name=&quot;jaspitest&quot; cache-type=&quot;default&quot;&amp;gt;
                  &amp;lt;authentication-jaspi&amp;gt;
                      &amp;lt;login-module-stack name=&quot;dummy&quot;&amp;gt;
                          &amp;lt;login-module code=&quot;Dummy&quot; flag=&quot;optional&quot;/&amp;gt;
                      &amp;lt;/login-module-stack&amp;gt;
                      &amp;lt;auth-module code=&quot;Dummy&quot;/&amp;gt;
                  &amp;lt;/authentication-jaspi&amp;gt;
              &amp;lt;/security-domain&amp;gt;
              &amp;lt;security-domain name=&quot;jboss-ejb-policy&quot; cache-type=&quot;default&quot;&amp;gt;
                  &amp;lt;authorization&amp;gt;
                      &amp;lt;policy-module code=&quot;Delegating&quot; flag=&quot;required&quot;/&amp;gt;
                  &amp;lt;/authrization&amp;gt;
              &amp;lt;/security-domain&amp;gt;
          &amp;lt;/security-domains&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:security-manager:1.0&quot;&amp;gt;
          &amp;lt;deployment-permissions&amp;gt;
              &amp;lt;maximum-set&amp;gt;
                  &amp;lt;permission class=&quot;java.security.AllPermission&quot;/&amp;gt;
              &amp;lt;/maximum-set&amp;gt;
          &amp;lt;/deployment-permissions&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:singleton:1.0&quot;&amp;gt;
          &amp;lt;singleton-policies default=&quot;default&quot;&amp;gt;
              &amp;lt;singleton-policy name=&quot;default&quot; cache-container=&quot;server&quot;&amp;gt;
                  &amp;lt;simple-election-policy/&amp;gt;
              &amp;lt;/singleton-policy&amp;gt;
          &amp;lt;/singleton-policies&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:transaction:5.0&quot;&amp;gt;
          &amp;lt;core-environment node-identifier=&quot;${jboss.tx.node.id:1}&quot;&amp;gt;
              &amp;lt;process-id&amp;gt;
                  &amp;lt;uuid/&amp;gt;
              &amp;lt;/process-id&amp;gt;
          &amp;lt;/core-environment&amp;gt;
          &amp;lt;recovery-environment socket-binding=&quot;txn-recovery-environment&quot; status-socket-binding=&quot;txn-status-manager&quot;/&amp;gt;
          &amp;lt;coordinator-environment statistics-enabled=&quot;${wildfly.transactions.statistics-enabled:${wildfly.statistics-enabled:false}}&quot;/&amp;gt;
          &amp;lt;object-store path=&quot;tx-object-store&quot; relative-to=&quot;jboss.server.data.dir&quot;/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:undertow:10.0&quot; default-server=&quot;default-server&quot; default-virtual-host=&quot;default-host&quot; default-servlet-container=&quot;default&quot; default-security-domain=&quot;other&quot; statistics-enabled=&quot;${wildfly.undertow.statistics-enabled:${wildfly.statistics-enabled:false}}&quot;&amp;gt;
          &amp;lt;buffer-cache name=&quot;default&quot;/&amp;gt;
          &amp;lt;server name=&quot;default-server&quot;&amp;gt;
              &amp;lt;ajp-listener name=&quot;ajp&quot; max-post-size=&quot;524288000&quot; socket-binding=&quot;ajp&quot; max-connections=&quot;1024&quot;/&amp;gt;
              &amp;lt;http-listener name=&quot;default&quot; max-post-size=&quot;524288000&quot; socket-binding=&quot;http&quot; redirect-socket=&quot;https&quot; enable-http2=&quot;true&quot;/&amp;gt;
              &amp;lt;https-listener name=&quot;https&quot; max-post-size=&quot;524288000&quot; socket-binding=&quot;https&quot; security-realm=&quot;ApplicationRealm&quot; enable-http2=&quot;true&quot;/&amp;gt;
              &amp;lt;host name=&quot;default-host&quot; alias=&quot;localhost&quot;&amp;gt;
                  &amp;lt;location name=&quot;/&quot; handler=&quot;welcom-content&quot;/&amp;gt;
                  &amp;lt;http-invoker security-realm=&quot;ApplicationRealm&quot;/&amp;gt;
                  &amp;lt;filter-ref name=&quot;secret-checker&quot; predicate=&quot;equals(%p,${jboss.ajp.port:8009})&quot;/&amp;gt;
              &amp;lt;/host&amp;gt;
          &amp;lt;/server&amp;gt;
          &amp;lt;servlet-container name=&quot;default&quot;&amp;gt;
              &amp;lt;jsp-config x-powered-by=&quot;false&quot; development=&quot;false&quot; check-interval=&quot;60&quot;/&amp;gt;
              &amp;lt;websockets/&amp;gt;
          &amp;lt;/servlet-container&amp;gt;
          &amp;lt;filters&amp;gt;
              &amp;lt;expression-filter name=&quot;secret-checker&quot; expression=&quot;not equals(%{r,secret}, 'Q2xvdWQxMjMj') -&amp;gt; response-code(403)&quot;/&amp;gt;
          &amp;lt;/filters&amp;gt;
          &amp;lt;handlers&amp;gt;
              &amp;lt;file name=&quot;welcome-content&quot; path=&quot;${jboss.home.dir}/welcome-content&quot;/&amp;gt;
          &amp;lt;/handlers&amp;gt;
      &amp;lt;/subsystem&amp;gt;                 
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:webservices:2.0&quot; statistics-enabled=&quot;${wildfly.webservices.statistics-enabled:${wildfly.statistics-enabled:false}}&quot;&amp;gt;
          &amp;lt;wsdl-host&amp;gt;${jboss.bind.address:127.0.0.1}&amp;lt;/wsdl-host&amp;gt;
          &amp;lt;endpoint-config name=&quot;Standard-Endpoint-Config&quot;/&amp;gt;
          &amp;lt;endpoint-config name=&quot;Recording-Endpoint-Config&quot;&amp;gt;
              &amp;lt;pre-handler-chain name=&quot;recording-handlers&quot; protocol-bindings=&quot;##SOAP11_HTTP ##SOAP11_HTTP_MTOM ##SOAP12_HTTP ##SOAP12_HTTP_MTOM&quot;&amp;gt;
                  &amp;lt;handler name=&quot;RecordingHandler&quot; class=&quot;org.jboss.ws.common.invocation.RecordingServerHandler&quot;/&amp;gt;
              &amp;lt;/pre-handler-chain&amp;gt;
          &amp;lt;/endpoint-config&amp;gt;
          &amp;lt;client-config name=&quot;Standard-Client-Config&quot;/&amp;gt;
      &amp;lt;/subsystem&amp;gt;
      &amp;lt;subsystem xmlns=&quot;urn:jboss:domain:weld:4.0&quot;/&amp;gt;
   &amp;lt;/profile&amp;gt;
   &amp;lt;interfaces&amp;gt;
       &amp;lt;interface name=&quot;management&quot;&amp;gt;
           &amp;lt;inet-address value=&quot;${jboss.bind.address.management:127.0.0.1}&quot;/&amp;gt;
       &amp;lt;/interface&amp;gt;
       &amp;lt;interface name=&quot;private&quot;&amp;gt;
           &amp;lt;inet-address value=&quot;${jboss.bind.address.private:127.0.0.1}&quot;/&amp;gt;
       &amp;lt;/interface&amp;gt;
       &amp;lt;interface name=&quot;public&quot;&amp;gt;
           &amp;lt;inet-address value=&quot;${jboss.bind.address:127.0.0.1}&quot;/&amp;gt;
       &amp;lt;/interface&amp;gt;       
   &amp;lt;/interfaces&amp;gt;
   &amp;lt;socket-binding-group name=&quot;standard-sockets&quot; default-interface=&quot;public&quot; port-offset=&quot;${jboss.socket.binding.port-offset:0}&quot;&amp;gt;
       &amp;lt;socket-binding name=&quot;ajp&quot; port=&quot;8009&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;http&quot; port=&quot;8081&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;https&quot; port=&quot;8443&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;jgroups-mping&quot; interface=&quot;private&quot; multicast-address=&quot;${jboss.default.multicast.address:230.0.0.4}&quot; multicast-port=&quot;45700&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;jgroups-tcp&quot; interface=&quot;public&quot; port=&quot;7600&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;jgroups-tcp-fd&quot; interface=&quot;public&quot; port=&quot;57600&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;jgroups-udp&quot; interface=&quot;public&quot; port=&quot;55200&quot; multicast-address=&quot;${jboss.default.multicast.address:230.0.0.4}&quot; multicast-port=&quot;45688&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;jgroups-udp-fd&quot; interface=&quot;public&quot; port=&quot;54200&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;management-http&quot; interface=&quot;management&quot; port=&quot;${jboss.management.http.port:9991}&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;management-https&quot; interface=&quot;management&quot; port=&quot;${jboss.management.https.port:9993}&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;modcluster&quot; multicast-address=&quot;${jboss.modcluster.multicast.address:224.0.1.105}&quot; multicast-port=&quot;23364&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;txn-recovery-environment&quot; port=&quot;4712&quot;/&amp;gt;
       &amp;lt;socket-binding name=&quot;txn-status-manager&quot; port=&quot;4713&quot;/&amp;gt;
       &amp;lt;outbound-socket-binding name=&quot;mail-smtp&quot;&amp;gt;
           &amp;lt;remote-destination host=&quot;localhost&quot; port=&quot;25&quot;/&amp;gt;
       &amp;lt;/outbound-socket-binding&amp;gt;
   &amp;lt;/socket-binding-group&amp;gt;
   &amp;lt;deployments&amp;gt;
       &amp;lt;deployment name=&quot;sample.war&quot; runtime-name=&quot;sample.war&quot; enabled=&quot;false&quot;&amp;gt;
           &amp;lt;fs-exploded path=&quot;/WebApp/deploy/sample.war&quot;/&amp;gt;
       &amp;lt;/deployment&amp;gt;
   &amp;lt;/deployments&amp;gt;
&amp;lt;/server&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://chanchan-father.tistory.com/1009&quot;&gt;https://chanchan-father.tistory.com/1009&lt;/a&gt; [찬찬이 아빠 블로그:티스토리]&lt;/p&gt;</description>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/337</guid>
      <comments>https://nizimo.tistory.com/337#entry337comment</comments>
      <pubDate>Tue, 24 Jun 2025 07:24:24 +0900</pubDate>
    </item>
    <item>
      <title>jboss-web.xml /myproject jdbc/mydbjava:/mydb</title>
      <link>https://nizimo.tistory.com/336</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-message-id=&quot;6b8fb4c4-3197-4ce7-a7aa-dfb2a3e02b2b&quot; data-message-author-role=&quot;user&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p data-pm-slice=&quot;1 1 []&quot; data-ke-size=&quot;size16&quot;&gt;안되는 부분을 자세히 써주시면 좀 더 원하시는 정보를 얻을 듯 싶습니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d7QHC5/btsOM3gzDzx/8NOuTzsc5UUDZFmhde3HtK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d7QHC5/btsOM3gzDzx/8NOuTzsc5UUDZFmhde3HtK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d7QHC5/btsOM3gzDzx/8NOuTzsc5UUDZFmhde3HtK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd7QHC5%2FbtsOM3gzDzx%2F8NOuTzsc5UUDZFmhde3HtK%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;261&quot; height=&quot;148&quot; data-origin-width=&quot;261&quot; data-origin-height=&quot;148&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;WildFly(JBoss)에 올릴때 jboss-deployment-structure.xml과 jboss-web.xml이 필요한데&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;둘 다 필수파일은 아니지만 전자는 Logging라이브러리 등, 내가 프로젝트에 정의한 의존성을 무시하고 JBoss가 자체 라이브러리를 사용해서 오류를 일으킬 경우, 제외시키기 위한 목적으로 사용하고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후자는 Context Path정의와 DB연결에 JNDI를 사용한다면 호출할 DB정보를 지정하는 목적으로 사용합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;후자의 파일이 없으면 war파일명을 Context Path로 삼습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 내용물을 아래와 같지만 절대적인건 아니니 참조만 부탁드립니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;jboss-deployment-structure.xml&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;jboss-deployment-structure xmlns=&quot;urn:jboss:deployment-structure:1.1&quot;&amp;gt;
	&amp;lt;deployment&amp;gt;
		&amp;lt;exclusions&amp;gt;
			&amp;lt;!-- Disable jboss slf4j module to enable Logback --&amp;gt;
			&amp;lt;module name=&quot;org.slf4j&quot; /&amp;gt;
			&amp;lt;module name=&quot;org.slf4j.impl&quot; /&amp;gt;
			&amp;lt;module name=&quot;org.slf4j.jcl-over-slf4j&quot;/&amp;gt;
			&amp;lt;module name=&quot;org.apache.commons.logging&quot;/&amp;gt;
			&amp;lt;module name=&quot;org.apache.log4j&quot;/&amp;gt;
			&amp;lt;module name=&quot;jdbc.resultsettable&quot;/&amp;gt;
			&amp;lt;module name=&quot;jdbc.sqlonly&quot;/&amp;gt;
		&amp;lt;/exclusions&amp;gt;
	&amp;lt;/deployment&amp;gt;
&amp;lt;/jboss-deployment-structure&amp;gt;&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;b&gt;jboss-web.xml&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&amp;gt;
&amp;lt;jboss-web xmlns=&quot;http://www.jboss.com/xml/ns/javaee&quot;
	xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;
		http://www.jboss.com/xml/ns/javaee
		http://www.jboss.org/j2ee/schema/jboss-web_5_1.xsd&quot;&amp;gt;
	&amp;lt;!-- Wildfly 구동시의 Context Path 설정 --&amp;gt;
	&amp;lt;context-root&amp;gt;/myproject&amp;lt;/context-root&amp;gt;
	
	&amp;lt;!-- Wildfly JNDI 설정 --&amp;gt;
	&amp;lt;resource-ref&amp;gt;
		&amp;lt;res-ref-name&amp;gt;jdbc/mydb&amp;lt;/res-ref-name&amp;gt;
		&amp;lt;jndi-name&amp;gt;java:/mydb&amp;lt;/jndi-name&amp;gt;
	&amp;lt;/resource-ref&amp;gt;
&amp;lt;/jboss-web&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;jboss-web.xml &lt;!--?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?--&gt; &lt;!-- Wildfly 구동시의 Context Path 설정 --&gt; /myproject &lt;!-- Wildfly JNDI 설정 --&gt;jdbc/mydbjava:/mydb&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;b&gt;1. JNDI 설정은 별도로 WildFly standalone.xml 혹은 datasource 설정에 등록되어 있어야 합니다.&lt;/b&gt;&lt;/div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1750717925770&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;datasource jndi-name=&quot;java:/mydb&quot; pool-name=&quot;MyDBPool&quot; enabled=&quot;true&quot;&amp;gt;
    &amp;lt;connection-url&amp;gt;jdbc:mysql://localhost:3306/mydb&amp;lt;/connection-url&amp;gt;
    &amp;lt;driver&amp;gt;mysql&amp;lt;/driver&amp;gt;
    &amp;lt;security&amp;gt;
        &amp;lt;user-name&amp;gt;myuser&amp;lt;/user-name&amp;gt;
        &amp;lt;password&amp;gt;mypassword&amp;lt;/password&amp;gt;
    &amp;lt;/security&amp;gt;
&amp;lt;/datasource&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div data-message-model-slug=&quot;gpt-4o&quot; data-message-id=&quot;a9c01f8c-7f0e-4b95-b150-694d1fcb7c88&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;p data-end=&quot;1092&quot; data-start=&quot;1016&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. web.xml과 일치해야 합니다.&lt;/b&gt;&lt;br /&gt;web.xml의 resource-ref에도 다음과 같이 일치하는 항목이 필요합니다:&lt;/p&gt;
&lt;pre id=&quot;code_1750717975656&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;resource-ref&amp;gt;
    &amp;lt;res-ref-name&amp;gt;jdbc/mydb&amp;lt;/res-ref-name&amp;gt;
    &amp;lt;res-type&amp;gt;javax.sql.DataSource&amp;lt;/res-type&amp;gt;
    &amp;lt;res-auth&amp;gt;Container&amp;lt;/res-auth&amp;gt;
&amp;lt;/resource-ref&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-end=&quot;338&quot; data-start=&quot;296&quot; data-ke-size=&quot;size23&quot;&gt;1JndiObjectFactoryBean 방식 (XML 기반)&lt;/h3&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1750717841914&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;bean id=&quot;dataSource&quot; class=&quot;org.springframework.jndi.JndiObjectFactoryBean&quot;&amp;gt;
    &amp;lt;property name=&quot;jndiName&quot; value=&quot;java:/mydb&quot; /&amp;gt;
    &amp;lt;property name=&quot;resourceRef&quot; value=&quot;true&quot; /&amp;gt;
&amp;lt;/bean&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;728&quot; data-start=&quot;539&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;598&quot; data-start=&quot;539&quot;&gt;jndiName은 jboss-web.xml의 &amp;lt;jndi-name&amp;gt;과 정확히 일치해야 합니다.&lt;/li&gt;
&lt;li data-end=&quot;728&quot; data-start=&quot;599&quot;&gt;resourceRef를 true로 설정하면 내부적으로 java:comp/env/를 붙입니다.&lt;br /&gt;그러나 java:/mydb는 full JNDI name이므로 이 경우 &lt;b&gt;false 또는 생략&lt;/b&gt; 가능합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-end=&quot;1095&quot; data-start=&quot;1087&quot; data-ke-size=&quot;size26&quot;&gt;  정리&lt;/h2&gt;
&lt;div&gt;
&lt;div&gt;구분설정
&lt;table style=&quot;border-collapse: collapse; width: 100%;&quot; border=&quot;1&quot; data-end=&quot;1414&quot; data-start=&quot;1097&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody data-end=&quot;1414&quot; data-start=&quot;1219&quot;&gt;
&lt;tr data-end=&quot;1283&quot; data-start=&quot;1219&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1244&quot; data-start=&quot;1219&quot;&gt;jboss-web.xml 설정&lt;/td&gt;
&lt;td data-end=&quot;1283&quot; data-start=&quot;1244&quot; data-col-size=&quot;sm&quot;&gt;&amp;lt;jndi-name&amp;gt;java:/mydb&amp;lt;/jndi-name&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1352&quot; data-start=&quot;1284&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1308&quot; data-start=&quot;1284&quot;&gt;web.xml 설정&lt;/td&gt;
&lt;td data-end=&quot;1352&quot; data-start=&quot;1308&quot; data-col-size=&quot;sm&quot;&gt;&amp;lt;res-ref-name&amp;gt;jdbc/mydb&amp;lt;/res-ref-name&amp;gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr data-end=&quot;1414&quot; data-start=&quot;1353&quot;&gt;
&lt;td data-col-size=&quot;sm&quot; data-end=&quot;1377&quot; data-start=&quot;1353&quot;&gt;Spring 설정 (JNDI)&lt;/td&gt;
&lt;td data-end=&quot;1414&quot; data-start=&quot;1377&quot; data-col-size=&quot;sm&quot;&gt;value=&quot;java:/mydb&quot;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000; text-align: start;&quot; data-start=&quot;296&quot; data-end=&quot;338&quot; data-ke-size=&quot;size23&quot;&gt;&amp;nbsp;&lt;/h3&gt;</description>
      <category>jboss #apache-tomcat</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/336</guid>
      <comments>https://nizimo.tistory.com/336#entry336comment</comments>
      <pubDate>Tue, 24 Jun 2025 07:20:08 +0900</pubDate>
    </item>
    <item>
      <title>문제점: Tomcat 버전 정보 노출</title>
      <link>https://nizimo.tistory.com/335</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-message-id=&quot;3679b4c2-2a71-4760-85e2-de11faf1d292&quot; data-message-author-role=&quot;user&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;a href=&quot;https://happylie.tistory.com/180&quot;&gt;https://happylie.tistory.com/180&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-message-model-slug=&quot;gpt-4o&quot; data-message-id=&quot;5167cdc2-00da-4098-a0ba-b13c88cda1e0&quot; data-message-author-role=&quot;assistant&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;326&quot; data-origin-height=&quot;326&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bciAXL/btsNOf3X8R6/W87kmeS6BOmGKSl4ckESkk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bciAXL/btsNOf3X8R6/W87kmeS6BOmGKSl4ckESkk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bciAXL/btsNOf3X8R6/W87kmeS6BOmGKSl4ckESkk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbciAXL%2FbtsNOf3X8R6%2FW87kmeS6BOmGKSl4ckESkk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;326&quot; height=&quot;326&quot; data-origin-width=&quot;326&quot; data-origin-height=&quot;326&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;p data-end=&quot;114&quot; data-start=&quot;40&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;해당 블로그 글([보안가이드] Tomcat Version 정보 노출 방지)에서는 Apache Tomcat의 버전 정보가 외부에 노출될 경우 보안상 위험이 증가하므로, 이를 방지하기 위한 설정 방법을 상세히 설명하고 있습니다.&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://happylie.tistory.com/180?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;온실 속 선인장  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-end=&quot;119&quot; data-start=&quot;116&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;148&quot; data-start=&quot;121&quot; data-ke-size=&quot;size23&quot;&gt;  문제점: Tomcat 버전 정보 노출&lt;/h3&gt;
&lt;p data-end=&quot;224&quot; data-start=&quot;150&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Tomcat을 기본 설정으로 사용할 경우, 다음과 같은 방식으로 버전 정보가 노출될 수 있습니다:&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-end=&quot;384&quot; data-start=&quot;226&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li data-end=&quot;288&quot; data-start=&quot;226&quot;&gt;&lt;b&gt;Response Header&lt;/b&gt;: &lt;span&gt;Server: Apache-Coyote/1.1&lt;/span&gt;&lt;/li&gt;
&lt;li data-end=&quot;384&quot; data-start=&quot;289&quot;&gt;&lt;b&gt;기본 에러 페이지&lt;/b&gt;: &lt;span&gt;&amp;lt;h3&amp;gt;Apache Tomcat/9.0.70&amp;lt;/h3&amp;gt;&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://happylie.tistory.com/180?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;온실 속 선인장  &lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;Inpa Dev  &amp;zwj; &lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-end=&quot;464&quot; data-start=&quot;386&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이러한 정보는 공격자가 특정 버전의 알려진 취약점을 이용하여 시스템을 공격하는 데 활용될 수 있습니다.&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://happylie.tistory.com/180?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;온실 속 선인장  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;hr data-end=&quot;469&quot; data-start=&quot;466&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;496&quot; data-start=&quot;471&quot; data-ke-size=&quot;size23&quot;&gt;  해결 방법: 버전 정보 제거 설정&lt;/h3&gt;
&lt;h4 data-end=&quot;536&quot; data-start=&quot;498&quot; data-ke-size=&quot;size20&quot;&gt;1. &lt;b&gt;Response Header에서 버전 정보 제거&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;616&quot; data-start=&quot;538&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Tomcat의 server.xml 파일에서 &amp;lt;Connector&amp;gt; 태그에 server 속성을 추가하여 서버 정보를 변경합니다:&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://happylie.tistory.com/180?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;온실 속 선인장  &lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&lt;span&gt;LainyZine: Programmer's Guide&lt;/span&gt;&lt;span&gt;+1&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;xml&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;복사&lt;span data-state=&quot;closed&quot;&gt;편집&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;lt;&lt;span&gt;Connector&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;port&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;8080&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;protocol&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;HTTP/1.1&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;connectionTimeout&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;20000&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;redirectPort&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;8443&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;server&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;Web Server&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; /&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;883&quot; data-start=&quot;805&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 설정하면 Response Header의 Server 값이 &quot;Web Server&quot;로 표시되어 실제 Tomcat 버전 정보가 숨겨집니다.&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://happylie.tistory.com/180?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;온실 속 선인장  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-end=&quot;917&quot; data-start=&quot;885&quot; data-ke-size=&quot;size20&quot;&gt;2. &lt;b&gt;기본 에러 페이지에서 버전 정보 제거&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;997&quot; data-start=&quot;919&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;{Tomcat 설치 경로}/lib/org/apache/catalina/util 디렉토리 내의 ServerInfo.properties 파일을 수정하거나 생성하여 다음과 같이 설정합니다:&lt;/span&gt;&lt;span data-state=&quot;closed&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://happylie.tistory.com/180?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;온실 속 선인장  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;properties&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;복사&lt;span data-state=&quot;closed&quot;&gt;편집&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;server.info=Web Server server.number= &lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1175&quot; data-start=&quot;1097&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 설정을 적용하면 기본 에러 페이지에 표시되는 버전 정보가 &quot;Web Server&quot;로 변경됩니다.&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://happylie.tistory.com/180?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;온실 속 선인장  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-end=&quot;1206&quot; data-start=&quot;1177&quot; data-ke-size=&quot;size20&quot;&gt;3. &lt;b&gt;에러 리포트에서 버전 정보 제거&lt;/b&gt;&lt;/h4&gt;
&lt;p data-end=&quot;1286&quot; data-start=&quot;1208&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;server.xml 파일에 다음과 같은 &amp;lt;Valve&amp;gt; 설정을 추가하여 에러 리포트에 서버 정보가 노출되지 않도록 합니다:&lt;/span&gt;&lt;span&gt;&lt;a href=&quot;https://happylie.tistory.com/180?utm_source=chatgpt.com&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;온실 속 선인장  &lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;xml&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;복사&lt;span data-state=&quot;closed&quot;&gt;편집&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span&gt;&lt;span&gt;&lt;span&gt;&amp;lt;&lt;span&gt;Valve&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;className&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;org.apache.catalina.valves.ErrorReportValve&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;showReport&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;false&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; &lt;/span&gt;&lt;span&gt;&lt;span&gt;showServerInfo&lt;/span&gt;&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span&gt;&lt;span&gt;&quot;false&quot;&lt;/span&gt;&lt;/span&gt;&lt;span&gt; /&amp;gt; &lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-end=&quot;1534&quot; data-start=&quot;1456&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이 설정을 통해 에러 리포트에서 상세한 서버 정보와 보고서가 표시되지 않도록 할 수 있습니다.&lt;/span&gt;&lt;/p&gt;
&lt;hr data-end=&quot;1539&quot; data-start=&quot;1536&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-end=&quot;1549&quot; data-start=&quot;1541&quot; data-ke-size=&quot;size23&quot;&gt;✅ 결론&lt;/h3&gt;
&lt;p data-end=&quot;1669&quot; data-start=&quot;1551&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Tomcat의 버전 정보 노출은 보안상 심각한 위협이 될 수 있습니다.&lt;/span&gt; &lt;span&gt;위에서 설명한 설정을 통해 불필요한 정보 노출을 방지하고, 시스템의 보안을 강화하는 것이 중요합니다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-end=&quot;1763&quot; data-start=&quot;1671&quot; data-ke-size=&quot;size16&quot;&gt;자세한 내용은 원문을 참고하시기 바랍니다: &lt;a href=&quot;https://happylie.tistory.com/180&quot;&gt;https://happylie.tistory.com/180&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>study</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/335</guid>
      <comments>https://nizimo.tistory.com/335#entry335comment</comments>
      <pubDate>Fri, 9 May 2025 10:14:33 +0900</pubDate>
    </item>
    <item>
      <title>[eGovFramework]하나의 프로젝트에서 2개의 DB 사용 하기(Postgresql, Tibero DB)</title>
      <link>https://nizimo.tistory.com/334</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #666666; text-align: start;&quot;&gt;&lt;b&gt;&lt;a style=&quot;color: #6bacce;&quot; href=&quot;https://onecutwook.tistory.com/category/WEB/Spring&quot;&gt;WEB/Spring&lt;/a&gt;&lt;/b&gt;
&lt;h3 style=&quot;color: #222222;&quot; data-ke-size=&quot;size23&quot;&gt;[eGovFramework]하나의 프로젝트에서 2개의 DB 사용 하기(Postgresql, Tibero DB)&lt;/h3&gt;
&lt;span style=&quot;color: #a7a7a7;&quot;&gt;우리마&lt;span&gt;&amp;nbsp;&lt;/span&gt;2021. 1. 8. 14:57&lt;/span&gt;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #5c5c5c; text-align: start;&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;썸네일.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnEdEz/btsM4agn5ER/mV7Hmzj8Cm5R0TZ60svZr0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnEdEz/btsM4agn5ER/mV7Hmzj8Cm5R0TZ60svZr0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnEdEz/btsM4agn5ER/mV7Hmzj8Cm5R0TZ60svZr0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnEdEz%2FbtsM4agn5ER%2FmV7Hmzj8Cm5R0TZ60svZr0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;720&quot; data-filename=&quot;썸네일.jpg&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;720&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;안녕하세요. 이번 글에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;eGovFramework3.8 환경에서 두 개의 DBMS를 붙이는 방법&lt;/span&gt;&lt;/u&gt;에 대해서 끄적이려고 해요. 필자는 기존에 Postgresql을 사용하다가 Tibero DB를 붙였어요. 해당 DB의 드라이버는 maven repository에서 가져와서 pom.xml에 추가해주시면 됩니다.&lt;/p&gt;
&lt;figure id=&quot;og_1743460443601&quot; contenteditable=&quot;false&quot; data-og-image=&quot;&quot; data-og-url=&quot;https://mvnrepository.com/&quot; data-og-source-url=&quot;https://mvnrepository.com/&quot; data-og-host=&quot;mvnrepository.com&quot; data-og-description=&quot;Integrations SDK Last Release on Dec 22, 2020&quot; data-og-title=&quot;Maven Repository: Search/Browse/Explore&quot; data-og-type=&quot;website&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://mvnrepository.com/&quot; data-source-url=&quot;https://mvnrepository.com/&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Maven Repository: Search/Browse/Explore&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Integrations SDK Last Release on Dec 22, 2020&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;mvnrepository.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;context-datasource.xml 설정 - Datasource 추가 하기&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;먼저 datasource를 추가해줘야 합니다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;src/main/resource/egovframework/spring 아래에 context-datasource.xml 파일이 있습니다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;1.PNG&quot; data-origin-width=&quot;391&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2KNnK/btsM4dEayKi/MPjpRA7VHDi8ORoj2K0mp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2KNnK/btsM4dEayKi/MPjpRA7VHDi8ORoj2K0mp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2KNnK/btsM4dEayKi/MPjpRA7VHDi8ORoj2K0mp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2KNnK%2FbtsM4dEayKi%2FMPjpRA7VHDi8ORoj2K0mp1%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;391&quot; height=&quot;697&quot; data-filename=&quot;1.PNG&quot; data-origin-width=&quot;391&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
Package Presentaion
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;기존의 Postgresql에 대한 Datasource는 아래와 같습니다.&lt;/p&gt;
&lt;div style=&quot;color: #010101;&quot;&gt;
&lt;table style=&quot;background-color: #fafafa; 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;color: #666666;&quot;&gt;
&lt;div style=&quot;color: #666666; text-align: right;&quot;&gt;
&lt;div&gt;1&lt;/div&gt;
&lt;div&gt;2&lt;/div&gt;
&lt;div&gt;3&lt;/div&gt;
&lt;div&gt;4&lt;/div&gt;
&lt;div&gt;5&lt;/div&gt;
&lt;div&gt;6&lt;/div&gt;
&lt;div&gt;7&lt;/div&gt;
&lt;div&gt;8&lt;/div&gt;
&lt;div&gt;9&lt;/div&gt;
&lt;div&gt;10&lt;/div&gt;
&lt;div&gt;11&lt;/div&gt;
&lt;div&gt;12&lt;/div&gt;
&lt;div&gt;13&lt;/div&gt;
&lt;div&gt;14&lt;/div&gt;
&lt;div&gt;15&lt;/div&gt;
&lt;div&gt;16&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;color: #666666; text-align: left;&quot;&gt;
&lt;div style=&quot;color: #010101;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;egov.propertyConfigurer&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;org.springframework.beans.factory.config.PropertyPlaceholderConfigurer&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;locations&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;classpath:/egovframework/egovProps/globals.properties&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;value&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;list&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;alias&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;dataSource-postgresql&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;alias&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;dataSource&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;JDBC-PostgreSQL&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;dataSource-postgresql&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;org.springframework.jdbc.datasource.DriverManagerDataSource&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;driverClassName&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;${Globals.DriverClassName}&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;${Globals.Url}&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;username&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;${Globals.UserName}&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;${Globals.Password}&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;color: #666666;&quot;&gt;&lt;a style=&quot;color: #ffffff;&quot; href=&quot;http://colorscripter.com/info#e&quot;&gt;&lt;span style=&quot;background-color: #e5e5e5; color: #ffffff;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;여기서 이제 Tibero DB에 대한&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Datasource&lt;/span&gt;를 아래와 같이 추가해 줍니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;물론 globalglobals.properties파일에 추가하고자 하는 DB정보를 추가해줍니다&lt;/span&gt;. 저는 Tibero를 붙여서 사용했습니다.&lt;/p&gt;
&lt;div style=&quot;color: #010101;&quot;&gt;
&lt;table style=&quot;background-color: #fafafa; 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;color: #666666;&quot;&gt;
&lt;div style=&quot;color: #666666; text-align: right;&quot;&gt;
&lt;div&gt;1&lt;/div&gt;
&lt;div&gt;2&lt;/div&gt;
&lt;div&gt;3&lt;/div&gt;
&lt;div&gt;4&lt;/div&gt;
&lt;div&gt;5&lt;/div&gt;
&lt;div&gt;6&lt;/div&gt;
&lt;div&gt;7&lt;/div&gt;
&lt;div&gt;8&lt;/div&gt;
&lt;div&gt;9&lt;/div&gt;
&lt;div&gt;10&lt;/div&gt;
&lt;div&gt;11&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;color: #666666; text-align: left;&quot;&gt;
&lt;div style=&quot;color: #010101;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;alias&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;dataSource-tibero&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;alias&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;tibero.dataSource&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;tibero&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;dataSource-tibero&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;org.apache.commons.dbcp.BasicDataSource&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;destroy-method&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;close&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;driverClassName&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;${Globals.Tibero.DriverClassName}&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;url&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;${Globals.Tibero.Url}&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;username&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;${Globals.Tibero.UserName}&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;password&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;${Globals.Tibero.Password}&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;validationQuery&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;select&amp;nbsp;1&amp;nbsp;from&amp;nbsp;dual&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;testWhileIdle&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;true&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;timeBetweenEvictionRunsMillis&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;60000&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;color: #666666;&quot;&gt;&lt;a style=&quot;color: #ffffff;&quot; href=&quot;http://colorscripter.com/info#e&quot;&gt;&lt;span style=&quot;background-color: #e5e5e5; color: #ffffff;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;context-mapper.xml 설정 - SqlSessionFactoryBean, SqlSessionTemplate 추가&amp;nbsp;&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;파일의 위치는 위의 context-datasource.xml의 위치와 같습니다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;위의 Package Presentaion사진을 참고하세요.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;기존의 postgresql의 sqlsession bean 설정은 아래와 같습니다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;postgresql을 사용하는 쿼리 문은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;mapperLocations&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;&lt;span&gt;=&lt;/span&gt;&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;classpath:/egovframework/sqlmap/mappers/**/*.xml&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;여기에 작성되어 있습니다.&amp;nbsp;&lt;/u&gt;&lt;/p&gt;
&lt;div style=&quot;color: #010101;&quot;&gt;
&lt;table style=&quot;background-color: #fafafa; 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;color: #666666;&quot;&gt;
&lt;div style=&quot;color: #666666; text-align: right;&quot;&gt;
&lt;div&gt;1&lt;/div&gt;
&lt;div&gt;2&lt;/div&gt;
&lt;div&gt;3&lt;/div&gt;
&lt;div&gt;4&lt;/div&gt;
&lt;div&gt;5&lt;/div&gt;
&lt;div&gt;6&lt;/div&gt;
&lt;div&gt;7&lt;/div&gt;
&lt;div&gt;8&lt;/div&gt;
&lt;div&gt;9&lt;/div&gt;
&lt;div&gt;10&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;color: #666666; text-align: left;&quot;&gt;
&lt;div style=&quot;color: #010101;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;SqlSession&amp;nbsp;setup&amp;nbsp;for&amp;nbsp;MyBatis&amp;nbsp;Database&amp;nbsp;Layer&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;sqlSession&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;org.mybatis.spring.SqlSessionFactoryBean&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;dataSource&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;ref&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;dataSource&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;configLocation&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;classpath:/egovframework/sqlmap/config/sql-mapper-config.xml&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;mapperLocations&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;classpath:/egovframework/sqlmap/mappers/**/*.xml&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;sqlSessionTemplate&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;org.mybatis.spring.SqlSessionTemplate&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;constructor-arg&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;index&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;ref&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;sqlSession&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;color: #666666;&quot;&gt;&lt;a style=&quot;color: #ffffff;&quot; href=&quot;http://colorscripter.com/info#e&quot;&gt;&lt;span style=&quot;background-color: #e5e5e5; color: #ffffff;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;여기에 추가하고자 하는 DB(저는 Tibero DB)의 sqlsession id를 새로 하나 지정해서 bean등록을 아래와 같이 추가합니다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;저는 sqlSession2, sqlSessionTemplate2라고 지정했습니다.&lt;/p&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Tibero DB를 사용하는 쿼리문을 작성할 디렉터리를 하나 새로 만들어서 mapperLocations의 value에 경로를 적습니다.&lt;/span&gt;&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(&lt;span style=&quot;color: #333333;&quot;&gt;Package Presentaion사진을 참고)&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;와일드카드 문자는 원하시는 것을 사용해도 됩니다.&lt;/p&gt;
&lt;div style=&quot;color: #010101;&quot;&gt;
&lt;table style=&quot;background-color: #fafafa; 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;color: #666666;&quot;&gt;
&lt;div style=&quot;color: #666666; text-align: right;&quot;&gt;
&lt;div&gt;1&lt;/div&gt;
&lt;div&gt;2&lt;/div&gt;
&lt;div&gt;3&lt;/div&gt;
&lt;div&gt;4&lt;/div&gt;
&lt;div&gt;5&lt;/div&gt;
&lt;div&gt;6&lt;/div&gt;
&lt;div&gt;7&lt;/div&gt;
&lt;div&gt;8&lt;/div&gt;
&lt;div&gt;9&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;color: #666666; text-align: left;&quot;&gt;
&lt;div style=&quot;color: #010101;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;lt;!--&amp;nbsp;Tibero&amp;nbsp;SqlSession&amp;nbsp;--&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;sqlSession2&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;org.mybatis.spring.SqlSessionFactoryBean&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;dataSource&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;ref&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;tibero.dataSource&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;property&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;name&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;mapperLocations&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;value&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;classpath:/egovframework/sqlmap/mappers/disaster/tibero/*.xml&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;id&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;sqlSessionTemplate2&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;class&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;org.mybatis.spring.SqlSessionTemplate&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;constructor-arg&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;index&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;0&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0a9989;&quot;&gt;ref&lt;/span&gt;=&lt;span style=&quot;color: #df5000;&quot;&gt;&quot;sqlSession2&quot;&lt;/span&gt;&lt;span style=&quot;color: #0a9989;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;/&lt;/span&gt;&lt;span style=&quot;color: #066de2;&quot;&gt;bean&lt;/span&gt;&lt;span style=&quot;color: #010101;&quot;&gt;&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;color: #666666;&quot;&gt;&lt;a style=&quot;color: #ffffff;&quot; href=&quot;http://colorscripter.com/info#e&quot;&gt;&lt;span style=&quot;background-color: #e5e5e5; color: #ffffff;&quot;&gt;cs&lt;/span&gt;&lt;/a&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;b&gt;&amp;nbsp;AbstractDAO class 추가&lt;/b&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;u&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;이전까지는&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;egovframework.com.cmm.service.impl&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;패키지의 EgovComAbstractDAO를 사용해서 쿼리문을 동작시켰을 겁니다. 추가할 DB에는 새로운 Abstract Calss를 추가하여 추가할 DB 전용 추상 클래스를 만들어줍니다.&lt;/span&gt;&lt;/u&gt;&lt;/p&gt;
&lt;div style=&quot;color: #010101;&quot;&gt;
&lt;table style=&quot;background-color: #fafafa; 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;color: #666666;&quot;&gt;
&lt;div style=&quot;color: #666666; text-align: right;&quot;&gt;
&lt;div&gt;1&lt;/div&gt;
&lt;div&gt;2&lt;/div&gt;
&lt;div&gt;3&lt;/div&gt;
&lt;div&gt;4&lt;/div&gt;
&lt;div&gt;5&lt;/div&gt;
&lt;div&gt;6&lt;/div&gt;
&lt;div&gt;7&lt;/div&gt;
&lt;div&gt;8&lt;/div&gt;
&lt;div&gt;9&lt;/div&gt;
&lt;div&gt;10&lt;/div&gt;
&lt;div&gt;11&lt;/div&gt;
&lt;div&gt;12&lt;/div&gt;
&lt;div&gt;13&lt;/div&gt;
&lt;div&gt;14&lt;/div&gt;
&lt;div&gt;15&lt;/div&gt;
&lt;div&gt;16&lt;/div&gt;
&lt;div&gt;17&lt;/div&gt;
&lt;div&gt;18&lt;/div&gt;
&lt;div&gt;19&lt;/div&gt;
&lt;div&gt;20&lt;/div&gt;
&lt;div&gt;21&lt;/div&gt;
&lt;div&gt;22&lt;/div&gt;
&lt;div&gt;23&lt;/div&gt;
&lt;div&gt;24&lt;/div&gt;
&lt;div&gt;25&lt;/div&gt;
&lt;div&gt;26&lt;/div&gt;
&lt;div&gt;27&lt;/div&gt;
&lt;div&gt;28&lt;/div&gt;
&lt;div&gt;29&lt;/div&gt;
&lt;div&gt;30&lt;/div&gt;
&lt;div&gt;31&lt;/div&gt;
&lt;div&gt;32&lt;/div&gt;
&lt;div&gt;33&lt;/div&gt;
&lt;div&gt;34&lt;/div&gt;
&lt;div&gt;35&lt;/div&gt;
&lt;div&gt;36&lt;/div&gt;
&lt;div&gt;37&lt;/div&gt;
&lt;div&gt;38&lt;/div&gt;
&lt;div&gt;39&lt;/div&gt;
&lt;div&gt;40&lt;/div&gt;
&lt;div&gt;41&lt;/div&gt;
&lt;div&gt;42&lt;/div&gt;
&lt;div&gt;43&lt;/div&gt;
&lt;div&gt;44&lt;/div&gt;
&lt;div&gt;45&lt;/div&gt;
&lt;div&gt;46&lt;/div&gt;
&lt;div&gt;47&lt;/div&gt;
&lt;div&gt;48&lt;/div&gt;
&lt;div&gt;49&lt;/div&gt;
&lt;div&gt;50&lt;/div&gt;
&lt;div&gt;51&lt;/div&gt;
&lt;div&gt;52&lt;/div&gt;
&lt;div&gt;53&lt;/div&gt;
&lt;div&gt;54&lt;/div&gt;
&lt;div&gt;55&lt;/div&gt;
&lt;div&gt;56&lt;/div&gt;
&lt;div&gt;57&lt;/div&gt;
&lt;div&gt;58&lt;/div&gt;
&lt;div&gt;59&lt;/div&gt;
&lt;div&gt;60&lt;/div&gt;
&lt;div&gt;61&lt;/div&gt;
&lt;div&gt;62&lt;/div&gt;
&lt;div&gt;63&lt;/div&gt;
&lt;div&gt;64&lt;/div&gt;
&lt;div&gt;65&lt;/div&gt;
&lt;div&gt;66&lt;/div&gt;
&lt;div&gt;67&lt;/div&gt;
&lt;div&gt;68&lt;/div&gt;
&lt;div&gt;69&lt;/div&gt;
&lt;div&gt;70&lt;/div&gt;
&lt;div&gt;71&lt;/div&gt;
&lt;div&gt;72&lt;/div&gt;
&lt;div&gt;73&lt;/div&gt;
&lt;div&gt;74&lt;/div&gt;
&lt;div&gt;75&lt;/div&gt;
&lt;div&gt;76&lt;/div&gt;
&lt;div&gt;77&lt;/div&gt;
&lt;div&gt;78&lt;/div&gt;
&lt;div&gt;79&lt;/div&gt;
&lt;div&gt;80&lt;/div&gt;
&lt;div&gt;81&lt;/div&gt;
&lt;div&gt;82&lt;/div&gt;
&lt;div&gt;83&lt;/div&gt;
&lt;div&gt;84&lt;/div&gt;
&lt;div&gt;85&lt;/div&gt;
&lt;div&gt;86&lt;/div&gt;
&lt;div&gt;87&lt;/div&gt;
&lt;div&gt;88&lt;/div&gt;
&lt;div&gt;89&lt;/div&gt;
&lt;div&gt;90&lt;/div&gt;
&lt;div&gt;91&lt;/div&gt;
&lt;div&gt;92&lt;/div&gt;
&lt;div&gt;93&lt;/div&gt;
&lt;div&gt;94&lt;/div&gt;
&lt;div&gt;95&lt;/div&gt;
&lt;div&gt;96&lt;/div&gt;
&lt;div&gt;97&lt;/div&gt;
&lt;div&gt;98&lt;/div&gt;
&lt;div&gt;99&lt;/div&gt;
&lt;div&gt;100&lt;/div&gt;
&lt;div&gt;101&lt;/div&gt;
&lt;div&gt;102&lt;/div&gt;
&lt;div&gt;103&lt;/div&gt;
&lt;div&gt;104&lt;/div&gt;
&lt;div&gt;105&lt;/div&gt;
&lt;div&gt;106&lt;/div&gt;
&lt;div&gt;107&lt;/div&gt;
&lt;div&gt;108&lt;/div&gt;
&lt;div&gt;109&lt;/div&gt;
&lt;div&gt;110&lt;/div&gt;
&lt;div&gt;111&lt;/div&gt;
&lt;div&gt;112&lt;/div&gt;
&lt;div&gt;113&lt;/div&gt;
&lt;div&gt;114&lt;/div&gt;
&lt;div&gt;115&lt;/div&gt;
&lt;div&gt;116&lt;/div&gt;
&lt;div&gt;117&lt;/div&gt;
&lt;div&gt;118&lt;/div&gt;
&lt;div&gt;119&lt;/div&gt;
&lt;div&gt;120&lt;/div&gt;
&lt;div&gt;121&lt;/div&gt;
&lt;div&gt;122&lt;/div&gt;
&lt;div&gt;123&lt;/div&gt;
&lt;div&gt;124&lt;/div&gt;
&lt;div&gt;125&lt;/div&gt;
&lt;div&gt;126&lt;/div&gt;
&lt;div&gt;127&lt;/div&gt;
&lt;div&gt;128&lt;/div&gt;
&lt;div&gt;129&lt;/div&gt;
&lt;div&gt;130&lt;/div&gt;
&lt;div&gt;131&lt;/div&gt;
&lt;div&gt;132&lt;/div&gt;
&lt;div&gt;133&lt;/div&gt;
&lt;div&gt;134&lt;/div&gt;
&lt;div&gt;135&lt;/div&gt;
&lt;div&gt;136&lt;/div&gt;
&lt;div&gt;137&lt;/div&gt;
&lt;div&gt;138&lt;/div&gt;
&lt;div&gt;139&lt;/div&gt;
&lt;div&gt;140&lt;/div&gt;
&lt;div&gt;141&lt;/div&gt;
&lt;div&gt;142&lt;/div&gt;
&lt;div&gt;143&lt;/div&gt;
&lt;div&gt;144&lt;/div&gt;
&lt;div&gt;145&lt;/div&gt;
&lt;div&gt;146&lt;/div&gt;
&lt;div&gt;147&lt;/div&gt;
&lt;div&gt;148&lt;/div&gt;
&lt;div&gt;149&lt;/div&gt;
&lt;div&gt;150&lt;/div&gt;
&lt;div&gt;151&lt;/div&gt;
&lt;div&gt;152&lt;/div&gt;
&lt;div&gt;153&lt;/div&gt;
&lt;div&gt;154&lt;/div&gt;
&lt;div&gt;155&lt;/div&gt;
&lt;div&gt;156&lt;/div&gt;
&lt;div&gt;157&lt;/div&gt;
&lt;div&gt;158&lt;/div&gt;
&lt;div&gt;159&lt;/div&gt;
&lt;div&gt;160&lt;/div&gt;
&lt;div&gt;161&lt;/div&gt;
&lt;div&gt;162&lt;/div&gt;
&lt;div&gt;163&lt;/div&gt;
&lt;div&gt;164&lt;/div&gt;
&lt;div&gt;165&lt;/div&gt;
&lt;div&gt;166&lt;/div&gt;
&lt;div&gt;167&lt;/div&gt;
&lt;div&gt;168&lt;/div&gt;
&lt;div&gt;169&lt;/div&gt;
&lt;div&gt;170&lt;/div&gt;
&lt;div&gt;171&lt;/div&gt;
&lt;div&gt;172&lt;/div&gt;
&lt;div&gt;173&lt;/div&gt;
&lt;div&gt;174&lt;/div&gt;
&lt;div&gt;175&lt;/div&gt;
&lt;div&gt;176&lt;/div&gt;
&lt;div&gt;177&lt;/div&gt;
&lt;div&gt;178&lt;/div&gt;
&lt;div&gt;179&lt;/div&gt;
&lt;div&gt;180&lt;/div&gt;
&lt;div&gt;181&lt;/div&gt;
&lt;div&gt;182&lt;/div&gt;
&lt;div&gt;183&lt;/div&gt;
&lt;div&gt;184&lt;/div&gt;
&lt;div&gt;185&lt;/div&gt;
&lt;div&gt;186&lt;/div&gt;
&lt;div&gt;187&lt;/div&gt;
&lt;div&gt;188&lt;/div&gt;
&lt;div&gt;189&lt;/div&gt;
&lt;div&gt;190&lt;/div&gt;
&lt;div&gt;191&lt;/div&gt;
&lt;div&gt;192&lt;/div&gt;
&lt;div&gt;193&lt;/div&gt;
&lt;div&gt;194&lt;/div&gt;
&lt;div&gt;195&lt;/div&gt;
&lt;div&gt;196&lt;/div&gt;
&lt;div&gt;197&lt;/div&gt;
&lt;div&gt;198&lt;/div&gt;
&lt;div&gt;199&lt;/div&gt;
&lt;div&gt;200&lt;/div&gt;
&lt;div&gt;201&lt;/div&gt;
&lt;div&gt;202&lt;/div&gt;
&lt;div&gt;203&lt;/div&gt;
&lt;div&gt;204&lt;/div&gt;
&lt;div&gt;205&lt;/div&gt;
&lt;div&gt;206&lt;/div&gt;
&lt;div&gt;207&lt;/div&gt;
&lt;div&gt;208&lt;/div&gt;
&lt;div&gt;209&lt;/div&gt;
&lt;div&gt;210&lt;/div&gt;
&lt;div&gt;211&lt;/div&gt;
&lt;div&gt;212&lt;/div&gt;
&lt;div&gt;213&lt;/div&gt;
&lt;div&gt;214&lt;/div&gt;
&lt;div&gt;215&lt;/div&gt;
&lt;div&gt;216&lt;/div&gt;
&lt;div&gt;217&lt;/div&gt;
&lt;div&gt;218&lt;/div&gt;
&lt;div&gt;219&lt;/div&gt;
&lt;div&gt;220&lt;/div&gt;
&lt;div&gt;221&lt;/div&gt;
&lt;div&gt;222&lt;/div&gt;
&lt;div&gt;223&lt;/div&gt;
&lt;div&gt;224&lt;/div&gt;
&lt;div&gt;225&lt;/div&gt;
&lt;div&gt;226&lt;/div&gt;
&lt;div&gt;227&lt;/div&gt;
&lt;div&gt;228&lt;/div&gt;
&lt;div&gt;229&lt;/div&gt;
&lt;div&gt;230&lt;/div&gt;
&lt;div&gt;231&lt;/div&gt;
&lt;div&gt;232&lt;/div&gt;
&lt;div&gt;233&lt;/div&gt;
&lt;div&gt;234&lt;/div&gt;
&lt;div&gt;235&lt;/div&gt;
&lt;div&gt;236&lt;/div&gt;
&lt;div&gt;237&lt;/div&gt;
&lt;div&gt;238&lt;/div&gt;
&lt;div&gt;239&lt;/div&gt;
&lt;div&gt;240&lt;/div&gt;
&lt;div&gt;241&lt;/div&gt;
&lt;div&gt;242&lt;/div&gt;
&lt;div&gt;243&lt;/div&gt;
&lt;div&gt;244&lt;/div&gt;
&lt;div&gt;245&lt;/div&gt;
&lt;div&gt;246&lt;/div&gt;
&lt;div&gt;247&lt;/div&gt;
&lt;div&gt;248&lt;/div&gt;
&lt;div&gt;249&lt;/div&gt;
&lt;div&gt;250&lt;/div&gt;
&lt;div&gt;251&lt;/div&gt;
&lt;div&gt;252&lt;/div&gt;
&lt;div&gt;253&lt;/div&gt;
&lt;div&gt;254&lt;/div&gt;
&lt;div&gt;255&lt;/div&gt;
&lt;div&gt;256&lt;/div&gt;
&lt;div&gt;257&lt;/div&gt;
&lt;div&gt;258&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;td style=&quot;color: #666666; text-align: left;&quot;&gt;
&lt;div style=&quot;color: #010101;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;/*&amp;nbsp;TiberoAbstractDAO&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;package&lt;/span&gt;&amp;nbsp;egovframework.wini.disaster.service.impl;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.List;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;import&lt;/span&gt;&amp;nbsp;java.util.Map;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;import&lt;/span&gt;&amp;nbsp;javax.annotation.Resource;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.apache.ibatis.session.ResultHandler;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.apache.ibatis.session.RowBounds;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.apache.ibatis.session.SqlSessionFactory;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;import&lt;/span&gt;&amp;nbsp;org.mybatis.spring.support.SqlSessionDaoSupport;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;abstract&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;class&lt;/span&gt;&amp;nbsp;TiberoAbstractDAO&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;extends&lt;/span&gt;&amp;nbsp;SqlSessionDaoSupport{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;Annotation&amp;nbsp;형식으로&amp;nbsp;sqlSession(SqlSessionFactoryBean)을&amp;nbsp;받아와&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;이를&amp;nbsp;super(SqlSessionDaoSupport)의&amp;nbsp;setSqlSessionFactory&amp;nbsp;메서드를&amp;nbsp;호출하여&amp;nbsp;설정해&amp;nbsp;준다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;lt;p&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;SqlSessionTemplate이&amp;nbsp;지정된&amp;nbsp;경우된&amp;nbsp;경우&amp;nbsp;이&amp;nbsp;SqlSessionFactory가&amp;nbsp;무시된다.&amp;nbsp;(Batch&amp;nbsp;처리를&amp;nbsp;위해서는&amp;nbsp;SqlSessionTemplate가&amp;nbsp;필요)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;&amp;lt;/p&amp;gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;sqlSession&amp;nbsp;SqlSessionFactory로&amp;nbsp;MyBatis와의&amp;nbsp;연계를&amp;nbsp;위한&amp;nbsp;기본&amp;nbsp;클래스&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Resource(name&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #63a35c;&quot;&gt;&quot;sqlSession2&quot;&lt;/span&gt;)&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;void&lt;/span&gt;&amp;nbsp;setSqlSessionFactory(SqlSessionFactory&amp;nbsp;sqlSession)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;super&lt;/span&gt;.setSqlSessionFactory(sqlSession);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;입력&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;을&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;&amp;nbsp;입력&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;DBMS가&amp;nbsp;지원하는&amp;nbsp;경우&amp;nbsp;insert&amp;nbsp;적용&amp;nbsp;결과&amp;nbsp;count&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;int&lt;/span&gt;&amp;nbsp;insert(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().insert(queryId);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;입력&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;을&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;&amp;nbsp;입력&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;parameterObject&amp;nbsp;-&amp;nbsp;입력&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;입력&amp;nbsp;데이터를&amp;nbsp;세팅한&amp;nbsp;파라메터&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;DBMS가&amp;nbsp;지원하는&amp;nbsp;경우&amp;nbsp;insert&amp;nbsp;적용&amp;nbsp;결과&amp;nbsp;count&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;int&lt;/span&gt;&amp;nbsp;insert(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId,&amp;nbsp;Object&amp;nbsp;parameterObject)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().insert(queryId,&amp;nbsp;parameterObject);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;수정&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;을&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;수정&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;DBMS가&amp;nbsp;지원하는&amp;nbsp;경우&amp;nbsp;update&amp;nbsp;적용&amp;nbsp;결과&amp;nbsp;count&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;int&lt;/span&gt;&amp;nbsp;update(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().update(queryId);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;수정&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;을&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;수정&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;parameterObject&amp;nbsp;-&amp;nbsp;수정&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;입력&amp;nbsp;데이터(key&amp;nbsp;조건&amp;nbsp;및&amp;nbsp;변경&amp;nbsp;데이터)를&amp;nbsp;세팅한&amp;nbsp;파라메터&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;DBMS가&amp;nbsp;지원하는&amp;nbsp;경우&amp;nbsp;update&amp;nbsp;적용&amp;nbsp;결과&amp;nbsp;count&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;int&lt;/span&gt;&amp;nbsp;update(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId,&amp;nbsp;Object&amp;nbsp;parameterObject)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().update(queryId,&amp;nbsp;parameterObject);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;삭제&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;을&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;삭제&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;DBMS가&amp;nbsp;지원하는&amp;nbsp;경우&amp;nbsp;delete&amp;nbsp;적용&amp;nbsp;결과&amp;nbsp;count&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;int&lt;/span&gt;&amp;nbsp;delete(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().delete(queryId);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;삭제&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;을&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;삭제&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;parameterObject&amp;nbsp;-&amp;nbsp;삭제&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;입력&amp;nbsp;데이터(일반적으로&amp;nbsp;key&amp;nbsp;조건)를&amp;nbsp;&amp;nbsp;세팅한&amp;nbsp;파라메터&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;DBMS가&amp;nbsp;지원하는&amp;nbsp;경우&amp;nbsp;delete&amp;nbsp;적용&amp;nbsp;결과&amp;nbsp;count&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;int&lt;/span&gt;&amp;nbsp;delete(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId,&amp;nbsp;Object&amp;nbsp;parameterObject)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().delete(queryId,&amp;nbsp;parameterObject);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//CHECKSTYLE:OFF&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;명명규칙에&amp;nbsp;맞춰&amp;nbsp;selectOne()로&amp;nbsp;변경한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@deprecated&amp;nbsp;select()&amp;nbsp;메소드로&amp;nbsp;대체&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@see&amp;nbsp;EgovAbstractMapper.selectOne()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//CHECKSTYLE:ON&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Deprecated&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;Object&amp;nbsp;selectByPk(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId,&amp;nbsp;Object&amp;nbsp;parameterObject)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().selectOne(queryId,&amp;nbsp;parameterObject);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;단건조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;을&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;단건&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;결과&amp;nbsp;객체&amp;nbsp;-&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;파일에서&amp;nbsp;지정한&amp;nbsp;resultType/resultMap&amp;nbsp;에&amp;nbsp;의한&amp;nbsp;단일&amp;nbsp;결과&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;T&amp;nbsp;selectOne(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().selectOne(queryId);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;단건조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;을&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;단건&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;parameterObject&amp;nbsp;-&amp;nbsp;단건&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;입력&amp;nbsp;데이터(key)를&amp;nbsp;세팅한&amp;nbsp;파라메터&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;결과&amp;nbsp;객체&amp;nbsp;-&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;파일에서&amp;nbsp;지정한&amp;nbsp;resultType/resultMap&amp;nbsp;에&amp;nbsp;의한&amp;nbsp;단일&amp;nbsp;결과&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;T&amp;nbsp;selectOne(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId,&amp;nbsp;Object&amp;nbsp;parameterObject)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().selectOne(queryId,&amp;nbsp;parameterObject);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;결과&amp;nbsp;목록을&amp;nbsp;Map&amp;nbsp;을&amp;nbsp;변환한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;모든&amp;nbsp;구문이&amp;nbsp;파라미터를&amp;nbsp;필요로&amp;nbsp;하지는&amp;nbsp;않기&amp;nbsp;때문에,&amp;nbsp;파라미터&amp;nbsp;객체를&amp;nbsp;요구하지&amp;nbsp;않는&amp;nbsp;형태로&amp;nbsp;오버로드되었다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;단건&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;mapKey&amp;nbsp;-&amp;nbsp;결과&amp;nbsp;객체의&amp;nbsp;프로퍼티&amp;nbsp;중&amp;nbsp;하나를&amp;nbsp;키로&amp;nbsp;사용&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;결과&amp;nbsp;객체&amp;nbsp;-&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;파일에서&amp;nbsp;지정한&amp;nbsp;resultType/resultMap&amp;nbsp;에&amp;nbsp;의한&amp;nbsp;단일&amp;nbsp;결과&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)의&amp;nbsp;Map&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;K,&amp;nbsp;V&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;Map&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;K,&amp;nbsp;V&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;selectMap(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId,&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;mapKey)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().selectMap(queryId,&amp;nbsp;mapKey);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;결과&amp;nbsp;목록을&amp;nbsp;Map&amp;nbsp;을&amp;nbsp;변환한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;모든&amp;nbsp;구문이&amp;nbsp;파라미터를&amp;nbsp;필요로&amp;nbsp;하지는&amp;nbsp;않기&amp;nbsp;때문에,&amp;nbsp;파라미터&amp;nbsp;객체를&amp;nbsp;요구하지&amp;nbsp;않는&amp;nbsp;형태로&amp;nbsp;오버로드되었다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;단건&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;parameterObject&amp;nbsp;-&amp;nbsp;맵&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;입력&amp;nbsp;데이터(조회&amp;nbsp;조건)를&amp;nbsp;세팅한&amp;nbsp;파라메터&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;mapKey&amp;nbsp;-&amp;nbsp;결과&amp;nbsp;객체의&amp;nbsp;프로퍼티&amp;nbsp;중&amp;nbsp;하나를&amp;nbsp;키로&amp;nbsp;사용&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;결과&amp;nbsp;객체&amp;nbsp;-&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;파일에서&amp;nbsp;지정한&amp;nbsp;resultType/resultMap&amp;nbsp;에&amp;nbsp;의한&amp;nbsp;단일&amp;nbsp;결과&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)의&amp;nbsp;Map&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;K,&amp;nbsp;V&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;Map&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;K,&amp;nbsp;V&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;selectMap(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId,&amp;nbsp;Object&amp;nbsp;parameterObject,&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;mapKey)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().selectMap(queryId,&amp;nbsp;parameterObject,&amp;nbsp;mapKey);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;결과&amp;nbsp;목록을&amp;nbsp;Map&amp;nbsp;을&amp;nbsp;변환한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;모든&amp;nbsp;구문이&amp;nbsp;파라미터를&amp;nbsp;필요로&amp;nbsp;하지는&amp;nbsp;않기&amp;nbsp;때문에,&amp;nbsp;파라미터&amp;nbsp;객체를&amp;nbsp;요구하지&amp;nbsp;않는&amp;nbsp;형태로&amp;nbsp;오버로드되었다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;단건&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;parameterObject&amp;nbsp;-&amp;nbsp;맵&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;입력&amp;nbsp;데이터(조회&amp;nbsp;조건)를&amp;nbsp;세팅한&amp;nbsp;파라메터&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;mapKey&amp;nbsp;-&amp;nbsp;결과&amp;nbsp;객체의&amp;nbsp;프로퍼티&amp;nbsp;중&amp;nbsp;하나를&amp;nbsp;키로&amp;nbsp;사용&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;rowBounds&amp;nbsp;-&amp;nbsp;특정&amp;nbsp;개수&amp;nbsp;만큼의&amp;nbsp;레코드를&amp;nbsp;건너띄게&amp;nbsp;함&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;결과&amp;nbsp;객체&amp;nbsp;-&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;파일에서&amp;nbsp;지정한&amp;nbsp;resultType/resultMap&amp;nbsp;에&amp;nbsp;의한&amp;nbsp;단일&amp;nbsp;결과&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)의&amp;nbsp;Map&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;K,&amp;nbsp;V&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;Map&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;K,&amp;nbsp;V&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;selectMap(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId,&amp;nbsp;Object&amp;nbsp;parameterObject,&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;mapKey,&amp;nbsp;RowBounds&amp;nbsp;rowBounds)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().selectMap(queryId,&amp;nbsp;parameterObject,&amp;nbsp;mapKey,&amp;nbsp;rowBounds);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//CHECKSTYLE:OFF&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;명명규칙에&amp;nbsp;맞춰&amp;nbsp;selectList()로&amp;nbsp;변경한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@see&amp;nbsp;EgovAbstractMapper.selectList()&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@deprecated&amp;nbsp;List&amp;lt;?&amp;gt;&amp;nbsp;메소드로&amp;nbsp;대체&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//CHECKSTYLE:ON&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;@Deprecated&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;?&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;list(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId,&amp;nbsp;Object&amp;nbsp;parameterObject)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().selectList(queryId,&amp;nbsp;parameterObject);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;리스트&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;을&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;리스트&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;결과&amp;nbsp;List&amp;nbsp;객체&amp;nbsp;-&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;파일에서&amp;nbsp;지정한&amp;nbsp;&amp;nbsp;resultType/resultMap&amp;nbsp;에&amp;nbsp;의한&amp;nbsp;결과&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)의&amp;nbsp;List&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;E&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;E&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;selectList(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().selectList(queryId);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;리스트&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;을&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;리스트&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;parameterObject&amp;nbsp;-&amp;nbsp;리스트&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;입력&amp;nbsp;데이터(조회&amp;nbsp;조건)를&amp;nbsp;세팅한&amp;nbsp;파라메터&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;결과&amp;nbsp;List&amp;nbsp;객체&amp;nbsp;-&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;파일에서&amp;nbsp;지정한&amp;nbsp;&amp;nbsp;resultType/resultMap&amp;nbsp;에&amp;nbsp;의한&amp;nbsp;결과&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)의&amp;nbsp;List&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;E&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;E&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;selectList(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId,&amp;nbsp;Object&amp;nbsp;parameterObject)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().selectList(queryId,&amp;nbsp;parameterObject);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;리스트&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;을&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;리스트&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;parameterObject&amp;nbsp;-&amp;nbsp;리스트&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;입력&amp;nbsp;데이터(조회&amp;nbsp;조건)를&amp;nbsp;세팅한&amp;nbsp;파라메터&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;rowBounds&amp;nbsp;-&amp;nbsp;특정&amp;nbsp;개수&amp;nbsp;만큼의&amp;nbsp;레코드를&amp;nbsp;건너띄게&amp;nbsp;함&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;결과&amp;nbsp;List&amp;nbsp;객체&amp;nbsp;-&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;파일에서&amp;nbsp;지정한&amp;nbsp;&amp;nbsp;resultType/resultMap&amp;nbsp;에&amp;nbsp;의한&amp;nbsp;결과&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)의&amp;nbsp;List&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;E&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;E&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;selectList(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId,&amp;nbsp;Object&amp;nbsp;parameterObject,&amp;nbsp;RowBounds&amp;nbsp;rowBounds)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().selectList(queryId,&amp;nbsp;parameterObject,&amp;nbsp;rowBounds);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;부분&amp;nbsp;범위&amp;nbsp;리스트&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;을&amp;nbsp;실행한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;(부분&amp;nbsp;범위&amp;nbsp;-&amp;nbsp;pageIndex&amp;nbsp;와&amp;nbsp;pageSize&amp;nbsp;기반으로&amp;nbsp;현재&amp;nbsp;부분&amp;nbsp;범위&amp;nbsp;조회를&amp;nbsp;위한&amp;nbsp;skipResults,&amp;nbsp;maxResults&amp;nbsp;를&amp;nbsp;계산하여&amp;nbsp;ibatis&amp;nbsp;호출)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;리스트&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;parameterObject&amp;nbsp;-&amp;nbsp;리스트&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;입력&amp;nbsp;데이터(조회&amp;nbsp;조건)를&amp;nbsp;세팅한&amp;nbsp;파라메터&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;pageIndex&amp;nbsp;-&amp;nbsp;현재&amp;nbsp;페이지&amp;nbsp;번호&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;pageSize&amp;nbsp;-&amp;nbsp;한&amp;nbsp;페이지&amp;nbsp;조회&amp;nbsp;수(pageSize)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@return&amp;nbsp;부분&amp;nbsp;범위&amp;nbsp;결과&amp;nbsp;List&amp;nbsp;객체&amp;nbsp;-&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;파일에서&amp;nbsp;지정한&amp;nbsp;resultType/resultMap&amp;nbsp;에&amp;nbsp;의한&amp;nbsp;부분&amp;nbsp;범위&amp;nbsp;결과&amp;nbsp;객체(보통&amp;nbsp;VO&amp;nbsp;또는&amp;nbsp;Map)&amp;nbsp;List&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*/&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;public&lt;/span&gt;&amp;nbsp;List&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;lt;&lt;/span&gt;?&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;&amp;gt;&lt;/span&gt;&amp;nbsp;listWithPaging(&lt;span style=&quot;color: #066de2;&quot;&gt;String&lt;/span&gt;&amp;nbsp;queryId,&amp;nbsp;Object&amp;nbsp;parameterObject,&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;int&lt;/span&gt;&amp;nbsp;pageIndex,&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;int&lt;/span&gt;&amp;nbsp;pageSize)&amp;nbsp;{&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #066de2;&quot;&gt;int&lt;/span&gt;&amp;nbsp;skipResults&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;=&lt;/span&gt;&amp;nbsp;pageIndex&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;*&lt;/span&gt;&amp;nbsp;pageSize;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;//int&amp;nbsp;maxResults&amp;nbsp;=&amp;nbsp;(pageIndex&amp;nbsp;*&amp;nbsp;pageSize)&amp;nbsp;+&amp;nbsp;pageSize;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;RowBounds&amp;nbsp;rowBounds&amp;nbsp;&lt;span style=&quot;color: #0086b3;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;color: #a71d5d;&quot;&gt;=&lt;/span&gt;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;new&lt;/span&gt;&amp;nbsp;RowBounds(skipResults,&amp;nbsp;pageSize);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #a71d5d;&quot;&gt;return&lt;/span&gt;&amp;nbsp;getSqlSession().selectList(queryId,&amp;nbsp;parameterObject,&amp;nbsp;rowBounds);&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&lt;span style=&quot;color: #999999;&quot;&gt;/**&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;SQL&amp;nbsp;조회&amp;nbsp;결과를&amp;nbsp;ResultHandler를&amp;nbsp;이용해서&amp;nbsp;출력한다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;ResultHandler를&amp;nbsp;상속해&amp;nbsp;구현한&amp;nbsp;커스텀&amp;nbsp;핸들러의&amp;nbsp;handleResult()&amp;nbsp;메서드에&amp;nbsp;따라&amp;nbsp;실행된다.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;queryId&amp;nbsp;-&amp;nbsp;리스트&amp;nbsp;조회&amp;nbsp;처리&amp;nbsp;SQL&amp;nbsp;mapping&amp;nbsp;쿼리&amp;nbsp;ID&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;nbsp;@param&amp;nbsp;handler&amp;nbsp;-&amp;nbsp;조회&amp;nbsp;결과를&amp;nbsp;제어하기&amp;nbsp;위해&amp;nbsp;구현한&amp;nbsp;ResultHandler&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #999999;&quot;&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;*&amp;amp;n&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://onecutwook.tistory.com/25&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://onecutwook.tistory.com/25&lt;/a&gt;&lt;/p&gt;</description>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/334</guid>
      <comments>https://nizimo.tistory.com/334#entry334comment</comments>
      <pubDate>Tue, 1 Apr 2025 07:34:42 +0900</pubDate>
    </item>
    <item>
      <title>WebSocket 기초 예제</title>
      <link>https://nizimo.tistory.com/333</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://steady-record.tistory.com/entry/WebSocket&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://steady-record.tistory.com/entry/WebSocket&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1743031268213&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;[Spring] WebSocket 기초 예제&quot; data-og-description=&quot;Socket? WebSocket?  - Socket Socket는 네트워크 통신을 위한 도구로, 무전기나 전화기와 같이 프로그램 간에 데이터를 주고받을 수 있게 해준다. 이는 특정한 인스턴스가 아닌 통신 규격을 나타낸다. &quot; data-og-host=&quot;steady-record.tistory.com&quot; data-og-source-url=&quot;https://steady-record.tistory.com/entry/WebSocket&quot; data-og-url=&quot;https://steady-record.tistory.com/entry/WebSocket&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bCcxbC/hyYxGnw4Oi/bEwzKnNnyU6jAfeVPfcKKk/img.png?width=715&amp;amp;height=299&amp;amp;face=0_0_715_299,https://scrap.kakaocdn.net/dn/bNajAS/hyYxJYRj2N/9ZKhISfkENOJbyspEXoAiK/img.png?width=715&amp;amp;height=299&amp;amp;face=0_0_715_299,https://scrap.kakaocdn.net/dn/bJ2WWp/hyYxDYEoIQ/03N0rr0RW4qaRVjxKbSM9k/img.png?width=745&amp;amp;height=393&amp;amp;face=0_0_745_393&quot;&gt;&lt;a href=&quot;https://steady-record.tistory.com/entry/WebSocket&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://steady-record.tistory.com/entry/WebSocket&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bCcxbC/hyYxGnw4Oi/bEwzKnNnyU6jAfeVPfcKKk/img.png?width=715&amp;amp;height=299&amp;amp;face=0_0_715_299,https://scrap.kakaocdn.net/dn/bNajAS/hyYxJYRj2N/9ZKhISfkENOJbyspEXoAiK/img.png?width=715&amp;amp;height=299&amp;amp;face=0_0_715_299,https://scrap.kakaocdn.net/dn/bJ2WWp/hyYxDYEoIQ/03N0rr0RW4qaRVjxKbSM9k/img.png?width=745&amp;amp;height=393&amp;amp;face=0_0_745_393');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;[Spring] WebSocket 기초 예제&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Socket? WebSocket?  - Socket Socket는 네트워크 통신을 위한 도구로, 무전기나 전화기와 같이 프로그램 간에 데이터를 주고받을 수 있게 해준다. 이는 특정한 인스턴스가 아닌 통신 규격을 나타낸다.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;steady-record.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;h1 style=&quot;text-align: center;&quot;&gt;[Spring] WebSocket 기초 예제&lt;/h1&gt;
&lt;div&gt;2023. 12. 1. 22:01&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;TOC&quot; style=&quot;background-color: #000000; color: #000000;&quot;&gt;&lt;b&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#Socket%3F%20WebSocket%3F%F0%9F%94%8E-1&quot;&gt;
&lt;div&gt;Socket? WebSocket? &lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20Socket-1&quot;&gt;
&lt;div&gt;- Socket&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20WebSocket-1&quot;&gt;
&lt;div&gt;- WebSocket&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#WebSocket%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%F0%9F%94%8E-1&quot;&gt;
&lt;div&gt;WebSocket 프로젝트 &lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20%ED%8C%8C%EC%9D%BC%20%EA%B5%AC%EC%84%B1-1&quot;&gt;
&lt;div&gt;- 파일 구성&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95-1&quot;&gt;
&lt;div&gt;- 환경 설정&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20SocketServer.java-1&quot;&gt;
&lt;div&gt;- SocketServer.java&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#%20%F0%9F%93%A2%20%EC%9E%A0%EA%B9%90%20%EC%97%AC%EA%B8%B0%EC%84%9C%2C%20%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EC%99%80%20SocketServer%20%EC%9D%98%20%EA%B4%80%EA%B3%84-1&quot;&gt;
&lt;div&gt;  잠깐 여기서, 클라이언트와 SocketServer 의 관계&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20WebSocket%20%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-1&quot;&gt;
&lt;div&gt;- WebSocket 연결하기&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div id=&quot;article&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;
&lt;h2 id=&quot;Socket%3F%20WebSocket%3F%F0%9F%94%8E-1&quot; style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#Socket%3F%20WebSocket%3F%F0%9F%94%8E-1&quot;&gt;Socket? WebSocket? &lt;/a&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;-%20Socket-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20Socket-1&quot;&gt;- Socket&lt;/a&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Socket는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;네트워크 통신을 위한 도구&lt;/u&gt;로, 무전기나 전화기와 같이 프로그램 간에 데이터를 주고받을 수 있게 해준다. 이는 특정한 인스턴스가 아닌&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;통신 규격&lt;/b&gt;을 나타낸다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;프로그래밍 언어들은 이미 Socket을 구현해두어 프로그래머가 손쉽게 네트워크 통신을 구현할 수 있다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;브라우저도 네트워크를 통해 데이터를 주고받을 때 Socket를 사용하여 통신한다. 그러나 최근에는 웹 기술의 발전으로 인해 Socket 사용률이 줄어들었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-%20WebSocket-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20WebSocket-1&quot;&gt;- WebSocket&lt;/a&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;WebSocket은 웹상에서 동작하는 Socket으로, 기존의 웹 통신 방식과는 다르게&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;양방향 통신&lt;/b&gt;을 지원한다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Ajax와 유사한 면이 있지만 Ajax는 단방향 통신에 주로 사용되며, WebSocket은 웹 페이지에서 서버로부터 데이터를 받는 것뿐만 아니라, 웹 페이지에서 서버로 데이터를 보내는 양방향 통신이 가능하다. 이를 통해 다양한 실시간 데이터를 웹 애플리케이션에 적용할 수 있다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;WebSocket은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;기존의 웹 통신 방식보다 빠르고 효율적&lt;/b&gt;이며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;실시간 기능을 제공&lt;/b&gt;하기 위해 널리 사용되고 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 id=&quot;WebSocket%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%F0%9F%94%8E-1&quot; style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#WebSocket%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%F0%9F%94%8E-1&quot;&gt;WebSocket 프로젝트 &lt;/a&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;WebSocket를 이해할 수 있는 프로젝트를 진행한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;-%20%ED%8C%8C%EC%9D%BC%20%EA%B5%AC%EC%84%B1-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20%ED%8C%8C%EC%9D%BC%20%EA%B5%AC%EC%84%B1-1&quot;&gt;- 파일 구성&lt;/a&gt;&lt;/h3&gt;
&lt;table style=&quot;color: #000000; 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;color: #000000; text-align: center;&quot;&gt;&lt;b&gt;상위 패키지(폴더)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #000000; text-align: center;&quot;&gt;&lt;b&gt;하위 패키지(폴더)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #000000; text-align: center;&quot;&gt;&lt;b&gt;파일명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;src/main/java&lt;/td&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;com.test.controller&lt;/td&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;SocketController.java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;com.test.server&lt;/td&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;SocketServer.java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;WEB-INF&lt;/td&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;views&lt;/td&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;test.jsp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 id=&quot;-%20%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95-1&quot;&gt;- 환경 설정&lt;/a&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 자바 및 스프링 버전 변경 - pom.xml&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 의존성 추가&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;WebSocket를 사용하기 위한 의존성을 추가한다.&lt;/p&gt;
&lt;pre id=&quot;code_1743031267838&quot; class=&quot;dust&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;spring-websocket&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;${org.springframework-version}&amp;lt;/version&amp;gt;
		&amp;lt;/dependency&amp;gt;
	
		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;javax.websocket&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;javax.websocket-api&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;1.1&amp;lt;/version&amp;gt;
		&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 id=&quot;-%20SocketServer.java-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20SocketServer.java-1&quot;&gt;- SocketServer.java&lt;/a&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;WebSoket 으로 클라이언트와 서버가 통신할 때는 Controller의 역할은 view를 띄어주는 역할만 존재한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1743031267838&quot; class=&quot;css&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;package com.test.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class SocketController {
	
	@GetMapping(value = &quot;/test.do&quot;)
	public String test(Model model) {
		return &quot;test&quot;;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 id=&quot;%20%F0%9F%93%A2%20%EC%9E%A0%EA%B9%90%20%EC%97%AC%EA%B8%B0%EC%84%9C%2C%20%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EC%99%80%20SocketServer%20%EC%9D%98%20%EA%B4%80%EA%B3%84-1&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#%20%F0%9F%93%A2%20%EC%9E%A0%EA%B9%90%20%EC%97%AC%EA%B8%B0%EC%84%9C%2C%20%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EC%99%80%20SocketServer%20%EC%9D%98%20%EA%B4%80%EA%B3%84-1&quot;&gt;  잠깐 여기서, 클라이언트와 SocketServer 의 관계&lt;/a&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 일방적인 데이터 송수신&lt;/h4&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;웹 소켓을 사용하면 양방향 통신이 가능하며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;클라이언트와 서버 간에 언제든 데이터를 주고 받을 수 있다.&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이는 HTTP와는 다르게 일방적인 클라이언트에서 요청하고 서버가 응답하는 구조가 아닌, 양쪽에서 언제든 데이터를 주고 받을 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 클라이언트의 연결 시작&lt;/h4&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Socketserver&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 클라이언트가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;누군지&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;모르기 때문에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;웹 소켓에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;클라이언트가 먼저 연결을 시작&lt;/u&gt;해야 한다. 이를 통해 클라이언트는 서버에게 연결을 요청하고, 서버는 해당 연결을 수락하여 양방향 통신이 가능한 상태가 된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;3. @ServerEndpoint&lt;/h4&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;@ServerEndpoint&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;어노테이션은 Java에서 웹 소켓 엔드포인트를 정의하는 데 사용된다. 종단점은 웹 소켓 서버에서 클라이언트의 요청을 처리하고, 연결을 관리하는 핵심 구성 요소이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 연결 지속성&lt;/h4&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;한 쪽에서 일방적으로 연결을 끊어버리지 않는 한, 웹 소켓 연결은 계속해서 지속된다. 이 특징은 HTTP와 달리 지속적인 양방향 통신이 가능하도록 한다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 id=&quot;-%20WebSocket%20%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20WebSocket%20%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-1&quot;&gt;- WebSocket 연결하기&lt;/a&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;위 2번 특징으로 클라이언트(jsp)에서 먼저 연결 시도를 한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;화면의 연결 버튼을 누르면 4가지 단계가 이뤄져야한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;1. 소켓 생성&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;2. 서버 접속(연결)&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;3. 통신&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;4. 서버 접속 해제(종료)&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Wovgo/btsMWTtI3r7/gmXdrZgWN0W1pZChwwdGEK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Wovgo/btsMWTtI3r7/gmXdrZgWN0W1pZChwwdGEK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Wovgo/btsMWTtI3r7/gmXdrZgWN0W1pZChwwdGEK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FWovgo%2FbtsMWTtI3r7%2FgmXdrZgWN0W1pZChwwdGEK%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;715&quot; height=&quot;299&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
test.jsp
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;test.jsp&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1743031267839&quot; class=&quot;xml&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot; %&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;WebSocketTest&amp;lt;/title&amp;gt;
&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://me2.do/5BvBFJ57&quot;&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
	&amp;lt;!-- test.jsp --&amp;gt;
	&amp;lt;h1&amp;gt;WebSocket &amp;lt;small&amp;gt;연결 테스트&amp;lt;/small&amp;gt;&amp;lt;/h1&amp;gt;
	
	&amp;lt;div&amp;gt;
		&amp;lt;button type=&quot;button&quot; class=&quot;in&quot; id=&quot;btnConnect&quot;&amp;gt;연결하기&amp;lt;/button&amp;gt;
		&amp;lt;button type=&quot;button&quot; class=&quot;out&quot; id=&quot;btnDisConnect&quot;&amp;gt;종료하기&amp;lt;/button&amp;gt;
	&amp;lt;/div&amp;gt;
	&amp;lt;hr&amp;gt;
	
	&amp;lt;div&amp;gt;
		&amp;lt;input type=&quot;text&quot; class=&quot;long&quot; id=&quot;msg&quot;&amp;gt;
		&amp;lt;button type=&quot;button&quot; id=&quot;btnMsg&quot;&amp;gt;보내기&amp;lt;/button&amp;gt;
	&amp;lt;/div&amp;gt;
	
	&amp;lt;div class=&quot;message full&quot;&amp;gt;&amp;lt;/div&amp;gt;
	&amp;lt;script src=&quot;https://code.jquery.com/jquery-1.12.4.js&quot; &amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;test.jsp (JavaScript)&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1743031267842&quot; class=&quot;xml&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;	&amp;lt;script&amp;gt;
		const url = 'ws://localhost:8090/socket/testserver.do';
		
		let ws; //웹 소켓 참조 변수
        
		$('#btnConnect').click(function() {
			
			ws = new WebSocket(url);
			
			ws.onopen = function(evt) {
				log('서버와 연결하였습니다.');
			};
			
			ws.onclose = function(evt) {
				log('서버와 연결이 종료되었습니다.');
			};
			
			ws.onmessage = function(evt) {
				log(evt.data);
			};
			
			ws.onerror = function(evt) {
				log('에러가 발생했습니다.' + evt);
			};
		});
		
		$('#btnDisConnect').click(function() {
			ws.close();
			log('서버와 연결 종료를 시도합니다.');
			
		});
		
		function log(msg) {
			$('.message').prepend(`
				&amp;lt;div&amp;gt;[\${new Date().toLocaleTimeString()}] \${msg}&amp;lt;/div&amp;gt;		
			`);
		}
		
		$('#btnMsg').click(function() {
			ws.send($('#msg').val());
			log('메시지를 전송했습니다.');
			
			$('#msg').val('');
		});
		
	&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;const&amp;nbsp;url&amp;nbsp;=&amp;nbsp;'ws://localhost:8090/socket/testserver.do';&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;클라이언트와 서버 연결 할 때는 'http' 이 아닌 WebSocket 의 약자인 '&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ws&lt;/b&gt;&lt;/span&gt;' 프로토콜을 사용한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;위 주소 중 testserver.do는 서버의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;@ServerEndpoint&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;와 연결하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;클라이언트에서 서버를 매핑하는 역할&lt;/u&gt;을 한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ws&amp;nbsp;=&amp;nbsp;new&amp;nbsp;WebSocket(url);&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;WebSocket&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;메소드를 사용하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;소켓 생성과 동시에 서버에 접속 시도&lt;/u&gt;한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;웹 소켓 이벤트&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;웹 소켓에는 각종 행위들이 이벤트로 구현되어있어, 클라이언트는 비동기 방식으로 다른 업무를 하다가 이벤트로 연락 오는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ws.onopen&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 서버측에서&amp;nbsp;소켓&amp;nbsp;연결을&amp;nbsp;받아들이고&amp;nbsp;연결이&amp;nbsp;되는&amp;nbsp;순간&amp;nbsp;이벤트가&amp;nbsp;발생한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ws.onclose&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #374151; text-align: left;&quot;&gt;웹 소켓 연결이 닫힐 때 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ws.onmessage&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #374151; text-align: left;&quot;&gt;웹 소켓으로부터 메시지를 수신했을 때 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ws.onerror&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #374151; text-align: left;&quot;&gt;웹 소켓 통신 중 에러가 발생했을 때 호출된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #374151; text-align: left;&quot;&gt;ws.send($('#msg').val());&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;연결된 서버에게 메시지를 전송할 때는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ws.send&lt;/b&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;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;메시지를 서버에 전송하고나면 다음 입력을 위해 초기화를 한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;SocketServer.java&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1743031267844&quot; class=&quot;arduino&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;package com.test.server;

@ServerEndpoint(&quot;/testserver.do&quot;)
public class SocketServer {

	@OnOpen
	public void handelOpen() {
		System.out.println(&quot;클라이언트가 접속했습니다.&quot;);
	}
	
	@OnClose
	public void handleClose() {
		System.out.println(&quot;클라이언트가 종료했습니다.&quot;);
	}
	
	@OnMessage
	public String handleMasseage(String msg) {
		System.out.println(&quot;클라이언트가 보낸 메시지: &quot; + msg);
		
		return &quot;(응답)&quot; + msg;
	}
	
	@OnError
	public void handleError(Throwable e) {
		System.out.println(&quot;에러 발생 &quot; + e.getMessage());
	}
	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;@ServerEndpoint(&quot;/testserver.do&quot;)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;위에서 클라이언트가 testserver.do 를 매핑하였다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;@OnMessage&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;서버 측에서 웹 소켓 이벤트를 처리하기 위해 어노테이션을 사용한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;이 어노테이션은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;클라이언트가 서버에게 메시지를 전송했을 때&lt;/u&gt;(ws.send) 반응하는 이벤트이다.&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;전달한 메시지가 매개변수로 설정된다.&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;보통 메소드 이름은 'handle + 이벤트' 으로 작명한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;317&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mq1s5/btsMXnVpsTE/2b4NVcswRejsxfwC9eb9gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mq1s5/btsMXnVpsTE/2b4NVcswRejsxfwC9eb9gK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mq1s5/btsMXnVpsTE/2b4NVcswRejsxfwC9eb9gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmq1s5%2FbtsMXnVpsTE%2F2b4NVcswRejsxfwC9eb9gK%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;755&quot; height=&quot;317&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;317&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
연결 및 메시지 전송 모습
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ETLKj/btsMXaaVRLB/z5peUohLZGKUPi1mt0r6dK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ETLKj/btsMXaaVRLB/z5peUohLZGKUPi1mt0r6dK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ETLKj/btsMXaaVRLB/z5peUohLZGKUPi1mt0r6dK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FETLKj%2FbtsMXaaVRLB%2Fz5peUohLZGKUPi1mt0r6dK%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;745&quot; height=&quot;393&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;393&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
연결, 전송, 연결종료&lt;/div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div style=&quot;background-color: #ffffff; color: #353638; text-align: start;&quot;&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;공유하기&lt;/span&gt;&lt;/div&gt;
&lt;div data-category-visibility=&quot;public&quot; data-entry-visibility=&quot;public&quot; data-entry-id=&quot;231&quot;&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;게시글 관리&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
구독하기
&lt;div style=&quot;background-color: #ffffff; color: #353638; text-align: start;&quot; data-ccl-derive=&quot;1&quot; data-ccl-type=&quot;2&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/333</guid>
      <comments>https://nizimo.tistory.com/333#entry333comment</comments>
      <pubDate>Thu, 27 Mar 2025 08:21:23 +0900</pubDate>
    </item>
    <item>
      <title>Geolocation API로 실시간 위치 정보 가져오기</title>
      <link>https://nizimo.tistory.com/332</link>
      <description>&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;h1 style=&quot;text-align: center;&quot;&gt;Geolocation&lt;span&gt;&amp;nbsp;&lt;/span&gt;API로 실시간 위치 정보 가져오기&lt;/h1&gt;
&lt;div&gt;2024. 9. 8. 18:58&lt;a style=&quot;color: #000000;&quot; href=&quot;https://hy-un.tistory.com/category/JavaScript&quot;&gt;&amp;middot; JavaScript&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div id=&quot;TOC&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot;&gt;&lt;b&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://hy-un.tistory.com/entry/Geolocation-API%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%9C%84%EC%B9%98-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0#1.%20Geolocation%20API%EB%9E%80%3F-1&quot;&gt;
&lt;div&gt;1. Geolocation API란?&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://hy-un.tistory.com/entry/Geolocation-API%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%9C%84%EC%B9%98-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0#2.%20%EC%9C%84%EC%B9%98%20%EC%A0%95%EB%B3%B4%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%3A%20getCurrentPosition()-1&quot;&gt;
&lt;div&gt;2. 위치 정보 가져오기: getCurrentPosition()&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://hy-un.tistory.com/entry/Geolocation-API%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%9C%84%EC%B9%98-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0#3.%20%EC%9C%84%EC%B9%98%20%EC%A0%95%EB%B3%B4%20%EA%B0%9D%EC%B2%B4%20(position)%20%EC%9E%90%EC%84%B8%ED%9E%88%20%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-1&quot;&gt;
&lt;div&gt;3. 위치 정보 객체 (position) 자세히 알아보기&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://hy-un.tistory.com/entry/Geolocation-API%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%9C%84%EC%B9%98-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0#4.%20%EC%98%A4%EB%A5%98%20%EC%B2%98%EB%A6%AC-1&quot;&gt;
&lt;div&gt;4. 오류 처리&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://hy-un.tistory.com/entry/Geolocation-API%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%9C%84%EC%B9%98-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0#5.%20%EC%9C%84%EC%B9%98%20%EC%9A%94%EC%B2%AD%20%EC%8B%9C%20%EC%98%B5%EC%85%98%20%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0-1&quot;&gt;
&lt;div&gt;5. 위치 요청 시 옵션 설정하기&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div id=&quot;article&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API&quot;&gt;https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1743031192643&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/QtLme/hyW2TOWRTg/2GxcETzmxtb7volQanMGRK/img.png?width=1920&amp;amp;height=1080&amp;amp;face=0_0_1920_1080&quot; data-og-url=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API&quot; data-og-source-url=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API&quot; data-og-host=&quot;developer.mozilla.org&quot; data-og-description=&quot;The Geolocation API allows the user to provide their location to web applications if they so desire. For privacy reasons, the user is asked for permission to report location information.&quot; data-og-title=&quot;Geolocation API - Web APIs | MDN&quot; data-og-type=&quot;website&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API&quot; data-source-url=&quot;https://developer.mozilla.org/en-US/docs/Web/API/Geolocation_API&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #000000;&quot;&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Geolocation API - Web APIs | MDN&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;The Geolocation API allows the user to provide their location to web applications if they so desire. For privacy reasons, the user is asked for permission to report location information.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;developer.mozilla.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;h2 id=&quot;1.%20Geolocation%20API%EB%9E%80%3F-1&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://hy-un.tistory.com/entry/Geolocation-API%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%9C%84%EC%B9%98-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0#1.%20Geolocation%20API%EB%9E%80%3F-1&quot;&gt;1. Geolocation API란?&lt;/a&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;Geolocation API는 웹사이트가 사용자의 기기에서 위치 정보를 요청할 수 있도록 해주는 기능입니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;위치 정보는 사용자의 허락을 받아야만 가져올 수 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;2.%20%EC%9C%84%EC%B9%98%20%EC%A0%95%EB%B3%B4%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%3A%20getCurrentPosition()-1&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://hy-un.tistory.com/entry/Geolocation-API%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%9C%84%EC%B9%98-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0#2.%20%EC%9C%84%EC%B9%98%20%EC%A0%95%EB%B3%B4%20%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0%3A%20getCurrentPosition()-1&quot;&gt;2. 위치 정보 가져오기: getCurrentPosition()&lt;/a&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;위치 정보를 한 번만 가져오려면 getCurrentPosition() 메서드를 사용합니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;이 메서드는 성공 시 실행될 함수(필수), 실패 시 실행될 함수(필수), 그리고 추가 설정 옵션(선택)을 인수로 받습니다.&lt;/p&gt;
&lt;div style=&quot;background-color: #282936;&quot;&gt;&lt;span style=&quot;color: #fbbc04;&quot;&gt;JAVASCRIPT&lt;/span&gt;
&lt;p style=&quot;color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1743031192643&quot; class=&quot;coffeescript&quot; style=&quot;background-color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;navigator.geolocation.getCurrentPosition(
    (position) =&amp;gt; {
        console.log(&quot;위도: &quot; + position.coords.latitude);
        console.log(&quot;경도: &quot; + position.coords.longitude);
    },
    (error) =&amp;gt; {
        console.error(&quot;오류 발생: &quot;, error);
    }
);&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;3.%20%EC%9C%84%EC%B9%98%20%EC%A0%95%EB%B3%B4%20%EA%B0%9D%EC%B2%B4%20(position)%20%EC%9E%90%EC%84%B8%ED%9E%88%20%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-1&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://hy-un.tistory.com/entry/Geolocation-API%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%9C%84%EC%B9%98-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0#3.%20%EC%9C%84%EC%B9%98%20%EC%A0%95%EB%B3%B4%20%EA%B0%9D%EC%B2%B4%20(position)%20%EC%9E%90%EC%84%B8%ED%9E%88%20%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0-1&quot;&gt;3. 위치 정보 객체 (position) 자세히 알아보기&lt;/a&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;성공적으로 위치 정보를 가져오면 position 객체가 반환됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;이 객체에는 사용자 기기의 여러 위치 정보가 들어 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;coords.latitude&lt;/b&gt;: 위도 (ex: 37.5172)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;coords.longitude&lt;/b&gt;: 경도 (ex: 127.0473)&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;coords.altitude&lt;/b&gt;: 고도, 미터 단위 (사용할 수 없으면 null).&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;coords.accuracy&lt;/b&gt;: 위치의 정확도, 미터 단위.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;coords.altitudeAccuracy&lt;/b&gt;: 고도의 정확도 (사용할 수 없으면 null).&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;coords.heading&lt;/b&gt;: 기기가 가리키고 있는 방향 (정지 상태일 경우 null).&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;coords.speed&lt;/b&gt;: 기기의 이동 속도, m/s 단위 (정지 상태일 경우 null)&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #282936;&quot;&gt;&lt;span style=&quot;color: #fbbc04;&quot;&gt;JAVASCRIPT&lt;/span&gt;
&lt;p style=&quot;color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1743031192645&quot; class=&quot;javascript&quot; style=&quot;background-color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;navigator.geolocation.getCurrentPosition(
    (position) =&amp;gt; {
        const { latitude, longitude, accuracy, altitude, heading, speed } = position.coords;
        console.log(`위도: ${latitude}, 경도: ${longitude}`);
        console.log(`정확도: ${accuracy}m`);
        console.log(`고도: ${altitude !== null ? altitude + &quot;m&quot; : &quot;정보 없음&quot;}`);
        console.log(`방향: ${heading !== null ? heading + &quot;&amp;deg;&quot; : &quot;정지 상태&quot;}`);
        console.log(`속도: ${speed !== null ? speed + &quot;m/s&quot; : &quot;정지 상태&quot;}`);
    }
);&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;4.%20%EC%98%A4%EB%A5%98%20%EC%B2%98%EB%A6%AC-1&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://hy-un.tistory.com/entry/Geolocation-API%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%9C%84%EC%B9%98-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0#4.%20%EC%98%A4%EB%A5%98%20%EC%B2%98%EB%A6%AC-1&quot;&gt;4. 오류 처리&lt;/a&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;위치 정보를 가져오는 중 발생하는 오류는 크게 세 가지로 나눌 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;PERMISSION_DENIED&lt;/b&gt;: 사용자가 위치 정보 접근을 거부한 경우.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;POSITION_UNAVAILABLE&lt;/b&gt;: 기기의 위치 정보를 사용할 수 없는 경우.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;TIMEOUT&lt;/b&gt;: 위치 정보를 가져오는 시간이 초과된 경우.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #282936;&quot;&gt;&lt;span style=&quot;color: #fbbc04;&quot;&gt;JAVASCRIPT&lt;/span&gt;
&lt;p style=&quot;color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1743031192646&quot; class=&quot;moonscript&quot; style=&quot;background-color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;navigator.geolocation.getCurrentPosition(
    (position) =&amp;gt; {
        // 위치 정보를 성공적으로 가져옴
    },
    (error) =&amp;gt; {
        switch (error.code) {
            case error.PERMISSION_DENIED:
                alert(&quot;위치 정보 접근이 거부되었습니다.&quot;);
                break;
            case error.POSITION_UNAVAILABLE:
                alert(&quot;위치 정보를 사용할 수 없습니다.&quot;);
                break;
            case error.TIMEOUT:
                alert(&quot;위치 정보를 가져오는 데 시간이 너무 오래 걸렸습니다.&quot;);
                break;
            default:
                alert(&quot;알 수 없는 오류가 발생했습니다.&quot;);
        }
    }
);&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;5.%20%EC%9C%84%EC%B9%98%20%EC%9A%94%EC%B2%AD%20%EC%8B%9C%20%EC%98%B5%EC%85%98%20%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0-1&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://hy-un.tistory.com/entry/Geolocation-API%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%9C%84%EC%B9%98-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0#5.%20%EC%9C%84%EC%B9%98%20%EC%9A%94%EC%B2%AD%20%EC%8B%9C%20%EC%98%B5%EC%85%98%20%EC%84%A4%EC%A0%95%ED%95%98%EA%B8%B0-1&quot;&gt;5. 위치 요청 시 옵션 설정하기&lt;/a&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;getCurrentPosition() 메서드는 추가적인 옵션을 설정할 수 있습니다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;enableHighAccuracy&lt;/b&gt;: 위치 정보의 정확도를 높일지 여부(기본값 false)&lt;br /&gt;true로 설정하면 더 정확한 위치 정보를 제공하지만, 배터리 소모량이 증가할 수 있습니다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;timeout&lt;/b&gt;: 위치 정보를 가져오는 데 걸리는 최대 시간 (밀리초 단위).&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;b&gt;maximumAge&lt;/b&gt;: 이전 위치 정보를 얼마 동안 캐시할지 (밀리초 단위). 0으로 설정 시 항상 최신 정보를 요청합니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;div style=&quot;background-color: #282936;&quot;&gt;&lt;span style=&quot;color: #fbbc04;&quot;&gt;JAVASCRIPT&lt;/span&gt;
&lt;p style=&quot;color: #ffffff;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1743031192647&quot; class=&quot;typescript&quot; style=&quot;background-color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;navigator.geolocation.getCurrentPosition(
    (position) =&amp;gt; {
        console.log(`위도: ${position.coords.latitude}, 경도: ${position.coords.longitude}`);
    },
    (error) =&amp;gt; {
        console.error(&quot;위치 정보를 가져오는 중 오류 발생: &quot;, error);
    },
    {
        enableHighAccuracy: true,  // 고정밀도 위치 요청
        timeout: 5000,             // 5초 이내에 위치 정보를 가져오지 않으면 오류 처리
        maximumAge: 0              // 캐시된 위치 정보 사용 안 함
    }
);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://hy-un.tistory.com/entry/Geolocation-API%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%9C%84%EC%B9%98-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://hy-un.tistory.com/entry/Geolocation-API%EB%A1%9C-%EC%8B%A4%EC%8B%9C%EA%B0%84-%EC%9C%84%EC%B9%98-%EC%A0%95%EB%B3%B4-%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0&lt;/a&gt;&lt;/p&gt;</description>
      <category>study/Front</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/332</guid>
      <comments>https://nizimo.tistory.com/332#entry332comment</comments>
      <pubDate>Thu, 27 Mar 2025 08:20:22 +0900</pubDate>
    </item>
    <item>
      <title>Geolocation API 사용하기</title>
      <link>https://nizimo.tistory.com/331</link>
      <description>&lt;h1&gt;Geolocation API 사용하기&lt;/h1&gt;
&lt;div style=&quot;background-color: #ffffff; color: #1b1b1b; text-align: start;&quot;&gt;
&lt;div style=&quot;background-color: #000000; color: #000000;&quot;&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;보안 컨텍스트:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이 기능은 일부 또는 모든&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation_API/Using_the_Geolocation_API#%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80_%ED%98%B8%ED%99%98%EC%84%B1&quot;&gt;지원 브라우저&lt;/a&gt;의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/Security/Secure_Contexts&quot;&gt;보안 컨텍스트&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(HTTPS)에서만 사용할 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Geolocation API는 사용자의 현재 위치를 가져오는 API로, 지도에 사용자 위치를 표시하는 등 다양한 용도로 사용할 수 있습니다. 이 글에서는 Geolocation API의 기초 사용법을 설명합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;geolocation_객체&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation_API/Using_the_Geolocation_API#geolocation_%EA%B0%9D%EC%B2%B4&quot;&gt;geolocation 객체&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation&quot;&gt;Geolocation API&lt;/a&gt;는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Navigator/geolocation&quot;&gt;navigator.geolocation&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체를 통해 사용할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;geolocation&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체가 존재하는 경우 위치 정보 서비스를 지원하는 것입니다. 객체의 존재 여부는 다음과 같이 알아낼 수 있습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #000000;&quot;&gt;&lt;span&gt;js&lt;/span&gt;&lt;span&gt;Copy to Clipboard&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;actionscript&quot; style=&quot;background-color: #000000;&quot;&gt;&lt;code&gt;if (&quot;geolocation&quot; in navigator) {
  /* 위치정보 사용 가능 */
} else {
  /* 위치정보 사용 불가능 */
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&quot;현재_위치_가져오기&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation_API/Using_the_Geolocation_API#%ED%98%84%EC%9E%AC_%EC%9C%84%EC%B9%98_%EA%B0%80%EC%A0%B8%EC%98%A4%EA%B8%B0&quot;&gt;현재 위치 가져오기&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자의 현재 위치는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation/getCurrentPosition&quot;&gt;getCurrentPosition()&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메서드를 호출해서 가져올 수 있습니다. 이 메서드는 사용자의 위치를 탐지하는 비동기 요청을 시작하고, 위치 관련 하드웨어에 최신 정보를 요청하며, 위치를 알아낸 후 주어진 콜백 함수를 호출합니다. 선택적으로, 오류가 발생하면 호출할 콜백을 두 번째 매개변수로 지정할 수 있습니다. 또 다른 선택 사항인 세 번째 매개변수는 위치 정보의 최대 수명, 요청의 최대 대기시간, 고정밀 위치정보 여부 등의 옵션을 담은 객체입니다.&lt;/p&gt;
&lt;blockquote style=&quot;color: #000000;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation/getCurrentPosition&quot;&gt;getCurrentPosition()&lt;/a&gt;의 기본 설정에서는 정밀도가 낮더라도 최대한 빠르게 응답을 반환하므로, 정확도보다 속도가 중요한 상황에서 유용합니다. 예를 들어, GPS 기능을 가진 장비는 보정 과정에 수 분이 걸릴 수도 있으므로 그동안 IP 위치와 Wi-Fi 등 정확하지 않은 출처에 기반한 위치 정보를 반환할 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #000000;&quot;&gt;&lt;span&gt;js&lt;/span&gt;&lt;span&gt;Copy to Clipboard&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background-color: #000000;&quot;&gt;&lt;code&gt;navigator.geolocation.getCurrentPosition((position) =&amp;gt; {
  doSomething(position.coords.latitude, position.coords.longitude);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 예제는 사용자 위치가 확인되면&lt;span&gt;&amp;nbsp;&lt;/span&gt;doSomething()&lt;span&gt;&amp;nbsp;&lt;/span&gt;함수를 실행합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;h3 id=&quot;현재_위치_추적하기&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation_API/Using_the_Geolocation_API#%ED%98%84%EC%9E%AC_%EC%9C%84%EC%B9%98_%EC%B6%94%EC%A0%81%ED%95%98%EA%B8%B0&quot;&gt;현재 위치 추적하기&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장치의 이동이나 위치 정밀도 향상으로 인해 위치 정보가 바뀔 때 호출할 콜백 함수를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation/watchPosition&quot;&gt;watchPosition()&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메서드로 설정할 수 있습니다. 이 메서드의 매개변수는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation/getCurrentPosition&quot;&gt;getCurrentPosition()&lt;/a&gt;과 같습니다. 이 콜백은 여러 번 호출될 수 있으므로 브라우저가 사용자의 움직임에 따라 위치를 업데이트하거나, 고정밀 위치 기술을 적용해 보다 정밀한 위치를 표시할 수 있습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;getCurrentPosition()과 마찬가지로 선택 사항인 오류 콜백 역시 여러 번 호출될 수 있습니다.&lt;/p&gt;
&lt;blockquote style=&quot;color: #000000;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;참고:&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation/getCurrentPosition&quot;&gt;getCurrentPosition()&lt;/a&gt;을 먼저 호출하지 않아도&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation/watchPosition&quot;&gt;watchPosition()&lt;/a&gt;을 사용할 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #000000;&quot;&gt;&lt;span&gt;js&lt;/span&gt;&lt;span&gt;Copy to Clipboard&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background-color: #000000;&quot;&gt;&lt;code&gt;const watchID = navigator.geolocation.watchPosition((position) =&amp;gt; {
  doSomething(position.coords.latitude, position.coords.longitude);
});
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation/watchPosition&quot;&gt;watchPosition()&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메서드는 위치 추적 요청을 식별할 수 있는 고유 숫자를 반환합니다. 이 숫자를&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation/clearWatch&quot;&gt;clearWatch()&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;메서드에 전달하면 해당 위치 추적을 종료할 수 있습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #000000;&quot;&gt;&lt;span&gt;js&lt;/span&gt;&lt;span&gt;Copy to Clipboard&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;css&quot; style=&quot;background-color: #000000;&quot;&gt;&lt;code&gt;navigator.geolocation.clearWatch(watchID);
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&quot;응답_미세_조정&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation_API/Using_the_Geolocation_API#%EC%9D%91%EB%8B%B5_%EB%AF%B8%EC%84%B8_%EC%A1%B0%EC%A0%95&quot;&gt;응답 미세 조정&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation/getCurrentPosition&quot;&gt;getCurrentPosition()&lt;/a&gt;과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation/watchPosition&quot;&gt;watchPosition()&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;둘 다 성공 콜백, 실패 콜백, 그리고 옵션 객체를 받을 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 옵션 객체로는 고정밀도 활성화 여부, 위치 정보의 최대 수명(수명이 끝나기 전에는 이전에 반환했던 위치 정보를 저장했다가, 같은 요청을 또 받으면 그대로 반환합니다), 그리고 위치 정보 요청의 응답을 기다릴 최대 대기시간을 지정할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옵션 객체를 사용한&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation/watchPosition&quot;&gt;watchPosition&lt;/a&gt;의 호출 예시는 다음과 같습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #000000;&quot;&gt;&lt;span&gt;js&lt;/span&gt;&lt;span&gt;Copy to Clipboard&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;background-color: #000000;&quot;&gt;&lt;code&gt;function success(position) {
  doSomething(position.coords.latitude, position.coords.longitude);
}

function error() {
  alert(&quot;죄송합니다. 위치 정보를 사용할 수 없습니다.&quot;);
}

const options = {
  enableHighAccuracy: true,
  maximumAge: 30000,
  timeout: 27000,
};

const watchID = navigator.geolocation.watchPosition(success, error, options);
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;위치_표현&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation_API/Using_the_Geolocation_API#%EC%9C%84%EC%B9%98_%ED%91%9C%ED%98%84&quot;&gt;위치 표현&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사용자의 위치는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/GeolocationPosition&quot;&gt;GeolocationPosition&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체 인스턴스와, 그 안의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/GeolocationCoordinates&quot;&gt;GeolocationCoordinates&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체 인스턴스로 표현됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GeolocationPosition은 오직 두 가지,&lt;span&gt;&amp;nbsp;&lt;/span&gt;GeolocationCoordinates&lt;span&gt;&amp;nbsp;&lt;/span&gt;인스턴스를 가진&lt;span&gt;&amp;nbsp;&lt;/span&gt;coords&lt;span&gt;&amp;nbsp;&lt;/span&gt;속성과, 위치 정보의 기록 시점을 타임스탬프(&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Glossary/Unix_time&quot;&gt;Unix 시간&lt;/a&gt;, 밀리초)로 나타내는&lt;span&gt;&amp;nbsp;&lt;/span&gt;timestamp&lt;span&gt;&amp;nbsp;&lt;/span&gt;속성만 갖습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GeolocationCoordinates&lt;span&gt;&amp;nbsp;&lt;/span&gt;인스턴스는 여러 속성을 갖지만, 그중 가장 많이 쓰게 될 두 가지는 지도 위에 위치를 표시할 때 필요한&lt;span&gt;&amp;nbsp;&lt;/span&gt;latitude와&lt;span&gt;&amp;nbsp;&lt;/span&gt;longitude입니다. 따라서 대부분의&lt;span&gt;&amp;nbsp;&lt;/span&gt;Geolocation&lt;span&gt;&amp;nbsp;&lt;/span&gt;성공 콜백은 아래와 같이 꽤 간단한 형태입니다.&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #000000;&quot;&gt;&lt;span&gt;js&lt;/span&gt;&lt;span&gt;Copy to Clipboard&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;background-color: #000000;&quot;&gt;&lt;code&gt;function success(position) {
  const latitude = position.coords.latitude;
  const longitude = position.coords.longitude;

  // 위도와 경도를 사용해 작업 수행
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나&lt;span&gt;&amp;nbsp;&lt;/span&gt;GeolocationCoordinates&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체에서 고도, 속도, 장치의 방향, 위경도와 고도의 오차범위 등 다른 다양한 정보도 가져올 수 있습니다.&lt;/p&gt;
&lt;/div&gt;
&lt;h2 id=&quot;오류_처리&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation_API/Using_the_Geolocation_API#%EC%98%A4%EB%A5%98_%EC%B2%98%EB%A6%AC&quot;&gt;오류 처리&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;getCurrentPosition()&lt;span&gt;&amp;nbsp;&lt;/span&gt;또는&lt;span&gt;&amp;nbsp;&lt;/span&gt;watchPosition()에 오류 콜백을 제공한 경우, 콜백은 첫 번째 매개변수로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/API/GeolocationPositionError&quot;&gt;GeolocationPositionError&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;객체를 받습니다. 해당 객체는 오류의 유형을 나타내는&lt;span&gt;&amp;nbsp;&lt;/span&gt;code&lt;span&gt;&amp;nbsp;&lt;/span&gt;속성과, 사람이 읽을 수 있는 형태로 오류 코드의 뜻을 설명한&lt;span&gt;&amp;nbsp;&lt;/span&gt;message&lt;span&gt;&amp;nbsp;&lt;/span&gt;속성을 갖습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 형태로 사용할 수 있습니다.&lt;/p&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #000000;&quot;&gt;&lt;span&gt;js&lt;/span&gt;&lt;span&gt;Copy to Clipboard&lt;/span&gt;&lt;/div&gt;
&lt;pre class=&quot;arcade&quot; style=&quot;background-color: #000000;&quot;&gt;&lt;code&gt;function errorCallback(error) {
  alert(`ERROR(${error.code}): ${error.message}`);
}
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h2 id=&quot;예제&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation_API/Using_the_Geolocation_API#%EC%98%88%EC%A0%9C&quot;&gt;예제&lt;/a&gt;&lt;/h2&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음 예제는 Geolocation API를 사용해 사용자의 위경도를 가져오는 데 성공하면, 사용자의 위치로 향하는&lt;span&gt;&amp;nbsp;&lt;/span&gt;openstreetmap.org&lt;span&gt;&amp;nbsp;&lt;/span&gt;링크를 생성하고 하이퍼링크에 지정합니다.&lt;/p&gt;
&lt;/div&gt;
&lt;h3 id=&quot;html&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation_API/Using_the_Geolocation_API#html&quot;&gt;HTML&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #000000;&quot;&gt;&lt;span&gt;html&lt;/span&gt;&lt;span&gt;Copy to Clipboard&lt;/span&gt;play&lt;/div&gt;
&lt;pre class=&quot;xml&quot; style=&quot;background-color: #000000;&quot;&gt;&lt;code&gt;&amp;lt;button id=&quot;find-me&quot;&amp;gt;내 위치 보기&amp;lt;/button&amp;gt;&amp;lt;br /&amp;gt;
&amp;lt;p id=&quot;status&quot;&amp;gt;&amp;lt;/p&amp;gt;
&amp;lt;a id=&quot;map-link&quot; target=&quot;_blank&quot;&amp;gt;&amp;lt;/a&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;h3 id=&quot;javascript&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/ko/docs/Web/API/Geolocation_API/Using_the_Geolocation_API#javascript&quot;&gt;JavaScript&lt;/a&gt;&lt;/h3&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #000000;&quot;&gt;&lt;span&gt;js&lt;/span&gt;&lt;span&gt;Copy to Clipboard&lt;/span&gt;play&lt;/div&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;background-color: #000000;&quot;&gt;&lt;code&gt;function geoFindMe() {
  const status = document.querySelector(&quot;#status&quot;);
  const mapLink = document.querySelector(&quot;#map-link&quot;);

  mapLink.href = &quot;&quot;;
  mapLink.textContent = &quot;&quot;;

  function success(position) {
    const latitude = position.coords.latitude;
    const longitude = position.coords.longitude;

    status.textContent = &quot;&quot;;
    mapLink.href = `https://www.openstreetmap.org/#map=18/${latitude}/${longitude}`;
    mapLink.textContent = `위도: ${latitude} &amp;deg;, 경도: ${longitude} &amp;deg;`;
  }

  function error() {
    status.textContent = &quot;현재 위치를 가져올 수 없음&quot;;
  }

  if (!navigator.geolocation) {
    status.textContent = &quot;브라우저가 위치 정보를 지원하지 않음&quot;;
  } else {
    status.textContent = &quot;위치 파악 중&amp;hellip;&quot;;
    navigator.geolocation.getCurrentPosition(success, error);
  }
}

document.querySelector(&quot;#find-me&quot;).addEventListener(&quot;click&quot;, geoFindMe);
&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;</description>
      <category>study/Front</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/331</guid>
      <comments>https://nizimo.tistory.com/331#entry331comment</comments>
      <pubDate>Thu, 27 Mar 2025 08:18:07 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] WebSocket 기초 예제</title>
      <link>https://nizimo.tistory.com/330</link>
      <description>&lt;div id=&quot;TOC&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot;&gt;&lt;b&gt;&lt;span&gt;목차&lt;/span&gt;&lt;/b&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#Socket%3F%20WebSocket%3F%F0%9F%94%8E-1&quot;&gt;
&lt;div&gt;Socket? WebSocket? &lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20Socket-1&quot;&gt;
&lt;div&gt;- Socket&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20WebSocket-1&quot;&gt;
&lt;div&gt;- WebSocket&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#WebSocket%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%F0%9F%94%8E-1&quot;&gt;
&lt;div&gt;WebSocket 프로젝트 &lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20%ED%8C%8C%EC%9D%BC%20%EA%B5%AC%EC%84%B1-1&quot;&gt;
&lt;div&gt;- 파일 구성&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95-1&quot;&gt;
&lt;div&gt;- 환경 설정&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20SocketServer.java-1&quot;&gt;
&lt;div&gt;- SocketServer.java&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#%20%F0%9F%93%A2%20%EC%9E%A0%EA%B9%90%20%EC%97%AC%EA%B8%B0%EC%84%9C%2C%20%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EC%99%80%20SocketServer%20%EC%9D%98%20%EA%B4%80%EA%B3%84-1&quot;&gt;
&lt;div&gt;  잠깐 여기서, 클라이언트와 SocketServer 의 관계&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20WebSocket%20%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-1&quot;&gt;
&lt;div&gt;- WebSocket 연결하기&lt;/div&gt;
&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;
&lt;div id=&quot;article&quot; style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000; text-align: left;&quot;&gt;
&lt;h2 id=&quot;Socket%3F%20WebSocket%3F%F0%9F%94%8E-1&quot; style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#Socket%3F%20WebSocket%3F%F0%9F%94%8E-1&quot;&gt;Socket? WebSocket? &lt;/a&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;-%20Socket-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20Socket-1&quot;&gt;- Socket&lt;/a&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Socket는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;네트워크 통신을 위한 도구&lt;/u&gt;로, 무전기나 전화기와 같이 프로그램 간에 데이터를 주고받을 수 있게 해준다. 이는 특정한 인스턴스가 아닌&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;통신 규격&lt;/b&gt;을 나타낸다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;프로그래밍 언어들은 이미 Socket을 구현해두어 프로그래머가 손쉽게 네트워크 통신을 구현할 수 있다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;브라우저도 네트워크를 통해 데이터를 주고받을 때 Socket를 사용하여 통신한다. 그러나 최근에는 웹 기술의 발전으로 인해 Socket 사용률이 줄어들었다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;-%20WebSocket-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20WebSocket-1&quot;&gt;- WebSocket&lt;/a&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;WebSocket은 웹상에서 동작하는 Socket으로, 기존의 웹 통신 방식과는 다르게&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;양방향 통신&lt;/b&gt;을 지원한다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;Ajax와 유사한 면이 있지만 Ajax는 단방향 통신에 주로 사용되며, WebSocket은 웹 페이지에서 서버로부터 데이터를 받는 것뿐만 아니라, 웹 페이지에서 서버로 데이터를 보내는 양방향 통신이 가능하다. 이를 통해 다양한 실시간 데이터를 웹 애플리케이션에 적용할 수 있다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;WebSocket은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;기존의 웹 통신 방식보다 빠르고 효율적&lt;/b&gt;이며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;실시간 기능을 제공&lt;/b&gt;하기 위해 널리 사용되고 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style5&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h2 id=&quot;WebSocket%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%F0%9F%94%8E-1&quot; style=&quot;text-align: center;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#WebSocket%20%ED%94%84%EB%A1%9C%EC%A0%9D%ED%8A%B8%F0%9F%94%8E-1&quot;&gt;WebSocket 프로젝트 &lt;/a&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;WebSocket를 이해할 수 있는 프로젝트를 진행한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;-%20%ED%8C%8C%EC%9D%BC%20%EA%B5%AC%EC%84%B1-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20%ED%8C%8C%EC%9D%BC%20%EA%B5%AC%EC%84%B1-1&quot;&gt;- 파일 구성&lt;/a&gt;&lt;/h3&gt;
&lt;table style=&quot;color: #000000; 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;color: #000000; text-align: center;&quot;&gt;&lt;b&gt;상위 패키지(폴더)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #000000; text-align: center;&quot;&gt;&lt;b&gt;하위 패키지(폴더)&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;color: #000000; text-align: center;&quot;&gt;&lt;b&gt;파일명&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;src/main/java&lt;/td&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;com.test.controller&lt;/td&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;SocketController.java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;&amp;nbsp;&lt;/td&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;com.test.server&lt;/td&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;SocketServer.java&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;WEB-INF&lt;/td&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;views&lt;/td&gt;
&lt;td style=&quot;color: #000000;&quot;&gt;test.jsp&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 id=&quot;-%20%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20%ED%99%98%EA%B2%BD%20%EC%84%A4%EC%A0%95-1&quot;&gt;- 환경 설정&lt;/a&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. 자바 및 스프링 버전 변경 - pom.xml&amp;nbsp;&lt;/b&gt;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. 의존성 추가&lt;/b&gt;&lt;/h4&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;WebSocket를 사용하기 위한 의존성을 추가한다.&lt;/p&gt;
&lt;pre id=&quot;code_1740030106539&quot; class=&quot;dust&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;org.springframework&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;spring-websocket&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;${org.springframework-version}&amp;lt;/version&amp;gt;
		&amp;lt;/dependency&amp;gt;
	
		&amp;lt;dependency&amp;gt;
			&amp;lt;groupId&amp;gt;javax.websocket&amp;lt;/groupId&amp;gt;
			&amp;lt;artifactId&amp;gt;javax.websocket-api&amp;lt;/artifactId&amp;gt;
			&amp;lt;version&amp;gt;1.1&amp;lt;/version&amp;gt;
		&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 id=&quot;-%20SocketServer.java-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20SocketServer.java-1&quot;&gt;- SocketServer.java&lt;/a&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;WebSoket 으로 클라이언트와 서버가 통신할 때는 Controller의 역할은 view를 띄어주는 역할만 존재한다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1740030106540&quot; class=&quot;css&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;package com.test.controller;

import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class SocketController {
	
	@GetMapping(value = &quot;/test.do&quot;)
	public String test(Model model) {
		return &quot;test&quot;;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 id=&quot;%20%F0%9F%93%A2%20%EC%9E%A0%EA%B9%90%20%EC%97%AC%EA%B8%B0%EC%84%9C%2C%20%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EC%99%80%20SocketServer%20%EC%9D%98%20%EA%B4%80%EA%B3%84-1&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#%20%F0%9F%93%A2%20%EC%9E%A0%EA%B9%90%20%EC%97%AC%EA%B8%B0%EC%84%9C%2C%20%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8%EC%99%80%20SocketServer%20%EC%9D%98%20%EA%B4%80%EA%B3%84-1&quot;&gt;  잠깐 여기서, 클라이언트와 SocketServer 의 관계&lt;/a&gt;&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;1. 일방적인 데이터 송수신&lt;/h4&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;웹 소켓을 사용하면 양방향 통신이&lt;span&gt;&amp;nbsp;&lt;/span&gt;가능하며,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;클라이언트와 서버 간에 언제든 데이터를 주고 받을 수 있다.&lt;/u&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이는 HTTP와는 다르게 일방적인 클라이언트에서 요청하고 서버가 응답하는 구조가 아닌, 양쪽에서 언제든 데이터를 주고 받을 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2. 클라이언트의 연결 시작&lt;/h4&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Socketserver&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;는 클라이언트가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;누군지&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;모르기 때문에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;웹 소켓에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;클라이언트가 먼저 연결을 시작&lt;/u&gt;해야 한다. 이를 통해 클라이언트는 서버에게 연결을 요청하고, 서버는 해당 연결을 수락하여 양방향 통신이 가능한 상태가 된다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;3. @ServerEndpoint&lt;/h4&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;@ServerEndpoint&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;어노테이션은 Java에서 웹 소켓 엔드포인트를 정의하는 데 사용된다. 종단점은 웹 소켓 서버에서 클라이언트의 요청을 처리하고, 연결을 관리하는 핵심 구성 요소이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;4. 연결 지속성&lt;/h4&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;한 쪽에서 일방적으로 연결을 끊어버리지 않는 한, 웹 소켓 연결은 계속해서 지속된다. 이 특징은 HTTP와 달리 지속적인 양방향 통신이 가능하도록 한다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style6&quot; data-ke-type=&quot;horizontalRule&quot; /&gt;
&lt;h3 id=&quot;-%20WebSocket%20%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-1&quot; data-ke-size=&quot;size23&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://steady-record.tistory.com/entry/WebSocket#-%20WebSocket%20%EC%97%B0%EA%B2%B0%ED%95%98%EA%B8%B0-1&quot;&gt;- WebSocket 연결하기&lt;/a&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;위 2번 특징으로 클라이언트(jsp)에서 먼저 연결 시도를 한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;화면의 연결 버튼을 누르면 4가지 단계가 이뤄져야한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;1. 소켓 생성&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;2. 서버 접속(연결)&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;3. 통신&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;4. 서버 접속 해제(종료)&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;299&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6o05X/btsMqjd4BmH/59KCFUwahEkrghfdIuS0Rk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6o05X/btsMqjd4BmH/59KCFUwahEkrghfdIuS0Rk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6o05X/btsMqjd4BmH/59KCFUwahEkrghfdIuS0Rk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6o05X%2FbtsMqjd4BmH%2F59KCFUwahEkrghfdIuS0Rk%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;715&quot; height=&quot;299&quot; data-origin-width=&quot;715&quot; data-origin-height=&quot;299&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
test.jsp
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;test.jsp&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1740030106541&quot; class=&quot;xml&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;%@ taglib prefix=&quot;c&quot; uri=&quot;http://java.sun.com/jsp/jstl/core&quot; %&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;WebSocketTest&amp;lt;/title&amp;gt;
&amp;lt;link rel=&quot;stylesheet&quot; href=&quot;https://me2.do/5BvBFJ57&quot;&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
	&amp;lt;!-- test.jsp --&amp;gt;
	&amp;lt;h1&amp;gt;WebSocket &amp;lt;small&amp;gt;연결 테스트&amp;lt;/small&amp;gt;&amp;lt;/h1&amp;gt;
	
	&amp;lt;div&amp;gt;
		&amp;lt;button type=&quot;button&quot; class=&quot;in&quot; id=&quot;btnConnect&quot;&amp;gt;연결하기&amp;lt;/button&amp;gt;
		&amp;lt;button type=&quot;button&quot; class=&quot;out&quot; id=&quot;btnDisConnect&quot;&amp;gt;종료하기&amp;lt;/button&amp;gt;
	&amp;lt;/div&amp;gt;
	&amp;lt;hr&amp;gt;
	
	&amp;lt;div&amp;gt;
		&amp;lt;input type=&quot;text&quot; class=&quot;long&quot; id=&quot;msg&quot;&amp;gt;
		&amp;lt;button type=&quot;button&quot; id=&quot;btnMsg&quot;&amp;gt;보내기&amp;lt;/button&amp;gt;
	&amp;lt;/div&amp;gt;
	
	&amp;lt;div class=&quot;message full&quot;&amp;gt;&amp;lt;/div&amp;gt;
	&amp;lt;script src=&quot;https://code.jquery.com/jquery-1.12.4.js&quot; &amp;gt;&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;test.jsp (JavaScript)&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1740030106543&quot; class=&quot;xml&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;	&amp;lt;script&amp;gt;
		const url = 'ws://localhost:8090/socket/testserver.do';
		
		let ws; //웹 소켓 참조 변수
        
		$('#btnConnect').click(function() {
			
			ws = new WebSocket(url);
			
			ws.onopen = function(evt) {
				log('서버와 연결하였습니다.');
			};
			
			ws.onclose = function(evt) {
				log('서버와 연결이 종료되었습니다.');
			};
			
			ws.onmessage = function(evt) {
				log(evt.data);
			};
			
			ws.onerror = function(evt) {
				log('에러가 발생했습니다.' + evt);
			};
		});
		
		$('#btnDisConnect').click(function() {
			ws.close();
			log('서버와 연결 종료를 시도합니다.');
			
		});
		
		function log(msg) {
			$('.message').prepend(`
				&amp;lt;div&amp;gt;[\${new Date().toLocaleTimeString()}] \${msg}&amp;lt;/div&amp;gt;		
			`);
		}
		
		$('#btnMsg').click(function() {
			ws.send($('#msg').val());
			log('메시지를 전송했습니다.');
			
			$('#msg').val('');
		});
		
	&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;const&amp;nbsp;url&amp;nbsp;=&amp;nbsp;'ws://localhost:8090/socket/testserver.do';&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;클라이언트와 서버 연결 할 때는 'http' 이 아닌 WebSocket&lt;span&gt;&amp;nbsp;&lt;/span&gt;의 약자인 '&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ws&lt;/b&gt;&lt;/span&gt;' 프로토콜을 사용한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;위 주소 중 testserver.do는 서버의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;@ServerEndpoint&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;와 연결하여&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;클라이언트에서 서버를 매핑하는 역할&lt;/u&gt;을 한다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ws&amp;nbsp;=&amp;nbsp;new&amp;nbsp;WebSocket(url);&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;WebSocket&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;메소드를 사용하면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;소켓 생성과 동시에 서버에 접속 시도&lt;/u&gt;한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;웹 소켓 이벤트&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;웹 소켓에는 각종 행위들이 이벤트로 구현되어있어, 클라이언트는 비동기 방식으로 다른 업무를 하다가 이벤트로 연락 오는 것을 확인할 수 있다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ws.onopen&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;: 서버측에서&amp;nbsp;소켓&amp;nbsp;연결을&amp;nbsp;받아들이고&amp;nbsp;연결이&amp;nbsp;되는&amp;nbsp;순간&amp;nbsp;이벤트가&amp;nbsp;발생한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ws.onclose&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #374151; text-align: left;&quot;&gt;웹 소켓 연결이 닫힐 때 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ws.onmessage&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #374151; text-align: left;&quot;&gt;웹 소켓으로부터 메시지를 수신했을 때 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;ws.onerror&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #374151; text-align: left;&quot;&gt;웹 소켓 통신 중 에러가 발생했을 때 호출된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #374151; text-align: left;&quot;&gt;ws.send($('#msg').val());&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;연결된 서버에게 메시지를 전송할 때는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span style=&quot;color: #409d00;&quot;&gt;&lt;b&gt;ws.send&lt;/b&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;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;메시지를 서버에 전송하고나면 다음 입력을 위해 초기화를 한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;SocketServer.java&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1740030106546&quot; class=&quot;arduino&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;package com.test.server;

@ServerEndpoint(&quot;/testserver.do&quot;)
public class SocketServer {

	@OnOpen
	public void handelOpen() {
		System.out.println(&quot;클라이언트가 접속했습니다.&quot;);
	}
	
	@OnClose
	public void handleClose() {
		System.out.println(&quot;클라이언트가 종료했습니다.&quot;);
	}
	
	@OnMessage
	public String handleMasseage(String msg) {
		System.out.println(&quot;클라이언트가 보낸 메시지: &quot; + msg);
		
		return &quot;(응답)&quot; + msg;
	}
	
	@OnError
	public void handleError(Throwable e) {
		System.out.println(&quot;에러 발생 &quot; + e.getMessage());
	}
	
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;@ServerEndpoint(&quot;/testserver.do&quot;)&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;위에서 클라이언트가 testserver.do 를 매핑하였다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;b&gt;@OnMessage&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;서버 측에서 웹 소켓 이벤트를 처리하기 위해 어노테이션을 사용한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;이 어노테이션은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;클라이언트가 서버에게 메시지를 전송했을 때&lt;/u&gt;(ws.send) 반응하는 이벤트이다.&amp;nbsp;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;전달한 메시지가 매개변수로 설정된다.&lt;/u&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;보통 메소드 이름은 'handle + 이벤트' 으로 작명한다.&lt;/p&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size18&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;317&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dNOW3H/btsMqBr1azJ/kBZS9fTVrHcTdBkRgE3cF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dNOW3H/btsMqBr1azJ/kBZS9fTVrHcTdBkRgE3cF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dNOW3H/btsMqBr1azJ/kBZS9fTVrHcTdBkRgE3cF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdNOW3H%2FbtsMqBr1azJ%2FkBZS9fTVrHcTdBkRgE3cF0%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;755&quot; height=&quot;317&quot; data-origin-width=&quot;755&quot; data-origin-height=&quot;317&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
연결 및 메시지 전송 모습
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;393&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/D4B3o/btsMqP4EWZQ/7DZLkC77Vqyw6ZMKsvvdwK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/D4B3o/btsMqP4EWZQ/7DZLkC77Vqyw6ZMKsvvdwK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/D4B3o/btsMqP4EWZQ/7DZLkC77Vqyw6ZMKsvvdwK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FD4B3o%2FbtsMqP4EWZQ%2F7DZLkC77Vqyw6ZMKsvvdwK%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;745&quot; height=&quot;393&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;393&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
연결, 전송, 연결종료&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/330</guid>
      <comments>https://nizimo.tistory.com/330#entry330comment</comments>
      <pubDate>Thu, 20 Feb 2025 14:42:08 +0900</pubDate>
    </item>
    <item>
      <title>Mac 내장 Apache로 웹서버 운영하기﻿</title>
      <link>https://nizimo.tistory.com/329</link>
      <description>&lt;div style=&quot;color: #333333; text-align: left;&quot;&gt;&lt;a style=&quot;color: #111111;&quot; href=&quot;https://hayjo.tistory.com/16&quot;&gt;
&lt;div&gt;[Internet] Mac 내장 Apache로 웹서버 운영하기&lt;/div&gt;
&lt;/a&gt;
&lt;div&gt;&lt;a style=&quot;color: #888888;&quot; href=&quot;https://hayjo.tistory.com/category/%EC%83%9D%ED%99%9C%EC%BD%94%EB%94%A9/WEBn&quot;&gt;&lt;span&gt;생활코딩/WEBn&lt;/span&gt;&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #000000; color: #888888;&quot;&gt;2020. 8. 21. 21:02&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #333333; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[강의 출처]&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #666666;&quot; href=&quot;https://opentutorials.org/course/3084/18894&quot;&gt;opentutorials.org/course/3084/18894&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737595081285&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bSvulx/hyHbMebBQt/KGJTPdfokSWpQk1rLW9W5k/img.jpg?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/bsH2gM/hyHdrBZSDu/rNklRxmkmgX92N3ZUVLPz1/img.jpg?width=640&amp;amp;height=360&amp;amp;face=0_0_640_360,https://scrap.kakaocdn.net/dn/mTTXo/hyHdz0556Q/hsQ4Vuv7ygJoSUPyR9kBvK/img.jpg?width=507&amp;amp;height=360&amp;amp;face=0_0_507_360&quot; data-og-url=&quot;https://opentutorials.org/course/3084/18894&quot; data-og-source-url=&quot;https://opentutorials.org/course/3084/18894&quot; data-og-host=&quot;opentutorials.org&quot; data-og-description=&quot;자신의 운영체제에 맞는 수업을 찾아서 학습해주세요. 맥에 웹서버 설치하기 웹서버와 http&amp;nbsp; 웹브라우저와 웹서버의 통신 --- 맥에 웹서버 설치 이번 시간에는 아파치 웹서버를 맥 컴퓨터에 설치&quot; data-og-title=&quot;웹서버 운영하기 : 맥 - 생활코딩&quot; data-og-type=&quot;university&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://opentutorials.org/course/3084/18894&quot; data-source-url=&quot;https://opentutorials.org/course/3084/18894&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;웹서버 운영하기 : 맥 - 생활코딩&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;자신의 운영체제에 맞는 수업을 찾아서 학습해주세요. 맥에 웹서버 설치하기 웹서버와 http&amp;nbsp; 웹브라우저와 웹서버의 통신 --- 맥에 웹서버 설치 이번 시간에는 아파치 웹서버를 맥 컴퓨터에 설치&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;opentutorials.org&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;hr contenteditable=&quot;false&quot; data-ke-style=&quot;style3&quot; data-ke-type=&quot;horizontalRule&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;생활코딩 Web1 Internet편에 직접 웹서버를 운영해보는 단계가 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생활코딩에서는 bitnami라는 프로그램을 통해 실습을 하는데, 아래와 같은 문구가 있는 게 아닌가.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;맥에는 아파치가 기본적으로 깔려있습니다. 그래서 실습을 하기가 무척 쉽습니다.&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 직접 해보기로 했다. 맥에 기본적으로 깔려 있는 아파치로 웹서버를 돌려보자!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 style=&quot;color: #000000;&quot; data-ke-size=&quot;size26&quot;&gt;Mac&amp;nbsp;내장&amp;nbsp;Apache로&amp;nbsp;웹서버&amp;nbsp;운영하기&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 먼저 Google 검색을 해보았다. '맥 아파치'.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 글들이 많이 나오는데, 가장 많이 참조한 것은 이쪽:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #666666;&quot; href=&quot;https://xho95.github.io/macos/apache/webserver/mod_wsgi/2016/10/02/Apache-WebServer.html&quot;&gt;xho95.github.io/macos/apache/webserver/mod_wsgi/2016/10/02/Apache-WebServer.html&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #666666;&quot; href=&quot;https://88240.tistory.com/476&quot;&gt;88240.tistory.com/476&lt;/a&gt;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;1. 맥 터미널에서 '아파치'와 'php' 버전을 확인한다.&lt;/h3&gt;
&lt;pre id=&quot;code_1737595081286&quot; class=&quot;elixir&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;$ apachectl -v
$ php -v&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 경우에는 아파치 2.4.41 버전, php 7.3.11 버전이 설치되어 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;2. 아파치를 실행한다.&lt;/h3&gt;
&lt;pre id=&quot;code_1737595081286&quot; class=&quot;crmsh&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;$ sudo apachectl start&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;sudo 권한이라서 password를 묻는 단계가 있다. 접속한 맥 계정 비밀번호를 입력하니 확인완료.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;3. 브라우저에서 localhost로 접속해본다. (혹은 127.0.0.1)&lt;/h3&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2020-08-21 at 6.27.08 PM.png&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;166&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c3j8UK/btsLXVLhAqc/dFLoyS0L9oqqwokEBGk2y1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c3j8UK/btsLXVLhAqc/dFLoyS0L9oqqwokEBGk2y1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c3j8UK/btsLXVLhAqc/dFLoyS0L9oqqwokEBGk2y1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc3j8UK%2FbtsLXVLhAqc%2FdFLoyS0L9oqqwokEBGk2y1%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;425&quot; height=&quot;166&quot; data-filename=&quot;Screen Shot 2020-08-21 at 6.27.08 PM.png&quot; data-origin-width=&quot;425&quot; data-origin-height=&quot;166&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
사파리에서 localhost를 입력한 결과. 아파치의 기본 indexl.html 파일이다.
&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;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;4. index.html 파일 찾기 (생활코딩 Web1 웹서버 실습)&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 아까 출력되었던 'It works!' 파일이 어디에 있는지 알아보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;/Library/WebServer/Documents&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;디렉토리라고 한다. 해당 디렉토리로 이동 후 Finder로 열어보았다.&lt;/p&gt;
&lt;pre id=&quot;code_1737595081287&quot; class=&quot;shell&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;$ cd /Library/WebServer/Documents
$ open .&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 디렉토리로&amp;nbsp; 이동하니, 이런 이름의 파일이 있다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2020-08-21 at 6.34.09 PM.png&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;210&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cNobWb/btsLWvmt1qv/Y5axBhRDkiVGDQ9veE97ok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cNobWb/btsLWvmt1qv/Y5axBhRDkiVGDQ9veE97ok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cNobWb/btsLWvmt1qv/Y5axBhRDkiVGDQ9veE97ok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcNobWb%2FbtsLWvmt1qv%2FY5axBhRDkiVGDQ9veE97ok%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;202&quot; height=&quot;210&quot; data-filename=&quot;Screen Shot 2020-08-21 at 6.34.09 PM.png&quot; data-origin-width=&quot;202&quot; data-origin-height=&quot;210&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
/Library/WebServer/Documents/index.html
&lt;p data-ke-size=&quot;size16&quot;&gt;에디터로 열어보니, 아래와 같이 작성되어 있다. html문서다.&lt;/p&gt;
&lt;pre id=&quot;code_1737595081287&quot; class=&quot;xml&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;html&amp;gt;&amp;lt;body&amp;gt;&amp;lt;h1&amp;gt;It works!&amp;lt;/h1&amp;gt;&amp;lt;/body&amp;gt;&amp;lt;/html&amp;gt;
&lt;/code&gt;&lt;/pre&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;&quot;htdocs 디렉터리의 파일들을 모두 삭제하고, 프로젝트 폴더에 있는 파일을 복사합니다.&quot;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;340&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZmtV9/btsLWRQnids/kbzpOWmSkSCjPTCrmqv7fK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZmtV9/btsLWRQnids/kbzpOWmSkSCjPTCrmqv7fK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZmtV9/btsLWRQnids/kbzpOWmSkSCjPTCrmqv7fK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZmtV9%2FbtsLWRQnids%2FkbzpOWmSkSCjPTCrmqv7fK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;523&quot; height=&quot;340&quot; data-origin-width=&quot;523&quot; data-origin-height=&quot;340&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;여기의 index.html 파일만 교체해도 목적은 이룰 수 있을 것 같다. 시도해 본다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;index.html.en 파일을 다른 곳으로 이동하고, 내가 작성했던 파일을 복사해온 다음, 다시 localhost에 접속해보았다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2020-08-21 at 6.40.19 PM.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;518&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqVbFi/btsLWZUXSjv/84LaOhS4bres502bgH5CgK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqVbFi/btsLWZUXSjv/84LaOhS4bres502bgH5CgK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqVbFi/btsLWZUXSjv/84LaOhS4bres502bgH5CgK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqVbFi%2FbtsLWZUXSjv%2F84LaOhS4bres502bgH5CgK%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;450&quot; height=&quot;518&quot; data-filename=&quot;Screen Shot 2020-08-21 at 6.40.19 PM.png&quot; data-origin-width=&quot;450&quot; data-origin-height=&quot;518&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
생활코딩 Web1을 들으면서 직접 만들었던 웹페이지.
&lt;p data-ke-size=&quot;size16&quot;&gt;성공! 링크로 연결해뒀던 페이지들 간의 이동도 의도대로 잘 실행되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와이파이로 연결되어있는 스마트폰으로도 접속해보았다. 무사히 실행된다!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까지 하면 생활코딩 범위는 끝.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는... 이 루트는 일반적인 방법으로 파일 삭제가 안 될 뿐더러, 웹서버는 이렇게 운영하는 게 아닐 것 같다는 불안감이 든다는 것.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아까 테스트했던 파일들은 급한대로 sudo rm으로 하나하나 지웠다. 그냥 rm을 입력하면 Permission denied가 뜬다.&lt;/p&gt;
&lt;pre id=&quot;code_1737595081288&quot; class=&quot;axapta&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;$ sudo rm index.html&lt;/code&gt;&lt;/pre&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;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;5. 환경설정 하기: userdir 활성화하기&amp;nbsp; or&amp;nbsp; DocumentRoot 폴더 변경하기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통은 위의 두 가지 방법으로 세팅을 하는 것 같다. 나는 이 중 userdir 활성화를 택하기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;userdir 활성화의 이점은 localhost/~username처럼 하위 링크를 얻을 수 있다는 것. 방법은 아래와 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;1.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;/private/etc/apache2/extra&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;디렉토리의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;httpd-userdir.conf&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일을 편집&lt;/h4&gt;
&lt;pre id=&quot;code_1737595081288&quot; class=&quot;shell&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;$ cd /private/etc/apache2/extra
$ sudo vi httpd-userdir.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-httpd-userdir.conf 파일에서 '#&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;Include /private/etc/apache2/users/*.conf&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;마찬가지로 sudo 권한이라서 password 요청이 들어올 수 있다. 패스워드를 입력하면 vi 편집기가 뜬다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;vi 편집기에 익숙하지 않아서 조금 헤맸는데, 그래도 아래 링크 등을 참고하면 금방 적응할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #666666;&quot; href=&quot;https://coding-factory.tistory.com/505&quot;&gt;coding-factory.tistory.com/505&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737595081288&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bGIp65/hyHeUP7CHp/eA3JVlirlCmRTvUDsy5XM1/img.png?width=734&amp;amp;height=494&amp;amp;face=0_0_734_494,https://scrap.kakaocdn.net/dn/bicfqU/hyHbx9cfTM/6QFibetFRQ0PRGILF5TpnK/img.png?width=734&amp;amp;height=494&amp;amp;face=0_0_734_494,https://scrap.kakaocdn.net/dn/LM0jT/hyHdxPMsKH/M9le7KQFTwIXaR99ljmHak/img.png?width=734&amp;amp;height=494&amp;amp;face=0_0_734_494&quot; data-og-url=&quot;https://coding-factory.tistory.com/505&quot; data-og-source-url=&quot;https://coding-factory.tistory.com/505&quot; data-og-host=&quot;coding-factory.tistory.com&quot; data-og-description=&quot;파일을 작성하거나 수정하기 위해서는 편집기가 필요합니다. 윈도우에서는 메모장을 편집기의 기본으로 지원하는 반면 리눅스에서는 기본 편집기로 vi 라는 편집기를 지원합니다. vi는 리눅스��&quot; data-og-title=&quot;[Linux] 리눅스 문서 편집기 vi 사용법 &amp;amp; 명령어 총정리&quot; data-og-type=&quot;article&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://coding-factory.tistory.com/505&quot; data-source-url=&quot;https://coding-factory.tistory.com/505&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[Linux] 리눅스 문서 편집기 vi 사용법 &amp;amp; 명령어 총정리&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;파일을 작성하거나 수정하기 위해서는 편집기가 필요합니다. 윈도우에서는 메모장을 편집기의 기본으로 지원하는 반면 리눅스에서는 기본 편집기로 vi 라는 편집기를 지원합니다. vi는 리눅스��&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;coding-factory.tistory.com&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;처음 써본다면 esc, i, :만 기억하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화살표키를 이용해서 편집할 곳으로 커서를 이동한 다음, 키보드 상에서&amp;nbsp; 'i'키 를 누르면 화면 맨 아랫줄에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-- INSERT --&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 표시가 뜬다. 그 상태에서는 텍스트 입력 및 수정이 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수정이 끝났다면 esc를 누르고 나서, ':'를 누르자. (쉬프트도 눌러줘야 한다) 그러면 다시 화면 맨 아랫줄에&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라는 표시가 뜰 것이다. 저장하고 종료할 거라면, 아래처럼 : 뒤에 wq를 입력하고 엔터를 누르면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;:wq&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 터미널 기존 위치로 돌아갈 것이다. 혹시 강제종료하고 싶다면 wq 대신에 q!를 입력하면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;2.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;/private/etc/apache2&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;디렉토리의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;httpd.conf&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일을 편집&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 경우에는 위의 경로에 httpd.conf 파일이 있었다. 이번에는 Atom으로 열어서, 우선 아래 두 줄의 주석처리(#)를 제거하고,&lt;/p&gt;
&lt;pre id=&quot;code_1737595081288&quot; class=&quot;gradle&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;LoadModule userdir_module libexec/apache2/mod_userdir.so
Include /private/etc/apache2/extra/httpd-userdir.conf&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;혹시 모를 ServerName 관련 오류를&lt;span&gt;&amp;nbsp;&lt;/span&gt;피하기 위해, 주석을 제거하고 ServerName 설정을 변경하고 저장했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(Atom의 경우, 저장할 때 Atom Helper가 권한 관련하여 비밀번호를 요청할 수 있다.)&lt;/p&gt;
&lt;pre id=&quot;code_1737595081289&quot; class=&quot;apache&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;ServerName localhost&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;3. Sites 폴더 생성&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;localhost/~username 요청시 베이스로 사용할 디렉토리를 만드는 작업이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/Users/유저명 의 유저명 경로에 Sites 폴더를 만들면 된다. 나는 터미널을 이용했다.&lt;/p&gt;
&lt;pre id=&quot;code_1737595081289&quot; class=&quot;shell&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;$ cd ~
$ mkdir Sites&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #000000;&quot; data-ke-size=&quot;size20&quot;&gt;4. Sites 폴더에 접근 권한 주기&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;/private/etc/apache2/users 경로에 유저명.conf 파일을 만들어주는 작업이다. Guest.conf 파일을 복사해서 내용만 수정해도 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 꽤 고전했다. conf 파일의 내용은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #666666;&quot; href=&quot;https://devmac.tistory.com/11&quot;&gt;여기&lt;/a&gt;를 참고해서 아래와 같이 작성했다.&lt;/p&gt;
&lt;pre id=&quot;code_1737595081289&quot; class=&quot;apache&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;&amp;lt;Directory &quot;/Users/username/Sites/&quot;&amp;gt;
  Options Multiviews Indexes
  Require all granted
&amp;lt;/Directory&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;첫번째 줄의 username을 내 계정명으로 변경한 상태로 저장하고, 아파치를 재시작 후 접속을 시도해보았더니&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2020-08-21 at 7.39.28 PM.png&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DRHkJ/btsLWZm945L/umSBcHIoqe8zBzNxzFBKg1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DRHkJ/btsLWZm945L/umSBcHIoqe8zBzNxzFBKg1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DRHkJ/btsLWZm945L/umSBcHIoqe8zBzNxzFBKg1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDRHkJ%2FbtsLWZm945L%2FumSBcHIoqe8zBzNxzFBKg1%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;454&quot; height=&quot;229&quot; data-filename=&quot;Screen Shot 2020-08-21 at 7.39.28 PM.png&quot; data-origin-width=&quot;454&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
권한이 없어서 접속할 수 없다는 오류페이지. 흔히 말하는 403 에러인듯.
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에러 로그를 찾아보니 이런 메시지가 뜬다.&lt;/p&gt;
&lt;pre id=&quot;code_1737595081289&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;cat /var/log/apache2/error_log # 에러 로그를 찍어보자

(13)Permission denied:  AH00035: access to /~username denied (filesystem path '/Users/username/Sites') because search permissions are missing on a component of the path&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;구글의 도움을 받아 아래와 같은 해결법을 찾았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #666666;&quot; href=&quot;https://mytory.net/archives/3143&quot;&gt;mytory.net/archives/3143&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737595081290&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lSBz0/hyHeRlz2IW/zI4lEApC8pWkEoQ28p5sn1/img.jpg?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600,https://scrap.kakaocdn.net/dn/ujYC9/hyHdztjDfD/P3807p3OWhycy6KYBfpXI0/img.jpg?width=600&amp;amp;height=600&amp;amp;face=0_0_600_600&quot; data-og-url=&quot;https://mytory.net/archives/3143&quot; data-og-source-url=&quot;https://mytory.net/archives/3143&quot; data-og-host=&quot;mytory.net&quot; data-og-description=&quot;아파치에서 웹 서버의 폴더에 접근할 수 없어서 뜨는 에러다. 우선 아파치 환경 설정에서 해당 폴더 접근을 허용하고, 아파치 사용자에게 폴더의 실행 권한과 파일의 읽기 권한을 줘야 한다.&quot; data-og-title=&quot;아파치 Forbidden  You don&amp;rsquo;t have permission to access / on this server. 에러 해결&quot; data-og-type=&quot;website&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://mytory.net/archives/3143&quot; data-source-url=&quot;https://mytory.net/archives/3143&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;아파치 Forbidden You don&amp;rsquo;t have permission to access / on this server. 에러 해결&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;아파치에서 웹 서버의 폴더에 접근할 수 없어서 뜨는 에러다. 우선 아파치 환경 설정에서 해당 폴더 접근을 허용하고, 아파치 사용자에게 폴더의 실행 권한과 파일의 읽기 권한을 줘야 한다.&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;mytory.net&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터미널로 이동해서 Sites 폴더에 권한 755를 부여했다.&lt;/p&gt;
&lt;pre id=&quot;code_1737595081290&quot; class=&quot;shell&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;$ cd ~
$ sudo chmod 755 Sites&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;755 권한은 소유자는 읽기, 쓰기, 실행이 가능하고, 그 외 사용자는 읽기, 실행이 가능한 타입.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여전히 Forbidden이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #666666;&quot; href=&quot;https://apple.stackexchange.com/questions/95660/how-to-fix-403-in-mac-os-x-built-in-apache/136941#136941&quot;&gt;apple.stackexchange.com/questions/95660/how-to-fix-403-in-mac-os-x-built-in-apache/136941#136941&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1737595081290&quot; contenteditable=&quot;false&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/GLe2W/hyHeTX0jKD/JHkkByn0tIa9O5AJv8QxG0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot; data-og-url=&quot;https://apple.stackexchange.com/questions/95660/how-to-fix-403-in-mac-os-x-built-in-apache&quot; data-og-source-url=&quot;https://apple.stackexchange.com/questions/95660/how-to-fix-403-in-mac-os-x-built-in-apache/136941#136941&quot; data-og-host=&quot;apple.stackexchange.com&quot; data-og-description=&quot;I'm trying to set a local environment on my new MacBook Air 13&amp;quot;: built-in Apache with my own DocumentRoot, PHP, and MySQL. I usually update /etc/hosts just to run my local websites with a pretty&quot; data-og-title=&quot;How to fix 403 in Mac OS X built-in Apache?&quot; data-og-type=&quot;website&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://apple.stackexchange.com/questions/95660/how-to-fix-403-in-mac-os-x-built-in-apache/136941#136941&quot; data-source-url=&quot;https://apple.stackexchange.com/questions/95660/how-to-fix-403-in-mac-os-x-built-in-apache/136941#136941&quot;&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;
&lt;p style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;How to fix 403 in Mac OS X built-in Apache?&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;I'm trying to set a local environment on my new MacBook Air 13&quot;: built-in Apache with my own DocumentRoot, PHP, and MySQL. I usually update /etc/hosts just to run my local websites with a pretty&lt;/p&gt;
&lt;p style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;apple.stackexchange.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;httpd.conf 파일의 User 이름을 변경해서 해결할 수 있다고 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1737595081290&quot; class=&quot;crmsh&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;User _www&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 파일을 확인해보니 실제로 User명이 _www로 되어있다. _www를 사용자명으로 변경했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 해당 답변자가 추가로 조언해준 보안 이슈를 해결하고 나서&lt;/p&gt;
&lt;pre id=&quot;code_1737595081290&quot; class=&quot;angelscript&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;Listen 80&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;gt;&lt;/p&gt;
&lt;pre id=&quot;code_1737595081290&quot; class=&quot;angelscript&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;Listen 127.0.0.1:80&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아파치를 재실행해본다.&lt;/p&gt;
&lt;pre id=&quot;code_1737595081290&quot; class=&quot;elixir&quot; style=&quot;background-color: #000000; color: #000000;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;html&quot;&gt;&lt;code&gt;$ sudo apachectl restart&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screen Shot 2020-08-21 at 8.38.49 PM.png&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;419&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tF7wu/btsLXW4rQxz/EtdivqNdokoQs7q4u75VQ0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tF7wu/btsLXW4rQxz/EtdivqNdokoQs7q4u75VQ0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tF7wu/btsLXW4rQxz/EtdivqNdokoQs7q4u75VQ0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtF7wu%2FbtsLXW4rQxz%2FEtdivqNdokoQs7q4u75VQ0%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;424&quot; height=&quot;419&quot; data-filename=&quot;Screen Shot 2020-08-21 at 8.38.49 PM.png&quot; data-origin-width=&quot;424&quot; data-origin-height=&quot;419&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
http://localost/~username/index.html로 접속에 성공했다
&lt;p data-ke-size=&quot;size16&quot;&gt;결과는 성공!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;와이파이 환경 내에서 접속하려면 위의 Listen 127.0.0.1:80 부분을 Listen 80으로 그대로 두어야 한다.&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>study</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/329</guid>
      <comments>https://nizimo.tistory.com/329#entry329comment</comments>
      <pubDate>Thu, 23 Jan 2025 10:18:31 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] Oracle XE에서 사용자 생성 오류, ORA-65096: 공통 사용자 또는 롤 이름이 부적합합니다. invalid common user or role name</title>
      <link>https://nizimo.tistory.com/328</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;[Oracle]&amp;nbsp;Oracle&amp;nbsp;XE에서&amp;nbsp;사용자&amp;nbsp;생성&amp;nbsp;오류,&amp;nbsp;ORA-65096:&amp;nbsp;공통&amp;nbsp;사용자&amp;nbsp;또는&amp;nbsp;롤&amp;nbsp;이름이&amp;nbsp;부적합합니다.&amp;nbsp;invalid&amp;nbsp;common&amp;nbsp;user&amp;nbsp;or&amp;nbsp;role&amp;nbsp;name&lt;br /&gt;by&amp;nbsp;breezyday&amp;nbsp;2022.&amp;nbsp;8.&amp;nbsp;2.&lt;br /&gt;Oracle에서&amp;nbsp;개발&amp;nbsp;및&amp;nbsp;테스트를&amp;nbsp;위해&amp;nbsp;Oracle&amp;nbsp;XE를&amp;nbsp;무료로&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있도록&amp;nbsp;배포하고&amp;nbsp;있습니다.&amp;nbsp;그러나&amp;nbsp;몇&amp;nbsp;가지&amp;nbsp;제약사항들이&amp;nbsp;있는&amp;nbsp;데&amp;nbsp;그중에&amp;nbsp;하나가&amp;nbsp;사용자&amp;nbsp;생성&amp;nbsp;시&amp;nbsp;사용자&amp;nbsp;이름에&amp;nbsp;대한&amp;nbsp;제약이&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;1.&amp;nbsp;ORA-65096&amp;nbsp;:&amp;nbsp;공통&amp;nbsp;사용자&amp;nbsp;또는&amp;nbsp;롤&amp;nbsp;이름이&amp;nbsp;부적합합니다.&lt;br /&gt;CREATE&amp;nbsp;USER&amp;nbsp;C##myuser&amp;nbsp;IDENTIFIED&amp;nbsp;BY&amp;nbsp;pwd123;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Oracle&amp;nbsp;XE에서는&amp;nbsp;system&amp;nbsp;계정으로&amp;nbsp;로그인해서&amp;nbsp;사용자를&amp;nbsp;만들&amp;nbsp;때,&amp;nbsp;C##을&amp;nbsp;붙인&amp;nbsp;사용자는&amp;nbsp;만들&amp;nbsp;수&amp;nbsp;있지만&amp;nbsp;일반&amp;nbsp;이름은&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;없는&amp;nbsp;제약이&amp;nbsp;있습니다.&amp;nbsp;그래서&amp;nbsp;위의&amp;nbsp;SQL은&amp;nbsp;문제가&amp;nbsp;없지만&amp;nbsp;아래와&amp;nbsp;같은&amp;nbsp;일반적인&amp;nbsp;SQL문은&amp;nbsp;오류가&amp;nbsp;발생합니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;CREATE&amp;nbsp;USER&amp;nbsp;my_user&amp;nbsp;IDENTIFIED&amp;nbsp;BY&amp;nbsp;pwd123&lt;br /&gt;DEFAULT&amp;nbsp;TABLESPACE&amp;nbsp;myts&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;위의&amp;nbsp;SQL을&amp;nbsp;실행하면&amp;nbsp;오류가&amp;nbsp;발생하고,&amp;nbsp;오류&amp;nbsp;메시지는&amp;nbsp;아래와&amp;nbsp;같습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;명령의&amp;nbsp;28&amp;nbsp;행에서&amp;nbsp;시작하는&amp;nbsp;중&amp;nbsp;오류&amp;nbsp;발생&amp;nbsp;-&lt;br /&gt;CREATE&amp;nbsp;USER&amp;nbsp;my_user&amp;nbsp;IDENTIFIED&amp;nbsp;BY&amp;nbsp;pwd123&lt;br /&gt;DEFAULT&amp;nbsp;TABLESPACE&amp;nbsp;myts&lt;br /&gt;오류&amp;nbsp;보고&amp;nbsp;-&lt;br /&gt;ORA-65096:&amp;nbsp;공통&amp;nbsp;사용자&amp;nbsp;또는&amp;nbsp;롤&amp;nbsp;이름이&amp;nbsp;부적합합니다.&lt;br /&gt;65096.&amp;nbsp;00000&amp;nbsp;-&amp;nbsp;&amp;nbsp;&quot;invalid&amp;nbsp;common&amp;nbsp;user&amp;nbsp;or&amp;nbsp;role&amp;nbsp;name&quot;&lt;br /&gt;*Cause:&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;An&amp;nbsp;attempt&amp;nbsp;was&amp;nbsp;made&amp;nbsp;to&amp;nbsp;create&amp;nbsp;a&amp;nbsp;common&amp;nbsp;user&amp;nbsp;or&amp;nbsp;role&amp;nbsp;with&amp;nbsp;a&amp;nbsp;name&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;that&amp;nbsp;was&amp;nbsp;not&amp;nbsp;valid&amp;nbsp;for&amp;nbsp;common&amp;nbsp;users&amp;nbsp;or&amp;nbsp;roles.&amp;nbsp;In&amp;nbsp;addition&amp;nbsp;to&amp;nbsp;the&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;usual&amp;nbsp;rules&amp;nbsp;for&amp;nbsp;user&amp;nbsp;and&amp;nbsp;role&amp;nbsp;names,&amp;nbsp;common&amp;nbsp;user&amp;nbsp;and&amp;nbsp;role&amp;nbsp;names&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;must&amp;nbsp;consist&amp;nbsp;only&amp;nbsp;of&amp;nbsp;ASCII&amp;nbsp;characters,&amp;nbsp;and&amp;nbsp;must&amp;nbsp;contain&amp;nbsp;the&amp;nbsp;prefix&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;specified&amp;nbsp;in&amp;nbsp;common_user_prefix&amp;nbsp;parameter.&lt;br /&gt;*Action:&amp;nbsp;&amp;nbsp;&amp;nbsp;Specify&amp;nbsp;a&amp;nbsp;valid&amp;nbsp;common&amp;nbsp;user&amp;nbsp;or&amp;nbsp;role&amp;nbsp;name.&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;2.&amp;nbsp;해결&amp;nbsp;방법&lt;br /&gt;Oracle&amp;nbsp;XE에서&amp;nbsp;제약을&amp;nbsp;걸어두기&amp;nbsp;위해&amp;nbsp;system&amp;nbsp;계정으로&amp;nbsp;로그인할&amp;nbsp;경우&amp;nbsp;SESSION이&amp;nbsp;잠겨진&amp;nbsp;SESSION으로&amp;nbsp;접속하게&amp;nbsp;됩니다.&amp;nbsp;그래서&amp;nbsp;아래&amp;nbsp;명령을&amp;nbsp;사용하여&amp;nbsp;SESSION&amp;nbsp;설정을&amp;nbsp;변경하면&amp;nbsp;기존의&amp;nbsp;SQL&amp;nbsp;구문들을&amp;nbsp;제약&amp;nbsp;없이&amp;nbsp;사용할&amp;nbsp;수&amp;nbsp;있습니다.&lt;br /&gt;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;ALTER&amp;nbsp;SESSION&amp;nbsp;SET&amp;nbsp;&quot;_ORACLE_SCRIPT&quot;=true;&lt;br /&gt;&amp;nbsp;&lt;br /&gt;&lt;br /&gt;Oracle&amp;nbsp;XE에서&amp;nbsp;개발&amp;nbsp;및&amp;nbsp;테스트를&amp;nbsp;하고&amp;nbsp;있는&amp;nbsp;개발자라면&amp;nbsp;system으로&amp;nbsp;로그인해서&amp;nbsp;DDL을&amp;nbsp;다룰&amp;nbsp;경우&amp;nbsp;위&amp;nbsp;명령을&amp;nbsp;먼저&amp;nbsp;실행해주면&amp;nbsp;다른&amp;nbsp;SQL문&amp;nbsp;작업&amp;nbsp;중에도&amp;nbsp;혼돈&amp;nbsp;없이&amp;nbsp;작업을&amp;nbsp;진행할&amp;nbsp;수&amp;nbsp;있겠습니다.&lt;/p&gt;</description>
      <category>study/DB</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/328</guid>
      <comments>https://nizimo.tistory.com/328#entry328comment</comments>
      <pubDate>Sat, 24 Aug 2024 14:12:48 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] 오라클 테이블 스페이스 사용법(조회, 생성, 삭제)등 총정리</title>
      <link>https://nizimo.tistory.com/327</link>
      <description>&lt;div style=&quot;text-align: center;&quot;&gt;
&lt;h1&gt;&lt;a style=&quot;color: #333333;&quot; href=&quot;https://coding-factory.tistory.com/411&quot;&gt;[Oracle] 오라클 테이블 스페이스 사용법(조회, 생성, 삭제)등 총정리&lt;/a&gt;&lt;/h1&gt;
&lt;div style=&quot;color: #666666;&quot;&gt;
&lt;ul style=&quot;list-style-type: disc; text-align: center;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;span&gt;코딩팩토리&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;a style=&quot;color: #666666;&quot; href=&quot;https://coding-factory.tistory.com/category/DB/Oracle&quot;&gt;DB / Oracle&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;2019. 10. 29.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot;&gt;
&lt;div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;text-align: right;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;ul id=&quot;jb-toc&quot; style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a style=&quot;color: #337ab7;&quot; href=&quot;https://coding-factory.tistory.com/411#h&quot;&gt;오라클 테이블 스페이스(Table Space)란 무엇인가?&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a style=&quot;color: #337ab7;&quot; href=&quot;https://coding-factory.tistory.com/411#h_1&quot;&gt;오라클 테이블 스페이스 사용법&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a style=&quot;color: #337ab7;&quot; href=&quot;https://coding-factory.tistory.com/411#h_2&quot;&gt;테이블 스페이스 생성&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a style=&quot;color: #337ab7;&quot; href=&quot;https://coding-factory.tistory.com/411#h_3&quot;&gt;전체 테이블 스페이스 조회&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a style=&quot;color: #337ab7;&quot; href=&quot;https://coding-factory.tistory.com/411#h_4&quot;&gt;전체 테이블 스페이스 경로 및 용량 조회&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a style=&quot;color: #337ab7;&quot; href=&quot;https://coding-factory.tistory.com/411#h_5&quot;&gt;테이블의 테이블 스페이스 변경&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a style=&quot;color: #337ab7;&quot; href=&quot;https://coding-factory.tistory.com/411#h_6&quot;&gt;테이블 스페이스 속성 변경&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a style=&quot;color: #337ab7;&quot; href=&quot;https://coding-factory.tistory.com/411#h_7&quot;&gt;테이블 스페이스 삭제&lt;/a&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc;&quot;&gt;&lt;a style=&quot;color: #337ab7;&quot; href=&quot;https://coding-factory.tistory.com/411#h_8&quot;&gt;테이블 스페이스 작동방식&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;h&quot; data-ke-size=&quot;size26&quot;&gt;오라클 테이블 스페이스(Table Space)란 무엇인가?&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오라클은 데이터를 관리하는 데이터베이스입니다. 데이터를 어딘가에 저장해놓고 사용하는 시스템이라고 볼 수 있습니다. 그리고 데이터 저장 단위 중 가장 상위에 있는 단위를 테이블 스페이스라고 합니다. 데이터 저장 단위는 물리적, 논리적단위로 나눌 수 있습니다. 물리적 단위는 파일을 의미하고 논리적 단위는 데이터블록 -&amp;gt; 익스텐트 -&amp;gt; 세그먼트 -&amp;gt; 테이블스페이스 이렇게 나뉩니다. 데이터 블록 여러개가 모여 익스텐트 하나를 만들고, 익스텐트 여러개가 모여 하나의 세그먼트를 구성하는 식입니다.&amp;nbsp; 테이블 스페이스는&amp;nbsp;가장 상위개념입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;h_1&quot; data-ke-size=&quot;size26&quot;&gt;오라클 테이블 스페이스 사용법&lt;/h2&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dDy6x9/btsJe9TbMZD/f4UnKITZhIdmoknDuk4mok/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dDy6x9/btsJe9TbMZD/f4UnKITZhIdmoknDuk4mok/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dDy6x9/btsJe9TbMZD/f4UnKITZhIdmoknDuk4mok/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdDy6x9%2FbtsJe9TbMZD%2Ff4UnKITZhIdmoknDuk4mok%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;728&quot; height=&quot;302&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;SQL 개발 툴이 있으시면 개발&amp;nbsp; 툴을 실행시키시면 되고 없으시다면 윈도우 실행창을 열고 SQL PLUS를 실행시킨 뒤 System 아이디로 로그인한뒤 테이블 스페이스 설정 작업을 하시면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;h_2&quot; data-ke-size=&quot;size26&quot;&gt;테이블 스페이스 생성&lt;/h2&gt;
&lt;div style=&quot;background-color: #434041;&quot;&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;Copy&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;create&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;table&lt;/span&gt;space [테이블 스페이스명]&lt;/div&gt;
&lt;div&gt;datafile &lt;span style=&quot;color: #98c379;&quot;&gt;'D:\dev\oradata'&lt;/span&gt; &lt;span style=&quot;color: #b18eb1;&quot;&gt;--파일경로&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;size &lt;span style=&quot;color: #d19a66;&quot;&gt;10&lt;/span&gt;M &lt;span style=&quot;color: #b18eb1;&quot;&gt;--초기 데이터 파일 크기 설정&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;autoextend &lt;span style=&quot;color: #f92672;&quot;&gt;on&lt;/span&gt; next &lt;span style=&quot;color: #d19a66;&quot;&gt;10&lt;/span&gt;M &lt;span style=&quot;color: #b18eb1;&quot;&gt;-- 초기 크기 공간을 모두 사용하는 경우 자동으로 파일의 크기가 커지는 기능&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;maxsize &lt;span style=&quot;color: #d19a66;&quot;&gt;100&lt;/span&gt;M &lt;span style=&quot;color: #b18eb1;&quot;&gt;-- 데이터파일이 최대로 커질 수 있는 크기 지정 기본값 = unlimited&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;uniform size &lt;span style=&quot;color: #d19a66;&quot;&gt;1&lt;/span&gt;M &lt;span style=&quot;color: #b18eb1;&quot;&gt;-- EXTENT 한개의 크기를 설정&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;h_3&quot; data-ke-size=&quot;size26&quot;&gt;전체 테이블 스페이스 조회&lt;/h2&gt;
&lt;div style=&quot;background-color: #434041;&quot;&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;Copy&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;select&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;from&lt;/span&gt; dba_tablespaces;&lt;/div&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/d34mtt/btsJfaq284z/UCXMBiSUO0yjEtIIjpZTX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/d34mtt/btsJfaq284z/UCXMBiSUO0yjEtIIjpZTX0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/d34mtt/btsJfaq284z/UCXMBiSUO0yjEtIIjpZTX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fd34mtt%2FbtsJfaq284z%2FUCXMBiSUO0yjEtIIjpZTX0%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;728&quot; height=&quot;91&quot; data-origin-width=&quot;728&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;h_4&quot; data-ke-size=&quot;size26&quot;&gt;전체 테이블 스페이스 경로 및 용량 조회&lt;/h2&gt;
&lt;div style=&quot;background-color: #434041;&quot;&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;Copy&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;SELECT&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;A.TABLESPACE_NAME &quot;테이블스페이스명&quot;,&lt;/div&gt;
&lt;div&gt;A.FILE_NAME &quot;파일경로&quot;,&lt;/div&gt;
&lt;div&gt;(A.BYTES &lt;span style=&quot;color: #f92672;&quot;&gt;-&lt;/span&gt; B.FREE) &quot;사용공간&quot;,&lt;/div&gt;
&lt;div&gt;B.FREE &quot;여유 공간&quot;,&lt;/div&gt;
&lt;div&gt;A.BYTES &quot;총크기&quot;,&lt;/div&gt;
&lt;div&gt;TO_CHAR( (B.FREE &lt;span style=&quot;color: #f92672;&quot;&gt;/&lt;/span&gt; A.BYTES &lt;span style=&quot;color: #f92672;&quot;&gt;*&lt;/span&gt; &lt;span style=&quot;color: #d19a66;&quot;&gt;100&lt;/span&gt;) , &lt;span style=&quot;color: #98c379;&quot;&gt;'999.99'&lt;/span&gt;)&lt;span style=&quot;color: #f92672;&quot;&gt;||&lt;/span&gt;&lt;span style=&quot;color: #98c379;&quot;&gt;'%'&lt;/span&gt; &quot;여유공간&quot;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;FROM&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;(&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;SELECT&lt;/span&gt; FILE_ID,&lt;/div&gt;
&lt;div&gt;TABLESPACE_NAME,&lt;/div&gt;
&lt;div&gt;FILE_NAME,&lt;/div&gt;
&lt;div&gt;SUBSTR(FILE_NAME,&lt;span style=&quot;color: #d19a66;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #d19a66;&quot;&gt;200&lt;/span&gt;) FILE_NM,&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #e6c07b;&quot;&gt;SUM&lt;/span&gt;(BYTES) BYTES&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;FROM&lt;/span&gt; DBA_DATA_FILES&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;GROUP&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;BY&lt;/span&gt; FILE_ID,TABLESPACE_NAME,FILE_NAME,SUBSTR(FILE_NAME,&lt;span style=&quot;color: #d19a66;&quot;&gt;1&lt;/span&gt;,&lt;span style=&quot;color: #d19a66;&quot;&gt;200&lt;/span&gt;)&lt;/div&gt;
&lt;div&gt;)A,&lt;/div&gt;
&lt;div&gt;(&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;SELECT&lt;/span&gt; TABLESPACE_NAME,&lt;/div&gt;
&lt;div&gt;FILE_ID,&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #e6c07b;&quot;&gt;SUM&lt;/span&gt;(NVL(BYTES,&lt;span style=&quot;color: #d19a66;&quot;&gt;0&lt;/span&gt;)) &lt;span style=&quot;color: #f92672;&quot;&gt;FREE&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;FROM&lt;/span&gt; DBA_FREE_SPACE&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;GROUP&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;BY&lt;/span&gt; TABLESPACE_NAME,FILE_ID&lt;/div&gt;
&lt;div&gt;)B&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;WHERE&lt;/span&gt; A.TABLESPACE_NAME&lt;span style=&quot;color: #f92672;&quot;&gt;=&lt;/span&gt;B.TABLESPACE_NAME&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;AND&lt;/span&gt; A.FILE_ID &lt;span style=&quot;color: #f92672;&quot;&gt;=&lt;/span&gt; B.FILE_ID;&lt;/div&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;162&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t0ujW/btsJfHBUbLG/3uqKm9sVeNdLAxTTWnNfF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t0ujW/btsJfHBUbLG/3uqKm9sVeNdLAxTTWnNfF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t0ujW/btsJfHBUbLG/3uqKm9sVeNdLAxTTWnNfF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft0ujW%2FbtsJfHBUbLG%2F3uqKm9sVeNdLAxTTWnNfF1%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;672&quot; height=&quot;162&quot; data-origin-width=&quot;672&quot; data-origin-height=&quot;162&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;h_5&quot; data-ke-size=&quot;size26&quot;&gt;테이블의 테이블 스페이스 변경&lt;/h2&gt;
&lt;div style=&quot;background-color: #434041;&quot;&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;Copy&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;alter&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;table&lt;/span&gt; [테이블명] move tablespace [테이블 스페이스명]&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;h_6&quot; data-ke-size=&quot;size26&quot;&gt;테이블 스페이스 속성 변경&lt;/h2&gt;
&lt;div style=&quot;background-color: #434041;&quot;&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;Copy&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b18eb1;&quot;&gt;-- 해당 테이블스페이스의 물리적인 파일의 이름 또는 위치변경&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;alter&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;table&lt;/span&gt;space rename [A] &lt;span style=&quot;color: #f92672;&quot;&gt;to&lt;/span&gt; [B]&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b18eb1;&quot;&gt;-- 해당 테이블스테이스의 용량을 1024메가로 변경&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;alter&lt;/span&gt; &lt;span style=&quot;color: #f92672;&quot;&gt;table&lt;/span&gt;space [테이블스페이스명] &lt;span style=&quot;color: #f92672;&quot;&gt;add&lt;/span&gt; datafile [추가할데이터파일명] size &lt;span style=&quot;color: #d19a66;&quot;&gt;1024&lt;/span&gt;M;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b18eb1;&quot;&gt;-- 해당 데이터파일경로에 해당하는 테이블스페이스의 크기가 FULL이 되면 자동으로 100메가씩 증가.&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;alter&lt;/span&gt; database datafile [데이터파일경로] &lt;span style=&quot;color: #98c379;&quot;&gt;'autoextend on next 100m maxsize unlmited;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;h_7&quot; data-ke-size=&quot;size26&quot;&gt;테이블 스페이스 삭제&lt;/h2&gt;
&lt;div style=&quot;background-color: #434041;&quot;&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;Copy&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b18eb1;&quot;&gt;-- 테이블스페이스 내의 객체(테이블,인덱스등)를 전체 삭제&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;drop&lt;/span&gt; tablespace [테이블 스페이스명] include contents;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b18eb1;&quot;&gt;--테이블스페이스의 모든 세그먼트를 삭제. (데이타가 있는 테이블 스페이스 제외)&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;drop&lt;/span&gt; tablespace [테이블 스페이스명] including contents;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b18eb1;&quot;&gt;--삭제된 테이블스페이스를 참조하는 다른 테이블스페이스의 테이블로부터 참조무결성 제약 조건을 삭제&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;drop&lt;/span&gt; tablespace [테이블 스페이스명] cascade constraints;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #b18eb1;&quot;&gt;--테이블 스페이스의 물리적파일까지 삭제&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;color: #f92672;&quot;&gt;drop&lt;/span&gt; tablespace [테이블 스페이스명] including contents &lt;span style=&quot;color: #f92672;&quot;&gt;and&lt;/span&gt; datafiles;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;h_8&quot; data-ke-size=&quot;size26&quot;&gt;테이블 스페이스 작동방식&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오라클 에서는 테이블스페이스라고 불리우는 테이블이 저장될 공간을 먼저 만들고 나서 테이블을 생성합니다. 테이블에 실질적으로 저장되는 장소라고 생각하시면 됩니다. 이러한 작동방식은 각각의 테이블을 테이블스페이스별로 나누어서 관리와 퍼포먼스의 향상을 가지고 옵니다.&amp;nbsp;테이블스페이스를 생성하면 정의된 용량만큼 미리 확보한 테이블스페이스가 생성되어지고 생성되어진 테이블스페이스에 테이블의 데이타가 저장됩니다. 이렇게 설정된 데이터 스페이스에 용량이 가득차면 오라클 서버가 죽습니다. 그러므로 관리를 잘해주어야합니다. 하지만 또 테이블 스페이스마다 용량을 너무나도 크게 잡아버리면 문제가 되는게 용량을 적게 차지하고 있다고해서 가변적으로 max용량이 줄어들지는 않습니다. 고로 또 용량낭비가 되어버릴 수 있는 문제가 될 수 있습니다..&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;테이블 스페이스는 자동으로 할당해주는 부분이 많아 크게 DBA가 아니라면 건드릴 필요가 없습니다. 아마 그럴 권한도 없으실거에요.&amp;nbsp;자동으로 할당해주는 부분을 간략하게 소개드리자면 만약 테이블 생성 시 테이블&amp;nbsp; 스페이스를 지정해주지 않으면 오라클 서버에서 자동으로 지정해주기도 하고 또 오라클은 유저를 생성하면서 디폴트 테이블 스페이스를 자동으로 지정해줍니다. 테이블을 만들게 되면 그 테이블 스페이스에 들어 가게되고 그 테이블 스페이스는 테이블 스페이스 생성때 설정하는 경로에 위치하게됩니다. DBA가 아니라 오라클을 활용하는 개발자 정도라면&amp;nbsp;크게 신경쓰지 않으셔도 됩니다.&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>study/DB</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/327</guid>
      <comments>https://nizimo.tistory.com/327#entry327comment</comments>
      <pubDate>Sat, 24 Aug 2024 14:11:03 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] 계정 및 테이블스페이스 생성</title>
      <link>https://nizimo.tistory.com/326</link>
      <description>&lt;div id=&quot;SE-a274ece7-ff7e-4378-99b8-13fd187cffb0&quot; style=&quot;background-color: #ffffff; color: #808080; text-align: left;&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;&lt;a style=&quot;color: #808080;&quot; href=&quot;https://blog.naver.com/PostList.naver?blogId=tawoo0&amp;amp;categoryNo=11&amp;amp;from=postList&quot;&gt;DB&lt;/a&gt;&lt;/div&gt;
&lt;div style=&quot;color: #434343;&quot;&gt;
&lt;div&gt;
&lt;p id=&quot;SE-67765a9f-013e-42ed-977d-fc6438566f97&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;[Oracle] 계정 및 테이블스페이스 생성&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;text-align: left;&quot;&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;90&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bjQgWs/btsJdxH4IAo/4LLmDzWdrw4ILXUBj2dPmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bjQgWs/btsJdxH4IAo/4LLmDzWdrw4ILXUBj2dPmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bjQgWs/btsJdxH4IAo/4LLmDzWdrw4ILXUBj2dPmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbjQgWs%2FbtsJdxH4IAo%2F4LLmDzWdrw4ILXUBj2dPmK%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;90&quot; height=&quot;90&quot; data-origin-width=&quot;90&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;span&gt;&lt;span&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&lt;a style=&quot;color: #808080;&quot; href=&quot;https://blog.naver.com/tawoo0&quot;&gt;tawoo0&lt;/a&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;i&gt;・&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;span style=&quot;color: #808080;&quot;&gt;2019. 5. 27. 14:59&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;&lt;a id=&quot;copyBtn_221547724506&quot; style=&quot;color: #808080;&quot; href=&quot;https://blog.naver.com/PostView.naver?blogId=tawoo0&amp;amp;logNo=221547724506&amp;amp;redirect=Dlog&amp;amp;widgetTypeCall=true&amp;amp;topReferer=https%3A%2F%2Fwww.google.com%2F&amp;amp;trackingCode=external&amp;amp;directAccess=false#&quot;&gt;URL 복사&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #808080; text-align: center;&quot; href=&quot;https://blog.naver.com/PostView.naver?blogId=tawoo0&amp;amp;logNo=221547724506&amp;amp;redirect=Dlog&amp;amp;widgetTypeCall=true&amp;amp;topReferer=https%3A%2F%2Fwww.google.com%2F&amp;amp;trackingCode=external&amp;amp;directAccess=false#&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이웃추가&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;
&lt;div&gt;&lt;a style=&quot;color: #808080;&quot; href=&quot;https://blog.naver.com/PostView.naver?blogId=tawoo0&amp;amp;logNo=221547724506&amp;amp;redirect=Dlog&amp;amp;widgetTypeCall=true&amp;amp;topReferer=https%3A%2F%2Fwww.google.com%2F&amp;amp;trackingCode=external&amp;amp;directAccess=false#&quot;&gt;&lt;span&gt;본문 기타 기능&lt;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #808080; text-align: left;&quot;&gt;
&lt;div id=&quot;SE-6d1d60ca-a7d3-4fdf-9d76-7dde16d6a606&quot;&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;p id=&quot;SE-4904b19a-1d0b-43d1-9648-0cdabc55f0f8&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;*계정 생성 및 테이블 스페이스 생성&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-85d469c3-ba0e-4067-875d-d301c5ae1e2f&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1. 오라클 sys 계정으로 접속한다. cmd창에서 바로 접속시 &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d9836756-85fd-4717-8e4c-ea46d20afaa9&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;C:\&amp;gt;sqlplus&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3bbe0eb0-540b-4bcd-a269-80fac83d3c4d&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;계정 system &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-7efb4b23-9b02-4d31-aa01-d38ec511f222&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;비번 bims&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-53894824-0b09-4d3a-beda-a33847d7c166&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-9557f8b8-6fbd-4b31-bc0f-c92b0a267ca9&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;2. 테이블 스페이스 생성&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a6e3c7c5-a115-4568-8d97-659091802a53&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;create tablespace 테이블스페이스명&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-72e98f63-bf26-477c-af7c-b193a53ebed0&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;datafile '/경로/테이블스페이스파일명.dbf'&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-31346a4f-0677-4aeb-8594-9d60277ada9c&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;size 초기용량(100m,1g 등) reuse&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-93da1efd-8d93-4029-bed1-b3914348be8e&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;autoextend on next 자동증가 용량&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-eebd04b1-ee13-4c84-8b2e-bb1e5c3f9ff6&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;maxsize unlimited;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3bb053cd-fc11-4757-b3b8-385f8e3e8f6d&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ex)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-722fab3d-bbf9-4d35-8a2c-fe80dde01c23&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;create tablespace ASQ_DATA2&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0ac39f6c-1c41-4fc3-8add-4f80ef7d4b1d&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;datafile '/home/oracle/tablespace/ASQ_DATA2.dbf'&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-af2dba32-3041-41ce-9125-431fc5c3c3c8&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;size 300m reuse&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e600a7b8-a074-4d60-83f1-62eecf101953&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;autoextend on next 1024k&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3cd4a97e-07d2-4a22-aa01-2ede0aa093de&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;maxsize unlimited;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-614ace5b-86ff-4b81-8c25-df2d04825d78&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-0f127238-8474-48e7-8b2c-8ba243fe7205&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;3. sys계정 접속후 유저계정생성&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6462402c-b8ba-4b58-a458-78cdcd88a621&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;create user 유저명 identified by 패스워드 default tablespace 테이블스페이스명;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3bd4ec88-348c-45ab-990e-2a08cfb4bf51&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ex) create user KBN2 identified by KBN2 default tablespace ASQ_DATA2;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a8302944-4349-4bd2-922e-54864d70270e&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;create user 유저명 identified by 패스워드 default tablespace 테이블스페이스명 TEMPORARY TABLESPACE 정렬용테이블스에스명;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8f7fc920-d341-460a-ae14-09e6fd9378d4&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ex) create user KBN2 identified by KBN2 default tablespace kbn_tablespace TEMPORARY TABLESPACE temp;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-bd481e67-7c30-42d6-8bb7-a9560bd51e2c&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c99577ae-78b6-40da-8fca-ccfb2a14334f&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;4.생성한계정 권한부여 &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c284548f-3cbf-4dc5-8cbf-0a3f06179f0e&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;grant connect, resource to 유저명;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c944e1f8-44aa-4b91-9ef3-4d83734e826e&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ex)grant connect, resource to KBN2;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-96e0e810-3cbb-4769-80e3-270098c21e78&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt; grant connect, resource,dba to tawoo0;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-538a9e3b-fd98-4827-ac4c-51163d461f92&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-e758c702-80ac-4e0a-a05f-698c089d88e5&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;5.유저 계정 삭제시&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-33c831be-b7b9-42b8-ac4b-fb878767b53d&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;drop user 삭제할계정 cascade&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-a74ad651-f928-4601-b108-87d322d96d5b&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ex)drop user KBN2 cascade;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-3dbb8aab-42ba-4e63-9580-24e7246e9caa&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;cf) 유저 계정을 삭제하고 테이블스페이스를 삭제하고 테이블스페이스 파일을 삭제하면 mysql의 drop database DB명과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-cef821ca-fc92-452a-9c1a-3d996d25ce94&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-16a1be52-8e2c-4d0f-a9a9-6e1dce6af6cd&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;6. 유저 권한 회수&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d127acf1-3c29-4880-b59f-b382d2ab82a0&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;revoke 권한 from 유저명;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2dd17acb-9ba7-495f-b56d-82d950cd3395&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;revoke dba from user1;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d2d4982f-f2ac-4ad8-8671-092e147cd305&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-1bf0bb15-57c8-4d11-b681-33c5c70a7a2e&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;7. 테이블스페이스 삭제&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-6881d359-a535-45e9-980e-a4e97095366f&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;DROP TABLESPACE 테이블스페이스이름 INCLUDING CONTENTS;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-01cd6f77-1631-44d7-97a6-4f8741c9e2c0&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;ex) DROP TABLESPACE kbn_talbespace INCLUDING CONTENTS;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-db10dc98-3f4a-4a16-b09b-473572b0bc33&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-8b732744-6dd0-4586-a6b2-3b7659eb14a5&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;** 권한 종류&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-436a39ac-7a09-4346-bb5f-ccc372dee125&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;1). CONNECT : 사용자가 데이터베이스에 접속 가능하도록 하기 위해 다음과 같이 가장 기본적인 시스템 권한 &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-2a5d1cf9-d7a8-4cf5-9467-c0a4589de10b&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;8가지를 묶어 놓았습니다. (ALTER SESSION, CREATE CLUSTER, CREATE DATABASE LINK, CREATE SEQUENCE, &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-d4d72d49-2f5a-44cc-bfb0-23f284984203&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CREATE SESSION, CREATE SYNONYM, CREATE TABLE, CREATE VIEW)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-f8d99118-e3a7-4ec8-ae17-1686e6c5a29e&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-15b274e6-c8b8-4f38-a9af-6eff815d63a6&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;2). RESOURCE : 사용자 객체(테이블, 뷰, 인덱스)를 생성할 수 있도록 하기위해서 시스템 권한을 묶어 놓았습니다. (CREATE CLUSTER, CREATE PROCEDURE, CREATE SEQUENCE, CREATE TABLE, CREATE TRIGGER)&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b3c3d290-379e-410d-8161-c366fa2d6f2d&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;​&lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-c9db64bf-a9da-4ce8-9d76-59c1c50272b5&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;3). DBA : 사용자들이 소유한 데이터베이스를 관리하고 사용자들을 작성하고 변경하고 제거할 수 있도록 하는 &lt;/span&gt;&lt;/p&gt;
&lt;p id=&quot;SE-b5f39b58-374d-4a7d-9d0a-86d43b44c3a0&quot; style=&quot;color: #000000; text-align: var(--se-text-default-value-text-align);&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;모든 권한을 가집니다. &lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>study/DB</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/326</guid>
      <comments>https://nizimo.tistory.com/326#entry326comment</comments>
      <pubDate>Sat, 24 Aug 2024 13:43:36 +0900</pubDate>
    </item>
    <item>
      <title>IMP EXP</title>
      <link>https://nizimo.tistory.com/325</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;참고 : http://www.gurubee.net/lecture/1160&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 옵션&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; - userid : EXPORT를 실행시키고 있는 username/password 명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - file : 생성되는 EXPORT덤프 파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - full : 전체 데이터베이스를 EXPORT할것인가의 여부 (Full Level EXPORT) (Y/N 플래그)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - owner : EXPORT 될 데이터베이스의 소유자 명 (User Level EXPORT)[owner=user]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - tables : EXPORT될 테이블의 리스트(Table Level EXPORT) [tables=(table1, table2, ...)]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - log : EXPORT 실행 과정을 지정된 로그 파일에 저장&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. Full Level EXPORT&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; exp &amp;nbsp;userid=system/manager file='C:\full.dmp' full=y&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0900ff;&quot;&gt;2. User Level EXPORT&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0900ff;&quot;&gt;&amp;nbsp; 사용자 자신이 만든 모든 오브젝트를 그 user가 EXPORT하는 방법&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0900ff;&quot;&gt;&amp;nbsp; exp userid=scott/tiger &amp;nbsp;file='C:\scott.dmp'&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #0900ff;&quot;&gt;&amp;nbsp; 혹시 비밀번호 특수문자 있을시 :&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;b&gt;&lt;span style=&quot;color: #0900ff;&quot;&gt;&amp;nbsp; exp userid='scott'/'tiger!^' &amp;nbsp;file='C:\scott.dmp'&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; SYSTEM계정으로 특정 user소유의 오브젝트들을 EXPORT 하는 방법&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; exp userid=system/manager owner=scott &amp;nbsp;file='C:\scottuser.dmp'&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Table Level EXPORT&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; SYSTEM계정으로 특정 유저의 table을 EXPORT하는 예제&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 다른 계정으로 EXPORT시 table의 user명까지 지정해야 EXPORT가 성공한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; exp userid=system/manager file='C:exp.dmp' tables=(scott.EMP, scott.DEPT)&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; scott user로 table을 몇 개만EXPORT하는 예제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; 자신의 table을 EXPORT할 때에는 user명을 지정할 필요가 없다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; exp userid=scott/tiger file='C:\exp.dmp' tables=(EMP, DEPT) log=exp.log&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;참고 : http://www.gurubee.net/lecture/1161&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;* IMPORT 옵션&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; - userid : IMPORT를 실생시키는 계정의 username/password 명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - file : IMPORT될 EXPORT 덤프 파일명&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - show : 파일 내용이 화면에 표시되어야 할 것인가를 나타냄(Y/N 플래그)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - ignore : IMPORT중 CREATE명령을 실행할 때 만나게 되는 에러들을 무시할 것인지 결정(Y/N 플래그)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - full : FULL엑스포트 덤프 파일이 IMPORT 할때 사용한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - tables : IMPORT될 테이블 리스트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - commit : 배열(배열의 크기는 BUFFER에 의해 설정됩니다) 단위로 COMMIT을 할것인가 결정 기본적으로는 테이블 단위로 COMMIT을 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - fromuser : EXPORT덤프 파일로 부터 읽혀져야 하는 객체들을 갖고 있는 테이터베이스 계정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; - touser : EXPORT덤프 안에 있는 객체들이 IMPORT될 데이터베이스 계정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. IMPORT 예제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;전체 데이터베이스가 IMPORT(Full Level Export file을 Import)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;imp userid=system/manager file='C:\full.dmp' &amp;nbsp;full=y&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;User Level Export file을 Import&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;imp userid=scott/tiger file='C:\scott.dmp'&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;User Level Export file을 다른 계정으로 IMPORT&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;scott 유저의 데이터를 EXPORT받아 test 유저에게 IMPORT하는 예제&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;exp userid=system/manager file='C:\scott.dmp' owner=scott&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;&lt;b&gt;&lt;span style=&quot;color: #0900ff;&quot;&gt;imp userid=system/manager file='C:\scott.dmp' fromuser=scott touser=test &amp;nbsp;&lt;/span&gt;&lt;/b&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출처: &lt;a href=&quot;https://godlvkhj.tistory.com/215&quot;&gt;https://godlvkhj.tistory.com/215&lt;/a&gt; [하은양 믿음군 효실맘 호홍홍집s:티스토리] &lt;/p&gt;</description>
      <category>study/DB</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/325</guid>
      <comments>https://nizimo.tistory.com/325#entry325comment</comments>
      <pubDate>Sat, 24 Aug 2024 13:22:37 +0900</pubDate>
    </item>
    <item>
      <title>Docker에서 파일 복사 기능 이용하기</title>
      <link>https://nizimo.tistory.com/324</link>
      <description>&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. Docker&lt;/h2&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;우선 도커가 설치되어있어야 합니다.&lt;br /&gt;도커 설치는 기존 포스팅을 참고 해주시기 바랍니다!&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #555555; text-align: start;&quot;&gt;&lt;code&gt;$ docker -v
Docker version 20.10.17, build 100c701&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;도커 버전을 확인합니다.&lt;br /&gt;도커가 정상 설치되었으므로 본격적으로 테스트에 사용할 Alpine 리눅스를 설치해 보겠습니다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #555555; text-align: start;&quot;&gt;&lt;code&gt;docker pull alpine&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이미지 부터 다운로드 해줍니다.&lt;/p&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;color: #555555; text-align: start;&quot;&gt;&lt;code&gt;docker run -d -it --name alpine-container alpine:latest sh&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그다음 테스트에 사용할 알파인 리눅스 컨테이너를 생성해줍니다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. Docker 컨테이너로 파일 복사하기&lt;/h2&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;호스트에 있는 파일을 도커 컨테이너의 특정 경로로 복사하는 명령어는 다음과 같다.&lt;/p&gt;
&lt;pre class=&quot;xml&quot; style=&quot;color: #555555; text-align: start;&quot;&gt;&lt;code&gt;docker cp &amp;lt;복사할 파일 경로&amp;gt; &amp;lt;컨테이너 이름&amp;gt;:&amp;lt;컨테이너 내부 파일 경로&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만일 호스트에 있는 test.txt 파일을 컨테이너의&lt;span&gt;&amp;nbsp;&lt;/span&gt;/test&lt;span&gt;&amp;nbsp;&lt;/span&gt;경로로 복사한다면, 다음과 같이 사용한다.&lt;/p&gt;
&lt;pre class=&quot;cmake&quot; style=&quot;color: #555555; text-align: start;&quot;&gt;&lt;code&gt;docker cp test.txt alpine-container:/test&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만일 디렉토리를 옮기고 싶을때는 어떻게 해야할까?&lt;br /&gt;디렉토리를 복사하는 경우도 별다른 옵션없이 복사가 가능하다.&lt;/p&gt;
&lt;h2 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3. Docker 컨테이너에서 파일 가져오기&lt;/h2&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그럼 반대로 도커 컨테이너에 있는 파일을 호스트로 가져오려면 어떻게 해야할까?&lt;br /&gt;매우 단순하다. 파일 경로와 컨테이너의 경로를 바꿔주면 된다.&lt;/p&gt;
&lt;pre class=&quot;xml&quot; style=&quot;color: #555555; text-align: start;&quot;&gt;&lt;code&gt;docker cp &amp;lt;컨테이너 이름&amp;gt;:&amp;lt;컨테이너 내부 파일 경로&amp;gt; &amp;lt;복사할 파일 경로&amp;gt; &lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만일 도커 컨테이너의 test.txt 파일을 호스트의 경로인&lt;span&gt;&amp;nbsp;&lt;/span&gt;/test&lt;span&gt;&amp;nbsp;&lt;/span&gt;으로 복사를 원한다면, 다음과 같이 사용한다.&lt;/p&gt;
&lt;pre class=&quot;cmake&quot; style=&quot;color: #555555; text-align: start;&quot;&gt;&lt;code&gt;docker cp alpine-container:/test.txt /test/&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;역시 동일하게 디렉토리도 별다른 옵션없이 복사가 가능하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker ps&amp;nbsp;&lt;br /&gt;실행중이 도커 보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker ps -a&lt;br /&gt;전체 도커 보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker rm [컨테이너 id]&lt;br /&gt;도커에서 컨테이너 삭제 하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker images&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker rmi[이미지id]&lt;br /&gt;도커 이미지 삭제 하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker rmi -f [이미지id]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>study/DB</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/324</guid>
      <comments>https://nizimo.tistory.com/324#entry324comment</comments>
      <pubDate>Sat, 24 Aug 2024 13:16:15 +0900</pubDate>
    </item>
    <item>
      <title>docker 라는 것을 처음 접하고, &amp;quot;container에 어떻게 접속하지?&amp;quot;</title>
      <link>https://nizimo.tistory.com/323</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;일단 docker 라는 것을 처음 접하고,&amp;nbsp;container를 실행해 본 후&amp;nbsp;가장 당황 스러웠던 것은&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;i&gt;&lt;span&gt;&quot;container에 어떻게 접속하지?&quot;&lt;/span&gt;&lt;/i&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;였다. ( 필자는 그랬다.. )&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;일단 container 자체가 하나의 Proccess 였기에 container가 daemon으로&amp;nbsp;실행하고 나면 여기에 어떻게 접속해야할지 난감한 상황이..&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #eeeeee;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;root@~~# docker ps -a&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;CONTAINER ID&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; IMAGE &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; COMMAND &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; CREATED &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; STATUS&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; PORTS&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; NAMES&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;c456623003b1&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;span&gt;nimmis/apache &lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;&quot;/my_init&quot;&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;40 seconds ago&lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;Up 39 seconds &lt;/span&gt;&lt;span&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &lt;/span&gt;&lt;span&gt;0.0.0.0:8080-&amp;gt;80/tcp &lt;/span&gt;&lt;span&gt;&amp;nbsp; &lt;/span&gt;&lt;span&gt;high_ritchie &lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;text-align: left;&quot;&gt;[ &lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;Status가 Up 상태인거 보니 뭔가 실행 중이다.&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;text-align: left;&quot;&gt;접속은? ]&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&gt;접속하는 방법은 매우 간단하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;docker exec 명령을 이용하면 된다.&amp;nbsp;&amp;nbsp;docker exec 는&amp;nbsp;container에 특정 명령을&amp;nbsp;실행할 수 있는 것인데 이때 명령을 /bin/bash 라고 하면 된다.&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&gt;우리가 &quot;접속&quot; 하고 싶다는 의미는 해당 container 의 shell 에&amp;nbsp;접속하겠다는 의미이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주의해야할 것은 docker exec 명령을 할때&amp;nbsp;옵션으로 -it 라고 덧붙여 주어야 한다. 이는 STDIN 표준 입출력을 열고 가상 tty (pseudo-TTY) 를 통해 접속하겠다는 의미이다.&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;div style=&quot;background-color: #eeeeee;&quot;&gt;
&lt;p style=&quot;text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;root@~~# docker exec -it &lt;span&gt;&amp;nbsp;c456623003b1 /bin/bash&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 data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;root@c456623003b1:~#&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;/div&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;위와 같이 hostname이 해당 container id로 바뀐 것을 볼 수 있다. 즉, container 내부에 접속한 상태라는 것이다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;마지막으로 접속을 종료할때는 간단히 exit 명령을 통해 가능하다.&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;a href=&quot;https://bluese05.tistory.com/21&quot;&gt;https://bluese05.tistory.com/21&lt;/a&gt; [ㅍㅍㅋㄷ:티스토리]&lt;/p&gt;</description>
      <category>study/DB</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/323</guid>
      <comments>https://nizimo.tistory.com/323#entry323comment</comments>
      <pubDate>Sat, 24 Aug 2024 13:15:00 +0900</pubDate>
    </item>
    <item>
      <title>Docker Container로 Oracle을 띄워서 Database 실행</title>
      <link>https://nizimo.tistory.com/322</link>
      <description>&lt;h1 id=&quot;0-서론&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;0. 서론&lt;/h1&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;데이터베이스전문가(SQLP) 자격증 취득을 위해 공부하던 중, mac M1에 오라클을 띄워서 실습 공부를 해야할 필요가 있었다. 그러나, 맥북 Apple Silicon(M1)에서는 로컬로 오라클을 띄울 수가 없다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그래도, 아래 블로그를 찾아 Docker/Colima를 활용해서 Oracle을 띄울 수 있게 되었다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://shanepark.tistory.com/400&quot;&gt;참고 블로그&lt;/a&gt;&lt;/p&gt;
&lt;h1 id=&quot;1-설치&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;1. 설치&lt;/h1&gt;
&lt;h3 id=&quot;11-colima&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.1 colima&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;docker desktop은 매우 무거운 프로그램이어서, 가벼운 CLI 환경에서 도커를 실행할 수 있는 오픈 소스인 colima를 사용한다.&lt;/p&gt;
&lt;pre class=&quot;mipsasm&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;brew install colima &lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;12-docker&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;1.2 docker&lt;/h3&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;docker desktop은 docker 공식 웹 홈페이지에서 설치할 수 있다.&lt;br /&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.docker.com/products/docker-desktop/&quot;&gt;Docker 웹 홈페이지&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아니면, brew로 설치해도 된다.&lt;/p&gt;
&lt;pre class=&quot;mipsasm&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;# Docker Desktop
brew install --cask docker 

# Docker Engine
brew install docker&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;2-실행&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;2. 실행&lt;/h1&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;colima와 docker 모두 설치 후, colime를 x86_64 환경으로 띄워준다.&lt;/p&gt;
&lt;pre class=&quot;brainfuck&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;colima start --memory 4 --arch x86_64 &lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;정상적으로 실행되고 있는지 확인하려면, docker ps나 images로 확인한다.&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;docker ps
docker images&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;모든 명령어를 포함해서 docker run&lt;br /&gt;아직 미숙한 사람을 위해 컨테이너명까지 명시&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;# 컨테이너명 = oracle으로 명시
docker run --restart unless-stopped --name oracle -e ORACLE_PASSWORD=pass -p 1521:1521 -d gvenzl/oracle-xe 


#-d 를 넣으며 백단에서 계속 실행되...
docker run --name oracle -d -p 1521:1521 jaspeen/oracle-xe-11g&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;3-활용&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;3. 활용&lt;/h1&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;docker log 확인&lt;/p&gt;
&lt;pre class=&quot;nginx&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;# docker logs -f (컨테이너명)
docker logs -f oracle&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;4-db접속&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;4. DB접속&lt;/h1&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;접속정보&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;host: localhost&lt;/li&gt;
&lt;li&gt;database: xe (orcl로 되어 있으면 바꿔줘야 함)&lt;/li&gt;
&lt;li&gt;port: 1521&lt;/li&gt;
&lt;li&gt;user: system&lt;/li&gt;
&lt;li&gt;password: XXXX&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;5-샘플계정&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;5. 샘플계정&lt;/h1&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;도커에는 샘플계정이 포함되어 있지 않기 때문에 만들어줘야 한다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;# 한 줄씩 생성
docker exec -it oracle sqlplus
CREATE USER scott identified by tiger;
GRANT CONNECT, resource, dba to scott;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;생성 후에는 아래 쿼리로 유저가 정상적으로 생성 된 것을 확인&lt;/p&gt;
&lt;pre class=&quot;sql&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;select username from dba_users where username = 'SCOTT';&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;scott-접속&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;SCOTT 접속&lt;/h3&gt;
&lt;pre class=&quot;applescript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;docker exec -it oracle sqlplus&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://velog.io/@gpg/setting-docker-oracle&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@gpg/setting-docker-oracle&lt;/a&gt;&lt;/p&gt;</description>
      <category>study/DB</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/322</guid>
      <comments>https://nizimo.tistory.com/322#entry322comment</comments>
      <pubDate>Wed, 8 May 2024 11:10:38 +0900</pubDate>
    </item>
    <item>
      <title>docker 도커 이미지와 컨테이너 삭제</title>
      <link>https://nizimo.tistory.com/321</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;docker ps&amp;nbsp;&lt;br /&gt;실행중이 도커 보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker ps -a&lt;br /&gt;전체 도커 보기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker rm [컨테이너 id]&lt;br /&gt;도커에서 컨테이너 삭제 하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker images&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker rmi[이미지id]&lt;br /&gt;도커 이미지 삭제 하기&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker rmi -f [이미지id]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>study/DB</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/321</guid>
      <comments>https://nizimo.tistory.com/321#entry321comment</comments>
      <pubDate>Wed, 8 May 2024 11:09:53 +0900</pubDate>
    </item>
    <item>
      <title>DOCKER 로 오라클 띄워주기</title>
      <link>https://nizimo.tistory.com/320</link>
      <description>&lt;div class=&quot;code-body&quot;&gt;
&lt;div class=&quot;line&quot;&gt;$ docker search oracle-xe-11g&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;NAME DESCRIPTION STARS OFFICIAL AUTOMATED&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;oracleinanutshell/oracle-xe-11g 206&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;wnameless/oracle-xe-11g-r2 Oracle Express Edition 11g Release 2 on Ubun&amp;hellip; 79&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;orangehrm/oracle-xe-11g docker container with Oracle Express Editio&amp;hellip; 16 [OK]&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;jaspeen/oracle-xe-11g Fork from sath89/docker-oracle-xe-11g - smal&amp;hellip; 6 [OK]&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;christophesurmont/oracle-xe-11g Clone of the wnameless/oracle-xe-11g. 6&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;ukhomeofficedigital/oracle-xe-11g Oracle Database Express Edition 11g Container 4 [OK]&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;thebookpeople/oracle-xe-11g 3&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;wscherphof/oracle-xe-11g-r2 Oracle&amp;reg; Database Express Edition 11g Release&amp;hellip; 3&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;acktsw/oracle-xe-11g fork from https://hub.docker.com/r/sath89/or&amp;hellip; 2 [OK]&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;mcgregorandrew/oracle-xe-11g Oracle image with password expiry time &lt;span style=&quot;color: #e6c07b;&quot; class=&quot;hljs-built_in&quot;&gt;set&lt;/span&gt; t&amp;hellip; 2&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;alxfduch/oracle-xe-11g-tridion Oracle Express 11g R2 on Ubuntu 16.04 LTS Tr&amp;hellip; 2&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;webdizz/oracle-xe-11g-sa This is a simple image based on sath89/oracl&amp;hellip; 1 [OK]&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;dotcms/oracle-xe-11g 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;zeroturnaround/oracle-xe-11g 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;activeeon/oracle-xe-11g 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;nritholtz/oracle-xe-11g nritholtz/oracle-xe-11g 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;andyrbell/oracle-xe-11g-centos Oracle Express Edition 11g Release 2 on Cent&amp;hellip; 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;gaesi/oracle-xe-11g Based on: oracleinanutshell/oracle-xe-11g 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;switchsoftware/oracle-xe-11g 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;aerisconsulting/oracle-xe-11g Oracle Express 11g R2 on Ubuntu 16.04 LTS (b&amp;hellip; 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;paliari/oracle-xe-11g 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;jark/oracle-xe-11g-r2-cdc 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;avuletica/oracle-xe-11g-r2 Dockerfile of Oracle Database Express Editio&amp;hellip; 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;larmic/oracle-xe-11g Using wnameless/oracle-xe-11g with created u&amp;hellip; 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;toneloc01/oracle-xe-11g Out-of-the-box oralce xe image from ubuntu 1&amp;hellip; 0&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;저 중에 하나를 docker pull 명령을 이용해서 받으면 된다.&lt;/p&gt;
&lt;div class=&quot;code-body&quot;&gt;
&lt;div class=&quot;line&quot;&gt;$ docker pull jaspeen/oracle-xe-11g&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;Using default tag: latest&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;latest: Pulling from jaspeen/oracle-xe-11g&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;Image docker.io/jaspeen/oracle-xe-11g:latest uses outdated schema1 manifest format. Please upgrade to a schema2 image &lt;span style=&quot;color: #f92672;&quot; class=&quot;hljs-keyword&quot;&gt;for&lt;/span&gt; better future compatibility. More information at https://docs.docker.com/registry/spec/deprecated-schema-v1/&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;863735b9fd15: Downloading [=====================&amp;gt; ] 27.89MB/65.67MB&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;4fbaa2f403df: Download complete&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;44be94a95984: Download complete&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;a3ed95caeb02: Download complete&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;05b9ddeb40d9: Download complete&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;b44894d2d2af: Download complete&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;1492d1fc5b9f: Download complete&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;c0f3c6ec8986: Waiting&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;fbfc89a21b1b: Waiting&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;740047056d21: Waiti&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 style=&quot;color: #000000;&quot; data-ke-size=&quot;size23&quot;&gt;오라클 도커 컨테이너 실행&lt;/h3&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;이제 받은 오라클 도커 이미지를 이용해서 오라클 인스턴스를 띄워보자.&lt;/p&gt;
&lt;div class=&quot;code-body&quot;&gt;
&lt;div class=&quot;line&quot;&gt;$ docker run --name oracle -d -p 1521:1521 jaspeen/oracle-xe-11g&lt;/div&gt;
&lt;div class=&quot;line&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p style=&quot;color: #555555;&quot; data-ke-size=&quot;size16&quot;&gt;이제 sqlplus 를 실행해서 오라클 인스턴스에 붙어보자&lt;/p&gt;
&lt;div class=&quot;code-body&quot;&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;$ docker &lt;span style=&quot;color: #e6c07b;&quot; class=&quot;hljs-built_in&quot;&gt;exec&lt;/span&gt; -it oracle sqlplus&lt;/div&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;SQL*Plus: Release 11.2.0.2.0 Production on Fri Feb 25 12:44:34 2022&lt;/div&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;Copyright (c) 1982, 2011, Oracle. All rights reserved.&lt;/div&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;Enter user-name: system&lt;/div&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;Enter password:&lt;/div&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;Connected to:&lt;/div&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production&lt;/div&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;line&quot; style=&quot;background-color: #282c34; color: #abb2bf; text-align: start;&quot;&gt;SQL&amp;gt;&lt;/div&gt;
&lt;/div&gt;
&lt;pre id=&quot;code_1715133960626&quot; class=&quot;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;bash&quot;&gt;&lt;code&gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>study/DB</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/320</guid>
      <comments>https://nizimo.tistory.com/320#entry320comment</comments>
      <pubDate>Wed, 8 May 2024 11:07:11 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] 사용 Port 종료 (lsof -i)</title>
      <link>https://nizimo.tistory.com/319</link>
      <description>&lt;div&gt;
&lt;div style=&quot;color: #000000;&quot;&gt;
&lt;div&gt;
&lt;h1 id=&quot;-0-도입&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;0. 도입&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가끔 정상종료를 하지 않으면 톰캣이 특정 포트를 계속 사용한다.&lt;br /&gt;종료해주자.&lt;/p&gt;
&lt;h1 id=&quot;-1-lsof&quot;&gt;  1. lsof&lt;/h1&gt;
&lt;h3 id=&quot;-lsof란&quot; data-ke-size=&quot;size23&quot;&gt;  lsof란&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;lsof는 list open files(열려있는 파일 나열)을 뜻하는 명령으로, 수많은 유닉스 계열 운영 체제에서 열려있는 모든 파일과, 그 파일들을 열고 있는 프로세스들의 목록을 출력한다.&lt;/p&gt;
&lt;h3 id=&quot;-lsof---i&quot; data-ke-size=&quot;size23&quot;&gt;  lsof - i&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;&amp;gt; lsof -i :8080
COMMAND  PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
JAVA    48458 username  15u  IPv4 0xgf254g4a48d52d65      0t0  TCP *:http-alt (LISTEN)&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;-kill--9-pid&quot; data-ke-size=&quot;size23&quot;&gt;  kill -9 PID&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 lsof의 PID를 kill&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;&amp;gt; kill -9 48458&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot;&gt;&lt;a href=&quot;https://velog.io/@stayplz/Linux-%EC%82%AC%EC%9A%A9-Port-%EC%A2%85%EB%A3%8C-lsof-i&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@stayplz/Linux-%EC%82%AC%EC%9A%A9-Port-%EC%A2%85%EB%A3%8C-lsof-i&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>MAC</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/319</guid>
      <comments>https://nizimo.tistory.com/319#entry319comment</comments>
      <pubDate>Fri, 3 May 2024 07:31:02 +0900</pubDate>
    </item>
    <item>
      <title>Github에 100MB 이상의 파일을 올리는 방법 [깃허브 대용량파일업로드]</title>
      <link>https://nizimo.tistory.com/318</link>
      <description>&lt;h1 id=&quot;c965&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot;&gt;문제점&lt;/h1&gt;
&lt;p id=&quot;90d3&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Bitbucket과는 달리 Github에는 기본적으로 100MB 이상의 파일을 올릴 수 없다.&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p id=&quot;0cdb&quot; style=&quot;color: #242424;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Conditions for large files &amp;mdash; User Documentation&lt;br /&gt;&lt;a href=&quot;https://help.github.com/articles/conditions-for-large-files/&quot;&gt;https://help.github.com/articles/conditions-for-large-files/&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p id=&quot;cb4d&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;그래서 100MB보다 큰 크기의 파일을 올리려고 시도하면 다음과 같은 경고 메시지를 보게 된다.&lt;/p&gt;
&lt;pre class=&quot;groovy&quot; style=&quot;background-color: #f2f2f2; color: #242424; text-align: start;&quot;&gt;&lt;code&gt;$ git push
Counting objects: 3086, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (2980/2980), done.
Writing objects: 100% (3086/3086), 363.25 MiB | 935.00 KiB/s, done.
Total 3086 (delta 1236), reused 111 (delta 57)
remote: error: GH001: Large files detected. You may want to try Git Large File Storage &amp;mdash; https://git-lfs.github.com.
remote: error: Trace: ***
remote: error: See http://git.io/iEPt8g for more information.
remote: error: File *** is 120.94 MB; this exceeds GitHub&amp;rsquo;s file size limit of 100.00 MB
To git@github.com:***
 ! [remote rejected] master -&amp;gt; master (pre-receive hook declined)
 ! [remote rejected] *** -&amp;gt; *** (pre-receive hook declined)
error: failed to push some refs to &amp;lsquo;git@github.com:***&amp;rsquo;&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;7d2b&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;HEAD의 마지막 Commit에는 100MB가 넘는 파일이 없더라도 이전 Commit 중에 100MB 이상의 파일이 포함된 적이 있다면 이 경고를 피할 수 없다. 그러다 보니 게임과 같이 대용량의 Binary 파일을 자주 다루는 프로젝트를 Github에 올릴 때에는 높은 확률로 위 메시지를 만나게 된다.&lt;/p&gt;
&lt;h1 id=&quot;2896&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot;&gt;해결책&lt;/h1&gt;
&lt;p id=&quot;04f2&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;다행히도 해결책이 존재한다. 경고 메시지에도 안내되어 있듯이 몇 가지 조처를 해주면 100MB 이상의 파일도 Github에 올릴 수 있다.&lt;/p&gt;
&lt;h2 id=&quot;8791&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;1. git-lfs 적용&lt;/h2&gt;
&lt;p id=&quot;a8ce&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;Commit 과정에서 지정한 파일을 작게 조각내주는 Git extension인 git-lfs &amp;mdash;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Git Large File Storage&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://git-lfs.github.com/&quot;&gt;https://git-lfs.github.com/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; 를 로컬에 설치한 뒤, 적용하려는 Repository 경로에서 다음 명령을 실행한다.&lt;/p&gt;
&lt;pre class=&quot;x86asm&quot; style=&quot;background-color: #f2f2f2; color: #242424; text-align: start;&quot;&gt;&lt;code&gt;$ git lfs install
Updated pre-push hook.
Git LFS initialized.&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;8070&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;그다음 용량이 큰 파일을 git-lfs의 관리 대상으로 등록해준다. 다음 예시는 120MB 정도의 exe 파일을 Stage에 추가한 상황에서, 확장자가 exe인 모든 파일을 git-lfs의 관리 대상으로 지정하고 Commit을 수행한 모습이다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;background-color: #f2f2f2; color: #242424; text-align: start;&quot;&gt;&lt;code&gt;$ git lfs track &amp;ldquo;*.exe&amp;rdquo;
Tracking *.exe$ git commit -m &amp;ldquo;Large file included&amp;rdquo;
[master (root-commit) dd2b715] Large file included
(...)&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;a735&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;이제 하단에 있는 3번 과정대로 Github에 push를 시도하면 된다. 그런데 기존에 100MB 이상의 파일을 Commit한 적이 있다면 여전히 100MB 이상의 파일을 올릴 수 없다는 경고 메시지를 보게 된다. 그럴 땐 다음 2번 과정을 적용해야 한다.&lt;/p&gt;
&lt;h2 id=&quot;44f1&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;2. BFG Repo-Cleaner 적용&lt;/h2&gt;
&lt;p id=&quot;9706&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;기존 Commit에서 100MB보다 큰 파일의 로그를 강제로 없애줘야 한다. BFG Repo-Cleaner &amp;mdash; BFG Repo-Cleaner&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://rtyley.github.io/bfg-repo-cleaner/&quot;&gt;https://rtyley.github.io/bfg-repo-cleaner/&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;mdash; 를 이용하면 그 작업을 손쉽게 적용할 수 있다.&lt;/p&gt;
&lt;p id=&quot;b0cd&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;공식 사이트에서 bfq-x.x.x.jar &amp;mdash; x.x.x는 버전 &amp;mdash; 를 받고, 대상이 되는 Repository에서 다음과 같이 그동안의 Commit에 포함된 100MB 이상의 파일을 정리하는 명령을 실행한다.&lt;/p&gt;
&lt;pre class=&quot;gml&quot; style=&quot;background-color: #f2f2f2; color: #242424; text-align: start;&quot;&gt;&lt;code&gt;$ java -jar bfg-x.x.x.jar --strip-blobs-bigger-than 100M
(...)
Deleted files
    &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; -
    Filename Git id
    &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; &amp;mdash; 
    ***.exe | c304fcfb (120.9 MB)
(...)&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;2a29&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;간혹 다음과 같은 오류가 나타날 수 있다.&lt;/p&gt;
&lt;pre class=&quot;mipsasm&quot; style=&quot;background-color: #f2f2f2; color: #242424; text-align: start;&quot;&gt;&lt;code&gt;$ java -jar bfg-x.x.x.jar --strip-blobs-bigger-than 100MUsing repo : C:\***\.gitScanning packfile for large blobs: 132
Scanning packfile for large blobs completed in 13 ms.
Warning : no large blobs matching criteria found in packfiles &amp;mdash; does the repo need to be packed?
Please specify tasks for The BFG :
bfg x.x.x
(...)&lt;/code&gt;&lt;/pre&gt;
&lt;p id=&quot;3e14&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;그럴 땐 아래 명령을 먼저 수행하고 다시 위의 bfg-x.x.x.jar에 의한 명령을 실행한다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;background-color: #f2f2f2; color: #242424; text-align: start;&quot;&gt;&lt;code&gt;$ git repack &amp;amp;&amp;amp; git gc
Counting objects: 3002, done.
(...)&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;b9d2&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size26&quot;&gt;3. git-push 재시도&lt;/h2&gt;
&lt;p id=&quot;c933&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;위 과정들을 적용한 뒤 push를 시도하면 다음과 같이 성공 메시지를 볼 수 있다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;background-color: #f2f2f2; color: #242424; text-align: start;&quot;&gt;&lt;code&gt;$ git push
Counting objects: 3089, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (1809/1809), done.
Writing objects: 100% (3089/3089), 234.95 MiB | 1.30 MiB/s, done.
Total 3089 (delta 1236), reused 2890 (delta 1229)
To git@github.com:***
 * [new branch] master -&amp;gt; master
 * [new branch] *** -&amp;gt; ***&lt;/code&gt;&lt;/pre&gt;
&lt;h1 id=&quot;5514&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot;&gt;마치며&lt;/h1&gt;
&lt;p id=&quot;0fc2&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot; data-ke-size=&quot;size16&quot;&gt;개인적으로 Private repository를 무제한으로 만들 수 있다는 점 때문에 Github보다는 Bitbucket을 자주 사용한다. 이번에 큰 용량의 Binary 파일이 있는 프로젝트를 Github의 Private repository에 올릴 일이 있어서 용량 제한 정보를 찾아 봤는데 Github은 개별 파일당 100MB의 제한이 있고 Repository 전체에 대한 용량 제한은 없는 반면, Bitbucket은 개별 파일에 대한 용량 제한은 없지만 Repository당 2GB의 전체 용량 제한이 있다. 따라서 Private repository를 써야할 때 유료 결제가 부담이 안 되는 상황이라면 git-lfs 덕분에 Github을 쓰는 것이 더 효율적인 선택이라고 본다. 물론 전체 크기가 2GB가 넘는 프로젝트가 아니라면 Bitbucket으로 충분하다고 할 수 있겠다.&lt;/p&gt;
&lt;h1 id=&quot;180f&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot;&gt;도움 주신 분&lt;/h1&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li id=&quot;482c&quot; style=&quot;list-style-type: disc; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;jjunCoder님의 제보로 오탈자를 수정했습니다. (2017. 2. 28)&lt;/li&gt;
&lt;/ul&gt;
&lt;h1 id=&quot;8421&quot; style=&quot;background-color: #ffffff; color: #242424; text-align: start;&quot; data-selectable-paragraph=&quot;&quot;&gt;참고자료&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal; background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li id=&quot;506a&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Conditions for large files &amp;mdash; User Documentation&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://help.github.com/articles/conditions-for-large-files/&quot;&gt;https://help.github.com/articles/conditions-for-large-files/&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;6e35&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Git Large File Storage&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://git-lfs.github.com/&quot;&gt;https://git-lfs.github.com/&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;8814&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;Removing files from a repository&amp;rsquo;s history &amp;mdash; User Documentation&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://help.github.com/articles/removing-files-from-a-repository-s-history/&quot;&gt;https://help.github.com/articles/removing-files-from-a-repository-s-history/&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;06d8&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;BFG Repo-Cleaner&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://rtyley.github.io/bfg-repo-cleaner/&quot;&gt;https://rtyley.github.io/bfg-repo-cleaner/&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;75e1&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;git repack vs git gc &amp;mdash; aggressive&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;http://git.661346.n2.nabble.com/git-repack-vs-git-gc-aggressive-td7564559.html&quot;&gt;http://git.661346.n2.nabble.com/git-repack-vs-git-gc-aggressive-td7564559.html&lt;/a&gt;&lt;/li&gt;
&lt;li id=&quot;0e8e&quot; style=&quot;list-style-type: decimal; color: #242424;&quot; data-selectable-paragraph=&quot;&quot;&gt;What kind of limits do you have on repository/file/upload size? &amp;mdash; Atlasssian Documentation&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://confluence.atlassian.com/bitbucket/what-kind-of-limits-do-you-have-on-repository-file-upload-size-273877699.html&quot;&gt;https://confluence.atlassian.com/bitbucket/what-kind-of-limits-do-you-have-on-repository-file-upload-size-273877699.html&lt;/a&gt;&lt;/li&gt;
&lt;/ol&gt;</description>
      <category>study/Front</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/318</guid>
      <comments>https://nizimo.tistory.com/318#entry318comment</comments>
      <pubDate>Mon, 18 Mar 2024 12:23:11 +0900</pubDate>
    </item>
    <item>
      <title>github - git bash 터미널 계정 변경</title>
      <link>https://nizimo.tistory.com/316</link>
      <description>&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;팀 프로젝트를 하다보면&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기존에 github에서 로그아웃하고&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다른 계정으로 작업하고 싶은 일이 생길 것입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;전 이 과정에서 많은 시간을 허비했으므로 (....) 기록을 남깁니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그 때 작업을 하는 방법을 포스트 하겠습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;github에 새 repository를 만들고&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기존에 하던 방식대로 진행하다보면&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&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;745&quot; data-origin-height=&quot;823&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LRjET/btsFjHHE9uO/2uLwgnwmIK7kEvxrANK201/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LRjET/btsFjHHE9uO/2uLwgnwmIK7kEvxrANK201/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LRjET/btsFjHHE9uO/2uLwgnwmIK7kEvxrANK201/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLRjET%2FbtsFjHHE9uO%2F2uLwgnwmIK7kEvxrANK201%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;745&quot; height=&quot;823&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;823&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;$ git push -u origin master&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;를 하면&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;remote: Permission to new&lt;/span&gt;&lt;span&gt;account/projectname.git&lt;/span&gt;&lt;span&gt;&amp;nbsp;denied to oldaccount.&lt;/span&gt;&lt;br /&gt;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;fatal: unable to access '&lt;a href=&quot;https://github.com/newaccount/projectname.git/':&quot;&gt;https://github.com/newaccount/projectname.git/':&lt;/a&gt; The requested URL returned error: 403&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;newaccount는 현재 계정을&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;newproject는 현재 업로드하려고 만들어 놓은&amp;nbsp;repository의 이름을 의미합니다&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이런 에러가 뜰 것이다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;먼저 git에 등록된 이름과&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;email을 확인해봅시다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&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;587&quot; data-origin-height=&quot;163&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dRS9rk/btsFoGN2jQY/ncjjM6WCj8e6rekeKLQGKk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dRS9rk/btsFoGN2jQY/ncjjM6WCj8e6rekeKLQGKk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dRS9rk/btsFoGN2jQY/ncjjM6WCj8e6rekeKLQGKk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdRS9rk%2FbtsFoGN2jQY%2FncjjM6WCj8e6rekeKLQGKk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;587&quot; height=&quot;163&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;163&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;git config user.name&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;git config user.email&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;을 하면&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;구 계정과 구 이메일이 나올 것입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&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;587&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2IXz6/btsFn9Xboqx/5nilg153UkCGrGoiLX3sSk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2IXz6/btsFn9Xboqx/5nilg153UkCGrGoiLX3sSk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2IXz6/btsFn9Xboqx/5nilg153UkCGrGoiLX3sSk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2IXz6%2FbtsFn9Xboqx%2F5nilg153UkCGrGoiLX3sSk%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;587&quot; height=&quot;245&quot; data-origin-width=&quot;587&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;git config --global user.name 신계정&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;git config --global user.email 신이메일&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;로 바꿔주고&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다시한번 확인해봅시다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&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;900&quot; data-origin-height=&quot;474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/psPSF/btsFm8c96ut/vbKUibUVv2H9qaMBN9ZKl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/psPSF/btsFm8c96ut/vbKUibUVv2H9qaMBN9ZKl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/psPSF/btsFm8c96ut/vbKUibUVv2H9qaMBN9ZKl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpsPSF%2FbtsFm8c96ut%2FvbKUibUVv2H9qaMBN9ZKl0%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;900&quot; height=&quot;474&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;474&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 제어판의 사용자 계정에 들어갑니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;사용자 계정 -&amp;gt; 자격 증명 관리에 들어갑니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;이 곳은 윈도우OS가 관리하는 인증 정보를 보관하는 곳입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;github 정보도 여기에서 관리합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&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;900&quot; data-origin-height=&quot;474&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cZ9SsN/btsFofQEz2b/DkDwkBfYu7sCacuScJOMHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cZ9SsN/btsFofQEz2b/DkDwkBfYu7sCacuScJOMHK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cZ9SsN/btsFofQEz2b/DkDwkBfYu7sCacuScJOMHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcZ9SsN%2FbtsFofQEz2b%2FDkDwkBfYu7sCacuScJOMHK%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;900&quot; height=&quot;474&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;474&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;다음 Windows 자격 증명에 들어가면&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;일반 자격 증명 탭에&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;기존에 사용하던 토큰들이 있을 것입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;git 과 관련된건 지워줍시다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 업로드 하고 싶은 프로젝트 우클&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;git bash here 클릭&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&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;900&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ERSHp/btsFqNME5yI/rCPAyxgxkiSPN884vl2gAk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ERSHp/btsFqNME5yI/rCPAyxgxkiSPN884vl2gAk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ERSHp/btsFqNME5yI/rCPAyxgxkiSPN884vl2gAk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FERSHp%2FbtsFqNME5yI%2FrCPAyxgxkiSPN884vl2gAk%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;900&quot; height=&quot;538&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;538&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;git init&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;git remote add origin 레파지토리 주소&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;git pull origin master&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;git add .&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;git commit -m &quot;first commit&quot;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #666666; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span&gt;git push -u origin master&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;(git add&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;띄고&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;. ) (git commit&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;띄고&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;-m) (git push&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;띄고&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;-u)&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;순서대로 합시다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;그러면 push 하려는 순간&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;새로 로그인 하라는 창이 뜰겁니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&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;900&quot; data-origin-height=&quot;366&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B7ZwX/btsFlSootxs/rzUQSIvLMLHkLxdC0m83hK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B7ZwX/btsFlSootxs/rzUQSIvLMLHkLxdC0m83hK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B7ZwX/btsFlSootxs/rzUQSIvLMLHkLxdC0m83hK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB7ZwX%2FbtsFlSootxs%2FrzUQSIvLMLHkLxdC0m83hK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;900&quot; height=&quot;366&quot; data-origin-width=&quot;900&quot; data-origin-height=&quot;366&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;새 계정과 이메일로 바꿔주고&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&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;745&quot; data-origin-height=&quot;449&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/BcLcb/btsFp9bh6uj/kxODi6UJAdfkeeJtKeKzTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/BcLcb/btsFp9bh6uj/kxODi6UJAdfkeeJtKeKzTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/BcLcb/btsFp9bh6uj/kxODi6UJAdfkeeJtKeKzTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FBcLcb%2FbtsFp9bh6uj%2FkxODi6UJAdfkeeJtKeKzTK%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;745&quot; height=&quot;449&quot; data-origin-width=&quot;745&quot; data-origin-height=&quot;449&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;하면 잘 됩니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;자신의 respository에 들어가보면 잘 된 모습을 확인할 수 있을 것입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;수고하셨습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://meaownworld.tistory.com/entry/github-git-bash-%ED%84%B0%EB%AF%B8%EB%84%90-%EA%B3%84%EC%A0%95-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://meaownworld.tistory.com/entry/github-git-bash-%ED%84%B0%EB%AF%B8%EB%84%90-%EA%B3%84%EC%A0%95-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;</description>
      <category>study/Front</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/316</guid>
      <comments>https://nizimo.tistory.com/316#entry316comment</comments>
      <pubDate>Thu, 29 Feb 2024 08:31:24 +0900</pubDate>
    </item>
    <item>
      <title>인텔레제이 빌드 개 느림 해결 방법 빌드가 느리다 아놔</title>
      <link>https://nizimo.tistory.com/315</link>
      <description>&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;우선 Eclipse나 STS는 정적파일 같은 경우에는 바로 자동반영이 되지만 서버단 JAVA코드같은 경우에는 jLebel이라는 유료 플러그인을 사용하여야한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;IntelliJ에서도 정적파일 같은 경우에는 설정을통해 자동으로 반영할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;(서버단 코드는 반영되지 않음. 이클립스에서 java파일 저장시 서버가 새롭게 로드되는 불편한? 증상과 비슷한 원리로 로딩됨...)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;1. gradle.build 파일을 연다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;502&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/s9Z8S/btszbStgruA/WZBKwBMddr0rhKtIRGHCq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/s9Z8S/btszbStgruA/WZBKwBMddr0rhKtIRGHCq0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/s9Z8S/btszbStgruA/WZBKwBMddr0rhKtIRGHCq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fs9Z8S%2FbtszbStgruA%2FWZBKwBMddr0rhKtIRGHCq0%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;449&quot; height=&quot;362&quot; data-origin-width=&quot;622&quot; data-origin-height=&quot;502&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;2. dependencies에 아래 코드 를 추가한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1698213086930&quot; class=&quot;reasonml&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;javascript&quot;&gt;&lt;code&gt;dependencies {

	...
    
	developmentOnly('org.springframework.boot:spring-boot-devtools')
    //혹은
    //developmentOnly 'org.springframework.boot:spring-boot-devtools'
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;3. 상단 메뉴바 file탭의 Settings&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;697&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bI3UKl/btszbOxDWEN/V6FN0Bd6b1LIT0rwOuD1gk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bI3UKl/btszbOxDWEN/V6FN0Bd6b1LIT0rwOuD1gk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bI3UKl/btszbOxDWEN/V6FN0Bd6b1LIT0rwOuD1gk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbI3UKl%2FbtszbOxDWEN%2FV6FN0Bd6b1LIT0rwOuD1gk%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;358&quot; height=&quot;540&quot; data-origin-width=&quot;462&quot; data-origin-height=&quot;697&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;4. Settings 창이 열리면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Settings - Bulid,Execution, Deployment - compiler를 찾아 들어가거나,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;검색란에 Compiler를 검색한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1084&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dBNUMu/btsy5dFThoG/qR5hAXAP7asD5KKIBp07kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dBNUMu/btsy5dFThoG/qR5hAXAP7asD5KKIBp07kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dBNUMu/btsy5dFThoG/qR5hAXAP7asD5KKIBp07kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdBNUMu%2Fbtsy5dFThoG%2FqR5hAXAP7asD5KKIBp07kK%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;633&quot; height=&quot;536&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1084&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;Settings - Bulid,Execution, Deployment - compiler&quot; data-lightbox=&quot;lightbox&quot; data-url=&quot;https://blog.kakaocdn.net/dn/ItEhm/btrQOlGvb3F/rBseNcVznlHV47vhex7Tnk/img.png&quot;&gt;&lt;/span&gt;Settings - Bulid,Execution, Deployment - compiler&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;4. 우측화면 체크박스&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&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;419&quot; data-origin-height=&quot;95&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/FOzEy/btsy9Ormrqh/wQ3uxKKQfLUyRhG1qJcQe1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/FOzEy/btsy9Ormrqh/wQ3uxKKQfLUyRhG1qJcQe1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/FOzEy/btsy9Ormrqh/wQ3uxKKQfLUyRhG1qJcQe1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FFOzEy%2Fbtsy9Ormrqh%2FwQ3uxKKQfLUyRhG1qJcQe1%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;419&quot; height=&quot;95&quot; data-origin-width=&quot;419&quot; data-origin-height=&quot;95&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Automatically show first error in editor 체크&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;80&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/de9bIB/btszbwcUzLb/hs1DnWLX9c86gyWwL9hqX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/de9bIB/btszbwcUzLb/hs1DnWLX9c86gyWwL9hqX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/de9bIB/btszbwcUzLb/hs1DnWLX9c86gyWwL9hqX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fde9bIB%2FbtszbwcUzLb%2Fhs1DnWLX9c86gyWwL9hqX1%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;407&quot; height=&quot;80&quot; data-origin-width=&quot;407&quot; data-origin-height=&quot;80&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;Build Project automatically 체크&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;5. 좌측 메뉴탭 Advanced Settings 선택&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1073&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bOKAza/btsy9T7h7X0/PxsjQBLmITBUTnRPLlyyQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bOKAza/btsy9T7h7X0/PxsjQBLmITBUTnRPLlyyQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bOKAza/btsy9T7h7X0/PxsjQBLmITBUTnRPLlyyQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbOKAza%2Fbtsy9T7h7X0%2FPxsjQBLmITBUTnRPLlyyQk%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;647&quot; height=&quot;542&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1073&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;6. 우측 화면에서 Allow auto-make to start even if developed application is currently running 체크&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;181&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4wHbY/btszb5smz92/3WvWVd3JkJo4aXuhslEihK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4wHbY/btszb5smz92/3WvWVd3JkJo4aXuhslEihK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4wHbY/btszb5smz92/3WvWVd3JkJo4aXuhslEihK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4wHbY%2Fbtszb5smz92%2F3WvWVd3JkJo4aXuhslEihK%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;617&quot; height=&quot;142&quot; data-origin-width=&quot;786&quot; data-origin-height=&quot;181&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;7. bulid,Execution, Deployment - Build Tools - Gradle선택 혹은 검색창에 Gradle 검색&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1076&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bas9WY/btsy5fw0gv0/LS9FVFdX6GVKCQHBvb6kqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bas9WY/btsy5fw0gv0/LS9FVFdX6GVKCQHBvb6kqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bas9WY/btsy5fw0gv0/LS9FVFdX6GVKCQHBvb6kqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbas9WY%2Fbtsy5fw0gv0%2FLS9FVFdX6GVKCQHBvb6kqk%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;651&quot; height=&quot;548&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1076&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;8. Build and run using 과 Run test using 두개 모두 Gradle로 되어있다면 IntelliJ IDEA로 변경한다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK1UzR/btsy8peydV5/D6mTcwQhdL9LI2r3kEIMl0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK1UzR/btsy8peydV5/D6mTcwQhdL9LI2r3kEIMl0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK1UzR/btsy8peydV5/D6mTcwQhdL9LI2r3kEIMl0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK1UzR%2Fbtsy8peydV5%2FD6mTcwQhdL9LI2r3kEIMl0%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;376&quot; height=&quot;96&quot; data-origin-width=&quot;494&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;7~8번은 컴파일 실행시&lt;span&gt;&amp;nbsp;&lt;/span&gt;빌드를 Gradle이 아닌 IntelliJ IDEA로 설정하는 것인데, 이것은 자동반영 효과 뿐만 아니라 전반적인 빌드 속도를 향상시켜준다. (분산방식으로 빌드를 해준다나 뭐라나 잘 모르겠다 좀 빨라지긴 한다.)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;b&gt;9. 모든 설정 완료후에 확인차 인텔리제이를 껐다 재실행 시키자.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;608&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/CqlMF/btsy4sDlhcV/WyeNdxhxOEK9kdlZ0zIHMK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/CqlMF/btsy4sDlhcV/WyeNdxhxOEK9kdlZ0zIHMK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/CqlMF/btsy4sDlhcV/WyeNdxhxOEK9kdlZ0zIHMK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FCqlMF%2Fbtsy4sDlhcV%2FWyeNdxhxOEK9kdlZ0zIHMK%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;1280&quot; height=&quot;608&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;608&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;Log에 restartedMain이라는 단어가 출력되면 정상적으로 세팅이 되었다는 뜻&lt;/span&gt;&lt;/p&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/315</guid>
      <comments>https://nizimo.tistory.com/315#entry315comment</comments>
      <pubDate>Wed, 25 Oct 2023 14:52:30 +0900</pubDate>
    </item>
    <item>
      <title>java script 오늘날짜 입력</title>
      <link>https://nizimo.tistory.com/314</link>
      <description>&lt;pre id=&quot;code_1698196667369&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
    &amp;lt;title&amp;gt;오늘 날짜 입력&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
    &amp;lt;input type=&quot;text&quot; id=&quot;dateInput&quot;&amp;gt;
    &amp;lt;script&amp;gt;
        // 오늘 날짜 가져오기
        const today = new Date();
        const year = today.getFullYear();
        const month = String(today.getMonth() + 1).padStart(2, '0'); // 월은 0부터 시작하므로 1을 더하고 두 자리로 포맷팅
        const day = String(today.getDate()).padStart(2, '0'); // 일자를 두 자리로 포맷팅

        // yyyy-mm-dd 형식으로 날짜 문자열 생성
        const formattedDate = `${year}-${month}-${day}`;

        // input 요소에 날짜 설정
        document.getElementById('dateInput').value = formattedDate;
    &amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;HTML의 input 요소의 type 속성을 &quot;text&quot;로 설정하고 사용자가 오늘 날짜를 입력할 수 있도록 하려면 JavaScript를 사용하여 오늘 날짜를 가져와서 input 요소의 value 속성에 설정해야 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt;이 코드에서는 JavaScript를 사용하여 오늘 날짜를 가져오고, 이 날짜를 &quot;yyyy-mm-dd&quot; 형식의 문자열로 변환한 다음 &lt;/span&gt;input&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt; 요소의 &lt;/span&gt;value&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt; 속성에 설정합니다. 결과적으로 &lt;/span&gt;input&lt;span style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot;&gt; 필드에 오늘 날짜가 표시됩니다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>study/Front</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/314</guid>
      <comments>https://nizimo.tistory.com/314#entry314comment</comments>
      <pubDate>Wed, 25 Oct 2023 10:18:31 +0900</pubDate>
    </item>
    <item>
      <title>Javascript typeof. typeof  undefined</title>
      <link>https://nizimo.tistory.com/313</link>
      <description>&lt;pre id=&quot;code_1698196398077&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;JavaScript에서 typeof 연산자는 피연산자의 데이터 타입을 문자열로 반환합니다. typeof는 다음과 같은 데이터 타입을 반환할 수 있습니다:

&quot;undefined&quot;: 값이 할당되지 않은 변수 또는 존재하지 않는 객체의 속성
&quot;boolean&quot;: 참(true) 또는 거짓(false) 값을 가진 불리언 타입
&quot;number&quot;: 숫자 타입 (정수 및 실수)
&quot;string&quot;: 문자열 타입
&quot;object&quot;: 객체, 배열, null 값
&quot;function&quot;: 함수 타입
&quot;symbol&quot;: 심볼 타입 (ES6부터 추가됨)
typeof 연산자 사용 예시:

console.log(typeof undefined); // &quot;undefined&quot;
console.log(typeof true); // &quot;boolean&quot;
console.log(typeof 42); // &quot;number&quot;
console.log(typeof &quot;Hello, world!&quot;); // &quot;string&quot;
console.log(typeof {}); // &quot;object&quot;
console.log(typeof []); // &quot;object&quot; (배열도 객체로 간주됩니다)
console.log(typeof null); // &quot;object&quot; (null도 객체로 간주됩니다)
console.log(typeof function() {}); // &quot;function&quot;
console.log(typeof Symbol()); // &quot;symbol&quot;
주의할 점은 typeof 연산자가 배열과 null을 &quot;object&quot;로 반환한다는 것입니다. 배열을 구분하려면 Array.isArray() 함수를 사용하면 됩니다.&lt;/code&gt;&lt;/pre&gt;</description>
      <category>study/Front</category>
      <category>type of undefined</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/313</guid>
      <comments>https://nizimo.tistory.com/313#entry313comment</comments>
      <pubDate>Wed, 25 Oct 2023 10:14:27 +0900</pubDate>
    </item>
    <item>
      <title>find</title>
      <link>https://nizimo.tistory.com/312</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;위 폴더에서 특정 단어를 찾으려면 find 명령어를 사용할 수 있습니다. 다음은 Linux 및 macOS에서 하위 폴더에서 특정 단어를 찾는 방법입니다:&lt;/p&gt;
&lt;pre id=&quot;code_1698124237782&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bashCopy code
find /시작경로 -type f -exec grep -l '특정단어' {}&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #f7f7f8; color: #374151; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;/시작경로: 검색을 시작할 디렉토리 경로를 지정합니다. 이것은 검색을 시작할 디렉토리를 나타냅니다. 예를 들어, 전체 시스템에서 검색하려면 /를 사용하고, 현재 디렉토리에서 검색하려면 .를 사용할 수 있습니다.&lt;/li&gt;
&lt;li&gt;-type f: find 명령을 사용하여 파일만 검색하도록 지정합니다. 디렉토리는 검색에서 제외됩니다.&lt;/li&gt;
&lt;li&gt;-exec grep -l '특정단어' {} \;: 각 파일에 대해 grep 명령을 실행하여 특정 단어를 찾습니다. -l 옵션은 해당 파일에서 단어를 찾으면 파일의 이름을 출력하도록 지정합니다. {}는 find 명령에서 찾은 각 파일의 이름을 나타냅니다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;예를 들어, 현재 디렉토리부터 하위 폴더에서 &quot;example&quot;라는 단어를 찾으려면 다음 명령을 사용할 수 있습니다:&lt;/p&gt;
&lt;div style=&quot;background-color: #000000;&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1698124220723&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bashCopy code
find . -type f -exec grep -l 'example' {} \;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #f7f7f8; color: #374151; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 명령은 현재 디렉토리부터 시작하여 모든 하위 폴더에서 &quot;example&quot;라는 단어가 포함된 파일을 찾아 파일 경로를 출력합니다.&lt;/p&gt;</description>
      <category>study/Front</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/312</guid>
      <comments>https://nizimo.tistory.com/312#entry312comment</comments>
      <pubDate>Tue, 24 Oct 2023 13:20:54 +0900</pubDate>
    </item>
    <item>
      <title>모르면 손해보는 21가지 JavaScript 축약코딩 기법seokkitdo&amp;middot;2021년 12월 31일</title>
      <link>https://nizimo.tistory.com/311</link>
      <description>&lt;h2 style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;a href=&quot;https://velog.io/@seokkitdo&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://velog.io/@seokkitdo&lt;/a&gt;&lt;/h2&gt;
&lt;h2 id=&quot;1-삼항조건-연산자the-ternary-operator&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1. 삼항조건 연산자(The Ternary Operator)&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;if .. else 조건문을 한 라인으로 줄여주는 유용한 기법입니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;nginx&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const x = 20;
let answer;

if (x &amp;gt; 10) {
    answer = &quot;greater than 10&quot;;
} else {
    answer =  &quot;less than 10&quot;;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const answer = x &amp;gt; 10 ? &quot;greater than 10&quot; : &quot;less than 10&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또한 중첩해서 사용도 가능합니다.&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const answer = x &amp;gt; 10 ? &quot;greater than 10&quot; : x &amp;lt; 5 ? &quot;less than 5&quot; : &quot;between 5 and 10&quot;;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;2-간략계산법short-circuit-evaluation-shorthand&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2. 간략계산법(Short-circuit Evaluation Shorthand)&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기존 변수를 다른 변수에 할당하고 싶을 때, 기존 변수가 null, undefined 또는 비어있는 값이 아닌지 확인하고 싶을 수 있습니다. 이 경우에는 보통 긴 if 조건문을 사용하거나 간략계산법을 축약코딩을 사용할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;ceylon&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;if (variable1 !== null || variable1 !== undefined || variable1 !== '') {
     let variable2 = variable1;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;ceylon&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const variable2 = variable1  || 'new';&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;믿기지 않으신다면 es6console에 아래 코드를 복사하여 확인해보세요!&lt;/p&gt;
&lt;pre class=&quot;ceylon&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;let variable1;
let variable2 = variable1  || 'bar';
console.log(variable2 === 'bar'); // prints true

variable1 = 'foo';
variable2 = variable1  || 'bar';
console.log(variable2); // prints foo&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote style=&quot;color: #212529; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;variable1에 falsy한 값을 넣을 경우 bar 문자열이 variable2에 할당될 겁니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;3-변수-선언&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;3. 변수 선언&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;함수를 시작하기 전 변수를 선언하는 것은 좋은 자세입니다. 이 축약기법은 동시에 여러개의 변수를 선언함으로써 시간과 코드라인을 줄일 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;nix&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;let x;
let y;
let z = 3;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;gml&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;let x, y, z=3;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;4-if-presence-shorthand&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;4. If Presence Shorthand&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사소한 것일지 모르나, 알아두면 좋을 것 같습니다. if 조건문을 사용 시 때때로 대입 연산자를 생략할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;lisp&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;if (likeJavaScript === true)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;lisp&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;if (likeJavaScript)&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote style=&quot;color: #212529; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 두가지 예제가 정확하게 일치하지는 않습니다. 그 이유는 기존방법의 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;true&lt;/span&gt;일 경우에만 조건문을 실행하는 반면 축약기법에서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;truthy&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;일 경우 통과하도록 되어있기 때문입니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다음 예제를 보시면 a가 true가 아닐 경우, 조건문을 실행합니다.&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;bash&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;let a;
if ( a !== true ) {
// do something...
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;gauss&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;let a;
if ( !a ) {
// do something...
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;5-반복문for-loop&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;5. 반복문(For Loop)&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;만약 외부 라이브러리에 의존하지 않고 바닐라 자바스크립트만을 사용하길 원한다면 이 팁은 아주 유용합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;matlab&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const fruits = ['mango', 'peach', 'banana'];
for (let i = 0; i &amp;lt; fruits.length; i++)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;lisp&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;for (let fruit of fruits)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;단순히 인덱스에만 접근하길 원한다면 다음과 같은 방법도 있습니다.&lt;/p&gt;
&lt;pre class=&quot;flix&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;for (let index in fruits)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;또한 리터럴 객체의 키에 접근하려는 경우에도 마찬가지로 동작합니다.&lt;/p&gt;
&lt;pre class=&quot;processing&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const obj = {continent: 'Africa', country: 'Kenya', city: 'Nairobi'}
for (let key in obj)
  console.log(key) // output: continent, country, city&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Array.forEach를 통한 축약기법&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;function logArrayElements(element, index, array) {
  console.log(&quot;a[&quot; + index + &quot;] = &quot; + element);
}
[2, 5, 9].forEach(logArrayElements);
// a[0] = 2
// a[1] = 5
// a[2] = 9&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;6-간략-계산법short-circuit-evaluation&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;6. 간략 계산법(Short-circuit Evaluation)&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기본 값을 할당하기 위해 파라미터가 null 또는 undefined인지 확인하느라 6줄의 코드를 작성하는 것보다 Short-circuit Evaluation 계산법을 이용해 한 줄의 코드로 작성하는 방법이 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;nginx&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;let dbHost;
if (process.env.DB_HOST) {
  dbHost = process.env.DB_HOST;
} else {
  dbHost = 'localhost';
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const dbHost = process.env.DB_HOST || 'localhost';&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote style=&quot;color: #212529; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;process.env.DB_HOST 값이 있을 경우 이 값을 dbHost에 할당하지만 없다면 localhost를 할당합니다. 이에 대한 정보는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://ko.javascript.info/logical-operators&quot;&gt;여기&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에서 더 살펴볼 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;7-십진법-지수decimal-base-exponents&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;7. 십진법 지수(Decimal Base Exponents)&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;0이 많이 포함된 숫자를 적을 때, 이 수많은 0들을 제외하고 숫자를 작성한다면 있어보이지 않을까요? 예를들어 1e7은 10,000,000 과 동일하며 1뒤에 7개의 0이 딸려온 것을 의미합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;matlab&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;for (let i = 0; i &amp;lt; 10000; i++) {}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;for (let i = 0; i &amp;lt; 1e7; i++) {}

// All the below will evaluate to true
1e0 === 1;
1e1 === 10;
1e2 === 100;
1e3 === 1000;
1e4 === 10000;
1e5 === 100000;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;8-객체-프로퍼티&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;8. 객체 프로퍼티&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바스크립트에서 객체 리터럴 표기법은 코딩을 더 쉽게 만듭니다. ES6 는 객체에 프로퍼티를 할당하는것을 더 쉽게 만들어 주었습니다. 만약 객체의 프로퍼티 이름이 키 이름과 같을 경우에 축약기법을 사용할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;gml&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const x = 1920, y = 1080;
const obj = { x:x, y:y };&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const obj = { x, y };&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;9-화살표arrow-함수&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;9. 화살표(Arrow) 함수&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기존의 함수는 읽고 쓰기가 쉽도록 되어있지만 다른 함수 호출에 중첩하여 사용하게 될 경우 다소 길어지고 헷갈리게 됩니다.&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;qml&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;function sayHello(name) {
  console.log('Hello', name);
}

setTimeout(function() {
  console.log('Loaded')
}, 2000);

list.forEach(function(item) {
  console.log(item);
});&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;sayHello = name =&amp;gt; console.log('Hello', name);

setTimeout(() =&amp;gt; console.log('Loaded'), 2000);

list.forEach(item =&amp;gt; console.log(item));&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote style=&quot;color: #212529; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;화살표 함수와 일반 함수의 차이점은 그 생김새로도 확인할 수 있지만 this가 기존 함와 다르게 작동합니다. 따라서 위 두 예제는 완전히 동일한 예제는 아닙니다.&lt;br /&gt;이 차이점에 대해 알고 싶으시다면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://poiemaweb.com/es6-arrow-function&quot;&gt;여기&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 클릭해주세요.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;10-묵시적-반환implicit-return&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;10. 묵시적 반환(Implicit Return)&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;return&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;은 함수 결과를 반환하는데 사용되는 키워드입니다. 한 줄로만 작성된 화살표 함수에서는 return 명령어가 없어도 자동으로 반환하도록 되어있습니다. 다만 중괄호를 생략해야지만 return 키워드도 생략할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여러 라인의 코드(객체 리터럴) 를 반환하려면 중괄호 대신 () 를 사용해서 함수를 감싸면 됩니다. 다음과 같이 한 줄로 코드가 작성되었음을 확인할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;ada&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;function calcCircumference(diameter) {
  return Math.PI * diameter
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;arcade&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;calcCircumference = diameter =&amp;gt; (
  Math.PI * diameter;
)
&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;11-파라미터-기본값-지정&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;11. 파라미터 기본값 지정&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기존에는 if 문을 통해 함수의 파라미터에 기본 값을 지정해주었지만 ES6 에서는 함수 선언문 자체에 파라미터의 기본 값을 설정해 줄 수 있습니다.&lt;br /&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;actionscript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;function volume(l, w, h) {
  if (w === undefined)
    w = 3;
  if (h === undefined)
    h = 4;
  return l * w * h;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;rsl&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;volume = (l, w = 3, h = 4 ) =&amp;gt; (l * w * h);

volume(2) //output: 24&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;12-템플릿-리터럴template-literals&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;12. 템플릿 리터럴(Template Literals)&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;문자열로 ' + '를 입력하며 자바스크립트 값을 추가하는 손가락 노동에 지치지 않으시나요? 더 쉬운 방법은 없을까요? 만약 ES6 사용하실 줄 안다면 백틱(backtick)을 사용해서 스트링을 감싸고 변수를 ${}로 감싸서 손쉽게 연결 할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;routeros&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const welcome = 'You have logged in as ' + first + ' ' + last + '.'

const db = 'http://' + host + ':' + port + '/' + database;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const welcome = `You have logged in as ${first} ${last}`;

const db = `http://${host}:${port}/${database}`;&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;13-구조-분해-할당destructuring-assignment&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;13. 구조 분해 할당(Destructuring Assignment)&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;유명한 프레임워크로 개발을 하고 있다면 컴포넌트나 API간 데이터를 전송하기 위해서 객체 리터럴이나 배열로 이뤄진 데이터를 사용하게 될 가능성이 큽니다. 데이터 객체가 컴포넌트에 들어가게 되면, unpack이 필요합니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const observable = require('mobx/observable');
const action = require('mobx/action');
const runInAction = require('mobx/runInAction');

const store = this.props.store;
const form = this.props.form;
const loading = this.props.loading;
const errors = this.props.errors;
const entity = this.props.entity;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;import { observable, action, runInAction } from 'mobx';

const { store, form, loading, errors, entity } = this.props;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;추가적으로 커스텀 변수명을 지정할 수 있습니다.&lt;/p&gt;
&lt;pre class=&quot;kotlin&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const { store, form, loading, errors, entity:contact } = this.props;&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote style=&quot;color: #212529; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 코드는 구조분해할당을 통해 entity를 가져오고 난 후 contact라는 변수명을 지정한 겁니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;h2 id=&quot;14-여러줄로-문자열-쓰기&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;14. 여러줄로 문자열 쓰기&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;한 줄 이상의 문자열을 입력하게 될 경우가 있다면 기존의 방법보다 훨씬 편한 방법이 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;sml&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const lorem = 'Lorem ipsum dolor sit amet, consectetur\n\t'
    + 'adipisicing elit, sed do eiusmod tempor incididunt\n\t'
    + 'ut labore et dolore magna aliqua. Ut enim ad minim\n\t'
    + 'veniam, quis nostrud exercitation ullamco laboris\n\t'
    + 'nisi ut aliquip ex ea commodo consequat. Duis aute\n\t'
    + 'irure dolor in reprehenderit in voluptate velit esse.\n\t'&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;아래와 같은 방법으로 백틱(backtick)을 사용하는 방법도 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;properties&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const lorem = `Lorem ipsum dolor sit amet, consectetur
    adipisicing elit, sed do eiusmod tempor incididunt
    ut labore et dolore magna aliqua. Ut enim ad minim
    veniam, quis nostrud exercitation ullamco laboris
    nisi ut aliquip ex ea commodo consequat. Duis aute
    irure dolor in reprehenderit in voluptate velit esse.`&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;15-전개-연산자spread-operator&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;15. 전개 연산자(Spread operator)&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;ES6 에서 소개된 스프레드 연산자는 자바스크립트 코드를 더 효율적이고 재미있게 사용할 수 있는 방법들을 제시합니다. 간단히는 배열의 값을 변환하는데 사용할 수 있습니다. 스프레드 연산자를 사용하는 방법은 점 세개(...)를 붙이면 됩니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;// joining arrays
const odd = [1, 3, 5];
const nums = [2 ,4 , 6].concat(odd);

// cloning arrays
const arr = [1, 2, 3, 4];
const arr2 = arr.slice()&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;// joining arrays
const odd = [1, 3, 5 ];
const nums = [2 ,4 , 6, ...odd];
console.log(nums); // [ 2, 4, 6, 1, 3, 5 ]

// cloning arrays
const arr = [1, 2, 3, 4];
const arr2 = [...arr];&lt;/code&gt;&lt;/pre&gt;
&lt;blockquote style=&quot;color: #212529; text-align: start;&quot; data-ke-style=&quot;style1&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;concat() 함수와는 다르게 스프레드 연산자는 배열 내부의 원하는 위치 어디에나 추가할 수 있습니다.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const odd = [1, 3, 5 ];
const nums = [2, ...odd, 4 , 6];&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;스프레드 연산자는 또한 ES6 의 구조화 대입법(destructuring notation)와 함게 사용할 수도 있습니다.&lt;/p&gt;
&lt;pre class=&quot;yaml&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const { a, b, ...z } = { a: 1, b: 2, c: 3, d: 4 };
console.log(a) // 1
console.log(b) // 2
console.log(z) // { c: 3, d: 4 }&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;16-필수기본-파라미터mandatory-parameter&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;16. 필수(기본) 파라미터(Mandatory Parameter)&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;기본적으로 자바스크립트 함수의 파라미터값을 받지 않았을 경우, undifined로 지정합니다. 몇몇 다른 언어들은 에러 메시지를 나타내기도 합니다. 이런 기본 파라미터는 강제로 할당하는 방법은 if문을 사용해서 undefined일 경우 에러가 나도록 하거나,&lt;br /&gt;&lt;b&gt;Mandatory Parameter&lt;/b&gt;를 사용하는 방법이 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;function foo(bar) {
  if(bar === undefined) {
    throw new Error('Missing parameter!');
  }
  return bar;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;coffeescript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;mandatory = () =&amp;gt; {
  throw new Error('Missing parameter!');
}

foo = (bar = mandatory()) =&amp;gt; {
  return bar;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;17-arrayfind&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;17. Array.find&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;자바스크립트로 특정 값을 찾기 위한 함수를 작서앟다보면 보통 for 루프를 이용해서 접근을 하곤 합니다. 그러나 ES6 에서 find()라는 새로운 함수가 생겼습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;matlab&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const pets = [
  { type: 'Dog', name: 'Max'},
  { type: 'Cat', name: 'Karl'},
  { type: 'Dog', name: 'Tommy'},
]

function findDog(name) {
  for(let i = 0; i&amp;lt;pets.length; ++i) {
    if(pets[i].type === 'Dog' &amp;amp;&amp;amp; pets[i].name === name) {
      return pets[i];
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;pet = pets.find(pet =&amp;gt; pet.type ==='Dog' &amp;amp;&amp;amp; pet.name === 'Tommy');
console.log(pet); // { type: 'Dog', name: 'Tommy' }&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;18-object-key&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;18. Object [key]&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Foo.bar를 Foo['bar'] 로 적을 수 있다는 걸 알고 있으신가요? 왜 후자와 같이 코딩을 해야 하는지 의문이 들 수도 있지만, 재사용이 용이한 코드 블락을 작성하기 위해서는 매우 효율적인 방법입니다.&lt;br /&gt;아래의 간단한 validation 함수를 확인해보세요&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;function validate(values) {
  if(!values.first)
    return false;
  if(!values.last)
    return false;
  return true;
}

console.log(validate({first:'Bruce',last:'Wayne'})); // true&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 함수로 validation 기능을 완벽하게 사용할 수 있습니다. 하지만 form 요소들과 validation 옵션으로 사용해야하는 영역과 규칙이 많을 경우 위 함수는 점점 복잡해지고 길어지게 됩니다. 이를 방지하기 위해서 실행시 옵션을 부과할 수 있는 포괄적인 validation함수를 작성하는 방법을 알아보겠습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;pgsql&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;// object validation rules
const schema = {
  first: {
    required:true
  },
  last: {
    required:true
  }
}

// universal validation function
const validate = (schema, values) =&amp;gt; {
  for(field in schema) {
    if(schema[field].required) {
      if(!values[field]) {
        return false;
      }
    }
  }
  return true;
}


console.log(validate(schema, {first:'Bruce'})); // false
console.log(validate(schema, {first:'Bruce',last:'Wayne'})); // true&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위의 예시처럼 사용한다면 모든 form에 공통으로 적용할 수 있는 validation 함수를 작용할 수 있습니다.&lt;/p&gt;
&lt;h2 id=&quot;19-단항-비트-논리부정-연산자-double-bitwise-not&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;19. 단항 비트 논리부정 연산자 (Double Bitwise NOT)&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;비트 연산자는 자바스크립트를 처음 배울 때를 제외하고는 한 번도 적용해 본 적 없는 연산자일 겁니다. 애당초 이진법으로 코딩하지 않는다면 1과 0을 사용 할 일이 없죠.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;하지만 단항 비트 논리부정 연산자를 효율적으로 사용할 수 있는 방법을 알려드립니다.&lt;br /&gt;바로 Math.floor() 함수의 대체용으로 사용할 수 있다는 것이죠. 또 Math.floor()함수보다 훨씬 빠르게 작동한다는 장점도 있습니다. 단항 비트 논리부정 연산자에 대해서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators&quot;&gt;여기&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에서 더 알아보실 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;Math.floor(4.9) === 4  //true&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;~~4.9 === 4  //true&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;20-거듭제곱exponent-power&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;20. 거듭제곱(Exponent Power)&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;Math.pow를 통해 거듭제곱을 나타낼 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;Math.pow(2,3); // 8
Math.pow(2,2); // 4
Math.pow(4,3); // 64&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;2**3 // 8
2**4 // 4
4**3 // 64&lt;/code&gt;&lt;/pre&gt;
&lt;h2 id=&quot;21-문자열-숫자-변환&quot; style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;21. 문자열 숫자 변환&lt;/h2&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;때때로 필요한 데이터는 숫자 형식이어야 하는데 문자열 타입이 오는 경우가 있을 수 있습니다. 하지만 이러한 타입변환은 손쉽게 해결할 수 있습니다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #e67373;&quot;&gt;기존&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;arduino&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const num1 = parseInt(&quot;100&quot;);
const num2 =  parseFloat(&quot;100.01&quot;);&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #212529; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;&lt;span style=&quot;color: #30b430;&quot;&gt;축약&lt;/span&gt;&lt;/b&gt;&lt;/p&gt;
&lt;pre class=&quot;haskell&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;const num1 = +&quot;100&quot;; // converts to int data type
const num2 =  +&quot;100.01&quot;; // converts to float data type&lt;/code&gt;&lt;/pre&gt;</description>
      <category>study/Front</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/311</guid>
      <comments>https://nizimo.tistory.com/311#entry311comment</comments>
      <pubDate>Fri, 20 Oct 2023 13:04:06 +0900</pubDate>
    </item>
    <item>
      <title>formData axios selectbox</title>
      <link>https://nizimo.tistory.com/310</link>
      <description>&lt;pre id=&quot;code_1697428817753&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;select id=&quot;flag&quot;&amp;gt;
    &amp;lt;option value=&quot;1&quot;&amp;gt;선택&amp;lt;/option&amp;gt;
&amp;lt;/select&amp;gt;

특정 value 값의 선택을 true시킴
$(&quot;#flag&quot;).val(&quot;1&quot;).prop(&quot;selected&quot;, true);

전체 삭제 Just..
$(&quot;select#아이디 option&quot;).remove();


$('#selectBox option:selected').val();            // select box 선택 값 출력
$('#selectBox option:selected').text();           // option 값 출력


특정 옵션 삭제
$(&quot;select#아이디 option[value='option']&quot;).remove();


옵션 추가
$(&quot;select#아이디&quot;).append(&quot;&amp;lt;option value='option'&amp;gt;옵션추가&amp;lt;/option&amp;gt;&quot;);


&amp;lt;input type=&quot;checkbox&quot; name=&quot;ckall&quot;&amp;gt;
&amp;lt;input type=&quot;checkbox&quot; name=&quot;ck&quot;&amp;gt;
&amp;lt;input type=&quot;checkbox&quot; name=&quot;ck&quot;&amp;gt;

$(&quot;input[name=ckall]&quot;).click(function(){
    if($(&quot;input[name=ckall]&quot;).prop(&quot;checked&quot;)){
        $(&quot;input[name=ck]&quot;).prop(&quot;checked&quot;,true);   // 전체 체크
    }else{
        $(&quot;input[name=ck]&quot;).prop(&quot;checked&quot;,false);  // 전체 체크 해제
    }
});

var chkArray = new Array();

$(&quot;input:checkbox[name='delCheck']:checked&quot;).each(function(){
    chkArray.push($(this).closest('tr').data('revolutionSeq'));
});&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697428973575&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;인텔리제이 코드정렬

command + option + shift + L 누른후 ok&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697428960768&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var formData = new FormData(); // Currently empty
formData.append(name, value);
formData.append(name, value, filename);
생성자
FormData()
새로운 FormData 객체를 생성합니다.

메소드
FormData.append()
FormData 객체안에 이미 키가 존재하면 그 키에 새로운 값을 추가하고, 키가 없으면 추가합니다.

FormData.delete()
FormData 객체로부터 키/밸류 쌍을 삭제합니다.

FormData.entries()
이 객체에 담긴 모든 키/밸류 쌍을 순회할 수 있는 iterator를 반환합니다.

FormData.get()
FormData 객체 내의 값들 중 주어진 키와 연관된 첫번째 값을 반환합니다.

FormData.getAll()
FormData 객체 내의 값들 중 주어진 키와 연관된 모든 값이 담긴 배열을 반환합니다.

FormData.has()
FormData 객체에 특정 키가 포함되어 있는지 여부를 나타내는 boolean 을 반환합니다.

FormData.keys()
이 객체에 담긴 모든 키/벨류 쌍들의 모든 키들을 순회 할 수 있는 iterator를 반환합니다.

FormData.set()
FormData 객체 내에 있는 기존 키에 새 값을 설정하거나, 존재하지 않을 경우 키/밸류 쌍을 추가합니다.

FormData.values()
이 객체에 포함된 모든 밸류를 통과하는 iterator를 반환합니다.


let formData = new FormData();

// ... formData.append(&quot;키이름&quot;, &quot;값&quot;); 생략

for (let key of formData.keys()) {
	console.log(key, &quot;:&quot;, formData.get(key));
}

for(let value of formData.values()){
	console.log(value, &quot; : &quot;,formData.get(value));
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697429038981&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;template&amp;gt;
  &amp;lt;div&amp;gt;
    &amp;lt;form v-on:submit.prevent=&quot;submitForm&quot;&amp;gt; 
      &amp;lt;div&amp;gt;
        &amp;lt;label for=&quot;username&quot;&amp;gt;id:&amp;lt;/label&amp;gt;
        &amp;lt;input id=&quot;username&quot; type=&quot;text&quot; v-model=&quot;username&quot;&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;div&amp;gt;
        &amp;lt;label for=&quot;password&quot;&amp;gt;pw:&amp;lt;/label&amp;gt;
        &amp;lt;input id=&quot;password&quot; type=&quot;password&quot; v-model=&quot;password&quot;&amp;gt;
      &amp;lt;/div&amp;gt;
      &amp;lt;button type=&quot;submit&quot;&amp;gt;login&amp;lt;/button&amp;gt;
    &amp;lt;/form&amp;gt;
  &amp;lt;/div&amp;gt;
&amp;lt;/template&amp;gt;

&amp;lt;script&amp;gt;
import axios from 'axios'

export default {
  data: function(){
    return {
      username: '',
      password: '',
    }
  },
  methods: {
    submitForm: function() {
      
      console.log(this.username, this.password);
      var url = 'https://jsonplaceholder.typicode.com/users';
      var data = {
        username: this.username,
        password: this.password
      }
      axios.post(url, data)
        .then(function(response){
        console.log(response);
       })
        .catch(function(error){
          console.log(error);
        });
    }
  }
}
&amp;lt;/script&amp;gt;

엑시오스(axios)&lt;/code&gt;&lt;/pre&gt;</description>
      <category>study/Front</category>
      <category>formData #axios #selectbox</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/310</guid>
      <comments>https://nizimo.tistory.com/310#entry310comment</comments>
      <pubDate>Mon, 16 Oct 2023 13:09:49 +0900</pubDate>
    </item>
    <item>
      <title>axios.js</title>
      <link>https://nizimo.tistory.com/309</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #080808;&quot;&gt;
&lt;pre class=&quot;javascript&quot;&gt;&lt;code&gt;let tmpDt = &quot;empty&quot;;
    fn_get_corp_cd=function(){
    axios({
       method: 'get', //통신 방식
       url: '/logs/getCORP_CD', //통신할 페이지
       data: {} //인자로 보낼 데이터
    })
    .then(response=&amp;gt;{
       console.log('console responseData',response);
       tmpDt = response;
       return tmpDt;
    })
    .catch(error=&amp;gt;{
       //console.log(error);
       tmpDt = error;
       return tmpDt;

    })


    $(&quot;#corpcdselect&quot;).empty();
    $(&quot;#corpcdselect&quot;).append(htm)


}
function resolveAfter2Seconds() {
    return new Promise((resolve) =&amp;gt; {
       setTimeout(() =&amp;gt; {
          resolve(tmpDt);
       }, 2000);
    });
}

async function asyncCall() {
    console.log('calling');
    const result = await axios.post('/logs/getCORP_CD').then(response=&amp;gt;{
          console.log(response)
          });

    console.log(&quot;result2 &quot;,result);
    const result2 = await axios.post('/logs/getCORP_CD').then(res=&amp;gt;{
       console.log(res)
    });

    // Expected output: &quot;resolved&quot;
}

 TestApiCall = async function(){
    try {
       const response = await axios.post('/logs/getCORP_CD')
       console.log(&quot;response &amp;gt;&amp;gt;&quot;, response.data)
       const response2 = await axios.post('/logs/getCORP_CD')
       console.log(&quot;response &amp;gt;&amp;gt;&quot;, response2.data)
    } catch(err) {
       console.log(&quot;Error &amp;gt;&amp;gt;&quot;, err);
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;fileblock&quot; data-ke-align=&quot;alignCenter&quot;&gt;&lt;a href=&quot;https://blog.kakaocdn.net/dn/kJbjV/btsytZt15mj/yLj1fItRHiZgSBckn9o8wk/axios.js?attach=1&amp;amp;knm=tfile.js&quot; class=&quot;&quot;&gt;
    &lt;div class=&quot;image&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;desc&quot;&gt;&lt;div class=&quot;filename&quot;&gt;&lt;span class=&quot;name&quot;&gt;axios.js&lt;/span&gt;&lt;/div&gt;
&lt;div class=&quot;size&quot;&gt;0.06MB&lt;/div&gt;
&lt;/div&gt;
  &lt;/a&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>study/Front</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/309</guid>
      <comments>https://nizimo.tistory.com/309#entry309comment</comments>
      <pubDate>Mon, 16 Oct 2023 09:12:57 +0900</pubDate>
    </item>
    <item>
      <title>ORACLE 테이블간 업데이트</title>
      <link>https://nizimo.tistory.com/308</link>
      <description>&lt;div&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;다른 테이블의 SELECT 한 결과물을 참조하여 현재 테이블을 UPDATE 해야 하는 상황이 있습니다.&lt;/p&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;Oracle, MS-SQL, Maria DB, Mysql DBMS마다 다른 문법을 지원하므로 방법도 각자 다릅니다.&lt;/p&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;저는 Oracle을 사용 중인데 다른 DBMS 보다 조금 문법이 어려운 것 같네요 이 방법에 한해서는요 ㅎㅎ&lt;/p&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;table master, table user 두 개의 테이블이 있다고 가정하겠습니다.&lt;/p&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;master 테이블의 Status을 user 테이블의 Status의 값을 참조하여 변경하는 쿼리를 작성해보겠습니다.&lt;/p&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;MS-SQL&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1697181738984&quot; class=&quot;sql&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE
    master
SET
    master.status = cust.status
FROM
    master m
INNER JOIN
    cust c
ON 
    m.id = c.id;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;MySQL and MariaDB&lt;/b&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1697181738985&quot; class=&quot;sql&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE
    master m,
    cust c
SET
    m.status = c.status
WHERE
    m.id = c.id;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Oracle&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;단순 업데이트만 사용하는 방법&lt;/p&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;EXISTS를 사용하지 않으면 첫 번째 서브 쿼리의 id 키 값이 매칭 되지 않는 값들은 master의 status 값이 null로 변경됩니다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697181738985&quot; class=&quot;sql&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE master m
SET    m.status = (select c.status
                  from cust c 
                  where m.id = c.id)
WHERE EXISTS (select 1
              from cust c
              where m.id = c.id)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;merge into를 구문을 사용하는 방법&lt;/p&gt;
&lt;pre id=&quot;code_1697181738986&quot; class=&quot;sql&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;MERGE INTO master m
USING cust c
ON (m.id = c.id)
WHEN MATCHED THEN UPDATE SET m.status = c.status;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;Oracle 실습&lt;/b&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;245&quot; data-origin-height=&quot;131&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b7uOcH/btsymOfKEsb/QfyTIXOBVL2aiNEYZSjw41/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b7uOcH/btsymOfKEsb/QfyTIXOBVL2aiNEYZSjw41/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b7uOcH/btsymOfKEsb/QfyTIXOBVL2aiNEYZSjw41/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb7uOcH%2FbtsymOfKEsb%2FQfyTIXOBVL2aiNEYZSjw41%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;245&quot; height=&quot;131&quot; data-origin-width=&quot;245&quot; data-origin-height=&quot;131&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
master table&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;219&quot; data-origin-height=&quot;90&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfGdBs/btsyta9iHV1/59Mb70OP3zFBnjxdyTC7i1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfGdBs/btsyta9iHV1/59Mb70OP3zFBnjxdyTC7i1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfGdBs/btsyta9iHV1/59Mb70OP3zFBnjxdyTC7i1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfGdBs%2Fbtsyta9iHV1%2F59Mb70OP3zFBnjxdyTC7i1%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;219&quot; height=&quot;90&quot; data-origin-width=&quot;219&quot; data-origin-height=&quot;90&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
cust table
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;이 쿼리를 실행해보겠습니다.&lt;/p&gt;
&lt;pre id=&quot;code_1697181738987&quot; class=&quot;sql&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE master m
SET    m.status = (select c.status
                  from cust c 
                  where m.id = c.id)
WHERE EXISTS (select 1
              from cust c
              where m.id = c.id)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;우리가 기대하는 결과는 master 테이블의 test1, test3, test5의 status값이 FALSE로 변환되는 결과입니다.&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;218&quot; data-origin-height=&quot;126&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xCzpJ/btsytuzHlpb/uiNiAS2KPiE2PUJOi39vfk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xCzpJ/btsytuzHlpb/uiNiAS2KPiE2PUJOi39vfk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xCzpJ/btsytuzHlpb/uiNiAS2KPiE2PUJOi39vfk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxCzpJ%2FbtsytuzHlpb%2FuiNiAS2KPiE2PUJOi39vfk%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;218&quot; height=&quot;126&quot; data-origin-width=&quot;218&quot; data-origin-height=&quot;126&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
update 결과
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;올바르게 변환됩니다!&lt;/p&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;그런데 만약 아래와 같이 EXIST 구문을 빼면 어떻게 될까요?&lt;/p&gt;
&lt;pre id=&quot;code_1697181738987&quot; class=&quot;sql&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE master m
SET    m.status = (select c.status
                  from cust c 
                  where m.id = c.id)&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;222&quot; data-origin-height=&quot;121&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/G7zdc/btsys3bxzsm/lKvKnE6ektYw3jkwbFlVLK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/G7zdc/btsys3bxzsm/lKvKnE6ektYw3jkwbFlVLK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/G7zdc/btsys3bxzsm/lKvKnE6ektYw3jkwbFlVLK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FG7zdc%2Fbtsys3bxzsm%2FlKvKnE6ektYw3jkwbFlVLK%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;222&quot; height=&quot;121&quot; data-origin-width=&quot;222&quot; data-origin-height=&quot;121&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
update 결과
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;test2와 test4는 id 키 값이 매칭되는 것이 없으므로 status의 값이 null로 변경됩니다. 기본적으로 update 구문에서 where 조건을 설정하지 않으면 전체 테이블을 update하게 되어서 나타나는 결과입니다.&lt;/p&gt;
&lt;p style=&quot;color: #666666;&quot; data-ke-size=&quot;size16&quot;&gt;merger into 쿼리의 결과 역시 제대로 업데이트 되는 것을 볼 수 있습니다!&lt;/p&gt;
&lt;pre id=&quot;code_1697181738988&quot; class=&quot;sql&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;MERGE INTO master m
USING cust c
ON (m.id = c.id)
WHEN MATCHED THEN UPDATE SET m.status = c.status;&lt;/code&gt;&lt;/pre&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;217&quot; data-origin-height=&quot;129&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zsJPR/btsymLJ5Ol2/v94aFKJsYHgSstbyICBwaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zsJPR/btsymLJ5Ol2/v94aFKJsYHgSstbyICBwaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zsJPR/btsymLJ5Ol2/v94aFKJsYHgSstbyICBwaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzsJPR%2FbtsymLJ5Ol2%2Fv94aFKJsYHgSstbyICBwaK%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;217&quot; height=&quot;129&quot; data-origin-width=&quot;217&quot; data-origin-height=&quot;129&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
merge into 결과&lt;/div&gt;
&lt;div&gt;
&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;div id=&quot;reaction-99&quot;&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;좋아요&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;8&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;공유하기&lt;/span&gt;&lt;/div&gt;
&lt;div data-category-visibility=&quot;public&quot; data-entry-visibility=&quot;public&quot; data-entry-id=&quot;99&quot;&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt;게시글 관리&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오라클에서 테이블의 값을 수정하기 위해서는 UPDATE 문을 사용하면 된다. WHERE 절에 해당하는 행이 여러 개인 경우 한 번에 여러 건의 행이 SET 절의 값으로 변경된다. UPDATE 문은 시스템 운영 시 자주 사용하므로 다양한 방법을 익혀두는 것이 좋다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&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-filename=&quot;오라클_UPDATE_방법_1.png&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;116&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ca0dyC/btsynXQxZz8/oNKC9MJVHM61GZ6QNjkx51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ca0dyC/btsynXQxZz8/oNKC9MJVHM61GZ6QNjkx51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ca0dyC/btsynXQxZz8/oNKC9MJVHM61GZ6QNjkx51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fca0dyC%2FbtsynXQxZz8%2FoNKC9MJVHM61GZ6QNjkx51%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;448&quot; height=&quot;116&quot; data-filename=&quot;오라클_UPDATE_방법_1.png&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;116&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span data-alt=&quot;오라클 UPDATE 문&quot; data-lightbox=&quot;lightbox&quot; data-url=&quot;https://blog.kakaocdn.net/dn/Cptbo/btq41myew1Q/6nkOfKZfD06xe0YlQN8sI0/img.png&quot;&gt;&lt;/span&gt;오라클 UPDATE 문&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;기본 사용법&lt;/h3&gt;
&lt;pre id=&quot;code_1697181713041&quot; class=&quot;gams&quot; style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE emp
   SET job = 'MANAGER'
     , deptno = 20
 WHERE empno = 7566&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위는 WHERE 절의 empno에 해당하는 데이터의 job, deptno 컬럼을 수정하는 쿼리이다.&amp;nbsp; empno는 PK이기 때문에 한건의 데이터만 수정되지만 PK가 아니고 여러 건이 조회되면 여러 건의 데이터가 한 번에 수정된다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;SET 절에 서브쿼리 사용법&lt;/h3&gt;
&lt;pre id=&quot;code_1697181713042&quot; class=&quot;pgsql&quot; style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE emp a
   SET a.sal  = (SELECT MAX(aa.sal) FROM emp aa WHERE aa.job = a.job)
     , a.comm = (SELECT MAX(aa.comm) FROM emp aa WHERE aa.job = a.job)
 WHERE a.job = 'ANALYST'&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다른 테이블에서 데이터를 조회하여 UPDATE를 해야 하는 경우가 있다. 조인을 사용하면 편리할 거 같지만 UPDATE문에서 조인은 제약사항이 많기 때문에 서브 쿼리를 활용하면 쉽게 해결되는 경우가 많다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697181713043&quot; class=&quot;pgsql&quot; style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE emp a
   SET (a.sal, a.comm)  = (SELECT MAX(aa.sal), MAX(aa.comm)
                             FROM emp aa 
                            WHERE aa.job = a.job)
 WHERE a.job = 'ANALYST'&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동일한 서브쿼리를 반복해서 사용해야 하는 경우 컬럼을 묶어서 한 번의 서브 쿼리로 업데이트 값을 입력할 수 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;WHERE 절에 IN 사용법&lt;/h3&gt;
&lt;pre id=&quot;code_1697181713044&quot; class=&quot;gams&quot; style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE emp
   SET sal = 3000
 WHERE empno IN (SELECT aa.empno
                   FROM emp aa
                      , dept bb
                  WHERE aa.job = 'ANALYST'
                    and aa.deptno = bb.deptno)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;업데이트 범위를 정할 때 다른 테이블을 참조해야 할 경우 IN을 사용하여 데이터를 포함시키거나 NOT IN을 사용하여 제외시킬 수 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697181713045&quot; class=&quot;n1ql&quot; style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE emp
   SET comm = 500
 WHERE (job, deptno) IN (SELECT aa.job, aa.deptno
                           FROM emp aa
                          WHERE aa.deptno = 30)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;IN의 서브 쿼리에서 키값이 여러 개인 경우 컬럼을 묶어서 조건을 맵핑할 수 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697181713045&quot; class=&quot;stylus&quot; style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE emp a
   SET a.comm = 500
 WHERE a.ROWID IN (SELECT aa.ROWID
                     FROM emp aa
                    WHERE aa.deptno = 30)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;동일한 데이블을 사용한다면 ROWID를 키로 사용할 수 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;WHERE 절에 EXISTS 사용법&lt;/h3&gt;
&lt;pre id=&quot;code_1697181713046&quot; class=&quot;n1ql&quot; style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE emp a
   SET a.comm = 500
 WHERE EXISTS (SELECT 1
                 FROM emp aa
                WHERE aa.empno = a.empno
                  AND aa.deptno = 30)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;EXISTS를 사용하면 쉽게 데이터를 제외시키거나 포함시킬 수 있다. IN과 비슷한 역할을 하지만 성능면에서 조금 더 나을 수 있다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697181713047&quot; class=&quot;n1ql&quot; style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE emp a
   SET a.comm = 500
 WHERE NOT EXISTS (SELECT 1
                     FROM emp aa
                    WHERE aa.empno = a.empno
                      AND aa.deptno = 30)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;조인하여 UPDATE 하는 방법&lt;/h3&gt;
&lt;pre id=&quot;code_1697181713047&quot; class=&quot;stylus&quot; style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;UPDATE (SELECT a.sal
             , a.comm
             , b.sal AS sal_2
             , b.comm AS comm_2
          FROM emp a
             , emp_man b
         WHERE a.empno = b.empno)
   SET sal = sal_2 
     , comm = comm_2&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;두 개의 테이블을 조인해서 업데이트해야 할 경우 사용하는 방법이다. 위의 쿼리는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;오라클 11.2 이하&lt;/b&gt;&lt;/span&gt;의 버전에서는 오류가 발생하며 아래의 MERGE 문을 사용해야 한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1697181713048&quot; class=&quot;n1ql&quot; style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;sql&quot;&gt;&lt;code&gt;MERGE 
 INTO emp a
USING emp_man b
   ON (a.empno = b.empno)
 WHEN MATCHED THEN
      UPDATE 
         SET a.sal = b.sal
           , a.comm = b.comm;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;MERGE 문은 오라클 9i부터 사용할 수 있다.&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;BYPASS_UJVC&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;힌트를 사용하는 방법이 있으나 11g부터 공식적으로 사용을 중단하였기 때문에 특별한 경우가 아니면 MERGE 문을 사용할 것을 권장한다.&lt;/p&gt;
&lt;figure id=&quot;og_1697181713049&quot; style=&quot;background-color: #ffffff; color: #222222; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c5ewRe/hyKfeELkwQ/KQAMDxr410LrIV5C9uPcCk/img.png?width=489&amp;amp;height=296&amp;amp;face=0_0_489_296,https://scrap.kakaocdn.net/dn/bsb3ik/hyKe2qNO2C/uqOIEWCdKjloIBONgTIoXK/img.png?width=489&amp;amp;height=296&amp;amp;face=0_0_489_296,https://scrap.kakaocdn.net/dn/bxtzZY/hyKe9KdSG9/cK3doeIdghq4jKugwL2Vj1/img.png?width=489&amp;amp;height=296&amp;amp;face=0_0_489_296&quot; data-og-url=&quot;https://gent.tistory.com/406&quot; data-og-source-url=&quot;https://gent.tistory.com/406&quot; data-og-host=&quot;gent.tistory.com&quot; data-og-description=&quot;오라클에서 쿼리문을 작성하다 보면, 하나의 쿼리문으로 INSERT, UPDATE, DELETE 작업을 해야 하는 경우가 있다. 이럴 때에는 MERGE 문을 사용하면 간단하게 쿼리문을 작성할 수 있다. 오라클 9i부터 MERGE&quot; data-og-title=&quot;[Oracle] 오라클 MERGE INTO 사용법 및 노하우 정리&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div style=&quot;background-color: #ffffff;&quot;&gt;
&lt;div style=&quot;background-color: #ffffff; color: #000000;&quot;&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;MERGE INTO를 하는 중 다음과 같은 오류 메세지가 발생하였다.&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ff0000; color: #ffffff;&quot;&gt;ORA-30926 : 원본 테이블의 고정 행 집합을 가져올 수 없습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ff0000; color: #ffffff;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ff0000; color: #ffffff;&quot;&gt;ORA-30926 : unable to get a stable set of rows in the source tables&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;MERGE INTO 구문&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;====================================================================&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;MERGE INTO table_name alias&lt;/span&gt;&lt;/b&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;-- (실제 데이터를 INSERT 또는 UPDATE할 테이블)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;USING (table | view | subquery) alias&lt;/b&gt;&lt;/span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;-- 실제 데이터를 조회할 대상 테이블(뷰, 서브쿼리)&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;-- 대상 테이블이 없는 경우 DUAL 테이블 사용&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;ON (join condition)&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;-- 조건절 (Where절) 이 조건에 의해 아래 MATCHED / NOT MATCHED 로 분기&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;WHEN MATCHED THEN&lt;/b&gt;&lt;/span&gt;&amp;nbsp; -- ON 조건에 해당하는 데이터(레코드)가 존재한다면&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span&gt;UPDATE SET [column1] = [value1]&lt;/span&gt;&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;-- 해당 레코드를 대상으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;b&gt;UPDATE&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;실행&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&lt;b&gt;WHEN NOT MATCHED THEN&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;-- ON 이하의 조건에 해당하는 데이터(레코드)가 존재하지 않는다면&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;INSERT (column1, column2 ...) VALUES (value1, value2 ...);&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;-- 새 데이터를 추가해야 하므로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;&lt;b&gt;INSERT&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;실행&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;====================================================================&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;MERGE INTO 구문 중 INSERT와 UPDATE는 하나의 레코드를 대상으로 작업을 수행할 수 있는데, 2개 이상의 SELECT 결과가 나와서 발생하는 오류였다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;USING ( ) ON ( ) 조건에 의해 SELECT 된 결과가 2건이상 발생하는 경우 동일한 레코드가 중복 삽입되는 될 수 있으며, 이때 PK 무결성 오류가 발생하기도 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;또는 update되는 로우가 1건 이상이 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffe400; color: #ff0000;&quot;&gt;정리하자면&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&amp;nbsp;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffe400; color: #ff0000;&quot;&gt;1) INTO 절에 사용되는 테이블에 Primary Key 를 사용하는 경우&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffe400; color: #ff0000;&quot;&gt;&amp;nbsp;- 즉 INSERT 구문에서 DUPLICATE가 발생하거나 UPDATE 에 MULTI ROW가 UPDATE되는 경우&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffe400; color: #ff0000;&quot;&gt;2) ON 구문에서 UPDATE되는 ROW가 1개 이상일 경우&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffe400; color: #ff0000;&quot;&gt;&amp;nbsp;- 즉 ON 구문에서 맞는 테이블 값이&amp;nbsp; 하나 이상일 경우&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그렇기 때문에 USING ( ) 조건에 의해 산출되는 SELECT 결과가 중복 레코드를 갖지 않도록 수정하면 해결된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;ORACLE 12 이상&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;MERGE&lt;/span&gt; &lt;span style=&quot;color: #800000;&quot;&gt;INTO&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;SPEC_MANUF&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;USING&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;COMM_CD&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;ON&lt;/span&gt; (&lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;CORP_CD&lt;/span&gt; = &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;SCODE&lt;/span&gt; &lt;span style=&quot;color: #800000;&quot;&gt;AND&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;MCODE&lt;/span&gt;=&lt;span style=&quot;color: #008000;&quot;&gt;'11'&lt;/span&gt; )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;WHEN&lt;/span&gt; &lt;span style=&quot;color: #800000;&quot;&gt;MATCHED&lt;/span&gt; &lt;span style=&quot;color: #800000;&quot;&gt;THEN&lt;/span&gt; &lt;span style=&quot;color: #800000;&quot;&gt;UPDATE&lt;/span&gt; &lt;span style=&quot;color: #800000;&quot;&gt;SET&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;m&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;CORP_NATION&lt;/span&gt; = &lt;span style=&quot;color: #000000;&quot;&gt;c&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;CALL_NAME&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;SELECT&lt;/span&gt; * &lt;span style=&quot;color: #800000;&quot;&gt;FROM&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;SPEC_MANUF&lt;/span&gt;&lt;span style=&quot;color: #ff0000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ORACLE 12 이하&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;UPDATE&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;SPEC_MANUF&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;SET&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;CORP_NATION&lt;/span&gt; = (&lt;span style=&quot;color: #800000;&quot;&gt;SELECT&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;aa&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;CALL_NAME&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;FROM&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;COMM_CD&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;aa&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;WHERE&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;aa&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;SCODE&lt;/span&gt; = &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;CORP_CD&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;AND&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;aa&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;MCODE&lt;/span&gt; = &lt;span style=&quot;color: #008000;&quot;&gt;'11'&lt;/span&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;WHERE&lt;/span&gt; &lt;span style=&quot;color: #800000;&quot;&gt;EXISTS&lt;/span&gt; (&lt;span style=&quot;color: #800000;&quot;&gt;SELECT&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;aa&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;SCODE&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;FROM&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;COMM_CD&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;aa&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;WHERE&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;aa&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;SCODE&lt;/span&gt; = &lt;span style=&quot;color: #000000;&quot;&gt;a&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;CORP_CD&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #800000;&quot;&gt;AND&lt;/span&gt; &lt;span style=&quot;color: #000000;&quot;&gt;aa&lt;/span&gt;.&lt;span style=&quot;color: #000000;&quot;&gt;MCODE&lt;/span&gt; = &lt;span style=&quot;color: #008000;&quot;&gt;'11'&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;)&lt;span style=&quot;color: #ff0000;&quot;&gt;;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>study/DB</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/308</guid>
      <comments>https://nizimo.tistory.com/308#entry308comment</comments>
      <pubDate>Fri, 13 Oct 2023 16:22:52 +0900</pubDate>
    </item>
    <item>
      <title>jquery formData();</title>
      <link>https://nizimo.tistory.com/307</link>
      <description>&lt;h1 id=&quot;1-javascript-input&quot; style=&quot;background-color: #121212; color: #ececec; text-align: start;&quot;&gt;1. JavaScript Input&lt;/h1&gt;
&lt;h2 id=&quot;1-etargetfiles0&quot; style=&quot;background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;1) e.target.files[0]&lt;/h2&gt;
&lt;p style=&quot;background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;: 해당 인풋에서 발생한 이벤트를 통해 업로드 된 파일을 찾을 수 있다.&lt;/p&gt;
&lt;pre class=&quot;typescript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;&amp;lt;input type='file' onChange={(e) =&amp;gt; {onFileUpload(e)} /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;input이 발생하는 태그에서 onChange로 그 이벤트를 통해 다룰 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;cs&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;  function onFileUpload(event) {
    event.preventDefault();
    let file = event.target.files[0];
  }&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;e.target.files에 해당 파일이 담겨있는 것을 볼 수 있다.&lt;/li&gt;
&lt;li&gt;만약 multipl 속성이 있는 태그라면 [0] 번 이외에 인덱스 값을 추가로 가지는 것을 알 수 있다.&lt;br /&gt;(multipl 속성을 가질 경우 한번에 여러개 파일을 드레그 해서 첨부할 수 있음)&lt;/li&gt;
&lt;li&gt;만약 1개씩 여러개의 파일을 받고 싶다면. (이건 다음 화에서...)&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 id=&quot;2-formdata&quot; style=&quot;background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;2) formData&lt;/h2&gt;
&lt;p style=&quot;background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;: 파일은 아무 형태로나 서버로 전달할 수 없다. 위에서 받아온 file도 그 형태 그대로 전달 할 수 없다.&lt;br /&gt;때문에 formData 라는 것을 사용하게 된다.&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;let formData = new FormData();&lt;/code&gt;&lt;/pre&gt;
&lt;h3 id=&quot;1-formdataappend&quot; style=&quot;background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(1) FormData.append()&lt;/h3&gt;
&lt;p style=&quot;background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;: 가장 많이 쓰게 될 formdata의 내장 함수로 form 데이터 안에 키,값의 형태로 담을때 사용된다.&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;  const upload = () =&amp;gt; {
    let formData = new FormData();
    formData.append('files', files);
  }&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;서버에서 files 라는 키에 파일을 담아주기를 원한다면 다음과 같은 방법으로 해당 값을 append를 이용해서 담도록 한다.&lt;br /&gt;(Tip:&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;2-json과-file&quot; style=&quot;background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(2) Json과 file&lt;/h3&gt;
&lt;p style=&quot;background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;: file과 text 동시에 보내기&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;  const upload = () =&amp;gt; {
    const temp = JSON.stringify({
      name: selectedClassName,
      price: selectedPrice,
      sale: selectedDiscount / 100,});
    let formData = new FormData();
    formData.append('body', temp);
    formData.append('files', files);
  }&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;파일과 그 해당 파일과 관련된 text를 모두 보내는 경우 동일한 딕셔너리(객체)에 담아 보낼 수 없다.&lt;/li&gt;
&lt;li&gt;따라서 각각의 append를 이용해서 서버로 전송하도록 한다.&lt;/li&gt;
&lt;li&gt;위의 경우 formData의 body 라는 키에 stringify를 이용해서 json 데이터를 분리해서 담았다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 id=&quot;3-file-여러개-담기&quot; style=&quot;background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-size=&quot;size23&quot;&gt;(3) file 여러개 담기&lt;/h3&gt;
&lt;p style=&quot;background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;: file은 리스트(배열)의 형태로 만들어 formData에 바로 담을 수 없다.&lt;br /&gt;(이 경우 빈 객체만 나오는 것을 알 수 있다)&lt;/p&gt;
&lt;pre class=&quot;javascript&quot; style=&quot;color: #000000; text-align: left;&quot;&gt;&lt;code&gt;  const upload = () =&amp;gt; {
    let formData = new FormData();
    for (let i = 0; i &amp;lt; files.length; i++) {
        formData.append('files', files[i]);
    }
  }&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #121212; color: #ececec; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;따라서 배열에 담아온 파일들을 한번 더 반복문을 사용해서 append에 하나 하나 담아야 한다.&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>study</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/307</guid>
      <comments>https://nizimo.tistory.com/307#entry307comment</comments>
      <pubDate>Mon, 25 Sep 2023 11:30:35 +0900</pubDate>
    </item>
    <item>
      <title>xattr -cr &amp;quot;path&amp;quot;</title>
      <link>https://nizimo.tistory.com/306</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;맥 프로그램 손상되었기에 때문에 열수 없습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;휴지통으로 이동 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. sudo spctl --master-disable&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안되면&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. xattr -cr &quot;path&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;난 2번이 먹음 1번 안됨&lt;/p&gt;</description>
      <category>study/java</category>
      <category>전자정부프레임워크 #xattr #spctl</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/306</guid>
      <comments>https://nizimo.tistory.com/306#entry306comment</comments>
      <pubDate>Mon, 11 Sep 2023 10:35:45 +0900</pubDate>
    </item>
    <item>
      <title>[IntelliJ] IntelliJ IDEA Community 다운로드 및 설치 후 실행하기</title>
      <link>https://nizimo.tistory.com/305</link>
      <description>&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;h2 id=&quot;IntelliJ_다운로드&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IntelliJ 다운로드&lt;/span&gt;&lt;/b&gt;&lt;/h2&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;a style=&quot;color: #353535;&quot; href=&quot;https://www.jetbrains.com/idea/&quot;&gt;IntelliJ IDEA 홈페이지&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;접속&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689119808415&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;IntelliJ IDEA: The Capable &amp;amp; Ergonomic Java IDE by JetBrains&quot; data-og-description=&quot;A Capable and Ergonomic Java IDE for Enterprise Java, Scala, Kotlin and much more...&quot; data-og-host=&quot;www.jetbrains.com&quot; data-og-source-url=&quot;https://www.jetbrains.com/idea/&quot; data-og-url=&quot;https://www.jetbrains.com/idea/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/BAxQs/hyOmDIwQFf/Jt9kuKTT9uq4RrAuceJihK/img.png?width=1281&amp;amp;height=800&amp;amp;face=0_0_1281_800&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://www.jetbrains.com/idea/&quot; data-source-url=&quot;https://www.jetbrains.com/idea/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/BAxQs/hyOmDIwQFf/Jt9kuKTT9uq4RrAuceJihK/img.png?width=1281&amp;amp;height=800&amp;amp;face=0_0_1281_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;IntelliJ IDEA: The Capable &amp;amp; Ergonomic Java IDE by JetBrains&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;A Capable and Ergonomic Java IDE for Enterprise Java, Scala, Kotlin and much more......&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;www.jetbrains.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #e56a2c; text-align: left;&quot;&gt;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #e56a2c; text-align: left;&quot;&gt;추천인 코드 : AF8800551&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWMh7Y/btsnj9T5uVy/HQOBkD7HmDxRu5MapLNWv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWMh7Y/btsnj9T5uVy/HQOBkD7HmDxRu5MapLNWv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWMh7Y/btsnj9T5uVy/HQOBkD7HmDxRu5MapLNWv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWMh7Y%2Fbtsnj9T5uVy%2FHQOBkD7HmDxRu5MapLNWv1%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;1280&quot; height=&quot;627&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
우측 상단 Download 클릭
&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;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Ultimate&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Download 받으면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;627&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/B7Tq8/btsnitMgmH9/DOb8JMeoGwHSZzp0ann9L1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/B7Tq8/btsnitMgmH9/DOb8JMeoGwHSZzp0ann9L1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/B7Tq8/btsnitMgmH9/DOb8JMeoGwHSZzp0ann9L1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FB7Tq8%2FbtsnitMgmH9%2FDOb8JMeoGwHSZzp0ann9L1%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;1280&quot; height=&quot;627&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;627&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
운영체제 선택 후 Community Download 클릭
&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;h2 id=&quot;IntelliJ_설치&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IntelliJ 설치&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;342&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rNzrW/btsnhtFF0fN/x76DkZqfT2WKBtU3T1vXK0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rNzrW/btsnhtFF0fN/x76DkZqfT2WKBtU3T1vXK0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rNzrW/btsnhtFF0fN/x76DkZqfT2WKBtU3T1vXK0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrNzrW%2FbtsnhtFF0fN%2Fx76DkZqfT2WKBtU3T1vXK0%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;538&quot; height=&quot;278&quot; data-origin-width=&quot;661&quot; data-origin-height=&quot;342&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
다운로드 받은 idealC 설치파일 실행&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ua6BD/btsng6DZhWv/Gb1DS3ZzjDF2F4HhsGy3t0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ua6BD/btsng6DZhWv/Gb1DS3ZzjDF2F4HhsGy3t0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ua6BD/btsng6DZhWv/Gb1DS3ZzjDF2F4HhsGy3t0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fua6BD%2Fbtsng6DZhWv%2FGb1DS3ZzjDF2F4HhsGy3t0%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;779&quot; height=&quot;606&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;606&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Kz1UR/btsngUKC33D/trT9KkZJCEaaiKferKEMbK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Kz1UR/btsngUKC33D/trT9KkZJCEaaiKferKEMbK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Kz1UR/btsngUKC33D/trT9KkZJCEaaiKferKEMbK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FKz1UR%2FbtsngUKC33D%2FtrT9KkZJCEaaiKferKEMbK%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;780&quot; height=&quot;606&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;606&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
설치 경로 지정 가능 (기본 경로 C:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2022.1)
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&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 style=&quot;list-style-type: disc; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Create Desktop Shortcut : 바로가기 생성&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Update PATH variable : 설치한 프로그램의 bin 폴더 경로를 윈도우 환경변수 PATH 자동 추가&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Update Context Menu : 프로젝트로 폴더 열기 메뉴 추가&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Create Associations : 사용할 언어 확장자 선택&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p5u1O/btsng98xB9S/appLS2cgcVNAzgl3gwKbV0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p5u1O/btsng98xB9S/appLS2cgcVNAzgl3gwKbV0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p5u1O/btsng98xB9S/appLS2cgcVNAzgl3gwKbV0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp5u1O%2Fbtsng98xB9S%2FappLS2cgcVNAzgl3gwKbV0%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;780&quot; height=&quot;606&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;606&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
설치옵션 선택&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;607&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MHBUf/btsngwDbOoC/PYYzfRcX2sfv2Ti1AYOxnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MHBUf/btsngwDbOoC/PYYzfRcX2sfv2Ti1AYOxnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MHBUf/btsngwDbOoC/PYYzfRcX2sfv2Ti1AYOxnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMHBUf%2FbtsngwDbOoC%2FPYYzfRcX2sfv2Ti1AYOxnK%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;779&quot; height=&quot;607&quot; data-origin-width=&quot;779&quot; data-origin-height=&quot;607&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
시작 메뉴 폴더 지정 (기본 JetBrains)&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b5jMZ5/btsnj8VamMZ/AnpQlzzqnF8qhheXFwvW21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b5jMZ5/btsnj8VamMZ/AnpQlzzqnF8qhheXFwvW21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b5jMZ5/btsnj8VamMZ/AnpQlzzqnF8qhheXFwvW21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb5jMZ5%2Fbtsnj8VamMZ%2FAnpQlzzqnF8qhheXFwvW21%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;780&quot; height=&quot;606&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;606&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;607&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sSd46/btsngMyXJe7/xFxWcjspej2ADIczaxYDa0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sSd46/btsngMyXJe7/xFxWcjspej2ADIczaxYDa0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sSd46/btsngMyXJe7/xFxWcjspej2ADIczaxYDa0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FsSd46%2FbtsngMyXJe7%2FxFxWcjspej2ADIczaxYDa0%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;780&quot; height=&quot;607&quot; data-origin-width=&quot;780&quot; data-origin-height=&quot;607&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
재부팅 여부
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;IntelliJ_실행&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IntelliJ 실행&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;605&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lolEo/btsnhehMac6/ZlFdnQd0CFu5JVTnOFl5T0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lolEo/btsnhehMac6/ZlFdnQd0CFu5JVTnOFl5T0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lolEo/btsnhehMac6/ZlFdnQd0CFu5JVTnOFl5T0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlolEo%2FbtsnhehMac6%2FZlFdnQd0CFu5JVTnOFl5T0%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;1206&quot; height=&quot;605&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;605&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
시작 메뉴에 IntelliJ IDEA 검색 가능&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/biLRCb/btsnhtr89m7/fPGszVIiP72gk6juhbP7Ek/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/biLRCb/btsnhtr89m7/fPGszVIiP72gk6juhbP7Ek/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/biLRCb/btsnhtr89m7/fPGszVIiP72gk6juhbP7Ek/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbiLRCb%2Fbtsnhtr89m7%2FfPGszVIiP72gk6juhbP7Ek%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;915&quot; height=&quot;708&quot; data-origin-width=&quot;915&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
약관 동의&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;708&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/pcWVH/btsnimTQNt9/q6rrLquoaqOsCGi9xEV8Dk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/pcWVH/btsnimTQNt9/q6rrLquoaqOsCGi9xEV8Dk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/pcWVH/btsnimTQNt9/q6rrLquoaqOsCGi9xEV8Dk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpcWVH%2FbtsnimTQNt9%2Fq6rrLquoaqOsCGi9xEV8Dk%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;916&quot; height=&quot;708&quot; data-origin-width=&quot;916&quot; data-origin-height=&quot;708&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
JetBrains의 개선을 위해 사용 정보 전송 여부 (거절)&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;1005&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lk7My/btsnfGGlPo0/mh0h8bDK1QHmY2Q5UXEK60/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lk7My/btsnfGGlPo0/mh0h8bDK1QHmY2Q5UXEK60/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lk7My/btsnfGGlPo0/mh0h8bDK1QHmY2Q5UXEK60/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flk7My%2FbtsnfGGlPo0%2Fmh0h8bDK1QHmY2Q5UXEK60%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;1005&quot; data-origin-width=&quot;1228&quot; data-origin-height=&quot;1005&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
IntelliJ 실행 초기화면
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;IntelliJ_탭_기본정보&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;IntelliJ 탭 기본정보&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;Projects&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Projects&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;New Project : 새 프로젝트 생성&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Open : 기본 프로젝트 열기&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Get from VCS ( =Get from Version Control) : Github와 같은 버전관리 도구에서 원격 저장소 불러오기&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Open existing Eclipse projects : 이클립스에 존재하는 프로젝트 열기&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;837&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wdra9/btsnhr8Xv1m/xmJPjy8cxrhUBnsRbidfm1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wdra9/btsnhr8Xv1m/xmJPjy8cxrhUBnsRbidfm1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wdra9/btsnhr8Xv1m/xmJPjy8cxrhUBnsRbidfm1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fwdra9%2Fbtsnhr8Xv1m%2FxmJPjy8cxrhUBnsRbidfm1%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;1280&quot; height=&quot;837&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;837&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;Customize&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Customize&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;컬러 테마, 폰트 크기, 키맵 등을 설정할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Import Settings : 세팅 파일 불러오기&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;All Settings : Customize 화면에 상세 설정 가능&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Y96HF/btsng56co8q/vDU50IATGXdbaj1QKBtUy0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Y96HF/btsng56co8q/vDU50IATGXdbaj1QKBtUy0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Y96HF/btsng56co8q/vDU50IATGXdbaj1QKBtUy0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FY96HF%2Fbtsng56co8q%2FvDU50IATGXdbaj1QKBtUy0%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;983&quot; height=&quot;643&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;Plugins&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Plugins&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Marketplace : 새로운 플러그인(프로그래밍 언어, 라이브러리, 빌드 툴 등)을 검색 및 설치할 수 있다&lt;/span&gt;&lt;/li&gt;
&lt;li style=&quot;list-style-type: circle; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Installed : 이미 설치되어 있는 플러그인을 확인하거나 업데이트 할 수 있다&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;643&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0xkP2/btsni7oEWwj/xRsYoAM1kvb4dZckV8iza0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0xkP2/btsni7oEWwj/xRsYoAM1kvb4dZckV8iza0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0xkP2/btsni7oEWwj/xRsYoAM1kvb4dZckV8iza0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0xkP2%2Fbtsni7oEWwj%2FxRsYoAM1kvb4dZckV8iza0%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;983&quot; height=&quot;643&quot; data-origin-width=&quot;983&quot; data-origin-height=&quot;643&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;Learn_IntelliJ_IDEA&quot; style=&quot;text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Learn IntelliJ IDEA&lt;/span&gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: circle; color: #666666;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Start Learning : IntelliJ 사용법과 기본 단축키를 배울 수 있는 트레이닝 코스를 시작한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Editor 에서 IntelliJ가 지시하는 내용들을 실습하는 식으로 진행된다. (ex : 단축키, 검색 방법, Git 연동 등)&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;758&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lQ9Ym/btsnitS2tcP/KfkbeL51sckDynDOFaUSnK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lQ9Ym/btsnitS2tcP/KfkbeL51sckDynDOFaUSnK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lQ9Ym/btsnitS2tcP/KfkbeL51sckDynDOFaUSnK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlQ9Ym%2FbtsnitS2tcP%2FKfkbeL51sckDynDOFaUSnK%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;1280&quot; height=&quot;758&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;758&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size14&quot;&gt;참고블로그&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://bada744.tistory.com/59&quot;&gt;https://bada744.tistory.com/59&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689119808433&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;[IntelliJ] IntelliJ IDEA 다운로드 및 설치하기&quot; data-og-description=&quot;IntelliJ 2021.2.3 Release 기준 (2021-11-14 작성) IntelliJ IDEA JetBrains사에서 제작한 상용 자바 통합 개발 환경(IDE) Community Edition - 무료 버전, 상용 버전에 비하여 일부 기능이 제한됨. (※ HTML, C..&quot; data-og-host=&quot;bada744.tistory.com&quot; data-og-source-url=&quot;https://bada744.tistory.com/59&quot; data-og-url=&quot;https://bada744.tistory.com/59&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/p9cvE/hyOnTpFFfY/Pqq2CsV7VRXnlkoalfv6P1/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300,https://scrap.kakaocdn.net/dn/bb8D2c/hyOmsgbgVu/a921tAFNgztWlVYeN9MaJk/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300,https://scrap.kakaocdn.net/dn/NmCFm/hyOmqiBe52/5Bwk2uKTVyRkVFuR1CKm3k/img.png?width=941&amp;amp;height=1140&amp;amp;face=0_0_941_1140&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://bada744.tistory.com/59&quot; data-source-url=&quot;https://bada744.tistory.com/59&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/p9cvE/hyOnTpFFfY/Pqq2CsV7VRXnlkoalfv6P1/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300,https://scrap.kakaocdn.net/dn/bb8D2c/hyOmsgbgVu/a921tAFNgztWlVYeN9MaJk/img.png?width=300&amp;amp;height=300&amp;amp;face=0_0_300_300,https://scrap.kakaocdn.net/dn/NmCFm/hyOmqiBe52/5Bwk2uKTVyRkVFuR1CKm3k/img.png?width=941&amp;amp;height=1140&amp;amp;face=0_0_941_1140');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[IntelliJ] IntelliJ IDEA 다운로드 및 설치하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;IntelliJ 2021.2.3 Release 기준 (2021-11-14 작성) IntelliJ IDEA JetBrains사에서 제작한 상용 자바 통합 개발 환경(IDE) Community Edition - 무료 버전, 상용 버전에 비하여 일부 기능이 제한됨. (※ HTML, C.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;bada744.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div style=&quot;color: #000000; text-align: center;&quot;&gt;
&lt;div id=&quot;reaction-317&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/317&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://haenny.tistory.com/317&lt;/a&gt; &amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;div&gt;정리 잘되어 있는 블로그&amp;nbsp;&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/305</guid>
      <comments>https://nizimo.tistory.com/305#entry305comment</comments>
      <pubDate>Wed, 12 Jul 2023 08:57:38 +0900</pubDate>
    </item>
    <item>
      <title>MyBatis] Dynamic Query Map(or Value Object) 파라메터 foreach 문법에 key, value 사용하기</title>
      <link>https://nizimo.tistory.com/303</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단순 List나 Array의 foreach INSERT, UPDATE, DELETE, MERGE 문의 관한 내용은 아래 게시글을 참고하자.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1689119664782&quot; style=&quot;color: #000000; text-align: start;&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;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE, UPDATE) - Oracle&quot; data-og-description=&quot;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE, UPDATE) - Oracle foreach문은 사용할 때마다 사용되는 위치도 속성도 어려워서 더이상 헷갈리지 않기 위해 남겨본다 :-) ! MySQL foreach 사용방..&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/21&quot; data-og-url=&quot;https://haenny.tistory.com/21&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cipsZr/hyNH9H1862/jR2zRle4ZR0Rks41BJRdVK/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/cVT6j1/hyNH2B8kBl/9bZUGKeQpigKBpKlZBOgvk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/U49DG/hyNH1pGYPi/8rILxH6qVKIAYdzqePUV01/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://haenny.tistory.com/21&quot; data-source-url=&quot;https://haenny.tistory.com/21&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cipsZr/hyNH9H1862/jR2zRle4ZR0Rks41BJRdVK/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/cVT6j1/hyNH2B8kBl/9bZUGKeQpigKBpKlZBOgvk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/U49DG/hyNH1pGYPi/8rILxH6qVKIAYdzqePUV01/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE, UPDATE) - Oracle&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE, UPDATE) - Oracle foreach문은 사용할 때마다 사용되는 위치도 속성도 어려워서 더이상 헷갈리지 않기 위해 남겨본다 :-) ! MySQL foreach 사용방.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure id=&quot;og_1689119664784&quot; style=&quot;color: #000000; text-align: start;&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;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE) - MySQL&quot; data-og-description=&quot;[MyBatis]&amp;nbsp;List&amp;nbsp;파라메터&amp;nbsp;foreach&amp;nbsp;사용&amp;nbsp;(INSERT,&amp;nbsp;DELETE)&amp;nbsp;-&amp;nbsp;MySQL Oracle 버전이 궁금하다면 ? 클릭 ! [MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE) [MyBatis]&amp;nbsp;List&amp;nbsp;파라메터&amp;nbsp;foreac..&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/182&quot; data-og-url=&quot;https://haenny.tistory.com/182&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fMEUq/hyNHXgxpfG/HLlYbqkwj6qU4edKTNwpR1/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/014Ip/hyNHZ6tgh3/12L9sURxbVhJbqy3I2n4pK/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/jZjxh/hyNH8oOaIq/9oX0XpccAuJCrORFwYMLX1/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://haenny.tistory.com/182&quot; data-source-url=&quot;https://haenny.tistory.com/182&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fMEUq/hyNHXgxpfG/HLlYbqkwj6qU4edKTNwpR1/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/014Ip/hyNHZ6tgh3/12L9sURxbVhJbqy3I2n4pK/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/jZjxh/hyNH8oOaIq/9oX0XpccAuJCrORFwYMLX1/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE) - MySQL&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;[MyBatis]&amp;nbsp;List&amp;nbsp;파라메터&amp;nbsp;foreach&amp;nbsp;사용&amp;nbsp;(INSERT,&amp;nbsp;DELETE)&amp;nbsp;-&amp;nbsp;MySQL Oracle 버전이 궁금하다면 ? 클릭 ! [MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE) [MyBatis]&amp;nbsp;List&amp;nbsp;파라메터&amp;nbsp;foreac.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;foreach&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;foreach&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;collection&lt;/b&gt;&amp;nbsp;&lt;/span&gt;: 넘어온 파라미터의 반복하기 원하는 파라미터를 입력하여 주면 된다. 예를 들어 vo의 testMap이라는 Map이 있다면 collection에 testMap을 넣어주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;item&lt;/b&gt;&amp;nbsp;&lt;/span&gt;: List의 경우 순차적으로 반복하여 값이 저장된다. item을 data라고 하였을 경우 WHERE col = #{data} 이런식으로 사용이 가능하다. Map에서는 key의 value가 저장된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;separator&lt;/b&gt;&amp;nbsp;&lt;/span&gt;: 반복 되는 사이에 출력 할 문자열&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;open&lt;/b&gt;&amp;nbsp;&lt;/span&gt;: 해당 구문이 시작될때 삽입되는 문자열&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;close&lt;/b&gt;&amp;nbsp;&lt;/span&gt;: 해당 구문이 종료될때 삽입되는 문자열&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;b&gt;index&lt;/b&gt;&amp;nbsp;&lt;/span&gt;: List의 경우 index 번호,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Map의 경우 key 값&lt;/b&gt;&lt;/span&gt;이 저장된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1689119664790&quot; class=&quot;xml&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;foreach collection=&quot;Map or List or Array&quot; item=&quot;alias&quot; &amp;gt;&amp;lt;/foreach&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;Map_안에_Map_(or_Value_Object)&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Map 안에 Map (or Value Object)&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1689119664791&quot; class=&quot;arduino&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class TestVO {
	private String name;
	private Map&amp;lt;String, String&amp;gt; infoObj;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;TestVO에 다음과 같은 구조의 데이터가 들어있다고 가정할 때, NAME, AGE와 COLOR 컬럼 데이터를 INSERT 해야한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119664792&quot; class=&quot;css&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
	name: &quot;haenny&quot;,
	info: {	
		// key : value = age : color    
		// 나이에 좋아했던 색상   
		14 : &quot;pink&quot;,
		15 : &quot;yellow&quot;,
		20 : &quot;blue&quot;
	}
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;List 형태의 경우 TestVO를 foreach 돌려서 사용하면되지만, Map의 경우&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Key와 Value 값을 가져올 수 있나&lt;/span&gt;? List이거나 Array가 아니기 때문에 foreach 문법을 사용할 수 없는 거 아닌가? 생각할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1689119664794&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;select id=&quot;insInfo&quot; parameterType=&quot;testVO&quot;&amp;gt;
	INSERT INTO TEST_TBL (
		NAME,
		AGE,
		COLOR
	)
	&amp;lt;foreach collection=&quot;info&quot; item=&quot;value&quot; index=&quot;key&quot; separator=&quot;&quot; open=&quot;&quot; close=&quot;&quot;&amp;gt;
		SELECT #{name} AS NAME,		// TEST VO에서 바로 가져온 값
			#{key} AS AGE,		// info 라는 collection (Map) 의 Key 값
			#{value} AS COLOR	// info 라는 collection (Map) 의 Value 값    
	  	FROM DUAL     
	&amp;lt;/foreach&amp;gt;
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;INDEX 를 List나 Array의 반복되는 구문 형태로만 사용된다고 생각할 수 있지만, Map의 경우 Key 값이 저장된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;Map_안에_List&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Map 안에 List&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1689119664796&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;select id=&quot;getTest&quot; parameterType=&quot;testVO2&quot; resultType=&quot;java.util.list&quot;&amp;gt;
	SELECT TEST
	FROM TEST_TBL
	WHERE 
    &amp;lt;foreach collection=&quot;mapData&quot; item=&quot;value&quot; index=&quot;key&quot; separator=&quot;AND&quot;&amp;gt;
    	#{key} IN
        // mapData = {key : value} 형태인데 value 값이 List 형태인 경우이다
        &amp;lt;foreach collection=&quot;value&quot; item=&quot;item&quot; index=&quot;idx&quot; separator=&quot;or&quot;  open=&quot;(&quot; close=&quot;)&quot;&amp;gt;
        	#{item}
        &amp;lt;/foreach&amp;gt;
    &amp;lt;/foreach&amp;gt;
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/284&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://haenny.tistory.com/284&lt;/a&gt;&amp;nbsp; 에서 퍼옴 정리 잘되어 있네 살아있네 ㅎ&lt;/p&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/303</guid>
      <comments>https://nizimo.tistory.com/303#entry303comment</comments>
      <pubDate>Wed, 12 Jul 2023 08:54:47 +0900</pubDate>
    </item>
    <item>
      <title>[Web] 415 (Unsupported Media Type) 오류 원인 살펴보기</title>
      <link>https://nizimo.tistory.com/302</link>
      <description>&lt;blockquote style=&quot;background-color: #000000; color: #333333; text-align: center;&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;415 Unsupported Media Type&lt;/span&gt;&lt;br /&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;173&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b2TmHS/btsnjaFFPxC/P9C3rsDnxJHBHWUZC10Lgk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b2TmHS/btsnjaFFPxC/P9C3rsDnxJHBHWUZC10Lgk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b2TmHS/btsnjaFFPxC/P9C3rsDnxJHBHWUZC10Lgk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb2TmHS%2FbtsnjaFFPxC%2FP9C3rsDnxJHBHWUZC10Lgk%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;996&quot; height=&quot;173&quot; data-origin-width=&quot;996&quot; data-origin-height=&quot;173&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;한번쯤 만나봤을 이 골치아픈 415는 클라이언트(View)와 서버(Controller)의 요청/응답하는 데이터의 매개변수 설정이 잘못되었을 때 주로 발생한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li style=&quot;list-style-type: decimal; color: #666666;&quot;&gt;헤더 타입 설정&lt;/li&gt;
&lt;li style=&quot;list-style-type: decimal; color: #666666;&quot;&gt;RequestBody 설정&lt;/li&gt;
&lt;/ol&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #e56a2c; text-align: left;&quot;&gt;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #e56a2c; text-align: left;&quot;&gt;추천인 코드 : AF8800551&lt;/span&gt;&lt;/p&gt;
&lt;h2 id=&quot;HTTP_Request,_Content-Type_헤더와_Accept_헤더_확인하기&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HTTP Request, Content-Type 헤더와 Accept 헤더 확인하기&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;369&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mzex2/btsnbIc6FZ9/rrXs0OHK62H9KLOSY5Qxwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mzex2/btsnbIc6FZ9/rrXs0OHK62H9KLOSY5Qxwk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mzex2/btsnbIc6FZ9/rrXs0OHK62H9KLOSY5Qxwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fmzex2%2FbtsnbIc6FZ9%2FrrXs0OHK62H9KLOSY5Qxwk%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;1280&quot; height=&quot;369&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;369&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #000000; color: #333333; text-align: center;&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;Content-Type&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;헤더와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;Consumes&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;설정&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;color: #666666; text-align: start;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;@RequestMapping의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;consumes&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;설정과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;Content-Type&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;request 헤더가 일치할 경우에 URL이 호출된다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444;&quot;&gt;Content-Type은 HTTP 메시지(요청과 응답 모두)에 담겨 보내는&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #006dd7;&quot;&gt;데이터 형식&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444;&quot;&gt;을 알려주는 헤더이다.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #444444;&quot;&gt;대부분의 브라우저와 웹서버는 HTTP 표준 스펙을 따르는 Content-Type 헤더를 기준으로 HTTP 메시지에 담긴 데이터를 분석&amp;middot;파싱한다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #444444;&quot;&gt;그러나 HTTP 요청의 경우 GET방식인 경우는 무조건 URL 끝에 쿼리스트링(key=value) 형식이기 때문에 Content-Type 헤더가 굳이 필요없다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444;&quot;&gt;따라서 Content-Type은 POST방식이나 PUT방식처럼&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff;&quot;&gt;BODY에 데이터를 싣어 보낼 때 중요&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444;&quot;&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;하다&lt;/b&gt;&lt;/span&gt;.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일반적으로는 사용되는 Content-Type은 3가지가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;application/json&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;application/json&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;요청 데이터가 Json&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;i&gt;{key : value}&lt;/i&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;형식일 때 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119585572&quot; class=&quot;reasonml&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@RequestMapping(value=&quot;/test.do&quot;, method=RequestMethod.POST, consumes=&quot;application/json;&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1689119585573&quot; class=&quot;groovy&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;contentType : &quot;application/json&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;application/x-www-form-urlencoded&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;application/x-www-form-urlencoded&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;요청 데이터가 쿼리스트링&lt;span style=&quot;color: #8a3db6;&quot;&gt;&lt;i&gt;(key=value)&lt;/i&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;형식일 때 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;HTML 폼을 만들어 데이터를 전송할 때 주로 사용하는 헤더이지만, 요즘은 Json Handling을 많이하기 때문에 사용이 예전에 비해 많이 줄었다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119585575&quot; class=&quot;reasonml&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@RequestMapping(value=&quot;/test.do&quot;, method=RequestMethod.POST, consumes=&quot;application/x-www-form-urlencoded&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1689119585575&quot; class=&quot;groovy&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;contentType : &quot;application/x-www-form-urlencoded&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;multipart/form-data&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;multipart/form-data&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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;pre id=&quot;code_1689119585576&quot; class=&quot;reasonml&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@RequestMapping(value=&quot;/test.do&quot;, method=RequestMethod.POST, consumes=&quot;multipart/form-data&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1689119585577&quot; class=&quot;groovy&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;contentType : &quot;multipart/form-data&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #000000; color: #333333; text-align: center;&quot; data-ke-style=&quot;style1&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;b&gt;Accept&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;헤더와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;produces&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;설정&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote style=&quot;color: #666666; text-align: start;&quot; data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;@RequestMapping의&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;produces&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;설정과&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Accept&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;request 헤더가 일치할 경우에 URL이 호출된다.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; background-color: #ffffff; color: #444444;&quot;&gt;브라우저(클라이언트)에서 웹서버로 요청 시 요청 메시지에 담기는 헤더이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444;&quot;&gt;Accept 헤더는 자신에게 이러한 데이터 타입만 허용하겠다는 뜻으로, 브라우저가 요청 메시지의 Accept 헤더 값을&amp;nbsp;&lt;/span&gt;&lt;i&gt;application/json&lt;/i&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444;&quot;&gt;&amp;nbsp;이라고 설정했다면&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444;&quot;&gt;웹 서버에게 나는 json 데이터만 처리할 수 있으니,&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #006dd7;&quot;&gt;json 데이터 형식으로 응답&lt;/span&gt;&lt;/b&gt;&lt;span style=&quot;background-color: #ffffff; color: #444444;&quot;&gt;을 돌려줘라고 말하는 것과 같다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119585580&quot; class=&quot;reasonml&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;@RequestMapping(value=&quot;/test.do&quot;, method=RequestMethod.POST, produces=&quot;application/json;&quot;)&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1689119585580&quot; class=&quot;groovy&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dataType : &quot;json&quot;	// ajax&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;URI를 호출하는 클라이언트쪽은 Ajax를 기준의 예시로 작성하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #000000;&quot;&gt;만약&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;XMLHttpRequest&lt;/b&gt;의 예시가 궁금하다면 각각 다음처럼 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1689119585582&quot; class=&quot;reasonml&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;var xhr = new XMLHttpRequest();
xhr.responseType = 'json';
xhr.setRequestHeader('Content-type', 'application/json; charset=UTF-8;');&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터 타입별 예제는&lt;a style=&quot;color: #353535;&quot; href=&quot;https://aljjabaegi.tistory.com/590&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;아래 게시글&lt;/a&gt;에 자세히 설명되어있으니 참고하자.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689119585583&quot; style=&quot;color: #000000; text-align: start;&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;springboot form, ajax 데이터 타입별 Controller에서 받는 방법 @RequestParam, @RequestBody&quot; data-og-description=&quot;springboot form, ajax 데이터 타입별 Controller에서 받는 방법 @RequestParam,&amp;nbsp;@RequestBody 이번 포스팅에서는 springboot web project에서 form 과 ajax로 자주 사용되는 데이터타입을 전송하고 받는 방법을..&quot; data-og-host=&quot;aljjabaegi.tistory.com&quot; data-og-source-url=&quot;https://aljjabaegi.tistory.com/590&quot; data-og-url=&quot;https://aljjabaegi.tistory.com/590&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/Zv61A/hyNui4Zwgx/JDpRuwRIl328D7YureJ0p0/img.jpg?width=450&amp;amp;height=339&amp;amp;face=0_0_450_339,https://scrap.kakaocdn.net/dn/bUWRFB/hyNsTeHQrp/CELHZtocAu6Azwu1VVTvB0/img.jpg?width=450&amp;amp;height=339&amp;amp;face=0_0_450_339&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://aljjabaegi.tistory.com/590&quot; data-source-url=&quot;https://aljjabaegi.tistory.com/590&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/Zv61A/hyNui4Zwgx/JDpRuwRIl328D7YureJ0p0/img.jpg?width=450&amp;amp;height=339&amp;amp;face=0_0_450_339,https://scrap.kakaocdn.net/dn/bUWRFB/hyNsTeHQrp/CELHZtocAu6Azwu1VVTvB0/img.jpg?width=450&amp;amp;height=339&amp;amp;face=0_0_450_339');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;springboot form, ajax 데이터 타입별 Controller에서 받는 방법 @RequestParam, @RequestBody&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;springboot form, ajax 데이터 타입별 Controller에서 받는 방법 @RequestParam,&amp;nbsp;@RequestBody 이번 포스팅에서는 springboot web project에서 form 과 ajax로 자주 사용되는 데이터타입을 전송하고 받는 방법을.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;aljjabaegi.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;@RequestBody_&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;@RequestBody&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;위의 헤더 타입을 맞추고 나서도 415 에러가 계속 떨어지는 경우는 RequestBody 설정이 제대로 되어있지 않을 확률이 99%이다 !!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;Jackson_라이브러리_의존성_추가&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Jackson 라이브러리 의존성 추가&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;pom.xml 위치에 다음 의존성을 추가한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119585585&quot; class=&quot;xml&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;dependency&amp;gt;
    &amp;lt;groupId&amp;gt;com.fasterxml.jackson.core&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;jackson-databind&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;2.10.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;annotation-driven_추가_★★★★★★★★&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;annotation-driven 추가 ★&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;★&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;★&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;★&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;★&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;★&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;★&lt;/span&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;★&lt;/span&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;dispatchar-servlet.xml (WEB-INF/config/springmvc 경로)에 다음 태그를 추가한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119585586&quot; class=&quot;crystal&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;mvc:annotation-driven /&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Spring 3.0부터 제공하고 있는 annotation 기반의 controller 호출이나 bean&amp;nbsp; 객체 등록, 매핑의 작업을 편리하게 해준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&amp;lt;mvc:annotation-driven/&amp;gt;&lt;/b&gt;&lt;/span&gt;을 사용하면 내부에서 자동으로 RequestMappingHandlerMapping 과 RequestMappingHandlerAdapter를 구성해주어 Handler 역할을 쉽게 구현시켜주는 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;설정을 하지 않고 RequestBody를 사용한다면 제대로 동작하지 않을 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/280&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://haenny.tistory.com/280&lt;/a&gt;&amp;nbsp; 에서 퍼옴 정리 잘되어 있음&lt;/p&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/302</guid>
      <comments>https://nizimo.tistory.com/302#entry302comment</comments>
      <pubDate>Wed, 12 Jul 2023 08:53:25 +0900</pubDate>
    </item>
    <item>
      <title>[Oracle] OUTER JOIN 사용 방법과 차이점 (LEFT JOIN, RIGHT JOIN, FULL OUTER JOIN)</title>
      <link>https://nizimo.tistory.com/301</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;OUTER(외부) JOIN&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;이란 조인 조건에서&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;u&gt;&lt;b&gt;동일한 값이 없는 행도 반환할 때&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/b&gt;&lt;/u&gt;사용하는 구문이다.&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;즉 A, B 테이블을 JOIN 할 경우, 조건에 맞지 않는 데이터도 표시하고 싶을 때 OUTER JOIN을 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #666666;&quot;&gt;오늘은&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN&lt;/b&gt;을 살펴볼 것이다 !!&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;LEFT_/_RIGHT_/_OUTER_JOIN_맛보기&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;LEFT / RIGHT / OUTER JOIN 맛보기&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&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;953&quot; data-origin-height=&quot;538&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/zERXB/btsnhcYy6fc/GkEmAuWEKZkNoD1q2Vqwo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/zERXB/btsnhcYy6fc/GkEmAuWEKZkNoD1q2Vqwo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/zERXB/btsnhcYy6fc/GkEmAuWEKZkNoD1q2Vqwo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FzERXB%2FbtsnhcYy6fc%2FGkEmAuWEKZkNoD1q2Vqwo0%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;953&quot; height=&quot;538&quot; data-origin-width=&quot;953&quot; data-origin-height=&quot;538&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;OUTER JOIN은 조인 USING, ON 조건절을 필수적으로 사용해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;LEFT OUTER JOIN과 RIGHT OUTER JOIN은 기준이 되는 테이블이 조인 수행 시 무조건&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;드라이빙 테이블(&lt;/b&gt;첫번째로 ACCESS 되는 테이블&lt;b&gt;)&lt;/b&gt;이 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;또한, 드라이빙 테이블이 어떤 테이블이냐에 따라 쿼리 성능이나 튜닝 부분에서 굉장히 중요한 영향을 끼치기 때문에 데이터 양보다는 무조건 적은 데이터를 추출하는 테이블을 드라이빙 테이블로 잡는 것이 중요하다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #666666;&quot;&gt;&quot;이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다&quot;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #ef6f53;&quot;&gt;&lt;b&gt;&lt;span&gt;추천인 코드 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; text-align: center;&quot;&gt;AF8800551&lt;/span&gt;&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;사용_방법&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;사용 방법&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689119513933&quot; class=&quot;sql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *                              -- 조회할 컬럼을 선택한다 (모든 컬럼 조회)
  FROM TABLE1  T1                             
  LEFT/RIGHT/FULL OUTER JOIN TABLE2  T2               
  ON (T1.KEY = T2.KEY)                -- 두 테이블을 연결할 조건을 명시한다&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;USING&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;조건절을 사용하는 경우는 조인하는 테이블 내에 있는 컬럼들이 동일한 이름을 가지고 있을 때 사용 가능하다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119513937&quot; class=&quot;sql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT *                     -- 조회할 컬럼을 선택한다 (모든 컬럼 조회)
  FROM TABLE1  T1                             
  LEFT/RIGHT/FULL OUTER JOIN TABLE2  T2                
  USING (KEY)                -- 두 테이블이 동일하게 갖고 있는 컬럼명으로 조건을 명시한다&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size18&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;예제&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;아래와 같이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;KEY&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;컬럼이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;TIMESTAMP&lt;/b&gt;&lt;/span&gt;와&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;NUM&lt;/b&gt;&lt;/span&gt;인 같은 구조의 테이블 A와 B가 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;283&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bPLwVs/btsngIjmdSi/a9by1JK4P4Fx5EgK03LKmK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bPLwVs/btsngIjmdSi/a9by1JK4P4Fx5EgK03LKmK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bPLwVs/btsngIjmdSi/a9by1JK4P4Fx5EgK03LKmK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbPLwVs%2FbtsngIjmdSi%2Fa9by1JK4P4Fx5EgK03LKmK%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;890&quot; height=&quot;283&quot; data-origin-width=&quot;890&quot; data-origin-height=&quot;283&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;LEFT_JOIN_(LEFT_OUTER_JOIN)&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;LEFT JOIN (LEFT OUTER JOIN)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;A 테이블에 LEFT OUTER JOIN B를 하는 경우&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;A,B 테이블의 조인 조건이 맞는 경우 B 테이블의 컬럼에서 해당 데이터를 가져오고, 조인 조건이 맞지 않는 경우 각 테이블의 레코드 중 A 테이블의 레코드는 무조건 결과값에 포함되어 나오고 B테이블에서 가져온 컬럼들은 NULL로 채운다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119513943&quot; class=&quot;stylus&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.TIMESTAMP
     , A.NUM
     , A.VERSION
     , A.MSG_ID
     , A.GRADE
     , B.TIMESTAMP
     , B.NUM
     , B.VERSION
     , B.MSG_ID
     , B.GRADE 
  FROM A
  LEFT JOIN B ON(B.TIMESTAMP = A.TIMESTAMP AND B.NUM = A.NUM)&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;849&quot; data-origin-height=&quot;285&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byAxUL/btsnhTxF2PN/FoM37oGjFW0ehWLMqVtSe0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byAxUL/btsnhTxF2PN/FoM37oGjFW0ehWLMqVtSe0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byAxUL/btsnhTxF2PN/FoM37oGjFW0ehWLMqVtSe0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbyAxUL%2FbtsnhTxF2PN%2FFoM37oGjFW0ehWLMqVtSe0%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;849&quot; height=&quot;285&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;285&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;키 값인 TIMESTAMP와 VIN이 매칭되는 데이터를 함께 보여주고 있지만, 왼쪽 테이블(A)를 기준으로 매칭되지 않는 데이터까지 보여주고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;_RIGHT_JOIN_(RIGHT_OUTER_JOIN)&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;RIGHT JOIN (RIGHT OUTER JOIN)&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;LEFT JOIN과 반대로 우측 테이블, 즉 테이블 B가 기준이 되어 결과를 보여준다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119513944&quot; class=&quot;stylus&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.TIMESTAMP
     , A.NUM
     , A.VERSION
     , A.MSG_ID
     , A.GRADE
     , B.TIMESTAMP
     , B.NUM
     , B.VERSION
     , B.MSG_ID
     , B.GRADE 
  FROM A
  RIGHT JOIN B ON(B.TIMESTAMP = A.TIMESTAMP AND B.NUM = A.NUM)&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;849&quot; data-origin-height=&quot;291&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vlPYE/btsngIKrvxa/50KHLs5X6akkWIwhNfKjx1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vlPYE/btsngIKrvxa/50KHLs5X6akkWIwhNfKjx1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vlPYE/btsngIKrvxa/50KHLs5X6akkWIwhNfKjx1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvlPYE%2FbtsngIKrvxa%2F50KHLs5X6akkWIwhNfKjx1%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;849&quot; height=&quot;291&quot; data-origin-width=&quot;849&quot; data-origin-height=&quot;291&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;키 값인 TIMESTAMP와 VIN이 매칭되는 데이터를 함께 보여주고 있지만, 오른쪽 테이블(B)를 기준으로 매칭되지 않는 데이터까지 보여주고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;_FULL_OUTER_JOIN&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;&amp;nbsp;FULL OUTER JOIN&lt;/b&gt;&lt;/span&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;좌측테이블 A와 우측 테이블 B의 데이터를 모두 읽어 중복된 데이터는 삭제한 JOIN 결과를 보여준다.&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119513946&quot; class=&quot;stylus&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.TIMESTAMP
     , A.NUM
     , A.VERSION
     , A.MSG_ID
     , A.GRADE
     , B.TIMESTAMP
     , B.NUM
     , B.VERSION
     , B.MSG_ID
     , B.GRADE 
  FROM A
  FULL OUTER JOIN B ON(B.TIMESTAMP = A.TIMESTAMP AND B.NUM = A.NUM)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&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;850&quot; data-origin-height=&quot;363&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GfMA1/btsngw4gzlP/G5y88ZXxSkgWbpx7NjerX1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GfMA1/btsngw4gzlP/G5y88ZXxSkgWbpx7NjerX1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GfMA1/btsngw4gzlP/G5y88ZXxSkgWbpx7NjerX1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGfMA1%2Fbtsngw4gzlP%2FG5y88ZXxSkgWbpx7NjerX1%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;850&quot; height=&quot;363&quot; data-origin-width=&quot;850&quot; data-origin-height=&quot;363&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #333333;&quot;&gt;키 값인 TIMESTAMP와 VIN이 매칭되는 데이터를 함께 보여주고 있고, 두 테이블 A와 B에서 매칭되지 않는 데이터도 함께 보여주고 있다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 조인 조건으로 매칭되는 데이터만 보고 싶다면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #f3c000;&quot;&gt;&lt;b&gt;INNER JOIN&lt;/b&gt;&lt;/span&gt;을 사용하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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 style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Link :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://haenny.tistory.com/35&quot;&gt;https://haenny.tistory.com/35&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689119513948&quot; style=&quot;color: #000000; text-align: start;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Oracle] INNER JOIN이란? 사용방법도 함께 알아보자&quot; data-og-description=&quot;[Oracle] INNER JOIN이란? 사용방법도 함께 알아보자 INNER(내부) JOIN 이란, 두 테이블간 조인 조건을 만족하는 행을 반환할 때 사용하는 구문이다. 쉽게 조인하려는 두 테이블의 교집합이라고 생각하면 될 듯 하..&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/35&quot; data-og-url=&quot;https://haenny.tistory.com/35&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/jgN9k/hyDew1imrl/p8vAAoKL14H08ak37GTAI0/img.png?width=750&amp;amp;height=748&amp;amp;face=0_0_750_748,https://scrap.kakaocdn.net/dn/vqQ7f/hyDek7AmUT/9Ffc4wqLdisNfuJucIkKzK/img.png?width=890&amp;amp;height=283&amp;amp;face=0_0_890_283,https://scrap.kakaocdn.net/dn/o4362/hyDenwtl2i/EG69vxxKbRulb9BHkkJyM1/img.png?width=777&amp;amp;height=245&amp;amp;face=0_0_777_245&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://haenny.tistory.com/35&quot; data-source-url=&quot;https://haenny.tistory.com/35&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/jgN9k/hyDew1imrl/p8vAAoKL14H08ak37GTAI0/img.png?width=750&amp;amp;height=748&amp;amp;face=0_0_750_748,https://scrap.kakaocdn.net/dn/vqQ7f/hyDek7AmUT/9Ffc4wqLdisNfuJucIkKzK/img.png?width=890&amp;amp;height=283&amp;amp;face=0_0_890_283,https://scrap.kakaocdn.net/dn/o4362/hyDenwtl2i/EG69vxxKbRulb9BHkkJyM1/img.png?width=777&amp;amp;height=245&amp;amp;face=0_0_777_245');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[Oracle] INNER JOIN이란? 사용방법도 함께 알아보자&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;[Oracle] INNER JOIN이란? 사용방법도 함께 알아보자 INNER(내부) JOIN 이란, 두 테이블간 조인 조건을 만족하는 행을 반환할 때 사용하는 구문이다. 쉽게 조인하려는 두 테이블의 교집합이라고 생각하면 될 듯 하.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;FULL_OUTER_JOIN_의_같은_예제로_USING_사용_예시&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;FULL OUTER JOIN 의 같은 예제로 USING 사용 예시&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1689119513950&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT A.TIMESTAMP
     , A.NUM
     , A.VERSION
     , A.MSG_ID
     , A.GRADE
     , B.TIMESTAMP
     , B.NUM
     , B.VERSION
     , B.MSG_ID
     , B.GRADE 
  FROM A
  FULL OUTER JOIN B USING (TIMESTAMP ,NUM)&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;단, USING 구문은 MS SQL Server와 Sybase에서는 지원하지 않는다고하니 참고하자.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/34&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://haenny.tistory.com/34&lt;/a&gt;&amp;nbsp; 에서 퍼옴 정리 잘됨&lt;/p&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/301</guid>
      <comments>https://nizimo.tistory.com/301#entry301comment</comments>
      <pubDate>Wed, 12 Jul 2023 08:52:12 +0900</pubDate>
    </item>
    <item>
      <title>[MyBatis] 시퀀스 자동증가(NEXTVAL) 사용한 INSERT foreach 쿼리</title>
      <link>https://nizimo.tistory.com/300</link>
      <description>&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;&amp;nbsp;&lt;/span&gt;파라메터의 foreach 사용방법에 대해서는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #353535;&quot; href=&quot;https://haenny.tistory.com/21&quot;&gt;아래 게시글&lt;/a&gt;을 참고해주세요.&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689119419588&quot; style=&quot;color: #000000; text-align: start;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE)&quot; data-og-description=&quot;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE) foreach문은 사용할 때마다 사용되는 위치도 속성도 어려워서 더이상 헷갈리지 않기 위해 남겨본다 :-) ! foreach문의 속성은 다음과 같다. 구분..&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/21&quot; data-og-url=&quot;https://haenny.tistory.com/21&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/czdtfJ/hyFzTAhFHh/Cq9RzYvToiSPUsf1HaJY71/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/neTw6/hyFzTG16n2/h7SuMLiuR91P4IBrYUFYIk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://haenny.tistory.com/21&quot; data-source-url=&quot;https://haenny.tistory.com/21&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/czdtfJ/hyFzTAhFHh/Cq9RzYvToiSPUsf1HaJY71/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/neTw6/hyFzTG16n2/h7SuMLiuR91P4IBrYUFYIk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE) foreach문은 사용할 때마다 사용되는 위치도 속성도 어려워서 더이상 헷갈리지 않기 위해 남겨본다 :-) ! foreach문의 속성은 다음과 같다. 구분.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시퀀스를 키값으로 갖는 테이블의 데이터를 INSERT할 때, 보통 시퀀스를 생성하여 아래와 같이 추가한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119419592&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;insert id=&quot;insCustomer&quot; parameterType=&quot;customerVO&quot;&amp;gt;
	&amp;lt;selectKey keyProperty=&quot;customerSeq&quot; resultType=&quot;String&quot; order=&quot;BEFORE&quot;&amp;gt;
		SELECT CUSTOMER_SEQ.NEXTVAL AS customerSeq FROM SYS.DUAL
	&amp;lt;/selectKey&amp;gt;
	INSERT INTO WEB_G_CUSTOMER (
		  CUSTOMER_SEQ
		, CUSTOMER_DIV
		, EMAIL
		, PASSWORD
		, TITLE
		, CONTENT
		, REG_DT
		, PROGRESS_CD 
	) VALUES (
		  #{customerSeq}
		, '4'
		, #{email}
		, #{password}
		, #{title}
		, #{content}
		, SYSDATE
		, #{progressCd}
	)
&amp;lt;/insert&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;파라메터가 리스트&lt;/span&gt;인 경우는 시퀀스를 어떻게 가져와서 저장해야할까?&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;구조상 INSERT를 할때마다 시퀀스의 NEXTVAL값을 가져와서 추가를 해야하는데,&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;foreach&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;태그 내&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;selectKey&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;태그를 사용하면 아래와 같은&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에러&lt;/span&gt;가 뜨는 것을 확인할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;The&amp;nbsp;content&amp;nbsp;of&amp;nbsp;element&amp;nbsp;type&amp;nbsp;&quot;foreach&quot;&amp;nbsp;must&amp;nbsp;match&amp;nbsp;&quot;(include|trim|where|set|foreach|choose|if|bind)&quot;.&lt;/span&gt;&lt;/blockquote&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;그렇다면 시퀀스 자동증가 테이블의 리스트 파라메터를 INSERT할 때는 다음과 같이 하면 된다 !&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119419611&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;update id=&quot;insFileList&quot; parameterType=&quot;java.util.List&quot;&amp;gt;
	INSERT INTO WEB_G_FILE (
		  FILE_SEQ
		, FILE_PATH
		, REAL_FILE_NM
		, FILE_NM
		, FILE_EXTENSION
		, FILE_SIZE
		, REG_DT
		, USE_YN
		, BOARD_SEQ
		, BOARD_DIV
	)
	SELECT FILE_SEQ.NEXTVAL AS fileSeq
		 , T.* 
	  FROM (
	         &amp;lt;foreach collection=&quot;list&quot; item=&quot;item&quot; index=&quot;index&quot; separator=&quot;union all&quot;&amp;gt;
			SELECT #{item.filePath} as filePath
			        , #{item.realFileNm} as realFileNm
			        , #{item.fileNm} as fileNm
			        , #{item.fileExtension} as fileExtension
			        , #{item.fileSize} as fileSize
			        , SYSDATE as regDt
			        , 'Y' as useYn
			        , #{item.boardSeq} as boardSeq
			        , '4' as boardDiv
			 FROM SYS.DUAL
	         &amp;lt;/foreach&amp;gt; 
	  ) T
&amp;lt;/update&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;시퀀스 생성방법을 모른다면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #353535;&quot; href=&quot;https://haenny.tistory.com/127&quot;&gt;다음 게시글&lt;/a&gt;을 참고하자 !&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689119419617&quot; style=&quot;color: #000000; text-align: start;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[Oracle] 자동증가 SEQUENCE 생성, 조회, 삭제&quot; data-og-description=&quot;[Oracle] 자동증가 SEQUENCE 생성, 조회, 삭제 SEQ값을 키 값으로 가지고 있는 테이블을 저장할 때 MAX(SEQ)+1로 데이터를 저장하게되면 데이터가 쌓일수록 과부하가 걸린다. 따라서 시퀀스를 생성하여 시퀀스의..&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/127&quot; data-og-url=&quot;https://haenny.tistory.com/127&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/M5NJB/hyFBnhjrcu/9ESUjbIbGYOOoi0CsDtQuk/img.png?width=750&amp;amp;height=748&amp;amp;face=0_0_750_748,https://scrap.kakaocdn.net/dn/bW5oZK/hyFCmOC2um/UKgjcSkKZ7O9Z3iiH7t3W0/img.png?width=750&amp;amp;height=748&amp;amp;face=0_0_750_748,https://scrap.kakaocdn.net/dn/viKrT/hyFCq4y3tj/lFg5bM9cvJBjg9DzYKxMgK/img.png?width=1103&amp;amp;height=400&amp;amp;face=0_0_1103_400&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://haenny.tistory.com/127&quot; data-source-url=&quot;https://haenny.tistory.com/127&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/M5NJB/hyFBnhjrcu/9ESUjbIbGYOOoi0CsDtQuk/img.png?width=750&amp;amp;height=748&amp;amp;face=0_0_750_748,https://scrap.kakaocdn.net/dn/bW5oZK/hyFCmOC2um/UKgjcSkKZ7O9Z3iiH7t3W0/img.png?width=750&amp;amp;height=748&amp;amp;face=0_0_750_748,https://scrap.kakaocdn.net/dn/viKrT/hyFCq4y3tj/lFg5bM9cvJBjg9DzYKxMgK/img.png?width=1103&amp;amp;height=400&amp;amp;face=0_0_1103_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[Oracle] 자동증가 SEQUENCE 생성, 조회, 삭제&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;[Oracle] 자동증가 SEQUENCE 생성, 조회, 삭제 SEQ값을 키 값으로 가지고 있는 테이블을 저장할 때 MAX(SEQ)+1로 데이터를 저장하게되면 데이터가 쌓일수록 과부하가 걸린다. 따라서 시퀀스를 생성하여 시퀀스의.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/126&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://haenny.tistory.com/126&lt;/a&gt;&amp;nbsp; 에서 퍼옴&lt;/p&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/300</guid>
      <comments>https://nizimo.tistory.com/300#entry300comment</comments>
      <pubDate>Wed, 12 Jul 2023 08:50:40 +0900</pubDate>
    </item>
    <item>
      <title>[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE, UPDATE) - Oracle</title>
      <link>https://nizimo.tistory.com/299</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;foreach문은 사용할 때마다 사용되는 위치도 속성도 어려워서 더이상 헷갈리지 않기 위해 남겨본다 :-) !&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a style=&quot;color: #353535;&quot; href=&quot;https://haenny.tistory.com/182&quot;&gt;MySQL foreach 사용방법은 ?&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689119351799&quot; style=&quot;color: #000000; text-align: start;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE) - MySQL&quot; data-og-description=&quot;[MyBatis]&amp;nbsp;List&amp;nbsp;파라메터&amp;nbsp;foreach&amp;nbsp;사용&amp;nbsp;(INSERT,&amp;nbsp;DELETE)&amp;nbsp;-&amp;nbsp;MySQL Oracle 버전이 궁금하다면 ? 클릭 ! [MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE) [MyBatis]&amp;nbsp;List&amp;nbsp;파라메터&amp;nbsp;foreac..&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/182&quot; data-og-url=&quot;https://haenny.tistory.com/182&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cgOvkN/hyHwvQtfyT/ypwKTnakYgJGzlEXN8DWCk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/btH9Sa/hyHuG0oP22/9lprraIl2FXPjatbINCHmk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/dYTR7n/hyHuBLy7a5/hEPxKgC5lRn1PnYuTfXNbK/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://haenny.tistory.com/182&quot; data-source-url=&quot;https://haenny.tistory.com/182&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cgOvkN/hyHwvQtfyT/ypwKTnakYgJGzlEXN8DWCk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/btH9Sa/hyHuG0oP22/9lprraIl2FXPjatbINCHmk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/dYTR7n/hyHuBLy7a5/hEPxKgC5lRn1PnYuTfXNbK/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE) - MySQL&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;[MyBatis]&amp;nbsp;List&amp;nbsp;파라메터&amp;nbsp;foreach&amp;nbsp;사용&amp;nbsp;(INSERT,&amp;nbsp;DELETE)&amp;nbsp;-&amp;nbsp;MySQL Oracle 버전이 궁금하다면 ? 클릭 ! [MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE) [MyBatis]&amp;nbsp;List&amp;nbsp;파라메터&amp;nbsp;foreac.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;foreach_속성&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span&gt;foreach 속성&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;table style=&quot;color: #666666; text-align: center; 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;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;collection&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전달받은 인자값&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;item&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전달받은 인자값을 다른이름으로 대체&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 구문이 시작할 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;close&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 구문이 끝날 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;index&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;항목의 인덱스 값을 꺼낼 때 사용할 변수 이름을 지정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;separator&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;구분자. 한번 이상 반복할 때 반복되는 사이에 해당 문을 넣어줌&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;예제_VO&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;예제 VO&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 예제의 파라미터로 활용되는 VO 객체이다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119351806&quot; class=&quot;arduino&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class TestVO {
    private String idx;
    private String timestampAccident;
    private String vin;
    private String dataGb;
    
    @Override
    public String toString() {
        return &quot;TestVO [idx=&quot; + idx + &quot;, timestampAccident=&quot; + timestampAccident 
 + &quot;, vin=&quot; + vin + &quot;, dataGb=&quot; + dataGb + &quot;]&quot;;
    }
    public void setIdx(String idx) {
        this.idx = idx;
    }
    public void setTimestampAccident(String timestampAccident) {
        this.timestampAccident = timestampAccident;
    }
    public void setVin(String vin) {
        this.vin = vin;
    }
    public void setDataGb(String dataGb) {
        this.dataGb = dataGb;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;INSERT_구문&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;INSERT 구문&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689119351813&quot; class=&quot;dust&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;insert id=&quot;insCompareResult&quot; parameterType=&quot;java.util.List&quot; &amp;gt;
    &amp;lt;foreach collection=&quot;list&quot; item=&quot;item&quot; open=&quot;INSERT ALL&quot; close=&quot;SELECT * FROM SYS.DUAL&quot; 
        separator=&quot; &quot;&amp;gt;
    INTO KTF_COMPARE_RESULT(
          IDX
        , TIMESTAMP_ACCIDENT
        , VIN
        , DATA_GB
    ) VALUES (
          #{item.idx}
        , #{item.timestampAccident}
        , #{item.vin}
        , #{item.dataGb}
    )
    &amp;lt;/foreach&amp;gt;
&amp;lt;/insert&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;Line1. VO의 ArrayList로 파라메터를 넘겼기 때문에 parameterType = &quot;java.util.List&quot;로 설정해준다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;Line2-3. foreach 속성을 설정해주는 부분이다. ORACLE의 경우 멀티 INSERT 시 INSERT ALL을 해주어야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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;pre id=&quot;code_1689119351817&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT ALL
    INTO KTF_COMPARE_RESULT(
          IDX
        , TIMESTAMP_ACCIDENT
        , VIN
        , DATA_GB
    ) VALUES (
          '1'
        , '1565052057'
        , 'VINVINVIN1'
        , '1'
    ) 
    INTO KTF_COMPARE_RESULT(
          IDX
        , TIMESTAMP_ACCIDENT
        , VIN
        , DATA_GB
    ) VALUES (
          '2'
        , '1565052058'
        , 'VINVINVIN2'
        , '2'
    )
SELECT * FROM SYS.DUAL&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;DELETE_구문&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;DELETE 구문&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689119351818&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;delete id=&quot;delCompareResult&quot; parameterType=&quot;java.util.List&quot;&amp;gt;
    DELETE FROM KTF_COMPARE_RESULT
    &amp;lt;where&amp;gt;
    &amp;lt;foreach collection=&quot;list&quot; item=&quot;item&quot; open=&quot;&quot; close=&quot;&quot; separator=&quot;OR&quot;&amp;gt;
        (IDX = #{item.idx} AND VIN = #{item.vin})
    &amp;lt;/foreach&amp;gt;
    &amp;lt;/where&amp;gt;
&amp;lt;/delete&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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;pre id=&quot;code_1689119351819&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DELETE FROM KTF_COMPARE_RESULT
WHERE (TIMESTAMP_ACCIDENT = '1565059999' AND VIN = 'VINVINVIN1')
   OR (TIMESTAMP_ACCIDENT = '1565059999' AND VIN = 'VINVINVIN2')&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;만약 리스트 내 인자값의 따라 조건을 동적으로 주고 싶다면, 아래와 같이 foreach문 내에 if태그를 활용하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119351820&quot; class=&quot;dust&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;delete id=&quot;delCompareResult&quot; parameterType=&quot;java.util.List&quot;&amp;gt;
    DELETE FROM KTF_COMPARE_RESULT
    &amp;lt;where&amp;gt;
    &amp;lt;foreach collection=&quot;list&quot; item=&quot;item&quot; open=&quot;&quot; close=&quot;&quot; separator=&quot;OR&quot;&amp;gt;
       &amp;lt;if test='item.dataGb==null or &quot;&quot;.equals(item.dataGb)'&amp;gt;
           (TIMESTAMP_ACCIDENT = #{item.timestampAccident} AND VIN = #{item.vin})
       &amp;lt;/if&amp;gt;
       &amp;lt;if test='item.dataGb!=null and !&quot;&quot;.equals(item.dataGb)'&amp;gt;
          (TIMESTAMP_ACCIDENT = #{item.timestampAccident} AND IDX = #{item.dataGb})
       &amp;lt;/if&amp;gt;
    &amp;lt;/foreach&amp;gt;
    &amp;lt;/where&amp;gt;
&amp;lt;/delete&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;MERGE_문&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;MERGE 문&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1689119351822&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;insert id=&quot;insCoapLog&quot; parameterType=&quot;java.util.List&quot; &amp;gt;
    MERGE INTO KTF_COMPARE_RESULT R1
        USING (
            &amp;lt;foreach  collection=&quot;list&quot; item=&quot;item&quot; open=&quot;&quot; close=&quot;&quot; separator=&quot;union&quot;&amp;gt;
                SELECT #{item.timestampAccident} AS timestampAccident
                     , #{item.vin} AS vin
                     , #{item.objGb} AS idx
                     , #{item.dataGb} AS dataGb
                 FROM SYS.DUAL
            &amp;lt;/foreach&amp;gt;
        ) T1
            ON (R1.TIMESTAMP_ACCIDENT = T1.timestampAccident)
        WHEN MATCHED THEN
            UPDATE 
            &amp;lt;set&amp;gt;
                  R1.VIN= T1.vin
                , R1.IDX= T1.idx
                , R1.DATA_GB= T1.dataGb
            &amp;lt;/set&amp;gt;
        WHEN NOT MATCHED THEN
            INSERT 
            &amp;lt;trim prefix=&quot;(&quot; suffix=&quot;)&quot; suffixOverrides=&quot;,&quot; &amp;gt; 
                  TIMESTAMP_ACCIDENT
                , VIN
                , IDX
                , DATA_GB
            &amp;lt;/trim&amp;gt;
            &amp;lt;trim  prefix=&quot;values (&quot; suffix=&quot;)&quot; suffixOverrides=&quot;,&quot;&amp;gt;
                  T1.timestampAccident
                , T1.vin
                , T1.idx
                , T1.dataGb
            &amp;lt;/trim&amp;gt;
&amp;lt;/insert&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;Line5-10. 위의 MERGE문에서의 foreach는 list 파라미터를 가져와서 MERGE문에 사용할 테이블을 먼저 만들었다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;Line12. ON 조건에는 테이블의 키 값인 TIMESTAMP_ACCIDENT를 넣어주었고,&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;Line13-19. 키 값이 매칭되는 데이터가 있다면 나머지 컬럼의 데이터를 UPDATE 해준다.&lt;br /&gt;* 이 때, ON 에 넣어준 컬럼을 UPDATE에 넣어주면 에러가 난다.&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;Line20-33. 키 값이 매칭되지 않을 때는 INSERT를 해준다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;―――――――――――――――――――――&lt;span style=&quot;color: #333333;&quot;&gt;―&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;(2020-09-15 추가)&lt;span&gt;&amp;nbsp;&lt;/span&gt;――――――――&lt;span style=&quot;color: #333333;&quot;&gt;―――――――――&lt;span style=&quot;color: #333333;&quot;&gt;―――&lt;span style=&quot;color: #333333;&quot;&gt;――&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;UPDATE문&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;UPDATE문&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;update 경우 파라미터 구조에 따라 여러가지 쿼리로 사용할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;VO 안에 String[] 타입의 taArray 라는 배열이 있을 때 taArray 값에 따라 데이터를 업데이트 하고 싶은 경우&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1689119351829&quot; class=&quot;arduino&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class TestVO {
	private String idx;
	private String timestampAccident;
	private String vin;
	private String dataGb;
	private String[] taArr;

	... (생략)
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;데이터 taArr 에는 timestampAccident(키) 값을 문자열 배열로 받는 변수라고 볼 때&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;timestampAccident 값이 1, 2, 3,... 여러개인 경우에 idx = &quot;idx1&quot;, vin = &quot;vin1&quot;, dataGb=&quot;dataGb1&quot; 과 같이 정해진 값으로 똑같이 업데이트를 하고 싶은 경우라고 생각하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1689119351830&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;oracle&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;update id=&quot;udtCompareResult&quot; parameterType=&quot;testVO&quot;&amp;gt;
	UPDATE KTF_COMPARE_RESULT
	   SET IDX = #{idx}
	     , VIN = #{vin}
	     , DATA_GB = #{dataGb}
	 WHERE TIMESTAMP_ACCIDENT IN
	 &amp;lt;foreach collection=&quot;taArray&quot; item=&quot;item&quot; index=&quot;index&quot; separator=&quot;,&quot; open=&quot;(&quot; close=&quot;)&quot;&amp;gt;
	 	#{item}
	 &amp;lt;/foreach&amp;gt;
&amp;lt;/update&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; 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;pre id=&quot;code_1689119351831&quot; class=&quot;nix&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;UPDATE KTF_COMPARE_RESULT
   SET IDX = #{idx}
     , VIN = #{vin}
     , DATA_GB = #{dataGb}
 WHERE TIMESTAMP_ACCIDENT IN (&quot;1&quot;, &quot;2&quot;, &quot;3&quot;, ...) &lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;WHERE IN 문 뒤에 &quot;open&quot; 값인 &quot;(&quot; 로 시작하여 #{item} 값과 &quot;separator&quot;로 설정한 &quot;,&quot; 구분자로 값을 그대로 작성한 뒤 &quot;close&quot;로 &quot;)&quot; 닫아준다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;일반적인 리스트 VO를 넘겼을 때의 경우이다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1689119351831&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;xml&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;update id=&quot;udtCompareList&quot; parameterType=&quot;java.util.List&quot;&amp;gt;
    &amp;lt;foreach collection=&quot;list&quot; item=&quot;item&quot; index=&quot;index&quot; separator=&quot;;&quot; open=&quot;DECLARE BEGIN&quot; close=&quot;; END;&quot;&amp;gt;
        UPDATE KTF_COMPARE_RESULT 
           SET IDX = #{item.idx}
	     , VIN = #{item.vin}
	     , DATA_GB = #{item.dataGb}
         WHERE TIMESTAMP_ACCIDENT = #{item.timestampAccident}
    &amp;lt;/foreach&amp;gt;
&amp;lt;/update&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 코드는 아래와 같이 실행된다.&lt;/p&gt;
&lt;pre id=&quot;code_1689119351833&quot; class=&quot;sql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;DECLARE BEGIN
	UPDATE KTF_COMPARE_RESULT
	   SET IDX = #{item.idx}
	     , VIN = #{item.vin}
	     , DATA_GB = #{item.dataGb}
	 WHERE TIMESTAMP_ACCIDENT = #{item.timestampAccident}
	;
	UPDATE KTF_COMPARE_RESULT
	   SET IDX = #{item.idx}
	     , VIN = #{item.vin}
	     , DATA_GB = #{item.dataGb}
	 WHERE TIMESTAMP_ACCIDENT = #{item.timestampAccident}
	;
	.
	.
	.
	UPDATE KTF_COMPARE_RESULT
	   SET IDX = #{item.idx}
	     , VIN = #{item.vin}
	     , DATA_GB = #{item.dataGb}
	 WHERE TIMESTAMP_ACCIDENT = #{item.timestampAccident}
; END;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;자주나는_에러&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;자주나는 에러&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR'; color: #f41a18;&quot;&gt;Caused&amp;nbsp;by:&amp;nbsp;&lt;a style=&quot;color: #f41a18;&quot; href=&quot;org.apache.ibatis.binding.bindingexception:&quot;&gt;org.apache.ibatis.binding.BindingException:&lt;/a&gt;&amp;nbsp;Parameter&amp;nbsp;'__frch_item_0'&amp;nbsp;not&amp;nbsp;found.&amp;nbsp;Available&amp;nbsp;parameters&amp;nbsp;are&amp;nbsp;[collection,&amp;nbsp;list]&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;참고로 이 에러는 보통 VO 컬럼명(파라메터 컬럼명)의 오타일 가능성이 가장 크다&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/21&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://haenny.tistory.com/21&lt;/a&gt;&amp;nbsp; 에서 퍼옴 정리 잘되어 있음&lt;/span&gt;&lt;/p&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/299</guid>
      <comments>https://nizimo.tistory.com/299#entry299comment</comments>
      <pubDate>Wed, 12 Jul 2023 08:49:40 +0900</pubDate>
    </item>
    <item>
      <title>[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE) - MySQL</title>
      <link>https://nizimo.tistory.com/298</link>
      <description>&lt;h3 id=&quot;[MyBatis]_List_파라메터_foreach_사용_(INSERT,_DELETE)_-_MySQL&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;[MyBatis]&amp;nbsp;List&amp;nbsp;파라메터&amp;nbsp;foreach&amp;nbsp;사용&amp;nbsp;(INSERT,&amp;nbsp;DELETE)&amp;nbsp;-&amp;nbsp;MySQL&lt;/span&gt;&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;Oracle 버전이 궁금하다면 ?&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #353535;&quot; href=&quot;https://haenny.tistory.com/21&quot;&gt;클릭 !&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689119295450&quot; style=&quot;color: #000000; text-align: start;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-og-type=&quot;article&quot; data-og-title=&quot;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE)&quot; data-og-description=&quot;[MyBatis]&amp;nbsp;List&amp;nbsp;파라메터&amp;nbsp;foreach&amp;nbsp;사용&amp;nbsp;(INSERT,&amp;nbsp;DELETE, MERGE) foreach문은 사용할 때마다 사용되는 위치도 속성도 어려워서 더이상 헷갈리지 않기 위해 남겨본다 :-) ! foreach문의 속성은 다음과 같다...&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/21&quot; data-og-url=&quot;https://haenny.tistory.com/21&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bus4r6/hyHwtLPE4M/0cwKIGSfudCLRvBBOoy5Uk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/bbx4je/hyHwzSODy2/wOSRZK5LKoR1Kk0ov31XtK/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/s8p5k/hyHuORz0WG/v8BISFU8esUNhekUgk4UM1/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://haenny.tistory.com/21&quot; data-source-url=&quot;https://haenny.tistory.com/21&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bus4r6/hyHwtLPE4M/0cwKIGSfudCLRvBBOoy5Uk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/bbx4je/hyHwzSODy2/wOSRZK5LKoR1Kk0ov31XtK/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/s8p5k/hyHuORz0WG/v8BISFU8esUNhekUgk4UM1/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[MyBatis] List 파라메터 foreach 사용 (INSERT, DELETE, MERGE)&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;[MyBatis]&amp;nbsp;List&amp;nbsp;파라메터&amp;nbsp;foreach&amp;nbsp;사용&amp;nbsp;(INSERT,&amp;nbsp;DELETE, MERGE) foreach문은 사용할 때마다 사용되는 위치도 속성도 어려워서 더이상 헷갈리지 않기 위해 남겨본다 :-) ! foreach문의 속성은 다음과 같다......&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;foreach문의 속성은 다음과 같다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;table style=&quot;color: #666666; text-align: center; 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;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;구분&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;설명&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;collection&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전달받은 인자값&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;item&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;전달받은 인자값을 다른이름으로 대체&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;open&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 구문이 시작할 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;close&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;해당 구문이 끝날 때&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;index&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;항목의 인덱스 값을 꺼낼 때 사용할 변수 이름을 지정&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td style=&quot;text-align: center;&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;separator&lt;/b&gt;&lt;/span&gt;&lt;/td&gt;
&lt;td&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;구분자. 한번 이상 반복할 때 반복되는 사이에 해당 문을 넣어줌&lt;/span&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;다음 예제의 파라미터로 활용되는 VO 객체이다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1689119295457&quot; class=&quot;arduino&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class TestVO {
    private String idx;
    private String timestampAccident;
    private String vin;
    private String dataGb;
    
    @Override
    public String toString() {
        return &quot;TestVO [idx=&quot; + idx + &quot;, timestampAccident=&quot; + timestampAccident 
 + &quot;, vin=&quot; + vin + &quot;, dataGb=&quot; + dataGb + &quot;]&quot;;
    }
    public void setIdx(String idx) {
        this.idx = idx;
    }
    public void setTimestampAccident(String timestampAccident) {
        this.timestampAccident = timestampAccident;
    }
    public void setVin(String vin) {
        this.vin = vin;
    }
    public void setDataGb(String dataGb) {
        this.dataGb = dataGb;
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;INSERT_문&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;&lt;b&gt;INSERT 문&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1689119295469&quot; class=&quot;xquery&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;insert id=&quot;insCompareResult&quot; parameterType=&quot;java.util.List&quot; &amp;gt;
    INSERT INTO KTF_COMPARE_RESULT(
          IDX
        , TIMESTAMP_ACCIDENT
        , VIN
        , DATA_GB
    ) VALUES 
    &amp;lt;foreach collection=&quot;list&quot; item=&quot;item&quot; separator=&quot;,&quot;&amp;gt;
    (
          #{item.idx}
        , #{item.timestampAccident}
        , #{item.vin}
        , #{item.dataGb}
    )
    &amp;lt;/foreach&amp;gt;
&amp;lt;/insert&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;DELETE_문&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;DELETE 문&lt;/span&gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 파라메터가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;리스트&lt;/span&gt;인 경우&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1689119295473&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;delete id=&quot;delCompareResult&quot; parameterType=&quot;java.util.List&quot;&amp;gt; 
	DELETE FROM KTF_COMPARE_RESULT 
	&amp;lt;where&amp;gt; 
		&amp;lt;foreach collection=&quot;list&quot; item=&quot;item&quot; open=&quot;&quot; close=&quot;&quot; separator=&quot;OR&quot;&amp;gt; 
		(IDX = #{item.idx} AND VIN = #{item.vin}) 
		&amp;lt;/foreach&amp;gt; 
	&amp;lt;/where&amp;gt; 
&amp;lt;/delete&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Sans Demilight', 'Noto Sans KR';&quot;&gt;- 파라메터가&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;배열&lt;/span&gt;인 경우&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1689119295476&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;delete id=&quot;delCompareResult&quot; parameterType=&quot;java.util.Arrays&quot;&amp;gt; 
	DELETE FROM KTF_COMPARE_RESULT 
	&amp;lt;where&amp;gt; 
		TIMESTAMP_ACCIDENT IN
		&amp;lt;foreach collection=&quot;array&quot; item=&quot;item&quot; index=&quot;index&quot; separator=&quot;,&quot; open=&quot;(&quot; close=&quot;)&quot;&amp;gt; 
			#{item}
		&amp;lt;/foreach&amp;gt; 
	&amp;lt;/where&amp;gt; 
&amp;lt;/delete&amp;gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/182&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://haenny.tistory.com/182&lt;/a&gt; 에서 퍼옴&lt;/p&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/298</guid>
      <comments>https://nizimo.tistory.com/298#entry298comment</comments>
      <pubDate>Wed, 12 Jul 2023 08:48:32 +0900</pubDate>
    </item>
    <item>
      <title>[MyBatis] SpringBoot MyBatis 쿼리 로그 설정하기</title>
      <link>https://nizimo.tistory.com/297</link>
      <description>&lt;h3 id=&quot;의존성(dependency)_추가&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;의존성(dependency) 추가&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1689119240672&quot; class=&quot;css&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;implementation &quot;org.bgee.log4jdbc-log4j2:log4jdbc-log4j2-jdbc4:1.16&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;프로퍼티_파일_추가&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;프로퍼티 파일 추가&lt;/b&gt;&lt;/h3&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;파일 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;log4jdbc.log4j2.properties&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;경로 : src/main/resources&lt;/p&gt;
&lt;pre id=&quot;code_1689119240675&quot; class=&quot;stylus&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;log4jdbc.spylogdelegator.name=net.sf.log4jdbc.log.slf4j.Slf4jSpyLogDelegator
log4jdbc.dump.sql.maxlinelength=0&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 id=&quot;datasource_설정&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;datasource 설정&lt;/b&gt;&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;설정 파일 : application.yml&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;driver-class-name 추가&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;jdbc url 변경 : &quot;log4jdbc:&quot; 추가&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1689119240678&quot; class=&quot;less&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;css&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;spring:
	datasource:
		driver-class-name: net.sf.log4jdbc.sql.jdbcapi.DriverSpy
		url: jdbc:log4jdbc:postgresql://localhost:5432/test&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;설정해준 뒤 실행시키면 파라미터가 세팅되지 않은 쿼리와 파라미터 값을 세팅한 쿼리로그가 찍힐 것이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;관련 참고 게시글 :&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a style=&quot;color: #353535;&quot; href=&quot;https://haenny.tistory.com/379&quot;&gt;JPA 쿼리 로그 설정&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689119240680&quot; style=&quot;color: #000000; text-align: start;&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;[JPA] SpringBoot JPA 쿼리 로그 설정하기&quot; data-og-description=&quot;SpringBoot JPA를 사용할 때, SQL 쿼리문을 표출하는 설정 관련해서 정리해보자. 요약 application.yml spring: jpa: properties: hibernate: show_sql: true format_sql: true use_sql_comments: true logging: l..&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/379&quot; data-og-url=&quot;https://haenny.tistory.com/379&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bapp0n/hyQhEep0yB/pghSRjNSQkqrCiZ7e0gja0/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/b0qiMe/hyQhF5tAAY/QPLNOo6CrVJNpe4BZJhKZK/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/bLfrhW/hyQhzEaM3E/Z9vwADVcwZ7FGtZb78CfH0/img.jpg?width=540&amp;amp;height=540&amp;amp;face=125_50_432_424&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://haenny.tistory.com/379&quot; data-source-url=&quot;https://haenny.tistory.com/379&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bapp0n/hyQhEep0yB/pghSRjNSQkqrCiZ7e0gja0/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/b0qiMe/hyQhF5tAAY/QPLNOo6CrVJNpe4BZJhKZK/img.png?width=800&amp;amp;height=400&amp;amp;face=0_0_800_400,https://scrap.kakaocdn.net/dn/bLfrhW/hyQhzEaM3E/Z9vwADVcwZ7FGtZb78CfH0/img.jpg?width=540&amp;amp;height=540&amp;amp;face=125_50_432_424');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[JPA] SpringBoot JPA 쿼리 로그 설정하기&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;SpringBoot JPA를 사용할 때, SQL 쿼리문을 표출하는 설정 관련해서 정리해보자. 요약 application.yml spring: jpa: properties: hibernate: show_sql: true format_sql: true use_sql_comments: true logging: l.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/398&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://haenny.tistory.com/398&lt;/a&gt; 에서 퍼옴 글 정리 잘되어 있음&lt;/p&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/297</guid>
      <comments>https://nizimo.tistory.com/297#entry297comment</comments>
      <pubDate>Wed, 12 Jul 2023 08:47:42 +0900</pubDate>
    </item>
    <item>
      <title>[MyBatis] 중복 쿼리 줄여주는 sql, include, property 태그 문법 살펴보기</title>
      <link>https://nizimo.tistory.com/296</link>
      <description>&lt;h2 id=&quot;_&amp;lt;sql&amp;gt;&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;lt;sql&amp;gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;다른 구문에서 재사용하기 위한 SQL 조각&lt;/p&gt;
&lt;h4 id=&quot;_사용_조건&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;사용 조건&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;id 속성 값 필수&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;사용하려는 태그의 위치보다 먼저 선언되어야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;h4 id=&quot;_문법&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;문법&lt;/h4&gt;
&lt;pre id=&quot;code_1689119174116&quot; class=&quot;jboss-cli&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;sql id=&quot;userColumns&quot;&amp;gt; 
	${alias}.id,
	${alias}.username,
	${alias}.password 
&amp;lt;/sql&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_&amp;lt;include&amp;gt;&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&amp;nbsp;&amp;lt;include&amp;gt;&lt;/b&gt;&lt;/h2&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;SQL 조각인 &amp;lt;sql&amp;gt; 문을 DML (Data Manipulation Language) 태그, 즉, 다른 구문에 포함(삽입) 시키는 기술&lt;/p&gt;
&lt;h4 id=&quot;_문법_1&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;문법&lt;/h4&gt;
&lt;pre id=&quot;code_1689119174117&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;select,insert,update,delete&amp;gt;
	&amp;lt;include refid=&quot;&amp;lt;sql&amp;gt; id&quot;&amp;gt;
		&amp;lt;property name=&quot;&amp;lt;sql&amp;gt; property&quot; value=&quot;&quot;/&amp;gt;
	&amp;lt;/include&amp;gt;
&amp;lt;/select,insert,update,delete&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;_예제&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;&amp;nbsp;예제&lt;/b&gt;&lt;/h2&gt;
&lt;h4 id=&quot;_Where_문법_재사용&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;Where 문법 재사용&lt;/h4&gt;
&lt;pre id=&quot;code_1689119174119&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;sql id=&quot;where&quot;&amp;gt;
	where board_id = #{boardId}
&amp;lt;/sql&amp;gt;

&amp;lt;select id=&quot;getPage&quot; resultType=&quot;int&quot;&amp;gt;
	select pageNum 
	from m_board 
	&amp;lt;include refid=&quot;where&quot;&amp;gt;&amp;lt;/include&amp;gt;	
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;_Table_문법_재사용&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;Table 문법 재사용&lt;/h4&gt;
&lt;pre id=&quot;code_1689119174121&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;sql id=&quot;returnTable&quot;&amp;gt;
	from ${tableproperty}
&amp;lt;/sql&amp;gt;

&amp;lt;select id=&quot;getPage&quot; resultType=&quot;int&quot;&amp;gt;
	select pageNum 
	&amp;lt;include refid=&quot;returnTable&quot;&amp;gt;
		&amp;lt;property name=&quot;tableproperty&quot; value=&quot;m_board&quot;/&amp;gt;
	&amp;lt;/include&amp;gt;
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;_JOIN문_활용&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;JOIN문 활용&lt;/h4&gt;
&lt;pre id=&quot;code_1689119174123&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;sql id=&quot;userColumns&quot;&amp;gt; 
	${alias}.id,
	${alias}.username,
	${alias}.password 
&amp;lt;/sql&amp;gt;

&amp;lt;select id=&quot;selectUsers&quot; resultType=&quot;map&quot;&amp;gt;
	select
	   &amp;lt;include refid=&quot;userColumns&quot;&amp;gt;&amp;lt;property name=&quot;alias&quot; value=&quot;t1&quot;/&amp;gt;&amp;lt;/include&amp;gt;,
	   &amp;lt;include refid=&quot;userColumns&quot;&amp;gt;&amp;lt;property name=&quot;alias&quot; value=&quot;t2&quot;/&amp;gt;&amp;lt;/include&amp;gt;
	from some_table t1
	cross join some_table t2
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;_SELECT_컬럼_문법_재사용&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;SELECT 컬럼 문법 재사용&lt;/h4&gt;
&lt;pre id=&quot;code_1689119174125&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;sql id=&quot;common_select_table&quot;&amp;gt;
	id, name, age
&amp;lt;/sql&amp;gt;

&amp;lt;select id=&quot;getMemberInfo&quot;&amp;gt;
	SELECT
	   &amp;lt;include refid=&quot;common_select_table&quot; /&amp;gt;
	FROM TABLE
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;_INSERT_문_활용&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;INSERT 문 활용&lt;/h4&gt;
&lt;pre id=&quot;code_1689119174127&quot; class=&quot;dust&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;sql id=&quot;board_columns&quot;&amp;gt;
    ${alias}id,
    ${alias}subject,
    ${alias}context,
    ${alias}attachments,
    ${alias}likes,
    ${alias}views,
    ${alias}create_time,
    ${alias}update_time,
    ${alias}writer
&amp;lt;/sql&amp;gt;

&amp;lt;insert id=&quot;insertBoard&quot;&amp;gt;
    INSERT INTO BOARD (
           &amp;lt;include refid=&quot;board_columns&quot;&amp;gt;&amp;lt;property name=&quot;alias&quot; value=&quot;&quot;/&amp;gt;&amp;lt;/include&amp;gt;
         ) VALUES (
          #{id},
          #{subject},
          #{context},
          #{attachments},
          #{likes},
          #{views},
          now(),
          null,
          #{writer} )
&amp;lt;/insert&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;_외부_SQL-Mapper.xml_접근_+_&amp;lt;include&amp;gt;&quot; style=&quot;color: #000000; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;외부 SQL-Mapper.xml 접근 + &amp;lt;include&amp;gt;&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;common-Mapper.xml&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1689119174129&quot; class=&quot;dust&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;mapper namespace=&quot;mapper.common-Mapper&quot;&amp;gt;

	&amp;lt;sql id=&quot;board_col&quot;&amp;gt;
		${alias}id,
		${alias}subject,
		${alias}context
	&amp;lt;/sql&amp;gt;

&amp;lt;/mapper&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #666666;&quot;&gt;board-Mapper.xml&lt;/li&gt;
&lt;/ul&gt;
&lt;pre id=&quot;code_1689119174130&quot; class=&quot;pgsql&quot; style=&quot;background-color: #000000; color: #000000; text-align: start;&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;select id=&quot;selectUser&quot;&amp;gt;
    SELECT 
	&amp;lt;include refid=&quot;mapper.common-Mapper.board_col&quot;&amp;gt;
		&amp;lt;property name=&quot;alias&quot; value=&quot;b.&quot;/&amp;gt;
	&amp;lt;/include&amp;gt;
	FROM board b
&amp;lt;/select&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;사용할 외부 Mapper.xml 에 namespace.&amp;lt;sql&amp;gt;id 로 가져오면 된다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;sql과 include 태그를 사용해본적이 없는데, 앞으로 사용하게 될 문법이라고 생각해서 살펴봤다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;코드의 재사용성을 높이기에 좋은 문법이라고는 하지만, 단순히 살펴봤을 때 가독성이 좋아보이진 않는다..&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;제대로 사용해봐야 알것같다..&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;a style=&quot;color: #353535;&quot; href=&quot;https://mybatis.org/mybatis-3/ko/sqlmap-xml.html#Auto-mapping&quot;&gt;MyBatis&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689119184614&quot; style=&quot;color: #000000; text-align: start;&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;website&quot; data-og-title=&quot;MyBatis &amp;ndash; 마이바티스 3 | 매퍼 XML 파일&quot; data-og-description=&quot;Mapper XML 파일 마이바티스의 가장 큰 장점은 매핑구문이다. 이건 간혹 마법을 부리는 것처럼 보일 수 있다. SQL Map XML 파일은 상대적으로 간단하다. 더군다나 동일한 기능의 JDBC 코드와 비교하면 &quot; data-og-host=&quot;mybatis.org&quot; data-og-source-url=&quot;https://mybatis.org/mybatis-3/ko/sqlmap-xml.html#Auto-mapping&quot; data-og-url=&quot;https://mybatis.org/mybatis-3/ko/sqlmap-xml.html#Auto-mapping&quot; data-og-image=&quot;&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://mybatis.org/mybatis-3/ko/sqlmap-xml.html#Auto-mapping&quot; data-source-url=&quot;https://mybatis.org/mybatis-3/ko/sqlmap-xml.html#Auto-mapping&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('&amp;quot;&amp;quot;');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;MyBatis &amp;ndash; 마이바티스 3 | 매퍼 XML 파일&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;Mapper XML 파일 마이바티스의 가장 큰 장점은 매핑구문이다. 이건 간혹 마법을 부리는 것처럼 보일 수 있다. SQL Map XML 파일은 상대적으로 간단하다. 더군다나 동일한 기능의 JDBC 코드와 비교하면...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;mybatis.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://java119.tistory.com/102&quot;&gt;https://java119.tistory.com/102&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1689119184615&quot; style=&quot;color: #000000; text-align: start;&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;[MyBatis] 개발 생산성 향상,중복 쿼리 줄이기 &amp;lt;sql&amp;gt;,&amp;lt;include&amp;gt; 개념 및 문법 총 정리&quot; data-og-description=&quot;개념 다른&amp;nbsp;구문에서&amp;nbsp;재사용하기&amp;nbsp;위한&amp;nbsp;SQL&amp;nbsp;조각 출처&amp;nbsp;:&amp;nbsp;mybatis&amp;nbsp;공식&amp;nbsp;사이트 말&amp;nbsp;그대롭니다.&amp;nbsp;&amp;quot;재사용성을&amp;nbsp;높이기 위한&amp;nbsp;SQL&amp;nbsp;조각&amp;quot;&amp;nbsp;아주&amp;nbsp;정확한&amp;nbsp;표현입니다. 조건 1.id 속성 값이 필수입니다. &quot; data-og-host=&quot;java119.tistory.com&quot; data-og-source-url=&quot;https://java119.tistory.com/102&quot; data-og-url=&quot;https://java119.tistory.com/102&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/eYoth/hyO3hSPIcP/5BzPEkvCmHznAOigzyTLTK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bSODS2/hyO4BvnkKZ/StDBJw0HbMjmqYHPKqLokk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://java119.tistory.com/102&quot; data-source-url=&quot;https://java119.tistory.com/102&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/eYoth/hyO3hSPIcP/5BzPEkvCmHznAOigzyTLTK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bSODS2/hyO4BvnkKZ/StDBJw0HbMjmqYHPKqLokk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;[MyBatis] 개발 생산성 향상,중복 쿼리 줄이기 &amp;lt;sql&amp;gt;,&amp;lt;include&amp;gt; 개념 및 문법 총 정리&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;개념 다른&amp;nbsp;구문에서&amp;nbsp;재사용하기&amp;nbsp;위한&amp;nbsp;SQL&amp;nbsp;조각 출처&amp;nbsp;:&amp;nbsp;mybatis&amp;nbsp;공식&amp;nbsp;사이트 말&amp;nbsp;그대롭니다.&amp;nbsp;&quot;재사용성을&amp;nbsp;높이기 위한&amp;nbsp;SQL&amp;nbsp;조각&quot;&amp;nbsp;아주&amp;nbsp;정확한&amp;nbsp;표현입니다. 조건 1.id 속성 값이 필수입니다....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;java119.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/372&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://haenny.tistory.com/372&lt;/a&gt; 에서 펌 정리 잘되어 있는 사이트 ㅎ&lt;/p&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/296</guid>
      <comments>https://nizimo.tistory.com/296#entry296comment</comments>
      <pubDate>Wed, 12 Jul 2023 08:46:52 +0900</pubDate>
    </item>
    <item>
      <title>javascript 페이징</title>
      <link>https://nizimo.tistory.com/295</link>
      <description>&lt;pre id=&quot;code_1688517406668&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;script&amp;gt;  
//페이지에 대한 리스트 호출 
fn_pagingEvt = function(discrhash){
	/* $(&quot;.numbtns&quot;).removeClass(&quot;on&quot;);
	$(&quot;#paging1_&quot;+page).addClass(&quot;on&quot;); 
	var param1 = $(&quot;#param1 option:selected&quot;).val(); 
	var param2 = $(&quot;#param2&quot;).prop('value');
	var param3 = $(&quot;#param3 option:selected&quot;).val(); */
	
	$.ajax({url : &quot;/config/mentoData2&quot;,type : &quot;GET&quot;,datatype : &quot;json&quot;,contentType: &quot;text/html; charset:UTF-8&quot;,
		data:{&quot;DI&quot;:discrhash},
	success : function(data) { 
						var res = JSON.parse(data);
						var htmls = &quot;&quot;;
						 
						for(var i=0;i&amp;lt;re.length;i++){
							/*
							 tbl = re[i];
							 console.log(tbl)
							 var pnum = parseInt(listCnt)-(parseInt(start_num)+parseInt(i));							 
							 htmls +=&quot;&amp;lt;tr&amp;gt;&quot;;
							 htmls +=&quot;    &amp;lt;td class='table_in col_1'&amp;gt;&quot;+pnum+&quot;&amp;lt;/td&amp;gt;&quot;;
							 htmls +=&quot;    &amp;lt;td class='table_in col_2'&amp;gt;&quot;+tbl.PART+	&quot;&amp;lt;/td&amp;gt;&quot;;
							 htmls +=&quot;    &amp;lt;td class='table_in col_3'&amp;gt;&quot;+tbl.ITEMS_ITEM0+&quot;&amp;lt;/td&amp;gt;&quot;;
							 htmls +=&quot;    &amp;lt;td class='table_in col_4'&amp;gt;&quot;+tbl.WRT_TM.substr(0,10).replace(/-/gi,&quot;.&quot;)+&quot;&amp;lt;/td&amp;gt;&quot;; 
							 htmls +=&quot;&amp;lt;/tr&amp;gt;&quot;;  
							 */
						}
						$(&quot;#bodyContent&quot;).html(htmls); 
		},
		error : function() {alert('error');}
	}); 
}  
//fn_pagingEvt(&quot;${discrhash}&quot;);
&amp;lt;/script&amp;gt;&lt;/code&gt;&lt;/pre&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/295</guid>
      <comments>https://nizimo.tistory.com/295#entry295comment</comments>
      <pubDate>Wed, 5 Jul 2023 09:36:56 +0900</pubDate>
    </item>
    <item>
      <title>sync post 데이터 획득</title>
      <link>https://nizimo.tistory.com/294</link>
      <description>&lt;pre id=&quot;code_1688517333771&quot; class=&quot;javascript&quot; data-ke-language=&quot;javascript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;async function post(host, path, body, headers = {}) {
  const url = `https://${host}/${path}`;
  const options = {
    method: &quot;POST&quot;,
    headers: {
      &quot;Content-Type&quot;: &quot;application/json&quot;,
      ...headers,
    },
    body: JSON.stringify(body),
  };
  const res = await fetch(url, options);
  const data = await res.json();
  if (res.ok) {
    return data;
  } else {
    throw Error(data);
  }
}

post(&quot;jsonplaceholder.typicode.com&quot;, &quot;posts&quot;, {
  title: &quot;Test&quot;,
  body: &quot;I am testing!&quot;,
  userId: 1,
})
  .then((data) =&amp;gt; console.log(data))
  .catch((error) =&amp;gt; console.log(error));&lt;/code&gt;&lt;/pre&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/294</guid>
      <comments>https://nizimo.tistory.com/294#entry294comment</comments>
      <pubDate>Wed, 5 Jul 2023 09:35:57 +0900</pubDate>
    </item>
    <item>
      <title>jsp 지시태그</title>
      <link>https://nizimo.tistory.com/293</link>
      <description>&lt;div style=&quot;color: #000000; text-align: start;&quot;&gt;
&lt;pre id=&quot;code_1688517237427&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;%-- 지시 태그  --%&amp;gt;
&amp;lt;%@page import=&quot;java.util.ArrayList&quot;%&amp;gt;
&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot;
    pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;!DOCTYPE html&amp;gt;
&amp;lt;html&amp;gt;
&amp;lt;head&amp;gt;
&amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt;
&amp;lt;title&amp;gt;태그 예제&amp;lt;/title&amp;gt;
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
        
    &amp;lt;%@ include file =&quot;header.jsp&quot; %&amp;gt;
    
        &amp;lt;%--선언 태그 (멤버변수, 메서드) --%&amp;gt;
    &amp;lt;%! 
    int num = 10;
    String str = &quot;Hello&quot;;
    ArrayList&amp;lt;String&amp;gt; list = new ArrayList&amp;lt;&amp;gt;();
    %&amp;gt;
    &amp;lt;%!
    public static void tagMethod() {
    %&amp;gt;
      &amp;lt;p&amp;gt; hello Tag &amp;lt;/p&amp;gt;
    &amp;lt;%! 
    }
    %&amp;gt;
    
    &amp;lt;!-- HTML 주석 태그 --&amp;gt;
    &amp;lt;%-- JSP 주석 태그 --%&amp;gt;
    
    &amp;lt;%-- 스크립트릿 태그 --%&amp;gt;
    &amp;lt;%
    if(num &amp;gt; 0) {
    %&amp;gt;
    &amp;lt;p&amp;gt; num &amp;gt; 0 &amp;lt;/p&amp;gt;
    &amp;lt;%
    }else {
    %&amp;gt;
    &amp;lt;p&amp;gt; num &amp;lt;=0 &amp;lt;/p&amp;gt;
    &amp;lt;%
    }
    %&amp;gt;
    
    &amp;lt;%-- 표현식 태그 --%&amp;gt;
    num is &amp;lt;%= num %&amp;gt; &amp;lt;br&amp;gt;&amp;lt;br&amp;gt;
    str is &amp;lt;%= str %&amp;gt;
    
    
    &amp;lt;%@ include file =&quot;footer.jsp&quot; %&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/293</guid>
      <comments>https://nizimo.tistory.com/293#entry293comment</comments>
      <pubDate>Wed, 5 Jul 2023 09:34:30 +0900</pubDate>
    </item>
    <item>
      <title>SVN CLEANUP 옵션설명</title>
      <link>https://nizimo.tistory.com/292</link>
      <description>&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: justify;&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TortoiseSVN의 &quot;&lt;b&gt;clean up&lt;/b&gt;&quot; 명령어 대해 포스팅하도록 하겠습니다.&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;&lt;b&gt;clean up&lt;/b&gt;&quot;&lt;span&gt;&amp;nbsp;&lt;/span&gt;명령어는 SVN을 사용하다가 보면 이력 정보가 잘못되어 오류가 발생하거나, update 명령어나 commit 명령어 사용 시 에러가 발생할 경우 이를 해결하기 위한 방법으로&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;&lt;b&gt;clean up&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot; 명령어가 있습니다. SVN에 오류가 발생했다고 가정하고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;&lt;b&gt;clean up&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot; 명령어를 사용하기 위해서 SVN이 연결된 폴더에서 마우스 오른쪽 클릭&amp;nbsp; 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;&lt;b&gt;clean up&lt;/b&gt;&quot;을 클릭합니다.&lt;/span&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;666&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bWRIYn/btr96OIMhmv/GY4q18UiRv4mU1UUw86iY0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bWRIYn/btr96OIMhmv/GY4q18UiRv4mU1UUw86iY0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bWRIYn/btr96OIMhmv/GY4q18UiRv4mU1UUw86iY0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbWRIYn%2Fbtr96OIMhmv%2FGY4q18UiRv4mU1UUw86iY0%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;810&quot; height=&quot;481&quot; data-origin-width=&quot;1120&quot; data-origin-height=&quot;666&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&quot;&lt;b&gt;clean up&lt;/b&gt;&lt;span style=&quot;color: #333333;&quot;&gt;&quot; 명령 창이 뜨면 아래와 같은 옵션들을 보실 수 있습니다(&lt;i&gt;※ 편의를 위해서 한글 버전으로 출력했습니다&lt;/i&gt;).&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;273&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bHs2Xx/btr94lf29nJ/iI5ZnbPbRhCvMGRzKg0RB0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bHs2Xx/btr94lf29nJ/iI5ZnbPbRhCvMGRzKg0RB0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bHs2Xx/btr94lf29nJ/iI5ZnbPbRhCvMGRzKg0RB0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbHs2Xx%2Fbtr94lf29nJ%2FiI5ZnbPbRhCvMGRzKg0RB0%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;453&quot; height=&quot;276&quot; data-origin-width=&quot;448&quot; data-origin-height=&quot;273&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 정리하고 싶은 옵션들을 체크하고 &quot;&lt;b&gt;확인&lt;/b&gt;&quot; 버튼을 클릭하시면 됩니다(&lt;i&gt;※ 어떤 오류인지 파악이 되지 않으시면 모두 체크하셔도 됩니다&lt;/i&gt;). SVN에 대한 오류 및 불필요한 파일 들을 삭제 해주고 완료되면&lt;span&gt;&amp;nbsp;&lt;/span&gt;아래와 같이 상태 창이 출력됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;263&quot; data-origin-height=&quot;150&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Z8qNb/btr94j3Cj5r/Xbhj9m9tBj4aPIjjakKAaK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Z8qNb/btr94j3Cj5r/Xbhj9m9tBj4aPIjjakKAaK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Z8qNb/btr94j3Cj5r/Xbhj9m9tBj4aPIjjakKAaK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZ8qNb%2Fbtr94j3Cj5r%2FXbhj9m9tBj4aPIjjakKAaK%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;261&quot; height=&quot;149&quot; data-origin-width=&quot;263&quot; data-origin-height=&quot;150&quot;/&gt;&lt;/span&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;653&quot; data-origin-height=&quot;178&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vkPC5/btr91zl22Rp/hdSCo1P7OjEz3dm5W4r8k0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vkPC5/btr91zl22Rp/hdSCo1P7OjEz3dm5W4r8k0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vkPC5/btr91zl22Rp/hdSCo1P7OjEz3dm5W4r8k0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvkPC5%2Fbtr91zl22Rp%2FhdSCo1P7OjEz3dm5W4r8k0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;649&quot; height=&quot;177&quot; data-origin-width=&quot;653&quot; data-origin-height=&quot;178&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/div&gt;
&lt;div style=&quot;background-color: #ffffff; color: #333333; text-align: justify;&quot;&gt;
&lt;div&gt;
&lt;div id=&quot;reaction-63&quot;&gt;
&lt;div&gt;&lt;span style=&quot;background-color: #000000;&quot;&gt; &lt;a href=&quot;https://itlearningcenter.tistory.com/entry/%E3%80%90SVN%E3%80%91TortoiseSVN-clean-up&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://itlearningcenter.tistory.com/entry/%E3%80%90SVN%E3%80%91TortoiseSVN-clean-up&lt;/a&gt;&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;figure id=&quot;og_1681426012780&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;【Windows】TortoiseSVN clean up&quot; data-og-description=&quot;TortoiseSVN의 &amp;quot;clean up&amp;quot; 명령어 대해 포스팅하도록 하겠습니다. &amp;quot;clean up&amp;quot; 명령어는 SVN을 사용하다가 보면 이력 정보가 잘못되어 오류가 발생하거나, update 명령어나 commit 명령어 사용 시 에러가 발생&quot; data-og-host=&quot;itlearningcenter.tistory.com&quot; data-og-source-url=&quot;https://itlearningcenter.tistory.com/entry/%E3%80%90SVN%E3%80%91TortoiseSVN-clean-up&quot; data-og-url=&quot;https://itlearningcenter.tistory.com/entry/%E3%80%90SVN%E3%80%91TortoiseSVN-clean-up&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cYfMg6/hyShCEu7Io/3HusnQeGKYycgSR3rFJlK0/img.png?width=800&amp;amp;height=475&amp;amp;face=0_0_800_475,https://scrap.kakaocdn.net/dn/7BLdA/hySgtoRcbC/IU2xDPXZGKkMv9ZxZ2gVZ1/img.png?width=800&amp;amp;height=475&amp;amp;face=0_0_800_475,https://scrap.kakaocdn.net/dn/dXDnt5/hyShBFA9Qh/ZOK0ZpKhKHhUkOKWOvdviK/img.png?width=1120&amp;amp;height=666&amp;amp;face=0_0_1120_666&quot;&gt;&lt;a href=&quot;https://itlearningcenter.tistory.com/entry/%E3%80%90SVN%E3%80%91TortoiseSVN-clean-up&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://itlearningcenter.tistory.com/entry/%E3%80%90SVN%E3%80%91TortoiseSVN-clean-up&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cYfMg6/hyShCEu7Io/3HusnQeGKYycgSR3rFJlK0/img.png?width=800&amp;amp;height=475&amp;amp;face=0_0_800_475,https://scrap.kakaocdn.net/dn/7BLdA/hySgtoRcbC/IU2xDPXZGKkMv9ZxZ2gVZ1/img.png?width=800&amp;amp;height=475&amp;amp;face=0_0_800_475,https://scrap.kakaocdn.net/dn/dXDnt5/hyShBFA9Qh/ZOK0ZpKhKHhUkOKWOvdviK/img.png?width=1120&amp;amp;height=666&amp;amp;face=0_0_1120_666');&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;【Windows】TortoiseSVN clean up&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;TortoiseSVN의 &quot;clean up&quot; 명령어 대해 포스팅하도록 하겠습니다. &quot;clean up&quot; 명령어는 SVN을 사용하다가 보면 이력 정보가 잘못되어 오류가 발생하거나, update 명령어나 commit 명령어 사용 시 에러가 발생&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;itlearningcenter.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;</description>
      <category>study</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/292</guid>
      <comments>https://nizimo.tistory.com/292#entry292comment</comments>
      <pubDate>Fri, 14 Apr 2023 07:47:02 +0900</pubDate>
    </item>
    <item>
      <title>https://haenny.tistory.com/295  전자정부프레임워크 4.0 스프링 설정 정리 잘해 놨어 굿</title>
      <link>https://nizimo.tistory.com/291</link>
      <description>&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;aswift_5_host&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h2 id=&quot;기본Spec&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;b&gt;&lt;span style=&quot;color: #fc4a1a;&quot;&gt;기본Spec&lt;/span&gt;&lt;/b&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;EgovFramework 4.0 - 64bit&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Java 1.8&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Tomcat 8.0&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;Gradle Project SpringBoot 2.6.5&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;전자정부_프레임워크_4.0_설치&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #fc4a1a;&quot;&gt;전자정부 프레임워크 4.0 설치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://haenny.tistory.com/294&quot;&gt;https://haenny.tistory.com/294&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1679903512672&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;[EgovFramework] 전자정부프레임워크 4.x 개발환경 다운로드 및 Lombok 설치&quot; data-og-description=&quot;[EgovFramework] 전자정부프레임워크 4.x 개발환경 다운로드 및 Lombok 설치 전자정부프레임워크 다운로드 전자정부프레임워크 4.x 개발환경 다운로드 받으러가기 개발환경 - 4.x 다운로드 | 표준프레임&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/294&quot; data-og-url=&quot;https://haenny.tistory.com/294&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bpv5nY/hyNR4T61X4/cBav6rwokGZBc6FXExqLJ0/img.png?width=800&amp;amp;height=798&amp;amp;face=0_0_800_798,https://scrap.kakaocdn.net/dn/eBPNM/hyNSbyS5G2/taQWQ2Es3fKsQtKPoXJmjk/img.png?width=800&amp;amp;height=798&amp;amp;face=0_0_800_798,https://scrap.kakaocdn.net/dn/uCgPK/hyNScq2nfG/Ab4AKLNkPdDtTqgumrdly1/img.png?width=2000&amp;amp;height=824&amp;amp;face=0_0_2000_824&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/294&quot; data-source-url=&quot;https://haenny.tistory.com/294&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bpv5nY/hyNR4T61X4/cBav6rwokGZBc6FXExqLJ0/img.png?width=800&amp;amp;height=798&amp;amp;face=0_0_800_798,https://scrap.kakaocdn.net/dn/eBPNM/hyNSbyS5G2/taQWQ2Es3fKsQtKPoXJmjk/img.png?width=800&amp;amp;height=798&amp;amp;face=0_0_800_798,https://scrap.kakaocdn.net/dn/uCgPK/hyNScq2nfG/Ab4AKLNkPdDtTqgumrdly1/img.png?width=2000&amp;amp;height=824&amp;amp;face=0_0_2000_824');&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;[EgovFramework] 전자정부프레임워크 4.x 개발환경 다운로드 및 Lombok 설치&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[EgovFramework] 전자정부프레임워크 4.x 개발환경 다운로드 및 Lombok 설치 전자정부프레임워크 다운로드 전자정부프레임워크 4.x 개발환경 다운로드 받으러가기 개발환경 - 4.x 다운로드 | 표준프레임...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;JDK_(Java)_설치&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #fc4a1a;&quot;&gt;JDK (Java) 설치&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://haenny.tistory.com/219&quot;&gt;https://haenny.tistory.com/219&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1679903512673&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;[Java] Windows10 환경 OpenJDK 설치 및 환경설정&quot; data-og-description=&quot;[Java] Windows10 환경 OpenJDK 설치 및 환경설정 1. OpenJDK 다운로드 OpenJDK는 다운로드 는 아래 링크를 통해 원하는 버전의 설치 파일을 다운로드 할 수 있다. JDK Builds from Oracle jdk.java.net JDK 배포..&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/219&quot; data-og-url=&quot;https://haenny.tistory.com/219&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/c5UEdB/hyNSeWHDUJ/zVGx2bq4uYYiZew7sd0jt0/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/bhGUTO/hyNR8WuHZu/N0isRvCSgpopucn7x6qHd1/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/0g5jA/hyNR6YGFMJ/LfO8EQv3ywg22g0gvLMbck/img.png?width=1191&amp;amp;height=585&amp;amp;face=0_0_1191_585&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/219&quot; data-source-url=&quot;https://haenny.tistory.com/219&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/c5UEdB/hyNSeWHDUJ/zVGx2bq4uYYiZew7sd0jt0/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/bhGUTO/hyNR8WuHZu/N0isRvCSgpopucn7x6qHd1/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/0g5jA/hyNR6YGFMJ/LfO8EQv3ywg22g0gvLMbck/img.png?width=1191&amp;amp;height=585&amp;amp;face=0_0_1191_585');&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;[Java] Windows10 환경 OpenJDK 설치 및 환경설정&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[Java] Windows10 환경 OpenJDK 설치 및 환경설정 1. OpenJDK 다운로드 OpenJDK는 다운로드 는 아래 링크를 통해 원하는 버전의 설치 파일을 다운로드 할 수 있다. JDK Builds from Oracle jdk.java.net JDK 배포.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;Tomcat_8.0_설치_및_서버_설정&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #fc4a1a;&quot;&gt;&lt;b&gt;Tomcat 8.0 설치 및 서버 설정&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다음 게시글에서 Tomcat 관련 글을 참고하면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://haenny.tistory.com/50&quot;&gt;https://haenny.tistory.com/50&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1679903512673&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;[Eclipse] 전자정부프레임워크 3.8 버전 업그레이드 하기 (1) Spring&quot; data-og-description=&quot;[Eclipse] 전자정부프레임워크 3.8 버전 업그레이드 하기 (1) Spring 기존 egovFramework 3.6.0 버전에서 개발을 하고 있었는데 3.8버전을 업그레이드 하려한다. 분명 언젠가 또 업그레이드 할 날이 올 것을 &quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/50&quot; data-og-url=&quot;https://haenny.tistory.com/50&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bbkIcl/hyNSaUiYbf/yr42OnPLQ9ZJ2ejH6CFjvk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/sjquu/hyNRZL4kIA/Gp3JWbWhDFRPnz9K2S3DJK/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/IdWk4/hyNSfafoQa/CaZv7rxZ8Npuz0JtOwf9DK/img.png?width=1035&amp;amp;height=673&amp;amp;face=0_0_1035_673&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/50&quot; data-source-url=&quot;https://haenny.tistory.com/50&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bbkIcl/hyNSaUiYbf/yr42OnPLQ9ZJ2ejH6CFjvk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/sjquu/hyNRZL4kIA/Gp3JWbWhDFRPnz9K2S3DJK/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/IdWk4/hyNSfafoQa/CaZv7rxZ8Npuz0JtOwf9DK/img.png?width=1035&amp;amp;height=673&amp;amp;face=0_0_1035_673');&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;[Eclipse] 전자정부프레임워크 3.8 버전 업그레이드 하기 (1) Spring&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;[Eclipse] 전자정부프레임워크 3.8 버전 업그레이드 하기 (1) Spring 기존 egovFramework 3.6.0 버전에서 개발을 하고 있었는데 3.8버전을 업그레이드 하려한다. 분명 언젠가 또 업그레이드 할 날이 올 것을...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;SpringBoot_Gradle_Project_간편하게_생성&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;b&gt;&lt;span style=&quot;color: #fc4a1a;&quot;&gt;SpringBoot Gradle Project 간편하게 생성&lt;/span&gt;&lt;/b&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://start.spring.io&quot;&gt;https://start.spring.io&lt;/a&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;&lt;span&gt;본인이 만드려는 프로젝트명과 그룹명을 설정하고 스펙에 맞게 입력 후&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;i&gt;&lt;b&gt;Generate CTRL + Enter&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&amp;nbsp;&lt;/i&gt;&lt;/span&gt;버튼을 클릭하면 압축(Zip) 파일이 다운로드 될 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;636&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bfCDnz/btr6oXvZFlN/I1DxcRkiyk3yURW3GwL7Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bfCDnz/btr6oXvZFlN/I1DxcRkiyk3yURW3GwL7Nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bfCDnz/btr6oXvZFlN/I1DxcRkiyk3yURW3GwL7Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbfCDnz%2Fbtr6oXvZFlN%2FI1DxcRkiyk3yURW3GwL7Nk%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;1280&quot; height=&quot;636&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;636&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다운받은 압축파일은 본인의 이클립스&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;workspace&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;경로에 옮긴 뒤에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;&quot;여기에 압축풀기&quot;&lt;/b&gt;&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;를 클릭하여 압축을 풀어야 프로젝트 임포트할 때 편리하다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;287&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/btopff/btr5TnwXl3M/31I3wDt1QT10FicLT8ZrP0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/btopff/btr5TnwXl3M/31I3wDt1QT10FicLT8ZrP0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/btopff/btr5TnwXl3M/31I3wDt1QT10FicLT8ZrP0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbtopff%2Fbtr5TnwXl3M%2F31I3wDt1QT10FicLT8ZrP0%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;685&quot; height=&quot;287&quot; data-origin-width=&quot;685&quot; data-origin-height=&quot;287&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다시 이클립스로 돌아와서 Package Explorer 창에서&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;마우스 우키 - Import - Gradle - Existing Gradle Project&lt;/b&gt;&lt;/i&gt;&lt;/span&gt;&amp;nbsp; 클릭하고,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;다음 화면에서 Browser 를 선택하여 이전에 압축해제한 파일을 선택한 뒤 Finish를 클릭한다.&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;473&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GjHq1/btr5TpBvmeF/YOypmejo4mqqY5qwDQWkuk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GjHq1/btr5TpBvmeF/YOypmejo4mqqY5qwDQWkuk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GjHq1/btr5TpBvmeF/YOypmejo4mqqY5qwDQWkuk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGjHq1%2Fbtr5TpBvmeF%2FYOypmejo4mqqY5qwDQWkuk%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;664&quot; height=&quot;473&quot; data-origin-width=&quot;664&quot; data-origin-height=&quot;473&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;그러면 다음과 같은 구조로 프로젝트가 생성된다 !&lt;/span&gt;&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;aswift_10_host&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div id=&quot;aswift_15_host&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/JqSuA/btr6qsoOlQg/TUKxjNEvRARa8qcdFKsrv1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/JqSuA/btr6qsoOlQg/TUKxjNEvRARa8qcdFKsrv1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/JqSuA/btr6qsoOlQg/TUKxjNEvRARa8qcdFKsrv1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FJqSuA%2Fbtr6qsoOlQg%2FTUKxjNEvRARa8qcdFKsrv1%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;929&quot; height=&quot;416&quot; data-origin-width=&quot;929&quot; data-origin-height=&quot;416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;h2 id=&quot;Dependency_추가하기&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #fc4a1a;&quot;&gt;&lt;b&gt;Dependency 추가하기&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;주로 SpringMVC 구조의 프로젝트를 진행하면서 자주 사용해왔던 라이브러리를 위주로 추가할 것이다.&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&gt;버전에 따라 필요한 라이브러리는&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://mvnrepository.com/&quot;&gt;Maven Repository&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;에서 검색한 뒤 알맞은 버전을 선택해서 build.gradle&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;dependencies&lt;/b&gt;&lt;span&gt;&amp;nbsp;&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;&lt;span&gt;만약&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;i&gt;&lt;b&gt;jstl&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&gt;&lt;/span&gt;를 추가할 때 여러개가 나와서 헷갈릴 수 있다.&lt;/span&gt;&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 style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;Gradle - Refresh Gradle Project&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;를 클릭하면, build.gradle 파일에 빨간 X 표시가 되어 정상적으로 추가되지 않을 것이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;441&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RoBXT/btr6buPoRRH/ni1jY2p6e3UTNMITcKrsNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RoBXT/btr6buPoRRH/ni1jY2p6e3UTNMITcKrsNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RoBXT/btr6buPoRRH/ni1jY2p6e3UTNMITcKrsNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRoBXT%2Fbtr6buPoRRH%2Fni1jY2p6e3UTNMITcKrsNK%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;412&quot; height=&quot;441&quot; data-origin-width=&quot;412&quot; data-origin-height=&quot;441&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
javax.servlet.jsp.jstl 로 추가했을 때 build.gradle 에러
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;두 번째 JSTL인&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;i&gt;&lt;b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;(javax.servlet.jstl)&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/i&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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;455&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/crebkO/btr6oZm3cA4/ZqM2WfmxYvNvLnthWncsqk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/crebkO/btr6oZm3cA4/ZqM2WfmxYvNvLnthWncsqk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/crebkO/btr6oZm3cA4/ZqM2WfmxYvNvLnthWncsqk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcrebkO%2Fbtr6oZm3cA4%2FZqM2WfmxYvNvLnthWncsqk%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;1280&quot; height=&quot;455&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;455&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;필자는 가장 최신 버전인 1.2 버전을 클릭하였고,&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;color: #6164c6;&quot;&gt;&lt;b&gt;Gradle Tab&lt;/b&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;의 implementation group 정보를 그대로 복사하여 build.gradle 에 추가해주면 된다.만약 지금 게시물과는 번외로, Maven Project 인 경우에는 Maven Tab을 클릭하여 추가해주면 된다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;693&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/rWQlB/btr6pEXgYo3/X0X5ircKsJ7ME6DomPWPL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/rWQlB/btr6pEXgYo3/X0X5ircKsJ7ME6DomPWPL1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/rWQlB/btr6pEXgYo3/X0X5ircKsJ7ME6DomPWPL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FrWQlB%2Fbtr6pEXgYo3%2FX0X5ircKsJ7ME6DomPWPL1%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;1280&quot; height=&quot;693&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;693&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;692&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wOAkc/btr53H2Fyug/QeUOZEtCGWigYnegPrjYN1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wOAkc/btr53H2Fyug/QeUOZEtCGWigYnegPrjYN1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wOAkc/btr53H2Fyug/QeUOZEtCGWigYnegPrjYN1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwOAkc%2Fbtr53H2Fyug%2FQeUOZEtCGWigYnegPrjYN1%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;1280&quot; height=&quot;692&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;692&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;의존성 추가 화면&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1121&quot; data-origin-height=&quot;480&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dn3DBZ/btr6eTO1X6T/vUFcxCKUfn8wJBsbdvbxz1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dn3DBZ/btr6eTO1X6T/vUFcxCKUfn8wJBsbdvbxz1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dn3DBZ/btr6eTO1X6T/vUFcxCKUfn8wJBsbdvbxz1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdn3DBZ%2Fbtr6eTO1X6T%2FvUFcxCKUfn8wJBsbdvbxz1%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;1121&quot; height=&quot;480&quot; data-origin-width=&quot;1121&quot; data-origin-height=&quot;480&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1679903512678&quot; class=&quot;groovy&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;dependencies {
	implementation 'org.springframework.boot:spring-boot-starter'
	testImplementation 'org.springframework.boot:spring-boot-starter-test'
	
	// web
	implementation group: 'org.springframework.boot', name: 'spring-boot-starter-web', version: '2.6.5'
	// jstl    
	// https://mvnrepository.com/artifact/javax.servlet/jstl    
	implementation group: 'javax.servlet', name: 'jstl', version: '1.2'

	// 내장 tomcat을 사용하기 때문에 JSP 처리하는 서블릿을 추가하는 것
	// https://mvnrepository.com/artifact/org.apache.tomcat.embed/tomcat-embed-jasper
	implementation group: 'org.apache.tomcat.embed', name: 'tomcat-embed-jasper', version: '9.0.60'    
	
	// lombok
	// https://mvnrepository.com/artifact/org.projectlombok/lombok
	compileOnly group: 'org.projectlombok', name: 'lombok', version: '1.18.12'
	annotationProcessor 'org.projectlombok:lombok:1.18.12'
    
	// 정적 소스 재시작 없이 적용
	// https://mvnrepository.com/artifact/org.springframework.boot/spring-boot-devtools
	implementation group: 'org.springframework.boot', name: 'spring-boot-devtools', version: '2.6.5'
	
	// simple json
	// https://mvnrepository.com/artifact/com.google.code.gson/gson
	implementation group: 'com.google.code.gson', name: 'gson', version: '2.9.0'
	// https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple
	implementation group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;application.properties_설정&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #fc4a1a;&quot;&gt;&lt;b&gt;application.properties 설정&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;아직은 데이터베이스 커넥션 없이 프로젝트를 사용을 할 것이기 때문에, 웹프로젝트 특성에 맞는 일부 설정만 하였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;245&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cdDxJZ/btr53HByD9V/uayy9wvUKMgeX2ixwWOi0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cdDxJZ/btr53HByD9V/uayy9wvUKMgeX2ixwWOi0K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cdDxJZ/btr53HByD9V/uayy9wvUKMgeX2ixwWOi0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcdDxJZ%2Fbtr53HByD9V%2Fuayy9wvUKMgeX2ixwWOi0K%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;854&quot; height=&quot;245&quot; data-origin-width=&quot;854&quot; data-origin-height=&quot;245&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;div id=&quot;aswift_16_host&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;pre id=&quot;code_1679903512679&quot; class=&quot;ini&quot; data-ke-language=&quot;r&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#project name
project.name=TestBoot

#WEB 환경설정
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp
server.port=9090
server.servlet.context-path=/TestBoot

#정적소스 재시작 없이 적용
spring.devtools.livereload.enabled=true
spring.freemarker.cache=false&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;여기까지 웹 프로젝트를 구현하기 위한 간단한 설정은 끝났다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이제 실제 페이지 화면 (jsp) 와 컨트롤러를 연결하기 위해 파일을 추가하보자.&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;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style6&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 id=&quot;webapp_구조_폴더_생성&quot; data-ke-size=&quot;size26&quot;&gt;&lt;span&gt;&lt;span style=&quot;color: #fc4a1a;&quot;&gt;&lt;b&gt;webapp 구조 폴더 생성&lt;/b&gt;&lt;/span&gt;&lt;/span&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;908&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bVXYvj/btr5ZleHM7n/06KleC9uTKctay3XUrsbeK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bVXYvj/btr5ZleHM7n/06KleC9uTKctay3XUrsbeK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bVXYvj/btr5ZleHM7n/06KleC9uTKctay3XUrsbeK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbVXYvj%2Fbtr5ZleHM7n%2F06KleC9uTKctay3XUrsbeK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;406&quot; height=&quot;908&quot; data-origin-width=&quot;406&quot; data-origin-height=&quot;908&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 id=&quot;main.jsp&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;b&gt;main.jsp&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;276&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nICcE/btr53HO4qyk/OBzww8wCkVFbWskwJwoZI0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nICcE/btr53HO4qyk/OBzww8wCkVFbWskwJwoZI0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nICcE/btr53HO4qyk/OBzww8wCkVFbWskwJwoZI0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnICcE%2Fbtr53HO4qyk%2FOBzww8wCkVFbWskwJwoZI0%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;1021&quot; height=&quot;276&quot; data-origin-width=&quot;1021&quot; data-origin-height=&quot;276&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1679903512680&quot; class=&quot;xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;%@ page language=&quot;java&quot; contentType=&quot;text/html; charset=UTF-8&quot; pageEncoding=&quot;UTF-8&quot;%&amp;gt;
&amp;lt;!doctype html&amp;gt;
&amp;lt;html lang=&quot;ko&quot;&amp;gt;
&amp;lt;head&amp;gt;
	Hellow World !
&amp;lt;/head&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;script&amp;gt;
&amp;lt;/script&amp;gt;
&amp;lt;/body&amp;gt;
&amp;lt;/html&amp;gt;&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;h4 id=&quot;PageController&quot; data-ke-size=&quot;size20&quot;&gt;&lt;span&gt;&lt;b&gt;PageController&lt;/b&gt;&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;754&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b49vIA/btr6pdMcB4O/RVPIMTlbqKn7IpyuvnQYN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b49vIA/btr6pdMcB4O/RVPIMTlbqKn7IpyuvnQYN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b49vIA/btr6pdMcB4O/RVPIMTlbqKn7IpyuvnQYN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb49vIA%2Fbtr6pdMcB4O%2FRVPIMTlbqKn7IpyuvnQYN0%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;1280&quot; height=&quot;754&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;754&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;

&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1679903512680&quot; class=&quot;reasonml&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package kr.co.haenny.TestBoot.controller;

import java.util.Enumeration;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.web.bind.annotation.GetMapping;

@Controller
public class PageControl {	
	@GetMapping(&quot;/**/*.do&quot;)
	public String goToGetPage(HttpServletRequest request, HttpServletResponse response, Model model){
		if(request.getServletPath().equals(&quot;/error/page.do&quot;)) {
			/*에러 페이지인 경우 상태코드와 상태메세지 리턴*/
			HttpStatus hs = HttpStatus.valueOf(response.getStatus());
			model.addAttribute(&quot;status&quot;, hs.value());
			model.addAttribute(&quot;message&quot;, hs.getReasonPhrase());
		}else {		
			/*파라미터있는 경우 데이터 리턴*/
			Enumeration&amp;lt;String&amp;gt; params = request.getParameterNames();
			while (params.hasMoreElements()) {
				String name = (String) params.nextElement();
				model.addAttribute(name, request.getParameter(name));
			}
		}
		return request.getServletPath().replace(&quot;.do&quot;, &quot;&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;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;사실 Page Controller는 전자정부프레임워크 프로젝트에서 사용해왔던 PageController를 그대로 가져왔는데,&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;이렇게 적용한 뒤 실행을 시키려니&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;a href=&quot;https://haenny.tistory.com/297&quot;&gt;아래와 같은 에러&lt;/a&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;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;그 외 SpringBoot 오류&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;color: #000000;&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/296&quot;&gt;https://haenny.tistory.com/296&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Initializing Spring DispatcherServlet 'dispatcherServlet'&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1679903512681&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;SpringBoot Initializing Spring DispatcherServlet 'dispatcherServlet'&quot; data-og-description=&quot;SpringBoot 실행 후 웹페이지 로드 시에 표출되는 로그 Initializing Spring DispatcherServlet 'dispatcherServlet' Initializing Servlet 'dispatcherServlet' Completed initialization in 1 ms application.pr..&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/296&quot; data-og-url=&quot;https://haenny.tistory.com/296&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sDn24/hyNUs1I3El/PPJPcP1e0ybkcNkyayOg01/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/kQBKX/hyNUpjDpgp/YRxxzaj15U5VxkfzdIyzJk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/bjNbKm/hyNUAZLEMl/bs22BAevSuO7okY8yWKnGk/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/296&quot; data-source-url=&quot;https://haenny.tistory.com/296&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sDn24/hyNUs1I3El/PPJPcP1e0ybkcNkyayOg01/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/kQBKX/hyNUpjDpgp/YRxxzaj15U5VxkfzdIyzJk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/bjNbKm/hyNUAZLEMl/bs22BAevSuO7okY8yWKnGk/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;SpringBoot Initializing Spring DispatcherServlet 'dispatcherServlet'&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;SpringBoot 실행 후 웹페이지 로드 시에 표출되는 로그 Initializing Spring DispatcherServlet 'dispatcherServlet' Initializing Servlet 'dispatcherServlet' Completed initialization in 1 ms application.pr.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/298&quot;&gt;https://haenny.tistory.com/298&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;Failed to determine a suitable driver class&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1679903512682&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;Failed to determine a suitable driver class 오류 해결&quot; data-og-description=&quot;오류 로그 ********************************* APPLICATION FAILED TO START ********************************* Description: Failed to configure a DataSource: 'url' attribute is not specified and no embed..&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/298&quot; data-og-url=&quot;https://haenny.tistory.com/298&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/89KWl/hyNUpDVPDs/f4bOPF9HR3mMaTxtkKAeK1/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/A5Cn9/hyNUpRsQJj/LOhZGBvUle7VB1NNNsCMQk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/nY9CP/hyNUAyHNpg/lk9or8r7BDIr0F9kMk2p10/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/298&quot; data-source-url=&quot;https://haenny.tistory.com/298&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/89KWl/hyNUpDVPDs/f4bOPF9HR3mMaTxtkKAeK1/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/A5Cn9/hyNUpRsQJj/LOhZGBvUle7VB1NNNsCMQk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/nY9CP/hyNUAyHNpg/lk9or8r7BDIr0F9kMk2p10/img.png?width=264&amp;amp;height=200&amp;amp;face=0_0_264_200');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Failed to determine a suitable driver class 오류 해결&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;오류 로그 ********************************* APPLICATION FAILED TO START ********************************* Description: Failed to configure a DataSource: 'url' attribute is not specified and no embed.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000;&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/299&quot;&gt;https://haenny.tistory.com/299&lt;/a&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&quot;Path with &quot;WEB-INF&quot; or &quot;META_INF&quot; : [WEB-INF/jsp/main.jsp]&quot;&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1679903512682&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;SpringBoot &amp;quot;Path with &amp;quot;WEB-INF&amp;quot; or &amp;quot;META_INF&amp;quot; : [WEB-INF/jsp/main.jsp]&amp;quot; 경고 및 Whitelabel Error Page 오류&quot; data-og-description=&quot;&amp;quot;Path with &amp;quot;WEB-INF&amp;quot; or &amp;quot;META-INF&amp;quot; : [WEB-INF/jsp/main.jsp]&amp;quot; SpringBoot 에서 main.jsp 화면을 만들고, Controller에서 View로 리턴을 하였는데 jsp 파일을 찾지 못하는 경우 ResourceHttpRequestHandler : P..&quot; data-og-host=&quot;haenny.tistory.com&quot; data-og-source-url=&quot;https://haenny.tistory.com/299&quot; data-og-url=&quot;https://haenny.tistory.com/299&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bpbYCr/hyNUpqoNCQ/EJLiumGrPFvMOryuDka9Gk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/k4Y40/hyNUsAEbVm/FP1YbR7FtztWLhiiMVkto1/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/1SfEO/hyNUvREwkM/mKjlB4mu423u4MNoy9CMi0/img.png?width=1177&amp;amp;height=469&amp;amp;face=0_0_1177_469&quot;&gt;&lt;a href=&quot;https://haenny.tistory.com/299&quot; data-source-url=&quot;https://haenny.tistory.com/299&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bpbYCr/hyNUpqoNCQ/EJLiumGrPFvMOryuDka9Gk/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/k4Y40/hyNUsAEbVm/FP1YbR7FtztWLhiiMVkto1/img.png?width=800&amp;amp;height=799&amp;amp;face=0_0_800_799,https://scrap.kakaocdn.net/dn/1SfEO/hyNUvREwkM/mKjlB4mu423u4MNoy9CMi0/img.png?width=1177&amp;amp;height=469&amp;amp;face=0_0_1177_469');&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;SpringBoot &quot;Path with &quot;WEB-INF&quot; or &quot;META_INF&quot; : [WEB-INF/jsp/main.jsp]&quot; 경고 및 Whitelabel Error Page 오류&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&quot;Path with &quot;WEB-INF&quot; or &quot;META-INF&quot; : [WEB-INF/jsp/main.jsp]&quot; SpringBoot 에서 main.jsp 화면을 만들고, Controller에서 View로 리턴을 하였는데 jsp 파일을 찾지 못하는 경우 ResourceHttpRequestHandler : P.....&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;haenny.tistory.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div data-ad-creative-wrap=&quot;outer&quot;&gt;
&lt;div id=&quot;0a1179c5-d13b-4bc3-b76b-34776318ded9&quot; data-ad-creative-wrap=&quot;inner&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;aswift_6_host&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div id=&quot;reaction-295&quot;&gt;
&lt;div&gt;&lt;span&gt;좋아요&lt;/span&gt;&lt;span style=&quot;color: #000000;&quot;&gt;1&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div data-entry-id=&quot;295&quot; data-entry-visibility=&quot;public&quot; data-category-visibility=&quot;public&quot;&gt;&lt;span&gt;게시글 관리&lt;/span&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;span&gt;&amp;nbsp;&lt;/span&gt;구독하기
&lt;div data-ccl-type=&quot;1&quot;&gt;&lt;a href=&quot;https://creativecommons.org/licenses/by-nc-nd/4.0/deed.ko&quot;&gt;&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;/span&gt;&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;h4 id=&quot;'JVM_&amp;gt;_SpringBoot'_카테고리의_다른_글&quot; data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
SpringBoot &quot;Path with &quot;WEB-INF&quot; or &quot;META_INF&quot; : [WEB-INF/jsp/main.jsp]&quot; 경고 및 Whitelabel Error Page 오류&amp;nbsp;&amp;nbsp;Failed to determine a suitable driver class 오류 해결&amp;nbsp;&amp;nbsp;SpringBoot 2.5 &amp;rarr; 2.6 업그레이드 시No&amp;nbsp;more&amp;nbsp;pattern&amp;nbsp;data&amp;nbsp;allowed&amp;nbsp;after&amp;nbsp;{*...}&amp;nbsp;or&amp;nbsp;**&amp;nbsp;pattern&amp;nbsp;element 오류 해결&amp;nbsp;&amp;nbsp;SpringBoot Initializing Spring DispatcherServlet 'dispatcherServlet'&amp;nbsp;&amp;nbsp;[SpringBoot] 스프링부트 properties 설정파일 분리하기&amp;nbsp;&amp;nbsp;&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>study/java</category>
      <author>intseq</author>
      <guid isPermaLink="true">https://nizimo.tistory.com/291</guid>
      <comments>https://nizimo.tistory.com/291#entry291comment</comments>
      <pubDate>Mon, 27 Mar 2023 16:52:26 +0900</pubDate>
    </item>
  </channel>
</rss>