<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>JHYeom's Blog</title><link>https://blog.jhyeom.com/</link><description>Recent content on JHYeom's Blog</description><generator>Hugo</generator><language>ko_KR</language><managingEditor>okyjh2014@gmail.com (JHYeom)</managingEditor><webMaster>okyjh2014@gmail.com (JHYeom)</webMaster><lastBuildDate>Sun, 05 Jun 2022 00:00:00 +0000</lastBuildDate><atom:link href="https://blog.jhyeom.com/index.xml" rel="self" type="application/rss+xml"/><item><title>[RxJS] 핵심 개념 및 활용예시</title><link>https://blog.jhyeom.com/rxjs-00/</link><pubDate>Sun, 05 Jun 2022 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/rxjs-00/</guid><description>&lt;h2 id="rxjs-용어"&gt;RxJS 용어&lt;/h2&gt;&#10;&lt;p&gt;자주 사용할 개념 몇 개만 정리. 자세한건 &lt;a href="https://rxjs.dev/guide/glossary-and-semantics"&gt;여기&lt;/a&gt; 참고.&lt;/p&gt;&#10;&lt;h3 id="observable"&gt;Observable&lt;/h3&gt;&#10;&lt;p&gt;primary type in RxJS.&lt;/p&gt;&#10;&lt;h3 id="observer"&gt;Observer&lt;/h3&gt;&#10;&lt;p&gt;consumer&lt;/p&gt;&#10;&lt;p&gt;consists of &lt;code&gt;next&lt;/code&gt; &lt;code&gt;error&lt;/code&gt; &lt;code&gt;complete&lt;/code&gt;. if missing one of these elements, the observer is partial observer&lt;/p&gt;&#10;&lt;h3 id="subscription"&gt;Subscription&lt;/h3&gt;&#10;&lt;p&gt;a contract where a consumer is observing values pushed by a producer&lt;/p&gt;&#10;&lt;h3 id="subject"&gt;Subject&lt;/h3&gt;&#10;&lt;p&gt;special type of observable that allows values to be &lt;strong&gt;multicasted&lt;/strong&gt; to many observers&lt;/p&gt;</description></item><item><title>[NestJS] Google OAuth2 사용</title><link>https://blog.jhyeom.com/google-oauth2-nestjs/</link><pubDate>Sat, 09 Apr 2022 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/google-oauth2-nestjs/</guid><description>&lt;h2 id="목표"&gt;목표&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;NestJS 에서 Google OAuth2 로 API Authentication 구현하기&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="gcp-oauth-설정"&gt;GCP OAuth 설정&lt;/h2&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;기존 프로젝트를 사용하거나 새 프로젝트를 하나 생성&lt;/p&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code&gt;API 및 서비스&lt;/code&gt; 로 가서 OAuth 동의 화면을 구성&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;OAuth 동의 화면: 앱 정보를 적당히 넣고, 배포를 위해 도메인 주소를 넣는다.&lt;/li&gt;&#10;&lt;li&gt;범위: 적당히 민감하지 않는 범위로 설정해 준다. &lt;em&gt;추후 이 부분 Authorization 도 학습 필요!&lt;/em&gt;&lt;/li&gt;&#10;&lt;li&gt;테스트 사용자: 본인 구글 이메일 주소를 넣는다.&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;&lt;code&gt;사용자 인증 정보&lt;/code&gt; 로 가서 OAuth 2.0 클라이언트 ID 를 구성해 준다.&lt;/p&gt;</description></item><item><title>[FOSS] Caddy Web Server 소개</title><link>https://blog.jhyeom.com/caddy-server/</link><pubDate>Tue, 05 Apr 2022 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/caddy-server/</guid><description>&lt;h2 id="caddy-server"&gt;Caddy Server&lt;/h2&gt;&#10;&lt;div style="display: flex; align-items: center; justify-content: center; "&gt;&#10; &lt;div class="gh-card gh-medium" data-repo="caddyserver/caddy"&gt;&lt;/div&gt;&#10;&lt;/div&gt;&#10;&lt;p&gt;Caddy 는 Golang 으로 작성된 웹 서버로, 자동으로 ssl 인증서를 발급 / 갱신하는 기능을 탑재하고 있다.&lt;/p&gt;&#10;&lt;h2 id="특징"&gt;특징&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Caddyfile 이라는 자체 파일 형식을 사용하여 웹 서버의 동작 정의 (nginx 의 nginx.conf 파일처럼 자체 형식 사용)&lt;/li&gt;&#10;&lt;li&gt;Let&amp;rsquo;s Encrypt 를 사용하여 자동으로 ssl 인증서를 발급 / 갱신&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="활용-예시들"&gt;활용 예시들&lt;/h2&gt;&#10;&lt;h3 id="준비"&gt;준비&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;Caddy 설치: &lt;a href="https://caddyserver.com/docs/install"&gt;설치 가이드&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;VSCode 의 Caddyfile 용 확장 설치 (추천): &lt;a href="https://marketplace.visualstudio.com/items?itemName=zamerick.vscode-caddyfile-syntax"&gt;Caddyfile Syntax&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;현재 접속중인 네트워크의 공인 IP 주소를 본인이 소유한 Domain 의 DNS Record (A/AAAA) 로 등록&lt;/li&gt;&#10;&lt;li&gt;현재 접속중인 네트워크가 라우터 아래에 구성된 사설망인 경우 DMZ 혹은 포트포워딩 설정&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="public-reverse-proxy-with-ssl-certificate"&gt;public reverse proxy with ssl certificate&lt;/h3&gt;&#10;&lt;p&gt;아래의 간단한 reverse proxy 인프라를 구성해 보자. 추가로 rotate 가 되는 access log 도 로그 디렉터리에 남겨보도록 한다.&lt;/p&gt;</description></item><item><title>M1 arm 환경에서 nodejs native module 빌드 문제 해결 (error: unsupported load command)</title><link>https://blog.jhyeom.com/m1-node-native-module-build-issue/</link><pubDate>Mon, 14 Mar 2022 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/m1-node-native-module-build-issue/</guid><description>&lt;h2 id="문제-상황"&gt;문제 상황&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://github.com/awslabs/aws-crt-nodejs"&gt;&lt;code&gt;aws-crt&lt;/code&gt;&lt;/a&gt; 같은 native nodejs module 설치 시 &lt;code&gt;nodejs native module 설치 시 /opt/homebrew/opt/llvm/bin/objcopy: error: unsupported load command (cmd=0x80000034)&lt;/code&gt; 에러 발생&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;yarn add aws-crt&lt;/code&gt; 실행 결과&lt;/li&gt;&#10;&lt;li&gt;&lt;img src="https://jhycontents.s3.ap-northeast-2.amazonaws.com/blog/images/m1-node-native-module-build-issue.png" alt="error log"&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="환경"&gt;환경&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;m1 용 homebrew 사용&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ brew --prefix&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/opt/homebrew&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;m1 용 llvm 설치됨&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ which clang&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/opt/homebrew/opt/llvm/bin/clang&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ file /opt/homebrew/opt/llvm/bin/clang&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/opt/homebrew/opt/llvm/bin/clang: Mach-O 64-bit executable arm64&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;arm64 용 nodejs v16.14.0 사용&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ which node&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/Users/homejh/.nvm_arm/versions/node/v16.14.0/bin/node&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ file /Users/homejh/.nvm_arm/versions/node/v16.14.0/bin/node&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/Users/homejh/.nvm_arm/versions/node/v16.14.0/bin/node: Mach-O 64-bit executable arm64&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="해결-방법"&gt;해결 방법&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;문제 원인이 되는 &lt;strong&gt;objcopy&lt;/strong&gt; 를 없앤다&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ mv &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;brew --prefix&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/opt/llvm/bin/objcopy&amp;#34;&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#66d9ef"&gt;$(&lt;/span&gt;brew --prefix&lt;span style="color:#66d9ef"&gt;)&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/opt/llvm/bin/objcopy.backup&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="해결-과정"&gt;해결 과정&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;빌드시 &lt;code&gt;node_modules/aws-crt/build/&lt;/code&gt; 아래에 cmake 를 활용해 빌드 파일이 생성됨 -&amp;gt; 실패&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;$ cd node_modules/aws-crt/build/ &amp;amp;&amp;amp; grep &amp;quot;objcopy&amp;quot; -ir .&lt;/code&gt; 로 objcopy 명령어 찾기&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;node_modules/aws-crt/build/CMakeFiles/aws-crt-nodejs.dir/build.make&lt;/code&gt; 파일에서 objcopy 명령어를 사용하는 부분이 두 군데 등장&#10;&lt;ul&gt;&#10;&lt;li&gt;objcopy 를 사용하는 빌드 명령어에 사용 불가능한 옵션(&lt;code&gt;--add-gnu-debuglink&lt;/code&gt;)이 있는 것을 확인 (mac 용 objcopy 에는 없는 것으로 보임)&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;code&gt;node_modules&lt;/code&gt; 디렉터리를 지운 후 x86 nodejs 로 다시 해당 모듈 설치 시 별 문제 없이 빌드되는것을 확인&lt;/li&gt;&#10;&lt;li&gt;x86 용 brew 로 설치한 llvm 의 bin 디렉터리(&lt;code&gt;&amp;quot;$(brew --prefix)/opt/llvm/bin/&amp;quot;&lt;/code&gt;)엔 objcopy 가 없는 것 확인&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;u&gt;arm brew 로 설치한 llvm 과 x86으로 설치한 llvm 의 bin 디렉터리 구성이 다르다!&lt;/u&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;cmake 로 빌드 파일 생성시 &lt;u&gt;objcopy 명령어가 시스템에 존재하는지 여부에 상관 없이 빌드가 가능&lt;/u&gt;하도록 구현되어 있을 것으로 추정&lt;/li&gt;&#10;&lt;li&gt;objcopy 명령어의 이름을 바꾸고 native module 설치(빌드) 시도해보니 성공!&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>M1 맥 터미널에서 명령어 하나로 arm / x86 환경 전환해가며 사용하기</title><link>https://blog.jhyeom.com/m1-bash-setup/</link><pubDate>Fri, 04 Mar 2022 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/m1-bash-setup/</guid><description>&lt;h2 id="목표"&gt;목표&lt;/h2&gt;&#10;&lt;p&gt;M1 맥북 터미널에서 간단한 명령어 &lt;strong&gt;&lt;code&gt;intel&lt;/code&gt;&lt;/strong&gt;, &lt;strong&gt;&lt;code&gt;arm&lt;/code&gt;&lt;/strong&gt; 으로 터미널 아키텍처와 환경 전환해가며 사용 가능하게 구성&lt;/p&gt;&#10;&lt;h2 id="작업-환경"&gt;작업 환경&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;하드웨어&#10;&lt;ul&gt;&#10;&lt;li&gt;MBP M1 Max 14인치&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;터미널 에뮬레이터&#10;&lt;ul&gt;&#10;&lt;li&gt;iterm2&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;시스템 기본 쉘&#10;&lt;ul&gt;&#10;&lt;li&gt;bash&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;기존에 사용하던 intel 맥에서 &lt;code&gt;마이그레이션 지원&lt;/code&gt; 을 활용해 새 맥으로 데이터를 모두 옯긴 후 작업하였습니다.&#10;&lt;ul&gt;&#10;&lt;li&gt;즉, 초기 환경이 마이그레이션 작업 완료 직후 &lt;code&gt;/usr/local/bin/brew&lt;/code&gt; 경로에 intel 용 homebrew 가 설치되어 있는 환경입니다.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="작업-전-준비사항"&gt;작업 전 준비사항&lt;/h2&gt;&#10;&lt;h3 id="rosetta2-설치"&gt;rosetta2 설치&lt;/h3&gt;&#10;&lt;p&gt;터미널에서 아래 명령어를 입력하여 rosetta2 를 설치합니다.&lt;/p&gt;</description></item><item><title>[Typescript] Readonly object 의 key-value 를 뒤집은 타입 만들기</title><link>https://blog.jhyeom.com/ts-invert-kv-type/</link><pubDate>Sat, 16 Jan 2021 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/ts-invert-kv-type/</guid><description>&lt;h2 id="todo"&gt;TODO&lt;/h2&gt;&#10;&lt;p&gt;아래와 같은 ReadOnly Object 의 Key 와 Value 를 뒤집은 타입 만들기.&lt;/p&gt;&#10;&lt;h3 id="기존-readonly-object"&gt;기존 Readonly Object&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;const&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;originalObject&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; {&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;key1&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;value1&amp;#39;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;key2&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;value2&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;} &lt;span style="color:#66d9ef"&gt;as&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;const&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="만들고자-하는-타입-위-객체의-key-value-를-뒤집은-객체"&gt;만들고자 하는 타입 (위 객체의 Key-Value 를 뒤집은 객체)&lt;/h3&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-typescript" data-lang="typescript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;{&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;value1&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;key1&amp;#39;&lt;/span&gt;,&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; &lt;span style="color:#a6e22e"&gt;value2&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;key2&amp;#39;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;};&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="how-to"&gt;How TO&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://www.typescriptlang.org/docs/handbook/utility-types.html"&gt;Utility Type&lt;/a&gt; 를 활용해 아래와 같이 &lt;code&gt;InvertKeyValue&lt;/code&gt; 타입을 만들어 준다.&lt;/p&gt;</description></item><item><title>[Typescript] 빌드 디렉터리의 구조 변경 없이 소스 디렉터리 밖의 모듈 가져오기</title><link>https://blog.jhyeom.com/ts-build-import/</link><pubDate>Sat, 05 Dec 2020 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/ts-build-import/</guid><description>&lt;h2 id="문제-상황"&gt;문제 상황&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;tsconfig.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;package.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;data/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;myData.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;src/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;index.ts&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;위와 같은 프로젝트 구조에서 index.ts 코드가 아래와 같을 경우 빌드 디렉터리의 구조가 이상하게 바뀐다.&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-tsx" data-lang="tsx"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;import&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;myData&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;from&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;../myData.json&amp;#39;&lt;/span&gt;;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#a6e22e"&gt;console&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;log&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;JSON&lt;/span&gt;.&lt;span style="color:#a6e22e"&gt;stringify&lt;/span&gt;(&lt;span style="color:#a6e22e"&gt;myData&lt;/span&gt;));&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;dist/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;index.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;data/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;&#9;myData.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;src/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;&#9;index.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;기대하는 빌드 디렉터리 구조는 아래와 같다.&lt;/p&gt;</description></item><item><title>Lerna 환경에서 typeorm 이 ormconfig 를 찾지 못하는 문제 해결법</title><link>https://blog.jhyeom.com/lerna-typeorm/</link><pubDate>Tue, 01 Dec 2020 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/lerna-typeorm/</guid><description>&lt;h2 id="문제-원인"&gt;문제 원인&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;lerna mono repo 를 사용하여 디렉터리 구조가 아래와 같을 때 typeorm 에서 &lt;code&gt;ormconfig.js&lt;/code&gt; 를 특정하지 못하는 문제&lt;/p&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;packages/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;my-package-a/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;&#9;tsconfig.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;&#9;package.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;&#9;ormconfig.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;&#9;src/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;&#9;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;my-package-b/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;&#9;tsconfig.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;&#9;package.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;&#9;ormconfig.js&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;&#9;src/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;&#9;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;&#9;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;tsconfig.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;package.json&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#9;...&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/li&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;typeorm 은 npm 스크립트를 실행한 루트 디렉터리에서 ormconfig 를 찾는다.&lt;/p&gt;</description></item><item><title>JWT.00 - 소개</title><link>https://blog.jhyeom.com/jwt-00/</link><pubDate>Sun, 13 Sep 2020 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/jwt-00/</guid><description>&lt;h2 id="jwt-"&gt;JWT ?&lt;/h2&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;JSON Web Token (JWT) is an open standard (&lt;a href="https://tools.ietf.org/html/rfc7519"&gt;RFC 7519&lt;/a&gt;) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. - &lt;a href="https://jwt.io/introduction/"&gt;Introduction to JSON Web Tokens (jwt.io)&lt;/a&gt; -&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;JWT (JSON Web Token) 은 토큰 자체에 json 객체 형태로 정보(클레임, claim)를 담고 있는 인증 표준. 데이터의 위/변조를 방지하기 위해 클레임을 HMAC, RSA Signature 등의 방식으로 서명 후 토큰에 포함시켜둔 것이 특징이다.&lt;/p&gt;</description></item><item><title>DIYA 3기 리크루팅 (~ 20.04.10)</title><link>https://blog.jhyeom.com/DIYA-3rd-recruiting/</link><pubDate>Sun, 22 Mar 2020 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/DIYA-3rd-recruiting/</guid><description>&lt;p&gt;2018년도부터 활동하고 있는 머신 러닝 연합동아리 DIYA 에서 3기 회원을 모집합니다. (~ 4월 10일)&lt;/p&gt;&#10;&lt;h2 id="diya-소개"&gt;DIYA 소개&lt;/h2&gt;&#10;&lt;div class="item"&gt;&#10; &lt;div class="item__image"&gt;&#10; &lt;img class="image image--lg shadow" src="https://jhycontents.s3.ap-northeast-2.amazonaws.com/blog/images/diya-logo.svg" alt="diya logo"/&gt;&#10; &lt;/div&gt;&#10; &amp;nbsp;&#10; &lt;div class="item__content"&gt;&#10; &lt;div class="item__header"&gt;&#10; &lt;h3&gt;DIYA&lt;/h3&gt;&#10; &lt;/div&gt;&#10; &lt;div class="item__description"&gt;&#10; &lt;p&gt;&#10; DIYA (&lt;font color="IndianRed" style="font-weight:bold;"&gt;D&lt;/font&gt;o &lt;font color="IndianRed" style="font-weight:bold;"&gt;I&lt;/font&gt;t &lt;font color="IndianRed" style="font-weight:bold;"&gt;Y&lt;/font&gt;ourself &lt;font color="IndianRed" style="font-weight:bold;"&gt;A&lt;/font&gt;I) 는 인공지능(머신러닝/딥러닝)에 관심있는 사람들이 모여 자유롭게 프로젝트를 진행하는 연합동아리입니다.&#10; &lt;ul&gt;&#10; &lt;li&gt;&lt;a href="https://blog.diyaml.com" target="_blank"&gt;DIYA 공식 블로그&lt;/a&gt;&lt;/li&gt;&#10; &lt;li&gt;&lt;a href="https://gitlab.diyaml.com" target="_blank"&gt;DIYA Gitlab&lt;/a&gt;&lt;/li&gt;&#10; &lt;/ul&gt;&#10; &lt;/p&gt;</description></item><item><title>gnome troubleshooting</title><link>https://blog.jhyeom.com/gnome-ts/</link><pubDate>Sun, 08 Dec 2019 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/gnome-ts/</guid><description>&lt;p&gt;gdm 사용시 발생하는 여러 문제들과 해결 방법 정리&lt;/p&gt;&#10;&lt;h2 id="activities-hot-corner-설정"&gt;activities hot corner 설정&lt;/h2&gt;&#10;&lt;h3 id="배포판"&gt;배포판&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;fedora:31&lt;/li&gt;&#10;&lt;li&gt;ubuntu:18.04&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="문제-설명"&gt;문제 설명&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;gnome 데스크탑에서 마우스가 좌 상단 디스플레이에 닿으면 activities 개요 보기로 화면이 전환됨&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="발생-원인"&gt;발생 원인&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;gnome-session 처음 사용 시 기본적으로 hot corner를 사용하게 되어 있음&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="해결-방법"&gt;해결 방법&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;패키지 관리자로 &lt;strong&gt;gnome-tweaks&lt;/strong&gt; 설치&lt;/li&gt;&#10;&lt;li&gt;gnome-tweaks(기능 개선) 실행 후 &lt;strong&gt;최상위 표시줄&lt;/strong&gt; 탭에서 &lt;strong&gt;활동 개요 핫 코너&lt;/strong&gt; 비활성화&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;h3 id="참고-자료"&gt;참고 자료&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://askubuntu.com/questions/701592/how-do-i-disable-activities-hot-corner-in-gnome-shell/1097397"&gt;How do I disable &amp;lsquo;Activities&amp;rsquo; hot corner in GNOME shell?&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>linux installation checklist</title><link>https://blog.jhyeom.com/linux_fresh_install/</link><pubDate>Sun, 08 Dec 2019 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/linux_fresh_install/</guid><description>&lt;p&gt;리눅스를 설치할 때 항상 반복하는 작업들&lt;/p&gt;&#10;&lt;h2 id="root-user-비밀번호-설정"&gt;root user 비밀번호 설정&lt;/h2&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo passwd&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="패키지-관리자-저장소를-지역-미러로-설정"&gt;패키지 관리자 저장소를 지역 미러로 설정&lt;/h2&gt;&#10;&lt;h3 id="fedora"&gt;fedora&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;fastest mirror 플러그인 활성화&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ echo &lt;span style="color:#e6db74"&gt;&amp;#34;fastestmirror=True&amp;#34;&lt;/span&gt; | sudo tee -a /etc/dnf/dnf.conf &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; sudo dnf makecache --refresh&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="centos"&gt;centos&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;/etc/yum.repos.d/&lt;/code&gt;에 아래의 기존 repo들은 압축 후, 카카오 미러용 repo파일 추가&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[base]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;name=CentOS-$releasever - Base&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;baseurl=http://ftp.daumkakao.com/centos/$releasever/os/$basearch/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gpgcheck=0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[updates]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;name=CentOS-$releasever - Updates&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;baseurl=http://ftp.daumkakao.com/centos/$releasever/updates/$basearch/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gpgcheck=0&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;[extras]&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;name=CentOS-$releasever - Extras&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;baseurl=http://ftp.daumkakao.com/centos/$releasever/extras/$basearch/&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;gpgcheck=0&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="ubuntu"&gt;ubuntu&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;카카오 미러 사용&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo sed -i &lt;span style="color:#e6db74"&gt;&amp;#39;s/archive.ubuntu.com/mirror.kakao.com/g&amp;#39;&lt;/span&gt; /etc/apt/sources.list&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h2 id="소프트웨어-설치"&gt;소프트웨어 설치&lt;/h2&gt;&#10;&lt;h3 id="공통"&gt;공통&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;sshd&lt;/li&gt;&#10;&lt;li&gt;git&lt;/li&gt;&#10;&lt;li&gt;vim&lt;/li&gt;&#10;&lt;li&gt;wget&lt;/li&gt;&#10;&lt;li&gt;curl&lt;/li&gt;&#10;&lt;li&gt;htop&lt;/li&gt;&#10;&lt;li&gt;tmux&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="배포마다-다름"&gt;배포마다 다름&lt;/h3&gt;&#10;&lt;h4 id="centos-1"&gt;centos&lt;/h4&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;epel-release&lt;/li&gt;&#10;&lt;li&gt;&amp;lsquo;Development Tools&amp;rsquo;&#10;&lt;code&gt;sudo yum -y groupinstall 'Development Tools'&lt;/code&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="fedora-1"&gt;fedora&lt;/h4&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&amp;lsquo;Development Tools&amp;rsquo;&#10;&lt;code&gt;sudo dnf -y groupinstall 'Development Tools'&lt;/code&gt;&lt;/li&gt;&#10;&lt;li&gt;gcc-c++ &lt;em&gt;(for g++)&lt;/em&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h4 id="ubuntu-1"&gt;ubuntu&lt;/h4&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&amp;lsquo;build-essential&amp;rsquo;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="gui-환경"&gt;gui 환경&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;code (vscode)&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://computingforgeeks.com/install-visual-studio-code-on-fedora/"&gt;fedora&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://linuxize.com/post/how-to-install-visual-studio-code-on-ubuntu-18-04/"&gt;ubuntu&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="자주-쓰는-소프트웨어"&gt;자주 쓰는 소프트웨어&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;docker&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://docs.docker.com/compose/install/#install-compose"&gt;docker-compose&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;chrome&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.if-not-true-then-false.com/2010/install-google-chrome-with-yum-on-fedora-red-hat-rhel/"&gt;fedora | centos&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo dnf install -y fedora-workstation-repositories&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo dnf config-manager --set-enabled google-chrome&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ sudo dnf install -y google-chrome-stable&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://webnautes.tistory.com/1184"&gt;ubuntu&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://docs.conda.io/en/latest/miniconda.html"&gt;miniconda3&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;xrdp&lt;/li&gt;&#10;&lt;li&gt;snapd&lt;/li&gt;&#10;&lt;li&gt;cmake&lt;/li&gt;&#10;&lt;li&gt;ctags (exuberant-ctags)&lt;/li&gt;&#10;&lt;li&gt;python3&lt;/li&gt;&#10;&lt;li&gt;python3-pip&lt;/li&gt;&#10;&lt;li&gt;nano&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="selinux-끄기"&gt;selinux 끄기&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;/etc/selinux/config&lt;/code&gt; 파일을 열고 &lt;strong&gt;SELINUX=disabled&lt;/strong&gt; 로 수정&lt;/li&gt;&#10;&lt;li&gt;reboot&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="방화벽-zone-설정"&gt;방화벽 zone 설정&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;(gui 툴 사용이 가능한 경우) firewall-config 설치하여 사용&lt;/li&gt;&#10;&lt;li&gt;집에서 쓰는경우 home&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="ssh-설정"&gt;ssh 설정&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;code&gt;.ssh&lt;/code&gt; 디렉터리 만들기. 권한 700&lt;/li&gt;&#10;&lt;li&gt;키 생성&#10;&lt;ul&gt;&#10;&lt;li&gt;다른 기기에 접속하기 위한 기본 키, git ssh 용 키&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ssh-keygen -t rsa -b &lt;span style="color:#ae81ff"&gt;2048&lt;/span&gt; -C &lt;span style="color:#e6db74"&gt;&amp;#34;Default &lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;HOSTNAME&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;s &lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;USER&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt; key&amp;#34;&lt;/span&gt; -f &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;HOME&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/.ssh/id_rsa&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ ssh-keygen -t rsa -b &lt;span style="color:#ae81ff"&gt;2048&lt;/span&gt; -C &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;HOSTNAME&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt; &lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;USER&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;s git key&amp;#34;&lt;/span&gt; -f &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;HOME&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/.ssh/&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;HOSTNAME&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;_git_key&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;config 파일 생성. 권한 400&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-fallback" data-lang="fallback"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Host yourhostname&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Hostname 192.168.0.1&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; IdentityFile ~/.ssh/id_rsa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; User remote_user&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Port 22&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Host github.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; hostname github.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; identityfile ~/.ssh/${HOSTNAME}_git_key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Host gitlab.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; hostname gitlab.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; identityfile ~/.ssh/${HOSTNAME}_git_key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Host bitbucket.org&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; hostname bitbucket.org&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; identityfile ~/.ssh/${HOSTNAME}_git_key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Host gitlab.diyaml.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; hostname gitlab.diyaml.com&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; user git&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; identityfile ~/.ssh/${HOSTNAME}_git_key&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Host yoursecondhostname&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Hostname 192.168.0.2&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; IdentityFile ~/.ssh/id_rsa&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; User remote_user&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; Port 22&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; IdentitiesOnly yes&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; PreferredAuthentications publickey&#10;&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; LocalForward 8080 127.0.0.1:8080&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;팁&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ chmod u+w &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;HOME&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/.ssh/config&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; vim &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;HOME&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/.ssh/config&amp;#34;&lt;/span&gt; &lt;span style="color:#f92672"&gt;&amp;amp;&amp;amp;&lt;/span&gt; chmod u-w &lt;span style="color:#e6db74"&gt;&amp;#34;&lt;/span&gt;&lt;span style="color:#e6db74"&gt;${&lt;/span&gt;HOME&lt;span style="color:#e6db74"&gt;}&lt;/span&gt;&lt;span style="color:#e6db74"&gt;/.ssh/config&amp;#34;&lt;/span&gt;&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;공개 키를 접속을 원하는 호스트에 등록&lt;/p&gt;</description></item><item><title>xrdp troubleshooting</title><link>https://blog.jhyeom.com/xrdp-ts/</link><pubDate>Sun, 08 Dec 2019 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/xrdp-ts/</guid><description>&lt;p&gt;xrdp 서버를 구성했을 때 발생하는 문제들과 해결 방법 정리&lt;/p&gt;&#10;&lt;h2 id="gnome-session으로-접속-시-번거로운-인증-창-띄우는-문제"&gt;gnome-session으로 접속 시 번거로운 인증 창 띄우는 문제&lt;/h2&gt;&#10;&lt;h3 id="배포판"&gt;배포판&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;fedora:31&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="문제-설명"&gt;문제 설명&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;xrdp에 gnome-session으로 접속 시 &amp;ldquo;시스템 저장소를 새로 고치려면 인증해야 합니다&amp;rdquo; 혹은 &amp;ldquo;색상 관리 장치를 만들려면 인증이 필요합니다&amp;rdquo; 등의 메시지를 띄움&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="발생-원인"&gt;발생 원인&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;polkit 정책&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h3 id="해결-방법"&gt;해결 방법&lt;/h3&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&lt;code&gt;/usr/share/polkit-1/actions&lt;/code&gt; 디렉터리에서 인증 메시지를 띄우는 정책을 찾는다&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;아래 코드를 응용&#10;&lt;script src="https://gist.github.com/zhixian001/c0285ef9ac31336ddadd4f476370b79a.js?file=find-polkit-message.sh"&gt;&lt;/script&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;인증 메시지를 띄우는 action의 id를 기록&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="2"&gt;&#10;&lt;li&gt;&lt;code&gt;/etc/polkit-1/localauthority/50-local.d&lt;/code&gt; 디렉터리에 적당한 이름의 pkla 파일을 만들어 위에서 기록한 action id들을 추가. 파일 형식은 아래 샘플 참고&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;sample&#10;&lt;script src="https://gist.github.com/zhixian001/c0285ef9ac31336ddadd4f476370b79a.js?file=rdp-allow.pkla"&gt;&lt;/script&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;ol start="3"&gt;&#10;&lt;li&gt;polkit 서비스 재시작&lt;/li&gt;&#10;&lt;/ol&gt;&#10;&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;sudo systemctl restart polkit&#10;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;h3 id="참고-자료"&gt;참고 자료&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://c-nergy.be/blog/?p=12073"&gt;xRDP – The Infamous “Authentication Required to Create Managed Color Device” Explained&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://c-nergy.be/blog/?p=12043"&gt;RDP – How to Fix the Infamous system crash popups in Ubuntu 18.04 (and previous versions)&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>WSL 활성화 방법</title><link>https://blog.jhyeom.com/WSL/</link><pubDate>Thu, 28 Feb 2019 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/WSL/</guid><description>&lt;p&gt;&lt;a href="https://ko.wikipedia.org/wiki/%EB%A6%AC%EB%88%85%EC%8A%A4%EC%9A%A9_%EC%9C%88%EB%8F%84%EC%9A%B0_%ED%95%98%EC%9C%84_%EC%8B%9C%EC%8A%A4%ED%85%9C"&gt;리눅스용 윈도우 하위 시스템&lt;/a&gt;을 소개한다.&lt;/p&gt;&#10;&lt;h2 id="설치활성화-방법"&gt;설치(활성화) 방법&lt;/h2&gt;&#10;&lt;p&gt;Windows10 사용자만 사용할 수 있으며, aniversary update 업데이트 이후 빌드에서만 찾을 수 있다.&lt;/p&gt;&#10;&lt;ol&gt;&#10;&lt;li&gt;&#10;&lt;p&gt;[ 윈도우 버튼 -&amp;gt; 설정 -&amp;gt; 앱 및 기능 ] 에서 우측의 [ 프로그램 및 기능 ] 선택.&lt;/p&gt;</description></item><item><title>About</title><link>https://blog.jhyeom.com/about/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/about/</guid><description>&lt;div id="content-root"&gt;&lt;/div&gt;&#10;&lt;script type="text/javascript" src="https://blog.jhyeom.com/assets/javascripts/bundle.js" charset="utf-8"&gt;&lt;/script&gt;</description></item><item><title>Archive</title><link>https://blog.jhyeom.com/archive/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>okyjh2014@gmail.com (JHYeom)</author><guid>https://blog.jhyeom.com/archive/</guid><description/></item></channel></rss>