<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>nomad-programmer</title>
    <link>https://nomad-programmer.tistory.com/</link>
    <description>coding 블로그</description>
    <language>ko</language>
    <pubDate>Sat, 30 May 2026 02:34:29 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>scii</managingEditor>
    <image>
      <title>nomad-programmer</title>
      <url>https://tistory1.daumcdn.net/tistory/3327352/attach/ccd554224f864a77adcd84ecab7b77e0</url>
      <link>https://nomad-programmer.tistory.com</link>
    </image>
    <item>
      <title>[Development/Game] 게임 개발을 위한 Visual Assist 설정</title>
      <link>https://nomad-programmer.tistory.com/553</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;나는 아래를 참고하며 모두 설정하였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.wholetomato.com/ko/learn/getstarted&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.wholetomato.com/ko/learn/getstarted&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732900394091&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;Get Started with Visual Assist - Whole Tomato Software&quot; data-og-description=&quot;Great stuff happens all the time. Visual Assist always has a steady stream of new features coming out.&quot; data-og-host=&quot;www.wholetomato.com&quot; data-og-source-url=&quot;https://www.wholetomato.com/ko/learn/getstarted&quot; data-og-url=&quot;https://www.wholetomato.com/ko/learn/getstarted&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cP3KUf/hyXDjhdHA3/YYDpTR2kqFbDjqOAclpbf0/img.png?width=743&amp;amp;height=284&amp;amp;face=0_0_743_284,https://scrap.kakaocdn.net/dn/cc88gj/hyXDd89jGB/qGByVBU89p0tUOqRkRDBw1/img.png?width=597&amp;amp;height=253&amp;amp;face=0_0_597_253&quot;&gt;&lt;a href=&quot;https://www.wholetomato.com/ko/learn/getstarted&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.wholetomato.com/ko/learn/getstarted&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cP3KUf/hyXDjhdHA3/YYDpTR2kqFbDjqOAclpbf0/img.png?width=743&amp;amp;height=284&amp;amp;face=0_0_743_284,https://scrap.kakaocdn.net/dn/cc88gj/hyXDd89jGB/qGByVBU89p0tUOqRkRDBw1/img.png?width=597&amp;amp;height=253&amp;amp;face=0_0_597_253');&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;Get Started with Visual Assist - Whole Tomato Software&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Great stuff happens all the time. Visual Assist always has a steady stream of new features coming out.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.wholetomato.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;&lt;a href=&quot;https://qiita.com/sy_/items/20717560a0c9e914e5e5&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://qiita.com/sy_/items/20717560a0c9e914e5e5&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732900414174&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;VISUAL ASSISTがとっても優秀な件 - Qiita&quot; data-og-description=&quot;#c++でインテリセンス(IntelliSense)を使っている皆様皆さん、このようなインジケータが長く表示されてしまったので、コーヒーで一服した経験ございませんか？私はあります。定義に飛ぶのに&quot; data-og-host=&quot;qiita.com&quot; data-og-source-url=&quot;https://qiita.com/sy_/items/20717560a0c9e914e5e5&quot; data-og-url=&quot;https://qiita.com/sy_/items/20717560a0c9e914e5e5&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bdHRT0/hyXGA9qxYE/u8f2BiegGStrtAO67gyZjK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cHa830/hyXDnqmdhQ/MF8EfrgAZok04TaOAaS0g1/img.png?width=861&amp;amp;height=507&amp;amp;face=0_0_861_507,https://scrap.kakaocdn.net/dn/qsmz7/hyXDmkGHJt/nEu3pECD8WSkYwuKlMKTs1/img.png?width=861&amp;amp;height=507&amp;amp;face=0_0_861_507&quot;&gt;&lt;a href=&quot;https://qiita.com/sy_/items/20717560a0c9e914e5e5&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://qiita.com/sy_/items/20717560a0c9e914e5e5&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bdHRT0/hyXGA9qxYE/u8f2BiegGStrtAO67gyZjK/img.jpg?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/cHa830/hyXDnqmdhQ/MF8EfrgAZok04TaOAaS0g1/img.png?width=861&amp;amp;height=507&amp;amp;face=0_0_861_507,https://scrap.kakaocdn.net/dn/qsmz7/hyXDmkGHJt/nEu3pECD8WSkYwuKlMKTs1/img.png?width=861&amp;amp;height=507&amp;amp;face=0_0_861_507');&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;VISUAL ASSISTがとっても優秀な件 - Qiita&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;#c++でインテリセンス(IntelliSense)を使っている皆様皆さん、このようなインジケータが長く表示されてしまったので、コーヒーで一服した経験ございませんか？私はあります。定義に飛ぶのに&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;qiita.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Unreal Engine을 위한 설정&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.wholetomato.com/ko/documentation/unreal-engine/default-intellisense-and-ue&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.wholetomato.com/ko/documentation/unreal-engine/default-intellisense-and-ue&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1732901966503&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;Default IntelliSense and UE&quot; data-og-description=&quot;Visual Assist operates within Visual Studio with or without default IntelliSense. In small-to-medium&amp;nbsp;solutions, the related modules provide separate and overlapping functionality without degradation&amp;nbsp;of&amp;nbsp;IDE responsiveness. If responsiveness&amp;nbsp;suffers with&quot; data-og-host=&quot;www.wholetomato.com&quot; data-og-source-url=&quot;https://www.wholetomato.com/ko/documentation/unreal-engine/default-intellisense-and-ue&quot; data-og-url=&quot;https://www.wholetomato.com/ko/documentation/unreal-engine/default-intellisense-and-ue&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.wholetomato.com/ko/documentation/unreal-engine/default-intellisense-and-ue&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.wholetomato.com/ko/documentation/unreal-engine/default-intellisense-and-ue&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;Default IntelliSense and UE&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Visual Assist operates within Visual Studio with or without default IntelliSense. In small-to-medium&amp;nbsp;solutions, the related modules provide separate and overlapping functionality without degradation&amp;nbsp;of&amp;nbsp;IDE responsiveness. If responsiveness&amp;nbsp;suffers with&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;www.wholetomato.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;</description>
      <category>Development/Game</category>
      <category>Visual Assist</category>
      <author>scii</author>
      <guid isPermaLink="true">https://nomad-programmer.tistory.com/553</guid>
      <comments>https://nomad-programmer.tistory.com/553#entry553comment</comments>
      <pubDate>Sat, 30 Nov 2024 02:13:52 +0900</pubDate>
    </item>
    <item>
      <title>[OS/Windows] 윈도우11 설치 시, Raid Driver 적용</title>
      <link>https://nomad-programmer.tistory.com/552</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;나의 사양은 이렇다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- CPU: AMD 7950X&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Mainboard: Asus Rog Strix B650E-E&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 아래의 Raid 드라이버를 받아야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://www.amd.com/ko/support/downloads/drivers.html/chipsets/am5/b650e.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://www.amd.com/ko/support/downloads/drivers.html/chipsets/am5/b650e.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1731084701549&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;프로세서와 그래픽 드라이버 및 지원&quot; data-og-description=&quot; &quot; data-og-host=&quot;www.amd.com&quot; data-og-source-url=&quot;https://www.amd.com/ko/support/downloads/drivers.html/chipsets/am5/b650e.html&quot; data-og-url=&quot;https://www.amd.com/ko/support/downloads/drivers.html&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/30WYw/hyXwunZWZc/4clDKJLjXrQcdNPSnmbYI0/img.jpg?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628,https://scrap.kakaocdn.net/dn/bN5Sww/hyXwjtfDEi/ZBFUucVGd4851X9VWCPwi1/img.jpg?width=1920&amp;amp;height=300&amp;amp;face=0_0_1920_300&quot;&gt;&lt;a href=&quot;https://www.amd.com/ko/support/downloads/drivers.html/chipsets/am5/b650e.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.amd.com/ko/support/downloads/drivers.html/chipsets/am5/b650e.html&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/30WYw/hyXwunZWZc/4clDKJLjXrQcdNPSnmbYI0/img.jpg?width=1200&amp;amp;height=628&amp;amp;face=0_0_1200_628,https://scrap.kakaocdn.net/dn/bN5Sww/hyXwjtfDEi/ZBFUucVGd4851X9VWCPwi1/img.jpg?width=1920&amp;amp;height=300&amp;amp;face=0_0_1920_300');&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;프로세서와 그래픽 드라이버 및 지원&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;www.amd.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 윈도우 설치 시, AMD는 raid 드라이버를 수동으로 잡아줘야 한다. 그래서 위의 &quot;raid_windows_driver&quot; 압축파일을 받은 후 압축 해제하여 윈도우즈 usd에 넣고 윈도우를 설치한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;설치 과정 중에 설치 드라이버를 선택하는 부분이 나온다면, &quot;찾아보기&quot;를 클릭하여 다운받은 raid 드라이버를 선택하여 탑재시킨다. 그 과정은 아래와 같아.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Windows 11 설치 시 RAID 드라이버를 적용할 때, 파일들의 순서가 중요할 수 있다. 각 파일의 역할은 다음과 같고, 설치 시 &lt;b&gt;아래 순서대로 적용하는 것이 일반적&lt;/b&gt;이다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;b&gt;rcbottom&lt;/b&gt;: 기본 RAID 드라이버의 하위 계층을 담당한다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rcconfig&lt;/b&gt;: RAID 설정 관련 드라이버이다.&lt;/li&gt;
&lt;li&gt;&lt;b&gt;rcraid&lt;/b&gt;: RAID 컨트롤러 드라이버로, RAID 설정을 최종적으로 구성한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;적용 순서&lt;/b&gt;:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;Windows 설치 중에 &quot;드라이버 로드&quot; 옵션을 선택하고 rcbottom 드라이버를 먼저 로드한다.&lt;/li&gt;
&lt;li&gt;이어서 rcconfig 드라이버를 로드한다.&lt;/li&gt;
&lt;li&gt;마지막으로 rcraid 드라이버를 로드하여 RAID 구성을 완료한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 순서로 드라이버를 설치하면 RAID 구성과 관련된 모든 계층이 제대로 설정되어 Windows 11이 RAID 디스크를 인식할 수 있다.&lt;/p&gt;</description>
      <category>OS/Windows</category>
      <author>scii</author>
      <guid isPermaLink="true">https://nomad-programmer.tistory.com/552</guid>
      <comments>https://nomad-programmer.tistory.com/552#entry552comment</comments>
      <pubDate>Sat, 9 Nov 2024 01:57:42 +0900</pubDate>
    </item>
    <item>
      <title>[etc/유용한 정보] VFX Reference 버전</title>
      <link>https://nomad-programmer.tistory.com/551</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;아래의 링크에 가보면, 현재의 호환 버전들을 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://vfxplatform.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://vfxplatform.com/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1730299417418&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;VFX Reference Platform: Home Page&quot; data-og-description=&quot;The VFX Reference Platform is a set of tool and library versions to be used as a common target platform for building software for the VFX industry. Its purpose is to minimise incompatibilities between different software packages, ease the support burden fo&quot; data-og-host=&quot;vfxplatform.com&quot; data-og-source-url=&quot;https://vfxplatform.com/&quot; data-og-url=&quot;https://vfxplatform.com/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://vfxplatform.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://vfxplatform.com/&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;VFX Reference Platform: Home Page&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;The VFX Reference Platform is a set of tool and library versions to be used as a common target platform for building software for the VFX industry. Its purpose is to minimise incompatibilities between different software packages, ease the support burden fo&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;vfxplatform.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;</description>
      <category>etc/유용한 정보</category>
      <category>vfx reference 버전</category>
      <author>scii</author>
      <guid isPermaLink="true">https://nomad-programmer.tistory.com/551</guid>
      <comments>https://nomad-programmer.tistory.com/551#entry551comment</comments>
      <pubDate>Wed, 30 Oct 2024 23:43:46 +0900</pubDate>
    </item>
    <item>
      <title>[OS/Windows] Proxmox에서 윈도우 11 설치</title>
      <link>https://nomad-programmer.tistory.com/550</link>
      <description>&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;a href=&quot;https://blog.koder.page/proxmox-windows11-install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://blog.koder.page/proxmox-windows11-install/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1728759954345&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;Proxmox Windows11 설치&quot; data-og-description=&quot;Proxmox를 본격적으로 써먹기 위해서 윈도우 VM을 하나 올리기로 결정. &amp;nbsp; 일단 윈도우에 Guest-Agent 설치하는 글과, GPU Passthrough 원격접속 &amp;nbsp; 이렇게 세가지 글로 분리해 작성하게 될 것 같다. 설치 준&quot; data-og-host=&quot;blog.koder.page&quot; data-og-source-url=&quot;https://blog.koder.page/proxmox-windows11-install/&quot; data-og-url=&quot;https://blog.koder.page/proxmox-windows11-install/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dwb1tk/hyXeaE2dt6/0azYY83jZOP3YrUzFYGLe0/img.png?width=1282&amp;amp;height=861&amp;amp;face=0_0_1282_861,https://scrap.kakaocdn.net/dn/cSGmqY/hyXd2AeC0n/6cHdhZ86CUvKa3FKK0coKK/img.png?width=1282&amp;amp;height=861&amp;amp;face=0_0_1282_861,https://scrap.kakaocdn.net/dn/kmcHl/hyXhYCWim5/5wSCsKgbLgS9LeSVPtKRC1/img.png?width=1282&amp;amp;height=861&amp;amp;face=0_0_1282_861&quot;&gt;&lt;a href=&quot;https://blog.koder.page/proxmox-windows11-install/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://blog.koder.page/proxmox-windows11-install/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dwb1tk/hyXeaE2dt6/0azYY83jZOP3YrUzFYGLe0/img.png?width=1282&amp;amp;height=861&amp;amp;face=0_0_1282_861,https://scrap.kakaocdn.net/dn/cSGmqY/hyXd2AeC0n/6cHdhZ86CUvKa3FKK0coKK/img.png?width=1282&amp;amp;height=861&amp;amp;face=0_0_1282_861,https://scrap.kakaocdn.net/dn/kmcHl/hyXhYCWim5/5wSCsKgbLgS9LeSVPtKRC1/img.png?width=1282&amp;amp;height=861&amp;amp;face=0_0_1282_861');&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;Proxmox Windows11 설치&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Proxmox를 본격적으로 써먹기 위해서 윈도우 VM을 하나 올리기로 결정. &amp;nbsp; 일단 윈도우에 Guest-Agent 설치하는 글과, GPU Passthrough 원격접속 &amp;nbsp; 이렇게 세가지 글로 분리해 작성하게 될 것 같다. 설치 준&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;blog.koder.page&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;</description>
      <category>OS/Windows</category>
      <author>scii</author>
      <guid isPermaLink="true">https://nomad-programmer.tistory.com/550</guid>
      <comments>https://nomad-programmer.tistory.com/550#entry550comment</comments>
      <pubDate>Sun, 13 Oct 2024 04:05:55 +0900</pubDate>
    </item>
    <item>
      <title>[OS/Windows] Microsoft PowerToys</title>
      <link>https://nomad-programmer.tistory.com/549</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;윈도우즈 사용자 정의하는 툴이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;MacOS ---&amp;gt; Windows (RDP) 로 원격 접속 시, 로지텍 마우스의 사이드 버튼인 &quot;앞으로/뒤로 가기&quot; 안되어서 찾아보니 해당 툴의 &quot;키보드 관리자&quot;로 설정할 수 있다고 한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/windows/powertoys/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://learn.microsoft.com/en-us/windows/powertoys/&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1727801680712&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;Microsoft PowerToys&quot; data-og-description=&quot;Microsoft PowerToys is a set of utilities for customizing Windows. Utilities include ColorPicker, FancyZones, File Explorer Add-ons, Image Resizer, Keyboard Manager, PowerRename, PowerToys Run, a Shortcut Guide and more to come.&quot; data-og-host=&quot;learn.microsoft.com&quot; data-og-source-url=&quot;https://learn.microsoft.com/en-us/windows/powertoys/&quot; data-og-url=&quot;https://learn.microsoft.com/en-us/windows/powertoys/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/XWsmR/hyXazD79zV/6pUER37kytKkVIAFaBOZrK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/snLcf/hyXaBvddFj/zWqGkyNmktGAKFIjN78Qv0/img.png?width=400&amp;amp;height=266&amp;amp;face=0_0_400_266,https://scrap.kakaocdn.net/dn/XFSR1/hyXawOba9R/kbkMKV6KJSvFZxlGIwYcrK/img.png?width=400&amp;amp;height=266&amp;amp;face=0_0_400_266&quot;&gt;&lt;a href=&quot;https://learn.microsoft.com/en-us/windows/powertoys/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://learn.microsoft.com/en-us/windows/powertoys/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/XWsmR/hyXazD79zV/6pUER37kytKkVIAFaBOZrK/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630,https://scrap.kakaocdn.net/dn/snLcf/hyXaBvddFj/zWqGkyNmktGAKFIjN78Qv0/img.png?width=400&amp;amp;height=266&amp;amp;face=0_0_400_266,https://scrap.kakaocdn.net/dn/XFSR1/hyXawOba9R/kbkMKV6KJSvFZxlGIwYcrK/img.png?width=400&amp;amp;height=266&amp;amp;face=0_0_400_266');&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;Microsoft PowerToys&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Microsoft PowerToys is a set of utilities for customizing Windows. Utilities include ColorPicker, FancyZones, File Explorer Add-ons, Image Resizer, Keyboard Manager, PowerRename, PowerToys Run, a Shortcut Guide and more to come.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;learn.microsoft.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://apps.microsoft.com/detail/xp89dcgq3k6vld?hl=en-us&amp;amp;gl=KR&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://apps.microsoft.com/detail/xp89dcgq3k6vld?hl=en-us&amp;amp;gl=KR&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1727801686193&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;Microsoft PowerToys - Free download and install on Windows | Microsoft Store&quot; data-og-description=&quot;Microsoft PowerToys is a set of utilities for power users to tune and streamline their Windows experiences for greater productivity. For more info on PowerToys overviews and guides, or any other tools and resources for Windows development environments, hea&quot; data-og-host=&quot;apps.microsoft.com&quot; data-og-source-url=&quot;https://apps.microsoft.com/detail/xp89dcgq3k6vld?hl=en-us&amp;amp;gl=KR&quot; data-og-url=&quot;https://apps.microsoft.com/detail/xp89dcgq3k6vld?gl=KR&amp;amp;hl=en-us&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/gvsyy/hyXawHoLoI/bNQSf3BguAUMjYKE8v73FK/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080,https://scrap.kakaocdn.net/dn/22Ovn/hyXaAXlABA/aTigUk7krDibXnCiMgvqF1/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080&quot;&gt;&lt;a href=&quot;https://apps.microsoft.com/detail/xp89dcgq3k6vld?hl=en-us&amp;amp;gl=KR&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://apps.microsoft.com/detail/xp89dcgq3k6vld?hl=en-us&amp;amp;gl=KR&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/gvsyy/hyXawHoLoI/bNQSf3BguAUMjYKE8v73FK/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080,https://scrap.kakaocdn.net/dn/22Ovn/hyXaAXlABA/aTigUk7krDibXnCiMgvqF1/img.png?width=1080&amp;amp;height=1080&amp;amp;face=0_0_1080_1080');&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;Microsoft PowerToys - Free download and install on Windows | Microsoft Store&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Microsoft PowerToys is a set of utilities for power users to tune and streamline their Windows experiences for greater productivity. For more info on PowerToys overviews and guides, or any other tools and resources for Windows development environments, hea&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;apps.microsoft.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;참고&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://superuser.com/questions/696589/mouse-with-forward-back-buttons-and-remote-desktop#answer-696596&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://superuser.com/questions/696589/mouse-with-forward-back-buttons-and-remote-desktop#answer-696596&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1727801712266&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;Mouse with forward/back buttons and remote desktop&quot; data-og-description=&quot;I have a logitech MX518 that has nice forward and back buttons built onto the mouse directly. They work great locally. However anytime over remote desktop these buttons do nothing. This happens bot...&quot; data-og-host=&quot;superuser.com&quot; data-og-source-url=&quot;https://superuser.com/questions/696589/mouse-with-forward-back-buttons-and-remote-desktop#answer-696596&quot; data-og-url=&quot;https://superuser.com/questions/696589/mouse-with-forward-back-buttons-and-remote-desktop&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dowCTM/hyXauixAVv/UyrlWai5fN5nfSXFe2lTA0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://superuser.com/questions/696589/mouse-with-forward-back-buttons-and-remote-desktop#answer-696596&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://superuser.com/questions/696589/mouse-with-forward-back-buttons-and-remote-desktop#answer-696596&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dowCTM/hyXauixAVv/UyrlWai5fN5nfSXFe2lTA0/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&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;Mouse with forward/back buttons and remote desktop&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I have a logitech MX518 that has nice forward and back buttons built onto the mouse directly. They work great locally. However anytime over remote desktop these buttons do nothing. This happens bot...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;superuser.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;</description>
      <category>OS/Windows</category>
      <category>PowerToys</category>
      <category>원격접속 마우스</category>
      <author>scii</author>
      <guid isPermaLink="true">https://nomad-programmer.tistory.com/549</guid>
      <comments>https://nomad-programmer.tistory.com/549#entry549comment</comments>
      <pubDate>Wed, 2 Oct 2024 01:55:25 +0900</pubDate>
    </item>
    <item>
      <title>[Development/WASM] Qt6와 웹 어셈블리 연동</title>
      <link>https://nomad-programmer.tistory.com/546</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;나는 Qt6.7을 설치하면서 Qt를 위한 웹 어셈블리 패키지도 함께 설치하였다. 그래서 WASM SDK를 잡아주어야 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://emscripten.org/docs/getting_started/downloads.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://emscripten.org/docs/getting_started/downloads.html&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1726807048989&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;Download and install &amp;mdash; Emscripten 3.1.66-git (dev) documentation&quot; data-og-description=&quot;Note If you want to use your system&amp;rsquo;s Node.js instead of the emsdk&amp;rsquo;s, it may be node instead of nodejs, and you can adjust the NODE_JS attribute of your .emscripten file to point to it.&quot; data-og-host=&quot;emscripten.org&quot; data-og-source-url=&quot;https://emscripten.org/docs/getting_started/downloads.html&quot; data-og-url=&quot;https://emscripten.org/docs/getting_started/downloads.html&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://emscripten.org/docs/getting_started/downloads.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://emscripten.org/docs/getting_started/downloads.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;Download and install &amp;mdash; Emscripten 3.1.66-git (dev) documentation&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Note If you want to use your system&amp;rsquo;s Node.js instead of the emsdk&amp;rsquo;s, it may be node instead of nodejs, and you can adjust the NODE_JS attribute of your .emscripten file to point to it.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;emscripten.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 내가 설치한 Qt 버전과 호환성이 좋은 WASM 버전을 설치해야하는데, 어느 버전을 설치해야 하는지 갈팡질팡할 수 있다. 아래는 그 질문에 대한 답이 나와 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://doc.qt.io/qt-6/wasm.html#install-emscripten&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://doc.qt.io/qt-6/wasm.html#install-emscripten&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1726807119166&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;Qt for WebAssembly | Qt 6.7&quot; data-og-description=&quot;&quot; data-og-host=&quot;doc.qt.io&quot; data-og-source-url=&quot;https://doc.qt.io/qt-6/wasm.html#install-emscripten&quot; data-og-url=&quot;https://doc.qt.io/qt-6/wasm.html#install-emscripten&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://doc.qt.io/qt-6/wasm.html#install-emscripten&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://doc.qt.io/qt-6/wasm.html#install-emscripten&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;Qt for WebAssembly | Qt 6.7&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;doc.qt.io&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위 사이트가서 확인해보면, Qt6.7의 경우 SDK의 버전은 3.1.50 이다. 그래서 해당 버전을 설치하였다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Emscripten 설치&lt;/b&gt;&lt;/h3&gt;
&lt;pre id=&quot;code_1726812303294&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 소스 다운
git clone https://github.com/emscripten-core/emsdk.git
# 해당 디렉토리로 이동
cd emsdk

./emsdk install 3.1.50
./emsdk activate 3.1.50&lt;/code&gt;&lt;/pre&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1556&quot; data-origin-height=&quot;1054&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3jocc/btsJGwOpmkc/pT6EMB177VDg3nGlbrxnK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3jocc/btsJGwOpmkc/pT6EMB177VDg3nGlbrxnK1/img.png&quot; data-alt=&quot;SDK가 설치된 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3jocc/btsJGwOpmkc/pT6EMB177VDg3nGlbrxnK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3jocc%2FbtsJGwOpmkc%2FpT6EMB177VDg3nGlbrxnK1%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;1556&quot; height=&quot;1054&quot; data-origin-width=&quot;1556&quot; data-origin-height=&quot;1054&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;SDK가 설치된 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2330&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cOdWEm/btsJGKS0Kl8/syBIQCAeHIKxKksx8JmSTk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cOdWEm/btsJGKS0Kl8/syBIQCAeHIKxKksx8JmSTk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cOdWEm/btsJGKS0Kl8/syBIQCAeHIKxKksx8JmSTk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcOdWEm%2FbtsJGKS0Kl8%2FsyBIQCAeHIKxKksx8JmSTk%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;2330&quot; height=&quot;642&quot; data-origin-width=&quot;2330&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Web Assembly Build &amp;amp; Test&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 main.cpp 파일을 생성한다.&lt;/p&gt;
&lt;pre id=&quot;code_1726809188740&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

int main() {
    std::cout&amp;lt;&amp;lt;&quot;Hello World!&quot;&amp;lt;&amp;lt;std::endl;
    
    return 0;
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 후 main.cpp를 컴파일하면, javascript 파일이 생성된다. 이것을 node를 통해 실행하면 터미널에 Hello World!가 출력된다.&lt;/p&gt;
&lt;pre id=&quot;code_1726809281104&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# 빌드
em++ main.cpp

# Run
node a.out.js&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;HTML 파일을 생성하는 방법&lt;/b&gt;&lt;/h4&gt;
&lt;pre id=&quot;code_1726809322852&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# html 파일 생성
em++ main.cpp -o main.html

# Run
emrun main.html&lt;/code&gt;&lt;/pre&gt;</description>
      <category>Development/WASM</category>
      <category>emsdk</category>
      <category>qt6 emsdk</category>
      <category>qt6와 웹 어셈블리 연동</category>
      <category>wasm build</category>
      <category>wasm cpp to html</category>
      <author>scii</author>
      <guid isPermaLink="true">https://nomad-programmer.tistory.com/546</guid>
      <comments>https://nomad-programmer.tistory.com/546#entry546comment</comments>
      <pubDate>Fri, 20 Sep 2024 13:41:33 +0900</pubDate>
    </item>
    <item>
      <title>[Programming/C++] 예외 처리 생략과 실패 대응</title>
      <link>https://nomad-programmer.tistory.com/545</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;프로그래밍은 예측불허의 여정이다. 코드가 실행되는 동안 예외 상황은 피할 수 없고, 심지어 예외 처리 메커니즘도 때로는 예외를 처리하지 못할 수 있다. noexcept와 set_terminate를 활용해 예외 처리와 예외 처리 실패에 대응하고 프로그램의 안정성과 신뢰성을 높이는 방법을 알아보자.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;예외 처리 생략 - noexcept&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수에서 문제가 발생할 때 반드시 예외를 발생시켜야 하는 것은 아니다. 때로는 예외를 발생시키는 것이 득보다 실이 더 클 때도 있다.오류와 예외는 엄연히 다르다. 값이나 실행 흐름을 충분히 예측할 수 있을 때는 if문으로 처리하는 것이 성능 면에서 훨씬 이득이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;함수가 예외를 던지지 않음을 나타낼 때는 다음처럼 noexcept 키워드로 명시할 수 있다. 이처럼 함수가 예외를 던지지 않음을 명시하면 컴파일러가 코드를 최적화하고 빠르게 실행하는 데에 도움이 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1726379029221&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;int func() noexcept&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또는 다음처럼 함수를 호출할 때 noexcept 키워드를 사용할 수도 있다. 그러면 컴파일할 때 해당 함수가 예외를 던지는지 확인해 true나 false로 알려 준다.&lt;/p&gt;
&lt;pre id=&quot;code_1726379092786&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;bool does_not_throw = noexept(my_function());&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;참고로 함수에 noexcept 키워드를 붙였다고 해서 예외를 던지지 못하는 것은 아니다. noexcpet가 명시된 함수에서 예외를 던지면 어떻게 되는지 살펴보자.&lt;/p&gt;
&lt;pre id=&quot;code_1726379411683&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;


void real_noexcept() noexcept
{
    cout&amp;lt;&amp;lt;&quot;real_noexcept&quot;&amp;lt;&amp;lt;endl;
}

// noexcept로 명시된 함수 안에서 예외 발생
void fake_noexcept() noexcept
{
    cout&amp;lt;&amp;lt;&quot;fake_noexcept&quot;&amp;lt;&amp;lt;endl;
    throw 1;
}


int main() {
    real_noexcept();

    try
    {
        fake_noexcept();
    }
    catch(int exec)
    {
        cout&amp;lt;&amp;lt;&quot;catch &quot;&amp;lt;&amp;lt;exec&amp;lt;&amp;lt;endl;
    }

    return 0;
}


// 결과
libc++abi: terminating due to uncaught exception of type int
real_noexcept
fake_noexcept

Process finished with exit code 134 (interrupted by signal 6:SIGABRT)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 코드를 컴파일하면 경고는 발생하지만, 실행 파일은 만들어진다. 컴파일러는 noexcept 키워드가 붙은 함수는 예외를 던지지 않을 것으로 간주하고 그래도 컴파일한다. 하지만 실행해 보면 런타임 오류 메시지가 발생하며 프로그램은 강제로 종료된다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;예외 처리 실패 대응&amp;nbsp; - set_terminate&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;throw문으로 예외를 던졌는데 해당 예외를 받을 catch 문이 아예 없거나 있어도 형식이 맞지 않으면 프로그램은 강제로 종료된다. 이때 종료 처리 함수를 설정하는 set_terminate로 프로그램이 강제 종료되기 전에 특정 동작을 수행하도록 구성할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1726379604104&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;set_terminate(종료_처리_함수);&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;set_terminate로 종료 처리 함수를 지정하여 예외 처리 실패에 대응하는 예를 살펴보자.&lt;/p&gt;
&lt;pre id=&quot;code_1726383408223&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;
#include &amp;lt;cstdlib&amp;gt;

using namespace std;


// 종료 처리 함수
void MyTerminate()
{
    cout&amp;lt;&amp;lt;&quot;MyTerminate called!&quot; &amp;lt;&amp;lt;endl;
    // 프로그램을 비정상으로 종료
    exit(-1);
}


int main() {
    set_terminate(MyTerminate);
    throw 1;    // 예외 발생

    return 0;  // 이 코드는 실행되지 않음
}


// 결과
MyTerminate called!

Process finished with exit code 255&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;main 함수에서 throw 1 코드를 만나면 catch 문을 찾을 수 없어 오류가 발생하고 프로그램이 강제로 종료된다. 그런데 강제로 종료하기 전에 ㄴet_terminate로 지정한 종료 처리 함수가 호출된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;종료 처리 함수로 지정한 MyTerminate에서는 프로그램을 강제로 종료하는 exit 함수를 사용했다. exit 함수는 &amp;lt;cstdlib&amp;gt; 헤더에 정의되어 있다. exit 함수에 상태 코드로 0을 전달하면 프로그램을 정상으로, -1을 전달하면 비정상으로 종료한다. 이 상태 코드에 따라 내부에 정의된 각종 정리 작업을 수행한다.&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;비슷한 함수로 abortrㅏ 있는데 이 함수는 어떤 정리 작업도 수행하지 않은 채 프로그램을 비정상으로 즉시 종료한다.&lt;/p&gt;</description>
      <category>Programming/C++</category>
      <category>c++ noexcept</category>
      <category>c++ set_terminate</category>
      <category>예외처리생략 c++</category>
      <author>scii</author>
      <guid isPermaLink="true">https://nomad-programmer.tistory.com/545</guid>
      <comments>https://nomad-programmer.tistory.com/545#entry545comment</comments>
      <pubDate>Sun, 15 Sep 2024 14:46:01 +0900</pubDate>
    </item>
    <item>
      <title>[Programming/C++] 사용자 정의 리터럴</title>
      <link>https://nomad-programmer.tistory.com/544</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;기본으로 제공되는 리터럴 외에 개발자가 리터럴을 직접 정의할 수도 있다. 리터럴을 나타내는 접미사를 함수 이름으로 만들면 되는데, 다음처럼 사용자 정의 리터럴 연산자 operator&quot;&quot; 를 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1725820757755&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;반환_타입 operator&quot;&quot; 러터럴_접미사(매개변수)&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게 하면 해당 접미사를 붙인 값은 사용자가 정의한 값으로 바꿔서 사용할 수 있다. 다음 코드는 마일(mile)과 킬로미터(kilometers) 단위를 리터럴로 정의한 예이다.&lt;/p&gt;
&lt;pre id=&quot;code_1725820906465&quot; class=&quot;cpp&quot; data-ke-language=&quot;cpp&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;#include &amp;lt;iostream&amp;gt;

using namespace std;


const long double km_per_mile = 1.609344L;


long double operator&quot;&quot; _km(const long double val){
    return val;
}


long double operator&quot;&quot; _mi(const long double val){
    return val * km_per_mile;
}


int main(int argc, const char * argv[]) {
    long double distance_1 = 1.0_km;
    long double distance_2 = 1.0_mi;
    
    cout&amp;lt;&amp;lt;distance_1 + distance_2&amp;lt;&amp;lt;&quot; km&quot;&amp;lt;&amp;lt;endl;
    

    return 0;
}


// 결과
2.60934 km&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;코드에서는 _km과 _mi라는 사용자 정의 리터럴을 정의했다. _km은 전달받은 값을 그대로 반환하고, _mi는 마일을 킬로미터로 변환한 후에 반환한다. 따라서 두 거리를 더한 값을 출력할 때는 킬로미터 단위로 출력된다.&lt;/p&gt;</description>
      <category>Programming/C++</category>
      <category>c++ operator&amp;quot;&amp;quot;</category>
      <category>사용자 정의 리터럴</category>
      <author>scii</author>
      <guid isPermaLink="true">https://nomad-programmer.tistory.com/544</guid>
      <comments>https://nomad-programmer.tistory.com/544#entry544comment</comments>
      <pubDate>Mon, 9 Sep 2024 03:43:22 +0900</pubDate>
    </item>
    <item>
      <title>[DevOps/Docker] Failed to initialize NVML: Unknown Error</title>
      <link>https://nomad-programmer.tistory.com/543</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;nvidia 도커 컨테이너 사용을 위한 패키지와 설정도 모두 하였는데... 다음과 같은 에러가 발생했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;도커가 nvidia 설정이 잘 되었는지 테스트할 겸 아래와 같이 명령을 실행했다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1723650701313&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run --gpus all nvidia/cuda:11.5.2-base-ubuntu20.04 nvidia-smi&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 &quot;Failed to initialize NVML: Unknown Error&quot; 에러가 나타났다... 어쩐지... ai가 응답하는 것이 영... 시원찮았다. GPU가 아닌 CPU로만 응답을 했었구나...아...&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;Solution&lt;/b&gt;&lt;/h2&gt;
&lt;pre id=&quot;code_1723651003869&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo vim /etc/nvidia-container-runtime/config.toml&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 명령을 통해 config.toml 파일에 접근한다. 그 후 다음과 같이 변경해주자.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;135&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bEKeQO/btsI5x7LNaM/c8IP9JqKGR271qqxqmltp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bEKeQO/btsI5x7LNaM/c8IP9JqKGR271qqxqmltp1/img.png&quot; data-alt=&quot;변경한 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bEKeQO/btsI5x7LNaM/c8IP9JqKGR271qqxqmltp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbEKeQO%2FbtsI5x7LNaM%2Fc8IP9JqKGR271qqxqmltp1%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;521&quot; height=&quot;135&quot; data-origin-width=&quot;521&quot; data-origin-height=&quot;135&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;no-cgroups가 &quot;true&quot; 로 되어있다면 &quot;false&quot;로 변경해준 후 저장한다. 그 후 docker를 재시작해준다.&lt;/p&gt;
&lt;pre id=&quot;code_1723651130802&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo systemctrl restart docker&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 작업을 모두 완료했다면, 다음과 같이 docker 명령을 실행하여 nvidia 정보가 잘 나오는지 확인하자!&lt;/p&gt;
&lt;pre id=&quot;code_1723651227257&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker run --gpus all nvidia/cuda:11.5.2-base-ubuntu20.04 nvidia-smi&lt;/code&gt;&lt;/pre&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;출처:&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/72932940/failed-to-initialize-nvml-unknown-error-in-docker-after-few-hours&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://stackoverflow.com/questions/72932940/failed-to-initialize-nvml-unknown-error-in-docker-after-few-hours&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1723651251783&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;Failed to initialize NVML: Unknown Error in Docker after Few hours&quot; data-og-description=&quot;I am having interesting and weird issue. When I start docker container with gpu it works fine and I see all the gpus in docker. However, few hours or few days later, I can't use gpus in docker. Whe...&quot; data-og-host=&quot;stackoverflow.com&quot; data-og-source-url=&quot;https://stackoverflow.com/questions/72932940/failed-to-initialize-nvml-unknown-error-in-docker-after-few-hours&quot; data-og-url=&quot;https://stackoverflow.com/questions/72932940/failed-to-initialize-nvml-unknown-error-in-docker-after-few-hours&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/dGl3tm/hyWOjuKbNA/tr3hvbeskO0DVyKlXHCNLK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316&quot;&gt;&lt;a href=&quot;https://stackoverflow.com/questions/72932940/failed-to-initialize-nvml-unknown-error-in-docker-after-few-hours&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://stackoverflow.com/questions/72932940/failed-to-initialize-nvml-unknown-error-in-docker-after-few-hours&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/dGl3tm/hyWOjuKbNA/tr3hvbeskO0DVyKlXHCNLK/img.png?width=316&amp;amp;height=316&amp;amp;face=0_0_316_316');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;Failed to initialize NVML: Unknown Error in Docker after Few hours&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;I am having interesting and weird issue. When I start docker container with gpu it works fine and I see all the gpus in docker. However, few hours or few days later, I can't use gpus in docker. Whe...&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;stackoverflow.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;</description>
      <category>DevOps/Docker</category>
      <category>docker failed to initialize nvml: unknown error</category>
      <category>failed to initialize nvml: unknown error</category>
      <author>scii</author>
      <guid isPermaLink="true">https://nomad-programmer.tistory.com/543</guid>
      <comments>https://nomad-programmer.tistory.com/543#entry543comment</comments>
      <pubDate>Thu, 15 Aug 2024 00:53:17 +0900</pubDate>
    </item>
    <item>
      <title>[DevOps/Docker] Docker Credential Pass 설정 (feat. RockyLinux9)</title>
      <link>https://nomad-programmer.tistory.com/542</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Docker Hub (&lt;a href=&quot;https://app.docker.com/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://app.docker.com/&lt;/a&gt;) 에 push &amp;amp; pull 을 하려면, 먼저 로그인을 해야 한다. 따라서 다음과 같이 로그인을 진행할 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1723569440842&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ docker login&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위의 명령을 실행하면 ID &amp;amp; Password를 입력하라고 나온다. 계정 정보가 맞다면 로그인이 될텐데.. 그러면, `$HOME/.docker/config.json` 파일에 해당 비밀번호가 base64로 인코딩 돼어 다음과 같이 입력된다.&amp;nbsp;&lt;/p&gt;
&lt;pre id=&quot;code_1723569785648&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
  &quot;auths&quot; {
    &quot;https://index.docker.io/v1/: {
      &quot;author&quot;: &quot;&amp;lt;base64로 인코딩 된 암호&amp;gt;&quot;
    }
  }
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이곳에 비밀번호가 자동으로 들어가는 이유는, 다음 login할 때 조금 더 편하게 로그인하기 위함이다. 이것이 장점이 될 수 있지만 단점이 될 수 있다. 그것도 아주 치명적으로...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것이 왜 치명적인 단점이냐면, config.json에 적힌 비밀번호를 decoding 해주면 비밀번호가 나오기 때문이다. 이렇게...&lt;/p&gt;
&lt;pre id=&quot;code_1723569851434&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;$ echo &amp;lt;base64로 인코딩 된 암호&amp;gt; | base64 --decode&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 사용해야 한다. docker-credential-pass를!&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Docker Credential Pass 란?&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker login 명령으로 credential한 정보가 평문으로 저장되는 것이 아닌 credential storage를 이용해 암호화한 정보로 저장될 수 있도록 도와준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/docker/docker-credential-helpers&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/docker/docker-credential-helpers&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1723570002276&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;GitHub - docker/docker-credential-helpers: Programs to keep Docker login credentials safe by storing in platform keystores&quot; data-og-description=&quot;Programs to keep Docker login credentials safe by storing in platform keystores - docker/docker-credential-helpers&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/docker/docker-credential-helpers&quot; data-og-url=&quot;https://github.com/docker/docker-credential-helpers&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/fZ0Db/hyWOfS7WjI/k9HKhzKfIUjkp8V4ghZkGK/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/docker/docker-credential-helpers&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/docker/docker-credential-helpers&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/fZ0Db/hyWOfS7WjI/k9HKhzKfIUjkp8V4ghZkGK/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;GitHub - docker/docker-credential-helpers: Programs to keep Docker login credentials safe by storing in platform keystores&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Programs to keep Docker login credentials safe by storing in platform keystores - docker/docker-credential-helpers&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;따라서 사용하지 않을 이유가 없다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style1&quot; /&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;b&gt;Docker Credential Pass 적용 방법&lt;/b&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;저자는 rocky linux 9에서 진행하였다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;1. pass 설치&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;먼저 pass 패키지를 설치해야 한다. pass는 linux에서 패스워드를 안전하게 관리하는 유틸리티이다.&lt;/p&gt;
&lt;pre id=&quot;code_1723570462670&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;sudo dnf install pass&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;2. GPG 키 생성&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pass는 GPG 키를 사용해 비밀번호를 암호화한다. 그래서 먼저 GPG 키를 생성해야 한다.&lt;/p&gt;
&lt;pre id=&quot;code_1723570753361&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;gpg --generate-key&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;키 생성 과정에서 이름, 이메일, 암호 등을 입력하라고 할 것이다. 원하는 정보를 입력하고 키 생성을 한다.&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;3. pass 초기화&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;GPG 키 생성 후, pass를 초기화한다. 초기화할 때, GPG 키의 이메일 주소를 사용한다.&lt;/p&gt;
&lt;pre id=&quot;code_1723570885163&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;pass init &quot;이메일 주소&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;4. docker-credential-pass 설치&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker에서 pass를 credential store로 사용하기 위해 docker-credential-pass를 설치해야 한다. 다음의 링크를 통해 다운 받도록 하자.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/docker/docker-credential-helpers/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://github.com/docker/docker-credential-helpers/releases&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1723570964806&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;Releases &amp;middot; docker/docker-credential-helpers&quot; data-og-description=&quot;Programs to keep Docker login credentials safe by storing in platform keystores - docker/docker-credential-helpers&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/docker/docker-credential-helpers/releases&quot; data-og-url=&quot;https://github.com/docker/docker-credential-helpers/releases&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/z9icW/hyWOnDBtOd/9X9rt6DspDasgw1fklHK9k/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/docker/docker-credential-helpers/releases&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/docker/docker-credential-helpers/releases&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/z9icW/hyWOnDBtOd/9X9rt6DspDasgw1fklHK9k/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;Releases &amp;middot; docker/docker-credential-helpers&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Programs to keep Docker login credentials safe by storing in platform keystores - docker/docker-credential-helpers&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;저자는 여기서 &quot;docker-credential-pass-v0.8.2.linux-amd64&quot; 이것을 다운 받았다. (현재 기준 최신 버전이 0.8.2 라서 이것을 받음)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음의 명령들을 통하여 시스템에서 사용할 수 있도록 만들자.&lt;/p&gt;
&lt;pre id=&quot;code_1723571183822&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;chmod +x docker-credential-pass-v0.8.2.linux-amd64

sudo mv docker-credential-pass-v0.8.2.linux-amd64 /usr/local/bin/docker-credential-pass&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;5. Docker 설정&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;docker의 설정 파일인 $HOME/.docker/config.json 파일을 열고, 다음과 같이 수정하자. 또한 &amp;nbsp;docker에 login이 되어 있다면 logout부터 진행하고 하는 것이 좋을 것이다.&lt;/p&gt;
&lt;pre id=&quot;code_1723571373582&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker logout&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;로그아웃을 했다면 $HOME/.docker/config.json 파일을 아래와 같이 입력한 후 저장한다.&lt;/p&gt;
&lt;pre id=&quot;code_1723571289346&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;{
    &quot;credsStore&quot;: &quot;pass&quot;
}&lt;/code&gt;&lt;/pre&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;b&gt;6. Docker Login&lt;/b&gt;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 docker에 다시 로그인하여 credential이 안전하게 저장되는 지 확인한다.&lt;/p&gt;
&lt;pre id=&quot;code_1723571457494&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker login&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;544&quot; data-origin-height=&quot;193&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tUrEp/btsI3VOAYac/OfQtCihrpsWujN5wbKb9l1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tUrEp/btsI3VOAYac/OfQtCihrpsWujN5wbKb9l1/img.png&quot; data-alt=&quot;안전하게 login을 진행한 모습&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tUrEp/btsI3VOAYac/OfQtCihrpsWujN5wbKb9l1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtUrEp%2FbtsI3VOAYac%2FOfQtCihrpsWujN5wbKb9l1%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;544&quot; height=&quot;193&quot; data-origin-width=&quot;544&quot; data-origin-height=&quot;193&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;안전하게 login을 진행한 모습&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로, docker-credential-pass가 잘 관리하고 싶은지 확인하고 싶다면, 다음과 같은 명령을 통해 확인할 수 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1723571512714&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;docker-credential-pass list&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러면 관리중인 목록을 볼 수 있다.&lt;/p&gt;</description>
      <category>DevOps/Docker</category>
      <category>docker-credential-pass</category>
      <category>도커 credential</category>
      <category>도커 login</category>
      <category>도커 자격증명</category>
      <author>scii</author>
      <guid isPermaLink="true">https://nomad-programmer.tistory.com/542</guid>
      <comments>https://nomad-programmer.tistory.com/542#entry542comment</comments>
      <pubDate>Wed, 14 Aug 2024 02:31:01 +0900</pubDate>
    </item>
  </channel>
</rss>