<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>CodeLife</title>
    <link>https://codify.tistory.com/</link>
    <description></description>
    <language>ko</language>
    <pubDate>Sun, 2 Aug 2026 10:16:09 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>배부른코딩로그</managingEditor>
    <image>
      <title>CodeLife</title>
      <url>https://tistory1.daumcdn.net/tistory/3121369/attach/0376ec8edfda48fa9c6daada6d3be6b4</url>
      <link>https://codify.tistory.com</link>
    </image>
    <item>
      <title>[메모] 오프라인(내부망)에서 npm install을 해보자.</title>
      <link>https://codify.tistory.com/179</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt; Offline 환경에서도 npm install 과 흡사하게 필요한 패키지를 다운로드 해보자. 귀찮음 주의!!&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;오프라인 상황에서도 불굴의 의지로 필요한 패키지를 다운받을 수 있다.&lt;/li&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, '돋움', sans-serif;&quot;&gt;조금이라도 더 편리한 방법을 기록해두자.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;B2C 가 아닌 B2B 혹은 B2G 서비스를 운영하는 회사는 대부분 보안이 철저하다.&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;blockquote data-ke-style=&quot;style2&quot;&gt;npm 프로젝트가 존재하고 npm을 통해 필요한 패키지를 다운로드 받고자 하면 어떻게 해야할까?&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 외부망에서 내부망으로 파일을 전송할 수 있는 통로를 하나 열어두긴 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하지만... 상급자의 결제를 항상 받아야하기 때문에 상급자가 휴가이거나 자리를 비운다면 무한히 기다려야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이게 너무 번거롭고 귀찮았다.&lt;/p&gt;
&lt;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;yarn을 통하여 오프라인 상태에서 yarn install을 할 수 있다&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;yarn의 경우 패키지 레퍼지토리 서버에서 필요한 패키지를 가져올 때, node_modules에 들어있는 디렉토리로 바로 가져오는 것이 아니라, *.tgz 파일로 다운로드하고, 패키지 매니저가 다운로드된 파일의 압출을 풀어 node_modules에 추가하는 방식이다.&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;즉, 로컬 디렉토리에 *.tgz가 있다면 다음 명령어를 통해 특정 프로젝트로 패키지를 넣을 수 있다는 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1688706377639&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn install --offline&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;u&gt;단, yarn이 외부망, 내부망 모두 설치 되어져 있어야 한다!!!&lt;/u&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;yarn offline mirror 방식&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;외부망 쪽 작업 순서&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;1) yarn 설치&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1688706481390&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;npm i yarn
yarn --version&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333;&quot;&gt;2) 프로젝트 루트 경로에서 .yarnrc 파일 생성&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1688706560704&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;cat &amp;gt; .yarnrc
yarn-offline-mirror &quot;./npm_packages&quot;
yarn-offline-mirror-pruning true&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3) &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;node_modules, yarn.lock 삭제&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1688706601237&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rm -rf ./node_modules
rm ./yarn.lock&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;4) &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;yarn cache 삭제 후 의존성 설치&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1688706616891&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;yarn cache clean
yarn install&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;5) node_modules만 삭제 후 저장소 형상관리 업로드&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1688706633969&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rm -rf ./node_modules
git add .
git commit -m &quot;새로운 의존성 다운로드&quot;
git push origin&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;b&gt;./npm_packages&lt;/b&gt;&amp;nbsp;디렉터리에&amp;nbsp;**.tgz* 파일들이 저장되고&amp;nbsp;&lt;b&gt;yarn.lock&lt;/b&gt;&amp;nbsp;파일이 새로 생성된다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;위 디렉터리와 파일을 프로젝트 저장소로 올려버리자!&lt;/p&gt;
&lt;p 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-ke-size=&quot;size23&quot;&gt;내부망 쪽 작업 순서&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;1) 저장소로부터 최신본 내려받기&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1688706687707&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;git fetch origin
git pull origin&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;2) &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;프로젝트의 ./node_modules/ 삭제&lt;/span&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1688706703234&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;rm -rf ./node_modules&lt;/code&gt;&lt;/pre&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;3) .yarnrc, yarn.lock, package.json 확인 후, 프로젝트 루트 경로에 복붙&lt;/h4&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;b&gt;.yarnrc&lt;/b&gt;: npm_packages 경로 설정 확인.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;yarn.lock&lt;/b&gt;: 그대로 프로젝트 경로에 복붙.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;package.json&lt;/b&gt;: 혹시나, 버전을 업그레이드하거나 추가한 경우, &quot;dependencies&quot;, &quot;devDependencies&quot; 복붙&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자의 경우, 프로젝트 경로와 다른 곳에 npm_packages를 구성했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;.yarnrc 에 npm_packages를 절대경로로 수정했음을 찾고 바란다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가적으로 대부분 다른 사람들은 yarn.lock을 날려버리는데, 필자는 형상관리에 넣어줬다.&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;즉, 새롭게 패키지가 추가되면 yarn.lock만 잘 복붙하면 된다 : )&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 data-ke-size=&quot;size26&quot;&gt;마무리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자가 한 방식으로 진행하려면, SVN 혹은 Git 과 같은 형상관리에 대한 접근이 외부망에서 가능해야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SVN은 막혀있지만 Git은 접근이 되어버리는 기적의 보안 덕분에 위 방식으로 진행할 수 있었다.&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;`npm install &amp;lt;패키지&amp;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;*.tgz를 형상관리하면서 팀원들에게 공유하고 동일한 방식으로 사용할 수 있다는 점이 아닐까 싶다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;파일이 크면 분할압축해서 망분리로 넘기곤 했는데, 그 때보다는 훨씬 나아졌다고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;006&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/006.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/006.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;출처&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://musma.github.io/2019/08/23/nodejs-offline-deployment.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;오프라인 환경에 NodeJS 애플리케이션 배포하기&lt;/a&gt;, 이현수, 2019-08-23&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://classic.yarnpkg.com/blog/2016/11/24/offline-mirror/&quot;&gt;Running Yarn offline&lt;/a&gt;, &lt;a style=&quot;color: #117cad; text-align: center;&quot; href=&quot;https://github.com/bestander&quot;&gt;Konstantin Raev&lt;/a&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;, 2016-11-24&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Last Updated. 2022. 07. 07.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>자바스크립트/메모장</category>
      <category>install</category>
      <category>Internet</category>
      <category>Module</category>
      <category>node</category>
      <category>npm</category>
      <category>offline</category>
      <category>package</category>
      <category>Yarn</category>
      <category>내부망</category>
      <category>오프라인</category>
      <author>배부른코딩로그</author>
      <guid isPermaLink="true">https://codify.tistory.com/179</guid>
      <comments>https://codify.tistory.com/179#entry179comment</comments>
      <pubDate>Fri, 7 Jul 2023 14:17:12 +0900</pubDate>
    </item>
    <item>
      <title>[MyBatis] MyBatis-Spring-Boot-Starter 버전 호환</title>
      <link>https://codify.tistory.com/176</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  MyBatis-Spring-Boot-Starter 를 사용할 때, Spring Boot와 JDK 호환성 체크를 해보자!&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;Spring Boot와 JDK 버전에 따른 MyBatis-Spring-Boot-Starter를 적절히 선택할 수 있다.&lt;/li&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;&quot;&gt;EOL된 버전 사용을 자제하고, 새롭게 릴리즈되는 Release Note를 잘 체크할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;MyBatis-Spring-Boot-Starter란 무엇일까?&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 모듈을 스프링 부트 위에 MyBatis 응용 프로그램을 신속하게 구출할 수 있도록 도와준다.&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;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;독립형 어플리케이션 빌드&lt;/li&gt;
&lt;li&gt;보일러 플레이트성 코드를 크게 줄어듦&lt;/li&gt;
&lt;li&gt;XML 설정(Configuration)을 굳이 사용하지 않음&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;버전 호환&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최신 버전이 릴리즈 될 때마다 대응하는 회사는 드물겠지만,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 프로젝트를 시작하거나, 관련 의존성들의 버전업이 필요할 때 호환성 체크는 필수❗&lt;/p&gt;
&lt;table style=&quot;background-color: #ffffff; color: #333333; text-align: start; border-collapse: collapse; width: 100%; height: 119px;&quot; border=&quot;1&quot; data-ke-align=&quot;alignLeft&quot;&gt;
&lt;tbody&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;width: 27.0931%; height: 17px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;MyBatis-Spring-Boot-Starter&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 35.5813%; height: 17px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;MyBatis-Spring&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 22.9071%; height: 17px;&quot;&gt;&lt;b&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: left;&quot;&gt;Spring Boot&lt;/span&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;width: 14.3023%; height: 17px;&quot;&gt;&lt;b&gt;JDK&lt;/b&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: left; width: 27.0931%; height: 17px;&quot;&gt;&lt;b&gt;3.0&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: left; width: 35.5813%; height: 17px;&quot;&gt;3.0&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: left; width: 22.9071%; height: 17px;&quot;&gt;3.0&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: left; width: 14.3023%; height: 17px;&quot;&gt;17 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: left; width: 27.0931%; height: 17px;&quot;&gt;&lt;b&gt;2.3&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 35.5813%; height: 17px;&quot;&gt;2.1&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 22.9071%; height: 17px;&quot;&gt;2.5 - 2.7&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 14.3023%; height: 17px;&quot;&gt;8 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: left; width: 27.0931%; height: 17px;&quot;&gt;&lt;b&gt;2.2&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: left; width: 35.5813%; height: 17px;&quot;&gt;2.0 (need 2.0.6+ for enable all features)&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: left; width: 22.9071%; height: 17px;&quot;&gt;2.5 - 2.7&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: left; width: 14.3023%; height: 17px;&quot;&gt;8 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: left; width: 27.0931%; height: 17px;&quot;&gt;&lt;b&gt;2.1&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 35.5813%; height: 17px;&quot;&gt;2.0 (need 2.0.6+ for enable all features)&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 22.9071%; height: 17px;&quot;&gt;2.1 - 2.4&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 14.3023%; height: 17px;&quot;&gt;8 or higher&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: left; width: 27.0931%; height: 17px;&quot;&gt;&lt;b&gt;&lt;s&gt;2.0 (EOL)&lt;/s&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: left; width: 35.5813%; height: 17px;&quot;&gt;&lt;s&gt;2.0&lt;/s&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: left; width: 22.9071%; height: 17px;&quot;&gt;&lt;s&gt;2.0 or 2.1&lt;/s&gt;&lt;/td&gt;
&lt;td style=&quot;background-color: #f9f9f9; text-align: left; width: 14.3023%; height: 17px;&quot;&gt;&lt;s&gt;8 or higher&lt;/s&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr style=&quot;height: 17px;&quot;&gt;
&lt;td style=&quot;text-align: left; width: 27.0931%; height: 17px;&quot;&gt;&lt;b&gt;&lt;s&gt;1.x (EOL)&lt;/s&gt;&lt;/b&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 35.5813%; height: 17px;&quot;&gt;&lt;s&gt;1.3&lt;/s&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 22.9071%; height: 17px;&quot;&gt;&lt;s&gt;1.5&lt;/s&gt;&lt;/td&gt;
&lt;td style=&quot;text-align: left; width: 14.3023%; height: 17px;&quot;&gt;&lt;s&gt;6 or higher&lt;/s&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;h3 data-ke-size=&quot;size23&quot;&gt;Quick Start&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 공식 위키에 자세하게 나와있으니, GitHub 페이지에서 참고하면 좋을 듯 하다  &lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start&quot;&gt;Quick Start &amp;middot; mybatis/spring-boot-starter Wiki&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1680761508227&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;object&quot; data-og-title=&quot;Quick Start&quot; data-og-description=&quot;MyBatis integration with Spring Boot. Contribute to mybatis/spring-boot-starter development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start&quot; data-og-url=&quot;https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cS9ucs/hyScyoDyA4/YBdCE8IuNnKZoDsku02TK1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/mybatis/spring-boot-starter/wiki/Quick-Start&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cS9ucs/hyScyoDyA4/YBdCE8IuNnKZoDsku02TK1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600');&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;Quick Start&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;MyBatis integration with Spring Boot. Contribute to mybatis/spring-boot-starter development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.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;h3 data-ke-size=&quot;size23&quot;&gt;출처&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://mybatis.org/spring-boot-starter/mybatis-spring-boot-autoconfigure/&quot;&gt;mybatis-spring-boot-autoconfigure&lt;/a&gt;, MyBatis.org, &lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&amp;copy; 2015&amp;ndash;2022&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;&lt;a href=&quot;https://github.com/mybatis/spring-boot-starter&quot;&gt;MyBatis integration with Spring Boot (github.com)&lt;/a&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Last Updated. 2022. 04. 07.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring/Mybatis</category>
      <category>boot</category>
      <category>iBATIS</category>
      <category>jdk</category>
      <category>mybatis</category>
      <category>note</category>
      <category>Release</category>
      <category>Spring</category>
      <category>starter</category>
      <category>Version</category>
      <category>Wiki</category>
      <author>배부른코딩로그</author>
      <guid isPermaLink="true">https://codify.tistory.com/176</guid>
      <comments>https://codify.tistory.com/176#entry176comment</comments>
      <pubDate>Fri, 7 Apr 2023 16:14:04 +0900</pubDate>
    </item>
    <item>
      <title>[MyBatis] Could not resolve type alias ''</title>
      <link>https://codify.tistory.com/175</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt; &lt;u&gt;Could not resolve type alias '?'&lt;/u&gt; 오류에 대해 트러블슈팅 해보자!&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;해당 오류가 발생했을 때, 적절하게 대응할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Mapper XML에서 parameterType에 DTO 이름을 설정해주었는데 다음과 같은 오류가 발생했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;650&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZPYwk/btr727LzM32/NEr4kyvVhrgO3SkwDZF2p1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZPYwk/btr727LzM32/NEr4kyvVhrgO3SkwDZF2p1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZPYwk/btr727LzM32/NEr4kyvVhrgO3SkwDZF2p1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZPYwk%2Fbtr727LzM32%2FNEr4kyvVhrgO3SkwDZF2p1%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;650&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;650&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;@Table Domain DTO&lt;span&gt; &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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;원인&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;&lt;b&gt;alias(별칭) 설정&lt;/b&gt;&lt;br /&gt;&lt;u&gt;MyBatis는 alias를 하나하나 친절하게 명시해줘야 한다!!&lt;/u&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;s&gt;@Table 혹은 @Entity 어노테이션을 기입만 해주면 자동으로 연동되면 좋겠지만....&lt;/s&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;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;해결방법&lt;/h3&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;1) application.yml, MyBatis type-aliases-package설정&lt;/h4&gt;
&lt;pre id=&quot;code_1680601815121&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;mybatis.type-aliases-package=com.example.domain&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;위와 같이&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;properties 파일에서 별칭 설정을 하여&amp;nbsp;&lt;span style=&quot;color: #006dd7;&quot;&gt;패키지 명을 명시&lt;/span&gt;&lt;/b&gt;해주어야 한다.&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot;&gt;&lt;b&gt;@Alias&lt;/b&gt; 별칭으로 명시해주면 자동으로 해당 패키지를 스캔하여 alias를 모두 등록해준다. ㅇㅂㅇ &lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;2) Mapper.xml, DTO 패키지 경로 추가&lt;/h4&gt;
&lt;p style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;만약 properties 파일을 수정하지 않고 작성하고 싶다면&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;b&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;parameterType에&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;패키지 명도 함께 작성&lt;/b&gt;해주면 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1680602164367&quot; class=&quot;kotlin&quot; data-ke-language=&quot;kotlin&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;insert id=&quot;create&quot; parameterType=&quot;com.example.domain.Member&quot;&amp;gt;
	...
&amp;lt;/insert&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;h4 style=&quot;background-color: #ffffff; color: #353638; text-align: left;&quot; data-ke-size=&quot;size20&quot;&gt;3) mybatis-config.xml, typeAlias 설정&lt;/h4&gt;
&lt;pre id=&quot;code_1680602803073&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;&amp;lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot; ?&amp;gt;
&amp;lt;!DOCTYPE configuration PUBLIC &quot;-//mybatis.org//DTD Config 3.0//EN&quot; &quot;http://mybatis.org/dtd/mybatis-3-config.dtd&quot;&amp;gt;
&amp;lt;configuration&amp;gt;
    &amp;lt;settings&amp;gt;
        &amp;lt;setting name=&quot;defaultStatementTimeout&quot; value=&quot;30&quot;/&amp;gt;
    &amp;lt;/settings&amp;gt;

    &amp;lt;typeAliases&amp;gt;
        &amp;lt;typeAlias type=&quot;com.ktnet.gethub.oss.core.domain.Role&quot; alias=&quot;role&quot;/&amp;gt;
        &amp;lt;typeAlias type=&quot;com.ktnet.gethub.oss.core.domain.Admin&quot; alias=&quot;admin&quot;/&amp;gt;
        &amp;lt;typeAlias type=&quot;com.ktnet.gethub.oss.core.domain.Customer&quot; alias=&quot;customer&quot;/&amp;gt;
    &amp;lt;/typeAliases&amp;gt;
&amp;lt;/configuration&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;h3 data-ke-size=&quot;size23&quot;&gt;출처&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://mybatis.org/mybatis-3/ko/index.html&quot;&gt;MyBatis &amp;ndash; 마이바티스 3&lt;/a&gt;, 저자, 2022-03-02&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Last Updated. 2022. 04. 06.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring/Mybatis</category>
      <author>배부른코딩로그</author>
      <guid isPermaLink="true">https://codify.tistory.com/175</guid>
      <comments>https://codify.tistory.com/175#entry175comment</comments>
      <pubDate>Thu, 6 Apr 2023 18:07:35 +0900</pubDate>
    </item>
    <item>
      <title>[Server] cURL 소화하기</title>
      <link>https://codify.tistory.com/174</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  생각보다 가벼워서 자주 사용하게 되는 curl command, 이번에 한 번 정리해보자!&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;cURL에 대해 설명할 수 있다.&lt;/li&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;&quot;&gt;cURL 명령어를 필요에 따라 적절하게 활용할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;&quot;&gt;활용하기 좋은 curl 예제를 정리하는 공간으로 활용한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;`curl` 명령어는 커맨드 혹은 스크립트에서 데이터를 전송하는데 사용된다.&lt;/span&gt;&lt;span style=&quot;&quot;&gt;전세계 다양한 분야에서 사용중이며, 인터넷 전송 엔진이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;`curl`은 &lt;b&gt;오픈 소스 소프트웨어&lt;/b&gt;이며, &lt;/span&gt;&lt;span style=&quot;&quot;&gt;&lt;u&gt;다양한 운영체제(Windows, Linux, Mac OS 등)를 지원&lt;/u&gt;하여 &lt;u&gt;어디서든 사용할 수 있다&lt;/u&gt;는 강점이 있다.&lt;/span&gt;&lt;span style=&quot;&quot;&gt;또한, 사용하기 위한 &lt;u&gt;문서나 자료들이 방대한 점&lt;/u&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;h3 data-ke-size=&quot;size23&quot;&gt;&lt;span style=&quot;&quot;&gt;다운로드&lt;/span&gt;&lt;/h3&gt;
&lt;p&gt;&lt;span style=&quot;&quot;&gt;Download URL:&amp;nbsp;&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://curl.se/download.html&quot;&gt;curl - Download&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1680587771651&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;curl - Download&quot; data-og-description=&quot;&quot; data-og-host=&quot;curl.se&quot; data-og-source-url=&quot;https://curl.se/download.html&quot; data-og-url=&quot;https://curl.se/download.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://curl.se/download.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://curl.se/download.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url();&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;curl - Download&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;curl.se&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;321&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/V1Iwt/btr73PQwBOZ/4Bo2bv2jIUbKBJveWe9pNK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/V1Iwt/btr73PQwBOZ/4Bo2bv2jIUbKBJveWe9pNK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/V1Iwt/btr73PQwBOZ/4Bo2bv2jIUbKBJveWe9pNK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FV1Iwt%2Fbtr73PQwBOZ%2F4Bo2bv2jIUbKBJveWe9pNK%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;821&quot; height=&quot;321&quot; data-filename=&quot;blob&quot; data-origin-width=&quot;821&quot; data-origin-height=&quot;321&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;사용방법&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;GET&lt;/h4&gt;
&lt;pre id=&quot;code_1680587996919&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -X GET &quot;http://localhost:8080/intro?name=EHOTO&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;GET방식은 Request Body 없음&lt;/li&gt;
&lt;li&gt;OS별 명령어 작성 방법
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;Windows: curl 주소 앞뒤에 '가 아닌 &quot;로 감싸야 함&lt;/li&gt;
&lt;li&gt;Linux:&amp;nbsp;curl&amp;nbsp;주소&amp;nbsp;앞뒤는&amp;nbsp;'&amp;nbsp;감싸기도&amp;nbsp;가능하고&amp;nbsp;&quot;&amp;nbsp;감싸기도&amp;nbsp;가능함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;POST&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;POST 방식의 경우, 데이터 타입에 따라 다양하게 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Request Body&lt;/p&gt;
&lt;pre id=&quot;code_1680588136028&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -d &quot;id=EHOTO&amp;amp;name=tistory-ehoto&quot; \
	-H &quot;Content-Type: application/x-www-form-urlencoded&quot; \
	-X POST http://localhost:8080/users
    
curl \
	-d &quot;id=EHOTO&quot; \
	-d &quot;name=tistory-ehoto&quot; \
	-H &quot;Content-Type: application/x-www-form-urlencoded&quot; \
	-X POST http://localhost:8080/users&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- JSON Data&lt;/p&gt;
&lt;pre id=&quot;code_1680588218957&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -d '{&quot;key1&quot;:&quot;value1&quot;, &quot;key2&quot;:&quot;value2&quot;}' \
	-H &quot;Content-Type: application/json&quot; \
	-X POST http://localhost:8080/users&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- File Data&lt;/p&gt;
&lt;pre id=&quot;code_1680588456662&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl -d @data.json \
	-H &quot;Content-Type: application/json&quot; \
	-X POST http://javaking75.blog.me&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;※ Windows: &lt;u&gt;'를 &quot;로 변경&lt;/u&gt;하고, &lt;u&gt;&quot;를 &quot;&quot;로 변경하고 호출&lt;/u&gt;해야 함&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;결과 저장&lt;/h3&gt;
&lt;pre id=&quot;code_1680588510940&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;curl http://www.naver.com &amp;gt; index.html&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;1226&quot; data-origin-height=&quot;361&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/byz3E5/btr74tGowZB/IUshyBOq3PTTptRckTIeMk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/byz3E5/btr74tGowZB/IUshyBOq3PTTptRckTIeMk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/byz3E5/btr74tGowZB/IUshyBOq3PTTptRckTIeMk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbyz3E5%2Fbtr74tGowZB%2FIUshyBOq3PTTptRckTIeMk%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;1226&quot; height=&quot;361&quot; data-origin-width=&quot;1226&quot; data-origin-height=&quot;361&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;마무리&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;curl 명령어는 서버 운영, 웹 접속, API 테스트 등 다양하게 활용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자주 사용하는 명령어 정도는 숙지하면 업무처리 효율이 높아질 수 있다 : )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;출처&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://curl.se/&quot;&gt;Offical Docs - cur://&lt;/a&gt;, curl 공식페이지&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&amp;amp;blogId=wideeyed&amp;amp;logNo=221350638501&quot;&gt;cURL 소개, HTTP GET, POST 호출 방법&lt;/a&gt;, 신군., 2018-12-20&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Last Updated. 2023. 04. 05.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Server</category>
      <author>배부른코딩로그</author>
      <guid isPermaLink="true">https://codify.tistory.com/174</guid>
      <comments>https://codify.tistory.com/174#entry174comment</comments>
      <pubDate>Wed, 5 Apr 2023 16:11:43 +0900</pubDate>
    </item>
    <item>
      <title>[Spring] Controller CRUD 보일러플레이트성 코드 줄이기</title>
      <link>https://codify.tistory.com/173</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  모든 도메인에 대해 CRUD는 대부분 존재한다. 이러한 보일러플레이트성 코드를 획기적으로 줄여보자!&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;보일러플레이트 코드(Boilerplate code)란 무엇인지 설명할 수 있다.&lt;/li&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, '돋움', sans-serif;&quot;&gt;컨트롤러(Controller)의 반복적인 CRUD 코드량을 획기적으로 줄일 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;스프링에서 사용자의 요청과 응답을 처리하는 컨트롤러(Controller)는 다양한 요청처리를 담당한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특정한 도메인 데이터(예. 고객, 주문)에 대한 데이터 CRUD(생성/조회/갱신/삭제) 또는 비지니스 로직이 있을텐데,&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CRUD는 기본적으로 작성된다.&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;매번 똑같은 패턴의 CRUD는 크게 변경될 일이 없기 때문에 보일러플레이트성 코드&lt;/b&gt;라고 할 수 있다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style2&quot;&gt;그렇다면, &lt;u&gt;반복적인 CRUD 코드를 확 줄일 방법&lt;/u&gt;은 없을까?&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;제네릭과 매핑정보를 이용한 작성전략&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;제네릭 타입을 이용하여 추상클래스를 만들면 다양한 방면에서 재사용이 가능해진다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;컨트롤러 이외에 반복적인 패턴을 이용하는 부분에도 활용할 수 있으며,&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;프로젝트의 전체적인 코드량이 줄어들고, 기능개발 혹은 유지보수 시 일관된 코딩 패턴을 유지할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1680586719620&quot; class=&quot;java&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;package com.example.etoho.controller;
 
import java.util.ArrayList;
import java.util.List;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PatchMapping;
import org.springframework.web.bind.annotation.PostMapping;
 
public abstract class CrudController&amp;lt;D,P,S&amp;gt; {
    S service;
    
    @PostMapping
    @ResponseStatus(HttpStatus.CREATED)
    public int create(D dto) {
        LOG.debug(&quot;DTO 객체에 대한 DAO 삽입로직&quot;);
        return 0;
    }
    
    @PatchMapping(&quot;{id}&quot;)
    public int update(
    		@PathVariable P primayKey,
            D dto
    ) {
        LOG.debug(&quot;id 값rhk DTO 객체를 이용하여 DAO 수정 로직&quot;);
        return 0;
    }
    
    @GetMapping
    public List&amp;lt;D&amp;gt; findAll(){
        System.out.println(&quot;DAO에서 DTO 타입의 객체 리스트를 가져오는 로직&quot;);
        List&amp;lt;D&amp;gt; dList = new ArrayList&amp;lt;&amp;gt;();
        return dList;
    }
    
    @GetMapping(&quot;{id}&quot;)
    public D findByID(@PathVariable P primaryKey) {
        LOG.debug(&quot;id 값을 이용하여 DTO 객체를 가져오는 DAO 로직&quot;);
        D d = (D) new Object();
        return d;
    }
    
    @DeleteMapping(&quot;{id}&quot;)
    public int delete(@PathVariable P primaryKey) {
        LOG.debug(&quot;id 값을 이용하여 해당 DTO 객체를 삭제하는 DAO 로직&quot;);
        return 0;
    }
}​&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-ke-size=&quot;size23&quot;&gt;출처&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;in My Company, EHOTO, 2023-04-04&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Last Updated. 2022. 04. 04.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Spring</category>
      <category>abstract</category>
      <category>boilerplate</category>
      <category>boot</category>
      <category>CODE</category>
      <category>Controller</category>
      <category>CRUD</category>
      <category>extend</category>
      <category>Generic</category>
      <category>Refactoring</category>
      <category>Spring</category>
      <author>배부른코딩로그</author>
      <guid isPermaLink="true">https://codify.tistory.com/173</guid>
      <comments>https://codify.tistory.com/173#entry173comment</comments>
      <pubDate>Tue, 4 Apr 2023 17:43:32 +0900</pubDate>
    </item>
    <item>
      <title>[TIL] JSON 데이터를 다양하게 다뤄보자  </title>
      <link>https://codify.tistory.com/172</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  JSON 데이터를 다양하게 활용할 수 있는 유용한 사이트나 방법을 기록해보자!&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;JSON 데이터를 원하는 형태로 가공하여 다룰 수 있다.&lt;/li&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, '돋움', sans-serif;&quot;&gt;유용한 사이트나 방법을 기록하는 공간으로 활용한다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Camel Case to Snake Case 변환&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생각보다 많이 사용해서 놀란 Key Name 변환이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;보통 DB의 경우 Snake 형식인 경우가 많을테고, JSON은 Camel 형식인 경우가 많긴하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럴 때, 간혹 사용하는데, 굳이 쓸 필요는 없다&lt;/p&gt;
&lt;pre id=&quot;code_1680166163094&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
	&quot;userName&quot;: &quot;WOONG&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1680166173398&quot; class=&quot;html xml&quot; data-ke-language=&quot;html&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
	&quot;user_name&quot;: &quot;WOONG&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[링크]&lt;/b&gt;:&lt;u&gt; &lt;a href=&quot;https://www.better-converter.com/JSON-Modifiers/Json-Snake-Case-Converter&quot;&gt;Snake Case Json Property Names Online Converter&lt;/a&gt;&lt;/u&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;h3 data-ke-size=&quot;size23&quot;&gt;JSON to SQL 변환&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;JSON 샘플 데이터가 있다면, DB에 테스트 데이터로 활용할 때, 유용하게 사용할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;`&lt;b&gt;Option 3 - paste into Text Box below`&lt;/b&gt;에 JSON 데이터를 넣으면, 파싱하여 자동으로 CREATE TABLE을 생성한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;`&lt;span style=&quot;background-color: #ffffff; color: #333333; text-align: start;&quot;&gt;IF NOT EXISTS`, `AUTO_INCREASE` 등 필요한 구문들을 선택을 통해 추가/삭제도 가능하다.&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: #333333; text-align: start;&quot;&gt;&lt;b&gt;[링크]&lt;/b&gt;:&lt;u&gt;&lt;span&gt; &lt;a href=&quot;https://www.convertjson.com/json-to-sql.htm&quot;&gt;JSON To SQL Converter&lt;/a&gt;&lt;/span&gt;&lt;/u&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;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Last Updated. 2022. 03. 30.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>TIL(Today I Learned)</category>
      <category>Collection</category>
      <category>Convert</category>
      <category>data</category>
      <category>Example</category>
      <category>JSON</category>
      <category>list</category>
      <category>map</category>
      <category>object</category>
      <category>SQL</category>
      <category>변환</category>
      <author>배부른코딩로그</author>
      <guid isPermaLink="true">https://codify.tistory.com/172</guid>
      <comments>https://codify.tistory.com/172#entry172comment</comments>
      <pubDate>Thu, 30 Mar 2023 17:54:50 +0900</pubDate>
    </item>
    <item>
      <title>[Notepad++] 정규식으로 문자열 줄이기</title>
      <link>https://codify.tistory.com/171</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt; Notepad++ 라이트한 편집기이면서 기능도 강력하기 때문에 자주 사용하게 된다 : )&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;Notepad++를 잘 활용할 수 있다.&lt;/li&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;Notepad++에서 효율적으로 문자열을 줄일 수 있다.&lt;/li&gt;
&lt;/ul&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;대부분 Visual Studio Code나 Excel로 수정을 하곤 했는데, 조금 빠르게 변경하고 싶어서 발견한 꿀팁이다.&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;필자는 평소에 Notepad++를 활용했었는데, 정규식 변환이 되는 에디터라면 모두 편하게 사용이 가능하다.&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;blockquote data-ke-style=&quot;style2&quot;&gt;DB에서 날짜 컬럼 길이가 14인데, 실수로 길이 15짜리 샘플 데이터를 만들었다!!&lt;br /&gt;이 문자열만 빠르게 고칠 수 없을까??&lt;/blockquote&gt;
&lt;pre id=&quot;code_1680073304269&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT INTO CUST
		(cust_id,cust_name,regist_user_id,regist_datetime,modify_user_id,modify_datetime) 
VALUES 
		('ADMIN1','Dana Morin','pharetra','202212152138030','pharetra','202302111010120');
		
INSERT INTO CUST
		(cust_id,cust_name,regist_user_id,regist_datetime,modify_user_id,modify_datetime) 
VALUES 
		('ADMIN2','Carla Delacruz','nonummy','202003191135040','nonummy','202301151012390');&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;Notepad++ 통해 다음과 같이 해결했다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;찾을내용: &lt;u&gt;([0-9]{14})[0-9]{1}&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;바꿀 내용: &lt;/span&gt;&lt;u&gt;&lt;span style=&quot;letter-spacing: 0px;&quot;&gt;\1&lt;/span&gt;&lt;/u&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;364&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bv2dup/btr6PBsbqPl/pOfuPpXQvQybLi7U7IKA10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bv2dup/btr6PBsbqPl/pOfuPpXQvQybLi7U7IKA10/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bv2dup/btr6PBsbqPl/pOfuPpXQvQybLi7U7IKA10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbv2dup%2Fbtr6PBsbqPl%2FpOfuPpXQvQybLi7U7IKA10%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;582&quot; height=&quot;364&quot; data-origin-width=&quot;582&quot; data-origin-height=&quot;364&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결과:&lt;/p&gt;
&lt;pre id=&quot;code_1680073350446&quot; class=&quot;sql&quot; data-ke-language=&quot;sql&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;INSERT INTO CUST
		(cust_id,cust_name,regist_user_id,regist_datetime,modify_user_id,modify_datetime) 
VALUES 
		('ADMIN1','Dana Morin','pharetra','20221215213803','pharetra','20230211101012');
		
INSERT INTO CUST
		(cust_id,cust_name,regist_user_id,regist_datetime,modify_user_id,modify_datetime) 
VALUES 
		('ADMIN2','Carla Delacruz','nonummy','20200319113504','nonummy','20230115101239');&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;Notepad++의 경우&lt;/b&gt;, &lt;u&gt;match된 문자열을 역슬래쉬(\) 다음 인덱스 번호를 통해 재사용&lt;/u&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;정규식을 잘 활용하면 나중에 더 복잡한 것도 쉽게 변경할 수 있을 것이라고 생각한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나만의 기억 저장용 기록일 듯 하다 ㅎㅎ...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;출처&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://www.technical-recipes.com/2020/using-regex-to-find-and-replace-text-in-notepad/&quot;&gt;Using Regex to find and replace text in Notepad++&lt;/a&gt;, Andy, 2020-06-30&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Last Updated. 2022. 03. 29.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>IDLE</category>
      <category>Notepad++</category>
      <category>Regex</category>
      <category>Replace</category>
      <category>string</category>
      <category>substring</category>
      <category>문자열</category>
      <category>정규식</category>
      <category>줄이기</category>
      <author>배부른코딩로그</author>
      <guid isPermaLink="true">https://codify.tistory.com/171</guid>
      <comments>https://codify.tistory.com/171#entry171comment</comments>
      <pubDate>Wed, 29 Mar 2023 17:14:22 +0900</pubDate>
    </item>
    <item>
      <title>[Java] 코드 실행시간 측정</title>
      <link>https://codify.tistory.com/170</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  1초 이상 기다려주는 고객은 거의 없다. 고객을 사로잡는 서비스는 대부분 빠른 서비스를 제공할 것이다!&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;특정 기능에 대한 실행 시간을 측정할 수 있다.&lt;/li&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;&quot;&gt;Java 기반의 프레임워크를 사용하면서 수행 시간 테스트 함에 있어서 도입할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p 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;Java에서 코드 실행 시간을 측정할 때 사용할 수 있는 방법은 다음과 같다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc; background-color: #ffffff; color: #242729; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;System.currentTimeMillis() : 가장 간단한 실행 시간 측정 방법&lt;/li&gt;
&lt;li&gt;System.nanoTime() : 정밀하게 실행 시간을 측정하는 방법&lt;/li&gt;
&lt;li&gt;Instant.now() : Java8에서 도입된 클래스로 실행 시간 측정&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;1) &lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;System.currentTimeMillis()&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;color: #1769e0;&quot; href=&quot;https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#currentTimeMillis--&quot;&gt;currentTimeMillis()&lt;/a&gt;는 UTC 시간을 밀리초(ms) 단위로 리턴한다. 다음과 같이 코드 실행 시간을 측정할 수 있다.&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size16&quot;&gt;(※ UTC는 1970년 1월 1일을 기준으로 현재의 시간을 측정한 값)&lt;/p&gt;
&lt;pre id=&quot;code_1679463355986&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class PerformanceTime {
    public static void main(String[] args) {
        long startTime = System.currentTimeMillis();
        
        for (long i = 0; i &amp;lt; 1000000000; i++) {
            long pow = i * i;
        }
        
        long finishTime = System.currentTimeMillis();
        
        long elapsedTime = finishTime - startTime;
        
        System.out.println(&quot;elapsedTime(ms) : &quot; + elapsedTime); // 1s = 1,000ms
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;결과:&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679463485911&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;elapsedTime(ms) : 122&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;2) &lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;System.nanoTime()&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a style=&quot;background-color: #ffffff; color: #1769e0; text-align: left;&quot; href=&quot;https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#nanoTime--&quot;&gt;System.nanoTime()&lt;/a&gt;&lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;는 시스템(JVM) 시간을 나노초(ns) 단위로 리턴한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;currentTimeMillis()&lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;보다 더 정밀한 측정이 필요한 경우&lt;span&gt; &lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;사용한다. 필자는 99% nanoTime()을 사용한다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679463743546&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class PerformanceTime {

    public static void main(String[] args) {
        long startTime = System.nanoTime();
        
        for (long i = 0; i &amp;lt; 1000000000; i++) {
            long a = i * i;
        }
        
        long finishTime = System.nanoTime();
        
        long elapsedTime = finishTime - startTime;
        
        System.out.println(&quot;elapsedTime(ns) : &quot; + elapsedTime); // 1s = 1000,000,000ns
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size16&quot;&gt;(※ &lt;b&gt;셀프Q&amp;amp;A&lt;/b&gt;&amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;u&gt;1s = 1000,000&lt;span style=&quot;background-color: #ffffff; color: #202124; text-align: left;&quot;&gt;&amp;mu;s &quot;1초는 1000,000마이크로초와 같다&quot;&lt;/span&gt;&lt;/u&gt;)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;결과:&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679463917887&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;elapsedTime(ns) : 203226148&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;3) &lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;Instant.now()&lt;/span&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Java8 버전 이후부터 사용할 수 있는 API이다. 사용법이 다음과 같이 아주 편하고 직관적이다.&lt;/p&gt;
&lt;pre id=&quot;code_1679464073281&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;public class EasyPerformanceTime {

    public static void main(String[] args) {
        Instant start = Instant.now();
        
        for (long i = 0; i &amp;lt; 1000000000; i++) {
            long a = i * i;
        }
        
        Instant finish = Instant.now();
        
        long elapsedTime = Duration.between(start, finish).toMillis();
        
        System.out.println(&quot;elapsedTime(ms) : &quot; + elapsedTime);
    }
    
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;결과:&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679464100681&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;elapsedTime(ms) : 282&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;번외&lt;/h3&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;StopWatch (Apache Commons Lang API)&lt;/span&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;StopWatch는 Apache에서 제공하는 클래스로 의존성을 추가해야 한다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;다음과 같이 코드 실행 시간을 측정할 수 있다.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679464158921&quot; class=&quot;html xml&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;org.apache.commons&amp;lt;/groupId&amp;gt;
    &amp;lt;artifactId&amp;gt;commons-lang3&amp;lt;/artifactId&amp;gt;
    &amp;lt;version&amp;gt;3.12.0&amp;lt;/version&amp;gt;
&amp;lt;/dependency&amp;gt;&lt;/code&gt;&lt;/pre&gt;
&lt;pre id=&quot;code_1679464215648&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;import org.apache.commons.lang3.time.StopWatch;

public class EasyPerformanceTime {

    public static void main(String[] args) {
        StopWatch stopWatch = new StopWatch();
        
        stopWatch.start();
        
        for (long i = 0; i &amp;lt; 1000000000; i++) {
            long a = i * i;
        }
        
        stopWatch.stop();
        
        System.out.println(&quot;elapsedTime(ns) : &quot; + stopWatch.getNanoTime());
    }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;background-color: #ffffff; color: #242729; text-align: left;&quot;&gt;결과:&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1679464305904&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;266362481&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;출처&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&quot;&lt;a href=&quot;https://madplay.github.io/post/measure-elapsed-time-in-java&quot;&gt;자바에서 코드 실행 시간을 측정하는 방법&lt;/a&gt;&quot;, Kimtaeng, 2020-09-19&lt;/li&gt;
&lt;li&gt;&quot;&lt;a style=&quot;background-color: #f1f1f1; color: #444444; text-align: center;&quot; href=&quot;https://brocess.tistory.com/149&quot;&gt;자바 nanotime(나노시간)을 second(초)로 변환하기&lt;/a&gt;&quot;, 행복한디벨로퍼, 2018-02-06&lt;/li&gt;
&lt;/ul&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 style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Last Updated. 2022. 03. 22.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Java</category>
      <category>CODE</category>
      <category>Java</category>
      <category>Print</category>
      <category>TIME</category>
      <category>수행</category>
      <category>시간</category>
      <category>자바</category>
      <category>측정</category>
      <author>배부른코딩로그</author>
      <guid isPermaLink="true">https://codify.tistory.com/170</guid>
      <comments>https://codify.tistory.com/170#entry170comment</comments>
      <pubDate>Wed, 22 Mar 2023 17:56:09 +0900</pubDate>
    </item>
    <item>
      <title>[Linux] PID(프로세스ID)만으로 실행 경로 찾기</title>
      <link>https://codify.tistory.com/169</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  언제 어디서 실행된 것인지 알 수 없는 좀비 프로세스를 안전하게 종료해보자!&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;PID를 통해 실행된 경로를 찾아낼 수 있다.&lt;/li&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, '돋움', sans-serif;&quot;&gt;나중에도 잘 활용하기 위해, 메모처럼 잘 정리할 수 있다.&lt;/span&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, '돋움', sans-serif;&quot;&gt;WebLogic에서 Tomcat으로 WAS를 변경하는 나름 거대한 작업을 진행하면서 발생한 일이다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, '돋움', sans-serif;&quot;&gt;평소에는 수행되는지도 몰랐던 프로세스가 WAS를 변경하고 나니, 서버 CPU 점유율을 엄청나게 잡아먹게 되었다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, '돋움', sans-serif;&quot;&gt;CPU 자원이 100%이라면, 2개의 프로세스가 50% 이상을 잡아먹는 현상이 발생했다.&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;Google에서 열심히 서칭하다가 발견한 명령어들이다.&lt;/p&gt;
&lt;pre id=&quot;code_1678264970457&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ll /proc/&amp;lt;PID&amp;gt;/exe
lsof -p &amp;lt;PID&amp;gt; | grep cwd
pwdx &amp;lt;PID&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;span style=&quot;font-family: AppleSDGothicNeo-Regular, 'Malgun Gothic', '맑은 고딕', dotum, '돋움', sans-serif;&quot;&gt;필자의 서버에서 정확한 경로를 알려주는 명령어는 `&lt;b&gt;pwdx &amp;lt;PID&amp;gt;&lt;/b&gt;` 였다.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 프로세스가 실행된 위치를 알려주는데, 출력된 결과를 보자마자 속으로 환호성을 질렀다.&lt;/p&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;figure contenteditable=&quot;false&quot; data-ke-type=&quot;emoticon&quot; data-ke-align=&quot;alignCenter&quot; data-emoticon-type=&quot;friends1&quot; data-emoticon-name=&quot;019&quot; data-emoticon-isanimation=&quot;false&quot; data-emoticon-src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/019.gif&quot;&gt;&lt;img src=&quot;https://t1.daumcdn.net/keditor/emoticon/friends1/large/019.gif&quot; width=&quot;150&quot; /&gt;&lt;/figure&gt;
&lt;p style=&quot;text-align: center;&quot; data-ke-size=&quot;size16&quot;&gt;'홀리 크뤱~~~ 오늘 야근 취소인가!!!'&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;필자의 케이스의 경우, WebLogic shutdown 시 Python 코드가 실행되면서 Health check를 하는 것으로 보였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;WebLogic 전부를 내려버렸기 때문에 Python 코드가 정상적으로 수행 완료되지 못하고 좀비 프로세스로 남아버린 것으로 확인했다.&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;혹시나, 문제가 되는 프로세스의 PID를 아직 찾지 못했다면, 다음 명령어들을 통해 확인해보자.&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) &lt;u&gt;CPU 과점유 프로세스&lt;/u&gt;일 경우,&lt;/p&gt;
&lt;pre id=&quot;code_1678265216169&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;top&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) &lt;u&gt;특정 프로세스 이름&lt;/u&gt;을 갖고 있는 경우,&lt;/p&gt;
&lt;pre id=&quot;code_1678265276982&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ps -ef | grep &amp;lt;PNAME&amp;gt;
/usr/ucb/ps -auxww | grep &amp;lt;PNAME&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;간단한 경우, 위 명령어를 통해 PID 도출이 가능할 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 외의 상황을 겪게 된다면, 추가로 정리해야 겠다 : )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;출처&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://stackoverflow.com/questions/606041/how-do-i-get-the-path-of-a-process-in-unix-linux&quot;&gt;How do I get the path of a process in Unix / Linux?&lt;/a&gt;, Stack Overflow, asked Lsalamon&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://man7.org/linux/man-pages/man1/pwdx.1.html&quot;&gt;pwdx&lt;/a&gt;, man7 Documentation(Linux manual page), 2020-06-04&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://www.ibm.com/docs/ko/i/7.3?topic=directories-pwdx&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;pwdx&lt;/a&gt;, IBM Docum&lt;span style=&quot;color: #333333;&quot;&gt;entation, &lt;span style=&quot;background-color: #ffffff;&quot;&gt;2021-04-14&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;회사 업무 속 알게된 꿀팁, 배부른코딩로그, 2023-03-08&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Last Updated. 2023. 03. 09.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>Server/Linux</category>
      <category>Linux</category>
      <category>Mac</category>
      <category>PATH</category>
      <category>PID</category>
      <category>pwdx</category>
      <category>script</category>
      <category>Server</category>
      <category>Shell</category>
      <category>Unix</category>
      <category>서버</category>
      <author>배부른코딩로그</author>
      <guid isPermaLink="true">https://codify.tistory.com/169</guid>
      <comments>https://codify.tistory.com/169#entry169comment</comments>
      <pubDate>Thu, 9 Mar 2023 10:55:25 +0900</pubDate>
    </item>
    <item>
      <title>[Vue] Cannot find module '...' or its corresponding type declarations</title>
      <link>https://codify.tistory.com/168</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;  `&lt;u&gt;Cannot find module '...' or its corresponding type declarations.&lt;/u&gt;` 오류를 해결해보자!&lt;/blockquote&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;목표&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;위 오류에 대한 해결방법을 정리할 수 있다.&lt;/li&gt;
&lt;li data-ke-style=&quot;style2&quot;&gt;동일한 오류가 발생했을 때, 스스로 해결할 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue Quick Starter를 통해 프로젝트를 생성했음에도&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;'&lt;u&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;Cannot find module '...' or its corresponding type declarations.&lt;/span&gt;&lt;/u&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;h3 data-ke-size=&quot;size23&quot;&gt;해결&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;/src&lt;/b&gt; 폴더 안에 &lt;u&gt;shims-vue.d.ts&lt;/u&gt;&lt;span style=&quot;background-color: #ffffff; color: #34343c;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일을 생성 후, 해당 파일에&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;.vue&lt;span style=&quot;background-color: #ffffff; color: #34343c;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;파일에 대한 타입을 정의해야 한다.&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #34343c;&quot;&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #ffffff; color: #34343c;&quot;&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Vue 3&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;import 구문에 *.vue를 사용하면 '*.vue'라고 기입하고, 컴포넌트 명으로 import를 한다면 '*'로만 작성하자.&lt;/p&gt;
&lt;pre id=&quot;code_1675746222255&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;declare module '*' {
  import type { DefineComponent } from 'vue'
  const component: DefineComponent&amp;lt;{}, {}, any&amp;gt;
  export default component
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;Vue 2&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Vue 2의 경우 아래의 코드로 대체 가능하다.&lt;/p&gt;
&lt;pre id=&quot;code_1675746268718&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;declare module &quot;*.vue&quot; {
  import Vue from 'vue'
  export default Vue
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;출처&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: circle;&quot; data-ke-list-type=&quot;circle&quot;&gt;
&lt;li&gt;&lt;a href=&quot;https://vuejs.org/guide/quick-start.htm&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;https://vuejs.org/guide/quick-start.htm&lt;/a&gt;, Vue.js Docs&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://medium.com/@suminc7/vue-%ED%99%95%EC%9E%A5%EC%9E%90-%EC%97%86%EB%8A%94-import-7c7010d7ab06&quot;&gt;vue 확장자 없는 import&lt;/a&gt;, sumin chae, 2017-03-27&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;text-align: right;&quot; data-ke-size=&quot;size14&quot;&gt;&lt;span style=&quot;color: #9d9d9d;&quot;&gt;Last Updated. 2023. 02. 07.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>프론트엔드 프레임워크/Vue</category>
      <category>corresponding</category>
      <category>docs</category>
      <category>error</category>
      <category>frontend</category>
      <category>JavaScript</category>
      <category>JS</category>
      <category>Module</category>
      <category>Trouble</category>
      <category>typescripe</category>
      <category>Vue</category>
      <author>배부른코딩로그</author>
      <guid isPermaLink="true">https://codify.tistory.com/168</guid>
      <comments>https://codify.tistory.com/168#entry168comment</comments>
      <pubDate>Tue, 7 Feb 2023 17:13:11 +0900</pubDate>
    </item>
  </channel>
</rss>