<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>정신 바짝</title>
    <link>https://mabb.tistory.com/</link>
    <description>부딪히며 배우자!

(이모티콘 홍보 : 카카오톡 귀여움을 포기한 토끼)</description>
    <language>ko</language>
    <pubDate>Fri, 26 Jun 2026 17:50:27 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>mabb</managingEditor>
    <image>
      <title>정신 바짝</title>
      <url>https://tistory1.daumcdn.net/tistory/2941881/attach/d3cc7bd5e9994517bb4f3dda8ef2afe7</url>
      <link>https://mabb.tistory.com</link>
    </image>
    <item>
      <title>[작업] 내 서버에 SSL 인증서 달기 -1 (Let's Encrypt, certbot, 가비아)</title>
      <link>https://mabb.tistory.com/623</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;계획은 다음과 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. nginx로 80/443 서비스 포트를 오픈한다.(공유기 포트포워드 설정)&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 80 포트는 443 포트로 포워딩하고&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. web1.javajava.co.kr , web2.javajava.co.kr 등으로 nginx에서 분기를 해줄 것이다. web1은 포트폴리오용, web2는 개인 개발 배포용으로 생각하고 있다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 먼저 수동으로 ssl 적용을 할 것이다. 이때 ssl 수동 발급 절차를 면밀히 관찰 및 기록한다. 특히 가비아 웹 사이트에서 도메인 관리를 설정하는 부분은 WireShark 및 개발자 도구로 패킷과 쿠키 등을 잘 관찰 및 기록해 둔다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 4의 과정을 자동화한다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;조사한 바에 의하면 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;Let's Encrypt&lt;/b&gt;&lt;span style=&quot;color: #000000;&quot;&gt;라는&lt;/span&gt;&lt;/span&gt; CA(인증 기관)를 통해 내 도메인의 인증서를 발급받을 수 있는데 이 때 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;certbot&lt;/b&gt;&lt;/span&gt;이라는 클라이언트 툴로 명령어를 입력하여 인증서를 발급 받을 수 있다. 명령어를 수행하면 내 서버에 인증서가 다운로드되니까 이를 이용하여 nginx나 tomcat 등에 적용해 주면 되는 것이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;CA 입장에서는 도메인 소유자 등 도메인에 대한 관리 권한이 있는 사람에게만 인증서를 발급해주어야 한다. 그렇다면 어떻게 도메인의 관리 권한을 증명할 수 있을까?&lt;/p&gt;
&lt;figure id=&quot;og_1742704023363&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;Let&amp;rsquo;s Encrypt에서 인증서를 받으면 Google 서버는 ACME 표준에 정의된 대로 &amp;ldquo;도전&amp;quot;을 사용하여 해당 인증서의 도메인 이름을 제어하는지 확인합니다. 대부분의 경우 이 유효성 검사는 당신의 ACME 클&quot; data-og-host=&quot;letsencrypt.org&quot; data-og-source-url=&quot;https://letsencrypt.org/ko/docs/challenge-types/&quot; data-og-url=&quot;https://letsencrypt.org/ko/docs/challenge-types/&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bFGOmB/hyYvg3HMp9/fnNY89CjMMwKo0XleHVdl0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630&quot;&gt;&lt;a href=&quot;https://letsencrypt.org/ko/docs/challenge-types/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://letsencrypt.org/ko/docs/challenge-types/&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bFGOmB/hyYvg3HMp9/fnNY89CjMMwKo0XleHVdl0/img.png?width=1200&amp;amp;height=630&amp;amp;face=0_0_1200_630');&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;Let&amp;rsquo;s Encrypt에서 인증서를 받으면 Google 서버는 ACME 표준에 정의된 대로 &amp;ldquo;도전&quot;을 사용하여 해당 인증서의 도메인 이름을 제어하는지 확인합니다. 대부분의 경우 이 유효성 검사는 당신의 ACME 클&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;letsencrypt.org&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p id=&quot;http-01-챌린지&quot; style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;HTTP-01 챌린지&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;DNS-01 챌린지&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;주로 사용하는 게 위의 두 가지인데 인증서를 발급받으려는 사람은 챌린지를 수행해서 도메인의 관리자임을 증명해야 인증서를 발급받을 수 있다.&amp;nbsp;HTTP-01 챌린지를 통과하려면 웹서버 경로에 전달받은 특정 파일을 배치할 수 있어야 한다. 그 후 해당 경로에 대한 '요청'을 통해 검증을 받는 것이다. DNS-01 챌린지를 통과하려면 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;도메인의 TXT레코드&lt;/b&gt;&lt;b&gt;에 값을 추가할 수 있어야 한다.&lt;/b&gt; &lt;/span&gt;그 후 해당 도메인 TXT레코드에 대한 검증을 받는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;여기서 문제가 되는 부분은 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;와일드카드 인증서&lt;/b&gt;&lt;/span&gt;이다. HTTP-01 챌린지로는 와일드카드 인증서를 발급받을 수 없다고 한다. DNS-01 챌린지를 통과해야만 와일드카드 인증서를 발급받을 수 있으므로 &lt;a href=&quot;https://web1.javajava.co.kr&quot;&gt;https://web1.javajava.co.kr&lt;/a&gt; , &lt;a href=&quot;https://web2.javajava.co.kr를&quot;&gt;https://web2.javajava.co.kr를&lt;/a&gt; 사용할 수 있다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1856&quot; data-origin-height=&quot;1282&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bumVjF/btsMUWvoXn5/VWUv61DdWPoxrWxAp4frR0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bumVjF/btsMUWvoXn5/VWUv61DdWPoxrWxAp4frR0/img.png&quot; data-alt=&quot;HTTP-01챌린지는 와일드 카드 인증서를 발급 할 수 없다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bumVjF/btsMUWvoXn5/VWUv61DdWPoxrWxAp4frR0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbumVjF%2FbtsMUWvoXn5%2FVWUv61DdWPoxrWxAp4frR0%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;550&quot; height=&quot;380&quot; data-origin-width=&quot;1856&quot; data-origin-height=&quot;1282&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;HTTP-01챌린지는 와일드 카드 인증서를 발급 할 수 없다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;TXT 레코드를 추가/삭제하는 API를 제공하는지 &lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;가비아에 문의를 남겨 놓고 답변을 기다리는 중이다. 위의 계획은 제공하는 API가 없을 것이라는 가정 하에 방법을 찾아보려는 시도이다.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;618&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/m0EaL/btsMTcM57Z9/pUEVKksZpWFZcnsHr3HmT1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/m0EaL/btsMTcM57Z9/pUEVKksZpWFZcnsHr3HmT1/img.png&quot; data-alt=&quot;API가 있으면 정말 좋겠다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/m0EaL/btsMTcM57Z9/pUEVKksZpWFZcnsHr3HmT1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fm0EaL%2FbtsMTcM57Z9%2FpUEVKksZpWFZcnsHr3HmT1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;453&quot; height=&quot;220&quot; data-origin-width=&quot;1272&quot; data-origin-height=&quot;618&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;API가 있으면 정말 좋겠다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #000000; text-align: start;&quot;&gt;와일드카드 무료 인증서 갱신 방법을 찾는다면 편리해질 것이고 방법을 찾지 못하다면 3개월마다 인증서 갱신 작업을 해주어야 한다. 과연 와일드카드 인증서 자동 갱신을 해낼 수 있을까?&amp;nbsp; (다음 포스팅에서 계속)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/작업 기록용</category>
      <category>Certbot</category>
      <category>https</category>
      <category>Let's Encrypt</category>
      <category>SSL</category>
      <category>가비아</category>
      <category>와일드카드인증서</category>
      <author>mabb</author>
      <guid isPermaLink="true">https://mabb.tistory.com/623</guid>
      <comments>https://mabb.tistory.com/623#entry623comment</comments>
      <pubDate>Sun, 23 Mar 2025 13:52:22 +0900</pubDate>
    </item>
    <item>
      <title>[홈서버] 개발자라면 홈 서버를 직접 구축해봐야하는 이유 (인텔 N150)</title>
      <link>https://mabb.tistory.com/622</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;집에 서버를 두고 싶다는 생각만 1년 정도하다가 미니 PC를 구입했다. 인텔 N150 베어본을 151,900원에 구입하고 256GB SSD 34,500원, 16GB 메모리 48,900원으로 235,300원이 들었다. ( 네이버포인트 9,520원 쌓였으니 &lt;b&gt;225,780원 들었다.&lt;/b&gt; )&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;라즈베리파이를 사서 각종 센서를 달아보며 노는 것도 생각해보았으나 미니PC가 가격대비 더 합리적이라는 생각이 들었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;956&quot; data-origin-height=&quot;332&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cvBp8p/btsMSRPPTBH/Pa4BHpgMdG5A3E2FrU1gWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cvBp8p/btsMSRPPTBH/Pa4BHpgMdG5A3E2FrU1gWK/img.png&quot; data-alt=&quot;삼성 DDR4 16GB 3200 SO-DIMM PC4 램, 48,900원&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cvBp8p/btsMSRPPTBH/Pa4BHpgMdG5A3E2FrU1gWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcvBp8p%2FbtsMSRPPTBH%2FPa4BHpgMdG5A3E2FrU1gWK%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;385&quot; height=&quot;134&quot; data-origin-width=&quot;956&quot; data-origin-height=&quot;332&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;삼성 DDR4 16GB 3200 SO-DIMM PC4 램, 48,900원&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bbYScO/btsMSDcZu7e/kaAJJBjKsnUgW3KdHhKY80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bbYScO/btsMSDcZu7e/kaAJJBjKsnUgW3KdHhKY80/img.png&quot; data-alt=&quot;삼성 256GBNVMe M.2 SSD, 34,500원&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bbYScO/btsMSDcZu7e/kaAJJBjKsnUgW3KdHhKY80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbbYScO%2FbtsMSDcZu7e%2FkaAJJBjKsnUgW3KdHhKY80%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;426&quot; height=&quot;115&quot; data-origin-width=&quot;1156&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;삼성 256GBNVMe M.2 SSD, 34,500원&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1188&quot; data-origin-height=&quot;328&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MikIn/btsMSnInPoJ/b9P21YfwrkrDdtWhK4EmPK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MikIn/btsMSnInPoJ/b9P21YfwrkrDdtWhK4EmPK/img.png&quot; data-alt=&quot;BEELINK EQ14 미니PC 인텔코어 N150 베어본, 151,900원&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MikIn/btsMSnInPoJ/b9P21YfwrkrDdtWhK4EmPK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMikIn%2FbtsMSnInPoJ%2Fb9P21YfwrkrDdtWhK4EmPK%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;493&quot; height=&quot;136&quot; data-origin-width=&quot;1188&quot; data-origin-height=&quot;328&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;BEELINK EQ14 미니PC 인텔코어 N150 베어본, 151,900원&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;1242&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LgirC/btsMUpYCiBO/OGTkKIXgrmRBJ4P3FI1FN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LgirC/btsMUpYCiBO/OGTkKIXgrmRBJ4P3FI1FN0/img.png&quot; data-alt=&quot;2,012원/ 1,542원/ 5,966원 -&amp;amp;gt; 9,520원&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LgirC/btsMUpYCiBO/OGTkKIXgrmRBJ4P3FI1FN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLgirC%2FbtsMUpYCiBO%2FOGTkKIXgrmRBJ4P3FI1FN0%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;346&quot; height=&quot;907&quot; data-origin-width=&quot;474&quot; data-origin-height=&quot;1242&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;2,012원/ 1,542원/ 5,966원 -&amp;gt; 9,520원&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 서버가 생기니 누가 시키지 않아도 자연스럽게 이것저것 하게 되는데 이 과정에서 많이 배울 수 있었다. 그리고 앞으로 해볼 것들을 생각하면 참 기대가 된다. 이를 리스트로 정리해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[나만의 홈 서버를 만들어보면 좋은 점들]&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. 가격 대비 성능을 비교하는 눈이 생긴다&lt;/b&gt; &lt;br /&gt;&amp;nbsp; &amp;nbsp;: 내 돈을 쓰기 때문, 공부가 아닌 쇼핑의 관점에서 열심히 찾아보게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. 간단한 부품 조립을 직접 해보게 된다&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;: SSD 및 메모리 장착&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3. Linux 설치 직접 해보게 된다&lt;/b&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp;: 부팅 USB 세팅부터 OS 기본 설치까지 경험할 수 있다. (나는 SSD카드가 아까워서 ubuntu를 설치했다.)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;4. 디스크 세팅을 직접 해보게 된다&lt;/b&gt;&lt;br /&gt;&amp;nbsp; : 파티셔닝 -&amp;gt; 포매팅 -&amp;gt; NVM 등, SSD를 하나 더 사서 RAID구성을 하고 싶다는 생각도 하고 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;5. 공유기 세팅을 다 건드려보게 된다&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;6. 도메인 관리를 하게 된다.&lt;/b&gt;&lt;br /&gt;&amp;nbsp; : 고정적으로 내 서버에 접근하고 싶다는 욕심이 생긴다. 메인 도메인에 DDNS 도메인을 연결하여 유동 공인 IP에 대응하고자 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;7. VM, 컨테이너를 사용하게 된다.&lt;/b&gt;&lt;br /&gt;&amp;nbsp; : 무분별한 로컬 설치로 나의 서버가 지저분해지는 것을 볼 수 없다. 용도를 확실하게 정해놓고 깔끔하게 쓰고 싶어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;8. 보안에 철저해진다.&lt;/b&gt;&lt;br /&gt;&amp;nbsp; : 모든 포트는 막아야 한다. 열린 포트는 최소화하고 SSL은 필수이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;9. 자동화에 대한 욕심이 생긴다.&lt;/b&gt;&lt;br /&gt;&amp;nbsp; :와일드카드 무료 인증서를 자동으로 갱신하고자 조사 중이다. 가비아가 도메인 관리 API 기능을 제공한다면 수월한텐데 안된다면 우회 방법을 찾고자 한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;10. 나만의 서비스를 만들고 싶다는 욕구가 생긴다.&lt;/b&gt;&lt;br /&gt;&amp;nbsp; :나의 서버를 활용하여 웹 서비스와 포트폴리오 페이지를 올리고 싶다는 생각이 든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;11. 각종 서버 구축에 대한 욕심이 생긴다.&lt;/b&gt;&lt;br /&gt;&amp;nbsp; :웹 용, DB용, 개발 용, CI/CD용, 원격 데스크탑 용 등...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;12. 컴퓨팅 자원을 효율적으로 쓰고 싶어 진다.&lt;/b&gt;&lt;br /&gt;&amp;nbsp; : 내 돈 내 산 서버이기 때문.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;13. 나만의 아카이브를 만들고 싶어진다.&lt;/b&gt;&lt;br /&gt;&amp;nbsp; : NAS역할을 할 smb를 만든다거나 코드 아카이브용 깃 셀프 호스팅을 한다거나..&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결론) 홈 서버를 사면 하고 싶은 것들이 많아져 배우는 것도 많고 재밌다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/작업 기록용</category>
      <category>n150</category>
      <category>미니PC</category>
      <category>인텔</category>
      <category>홈서버</category>
      <author>mabb</author>
      <guid isPermaLink="true">https://mabb.tistory.com/622</guid>
      <comments>https://mabb.tistory.com/622#entry622comment</comments>
      <pubDate>Fri, 21 Mar 2025 23:15:40 +0900</pubDate>
    </item>
    <item>
      <title>[개발] vm 관련  명령어 정리(정리중)</title>
      <link>https://mabb.tistory.com/621</link>
      <description>&lt;h4 data-ke-size=&quot;size20&quot;&gt;nmcli(NetworkManager CLI)에서의 개념&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- device(network interface): 물리 또는 가상의 네트워크 인터페이스&lt;br /&gt;&lt;span style=&quot;font-family: -apple-system, BlinkMacSystemFont, 'Helvetica Neue', 'Apple SD Gothic Neo', Arial, sans-serif; letter-spacing: 0px;&quot;&gt;- connection : L2 및 L3 네트워크 설정 집합&lt;br /&gt;&lt;br /&gt;(이해)&lt;br /&gt;-&amp;gt; 하나의 device 는 여러개의 connection을 가질 수 있다.&lt;br /&gt;-&amp;gt; 하나의 device 는 한 개의 활성 connection을 가질 수 있다.&lt;br /&gt;-&amp;gt; 하나의 connection은 하나의 device에 설정된다.&lt;br /&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;네트워크 브릿지 관련 명령어&lt;/h4&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;# nmcli connection add type bridge con-name br0 ifname br0&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;# nmcli c add type wifi slave-type bridge con-name br0-wifi ifname wlo1&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;# nmcli dev status&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h4 style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size20&quot;&gt;nmcli wifi 연결&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# nmcli d wifi list&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# nmcli d wifi connect {SSID} password {PASSWORD}&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&lt;br /&gt;관련 설치&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;# &lt;/span&gt;apt install &lt;br /&gt;qemu-kvm &lt;/span&gt;&lt;span&gt;&lt;b&gt;libvirt&lt;/b&gt;&lt;/span&gt;&lt;span&gt;-daemon-system &lt;/span&gt;&lt;span&gt;&lt;b&gt;libvirt&lt;/b&gt;&lt;/span&gt;&lt;span&gt;-clients bridge-utils vertinst vert-manager&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;&lt;span&gt;&amp;nbsp;# &lt;/span&gt;apt install &lt;br /&gt;qemu-kvm &lt;/span&gt;&lt;span&gt;&lt;b&gt;libvirt&lt;/b&gt;&lt;/span&gt;&lt;span&gt;-daemon-system &lt;/span&gt;&lt;span&gt;&lt;b&gt;libvirt&lt;/b&gt;&lt;/span&gt;&lt;span&gt;-daemon virtinst bridge-utils libosinfo-bin&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;virsh 관련 명령어&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# virsh&amp;nbsp; list [--all]&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# virsh shutdown {vmName | Id}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# virsh console {vmName | Id}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# virsh undefine {vmName}&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# virsh net-list&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;# virsh destroy {vmName | Id}&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;virt-install VM 생성 명령어&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span&gt;# virt-install --name mb-01 --memory 4096 --vcpus 2 --disk size=20 --graphics none --network network=default --console pty,target.type=virtio --autoconsole text --location /data/iso/Rocky-9.4-x86_64-minimal.iso&lt;/span&gt;&lt;/p&gt;
&lt;h4 data-ke-size=&quot;size20&quot;&gt;&amp;nbsp;&lt;/h4&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;------------------------진행 간 문제&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- Failed to add 'br0-wifi' connection: connection.controller: Slave connections need a valid 'controller' property&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;- nmcli로 브리지에 커넥션 추가하면 커넥션 disconnect되고 네트워크 안됨&lt;br /&gt;- brctl로 브리지에 addif하면&lt;br /&gt;&amp;nbsp;&amp;nbsp;&quot;can't&amp;nbsp;add&amp;nbsp;wlo1&amp;nbsp;to&amp;nbsp;bridge&amp;nbsp;br0:&amp;nbsp;Operation&amp;nbsp;not&amp;nbsp;supported&quot;&amp;nbsp;라고&amp;nbsp;뜸&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발</category>
      <author>mabb</author>
      <guid isPermaLink="true">https://mabb.tistory.com/621</guid>
      <comments>https://mabb.tistory.com/621#entry621comment</comments>
      <pubDate>Tue, 18 Mar 2025 20:19:02 +0900</pubDate>
    </item>
    <item>
      <title>[기타] 삼천포로 빠지는 과정</title>
      <link>https://mabb.tistory.com/620</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;1. 코틀린 기초 문법을 익히고자 함 (사이드 프로젝트를 위함)&lt;br&gt;2. Vim으로 .kt파일 작성&lt;br&gt;3. 코틀린 컴파일 방법을 알고자 함&lt;br&gt;4. kotlinc -help 로 방법을 찾아봄 -&amp;gt; kotlinc Test.kt 로 컴파일 진행하여 Hello Kotlin 해봄..&lt;br&gt;5. 문득 클래스패스 설정에 대해 찾아보고 싶어짐&lt;br&gt;6. javac 커맨드에서 --class-path 옵션을 찾아봄 -&amp;gt; 옵션을 주지 않으면 현재 디렉터리가 디폴트&lt;br&gt;7. 유저 클래스파일들과 '어노테이션 프로세서'들을 명시한다는 부분에서 '어노테이션 프로세서'가 궁금해짐&lt;br&gt;8. javax.annotation.processing와 javax.lang.model에 정의 되어있다고 함&lt;br&gt;9. rt.jar안에서 확인해보고자 함&lt;br&gt;10. jdk14.0.1 디렉터리 안에 rt.jar가 없음. src.zip을 확인해보아도 javax패키지를 못 찾겠음 (java8에는 rt.jar가 있음)&lt;br&gt;11. rt.jar에 대해 알아보려다 일단 원래 알아보던 것에 집중하고자 함&lt;br&gt;12. 인텔리제이 java17로 세팅된 프로젝트에서 소스 이동 기능으로 경로를 찾음 -&amp;gt; java.compiler 하위에 있었음&lt;br&gt;13. javax.annotation.processing.AbstractProcessor를 보고 있음&lt;br&gt;14. assert 키워드가 궁금해짐&lt;br&gt;15. 테스트 시점 (jvm의 enable assertion 옵션 , -ea) 에만 동작하는 코드로, 해당 시점에 true가 확실함을 단언할 때 사용하는 방법이라는 것을 알게 됨. true가 아니면 예외를 던진다. (prod에서는 -ea옵션을 주지 않으므로 테스트 목적의 코드인 것으로 이해)&amp;nbsp;&lt;br&gt;16. intelij에 jvm 옵션으로 -ea를 주고 assert를 간단하게 테스트 해봄&lt;br&gt;17. assert 키워드를 알게 되어 뿌듯함&lt;/p&gt;&lt;figure data-ke-type=&quot;opengraph&quot; data-og-title=&quot;The javac Command&quot; data-ke-align=&quot;alignCenter&quot; data-og-description=&quot;Checks the switch blocks for fall-through cases and provides a warning message for any that are found. Fall-through cases are cases in a switch block, other than the last case in the block, whose code does not include a break statement, allowing code execu&quot; data-og-host=&quot;docs.oracle.com&quot; data-og-source-url=&quot;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html&quot; data-og-image=&quot;&quot; data-og-url=&quot;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html&quot;&gt;&lt;a href=&quot;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html&quot; target=&quot;_blank&quot; data-source-url=&quot;https://docs.oracle.com/en/java/javase/17/docs/specs/man/javac.html&quot;&gt;&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('')&quot;&gt; &lt;/div&gt;&lt;div class=&quot;og-text&quot;&gt;&lt;p class=&quot;og-title&quot;&gt;The javac Command&lt;/p&gt;&lt;p class=&quot;og-desc&quot;&gt;Checks the switch blocks for fall-through cases and provides a warning message for any that are found. Fall-through cases are cases in a switch block, other than the last case in the block, whose code does not include a break statement, allowing code execu&lt;/p&gt;&lt;p class=&quot;og-host&quot;&gt;docs.oracle.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;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2582&quot; data-origin-height=&quot;294&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bvPajg/btsMF4UJr97/NyJU5NyOc4ConxBRUiRE30/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bvPajg/btsMF4UJr97/NyJU5NyOc4ConxBRUiRE30/img.png&quot; data-alt=&quot;annotation procesor 키워드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bvPajg/btsMF4UJr97/NyJU5NyOc4ConxBRUiRE30/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbvPajg%2FbtsMF4UJr97%2FNyJU5NyOc4ConxBRUiRE30%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;2582&quot; height=&quot;294&quot; data-origin-width=&quot;2582&quot; data-origin-height=&quot;294&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;annotation procesor 키워드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2938&quot; data-origin-height=&quot;842&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vhR7m/btsMEcUIjlW/ebchkAuPGcMU9HhxYVWT7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vhR7m/btsMEcUIjlW/ebchkAuPGcMU9HhxYVWT7K/img.png&quot; data-alt=&quot;javax.annotation.processing&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vhR7m/btsMEcUIjlW/ebchkAuPGcMU9HhxYVWT7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvhR7m%2FbtsMEcUIjlW%2FebchkAuPGcMU9HhxYVWT7K%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;2938&quot; height=&quot;842&quot; data-origin-width=&quot;2938&quot; data-origin-height=&quot;842&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;javax.annotation.processing&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;806&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/3wAHc/btsMEEiXEjI/cS6ckdTUKu2juyiOrBuZFk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/3wAHc/btsMEEiXEjI/cS6ckdTUKu2juyiOrBuZFk/img.png&quot; data-alt=&quot;javax.annotation.processing&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/3wAHc/btsMEEiXEjI/cS6ckdTUKu2juyiOrBuZFk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F3wAHc%2FbtsMEEiXEjI%2FcS6ckdTUKu2juyiOrBuZFk%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;656&quot; height=&quot;806&quot; data-origin-width=&quot;656&quot; data-origin-height=&quot;806&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;javax.annotation.processing&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2918&quot; data-origin-height=&quot;410&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBPv6n/btsMF0x0QM7/DgifVnNFGnnC3XlOJfeF91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBPv6n/btsMF0x0QM7/DgifVnNFGnnC3XlOJfeF91/img.png&quot; data-alt=&quot;-enableassertions 옵션&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBPv6n/btsMF0x0QM7/DgifVnNFGnnC3XlOJfeF91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBPv6n%2FbtsMF0x0QM7%2FDgifVnNFGnnC3XlOJfeF91%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;2918&quot; height=&quot;410&quot; data-origin-width=&quot;2918&quot; data-origin-height=&quot;410&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;-enableassertions 옵션&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;1484&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/nQW1p/btsMD4vv4bf/lZbhsc6r6i9GkdTkdZz1W0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/nQW1p/btsMD4vv4bf/lZbhsc6r6i9GkdTkdZz1W0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/nQW1p/btsMD4vv4bf/lZbhsc6r6i9GkdTkdZz1W0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FnQW1p%2FbtsMD4vv4bf%2FlZbhsc6r6i9GkdTkdZz1W0%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;1520&quot; height=&quot;1484&quot; data-origin-width=&quot;1520&quot; data-origin-height=&quot;1484&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1556&quot; data-origin-height=&quot;1280&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2okle/btsMEq6d2mu/jSL6rjxfBBek4yqe1xp7F0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2okle/btsMEq6d2mu/jSL6rjxfBBek4yqe1xp7F0/img.png&quot; data-alt=&quot;intelij vm 옵션 -ea&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2okle/btsMEq6d2mu/jSL6rjxfBBek4yqe1xp7F0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2okle%2FbtsMEq6d2mu%2FjSL6rjxfBBek4yqe1xp7F0%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;1280&quot; data-origin-width=&quot;1556&quot; data-origin-height=&quot;1280&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;intelij vm 옵션 -ea&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;896&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/QCmma/btsMF4NW1nE/X6ANAlcHJbZeloXNyzIMd1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/QCmma/btsMF4NW1nE/X6ANAlcHJbZeloXNyzIMd1/img.png&quot; data-alt=&quot;assert 키워드 테스트&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/QCmma/btsMF4NW1nE/X6ANAlcHJbZeloXNyzIMd1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FQCmma%2FbtsMF4NW1nE%2FX6ANAlcHJbZeloXNyzIMd1%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;1468&quot; height=&quot;896&quot; data-origin-width=&quot;1468&quot; data-origin-height=&quot;896&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;assert 키워드 테스트&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/개발</category>
      <author>mabb</author>
      <guid isPermaLink="true">https://mabb.tistory.com/620</guid>
      <comments>https://mabb.tistory.com/620#entry620comment</comments>
      <pubDate>Sun, 9 Mar 2025 11:29:02 +0900</pubDate>
    </item>
    <item>
      <title>[작업] 홈 서버를 설치하던 중 SSD 135GB가 Free가 되었다.</title>
      <link>https://mabb.tistory.com/619</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[요약]&lt;br /&gt;1. 기본 설정으로 OS를 설치하면서 할당되지 않았던 135GB를 논리 볼륨으로 /data 경로에 마운트하였다.&lt;br /&gt;2. 파티셔닝-&amp;gt;물리볼륨-&amp;gt;볼륨그룹-&amp;gt;논리볼륨-&amp;gt;포매팅-&amp;gt;마운트의 과정 중 논리볼륨생성부터 마운트까지 진행하였다.&lt;br /&gt;3. PV, VG, LV의 개념을 잘 몰랐었는데 파티션을 직접 마운트 하는 것 보다 더 유연하게 설정을 바꿔줄 수 있는 것 같다.&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[관련 명령어]&lt;br /&gt;&lt;/b&gt;&lt;b&gt;#&amp;gt; fdisk -l&lt;br /&gt;#&amp;gt; vgdisplay&lt;br /&gt;#&amp;gt; lvdisplay&lt;br /&gt;#&amp;gt; pvdisplay&lt;br /&gt;#&amp;gt; lsblk&lt;br /&gt;#&amp;gt; mkfs.ext4&lt;br /&gt;#&amp;gt; mount&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[과정]&lt;br /&gt;&lt;/b&gt;새벽 2시 경 미니pc에 ubuntu-server를 설치하고 잠들었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;Screenshot 2025-03-02 at 15.15.07.png&quot; data-origin-width=&quot;2650&quot; data-origin-height=&quot;1174&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ddc5DP/btsMA4UZ57L/JEPoQ8p5D0Ia6LM7kK8680/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ddc5DP/btsMA4UZ57L/JEPoQ8p5D0Ia6LM7kK8680/img.png&quot; data-alt=&quot;Ubuntu 24.04.2 LTS / ubuntu-24.04.2-live-server-amd64&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ddc5DP/btsMA4UZ57L/JEPoQ8p5D0Ia6LM7kK8680/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fddc5DP%2FbtsMA4UZ57L%2FJEPoQ8p5D0Ia6LM7kK8680%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;659&quot; height=&quot;292&quot; data-filename=&quot;Screenshot 2025-03-02 at 15.15.07.png&quot; data-origin-width=&quot;2650&quot; data-origin-height=&quot;1174&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;Ubuntu 24.04.2 LTS / ubuntu-24.04.2-live-server-amd64&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아침에 설치가 되어 있길래 방화벽 및 네트워크 설정을 건드리고 disk를 확인해보았는데 ssd 볼륨이 작게 잡혀 있었다.&lt;br /&gt;ssd가 불량이었나? 라는 생각이 잠깐 들었는데 잠김에 ubuntu 설치를 모두 default 설정으로 진행했던게 기억 났다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;362&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/9BPBA/btsMA5Gn09N/mPwFzttxUpQ7ltVoHtfcX0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/9BPBA/btsMA5Gn09N/mPwFzttxUpQ7ltVoHtfcX0/img.png&quot; data-alt=&quot;df -h&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/9BPBA/btsMA5Gn09N/mPwFzttxUpQ7ltVoHtfcX0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F9BPBA%2FbtsMA5Gn09N%2FmPwFzttxUpQ7ltVoHtfcX0%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;1494&quot; height=&quot;362&quot; data-origin-width=&quot;1494&quot; data-origin-height=&quot;362&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;df -h&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssd는 256GB 정상적으로 인식되는 것으로 보인다. ssd가 3개의 파티션&lt;br /&gt;nvme0n1p1,&lt;br /&gt;nvme0n1p2,&lt;br /&gt;nvme0n1p3&lt;br /&gt;으로 나뉘어있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;692&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kOq0v/btsMBhs2WdJ/k6C34F5kE7LkD5004BtS0K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kOq0v/btsMBhs2WdJ/k6C34F5kE7LkD5004BtS0K/img.png&quot; data-alt=&quot;fdisk -l&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kOq0v/btsMBhs2WdJ/k6C34F5kE7LkD5004BtS0K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkOq0v%2FbtsMBhs2WdJ%2Fk6C34F5kE7LkD5004BtS0K%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;1570&quot; height=&quot;692&quot; data-origin-width=&quot;1570&quot; data-origin-height=&quot;692&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;fdisk -l&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그 중 nvme0n1p3 파티션의 경우 Size가 235.4G인데&amp;nbsp; 하위 논리볼륨이 '/' 루트 경로에 마운트 된 것을 확인 할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;262&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/buiAxk/btsMykyHfL6/KVzTKBPDk6EkoKR4W2Bnu1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/buiAxk/btsMykyHfL6/KVzTKBPDk6EkoKR4W2Bnu1/img.png&quot; data-alt=&quot;lsblk&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/buiAxk/btsMykyHfL6/KVzTKBPDk6EkoKR4W2Bnu1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbuiAxk%2FbtsMykyHfL6%2FKVzTKBPDk6EkoKR4W2Bnu1%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;1162&quot; height=&quot;262&quot; data-origin-width=&quot;1162&quot; data-origin-height=&quot;262&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;lsblk&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;논리볼륨 ubuntu-lv가 100GiB Size로 설정되어 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;634&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c1bdk5/btsMzR3pEkf/WbGaWGGj0FQLhVk3y4XKzK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c1bdk5/btsMzR3pEkf/WbGaWGGj0FQLhVk3y4XKzK/img.png&quot; data-alt=&quot;lvdisplay&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c1bdk5/btsMzR3pEkf/WbGaWGGj0FQLhVk3y4XKzK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc1bdk5%2FbtsMzR3pEkf%2FWbGaWGGj0FQLhVk3y4XKzK%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;1216&quot; height=&quot;634&quot; data-origin-width=&quot;1216&quot; data-origin-height=&quot;634&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;lvdisplay&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;물리볼륨(PV) /dev/nvme0n1p3 파티션의 Size가 235.42GiB이며 볼륨그룹(VG) 이름은 ubuntu-vg이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;432&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/VKXGB/btsMy3pvyn5/oaHfcxPgkNKfHqkh5NEdxk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/VKXGB/btsMy3pvyn5/oaHfcxPgkNKfHqkh5NEdxk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/VKXGB/btsMy3pvyn5/oaHfcxPgkNKfHqkh5NEdxk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FVKXGB%2FbtsMy3pvyn5%2FoaHfcxPgkNKfHqkh5NEdxk%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;1154&quot; height=&quot;432&quot; data-origin-width=&quot;1154&quot; data-origin-height=&quot;432&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 볼륨 그룹에서 Free PE 가 34668, Size가 135.42GiB인 것을 확인할 수 있다.&lt;br /&gt;*PE(Physical Extent, 물리 볼륨의 논리적 최소 단위로 보통 4MiB, 4,194,304bit)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;768&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/t56ts/btsMylxExDq/SAKQ9bF7KOBy96ndAlj3Vk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/t56ts/btsMylxExDq/SAKQ9bF7KOBy96ndAlj3Vk/img.png&quot; data-alt=&quot;vgdisplay&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/t56ts/btsMylxExDq/SAKQ9bF7KOBy96ndAlj3Vk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Ft56ts%2FbtsMylxExDq%2FSAKQ9bF7KOBy96ndAlj3Vk%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;1146&quot; height=&quot;768&quot; data-origin-width=&quot;1146&quot; data-origin-height=&quot;768&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;vgdisplay&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;귀한 SSD공간이 남게 되어 /data 에 마운트 해주고자 하였다.&lt;br /&gt;ubuntu-lv2라는 이름의 논리볼륨을 135.42GiB의 사이즈로 ubuntu-vg 볼륨그룹에 속하도록 생성해주었다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;118&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGbvfR/btsMz75ZN05/lMQAqCe60TfxYsPtkuLjT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGbvfR/btsMz75ZN05/lMQAqCe60TfxYsPtkuLjT0/img.png&quot; data-alt=&quot;lvcreate -n ubuntu-lv2 -L 135.42GiB ubuntu-vg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGbvfR/btsMz75ZN05/lMQAqCe60TfxYsPtkuLjT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGbvfR%2FbtsMz75ZN05%2FlMQAqCe60TfxYsPtkuLjT0%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;1196&quot; height=&quot;118&quot; data-origin-width=&quot;1196&quot; data-origin-height=&quot;118&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;lvcreate -n ubuntu-lv2 -L 135.42GiB ubuntu-vg&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 lvdisplay로 확인해보면 lv가 생긴 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;1240&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dENTMy/btsMyHNKBnm/HvnbGKWkIiYdpivTN1RCj1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dENTMy/btsMyHNKBnm/HvnbGKWkIiYdpivTN1RCj1/img.png&quot; data-alt=&quot;lvdisplay&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dENTMy/btsMyHNKBnm/HvnbGKWkIiYdpivTN1RCj1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdENTMy%2FbtsMyHNKBnm%2FHvnbGKWkIiYdpivTN1RCj1%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;1190&quot; height=&quot;1240&quot; data-origin-width=&quot;1190&quot; data-origin-height=&quot;1240&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;lvdisplay&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 lsblk 명령어로 확인해보면, nvme0n1p3 파티션 하위에&amp;nbsp; 논리볼륨(lvm)이 추가된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;302&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/sb2PA/btsMyjsXhPF/Pwuk3BUHzIoMohQK8pPeA1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/sb2PA/btsMyjsXhPF/Pwuk3BUHzIoMohQK8pPeA1/img.png&quot; data-alt=&quot;lsblk&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/sb2PA/btsMyjsXhPF/Pwuk3BUHzIoMohQK8pPeA1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fsb2PA%2FbtsMyjsXhPF%2FPwuk3BUHzIoMohQK8pPeA1%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;1184&quot; height=&quot;302&quot; data-origin-width=&quot;1184&quot; data-origin-height=&quot;302&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;lsblk&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 df -h 명령어로 확인해보았으나 마운트에는 변화가 없다. 이제 논리 볼륨에 파일 시스템을 설정해주고 (포매팅 해주고)&lt;br /&gt;마운트를 할 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;378&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c7wV9a/btsMyShkz5K/GgHsgLPEqvCK8JPMYdx8EK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c7wV9a/btsMyShkz5K/GgHsgLPEqvCK8JPMYdx8EK/img.png&quot; data-alt=&quot;df -h&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c7wV9a/btsMyShkz5K/GgHsgLPEqvCK8JPMYdx8EK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc7wV9a%2FbtsMyShkz5K%2FGgHsgLPEqvCK8JPMYdx8EK%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;1508&quot; height=&quot;378&quot; data-origin-width=&quot;1508&quot; data-origin-height=&quot;378&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;df -h&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mkfs.ext4 명령어로 /dev/ubuntu-vg/ubuntu-lv2 를 ext4 파일 시스템으로 포매팅 해준다.&lt;br /&gt;/dev: 디바이스&lt;br /&gt;./ubuntu-vg : 볼륨 그룹 디렉터리&lt;br /&gt;./ubuntu-lv2: 아까 생성한 논리 볼륨&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;156&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dvwEtD/btsMyrK8BWJ/wp9Tp00fGx7RMrsBurC4bk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dvwEtD/btsMyrK8BWJ/wp9Tp00fGx7RMrsBurC4bk/img.png&quot; data-alt=&quot;논리볼륨(lv)의 심링크는 무엇일까?&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dvwEtD/btsMyrK8BWJ/wp9Tp00fGx7RMrsBurC4bk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdvwEtD%2FbtsMyrK8BWJ%2Fwp9Tp00fGx7RMrsBurC4bk%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;1086&quot; height=&quot;156&quot; data-origin-width=&quot;1086&quot; data-origin-height=&quot;156&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;논리볼륨(lv)의 심링크는 무엇일까?&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1442&quot; data-origin-height=&quot;482&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/elj9rb/btsMAZzuxbj/gnJu0B0mQAA9UIDHsZsdfK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/elj9rb/btsMAZzuxbj/gnJu0B0mQAA9UIDHsZsdfK/img.png&quot; data-alt=&quot;mkfs.ext4 /dev/ubuntu-vg/ubuntu-lv2&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/elj9rb/btsMAZzuxbj/gnJu0B0mQAA9UIDHsZsdfK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Felj9rb%2FbtsMAZzuxbj%2FgnJu0B0mQAA9UIDHsZsdfK%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;1442&quot; height=&quot;482&quot; data-origin-width=&quot;1442&quot; data-origin-height=&quot;482&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;mkfs.ext4 /dev/ubuntu-vg/ubuntu-lv2&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;mkdir /data로 만들어 둔 디렉터리에 포매팅이 된 논리 볼륨을 마운트 한다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;56&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6dLeV/btsMAJp1wKF/14D5JwcqHhwh6lEVTTbTR1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6dLeV/btsMAJp1wKF/14D5JwcqHhwh6lEVTTbTR1/img.png&quot; data-alt=&quot;mount /dev/ubuntu-vg/ubuntu-lv2 /data&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6dLeV/btsMAJp1wKF/14D5JwcqHhwh6lEVTTbTR1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6dLeV%2FbtsMAJp1wKF%2F14D5JwcqHhwh6lEVTTbTR1%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;1144&quot; height=&quot;56&quot; data-origin-width=&quot;1144&quot; data-origin-height=&quot;56&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;mount /dev/ubuntu-vg/ubuntu-lv2 /data&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다시 확인해보면 잃어버렸던 135.4G가 /data에 할당된 것을 확인할 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;700&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/RrQmD/btsMBjEpqEb/ylUc8te1IqOunITZykSP10/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/RrQmD/btsMBjEpqEb/ylUc8te1IqOunITZykSP10/img.png&quot; data-alt=&quot;lsblk, df -h&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/RrQmD/btsMBjEpqEb/ylUc8te1IqOunITZykSP10/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FRrQmD%2FbtsMBjEpqEb%2FylUc8te1IqOunITZykSP10%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;1514&quot; height=&quot;700&quot; data-origin-width=&quot;1514&quot; data-origin-height=&quot;700&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;lsblk, df -h&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;position: absolute;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/작업 기록용</category>
      <category>DF</category>
      <category>lsblk</category>
      <category>lvdisplay</category>
      <category>pvdisplay</category>
      <category>SSD</category>
      <category>논리볼륨</category>
      <category>물리볼륨</category>
      <category>볼륨그룹</category>
      <category>파티셔닝</category>
      <category>포매팅</category>
      <author>mabb</author>
      <guid isPermaLink="true">https://mabb.tistory.com/619</guid>
      <comments>https://mabb.tistory.com/619#entry619comment</comments>
      <pubDate>Sun, 2 Mar 2025 17:23:42 +0900</pubDate>
    </item>
    <item>
      <title>[작업] 홈 네트워크를 구축하던 중 포트포워드가 안 되었다.</title>
      <link>https://mabb.tistory.com/618</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;홈네트워크에 VNC 및 SSH 서버를 구축하는 과정에서 벌어진 일.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[문제 상황 요약]&lt;/b&gt;&lt;br /&gt;1. Windows노트북에 TigerVNC설치 및 구동&lt;br /&gt;2. 맥북에서 내부IP로 VNC 접근 가능&lt;br /&gt;&lt;b&gt;3. 그러나 공인IP로는 불가능&lt;/b&gt;&lt;br /&gt;4. Ubuntu 미니PC에 SSHD 설치 및 구동&lt;br /&gt;5. 맥북에서 내부IP로는 SSH 접근 가능&lt;br /&gt;&lt;b&gt;6. 그러나 공인IP로는 불가능&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[단서]&lt;/b&gt;&lt;br /&gt;1. 열린포트를 확인하는 외부 사이트에서는 'open'상태로 확인됨. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;&lt;span&gt;&amp;nbsp;&lt;/span&gt;tcpdump로 패킷 덤프 시 내부 서버에 패킷 인입 확인&lt;/span&gt;&lt;br /&gt;2. 그러나 맥북에서는 공인IP로 아무리 해도 안 됨 (vnc, ssh, tcping, curl 포트 확인 등 불가, ping은 됨)&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[해결]&lt;/b&gt;&lt;br /&gt;1. 홈 네트워크 내부망에서 공인IP로 포트포워딩 서비스 포트로 접근할 경우 포트포워딩이 되지 않는 것으로 생각 해보았다.&lt;br /&gt;2. 실제로 외부 서버에서 공인IP의 서비스 포트로 접근하면 정상적으로 SSH와 VNC로 포트포워딩이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;[원인]&lt;br /&gt;1. 공유기에서 외부 -&amp;gt; 내부일 때 포트포워드가 된다.&lt;br /&gt;2. 홈 네트워크 내부망에서 공인IP로 접근하면 내부 -&amp;gt; 외부가 되어 포트포워드가 되지 않은 것.&amp;nbsp;&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;214&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IN4Vf/btsMBh0RRkA/sUbZvZ9ZKcCXg7SM5Vcs11/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IN4Vf/btsMBh0RRkA/sUbZvZ9ZKcCXg7SM5Vcs11/img.png&quot; data-alt=&quot;tracepath로 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IN4Vf/btsMBh0RRkA/sUbZvZ9ZKcCXg7SM5Vcs11/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIN4Vf%2FbtsMBh0RRkA%2FsUbZvZ9ZKcCXg7SM5Vcs11%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;1398&quot; height=&quot;214&quot; data-origin-width=&quot;1398&quot; data-origin-height=&quot;214&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;tracepath로 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;(열린 포트 확인 사이트)&lt;/p&gt;
&lt;figure id=&quot;og_1740894412507&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;Open Port Check Tool - Test Port Forwarding on Your Router&quot; data-og-description=&quot;&quot; data-og-host=&quot;www.yougetsignal.com&quot; data-og-source-url=&quot;https://www.yougetsignal.com/tools/open-ports/&quot; data-og-url=&quot;https://www.yougetsignal.com/tools/open-ports/&quot; data-og-image=&quot;&quot;&gt;&lt;a href=&quot;https://www.yougetsignal.com/tools/open-ports/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://www.yougetsignal.com/tools/open-ports/&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;Open Port Check Tool - Test Port Forwarding on Your Router&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.yougetsignal.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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;91&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gyy9u/btsMwrqXzi2/VHkRV1I6bD7w2IX7g1zyK1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gyy9u/btsMwrqXzi2/VHkRV1I6bD7w2IX7g1zyK1/img.png&quot; data-alt=&quot;VNC 포트 리스닝 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gyy9u/btsMwrqXzi2/VHkRV1I6bD7w2IX7g1zyK1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGyy9u%2FbtsMwrqXzi2%2FVHkRV1I6bD7w2IX7g1zyK1%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;970&quot; height=&quot;91&quot; data-origin-width=&quot;970&quot; data-origin-height=&quot;91&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VNC 포트 리스닝 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1818&quot; data-origin-height=&quot;897&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cMUrbu/btsMx2Ramsa/S5a3VAahr1ReSmhHFo9suk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cMUrbu/btsMx2Ramsa/S5a3VAahr1ReSmhHFo9suk/img.png&quot; data-alt=&quot;와이어샤크 패킷 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cMUrbu/btsMx2Ramsa/S5a3VAahr1ReSmhHFo9suk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcMUrbu%2FbtsMx2Ramsa%2FS5a3VAahr1ReSmhHFo9suk%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;1818&quot; height=&quot;897&quot; data-origin-width=&quot;1818&quot; data-origin-height=&quot;897&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;와이어샤크 패킷 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1486&quot; data-origin-height=&quot;951&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bF7K4d/btsMxJRLL1X/pzqkbFhxNwFQmaaCcvipG1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bF7K4d/btsMxJRLL1X/pzqkbFhxNwFQmaaCcvipG1/img.png&quot; data-alt=&quot;인바운드 방화벽 규칙&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bF7K4d/btsMxJRLL1X/pzqkbFhxNwFQmaaCcvipG1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbF7K4d%2FbtsMxJRLL1X%2FpzqkbFhxNwFQmaaCcvipG1%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;1486&quot; height=&quot;951&quot; data-origin-width=&quot;1486&quot; data-origin-height=&quot;951&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;인바운드 방화벽 규칙&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1215&quot; data-origin-height=&quot;108&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ccNHDN/btsMw2Ei92l/5qTGy2AeqKK4jwaA7M4YT0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ccNHDN/btsMw2Ei92l/5qTGy2AeqKK4jwaA7M4YT0/img.png&quot; data-alt=&quot;ping 허용&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ccNHDN/btsMw2Ei92l/5qTGy2AeqKK4jwaA7M4YT0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FccNHDN%2FbtsMw2Ei92l%2F5qTGy2AeqKK4jwaA7M4YT0%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;1215&quot; height=&quot;108&quot; data-origin-width=&quot;1215&quot; data-origin-height=&quot;108&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;ping 허용&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1802&quot; data-origin-height=&quot;871&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/wG6wH/btsMyEoJEv6/0JajLVkqJKaSZ18q8NeF7K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/wG6wH/btsMyEoJEv6/0JajLVkqJKaSZ18q8NeF7K/img.png&quot; data-alt=&quot;와이어샤크 핑 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/wG6wH/btsMyEoJEv6/0JajLVkqJKaSZ18q8NeF7K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FwG6wH%2FbtsMyEoJEv6%2F0JajLVkqJKaSZ18q8NeF7K%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;1802&quot; height=&quot;871&quot; data-origin-width=&quot;1802&quot; data-origin-height=&quot;871&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;와이어샤크 핑 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;615&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/6P1qp/btsMyHyWVQS/kKD86jKe8FxRD9ubwkvsM1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/6P1qp/btsMyHyWVQS/kKD86jKe8FxRD9ubwkvsM1/img.png&quot; data-alt=&quot;VNC 단에서의 연결 정책&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/6P1qp/btsMyHyWVQS/kKD86jKe8FxRD9ubwkvsM1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F6P1qp%2FbtsMyHyWVQS%2FkKD86jKe8FxRD9ubwkvsM1%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;520&quot; height=&quot;615&quot; data-origin-width=&quot;520&quot; data-origin-height=&quot;615&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;VNC 단에서의 연결 정책&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;278&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bqVhHZ/btsMyDDn0CN/91goQQKOjPzSDELPDs8cwk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bqVhHZ/btsMyDDn0CN/91goQQKOjPzSDELPDs8cwk/img.png&quot; data-alt=&quot;서비스 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bqVhHZ/btsMyDDn0CN/91goQQKOjPzSDELPDs8cwk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbqVhHZ%2FbtsMyDDn0CN%2F91goQQKOjPzSDELPDs8cwk%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;511&quot; height=&quot;278&quot; data-origin-width=&quot;511&quot; data-origin-height=&quot;278&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;서비스 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;577&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/YX3vX/btsMyV4UbB1/oigukrDVLUEN5Fn4elTvKk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/YX3vX/btsMyV4UbB1/oigukrDVLUEN5Fn4elTvKk/img.png&quot; data-alt=&quot;TigerVNC 서버 서비스 실행 확인&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/YX3vX/btsMyV4UbB1/oigukrDVLUEN5Fn4elTvKk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FYX3vX%2FbtsMyV4UbB1%2FoigukrDVLUEN5Fn4elTvKk%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;852&quot; height=&quot;577&quot; data-origin-width=&quot;852&quot; data-origin-height=&quot;577&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;TigerVNC 서버 서비스 실행 확인&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>개발/작업 기록용</category>
      <category>SSH</category>
      <category>tigervnc</category>
      <category>VNC</category>
      <category>미니PC</category>
      <category>홈 네트워크</category>
      <author>mabb</author>
      <guid isPermaLink="true">https://mabb.tistory.com/618</guid>
      <comments>https://mabb.tistory.com/618#entry618comment</comments>
      <pubDate>Sun, 2 Mar 2025 14:58:04 +0900</pubDate>
    </item>
    <item>
      <title>[개발]점이 사각형 안에 있는지 판단하기</title>
      <link>https://mabb.tistory.com/617</link>
      <description>&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;좌표 공간에 사각형을 그리고 점(Point)가 사각형의 내부에 있는지 외부에 있는지 판단하는 로직을 만들고자 하였다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;더짧게.gif&quot; data-origin-width=&quot;2992&quot; data-origin-height=&quot;1934&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bphNzt/btsMA7KOfYb/EPjUJF4L2MsjSkkqql2cw1/img.gif&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bphNzt/btsMA7KOfYb/EPjUJF4L2MsjSkkqql2cw1/img.gif&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bphNzt/btsMA7KOfYb/EPjUJF4L2MsjSkkqql2cw1/img.gif&quot; srcset=&quot;https://blog.kakaocdn.net/dn/bphNzt/btsMA7KOfYb/EPjUJF4L2MsjSkkqql2cw1/img.gif&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;2992&quot; height=&quot;1934&quot; data-filename=&quot;더짧게.gif&quot; data-origin-width=&quot;2992&quot; data-origin-height=&quot;1934&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1274&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bkuqcc/btsMAFnymAN/ZGCKhx2c8iPyNPHdVXkajk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bkuqcc/btsMAFnymAN/ZGCKhx2c8iPyNPHdVXkajk/img.png&quot; data-alt=&quot;&amp;amp;lt;canvas&amp;amp;gt; 태그 안에 구현&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bkuqcc/btsMAFnymAN/ZGCKhx2c8iPyNPHdVXkajk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbkuqcc%2FbtsMAFnymAN%2FZGCKhx2c8iPyNPHdVXkajk%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;345&quot; height=&quot;343&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1274&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;&amp;lt;canvas&amp;gt; 태그 안에 구현&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp;기존 회사에 있던 로직은 타겟 포인트의 x,y좌표가 사각형의 4개 꼭지점의 x,y좌표 사이에 있으면&amp;nbsp; 사각형 안에 점이 있다고 판단하였다. 이 로직이 제대로 동작하려면 축과 평행한 직각사각형이어야만 한다. 하지만 실제로 사용자가 그리는 사각형은 축과 평행하지 않을 수 있고 찌그러진 사각형일 수도 있다.&lt;br /&gt;&lt;br /&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;1158&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Nujbx/btsMzOeouv1/S5LLbHKMDFdvX80kvEyig1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Nujbx/btsMzOeouv1/S5LLbHKMDFdvX80kvEyig1/img.png&quot; data-alt=&quot;다시 고등 수학, 길벗 출판사&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Nujbx/btsMzOeouv1/S5LLbHKMDFdvX80kvEyig1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNujbx%2FbtsMzOeouv1%2FS5LLbHKMDFdvX80kvEyig1%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;232&quot; height=&quot;340&quot; data-origin-width=&quot;790&quot; data-origin-height=&quot;1158&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;다시 고등 수학, 길벗 출판사&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이 문제의 해결 방법은 다시 고등 수학이라는 책을 통해 알 수 있었다. 고등학교 시절 수학을 멀리하였으나 개발자가 되고 나서 논리력을 기른다는 관점에서 수학의 필요를 느꼈다. 그래서 중,고등학교 수학 교재와 함께 구매하여 틈틈이 보던 책이 이 책인데 명제부터 시작해서 삼각비나 벡터 같은 개념을 이해하기 쉽게 설명해주는 좋은 책이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;'벡터의 개념을 이용하면 사각형 안에 점이 있는지 확인 할 수 있지 않을까' 라는 생각에 벡터 챕터를 반복하여 읽어보았다. 그 중 '벡터의 분해'를 이용하면 될 것이라는 생각이 들었다. 사각형의 각 꼭지점을 원점으로 삼고 벡터P를 원점에 인접한 두 꼭지점으로 표현되는 벡터의 합으로 구하는 것이다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;벡터P = s벡터A + t벡터B&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;s또는 t가 음수라면, 벡터A 또는 벡터B의 역벡터가 더해진 것이므로 범위 바깥에 있다고 생각하는 것이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-03-01-17-17-21 001.jpeg&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;1050&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bMr8S9/btsMA7D1ChJ/TTLWX1HfjU7aOtIVvM4yR1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bMr8S9/btsMA7D1ChJ/TTLWX1HfjU7aOtIVvM4yR1/img.jpg&quot; data-alt=&quot;사각형ABCD와 점P가 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bMr8S9/btsMA7D1ChJ/TTLWX1HfjU7aOtIVvM4yR1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbMr8S9%2FbtsMA7D1ChJ%2FTTLWX1HfjU7aOtIVvM4yR1%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;376&quot; height=&quot;282&quot; data-filename=&quot;KakaoTalk_Photo_2025-03-01-17-17-21 001.jpeg&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;1050&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;사각형ABCD와 점P가 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 꼭지점을 순회하면서 기준 꼭지점을 원점(0,0)으로 보정한다. (인접 꼭지점과 P도 그만큼 평행이동)&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-03-01-17-17-21 002.jpeg&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;1050&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/psXBZ/btsMy1SCLPt/YdIWYKC7Q0Y0olwhi53i4K/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/psXBZ/btsMy1SCLPt/YdIWYKC7Q0Y0olwhi53i4K/img.jpg&quot; data-alt=&quot;A기준일 때 벡터P는 두 벡터의 합으로 표현이 가능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/psXBZ/btsMy1SCLPt/YdIWYKC7Q0Y0olwhi53i4K/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FpsXBZ%2FbtsMy1SCLPt%2FYdIWYKC7Q0Y0olwhi53i4K%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;442&quot; height=&quot;332&quot; data-filename=&quot;KakaoTalk_Photo_2025-03-01-17-17-21 002.jpeg&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;1050&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;A기준일 때 벡터P는 두 벡터의 합으로 표현이 가능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-03-01-17-17-21 003.jpeg&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;1050&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ek7LAh/btsMzPddA1P/XTooH0SkNddMrCkS1l8FCK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ek7LAh/btsMzPddA1P/XTooH0SkNddMrCkS1l8FCK/img.jpg&quot; data-alt=&quot;B기준일 때 벡터P는 두 벡터의 합으로 표현 가능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ek7LAh/btsMzPddA1P/XTooH0SkNddMrCkS1l8FCK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fek7LAh%2FbtsMzPddA1P%2FXTooH0SkNddMrCkS1l8FCK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;468&quot; height=&quot;351&quot; data-filename=&quot;KakaoTalk_Photo_2025-03-01-17-17-21 003.jpeg&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;1050&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;B기준일 때 벡터P는 두 벡터의 합으로 표현 가능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-03-01-17-17-22 005.jpeg&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;1050&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bIMve3/btsMALnGH7X/nDBpbcM2CYtd91Z1ku9kGK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bIMve3/btsMALnGH7X/nDBpbcM2CYtd91Z1ku9kGK/img.jpg&quot; data-alt=&quot;D기준일 때 벡터P는 -t벡터A + s벡터C 처럼 성분에 역벡터가 포함된다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bIMve3/btsMALnGH7X/nDBpbcM2CYtd91Z1ku9kGK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbIMve3%2FbtsMALnGH7X%2FnDBpbcM2CYtd91Z1ku9kGK%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;496&quot; height=&quot;372&quot; data-filename=&quot;KakaoTalk_Photo_2025-03-01-17-17-22 005.jpeg&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;1050&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;D기준일 때 벡터P는 -t벡터A + s벡터C 처럼 성분에 역벡터가 포함된다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;KakaoTalk_Photo_2025-03-01-17-17-22 004.jpeg&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;1050&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b19PRm/btsMx7MNpSC/UWs1v4k124O9BDVjgWROO0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b19PRm/btsMx7MNpSC/UWs1v4k124O9BDVjgWROO0/img.jpg&quot; data-alt=&quot;C 기준일 때 벡터P는 -t벡터B + s벡터D 처럼 성분에 역벡터가 포함된다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b19PRm/btsMx7MNpSC/UWs1v4k124O9BDVjgWROO0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb19PRm%2FbtsMx7MNpSC%2FUWs1v4k124O9BDVjgWROO0%2Fimg.jpg&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;479&quot; height=&quot;359&quot; data-filename=&quot;KakaoTalk_Photo_2025-03-01-17-17-22 004.jpeg&quot; data-origin-width=&quot;1400&quot; data-origin-height=&quot;1050&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;C 기준일 때 벡터P는 -t벡터B + s벡터D 처럼 성분에 역벡터가 포함된다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;4개의 꼭지점을 기준으로 모든 케이스가 역벡터가 아닌 벡터의 합으로 표현된다면 그 점 P는 사각형 내부에 있는 것이다.&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;계산은 벡터의 성분표기법으로 간단한 연립 일차방정식이 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;1138&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LEN9E/btsMytozbsQ/jpRFawcUkIFIVTLVn4qb0k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LEN9E/btsMytozbsQ/jpRFawcUkIFIVTLVn4qb0k/img.png&quot; data-alt=&quot;연립 1차방정식의 해를 구하는 소스코드&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LEN9E/btsMytozbsQ/jpRFawcUkIFIVTLVn4qb0k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLEN9E%2FbtsMytozbsQ%2FjpRFawcUkIFIVTLVn4qb0k%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;682&quot; height=&quot;1138&quot; data-origin-width=&quot;682&quot; data-origin-height=&quot;1138&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;연립 1차방정식의 해를 구하는 소스코드&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;이렇게 계산할 때 1개의 점(Point)가 사각형 내부에 있는지 판단하는 시간 복잡도는 O(1)이 될 것으로 보인다. 단, 해당 로직에도 한계가 있는데 사각형의 내각이 180도 이상이면 안된다.&amp;nbsp;&lt;/p&gt;
&lt;p style=&quot;color: #000000; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;---------&lt;/p&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;좌표가 사각형 안에 있는지 판단하기&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;좌표에 사각형의 4개 꼭지점을 클릭한다.&lt;/li&gt;
&lt;li&gt;사각형의 내부/외부를 클릭하여 좌표가 사각형의 안에 있는지 판단한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h1 style=&quot;color: #000000; text-align: start;&quot;&gt;구현 로직&lt;/h1&gt;
&lt;ol style=&quot;list-style-type: decimal; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;클릭한 좌표 지점을 T라 한다.&lt;/li&gt;
&lt;li&gt;사각형의 각 꼭지점마다 순회한다&lt;br /&gt;1)기준 꼭지점의 인접 꼭지점을 각각 A, B라 한다.&lt;br /&gt;2)기준 꼭지점을 원점으로 간주하여 A,B,T의 좌표를 보정한다.&lt;br /&gt;3)벡터T를 벡터A와 벡터B의 합으로 표현한다.&lt;br /&gt;4)vec{T} = t * vec{A} + s * vec{B}&lt;br /&gt;5)t와 s를 구한다.&lt;br /&gt;6)t 또는 s가 음수이면 false를 반환한다.&lt;/li&gt;
&lt;li&gt;사각형의 4개의 꼭지점을 모두 확인하면 true를 반환한다.&lt;/li&gt;
&lt;/ol&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;figure id=&quot;og_1740816239469&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;playfulcode/canvas-ex at master &amp;middot; mbk1991/playfulcode&quot; data-og-description=&quot;Contribute to mbk1991/playfulcode development by creating an account on GitHub.&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/mbk1991/playfulcode/tree/master/canvas-ex&quot; data-og-url=&quot;https://github.com/mbk1991/playfulcode/tree/master/canvas-ex&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/71VhJ/hyYmMuAGWC/mGtPZ4LdkfJByPmWu8XTt1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/l3UKb/hyYmT1xCy3/t6duFYB00QJpgVUv7PD9Mk/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/mbk1991/playfulcode/tree/master/canvas-ex&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/mbk1991/playfulcode/tree/master/canvas-ex&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/71VhJ/hyYmMuAGWC/mGtPZ4LdkfJByPmWu8XTt1/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600,https://scrap.kakaocdn.net/dn/l3UKb/hyYmT1xCy3/t6duFYB00QJpgVUv7PD9Mk/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;playfulcode/canvas-ex at master &amp;middot; mbk1991/playfulcode&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Contribute to mbk1991/playfulcode development by creating an account on GitHub.&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;github.com&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/개발</category>
      <author>mabb</author>
      <guid isPermaLink="true">https://mabb.tistory.com/617</guid>
      <comments>https://mabb.tistory.com/617#entry617comment</comments>
      <pubDate>Sat, 1 Mar 2025 17:56:33 +0900</pubDate>
    </item>
    <item>
      <title>[개발관련] BootJar 서비스 등록, 리눅스에서 application.properties, logback.xml 수정</title>
      <link>https://mabb.tistory.com/615</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주기적으로 외부 API에서 데이터를 수집하여 DB에 적재하고, 알람 목적으로 웹 애플리케이션 백엔드 단의 웹소켓 용 API에 데이터를 전달하는 소스를 작성하였습니다. java17, Spring boot 기반이며 application.properties 파일에 외부 API의 URL과 토큰, 그리고 기타 설정 정보를 저장해두었습니다. 빌드한 파일을 고객사에 미리 전달하면 작업 서버로 파일을 옮겨주시는 방식이기 때문에 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;리눅스에서 bootJar 내의 application.properties 파일을 수정할 필요&lt;/b&gt;&lt;/span&gt;가 있었습니다. 이는 간단하게 zip 명령어로 수정이 가능합니다. 같은 방식으로 logback.xml을 수정하여 log 파일의 저장 주기나 경로도 즉석에서 변경할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현 회사에서 이전에는 bootJar의 enable을 처리할 때 셸 스크립트와 크론을 사용하였습니다. 예를 들면 bootJar를 실행시키는 셸 스크립트를 크론 등록하는 것입니다. 해당 스크립트에서는 ps ..... | wc -l&amp;nbsp; 의 조건을 주어 현재 프로세스가 가동중인지 판단하고 if문으로 가동하거나 가동하지 않는 식으로 처리를 하였습니다. 아무래도 서비스 등록을 하는 것이 깔끔한 것 같아 저는 &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;bootJar로 빌드한 파일을 서비스로 등록&lt;/b&gt;&lt;/span&gt;하여 관리하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;목적&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1. bootJar의 설정 파일 (application.yml, application.properties, logback.xml 등)을 리눅스 환경에서 수정하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2. bootJar를 서비스로 등록하여 관리하기&lt;/b&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;bootJar의 설정 파일을 리눅스 환경에서 수정하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;: 압축해제한 파일들을 재 압축하는 식으로 진행하면 실행이 되지 않습니다. MANIFEST 설정이 깨지는 것으로 추정하고 있습니다. 그렇기 때문에 jar에 해당 경로 파일을 추가 압축 하는 식으로 진행하면 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) bootJar 압축 해제&lt;/b&gt;&lt;br /&gt;: bootJar 파일이 있는 디렉터리에서 압축을 해제합니다.&lt;br /&gt;&amp;nbsp; # unzip ./bootJar.jar&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1328&quot; data-origin-height=&quot;146&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/lWODP/btsIX0vXGDF/DAQjeEzS0Sp1cu8aIRg0I1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/lWODP/btsIX0vXGDF/DAQjeEzS0Sp1cu8aIRg0I1/img.png&quot; data-alt=&quot;unzip ./bootJar.jar&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/lWODP/btsIX0vXGDF/DAQjeEzS0Sp1cu8aIRg0I1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FlWODP%2FbtsIX0vXGDF%2FDAQjeEzS0Sp1cu8aIRg0I1%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;1328&quot; height=&quot;146&quot; data-origin-width=&quot;1328&quot; data-origin-height=&quot;146&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;unzip ./bootJar.jar&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) ./BOOT_INF/classes 경로 내의 설정 파일 수정&lt;/b&gt;&lt;br /&gt;: 압축 해제한 BOOT-INF 내의 경로에서 설정파일을 vi 편집기로 수정합니다.&lt;br /&gt;&amp;nbsp; # vi ./BOOT-INF/classes/application.properties&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 재압축&lt;/b&gt;&lt;br /&gt;: 기존의 bootJar 파일에 수정한 설정 파일을 경로를 맞추어서 추가 압축 해줍니다. ( bootJar 내의 파일을 덮어쓰기 합니다.)&lt;br /&gt;&amp;nbsp; # zip ./bootJar.jar ./BOOT-INF/classes/application.properties&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2492&quot; data-origin-height=&quot;140&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/IdZ1V/btsIXoDUN01/zVf7Eyjf7hWssSoKWlajHK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/IdZ1V/btsIXoDUN01/zVf7Eyjf7hWssSoKWlajHK/img.png&quot; data-alt=&quot;zip ./bootJar.jar ./BOOT-INF/claases/application.properties&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/IdZ1V/btsIXoDUN01/zVf7Eyjf7hWssSoKWlajHK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FIdZ1V%2FbtsIXoDUN01%2FzVf7Eyjf7hWssSoKWlajHK%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;2492&quot; height=&quot;140&quot; data-origin-width=&quot;2492&quot; data-origin-height=&quot;140&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;zip ./bootJar.jar ./BOOT-INF/claases/application.properties&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;bootJar를 서비스로 등록하기&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;1) 서비스 파일 생성 및 작성&lt;/b&gt;&lt;br /&gt;vi /etc/systemd/system/{서비스명}.service&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1990&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/eyk4Yg/btsIYa5Z1aa/woup1hyOSLxRuWJoUpeF21/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/eyk4Yg/btsIYa5Z1aa/woup1hyOSLxRuWJoUpeF21/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/eyk4Yg/btsIYa5Z1aa/woup1hyOSLxRuWJoUpeF21/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Feyk4Yg%2FbtsIYa5Z1aa%2Fwoup1hyOSLxRuWJoUpeF21%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;1990&quot; height=&quot;358&quot; data-origin-width=&quot;1990&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;blockquote style=&quot;background-color: #fcfcfc; color: #666666; text-align: left;&quot; data-ke-style=&quot;style3&quot;&gt;&amp;nbsp;&lt;br /&gt;[Unit]&lt;br /&gt;&lt;br /&gt;Description=EWP Tag GW Collector&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[Service]&lt;br /&gt;&lt;br /&gt;ExecStart=/bin/bash -c &quot;exec java -jar /data/ewp-tag-collector/TagLocationAndGWCollector-0.0.1-SNAPSHOT.jar&quot;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;[Install]&lt;br /&gt;&lt;br /&gt;WantedBy=multi-user.target&lt;br /&gt;&lt;br /&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;2) systemctl 리로드&lt;/b&gt;&lt;br /&gt;&amp;nbsp; # systemctl daemon-reload&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;3) 서비스 실행&lt;/b&gt;&lt;br /&gt;&amp;nbsp; # systemctl start {서비스명}.service&lt;/p&gt;</description>
      <category>개발/개발</category>
      <category>application.properties</category>
      <category>application.yml</category>
      <category>BootJar</category>
      <category>logback.xml</category>
      <category>systemctl</category>
      <category>서비스</category>
      <author>mabb</author>
      <guid isPermaLink="true">https://mabb.tistory.com/615</guid>
      <comments>https://mabb.tistory.com/615#entry615comment</comments>
      <pubDate>Thu, 8 Aug 2024 12:47:15 +0900</pubDate>
    </item>
    <item>
      <title>[개발관련] 터널링 유지 스크립트 ssh -R</title>
      <link>https://mabb.tistory.com/614</link>
      <description>&lt;blockquote data-ke-style=&quot;style3&quot;&gt;&lt;br /&gt;#!/bin/bash&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;LOCAL_DST_IP=''&lt;br /&gt;&lt;br /&gt;LOCAL_DST_PORT='22'&lt;br /&gt;&lt;br /&gt;REMOTE_SERVER=''&lt;br /&gt;&lt;br /&gt;REMOTE_TUNNEL_PORT='12345'&lt;br /&gt;&lt;br /&gt;REMOTE_SSH_ID='root'&lt;br /&gt;&lt;br /&gt;REMOTE_SSH_PW=''&lt;br /&gt;&lt;br /&gt;REMOTE_SSH_PORT=''&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;TUNNEL_STATUS=$(netstat -utnp | grep 223.171.52.99 | grep ESTABLISHED | wc -l)&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;echo $TUNNEL_STATUS&lt;br /&gt;&lt;br /&gt;if [ $TUNNEL_STATUS -lt 1 ]; then&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; sshpass -p $REMOTE_SSH_PW ssh -R$REMOTE_TUNNEL_PORT:$LOCAL_DST_IP:$LOCAL_DST_PORT $REMOTE_SSH_ID@$REMOTE_SERVER -p$REMOTE_SSH_PORT&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; echo 'done'&amp;nbsp; &amp;nbsp; &amp;nbsp;&lt;br /&gt;&lt;br /&gt;fi&lt;/blockquote&gt;</description>
      <category>개발/개발</category>
      <author>mabb</author>
      <guid isPermaLink="true">https://mabb.tistory.com/614</guid>
      <comments>https://mabb.tistory.com/614#entry614comment</comments>
      <pubDate>Mon, 29 Jul 2024 16:52:06 +0900</pubDate>
    </item>
    <item>
      <title>[개발관련] ssh 리모트 터널링과 로컬 터널링</title>
      <link>https://mabb.tistory.com/613</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;들어가며&lt;/b&gt;&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ssh 터널링 명령어를 정리해보았습니다.&lt;br /&gt;-L(로컬)옵션과 -R(리모트)옵션의 한 글자 차이이지만 상당히 다르게 동작하며 사용의 목적도 달라집니다.&lt;/p&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;ssh -L &lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;localhost:12345&lt;/b&gt;&lt;/span&gt;:&lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;192.168.0.1:22&lt;/b&gt; &lt;b&gt;mabb@121.10.10.10 -p22022&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;blockquote data-ke-style=&quot;style3&quot;&gt;ssh -R &lt;b&gt;&lt;span style=&quot;color: #ee2323;&quot;&gt;localhost:12345&lt;/span&gt;&lt;/b&gt;:&lt;span style=&quot;color: #006dd7;&quot;&gt;&lt;b&gt;1&lt;/b&gt;&lt;b&gt;92.168.0.1:22&lt;/b&gt;&lt;/span&gt; &lt;span style=&quot;color: #ee2323;&quot;&gt;&lt;b&gt;mabb@121.10.10.10 -p22022&lt;/b&gt;&lt;/span&gt;&lt;/blockquote&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;1. 로컬 터널링&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock widthContent&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2260&quot; data-origin-height=&quot;834&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cHCWcP/btsINtd44cB/Bsy7AyKxKvKptQD7lhkKGk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cHCWcP/btsINtd44cB/Bsy7AyKxKvKptQD7lhkKGk/img.png&quot; data-alt=&quot;로컬 터널링&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cHCWcP/btsINtd44cB/Bsy7AyKxKvKptQD7lhkKGk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcHCWcP%2FbtsINtd44cB%2FBsy7AyKxKvKptQD7lhkKGk%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;2260&quot; height=&quot;834&quot; data-origin-width=&quot;2260&quot; data-origin-height=&quot;834&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;ssh 명령어를 실행하는 현재 서버가 121.10.10.10 서버의 입장이 되게 합니다. 현재 서버에서 localhost:12345를&amp;nbsp; 121.10.10.10 서버가 접근할 수 있는 192.168.0.1:22로 터널링 해줍니다. ssh 포트로 터널을 만들어 원격지의 다른 포트나, 다른 서버(포트)에 직접 연결하는 것처럼 사용할 수 있습니다. 예시로는 DBeaver의 ssh 터널 기능이 있습니다.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;817&quot; data-origin-height=&quot;289&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3XDYu/btsIN2Ae0D6/WtMc03J2aIHVV6XQlU3xO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3XDYu/btsIN2Ae0D6/WtMc03J2aIHVV6XQlU3xO1/img.png&quot; data-alt=&quot;DBeaver의 SSH 터널 기능&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3XDYu/btsIN2Ae0D6/WtMc03J2aIHVV6XQlU3xO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3XDYu%2FbtsIN2Ae0D6%2FWtMc03J2aIHVV6XQlU3xO1%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;817&quot; height=&quot;289&quot; data-origin-width=&quot;817&quot; data-origin-height=&quot;289&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;DBeaver의 SSH 터널 기능&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;266&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/GRiZC/btsINfG4Uks/vmgKIQvy0xRtqeyXvTwKq0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/GRiZC/btsINfG4Uks/vmgKIQvy0xRtqeyXvTwKq0/img.png&quot; data-alt=&quot;터널링을 하면 외부에서도 원격지의 사설IP로 DB에 접속할 수 있다.&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/GRiZC/btsINfG4Uks/vmgKIQvy0xRtqeyXvTwKq0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGRiZC%2FbtsINfG4Uks%2FvmgKIQvy0xRtqeyXvTwKq0%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;812&quot; height=&quot;266&quot; data-origin-width=&quot;812&quot; data-origin-height=&quot;266&quot;/&gt;&lt;/span&gt;&lt;figcaption&gt;터널링을 하면 외부에서도 원격지의 사설IP로 DB에 접속할 수 있다.&lt;/figcaption&gt;
&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&amp;nbsp;&lt;/h2&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;&lt;b&gt;2. 리모트 터널링&lt;/b&gt;&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2222&quot; data-origin-height=&quot;786&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/Gsv4x/btsIOkAF0yX/drqlR2OkigcWwZtOyCOZL1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/Gsv4x/btsIOkAF0yX/drqlR2OkigcWwZtOyCOZL1/img.png&quot; data-alt=&quot;리모트 터널링&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/Gsv4x/btsIOkAF0yX/drqlR2OkigcWwZtOyCOZL1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FGsv4x%2FbtsIOkAF0yX%2FdrqlR2OkigcWwZtOyCOZL1%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;2222&quot; height=&quot;786&quot; data-origin-width=&quot;2222&quot; data-origin-height=&quot;786&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;121.10.10.10 서버가 ssh 명령어를 실행하는 현재 서버의 입장이 되게 합니다. 리모트 서버에서의 localhost:12345를 현재 서버에서 접근할 수 있는 192.168.0.1:22로 터널링 해줍니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;터널을 생성해두면 원격지에서는 &lt;b&gt;현재 서버의 공인IP를 모르는데도 불구하고&lt;/b&gt;, localhost:12345만으로 현재 서버에서만 접근이 가능한 192.168.0.1서버에 연결할 수 있게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>개발/개발</category>
      <author>mabb</author>
      <guid isPermaLink="true">https://mabb.tistory.com/613</guid>
      <comments>https://mabb.tistory.com/613#entry613comment</comments>
      <pubDate>Thu, 25 Jul 2024 20:48:10 +0900</pubDate>
    </item>
  </channel>
</rss>