<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>개발굼</title>
    <link>https://devgoom.tistory.com/</link>
    <description>개인적 기록을  위한 블로그입니다.</description>
    <language>ko</language>
    <pubDate>Wed, 10 Jun 2026 01:19:46 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>devgoom</managingEditor>
    <item>
      <title>[Windows] 특정 폴더 파일 다른 폴더에 복사</title>
      <link>https://devgoom.tistory.com/34</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;500개 정도 되는 파일을 A -&amp;gt; B로 복사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;A 폴더 안에는 여러개의 하위 폴더가 있고, 폴더를 제외한 파일만 B로 복사하려면..&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;robocopy, xcopy 다 해봤지만.. 옵션을 잘못 줘서인지 잘 되지 않았다.. (디렉토리만 복사, 복사는 돼도 파일 구조도 그대로 복사.. 등등)&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;조건: PowerShell 이 아닌 windows 기본 명령 프롬프트&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;Windows+R -&amp;gt; cmd&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;명령창에서 아래 명령어 실행 (이동은 do copy 대신 do move )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1731477192777&quot; class=&quot;r&quot; data-ke-language=&quot;r&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;for /R &quot;대상 폴더 경로&quot; %f in (*) do copy &quot;%f&quot; &quot;복사할 폴더 경로&quot;


ex)
for /R &quot;C:\Users\user\Documents\mysql&quot; %f in (*) do copy &quot;%f&quot; &quot;C:\Users\user\Documents\mapper&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;</description>
      <category>잡지식</category>
      <author>devgoom</author>
      <guid isPermaLink="true">https://devgoom.tistory.com/34</guid>
      <comments>https://devgoom.tistory.com/34#entry34comment</comments>
      <pubDate>Wed, 13 Nov 2024 14:54:27 +0900</pubDate>
    </item>
    <item>
      <title>Android Target API Level 34로 변경 후 빌드 안됨.</title>
      <link>https://devgoom.tistory.com/33</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1954&quot; data-origin-height=&quot;514&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bK7gvy/btsKrdgCLBm/BU79m24hW9SaICwa7Damo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bK7gvy/btsKrdgCLBm/BU79m24hW9SaICwa7Damo1/img.png&quot; data-alt=&quot;강제 업데이트..&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bK7gvy/btsKrdgCLBm/BU79m24hW9SaICwa7Damo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbK7gvy%2FbtsKrdgCLBm%2FBU79m24hW9SaICwa7Damo1%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;1954&quot; height=&quot;514&quot; data-origin-width=&quot;1954&quot; data-origin-height=&quot;514&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;강제 업데이트..&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또 찾아온 강제 업데이트..&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;앱 스토어에 업데이트 하기 위해 target API Level을 34이상으로 조정&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;build.gradle(Module:app)에서 compileSdkVersion, targetSdkVersion을 기존 33에서 34로 변경 후 빌드&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;pre id=&quot;code_1730365194869&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;Execution failed for task ':app:processDebugResources'.
&amp;gt; A failure occurred while executing com.android.build.gradle.internal.res.LinkApplicationAndroidResourcesTask$TaskAction
   &amp;gt; AAPT2 aapt2-4.2.2-7147631-osx Daemon #0: Unexpected error during link, attempting to stop daemon.
     This should not happen under normal circumstances, please file an issue if it does.&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;검색 , gpt 등에서 확인해보니 gradle 버전을 최선으로 변경하고, 여러 설정 변경 후 &quot;File &amp;gt; Invalidate Caches / Restart.&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;성공한 my case 올려봄. (IDE: Android Studio Koala | 2024.1.1)&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. Settings &amp;gt; Build,Execution,Deployment &amp;gt; Build Tools &amp;gt; Gradle 메뉴&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Gradle user home 에 gradle 7.6.4 버전 설정해줌.(로컬 특정 위치에 저장해야함 )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Gradle JDK 에 Java 11 경로 설정해줌.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gradle 버전 다운로드 : &lt;a href=&quot;https://gradle.org/releases/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://gradle.org/releases/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1730365427504&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;Gradle | Releases&quot; data-og-description=&quot;Find binaries and reference documentation for current and past versions of Gradle.&quot; data-og-host=&quot;gradle.org&quot; data-og-source-url=&quot;https://gradle.org/releases/&quot; data-og-url=&quot;https://gradle.org/releases/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dDsvNq/hyXsZOP1IE/qqfHOhEFw73klu7MpGSuZK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://gradle.org/releases/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://gradle.org/releases/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dDsvNq/hyXsZOP1IE/qqfHOhEFw73klu7MpGSuZK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Gradle | Releases&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Find binaries and reference documentation for current and past versions of Gradle.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;gradle.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;438&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bA6WA6/btsKqXkP82a/mN6Wn9ad6nXg8Vsyg94rD0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bA6WA6/btsKqXkP82a/mN6Wn9ad6nXg8Vsyg94rD0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bA6WA6/btsKqXkP82a/mN6Wn9ad6nXg8Vsyg94rD0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbA6WA6%2FbtsKqXkP82a%2FmN6Wn9ad6nXg8Vsyg94rD0%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;980&quot; height=&quot;438&quot; data-origin-width=&quot;980&quot; data-origin-height=&quot;438&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;p data-ke-size=&quot;size16&quot;&gt;2.gradle-wrapper.properties 에 distributionUrl 에 gradle 7.5 설정&lt;/p&gt;
&lt;pre id=&quot;code_1730365757242&quot; class=&quot;shell&quot; data-ke-language=&quot;shell&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-7.5-bin.zip
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists&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. Tools &amp;gt; AGP(Android Gradle Plugin) Upgrade Assistant.. 를 통해 업데이트&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- build.gradle(project)에서 gradle 관련 classpath 잡아주면 업데이트가 되는지 알았으나, 완벽하게 되지 않는 모양이다.&lt;/p&gt;
&lt;pre id=&quot;code_1730366227613&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;buildscript {
    repositories {
        google()
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:7.4.2'
        
        ...&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;Run selected steps 를 클릭하여 실행&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/SKVWt/btsKrSiKFoh/0RMzN4OqQKzbUkr33mzAck/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/SKVWt/btsKrSiKFoh/0RMzN4OqQKzbUkr33mzAck/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/SKVWt/btsKrSiKFoh/0RMzN4OqQKzbUkr33mzAck/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FSKVWt%2FbtsKrSiKFoh%2F0RMzN4OqQKzbUkr33mzAck%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;907&quot; height=&quot;294&quot; data-origin-width=&quot;907&quot; data-origin-height=&quot;294&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;정상적으로 빌드 성공..&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;build tool에 대한 이해 부족으로 매번 삽질하네.. 공부 좀 해야겠다!&lt;/p&gt;</description>
      <category>android</category>
      <author>devgoom</author>
      <guid isPermaLink="true">https://devgoom.tistory.com/33</guid>
      <comments>https://devgoom.tistory.com/33#entry33comment</comments>
      <pubDate>Thu, 31 Oct 2024 18:19:32 +0900</pubDate>
    </item>
    <item>
      <title>[Xcode] CocoaPods 재설치</title>
      <link>https://devgoom.tistory.com/32</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;xcode 빌드 시 Build Failed 발생&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;확인 결과 , Pods 폴더에 설치된 외부 라이브러리에서 오류 발생&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;pod 재설치 GoGo&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.XCODE 프로그램 종료&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2. &lt;span style=&quot;background-color: #e3e6e8; color: #0c0d0e; text-align: left;&quot;&gt;~/Library/Developer/Xcode/DerivedData 에서 프로젝트 임시 파일들 삭제&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-10-31 오후 1.39.47.png&quot; data-origin-width=&quot;1814&quot; data-origin-height=&quot;1148&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cakwmI/btsKqWSVL6a/YTpirD5x017vxEIufFYMkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cakwmI/btsKqWSVL6a/YTpirD5x017vxEIufFYMkK/img.png&quot; data-alt=&quot;숨김 파일 보이기 단축키는 command+shift+. (dot)&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cakwmI/btsKqWSVL6a/YTpirD5x017vxEIufFYMkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcakwmI%2FbtsKqWSVL6a%2FYTpirD5x017vxEIufFYMkK%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;699&quot; height=&quot;442&quot; data-filename=&quot;스크린샷 2024-10-31 오후 1.39.47.png&quot; data-origin-width=&quot;1814&quot; data-origin-height=&quot;1148&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;숨김 파일 보이기 단축키는 command+shift+. (dot)&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3.&lt;span&gt;&amp;nbsp;&lt;/span&gt;ProjectName.xcworkspace 파일 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 프로젝트 경로에서 projectName.xcworkspace 파일 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;4.Podfile.lock 파일 과 Pods 폴더 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5. 해당 경로에서 터미널 창 열고 pod install 실행&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;pre id=&quot;code_1730350071166&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;[!] FirebaseAnalytics requires CocoaPods version &amp;gt;= 1.12.0, which is not satisfied by your current version, 1.10.1.&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;CocoaPods 업데이트 실시&lt;/p&gt;
&lt;pre id=&quot;code_1730350136101&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo gem install cocoapods

&amp;lt;!-- 업데이트 후 버전 확인 --&amp;gt;
pod --version&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;cocoapods 업데이트 시 아래와 같은 오류 발생되면..&lt;/p&gt;
&lt;pre id=&quot;code_1730350197615&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;xcodeproj's executable &quot;xcodeproj&quot; conflicts with /usr/local/bin/xcodeproj
Overwrite the executable? [yN]  ERROR:  Error installing cocoapods:
	&quot;xcodeproj&quot; from xcodeproj conflicts with /usr/local/bin/xcodeproj&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;Gem 설치 경로를 강제로 덮어쓰기&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;xcodeproj가 설치될 때 충돌하는 파일을 덮어쓰도록 허용할 수 있습니다. Overwrite the executable? [yN] 메시지가 나타날 때 y를 입력하여 덮어쓰기를 허용하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;만약 여전히 오류가 발생한다면, 설치할 때 --force 플래그를 추가해 강제로 설치할 수 있습니다:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1730350280394&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo gem install cocoapods --force&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Gem 업데이트 시 --user-install 사용&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시스템 전체에 설치하지 않고 사용자 디렉터리에 설치할 수 있습니다:&lt;/p&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;div&gt;
&lt;pre id=&quot;code_1730350293373&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gem install cocoapods --user-install&lt;/code&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&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;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>iOS</category>
      <author>devgoom</author>
      <guid isPermaLink="true">https://devgoom.tistory.com/32</guid>
      <comments>https://devgoom.tistory.com/32#entry32comment</comments>
      <pubDate>Thu, 31 Oct 2024 13:52:12 +0900</pubDate>
    </item>
    <item>
      <title>[FCM] OAuth 2.0 Playground로 message 보내기</title>
      <link>https://devgoom.tistory.com/31</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://developers.google.com/oauthplayground/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://developers.google.com/oauthplayground/&lt;/a&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;STEP1. Select &amp;amp; authorize APIs&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;gt; 1. Firebase Cloud Messaging API v1&amp;nbsp; - &lt;a href=&quot;https://www.googleapis.com/auth/cloud-platform&quot;&gt;https://www.googleapis.com/auth/cloud-platform&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;선택&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;2. 하단 'Authorize APIs' 버튼 클릭 후 계정 선택&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; (단 , firebase console에 해당 프로젝트 등록한 계정을 선택해야함)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;679&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b1l6AQ/btsKrPlqj0o/7JxUk3lvT4VA6tFpkkzSBK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b1l6AQ/btsKrPlqj0o/7JxUk3lvT4VA6tFpkkzSBK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b1l6AQ/btsKrPlqj0o/7JxUk3lvT4VA6tFpkkzSBK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb1l6AQ%2FbtsKrPlqj0o%2F7JxUk3lvT4VA6tFpkkzSBK%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;476&quot; height=&quot;679&quot; data-origin-width=&quot;476&quot; data-origin-height=&quot;679&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;&lt;b&gt;STEP2. Exchange authorization code fo tokens&lt;/b&gt;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;gt; 1. &quot;Exchange authorization code for tokens&quot; 버튼 눌러 접속 계정으로 인증&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp; &amp;nbsp;2. Auto-refresh the token before it expires 체크&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/w0obB/btsKp1t8SoO/2STU9L7YACtu165CBGOaZ1/img.png&quot; width=&quot;464&quot; height=&quot;642&quot; /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;STEP3. Configure request to API&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;1. 발송 테스트일 경우&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 Method : POST 설정,&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Request URI : &lt;a href=&quot;https://fcm.googleapis.com/v1/projects/uniportal-2016/messages:send&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://fcm.googleapis.com/v1/projects/{프로젝트 이름}/messages:send &lt;/a&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;2. Enter request body 클릭 하여 아래 내용 입력&lt;/p&gt;
&lt;pre id=&quot;code_1729218134004&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
   &quot;message&quot;:{
      &quot;token&quot;:&quot;coIUgZJYdESHigmL4qWahT:APA91bHI5Z1FoK6ZjtnN9aipO.....&quot;,
      &quot;notification&quot;:{
        &quot;body&quot;:&quot;This is an FCM notification message!&quot;,
        &quot;title&quot;:&quot;FCM Message&quot;
      }
   }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;380&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lnz1p/btsKpPAMeLx/7EA3ksn4nsxlkPjExVgt50/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lnz1p/btsKpPAMeLx/7EA3ksn4nsxlkPjExVgt50/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lnz1p/btsKpPAMeLx/7EA3ksn4nsxlkPjExVgt50/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Flnz1p%2FbtsKpPAMeLx%2F7EA3ksn4nsxlkPjExVgt50%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;768&quot; height=&quot;380&quot; data-origin-width=&quot;768&quot; data-origin-height=&quot;380&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3. Send the request 버튼 클릭하여 실제 기기에서 푸시 알림 수신되는지 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>android</category>
      <author>devgoom</author>
      <guid isPermaLink="true">https://devgoom.tistory.com/31</guid>
      <comments>https://devgoom.tistory.com/31#entry31comment</comments>
      <pubDate>Fri, 18 Oct 2024 11:22:47 +0900</pubDate>
    </item>
    <item>
      <title>일반 계정에서 tomcat 실행</title>
      <link>https://devgoom.tistory.com/30</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 현재 root 계정에서 실행 중인 tomcat 프로세스를 일반 계정에서 실행되도록 변경&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;- 환경:&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;CentOS Linux&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;/span&gt;&lt;span style=&quot;background-color: #fafafa; color: #333333; text-align: start;&quot;&gt;7 (Core)&lt;/span&gt;&lt;/p&gt;
&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&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;[UNIDB:root:/etc]#cat&amp;nbsp;/etc/os-release &lt;br /&gt;NAME=&quot;CentOS&amp;nbsp;Linux&quot; &lt;br /&gt;VERSION=&quot;7&amp;nbsp;(Core)&quot; &lt;br /&gt;ID=&quot;centos&quot; &lt;br /&gt;ID_LIKE=&quot;rhel&amp;nbsp;fedora&quot; &lt;br /&gt;VERSION_ID=&quot;7&quot; &lt;br /&gt;PRETTY_NAME=&quot;CentOS&amp;nbsp;Linux&amp;nbsp;7&amp;nbsp;(Core)&quot; &lt;br /&gt;ANSI_COLOR=&quot;0;31&quot; &lt;br /&gt;CPE_NAME=&quot;cpe:/o:centos:centos:7&quot; &lt;br /&gt;HOME_URL=&quot;&lt;a href=&quot;https://www.centos.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.centos.org/&lt;/a&gt;&quot; &lt;br /&gt;BUG_REPORT_URL=&quot;&lt;a href=&quot;https://bugs.centos.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bugs.centos.org/&lt;/a&gt;&quot; &lt;br /&gt;&lt;br /&gt;CENTOS_MANTISBT_PROJECT=&quot;CentOS-7&quot; &lt;br /&gt;CENTOS_MANTISBT_PROJECT_VERSION=&quot;7&quot; &lt;br /&gt;REDHAT_SUPPORT_PRODUCT=&quot;centos&quot; &lt;br /&gt;REDHAT_SUPPORT_PRODUCT_VERSION=&quot;7&quot; &lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1. /etc/init.d 에 등록한 서비스에서 수정 유저 변경&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; su - test 추가&lt;/p&gt;
&lt;pre id=&quot;code_1728625077621&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#!/bin/bash
### BEGIN INIT INFO
# Provides:    tomcat
# Required-Start:  $remote_fs $syslog
# Required-Stop:   $remote_fs $syslog
# Default-Start:   2 3 4 5
# Default-Stop:    0 1 6
# Short-Description: auto start Tomcat server
# Description: start web server
### END INIT INFO
# description: tomcat start stop restart
# proccessname: tomcat
# chkconfig: 234 20 80

#export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre
export CATALINA_HOME=/uniapp/app/tomcat8

case $1 in
start)
echo &amp;ldquo;Start tomcat &amp;ldquo;
su - test -c $CATALINA_HOME/bin/startup.sh
;;
stop)
echo &amp;ldquo;shutdown tomcat &amp;ldquo;
su - test -c $CATALINA_HOME/bin/shutdown.sh
;;
restart)
echo &amp;ldquo;restart tomcat &amp;ldquo;
su - test -c $CATALINA_HOME/bin/shutdown.sh
su - test -c $CATALINA_HOME/bin/startup.sh
;;
*)
echo &amp;ldquo;Usage: service tomcat {start|stop|restart}&amp;rdquo;
exit 1
esac
exit 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;2.profile 에 JAVA_HOME 관련 설정 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;=&amp;gt; 동적 라이브러리를 찾는 경로를 지정하는 환경 변수인 LD_LIBRARY_PATH 설정 ( 보통 프로그램이 실행될 때 필요한 공유 라이브러리 (.so 파일)를 찾기 위해 시스템의 기본 경로 외에 추가적인 경로 지정)&lt;/p&gt;
&lt;pre id=&quot;code_1728625413728&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;...
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre
export CATALINA_HOME=/uniapp/app/tomcat8
export PATH=/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:$JAVA_HOME/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/lib/amd64

PATH=$PATH:/data/unidb/mariadb/bin
...&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. 서비스 실행 시 아래 오류 발생&lt;/p&gt;
&lt;pre id=&quot;code_1728625497045&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;심각 [main] org.apache.catalina.core.StandardService.initInternal Failed to initialize connector [Connector[HTTP/1.1-80]]
 org.apache.catalina.LifecycleException: Failed to initialize component [Connector[HTTP/1.1-80]]
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:113)
	at org.apache.catalina.core.StandardService.initInternal(StandardService.java:549)
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
	at org.apache.catalina.core.StandardServer.initInternal(StandardServer.java:875)
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
	at org.apache.catalina.startup.Catalina.load(Catalina.java:621)
	at org.apache.catalina.startup.Catalina.load(Catalina.java:644)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.apache.catalina.startup.Bootstrap.load(Bootstrap.java:311)
	at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:494)
Caused by: org.apache.catalina.LifecycleException: Protocol handler initialization failed
	at org.apache.catalina.connector.Connector.initInternal(Connector.java:1000)
	at org.apache.catalina.util.LifecycleBase.init(LifecycleBase.java:107)
	... 12 more
Caused by: java.net.SocketException: 허가 거부
	at sun.nio.ch.Net.bind0(Native Method)
	at sun.nio.ch.Net.bind(Net.java:461)
	at sun.nio.ch.Net.bind(Net.java:453)
	at sun.nio.ch.ServerSocketChannelImpl.bind(ServerSocketChannelImpl.java:222)
	at sun.nio.ch.ServerSocketAdaptor.bind(ServerSocketAdaptor.java:85)
	at org.apache.tomcat.util.net.NioEndpoint.bind(NioEndpoint.java:210)
	at org.apache.tomcat.util.net.AbstractEndpoint.init(AbstractEndpoint.java:982)
	at org.apache.tomcat.util.net.AbstractJsseEndpoint.init(AbstractJsseEndpoint.java:245)
	at org.apache.coyote.AbstractProtocol.init(AbstractProtocol.java:620)
	at org.apache.coyote.http11.AbstractHttp11Protocol.init(AbstractHttp11Protocol.java:66)
	at org.apache.catalina.connector.Connector.initInternal(Connector.java:997)
	... 13 more&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;gt;&amp;nbsp; 일반 계정이 포트 80을 바인딩하려고 할 때 발생하는 문제입니다. 리눅스에서는 기본적으로 포트 번호가 1024 이하인 포트(예: 80번 포트)는 root 권한이 있는 사용자만 사용할 수 있음.&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;4. setcap 명령어로 특정 바이너리에게 낮은 포트에 바인딩할 수 있는 권한 부여&lt;/p&gt;
&lt;pre id=&quot;code_1728625881374&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo setcap 'cap_net_bind_service=+ep' /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/bin/java

setcap 정상 적용 확인
[UNIDB:root:/etc]#getcap /usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/bin/java
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/bin/java = cap_net_bind_service+ep&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style2&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;5. 실행 시 오류 :&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1728626010570&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo service tomcat start

Using CATALINA_BASE:   /uniapp/app/tomcat8
Using CATALINA_HOME:   /uniapp/app/tomcat8
Using CATALINA_TMPDIR: /uniapp/app/tomcat8/temp
Using JRE_HOME:        /usr/lib/jvm/java-1.8.0ps -openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre
Using CLASSPATH:       /uniapp/app/tomcat8/bin/bootstrap.jar:/uniapp/app/tomcat8/bin/tomcat-juli.jar
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.412.b08-1.el7_9.x86_64/jre/bin/java: error while loading shared libraries: libjli.so: cannot open shared object file: No such file or directory&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;libjli.so 파일을 LD_LIBRARY_PATH 로 이동&lt;/p&gt;</description>
      <category>리눅스</category>
      <author>devgoom</author>
      <guid isPermaLink="true">https://devgoom.tistory.com/30</guid>
      <comments>https://devgoom.tistory.com/30#entry30comment</comments>
      <pubDate>Fri, 11 Oct 2024 14:55:17 +0900</pubDate>
    </item>
    <item>
      <title>[cordova] exitApp 플러그인 추가 안됨</title>
      <link>https://devgoom.tistory.com/29</link>
      <description>&lt;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;cordova 버전 : 9.0.0&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;gradle 버전 : 6.7.1&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;exit app 플러그인 추가 할 때 아래처럼 에러 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1721643186167&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;goomgoom@starnet example_copy % cordova plugin add cordova-plugin-app-exit
Installing &quot;cordova-plugin-app-exit&quot; for android
Failed to install 'cordova-plugin-app-exit': Error: /Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/version: Command failed with exit code 1 Error output:
node:internal/modules/cjs/loader:1215
  throw err;
  ^

Error: Cannot find module 'properties-parser'
Require stack:
- /Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/lib/AndroidProject.js
- /Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/Api.js
- /Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/version
    at Module._resolveFilename (node:internal/modules/cjs/loader:1212:15)
    at Module._load (node:internal/modules/cjs/loader:1038:27)
    at wrapModuleLoad (node:internal/modules/cjs/loader:212:19)
    at Module.require (node:internal/modules/cjs/loader:1297:12)
    at require (node:internal/modules/helpers:123:16)
    at Object.&amp;lt;anonymous&amp;gt; (/Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/lib/AndroidProject.js:22:25)
    at Module._compile (node:internal/modules/cjs/loader:1460:14)
    at Module._extensions..js (node:internal/modules/cjs/loader:1544:10)
    at Module.load (node:internal/modules/cjs/loader:1275:32)
    at Module._load (node:internal/modules/cjs/loader:1091:12) {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    '/Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/lib/AndroidProject.js',
    '/Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/Api.js',
    '/Users/goomgoom/AndroidStudioProjects/example_copy/platforms/android/cordova/version'
  ]
}

Node.js v22.3.0
    at ChildProcess.whenDone (/usr/local/lib/node_modules/cordova/node_modules/cordova-common/src/superspawn.js:135:23)
    at ChildProcess.emit (node:events:520:28)
    at maybeClose (node:internal/child_process:1105:16)
    at Socket.&amp;lt;anonymous&amp;gt; (node:internal/child_process:457:11)
    at Socket.emit (node:events:520:28)
    at Pipe.&amp;lt;anonymous&amp;gt; (node:net:339:12)&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 install properties-parser&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;(&lt;b&gt;properties-parser&amp;nbsp; &lt;/b&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;pre id=&quot;code_1721643393217&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;goomgoom@starnet android % cordova plugin add cordova-plugin-app-exit
Installing &quot;cordova-plugin-app-exit&quot; for android
(node:14085) [DEP0128] DeprecationWarning: Invalid 'main' field in '/Users/goomgoom/AndroidStudioProjects/example_copy/node_modules/objectorarray/package.json' of 'dist/index.js'. Please either fix that or report it to the module author
(Use `node --trace-deprecation ...` to show where the warning was created)
Adding cordova-plugin-app-exit to package.json
goomgoom@starnet android % cordova plugin ls                         
cordova-plugin-app-exit 0.0.1 &quot;ExitApp&quot;
cordova-plugin-whitelist 1.3.4 &quot;Whitelist&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;잘 설치 됨&lt;/p&gt;</description>
      <category>android</category>
      <author>devgoom</author>
      <guid isPermaLink="true">https://devgoom.tistory.com/29</guid>
      <comments>https://devgoom.tistory.com/29#entry29comment</comments>
      <pubDate>Mon, 22 Jul 2024 19:17:48 +0900</pubDate>
    </item>
    <item>
      <title>Index 리빌드 및 통계 업데이트</title>
      <link>https://devgoom.tistory.com/28</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;-- 인덱스 조각화 조회&lt;/p&gt;
&lt;pre id=&quot;code_1721367960220&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;SELECT

            distinct OBJECT_NAME(S.OBJECT_ID) AS 'TableName'

          , I.NAME AS 'IndexName'

          , ROUND(AVG_FRAGMENTATION_IN_PERCENT, 2) AS 'Fragmentation %'

 FROM SYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID(),NULL,NULL,NULL,NULL) AS S

 INNER JOIN SYS.INDEXES AS I

 ON S.OBJECT_ID = I.OBJECT_ID AND S.INDEX_ID = I.INDEX_ID

 WHERE S.DATABASE_ID = DB_ID() 

 AND I.NAME IS NOT NULL -- HEAP은 무시

 AND OBJECTPROPERTY(S.OBJECT_ID, 'IsMsShipped') = 0 -- 시스템 개체 무시

 and ROUND(AVG_FRAGMENTATION_IN_PERCENT, 2) &amp;gt; 10&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: #000000; text-align: left;&quot;&gt;-- 조각화 테이블에 대한 인덱스 리빌드 및 통계 업데이트.&lt;/span&gt;&lt;/p&gt;
&lt;pre id=&quot;code_1721367999025&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;set quoted_identifier  OFF

DECLARE @tablename varchar(255)

DECLARE @tablename_header varchar(255)

declare @sql varchar(1000)

DECLARE tnames_cursor CURSOR FOR SELECT

            distinct OBJECT_NAME(S.OBJECT_ID) AS 'TableName'

--          , I.NAME AS 'IndexName'

--          , ROUND(AVG_FRAGMENTATION_IN_PERCENT, 2) AS 'Fragmentation %'

 FROM SYS.DM_DB_INDEX_PHYSICAL_STATS(DB_ID(),NULL,NULL,NULL,NULL) AS S

 INNER JOIN SYS.INDEXES AS I

 ON S.OBJECT_ID = I.OBJECT_ID AND S.INDEX_ID = I.INDEX_ID

 WHERE S.DATABASE_ID = DB_ID() -- 현재 데이터베이스

 AND I.NAME IS NOT NULL -- HEAP은 무시

 AND OBJECTPROPERTY(S.OBJECT_ID, 'IsMsShipped') = 0 -- 시스템 개체 무시

 and ROUND(AVG_FRAGMENTATION_IN_PERCENT, 2) &amp;gt; 10

OPEN tnames_cursor

FETCH NEXT FROM tnames_cursor INTO @tablename

WHILE (@@fetch_status &amp;lt;&amp;gt; -1)



    BEGIN

     IF (@@fetch_status &amp;lt;&amp;gt; -2)





         BEGIN

        SELECT @tablename_header = &quot;Updating Indexes FOR table &quot; + RTRIM(UPPER(@tablename))

        PRINT @tablename_header

  SET @sql = 'ALTER INDEX ALL ON ' + @tablename + ' REBUILD WITH (PAD_INDEX = ON, FILLFACTOR = 90) '

    EXEC (@sql)

  PRINT (@sql)

     END

     FETCH NEXT FROM tnames_cursor INTO @tablename

END

PRINT &quot; &quot;

PRINT &quot; &quot;

SELECT @tablename_header = &quot;************* NO MORE TABLES&quot; +

 &quot; *************&quot;

PRINT @tablename_header

PRINT &quot; &quot;

PRINT &quot;Indexes have been updated FOR ALL tables.&quot;

DEALLOCATE tnames_cursor

go

 -- 통계 업데이트

 EXEC sp_updatestats @resample='resample';

GO

set quoted_identifier  ON&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;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;인덱스 조각화_결과.png&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;435&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dIfBtm/btsIGsMGFJv/ZYiF6kbo07D4P2RtVT8lR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dIfBtm/btsIGsMGFJv/ZYiF6kbo07D4P2RtVT8lR0/img.png&quot; data-alt=&quot;각 테이블 인덱스 별 업데이트 여부&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dIfBtm/btsIGsMGFJv/ZYiF6kbo07D4P2RtVT8lR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdIfBtm%2FbtsIGsMGFJv%2FZYiF6kbo07D4P2RtVT8lR0%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;1048&quot; height=&quot;435&quot; data-filename=&quot;인덱스 조각화_결과.png&quot; data-origin-width=&quot;1048&quot; data-origin-height=&quot;435&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;각 테이블 인덱스 별 업데이트 여부&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;인덱스 통계 조회.png&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;678&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/qiE8W/btsIG3MgDMf/HwbjP7fYB77zQ0GUkWbpB1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/qiE8W/btsIG3MgDMf/HwbjP7fYB77zQ0GUkWbpB1/img.png&quot; data-alt=&quot;조각화 90이상인 테이블들이 많았으나 리빌드 후 50이하로 떨어졌다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/qiE8W/btsIG3MgDMf/HwbjP7fYB77zQ0GUkWbpB1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FqiE8W%2FbtsIG3MgDMf%2FHwbjP7fYB77zQ0GUkWbpB1%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;570&quot; height=&quot;678&quot; data-filename=&quot;인덱스 통계 조회.png&quot; data-origin-width=&quot;570&quot; data-origin-height=&quot;678&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;조각화 90이상인 테이블들이 많았으나 리빌드 후 50이하로 떨어졌다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>SQL/msSQL</category>
      <author>devgoom</author>
      <guid isPermaLink="true">https://devgoom.tistory.com/28</guid>
      <comments>https://devgoom.tistory.com/28#entry28comment</comments>
      <pubDate>Fri, 19 Jul 2024 14:50:13 +0900</pubDate>
    </item>
    <item>
      <title>Command PhaseScriptExecution failed with a nonzero exit code</title>
      <link>https://devgoom.tistory.com/26</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-04-01 오후 5.10.32.png&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;46&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/drx7te/btsGetBP7GH/UtKlqoLFjhafjWjsl1eso0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/drx7te/btsGetBP7GH/UtKlqoLFjhafjWjsl1eso0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/drx7te/btsGetBP7GH/UtKlqoLFjhafjWjsl1eso0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fdrx7te%2FbtsGetBP7GH%2FUtKlqoLFjhafjWjsl1eso0%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;362&quot; height=&quot;46&quot; data-filename=&quot;스크린샷 2024-04-01 오후 5.10.32.png&quot; data-origin-width=&quot;362&quot; data-origin-height=&quot;46&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;Build 및 Debug 로는 정상 동작하지만,&amp;nbsp; Product &amp;gt; Archieve 실행하면 위 이미지처럼&amp;nbsp;&lt;b&gt; &quot;Command PhaseScriptExecution failed with a nonzero exit code&quot;&amp;nbsp;&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;pod install로 추가한 library 가 잘못된 모양..&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;스크린샷 2024-04-01 오후 5.13.05.png&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;183&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bZXsIU/btsGifaAjTe/kw9LM3IsDOY8X8NZWKfl71/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bZXsIU/btsGifaAjTe/kw9LM3IsDOY8X8NZWKfl71/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bZXsIU/btsGifaAjTe/kw9LM3IsDOY8X8NZWKfl71/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbZXsIU%2FbtsGifaAjTe%2Fkw9LM3IsDOY8X8NZWKfl71%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;1452&quot; height=&quot;183&quot; data-filename=&quot;스크린샷 2024-04-01 오후 5.13.05.png&quot; data-origin-width=&quot;1452&quot; data-origin-height=&quot;183&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;&lt;span&gt;/Users/macos/Library/Developer/Xcode/DerivedData 의 프로젝트 임시 데이터 삭제 후&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;podfile.lock, Pods 폴더, .xcworkspace 파일 삭제 후 pod install 로 재설치 후 해도 같은 증상&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;확인 결과 아래 경로의 Pods-{프로젝트 이름}-frameworks 파일의 코드에서 source=&quot;$(readlink&amp;nbsp; &quot;${source}&quot;)&amp;nbsp; 중간에&amp;nbsp;&amp;nbsp;&lt;b&gt;&quot;-f&quot;&lt;/b&gt; 추가&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1711959571894&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;local destination=&quot;${TARGET_BUILD_DIR}/${FRAMEWORKS_FOLDER_PATH}&quot;

  if [ -L &quot;${source}&quot; ]; then
    echo &quot;Symlinked...&quot;
    source=&quot;$(readlink -f &quot;${source}&quot;)&quot; // &quot;-f&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;정상적으로 archieve 되는 것 확인&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;여기서 -f 옵션은 'readlink'가 심볼릭 링크를 따라가면서 실제 파일이나 디렉토리의 절대 경로를 출력하도록 하는 역할을 함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, '-f' 옵션을 사용하면 스크립트가 가리키는 파일이나 디렉토리의 실제 경로를 찾을 수 있음. 이는 특히 상대 경로를 포함하는 스크립트에서 유용하며, 심볼릭 링크를 사용하여 다른 위치에 있는 파일을 참조하는 경우에 특히 유용함.&lt;/p&gt;</description>
      <category>iOS</category>
      <author>devgoom</author>
      <guid isPermaLink="true">https://devgoom.tistory.com/26</guid>
      <comments>https://devgoom.tistory.com/26#entry26comment</comments>
      <pubDate>Mon, 1 Apr 2024 17:26:54 +0900</pubDate>
    </item>
    <item>
      <title>리눅스 명령어(특정 폴더 파일 개수 확인, 특정 폴더 파일 삭제등)</title>
      <link>https://devgoom.tistory.com/25</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 특정 폴더 파일 개수 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- [root@portal&amp;nbsp;ATTACH_FILE_TEMP]#&amp;nbsp;&lt;b&gt;ls&amp;nbsp;-l&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;^-&amp;nbsp;|&amp;nbsp;wc&amp;nbsp;-l&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;87722&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;확인:&amp;nbsp;(서브디렉토리&amp;nbsp;포함) &lt;br /&gt;find {경로} -type f | wc -l&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ex) find /data/app/stg/MAIL_DATA/receive -type f | wc -l&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. 현재 디렉토리 경로 확인 (Present Working Directory)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[root@portal&amp;nbsp;ATTACH_FILE_TEMP]#&amp;nbsp;&lt;b&gt;pwd&lt;/b&gt; &lt;br /&gt;/app/data/portal/tmp/ATTACH_FILE_TEMP&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.특정 폴더 및 모든 파일 삭제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- rm -r {파일경로/&lt;b&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;ex) [root@portal ATTACH_FILE_TEMP]# &lt;b&gt;rm -r&lt;/b&gt; /app/data/portal/tmp/ATTACH_FILE_TEMP/* &lt;br /&gt;-bash:&amp;nbsp;/usr/bin/rm:&amp;nbsp;Argument&amp;nbsp;list&amp;nbsp;too&amp;nbsp;long&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;Argument list too long&quot;&amp;nbsp; 뜨면 &quot; &lt;b&gt;find . -maxdepth 1 -name '*' -delete&lt;/b&gt;&quot;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[root@portal&amp;nbsp;ATTACH_FILE_TEMP]#&amp;nbsp;find&amp;nbsp;.&amp;nbsp;-maxdepth&amp;nbsp;1&amp;nbsp;-name&amp;nbsp;'*'&amp;nbsp;-delete &lt;br /&gt;[root@portal&amp;nbsp;ATTACH_FILE_TEMP]#&amp;nbsp;&amp;nbsp;ls&amp;nbsp;-l&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;^-&amp;nbsp;|&amp;nbsp;wc&amp;nbsp;-l &lt;br /&gt;0&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;4.폴더내 파일의 내용 중 특정 텍스트 일괄 변환&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;-&amp;nbsp; find ./ -type f |xargs sed -i 's/{찾을 문자열}/{바꿀 문자열}/g'&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;find&amp;nbsp;./&amp;nbsp;-type&amp;nbsp;f&amp;nbsp;|xargs&amp;nbsp;sed&amp;nbsp;-i&amp;nbsp;'s/portal.ijuyoung.com/portal.lotces.com/g'&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- 변경 내용 확인&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[root@portal&amp;nbsp;01]#&amp;nbsp;find&amp;nbsp;./2022&amp;nbsp;-type&amp;nbsp;f&amp;nbsp;|xargs&amp;nbsp;cat&amp;nbsp;*&amp;nbsp;|&amp;nbsp;grep&amp;nbsp;&quot;portal.ijuyoung.com&quot;&amp;nbsp;|&amp;nbsp;wc&amp;nbsp;-l&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;5. local에서 원격 접속(SSH)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[root@portal ~]# &lt;b&gt;ssh root@127.0.0.1&lt;/b&gt;&lt;br /&gt;root@ 127.0.0.1 's password: &lt;br /&gt;Last login: Tue Jan 23 16:26:16 2024 from 127.0.0.2&lt;br /&gt;[root@portal-db&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;6. 원격에서 로컬로 파일 복사&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;: &lt;b&gt;scp&lt;/b&gt; [옵션][원격지_id]@[원격지_IP]&lt;b&gt;:&lt;/b&gt;[원본위치] [받는 위치]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[root@portal ~]# &lt;b&gt;scp root@127.0.0.1:/root/HPE_SGH252Y3ZX_20240123.ahs /uniapp/AHS&lt;/b&gt; &lt;br /&gt;root@127.0.0.1's password: &lt;br /&gt;HPE_SGH252Y3ZX_20240123.ahs&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;100%&amp;nbsp;&amp;nbsp;&amp;nbsp;11MB&amp;nbsp;100.4MB/s&amp;nbsp;&amp;nbsp;&amp;nbsp;00:00&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;[참고: &lt;a href=&quot;https://wlsvud84.tistory.com/11&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://wlsvud84.tistory.com/11&lt;/a&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;7.파일&amp;nbsp;용량&amp;nbsp;오름차순&amp;nbsp;정렬: &lt;br /&gt;&lt;br /&gt;du&amp;nbsp;-h&amp;nbsp;/uniapp/data/uniportal/stg/2024&amp;nbsp;|&amp;nbsp;sort&amp;nbsp;-k2&amp;nbsp;(내림차순은&amp;nbsp;-rk2,&amp;nbsp;-k2:&amp;nbsp;두&amp;nbsp;번째&amp;nbsp;열(파일&amp;nbsp;이름)을&amp;nbsp;기준으로&amp;nbsp;정렬합니다.) &lt;/p&gt;</description>
      <category>리눅스</category>
      <author>devgoom</author>
      <guid isPermaLink="true">https://devgoom.tistory.com/25</guid>
      <comments>https://devgoom.tistory.com/25#entry25comment</comments>
      <pubDate>Wed, 10 Jan 2024 17:40:16 +0900</pubDate>
    </item>
    <item>
      <title>Data truncation: Incorrect string value: '\xF0\x9F\</title>
      <link>https://devgoom.tistory.com/24</link>
      <description>&lt;pre id=&quot;code_1700789083674&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;com.mysql.jdbc.MysqlDataTruncation: Data truncation: Incorrect string value: '\xF0\x9F\xA5\xAC&amp;amp;g...' for column `{DB 명}`.`{Table 명}`.`{Column}` at row 1
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3876) ~[mysql-connector-java-5.1.38.jar:5.1.38]
	at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3814) ~[mysql-connector-java-5.1.38.jar:5.1.38]
	at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2478) ~[mysql-connector-java-5.1.38.jar:5.1.38]
	at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2625) ~[mysql-connector-java-5.1.38.jar:5.1.38]
	at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2551) ~[mysql-connector-java-5.1.38.jar:5.1.38]
	at com.mysql.jdbc.PreparedStatement.executeInternal(PreparedStatement.java:1861) ~[mysql-connector-java-5.1.38.jar:5.1.38]&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;패치 후 갑자기?! 포틀릿 데이터 저장시 DB에서 오류 발생&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 title=&quot;encodeURIComponent()&quot; href=&quot;https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;&lt;b&gt;encodeURIComponent()&amp;nbsp;&lt;/b&gt;&lt;/a&gt;통해서 들어가는데, string으로 변환되어 DB 컬럼에 저장시 오류 발생&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;input type=&quot;hidden&quot; name=&quot;option_P2021122020212787310076iErqdevncI&quot; value=&quot;%7B%22menuId1%22%3A%22MN201612151045518321689VsNpcdtwFyt%22%2C%22menuId2%22%3A%22MN201612151336199422744APWWHGiapz5%22%7D&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;해당 컬럼의 character set 변경하여 해결.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;컬림 조합 속성.png&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;478&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGB10P/btsAMTr2ALE/2NKxGi7PySXmEQ7hElfhk0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGB10P/btsAMTr2ALE/2NKxGi7PySXmEQ7hElfhk0/img.png&quot; data-alt=&quot;HeidiSQL 에서 바로 변경&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGB10P/btsAMTr2ALE/2NKxGi7PySXmEQ7hElfhk0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGB10P%2FbtsAMTr2ALE%2F2NKxGi7PySXmEQ7hElfhk0%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;379&quot; height=&quot;478&quot; data-filename=&quot;컬림 조합 속성.png&quot; data-origin-width=&quot;379&quot; data-origin-height=&quot;478&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HeidiSQL 에서 바로 변경&lt;/figcaption&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;아래 쿼리로도 변경가능&lt;/p&gt;
&lt;pre id=&quot;code_1700790432716&quot; class=&quot;java&quot; data-ke-language=&quot;java&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;alter table {테이블 이름} change column {컬럼 이름} {컬럼 이름} {컬럼 속성} collate 
'utf8mb4_unicode_ci'

(ex. ALTER TABLE test_column CHANGE COLUMN a_column a_column LONGTEXT NULL DEFAULT NULL
COLLATE 'utf8mb4_unicode_ci' )&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;div data-ke-type=&quot;moreLess&quot; data-text-more=&quot;더보기&quot; data-text-less=&quot;닫기&quot;&gt;&lt;a class=&quot;btn-toggle-moreless&quot;&gt;더보기&lt;/a&gt;
&lt;div class=&quot;moreless-content&quot;&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MariaDB, MySQL 이모티콘(\xF0\x9F\x98\x88) 저장시 에러&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://88oy.tistory.com/435&quot;&gt;https://88oy.tistory.com/435&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 style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;utf8mb4_general_ci와&lt;/span&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;&lt;span&gt;utf8mb4_unicode_ci:&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;/span&gt;&lt;a href=&quot;https://blossoming-man.tistory.com/entry/utf8mb4generalci%EC%99%80-utf8mb4unicodeci&quot;&gt;https://blossoming-man.tistory.com/entry/utf8mb4generalci%EC%99%80-utf8mb4unicodeci&lt;/a&gt;&lt;/p&gt;
&lt;p style=&quot;background-color: #ffffff; color: #000000; text-align: left;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;a href=&quot;https://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci&quot;&gt;https://stackoverflow.com/questions/766809/whats-the-difference-between-utf8-general-ci-and-utf8-unicode-ci&lt;/a&gt;&lt;/span&gt;&lt;/p&gt;
&lt;/div&gt;
&lt;/div&gt;</description>
      <category>SQL/mySQL</category>
      <author>devgoom</author>
      <guid isPermaLink="true">https://devgoom.tistory.com/24</guid>
      <comments>https://devgoom.tistory.com/24#entry24comment</comments>
      <pubDate>Fri, 24 Nov 2023 10:48:19 +0900</pubDate>
    </item>
  </channel>
</rss>