<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>HBS FreeTalk</title>
    <link>https://hbs.pe.kr/</link>
    <description>현직 개발자로 일하고 있습니다.
</description>
    <language>ko</language>
    <pubDate>Tue, 9 Jun 2026 13:04:14 +0900</pubDate>
    <generator>TISTORY</generator>
    <ttl>100</ttl>
    <managingEditor>bitofsky</managingEditor>
    <item>
      <title>2026-05 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2026-05-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1777856187039&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;2021년부터 지속하고있는 내 투자 규칙이다.매수 규칙이 2023년 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ceNpyJ/dJMb84X2qxz/7XT5wY7P9XYJ7wMt3Agzr0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/gO2dm/dJMb87N0d2e/wlB3Sl1mkmzXW1KS62kzu0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bRh00r/dJMb86O5qzU/l9uPg1vT6Q7LWY5oQvYCKk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ceNpyJ/dJMb84X2qxz/7XT5wY7P9XYJ7wMt3Agzr0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/gO2dm/dJMb87N0d2e/wlB3Sl1mkmzXW1KS62kzu0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bRh00r/dJMb86O5qzU/l9uPg1vT6Q7LWY5oQvYCKk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2021년부터 지속하고있는 내 투자 규칙이다.매수 규칙이 2023년 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;지난달 초 x4+ 배율로 매수했던 TQQQ를 37% 수익률로 전액 매도했다. 한달간 가지고있던 것 치곤 꽤 높은 수익을 냈기 때문에 만족한다. TQQQ 매도 금액과 이번달 적립금은 모두 SCHD를 구매했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;1632&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/blnmtz/dJMcafsVk5n/ELuIKtzVOsoaRllfOl2jj0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/blnmtz/dJMcafsVk5n/ELuIKtzVOsoaRllfOl2jj0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/blnmtz/dJMcafsVk5n/ELuIKtzVOsoaRllfOl2jj0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fblnmtz%2FdJMcafsVk5n%2FELuIKtzVOsoaRllfOl2jj0%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;296&quot; height=&quot;1632&quot; data-origin-width=&quot;1206&quot; data-origin-height=&quot;1632&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;투자규칙에 의해 기계적으로 TQQQ 사고 판 타이밍을 보면 매우 낮은 금액에서 사고 상당히 높은 금액에서 팔고있음을 알 수 있다. 이 투자 모델은 1달에 1회씩만 사고 팔지만 이것이 오히려 자잘한 시장 이벤트 노이즈를 제거하면서 1년에 몇 번 없는 거시적인 큰 하락 이벤트를 놓치지 않고 잘 감지하며 매수~매도 하게 된다.&lt;br /&gt;1년에 한두번 위험자산에 이렇게 크게 먹고 나온 다음 수익들을 안전 배당주에 재투자 하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SCHD 상승과 TQQQ 매도를 포함한 최근 3~4개월간의 투자수익률만으로 이미 몇 년치 근로소득 수입 이상을 벌었다.&lt;br /&gt;이러면 근로소득이 큰 의미 있나? 싶을 수 있는데 이럴때일수록 정신 잘 차리고 하락에 대비하는 자세가 필요하다.&lt;br /&gt;안전한 배당주와 채권 비중을 계속 늘리는 이유가 여기에 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 한살이라도 젊었을때 시드머니를 조금이라도 더 키워야한다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>qqq</category>
      <category>SCHD</category>
      <category>TQQQ</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/107</guid>
      <comments>https://hbs.pe.kr/entry/2026-05-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry107comment</comments>
      <pubDate>Mon, 4 May 2026 10:18:49 +0900</pubDate>
    </item>
    <item>
      <title>EC2 Master/Worker Process Queue</title>
      <link>https://hbs.pe.kr/entry/EC2-MasterWorker-Process-Queue</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/bitofsky/skills/tree/main/ec2-process-queue&quot;&gt;https://github.com/bitofsky/skills/tree/main/ec2-process-queue&lt;/a&gt;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;TLDR;&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Install Skill&lt;/h3&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;npx skills add https://github.com/bitofsky/skills/tree/main/ec2-process-queue&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;To AI: 해줘&lt;/h3&gt;
&lt;pre class=&quot;arduino&quot;&gt;&lt;code&gt;/ec2-process-queue 이 스킬을 사용해 ec2 c8i-large 인스턴스 10대로 어떠어떠한 작업을 진행해줘&lt;/code&gt;&lt;/pre&gt;
&lt;h1&gt;EC2 Master/Worker Process Queue&lt;/h1&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문서는 대량의 독립 작업을 EC2 여러 대에 분산해서 실행하는 master/worker 큐 구조를 설명한다. 특정 업무 도메인이나 처리 내용은 중요하지 않다. 핵심은 &amp;ldquo;매우 많은 process target을 로컬 큐에 넣고, EC2 worker slot에 균등하게 분배해서, 병렬로 처리하고, 진행 상황을 회수/모니터링하는 방법&amp;rdquo;이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예를들어 s3에 있는 수많은 파일을 EC2 worker 여러 대에서 병렬로 처리하는 상황을 상상해보자. 이 문서에서 설명하는 구조는 이런 유형의 작업에 적합하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Local에서 전체 target 목록을 관리하는 master가 있고, 다른 리전의 여러 EC2 인스턴스에 worker slot을 만들어서 master가 local queue에서 target을 pop해서 각 slot의 remote next에 채워준다. 각 worker는 자기 slot의 next에서 하나씩 pop해서 처리한다. worker는 성공/실패를 slot별 파일에 남긴다. monitor는 SSM으로 모든 slot의 상태를 주기적으로 읽어서 진행 상황을 보여준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해 EC2의 네트워크, 디스크 I/O, CPU 같은 리소스를 최대한으로 사용하면서 실시간으로 진행 상황을 모니터링할 수 있고, EC2와 EBS 증가만으로 동시 처리량을 쉽게 늘릴 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문서는 사람이 읽고 이해하고 쓰기보단 AI에게 제공하고 필요한 준비작업을 AI가 수행하며, 사람은 오직 모니터링 스크립트만 실행해 실행상태 체킹만 하는데 사용하기 위함이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문서에서 사용하는 용어는 다음과 같다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;용어&lt;/th&gt;
&lt;th&gt;의미&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;process target&lt;/td&gt;
&lt;td&gt;처리할 작업 1개를 나타내는 문자열. 보통 URI, key, id 같은 한 줄짜리 값이다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;local queue&lt;/td&gt;
&lt;td&gt;아직 EC2에 dispatch되지 않은 target 목록 파일.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;master&lt;/td&gt;
&lt;td&gt;로컬에서 실행되는 큐 refill 프로세스.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;worker slot&lt;/td&gt;
&lt;td&gt;EC2 내부의 독립 작업 디렉토리. 예: &lt;code&gt;/1&lt;/code&gt;, &lt;code&gt;/2&lt;/code&gt;, &lt;code&gt;/3&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;worker&lt;/td&gt;
&lt;td&gt;worker slot 하나를 담당하는 장기 실행 프로세스.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;remote next&lt;/td&gt;
&lt;td&gt;각 worker slot에 있는 대기 큐 파일.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;status&lt;/td&gt;
&lt;td&gt;worker slot의 현재 진행 상태를 나타내는 한 줄짜리 파일.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;반드시 챙길 것&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 구조는 단순하지만, 아래 항목을 놓치면 target 중복 처리, target 유실, 잘못된 인스턴스 종료, 실패 원인 추적 불가 같은 문제가 생긴다. AI가 이 문서를 보고 작업을 수행할 때는 이 섹션을 먼저 확인해야 한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Queue Lock&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;local queue에서 target을 pop할 때는 반드시 &lt;code&gt;flock &quot;$QUEUE_FILE.lock&quot;&lt;/code&gt;을 사용한다.&lt;/li&gt;
&lt;li&gt;remote &lt;code&gt;next&lt;/code&gt;에서 worker가 target을 pop할 때는 반드시 slot별 &lt;code&gt;next.lock&lt;/code&gt;을 사용한다.&lt;/li&gt;
&lt;li&gt;master가 remote &lt;code&gt;next&lt;/code&gt;에 append할 때도 반드시 해당 slot의 &lt;code&gt;next.lock&lt;/code&gt;을 잡는다.&lt;/li&gt;
&lt;li&gt;lock 없이 &lt;code&gt;head&lt;/code&gt;, &lt;code&gt;tail&lt;/code&gt;, &lt;code&gt;mv&lt;/code&gt;, &lt;code&gt;cat &amp;gt;&amp;gt; next&lt;/code&gt;를 수행하면 master refill, worker pop, 재분배가 겹칠 때 target이 중복되거나 사라질 수 있다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Atomic Write&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;next&lt;/code&gt;를 수정할 때는 임시 파일에 쓴 뒤 &lt;code&gt;mv&lt;/code&gt;로 교체한다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt; 갱신은 반드시 고유 임시 파일에 쓴 뒤 &lt;code&gt;mv -f&lt;/code&gt;로 교체한다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status.$$&lt;/code&gt;처럼 PID 기반 고정 파일명을 쓰면 background monitor와 main process가 동시에 status를 쓸 때 race가 날 수 있다.&lt;/li&gt;
&lt;li&gt;권장 형태:&lt;/li&gt;
&lt;/ul&gt;
&lt;pre class=&quot;perl&quot;&gt;&lt;code&gt;tmp=&quot;$(mktemp &quot;${status_file}.XXXXXX&quot;)&quot;
printf &quot;%s\n&quot; &quot;$(date -Is) phase=running target=$target&quot; &amp;gt; &quot;$tmp&quot;
mv -f &quot;$tmp&quot; &quot;$status_file&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Target Record&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;queue record 하나는 반드시 한 줄이어야 한다.&lt;/li&gt;
&lt;li&gt;TSV/NDJSON을 써도 literal newline은 넣지 않는다.&lt;/li&gt;
&lt;li&gt;shell에서 target record는 항상 quote한다.&lt;/li&gt;
&lt;li&gt;target record에 민감한 값이 들어가면 &lt;code&gt;logs&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;ps&lt;/code&gt;, &lt;code&gt;pgrep -af&lt;/code&gt; 출력에 노출될 수 있으므로 넣지 않는 것을 원칙으로 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Dispatch Audit&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;master가 local queue에서 target을 pop하고 remote &lt;code&gt;next&lt;/code&gt; append에 성공했으면 &lt;code&gt;target_process.dispatched&lt;/code&gt;에 기록한다.&lt;/li&gt;
&lt;li&gt;remote append 실패 시 pop했던 target은 local queue 앞으로 되돌린다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;dispatched&lt;/code&gt;는 &amp;ldquo;완료&amp;rdquo;가 아니라 &amp;ldquo;EC2에 넘김&amp;rdquo; 기록이다. 완료 여부는 remote &lt;code&gt;completed&lt;/code&gt;와 output/result 검증으로 판단한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Worker Slot Isolation&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 worker process는 하나의 &lt;code&gt;REMOTE_DIR&lt;/code&gt;만 소유한다.&lt;/li&gt;
&lt;li&gt;같은 slot에 worker process를 중복 실행하지 않는다.&lt;/li&gt;
&lt;li&gt;EC2 한 대에 여러 worker를 둘 때는 &lt;code&gt;/1&lt;/code&gt;, &lt;code&gt;/2&lt;/code&gt;, &lt;code&gt;/3&lt;/code&gt;처럼 디렉토리를 분리한다.&lt;/li&gt;
&lt;li&gt;각 slot은 자기 &lt;code&gt;next&lt;/code&gt;, &lt;code&gt;completed&lt;/code&gt;, &lt;code&gt;failed&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;, &lt;code&gt;tmp&lt;/code&gt;, &lt;code&gt;logs&lt;/code&gt;만 사용해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Process Result Validation&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;process script가 결과물을 만든다면 다음 단계로 commit/publish/write 하기 전에 결과물이 실제로 존재하고 0 byte가 아닌지 확인한다.&lt;/li&gt;
&lt;li&gt;외부 명령으로 결과물을 만들면 stdout/stderr를 임시 로그에 남긴다.&lt;/li&gt;
&lt;li&gt;실패 시 worker log에 원인이 남아야 나중에 재시도 여부를 판단할 수 있다.&lt;/li&gt;
&lt;li&gt;process script는 이미 처리된 target을 만나면 skip하고 성공 처리할 수 있게 만드는 것이 좋다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Monitor Semantics&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;NEXT&lt;/code&gt;는 아직 실행에 들어가지 않은 remote 대기 target 수다.&lt;/li&gt;
&lt;li&gt;현재 실행 중인 target은 &lt;code&gt;NEXT&lt;/code&gt;에 포함되지 않는다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CPU&lt;/code&gt;, &lt;code&gt;RX/s&lt;/code&gt;, &lt;code&gt;TX/s&lt;/code&gt;는 slot별 값이 아니라 인스턴스 단위 값이다. 같은 EC2의 여러 slot 행에 동일하게 반복 표시된다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;completed&lt;/code&gt;와 &lt;code&gt;failed&lt;/code&gt;는 slot별 누적 파일이다.&lt;/li&gt;
&lt;li&gt;실패 target을 재시도해서 성공해도 기존 &lt;code&gt;failed&lt;/code&gt; 줄 수는 자동으로 줄지 않는다.&lt;/li&gt;
&lt;li&gt;재시도 성공 여부는 output/result 존재 여부, retry 후 &lt;code&gt;completed&lt;/code&gt; 기록, 또는 별도 검증으로 확인한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Instance Termination&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;EC2 종료 조건은 &amp;ldquo;해당 인스턴스의 모든 slot이 &lt;code&gt;NEXT=0&lt;/code&gt;이고 &lt;code&gt;phase=idle&lt;/code&gt;&amp;rdquo;일 때다.&lt;/li&gt;
&lt;li&gt;일부 slot만 idle이면 종료하면 안 된다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;status&lt;/code&gt;가 오래된 &lt;code&gt;uploading&lt;/code&gt;, &lt;code&gt;committing&lt;/code&gt;, &lt;code&gt;running&lt;/code&gt; 상태라면 실제 프로세스 확인이나 output/result 확인 없이 종료하지 않는다.&lt;/li&gt;
&lt;li&gt;종료 전 필요한 경우 remote &lt;code&gt;next&lt;/code&gt;와 현재 target을 회수한다.&lt;/li&gt;
&lt;li&gt;종료 후에는 &lt;code&gt;process-workers.instances&lt;/code&gt;와 &lt;code&gt;workers&lt;/code&gt;에서 해당 instance-id를 제거한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Rebalance&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;local queue가 비었는데 일부 EC2에 heavy target의 remote &lt;code&gt;next&lt;/code&gt;가 몰릴 수 있다.&lt;/li&gt;
&lt;li&gt;재분배는 현재 실행 중인 target이 아니라 아직 실행 전인 remote &lt;code&gt;next&lt;/code&gt;만 대상으로 한다.&lt;/li&gt;
&lt;li&gt;재분배 전 master를 중단한다.&lt;/li&gt;
&lt;li&gt;모든 remote &lt;code&gt;next&lt;/code&gt;를 &lt;code&gt;flock&lt;/code&gt;으로 drain하고, idle slot에 round-robin으로 append한다.&lt;/li&gt;
&lt;li&gt;drain/assignment 결과는 파일로 남긴다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Security&lt;/h3&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;secret은 queue record, status, logs, command line에 넣지 않는다.&lt;/li&gt;
&lt;li&gt;process에 secret이 필요하면 SSM Parameter Store, IAM Role, instance metadata 같은 별도 경로로 주입한다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ps&lt;/code&gt;, &lt;code&gt;pgrep -af&lt;/code&gt;, worker log가 command line 인자를 노출할 수 있음을 고려한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;권장 파일 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;유사한 작업을 새로 구성할 때는 아래와 같은 역할 기반 이름을 사용하는 것을 권장한다. 핵심은 파일명 자체가 아니라 역할 분리다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;역할&lt;/th&gt;
&lt;th&gt;권장 파일&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;process 실행 스크립트&lt;/td&gt;
&lt;td&gt;&lt;code&gt;scripts/process-target.sh&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;worker loop&lt;/td&gt;
&lt;td&gt;&lt;code&gt;scripts/process-worker.sh&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;master refill&lt;/td&gt;
&lt;td&gt;&lt;code&gt;scripts/process-master-refill.sh&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;worker monitor&lt;/td&gt;
&lt;td&gt;&lt;code&gt;monitor-process-workers.sh&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;EC2 bootstrap user-data&lt;/td&gt;
&lt;td&gt;&lt;code&gt;scripts/ec2-bootstrap-process-workers.sh&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;인스턴스 목록&lt;/td&gt;
&lt;td&gt;&lt;code&gt;process-workers.instances&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;worker slot 목록&lt;/td&gt;
&lt;td&gt;&lt;code&gt;workers&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;local queue&lt;/td&gt;
&lt;td&gt;&lt;code&gt;target_process.queue&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;dispatch audit log&lt;/td&gt;
&lt;td&gt;&lt;code&gt;target_process.dispatched&lt;/code&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기존 구현을 재사용할 때 파일명이 다르다면, 이 문서의 &lt;code&gt;process-*&lt;/code&gt; 이름을 실제 파일명에 맞춰 치환해서 사용하면 된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;전체 구조&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2449&quot; data-origin-height=&quot;1399&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bmsmUt/dJMcahxumR1/WVow5BJS0tkBT1okOpMLTK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bmsmUt/dJMcahxumR1/WVow5BJS0tkBT1okOpMLTK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bmsmUt/dJMcahxumR1/WVow5BJS0tkBT1okOpMLTK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbmsmUt%2FdJMcahxumR1%2FWVow5BJS0tkBT1okOpMLTK%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;2449&quot; height=&quot;1399&quot; data-origin-width=&quot;2449&quot; data-origin-height=&quot;1399&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;기본 아이디어&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업은 두 단계 큐로 관리한다.&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;로컬 master가 큰 전체 큐를 가진다.&lt;/li&gt;
&lt;li&gt;master는 각 EC2 worker slot의 &lt;code&gt;next&lt;/code&gt; 파일을 작게 채워준다.&lt;/li&gt;
&lt;li&gt;각 worker는 자기 slot의 &lt;code&gt;next&lt;/code&gt;에서 하나씩 pop해서 처리한다.&lt;/li&gt;
&lt;li&gt;worker는 성공/실패를 &lt;code&gt;completed&lt;/code&gt;, &lt;code&gt;failed&lt;/code&gt;에 남긴다.&lt;/li&gt;
&lt;li&gt;monitor는 SSM을 통해 모든 slot의 &lt;code&gt;status&lt;/code&gt;를 읽는다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 구조의 장점:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;SSH 없이 SSM만으로 배포/실행/모니터링할 수 있다.&lt;/li&gt;
&lt;li&gt;EC2 한 대에 여러 worker slot을 둘 수 있다.&lt;/li&gt;
&lt;li&gt;master를 중단해도 이미 remote &lt;code&gt;next&lt;/code&gt;에 들어간 작업은 계속 진행된다.&lt;/li&gt;
&lt;li&gt;worker별 &lt;code&gt;next&lt;/code&gt;가 작기 때문에 특정 인스턴스를 종료할 때 회수해야 할 범위가 제한된다.&lt;/li&gt;
&lt;li&gt;local queue pop과 remote next pop은 모두 &lt;code&gt;flock&lt;/code&gt;으로 보호한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;큐 계층&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Local Queue&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 파일:&lt;/p&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;target_process.queue&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 구현 파일:&lt;/p&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;target_process.queue&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;형식:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;target-1
target-2
target-3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 줄이 process target 하나다.&lt;/li&gt;
&lt;li&gt;master만 이 파일에서 pop한다.&lt;/li&gt;
&lt;li&gt;병렬 master refill 과정에서 동시에 접근할 수 있으므로 &lt;code&gt;target_process.queue.lock&lt;/code&gt; 형태의 lock 파일을 사용한다.&lt;/li&gt;
&lt;li&gt;dispatch에 성공한 target은 audit log에 남는다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Remote Next Queue&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 EC2 worker slot에는 &lt;code&gt;next&lt;/code&gt; 파일이 있다.&lt;/p&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;/1/next
/2/next
/3/next&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특징:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;한 줄이 process target 하나다.&lt;/li&gt;
&lt;li&gt;worker가 하나씩 pop한다.&lt;/li&gt;
&lt;li&gt;pop은 &lt;code&gt;next.lock&lt;/code&gt;으로 보호한다.&lt;/li&gt;
&lt;li&gt;master는 각 &lt;code&gt;next&lt;/code&gt; 파일의 줄 수가 &lt;code&gt;MAX_NEXT&lt;/code&gt;보다 작으면 부족분만 append한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Worker Slot 디렉토리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 EC2 인스턴스에 여러 worker slot을 둘 수 있다. 현재 구조는 인스턴스당 3개 slot을 사용한다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;/1
/2
/3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 slot의 구성:&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;next
next.lock
completed
failed
status
logs/worker.log
tmp/
worker script
process script&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;slot은 서로 독립적이다. 같은 EC2 안에서도 &lt;code&gt;/1&lt;/code&gt;, &lt;code&gt;/2&lt;/code&gt;, &lt;code&gt;/3&lt;/code&gt; worker가 동시에 실행된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;처리 흐름&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2092&quot; data-origin-height=&quot;1606&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cJxVrN/dJMcab45zCf/c3SM5nXmT0T5eA095Ph3kK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cJxVrN/dJMcab45zCf/c3SM5nXmT0T5eA095Ph3kK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cJxVrN/dJMcab45zCf/c3SM5nXmT0T5eA095Ph3kK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcJxVrN%2FdJMcab45zCf%2Fc3SM5nXmT0T5eA095Ph3kK%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;2092&quot; height=&quot;1606&quot; data-origin-width=&quot;2092&quot; data-origin-height=&quot;1606&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Master Refill 동작&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;master는 로컬에서 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;역할:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;workers&lt;/code&gt; 파일을 읽는다.&lt;/li&gt;
&lt;li&gt;같은 instance-id에 속한 worker dirs를 그룹화한다.&lt;/li&gt;
&lt;li&gt;각 인스턴스에 SSM command를 한 번 보내 &lt;code&gt;/1&lt;/code&gt;, &lt;code&gt;/2&lt;/code&gt;, &lt;code&gt;/3&lt;/code&gt;의 &lt;code&gt;next&lt;/code&gt; 줄 수를 조회한다.&lt;/li&gt;
&lt;li&gt;여러 인스턴스 조회/리필을 병렬로 실행한다.&lt;/li&gt;
&lt;li&gt;부족한 수만큼 local queue에서 pop한다.&lt;/li&gt;
&lt;li&gt;pop한 target을 remote next에 append한다.&lt;/li&gt;
&lt;li&gt;dispatch audit log를 기록한다.&lt;/li&gt;
&lt;li&gt;실패 시 pop했던 target을 local queue 앞으로 되돌린다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주요 환경변수:&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;변수&lt;/th&gt;
&lt;th&gt;기본값&lt;/th&gt;
&lt;th&gt;설명&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;WORKERS_FILE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;empty&lt;/td&gt;
&lt;td&gt;worker slot 목록 파일. 보통 &lt;code&gt;workers&lt;/code&gt;.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;INSTANCES_FILE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;process-workers.instances&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;instance-id 목록 파일. &lt;code&gt;WORKERS_FILE&lt;/code&gt;이 없을 때 사용.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;QUEUE_FILE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;target_process.queue&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;local queue 파일.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;DISPATCHED_FILE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;target_process.dispatched&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;dispatch audit log.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;MAX_NEXT&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;5&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;worker slot별 remote next를 최대 몇 개까지 채울지.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;REFILL_PARALLELISM&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;20&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;master가 동시에 처리할 인스턴스 수.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;INTERVAL_SECONDS&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;30&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;refill pass 사이의 대기 시간.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;ONCE&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;0&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;&lt;code&gt;1&lt;/code&gt;이면 한 번만 refill하고 종료.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;foreground 실행:&lt;/p&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;WORKERS_FILE=workers \
QUEUE_FILE=target_process.queue \
MAX_NEXT=5 \
REFILL_PARALLELISM=10 \
INTERVAL_SECONDS=10 \
scripts/process-master-refill.sh&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중단:&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;Ctrl-C&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;master를 중단해도 remote next에 이미 들어간 target은 worker가 계속 처리한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한 번만 refill:&lt;/p&gt;
&lt;pre class=&quot;makefile&quot;&gt;&lt;code&gt;ONCE=1 \
WORKERS_FILE=workers \
QUEUE_FILE=target_process.queue \
MAX_NEXT=5 \
REFILL_PARALLELISM=10 \
scripts/process-master-refill.sh&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Worker 동작&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;worker는 EC2의 특정 slot 디렉토리에서 계속 실행된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;동작 순서:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;&lt;code&gt;REMOTE_DIR&lt;/code&gt;로 이동한다.&lt;/li&gt;
&lt;li&gt;필요한 디렉토리와 파일을 만든다.&lt;/li&gt;
&lt;li&gt;process 실행에 필요한 runtime secret/config를 읽어 환경변수로 준비한다.&lt;/li&gt;
&lt;li&gt;무한 루프를 돈다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;next&lt;/code&gt;에서 target 하나를 &lt;code&gt;flock&lt;/code&gt;으로 pop한다.&lt;/li&gt;
&lt;li&gt;process script를 실행한다.&lt;/li&gt;
&lt;li&gt;성공하면 &lt;code&gt;completed&lt;/code&gt;에 기록한다.&lt;/li&gt;
&lt;li&gt;실패하면 &lt;code&gt;failed&lt;/code&gt;에 기록한다.&lt;/li&gt;
&lt;li&gt;대기 target이 없으면 &lt;code&gt;status&lt;/code&gt;에 &lt;code&gt;phase=idle&lt;/code&gt;을 쓰고 sleep한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;slot별 로그:&lt;/p&gt;
&lt;pre class=&quot;1c&quot;&gt;&lt;code&gt;/N/logs/worker.log&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;slot별 상태:&lt;/p&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;/N/status&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;예시 status:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;2026-04-28T06:49:04+00:00 phase=running pct=54% bytes=32979288064 total=60108212049 target=...&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Process Script 규약&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;process script는 target 하나를 받아 처리하는 단일 작업 실행기다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;권장 규약:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;인자는 target 하나만 받는다.&lt;/li&gt;
&lt;li&gt;성공 시 exit code &lt;code&gt;0&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;실패 시 non-zero.&lt;/li&gt;
&lt;li&gt;진행 상황을 &lt;code&gt;PROCESS_STATUS_FILE&lt;/code&gt; 같은 status file 환경변수로 주기적으로 기록한다.&lt;/li&gt;
&lt;li&gt;status file 갱신은 반드시 원자적으로 한다. 고정된 임시 파일명은 쓰지 말고 &lt;code&gt;mktemp &quot;${PROCESS_STATUS_FILE}.XXXXXX&quot;&lt;/code&gt; 같은 고유 임시 파일에 쓴 뒤 &lt;code&gt;mv -f&lt;/code&gt;로 교체한다.&lt;/li&gt;
&lt;li&gt;임시 파일은 slot의 &lt;code&gt;tmp/&lt;/code&gt; 하위에 만든다.&lt;/li&gt;
&lt;li&gt;작업 종료 시 가능한 한 임시 파일을 정리한다.&lt;/li&gt;
&lt;li&gt;이미 처리된 target이라면 skip하고 성공 처리할 수 있어야 한다.&lt;/li&gt;
&lt;li&gt;process 결과를 다음 단계로 commit/publish/write 하기 전에 결과물이 실제로 존재하고 0 byte가 아닌지 확인한다.&lt;/li&gt;
&lt;li&gt;외부 명령을 실행해 결과 파일을 만드는 경우, stdout/stderr를 slot의 임시 로그 파일에 남기고 실패 시 worker log로 노출되게 한다.&lt;/li&gt;
&lt;li&gt;process 내부에서 background monitor를 같이 돌릴 경우, monitor와 main process가 같은 status file을 동시에 갱신할 수 있으므로 status write helper가 concurrent-safe해야 한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 구현에서는 process script가 다음 식으로 worker에서 호출된다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;PROCESS_STATUS_FILE=&quot;${REMOTE_DIR}/status&quot; ./process-script.sh &quot;$target&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 파일명은 다음과 같다.&lt;/p&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;PROCESS_STATUS_FILE=&quot;${REMOTE_DIR}/status&quot; ./process-target.sh &quot;$target&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새로운 작업으로 재사용할 때는 이 script만 교체하면 master/worker queue 구조는 그대로 사용할 수 있다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;EC2 구성&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 사용한 예시:&lt;/p&gt;
&lt;pre class=&quot;yaml&quot;&gt;&lt;code&gt;instance type: c8i.large
root volume: gp3
size: 1000 GiB
IOPS: 3000
throughput: 500 MB/s
worker slots per instance: 3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;대량 파일 I/O 또는 큰 임시 파일을 다루는 process라면 gp3 기본 throughput은 병목이 될 수 있다. &lt;code&gt;iostat&lt;/code&gt;로 확인하면서 throughput을 조정한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스 생성 예시:&lt;/p&gt;
&lt;pre class=&quot;jboss-cli&quot;&gt;&lt;code&gt;aws ec2 run-instances \
  --region us-east-1 \
  --image-id &quot;$AMI_ID&quot; \
  --instance-type c8i.large \
  --count 10 \
  --subnet-id &quot;$SUBNET_ID&quot; \
  --security-group-ids &quot;$SG_ID&quot; \
  --iam-instance-profile Name=&quot;$PROFILE&quot; \
  --user-data file://scripts/ec2-bootstrap-process-workers.sh \
  --block-device-mappings '[{&quot;DeviceName&quot;:&quot;/dev/xvda&quot;,&quot;Ebs&quot;:{&quot;VolumeSize&quot;:1000,&quot;VolumeType&quot;:&quot;gp3&quot;,&quot;Iops&quot;:3000,&quot;Throughput&quot;:500,&quot;Encrypted&quot;:true,&quot;DeleteOnTermination&quot;:true}}]' \
  --tag-specifications \
    'ResourceType=instance,Tags=[{Key=Name,Value=process-workers},{Key=Project,Value=process-queue}]' \
    'ResourceType=volume,Tags=[{Key=Name,Value=process-workers},{Key=Project,Value=process-queue}]' \
  --query 'Instances[].InstanceId' \
  --output text&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;인스턴스 목록과 Worker Slot 목록&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;process-workers.instances&lt;/code&gt;는 instance-id만 담는다.&lt;/p&gt;
&lt;pre class=&quot;matlab&quot;&gt;&lt;code&gt;i-aaaaaaaaaaaaaaaaa
i-bbbbbbbbbbbbbbbbb&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;workers&lt;/code&gt;는 instance-id와 slot dir을 담는다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;i-aaaaaaaaaaaaaaaaa /1
i-aaaaaaaaaaaaaaaaa /2
i-aaaaaaaaaaaaaaaaa /3
i-bbbbbbbbbbbbbbbbb /1
i-bbbbbbbbbbbbbbbbb /2
i-bbbbbbbbbbbbbbbbb /3&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;생성 명령:&lt;/p&gt;
&lt;pre class=&quot;bash&quot;&gt;&lt;code&gt;: &amp;gt; workers
while read -r id; do
  printf '%s /1\n%s /2\n%s /3\n' &quot;$id&quot; &quot;$id&quot; &quot;$id&quot; &amp;gt;&amp;gt; workers
done &amp;lt; process-workers.instances&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;Worker 배포&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;process script와 worker script를 임시 위치에 올린 뒤 SSM으로 각 EC2에 배포한다.&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;aws s3 cp scripts/process-target.sh \
  s3://YOUR_BUCKET/_tmp/process-workers/process-target.sh \
  --region us-east-1 \
  --only-show-errors

aws s3 cp scripts/process-worker.sh \
  s3://YOUR_BUCKET/_tmp/process-workers/process-worker.sh \
  --region us-east-1 \
  --only-show-errors&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배포 및 실행:&lt;/p&gt;
&lt;pre class=&quot;stata&quot;&gt;&lt;code&gt;aws ssm send-command \
  --region us-east-1 \
  --instance-ids $(tr '\n' ' ' &amp;lt; process-workers.instances) \
  --document-name AWS-RunShellScript \
  --comment deploy-start-process-workers \
  --parameters commands='[
    &quot;set -euo pipefail&quot;,
    &quot;for d in /1 /2 /3; do mkdir -p \&quot;$d/logs\&quot; \&quot;$d/tmp\&quot;; aws s3 cp s3://YOUR_BUCKET/_tmp/process-workers/process-target.sh \&quot;$d/process-target.sh\&quot; --region us-east-1 --only-show-errors; aws s3 cp s3://YOUR_BUCKET/_tmp/process-workers/process-worker.sh \&quot;$d/process-worker.sh\&quot; --region us-east-1 --only-show-errors; chmod +x \&quot;$d/process-target.sh\&quot; \&quot;$d/process-worker.sh\&quot;; touch \&quot;$d/next\&quot; \&quot;$d/completed\&quot; \&quot;$d/failed\&quot;; done&quot;,
    &quot;for d in /1 /2 /3; do if ! pgrep -af \&quot;REMOTE_DIR=$d .*process-worker.sh\&quot; &amp;gt;/dev/null; then nohup bash -lc \&quot;REMOTE_DIR=$d AWS_REGION=us-east-1 $d/process-worker.sh\&quot; &amp;gt;&amp;gt; \&quot;$d/logs/worker.log\&quot; 2&amp;gt;&amp;amp;1 &amp;amp; fi; done&quot;,
    &quot;sleep 2&quot;,
    &quot;pgrep -af process-worker.sh | wc -l&quot;
  ]' \
  --query 'Command.CommandId' \
  --output text&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주의:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;local에 있는 파일명과 EC2에 배포되는 파일명은 worker script 내부 호출명과 일치해야 한다.&lt;/li&gt;
&lt;li&gt;범용화하려면 worker script 내부의 process script 파일명도 같이 변경한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;모니터링&lt;/h2&gt;
&lt;pre class=&quot;nginx&quot;&gt;&lt;code&gt;watch -n 5 'WORKERS_FILE=workers ./monitor-process-workers.sh'&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;monitor는 다음 방식으로 동작한다.&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;workers&lt;/code&gt;를 instance-id 기준으로 그룹화한다.&lt;/li&gt;
&lt;li&gt;인스턴스마다 SSM command 1개를 보낸다.&lt;/li&gt;
&lt;li&gt;여러 인스턴스는 병렬로 조회한다.&lt;/li&gt;
&lt;li&gt;각 slot의 &lt;code&gt;next&lt;/code&gt;, &lt;code&gt;completed&lt;/code&gt;, &lt;code&gt;failed&lt;/code&gt;, &lt;code&gt;status&lt;/code&gt;를 출력한다.&lt;/li&gt;
&lt;li&gt;인스턴스 단위 &lt;code&gt;CPU&lt;/code&gt;, &lt;code&gt;RX/s&lt;/code&gt;, &lt;code&gt;TX/s&lt;/code&gt;를 함께 출력한다.&lt;/li&gt;
&lt;li&gt;리소스 지표는 SSM command 내부에서 약 1초 샘플링하므로 monitor 실행 시간이 1초 정도 늘어난다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;출력 예시:&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;INSTANCE               DIR          NEXT  COMPLETED   FAILED     CPU       RX/s       TX/s  STATUS
i-xxx                  /1              2        100        0   82.4%  120.0MB/s   40.0MB/s  2026-04-28T06:49:04+00:00 phase=running pct=54% target=...
i-xxx                  /2              0        103        1   82.4%  120.0MB/s   40.0MB/s  2026-04-28T06:49:03+00:00 phase=idle next=0

TOTAL next=20 completed=1676 failed=5&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;NEXT&lt;/code&gt;는 아직 실행에 들어가지 않은 remote 대기 target 수다. 현재 실행 중인 target은 &lt;code&gt;NEXT&lt;/code&gt;에 포함되지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;code&gt;CPU&lt;/code&gt;, &lt;code&gt;RX/s&lt;/code&gt;, &lt;code&gt;TX/s&lt;/code&gt;는 같은 인스턴스의 모든 slot 행에 동일하게 표시된다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;상태 Phase&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;process script가 어떤 phase를 기록할지는 작업마다 다르다. 권장 phase는 다음과 같다.&lt;/p&gt;
&lt;table data-ke-align=&quot;alignLeft&quot;&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;phase&lt;/th&gt;
&lt;th&gt;의미&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;idle&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;worker가 대기 중이다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;preparing&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;process 실행 준비 중이다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;running&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;실제 process 실행 중이다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;committing&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;결과를 최종 위치나 다음 단계로 반영하는 중이다.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;done&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;성공 완료.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;skipped&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;이미 처리된 target이라 건너뜀.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;failed&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;실패.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 process script가 더 구체적인 phase를 출력해도 monitor는 그대로 문자열로 보여준다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;로그와 파일&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬:&lt;/p&gt;
&lt;pre class=&quot;cpp&quot;&gt;&lt;code&gt;target_process.queue
target_process.queue.lock
target_process.dispatched
target_process.dispatched.lock
logs/master.log          # background 실행 시 선택&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;remote slot:&lt;/p&gt;
&lt;pre class=&quot;crystal&quot;&gt;&lt;code&gt;/N/next
/N/next.lock
/N/completed
/N/failed
/N/status
/N/logs/worker.log
/N/tmp/&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;dispatch audit log 형식:&lt;/p&gt;
&lt;pre class=&quot;smali&quot;&gt;&lt;code&gt;timestamp instance-id remote-dir target&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;중단과 복구&lt;/h2&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Master 중단&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;foreground 실행 중이면:&lt;/p&gt;
&lt;pre class=&quot;ebnf&quot;&gt;&lt;code&gt;Ctrl-C&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;master를 멈춰도 remote &lt;code&gt;next&lt;/code&gt;에 들어간 작업과 현재 실행 중인 worker는 계속 진행된다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Worker 강제 중단&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스를 종료하거나 작업 구조를 바꿀 때는 먼저 remote에 남은 작업을 회수하는 것이 안전하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;worker 프로세스 중단 예시:&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;aws ssm send-command \
  --region us-east-1 \
  --instance-ids INSTANCE_ID \
  --document-name AWS-RunShellScript \
  --comment stop-process-workers \
  --parameters commands='[
    &quot;set -euo pipefail&quot;,
    &quot;pkill -f process-target.sh || true&quot;,
    &quot;pkill -f process-worker.sh || true&quot;
  ]' \
  --query 'Command.CommandId' \
  --output text&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;process command line에 민감한 값이 포함될 수 있으므로, 운영 중 &lt;code&gt;pgrep -af&lt;/code&gt;, &lt;code&gt;ps aux&lt;/code&gt; 출력은 주의한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Remote Next 회수&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아직 실행에 들어가지 않은 target은 각 slot의 &lt;code&gt;next&lt;/code&gt;에 있다. 인스턴스를 종료하기 전에 이 파일을 읽어 local queue로 되돌린다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;수집 예시:&lt;/p&gt;
&lt;pre class=&quot;tex&quot;&gt;&lt;code&gt;aws ssm send-command \
  --region us-east-1 \
  --instance-ids INSTANCE_ID \
  --document-name AWS-RunShellScript \
  --comment collect-worker-queues \
  --parameters commands='[
    &quot;set -euo pipefail&quot;,
    &quot;for d in /1 /2 /3; do echo \&quot;###DIR $d\&quot;; sed \&quot;s/^/NEXT /\&quot; \&quot;$d/next\&quot; 2&amp;gt;/dev/null || true; done&quot;
  ]' \
  --query 'Command.CommandId' \
  --output text&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회수한 target을 &lt;code&gt;recovered-inflight&lt;/code&gt; 같은 파일로 저장한 뒤 local queue 앞에 중복 없이 붙인다.&lt;/p&gt;
&lt;pre class=&quot;lasso&quot;&gt;&lt;code&gt;cp target_process.queue &quot;target_process.queue.bak.$(date +%Y%m%d%H%M%S)&quot;

awk 'NR==FNR { if (!seen[$0]++) print; next } { if (!seen[$0]++) print }' \
  recovered-inflight \
  target_process.queue \
  &amp;gt; target_process.queue.new

mv target_process.queue.new target_process.queue&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Remote Next 재분배&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작업 후반에는 무거운 target이 특정 EC2나 특정 slot에 몰릴 수 있다. 이때 현재 실행 중인 target은 건드리지 않고, 아직 실행 전인 &lt;code&gt;next&lt;/code&gt;만 뽑아 idle slot에 다시 나눠 넣을 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;절차:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;master를 중단한다.&lt;/li&gt;
&lt;li&gt;monitor로 idle slot과 next가 몰린 slot을 확인한다.&lt;/li&gt;
&lt;li&gt;모든 remote &lt;code&gt;next&lt;/code&gt;를 &lt;code&gt;flock&lt;/code&gt;으로 drain한다.&lt;/li&gt;
&lt;li&gt;drain된 target을 idle slot에 round-robin으로 append한다.&lt;/li&gt;
&lt;li&gt;monitor로 분배 결과를 확인한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재분배 시 남겨두면 좋은 기록:&lt;/p&gt;
&lt;pre class=&quot;css&quot;&gt;&lt;code&gt;rebalanced-process-next.YYYYMMDDHHMMSS.status.tsv
rebalanced-process-next.YYYYMMDDHHMMSS.idle-slots.tsv
rebalanced-process-next.YYYYMMDDHHMMSS.drained.tsv
rebalanced-process-next.YYYYMMDDHHMMSS.assignments.tsv&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;실패 Target 처리&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;각 slot의 실패 target은 다음 파일에 남는다.&lt;/p&gt;
&lt;pre class=&quot;awk&quot;&gt;&lt;code&gt;/N/failed&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;운영 방식:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;monitor의 &lt;code&gt;FAILED&lt;/code&gt; 총합을 확인한다.&lt;/li&gt;
&lt;li&gt;SSM으로 모든 &lt;code&gt;/1/failed&lt;/code&gt;, &lt;code&gt;/2/failed&lt;/code&gt;, &lt;code&gt;/3/failed&lt;/code&gt;를 수집한다.&lt;/li&gt;
&lt;li&gt;실패 원인을 확인한다.&lt;/li&gt;
&lt;li&gt;재시도할 target만 local queue에 다시 넣는다.&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;실패 분석 시 같이 확인할 것:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;/N/failed&lt;/code&gt;: 실패 target 목록.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/N/logs/worker.log&lt;/code&gt;: &lt;code&gt;START&lt;/code&gt;, process stderr/stdout, &lt;code&gt;FAIL&lt;/code&gt; 주변 로그.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;/N/status&lt;/code&gt;: 마지막 상태. 단, 재시도나 다음 작업으로 덮였을 수 있으므로 단독 근거로 보지 않는다.&lt;/li&gt;
&lt;li&gt;외부 시스템이나 결과물을 사용하는 process라면 input target 존재 여부와 output/result 존재 여부.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자주 발생할 수 있는 구현 이슈:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;&lt;code&gt;status.$$&lt;/code&gt;처럼 PID 기반 고정 임시 파일명을 쓰면 background monitor와 main process가 같은 파일을 건드려 &lt;code&gt;mv: cannot stat ...&lt;/code&gt; 형태의 race가 날 수 있다. &lt;code&gt;mktemp&lt;/code&gt; 기반 고유 파일명으로 원자 갱신해야 한다.&lt;/li&gt;
&lt;li&gt;결과물 생성 명령이 성공하지 않았는데 commit/publish/write 단계로 넘어가면 &lt;code&gt;path does not exist&lt;/code&gt;류 실패가 날 수 있다. 다음 단계로 넘기기 전 &lt;code&gt;test -s &quot;$output_file&quot;&lt;/code&gt; 같은 검증을 넣고, 생성 명령 로그를 남겨야 한다.&lt;/li&gt;
&lt;li&gt;재시도 성공 후에도 기존 &lt;code&gt;/N/failed&lt;/code&gt; 파일의 줄 수는 자동으로 줄지 않는다. monitor의 &lt;code&gt;FAILED&lt;/code&gt; 총합은 누적 실패 기록이다. 재시도 성공 여부는 output 존재 여부나 retry 후 &lt;code&gt;completed&lt;/code&gt; 기록으로 별도 확인한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재시도 방법:&lt;/p&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;실패 target을 로컬 파일로 모은다.&lt;/li&gt;
&lt;li&gt;output이 이미 만들어진 target은 제외한다.&lt;/li&gt;
&lt;li&gt;idle slot이 있으면 그 slot의 &lt;code&gt;next&lt;/code&gt;에 넣는다.&lt;/li&gt;
&lt;li&gt;idle slot이 없으면 &lt;code&gt;NEXT&lt;/code&gt;가 가장 작은 slot에 append해서 현재 작업이 끝난 뒤 실행되게 한다.&lt;/li&gt;
&lt;li&gt;append는 remote &lt;code&gt;next.lock&lt;/code&gt;을 잡고 수행한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;운영 체크리스트&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;process target 목록을 만든다.&lt;/li&gt;
&lt;li&gt;local queue 파일을 준비한다.&lt;/li&gt;
&lt;li&gt;EC2 인스턴스를 생성한다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;process-workers.instances&lt;/code&gt;를 작성한다.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;workers&lt;/code&gt;를 생성한다.&lt;/li&gt;
&lt;li&gt;모든 인스턴스가 SSM Online인지 확인한다.&lt;/li&gt;
&lt;li&gt;process script와 worker script를 배포한다.&lt;/li&gt;
&lt;li&gt;모든 worker slot이 &lt;code&gt;idle&lt;/code&gt;인지 확인한다.&lt;/li&gt;
&lt;li&gt;master refill을 foreground로 실행한다.&lt;/li&gt;
&lt;li&gt;monitor를 별도 터미널에서 실행한다.&lt;/li&gt;
&lt;li&gt;local queue가 0이 된 뒤에도 remote &lt;code&gt;next&lt;/code&gt;와 active target이 남아 있을 수 있으므로 monitor를 계속 본다.&lt;/li&gt;
&lt;li&gt;heavy target이 몰리면 remote &lt;code&gt;next&lt;/code&gt;만 재분배한다.&lt;/li&gt;
&lt;li&gt;실패 target을 수집하고 필요하면 재시도한다.&lt;/li&gt;
&lt;li&gt;완료 후 EC2를 종료한다.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;유용한 명령&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SSM Online 확인:&lt;/p&gt;
&lt;pre class=&quot;haml&quot;&gt;&lt;code&gt;aws ssm describe-instance-information \
  --region us-east-1 \
  --filters Key=InstanceIds,Values=$(paste -sd, process-workers.instances) \
  --query 'InstanceInformationList[].{InstanceId:InstanceId,PingStatus:PingStatus,AgentVersion:AgentVersion}' \
  --output table&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EC2 상태:&lt;/p&gt;
&lt;pre class=&quot;haml&quot;&gt;&lt;code&gt;aws ec2 describe-instances \
  --region us-east-1 \
  --instance-ids $(tr '\n' ' ' &amp;lt; process-workers.instances) \
  --query 'Reservations[].Instances[].{InstanceId:InstanceId,State:State.Name,Type:InstanceType,AZ:Placement.AvailabilityZone,PrivateIp:PrivateIpAddress}' \
  --output table&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;볼륨 설정:&lt;/p&gt;
&lt;pre class=&quot;haml&quot;&gt;&lt;code&gt;vols=$(
  aws ec2 describe-instances \
    --region us-east-1 \
    --instance-ids $(tr '\n' ' ' &amp;lt; process-workers.instances) \
    --query 'Reservations[].Instances[].BlockDeviceMappings[].Ebs.VolumeId' \
    --output text
)

aws ec2 describe-volumes \
  --region us-east-1 \
  --volume-ids $vols \
  --query 'Volumes[].{VolumeId:VolumeId,Size:Size,Type:VolumeType,Iops:Iops,Throughput:Throughput,State:State}' \
  --output table&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;I/O 확인:&lt;/p&gt;
&lt;pre class=&quot;livecodeserver&quot;&gt;&lt;code&gt;aws ssm send-command \
  --region us-east-1 \
  --instance-ids INSTANCE_ID \
  --document-name AWS-RunShellScript \
  --comment inspect-io \
  --parameters commands='[
    &quot;set -euo pipefail&quot;,
    &quot;df -h /1 /2 /3&quot;,
    &quot;iostat -xm 1 5 2&amp;gt;/dev/null || true&quot;
  ]' \
  --query 'Command.CommandId' \
  --output text&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인스턴스 종료:&lt;/p&gt;
&lt;pre class=&quot;reasonml&quot;&gt;&lt;code&gt;aws ec2 terminate-instances \
  --region us-east-1 \
  --instance-ids $(tr '\n' ' ' &amp;lt; process-workers.instances)&lt;/code&gt;&lt;/pre&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;샘플 구현&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아래 샘플은 실제 업무 로직을 숨긴 범용 process queue 예제다. process target은 한 줄 단위 record이고, worker는 이 record를 하나씩 pop해서 process script에 넘긴다. 샘플 process는 실제 작업 대신 record를 print하고 잠깐 sleep한다.&lt;/p&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;Queue Record 형식&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가장 단순한 형태는 한 줄 문자열이다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;target-001
target-002
target-003&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TSV를 쓰면 shell에서 다루기 쉽다.&lt;/p&gt;
&lt;pre class=&quot;angelscript&quot;&gt;&lt;code&gt;target-001    tenant-a    2026-04-01    {&quot;priority&quot;:&quot;high&quot;}
target-002    tenant-b    2026-04-02    {&quot;priority&quot;:&quot;normal&quot;}
target-003    tenant-c    2026-04-03    {&quot;priority&quot;:&quot;low&quot;}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;NDJSON을 쓰면 구조화된 데이터를 그대로 전달하기 쉽다.&lt;/p&gt;
&lt;pre class=&quot;json&quot;&gt;&lt;code&gt;{&quot;id&quot;:&quot;target-001&quot;,&quot;tenant&quot;:&quot;tenant-a&quot;,&quot;date&quot;:&quot;2026-04-01&quot;,&quot;priority&quot;:&quot;high&quot;}
{&quot;id&quot;:&quot;target-002&quot;,&quot;tenant&quot;:&quot;tenant-b&quot;,&quot;date&quot;:&quot;2026-04-02&quot;,&quot;priority&quot;:&quot;normal&quot;}
{&quot;id&quot;:&quot;target-003&quot;,&quot;tenant&quot;:&quot;tenant-c&quot;,&quot;date&quot;:&quot;2026-04-03&quot;,&quot;priority&quot;:&quot;low&quot;}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;중요한 제약:&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;record 하나는 반드시 한 줄이어야 한다.&lt;/li&gt;
&lt;li&gt;worker는 줄 단위로 pop한다.&lt;/li&gt;
&lt;li&gt;TSV/NDJSON 안에 literal newline이 들어가면 안 된다.&lt;/li&gt;
&lt;li&gt;공백이 포함될 수 있으므로 shell에서 record를 항상 quote한다.&lt;/li&gt;
&lt;/ul&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;code&gt;scripts/process-target.sh&lt;/code&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;target 하나를 받아 실제 process를 수행하는 스크립트다. 여기서는 record를 출력만 한다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot;&gt;&lt;code&gt;#!/usr/bin/env bash
set -euo pipefail

if [ &quot;$#&quot; -ne 1 ]; then
  echo &quot;Usage: $0 '&amp;lt;record&amp;gt;'&quot; &amp;gt;&amp;amp;2
  exit 2
fi

record=&quot;$1&quot;
status_file=&quot;${PROCESS_STATUS_FILE:-}&quot;

write_status() {
  [ -n &quot;$status_file&quot; ] || return 0
  mkdir -p &quot;$(dirname &quot;$status_file&quot;)&quot;
  tmp=&quot;$(mktemp &quot;${status_file}.XXXXXX&quot;)&quot;
  if printf &quot;%s\n&quot; &quot;$(date -Is) $*&quot; &amp;gt; &quot;$tmp&quot;; then
    mv -f &quot;$tmp&quot; &quot;$status_file&quot;
  else
    rm -f &quot;$tmp&quot;
    return 1
  fi
}

write_status &quot;phase=running target=$record&quot;
echo &quot;$(date -Is) PROCESS record=$record&quot;

# 실제 업무 로직은 여기에 둔다.
# TSV라면 예: IFS=$'\t' read -r id tenant date meta &amp;lt;&amp;lt;&amp;lt; &quot;$record&quot;
# NDJSON이라면 예: id=$(jq -r '.id' &amp;lt;&amp;lt;&amp;lt; &quot;$record&quot;)
sleep &quot;${PROCESS_SLEEP_SECONDS:-2}&quot;

write_status &quot;phase=done target=$record&quot;
echo &quot;$(date -Is) PROCESS_DONE record=$record&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;code&gt;scripts/process-worker.sh&lt;/code&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EC2의 slot 디렉토리 하나에서 계속 실행되는 worker loop다.&lt;/p&gt;
&lt;pre class=&quot;bash&quot;&gt;&lt;code&gt;#!/usr/bin/env bash
set -euo pipefail

REMOTE_DIR=&quot;${REMOTE_DIR:-/work/process-worker}&quot;
IDLE_SLEEP_SECONDS=&quot;${IDLE_SLEEP_SECONDS:-10}&quot;
PROCESS_SCRIPT=&quot;${PROCESS_SCRIPT:-./process-target.sh}&quot;

cd &quot;$REMOTE_DIR&quot;
mkdir -p logs tmp
touch next completed failed next.lock

if [ ! -x &quot;$PROCESS_SCRIPT&quot; ]; then
  echo &quot;missing executable: ${REMOTE_DIR}/${PROCESS_SCRIPT}&quot; &amp;gt;&amp;amp;2
  exit 127
fi

pop_next() {
  flock next.lock bash -c '
    target=&quot;$(head -n 1 next 2&amp;gt;/dev/null || true)&quot;
    [ -n &quot;$target&quot; ] || exit 1
    tail -n +2 next &amp;gt; next.tmp
    mv next.tmp next
    printf &quot;%s\n&quot; &quot;$target&quot;
  '
}

echo &quot;$(date -Is) worker started in $REMOTE_DIR&quot;

while true; do
  if target=&quot;$(pop_next)&quot;; then
    echo &quot;$(date -Is) START $target&quot;
    if PROCESS_STATUS_FILE=&quot;${REMOTE_DIR}/status&quot; &quot;$PROCESS_SCRIPT&quot; &quot;$target&quot;; then
      echo &quot;$target&quot; &amp;gt;&amp;gt; completed
      echo &quot;$(date -Is) DONE  $target&quot;
    else
      echo &quot;$target&quot; &amp;gt;&amp;gt; failed
      echo &quot;$(date -Is) FAIL  $target&quot;
    fi
  else
    tmp=&quot;$(mktemp &quot;${REMOTE_DIR}/status.XXXXXX&quot;)&quot;
    printf &quot;%s\n&quot; &quot;$(date -Is) phase=idle next=$(wc -l &amp;lt; next 2&amp;gt;/dev/null || echo 0)&quot; &amp;gt; &quot;$tmp&quot;
    mv -f &quot;$tmp&quot; status
    sleep &quot;$IDLE_SLEEP_SECONDS&quot;
  fi
done&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;code&gt;scripts/process-master-refill.sh&lt;/code&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;로컬에서 실행되는 master refill 샘플이다. 같은 instance-id의 여러 slot을 한 번에 조회하고, 인스턴스들은 병렬로 처리한다.&lt;/p&gt;
&lt;pre class=&quot;julia&quot;&gt;&lt;code&gt;#!/usr/bin/env bash
set -euo pipefail

AWS_REGION=&quot;${AWS_REGION:-us-east-1}&quot;
WORKERS_FILE=&quot;${WORKERS_FILE:-workers}&quot;
QUEUE_FILE=&quot;${QUEUE_FILE:-target_process.queue}&quot;
DISPATCHED_FILE=&quot;${DISPATCHED_FILE:-target_process.dispatched}&quot;
MAX_NEXT=&quot;${MAX_NEXT:-5}&quot;
INTERVAL_SECONDS=&quot;${INTERVAL_SECONDS:-10}&quot;
REFILL_PARALLELISM=&quot;${REFILL_PARALLELISM:-20}&quot;
LOCK_FILE=&quot;${LOCK_FILE:-${QUEUE_FILE}.lock}&quot;
ONCE=&quot;${ONCE:-0}&quot;

touch &quot;$QUEUE_FILE&quot; &quot;$DISPATCHED_FILE&quot;

json_commands() {
  python3 - &quot;$@&quot; &amp;lt;&amp;lt;'PY'
import json
import sys
print(&quot;commands=&quot; + json.dumps(list(sys.argv[1:])))
PY
}

wait_command() {
  local instance_id=&quot;$1&quot;
  local command_id=&quot;$2&quot;
  local status

  while true; do
    status=&quot;$(
      aws ssm get-command-invocation \
        --region &quot;$AWS_REGION&quot; \
        --instance-id &quot;$instance_id&quot; \
        --command-id &quot;$command_id&quot; \
        --query Status \
        --output text 2&amp;gt;/dev/null || true
    )&quot;

    case &quot;$status&quot; in
      Success|Failed|Cancelled|TimedOut|Cancelling)
        printf &quot;%s\n&quot; &quot;$status&quot;
        return 0
        ;;
      Pending|InProgress|Delayed|&quot;&quot;)
        sleep 1
        ;;
    esac
  done
}

worker_instances() {
  awk '
    NF &amp;amp;&amp;amp; $1 !~ /^#/ {
      if (!seen[$1]++) order[++n] = $1
      dirs[$1] = dirs[$1] &quot; &quot; $2
    }
    END {
      for (i = 1; i &amp;lt;= n; i++) {
        id = order[i]
        sub(/^ /, &quot;&quot;, dirs[id])
        print id &quot;\t&quot; dirs[id]
      }
    }
  ' &quot;$WORKERS_FILE&quot;
}

pop_local_targets() {
  local count=&quot;$1&quot;
  flock &quot;$LOCK_FILE&quot; bash -c '
    count=&quot;$1&quot;
    queue=&quot;$2&quot;
    [ &quot;$count&quot; -gt 0 ] || exit 0
    [ -s &quot;$queue&quot; ] || exit 0
    head -n &quot;$count&quot; &quot;$queue&quot;
    tail -n +&quot;$((count + 1))&quot; &quot;$queue&quot; &amp;gt; &quot;${queue}.tmp&quot;
    mv &quot;${queue}.tmp&quot; &quot;$queue&quot;
  ' bash &quot;$count&quot; &quot;$QUEUE_FILE&quot;
}

refill_instance_once() {
  local instance_id=&quot;$1&quot;
  local remote_dirs=&quot;$2&quot;
  local cmd_id status output refill_file encoded

  cmd_id=&quot;$(
    aws ssm send-command \
      --region &quot;$AWS_REGION&quot; \
      --instance-ids &quot;$instance_id&quot; \
      --document-name AWS-RunShellScript \
      --comment process-next-counts \
      --parameters &quot;$(
        json_commands \
          &quot;set -euo pipefail&quot; \
          &quot;for d in $remote_dirs; do mkdir -p \&quot;\$d\&quot;; touch \&quot;\$d/next\&quot;; printf '%s\t%s\n' \&quot;\$d\&quot; \&quot;\$(wc -l &amp;lt; \&quot;\$d/next\&quot; 2&amp;gt;/dev/null || echo 0)\&quot;; done&quot;
      )&quot; \
      --query 'Command.CommandId' \
      --output text
  )&quot;

  status=&quot;$(wait_command &quot;$instance_id&quot; &quot;$cmd_id&quot;)&quot;
  [ &quot;$status&quot; = &quot;Success&quot; ] || return 0

  output=&quot;$(
    aws ssm get-command-invocation \
      --region &quot;$AWS_REGION&quot; \
      --instance-id &quot;$instance_id&quot; \
      --command-id &quot;$cmd_id&quot; \
      --query StandardOutputContent \
      --output text
  )&quot;

  refill_file=&quot;$(mktemp)&quot;
  while IFS=$'\t' read -r remote_dir count; do
    [ -n &quot;${remote_dir:-}&quot; ] || continue
    need=$((MAX_NEXT - count))
    [ &quot;$need&quot; -gt 0 ] || continue
    payload=&quot;$(pop_local_targets &quot;$need&quot; || true)&quot;
    [ -n &quot;$payload&quot; ] || continue
    while IFS= read -r target; do
      [ -n &quot;$target&quot; ] || continue
      printf &quot;%s\t%s\n&quot; &quot;$remote_dir&quot; &quot;$target&quot; &amp;gt;&amp;gt; &quot;$refill_file&quot;
    done &amp;lt;&amp;lt;&amp;lt; &quot;$payload&quot;
  done &amp;lt;&amp;lt;&amp;lt; &quot;$output&quot;

  if [ ! -s &quot;$refill_file&quot; ]; then
    rm -f &quot;$refill_file&quot;
    return 0
  fi

  encoded=&quot;$(base64 -w0 &quot;$refill_file&quot;)&quot;
  cmd_id=&quot;$(
    aws ssm send-command \
      --region &quot;$AWS_REGION&quot; \
      --instance-ids &quot;$instance_id&quot; \
      --document-name AWS-RunShellScript \
      --comment process-next-refill \
      --parameters &quot;$(
        json_commands \
          &quot;set -euo pipefail&quot; \
          &quot;printf '%s' '$encoded' | base64 -d &amp;gt; /tmp/process-refill.tsv&quot; \
          &quot;while IFS=\$(printf '\t') read -r d target; do [ -n \&quot;\$d\&quot; ] || continue; [ -n \&quot;\$target\&quot; ] || continue; mkdir -p \&quot;\$d\&quot;; touch \&quot;\$d/next\&quot; \&quot;\$d/next.lock\&quot;; exec 9&amp;gt;&amp;gt;\&quot;\$d/next.lock\&quot;; flock 9; printf '%s\n' \&quot;\$target\&quot; &amp;gt;&amp;gt; \&quot;\$d/next\&quot;; flock -u 9; exec 9&amp;gt;&amp;amp;-; done &amp;lt; /tmp/process-refill.tsv&quot; \
          &quot;rm -f /tmp/process-refill.tsv&quot;
      )&quot; \
      --query 'Command.CommandId' \
      --output text
  )&quot;

  status=&quot;$(wait_command &quot;$instance_id&quot; &quot;$cmd_id&quot;)&quot;
  if [ &quot;$status&quot; = &quot;Success&quot; ]; then
    awk -F '\t' -v ts=&quot;$(date -Is)&quot; -v instance=&quot;$instance_id&quot; '{ print ts &quot;\t&quot; instance &quot;\t&quot; $1 &quot;\t&quot; $2 }' &quot;$refill_file&quot; &amp;gt;&amp;gt; &quot;$DISPATCHED_FILE&quot;
    echo &quot;$(date -Is) refilled instance=$instance_id added=$(wc -l &amp;lt; &quot;$refill_file&quot;)&quot;
  else
    cut -f2- &quot;$refill_file&quot; | cat - &quot;$QUEUE_FILE&quot; &amp;gt; &quot;${QUEUE_FILE}.returned&quot;
    mv &quot;${QUEUE_FILE}.returned&quot; &quot;$QUEUE_FILE&quot;
  fi
  rm -f &quot;$refill_file&quot;
}

refill_once() {
  echo &quot;$(date -Is) queue_remaining=$(wc -l &amp;lt; &quot;$QUEUE_FILE&quot;)&quot;
  pids=()
  active=0
  while IFS=$'\t' read -r instance_id remote_dirs; do
    refill_instance_once &quot;$instance_id&quot; &quot;$remote_dirs&quot; &amp;amp;
    pids+=(&quot;$!&quot;)
    active=$((active + 1))
    if [ &quot;$active&quot; -ge &quot;$REFILL_PARALLELISM&quot; ]; then
      wait &quot;${pids[0]}&quot; || true
      pids=(&quot;${pids[@]:1}&quot;)
      active=$((active - 1))
    fi
  done &amp;lt; &amp;lt;(worker_instances)
  for pid in &quot;${pids[@]}&quot;; do wait &quot;$pid&quot; || true; done
}

while true; do
  refill_once
  [ &quot;$ONCE&quot; = &quot;1&quot; ] &amp;amp;&amp;amp; exit 0
  sleep &quot;$INTERVAL_SECONDS&quot;
done&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;&lt;code&gt;monitor-process-workers.sh&lt;/code&gt;&lt;/h3&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;간단한 monitor 샘플이다. 인스턴스별로 &lt;code&gt;/1 /2 /3&lt;/code&gt;를 한 번에 조회하고, 여러 인스턴스는 병렬로 조회한다.&lt;/p&gt;
&lt;pre class=&quot;powershell&quot;&gt;&lt;code&gt;#!/usr/bin/env bash
set -euo pipefail

AWS_REGION=&quot;${AWS_REGION:-us-east-1}&quot;
WORKERS_FILE=&quot;${WORKERS_FILE:-workers}&quot;

json_commands() {
  python3 - &quot;$@&quot; &amp;lt;&amp;lt;'PY'
import json
import sys
print(&quot;commands=&quot; + json.dumps(list(sys.argv[1:])))
PY
}

worker_instances() {
  awk '
    NF &amp;amp;&amp;amp; $1 !~ /^#/ {
      if (!seen[$1]++) order[++n] = $1
      dirs[$1] = dirs[$1] &quot; &quot; $2
    }
    END {
      for (i = 1; i &amp;lt;= n; i++) {
        id = order[i]
        sub(/^ /, &quot;&quot;, dirs[id])
        print id &quot;\t&quot; dirs[id]
      }
    }
  ' &quot;$WORKERS_FILE&quot;
}

monitor_instance() {
  local instance_id=&quot;$1&quot;
  local remote_dirs=&quot;$2&quot;
  local cmd_id status output

  cmd_id=&quot;$(
    aws ssm send-command \
      --region &quot;$AWS_REGION&quot; \
      --instance-ids &quot;$instance_id&quot; \
      --document-name AWS-RunShellScript \
      --comment process-worker-status \
      --parameters &quot;$(
        json_commands \
          &quot;set -euo pipefail&quot; \
          &quot;read_cpu() { awk '/^cpu / { total=0; for (i=2; i&amp;lt;=NF; i++) total+=\$i; print total, \$5 }' /proc/stat; }&quot; \
          &quot;read_net() { awk -F'[: ]+' '\$2 != \&quot;lo\&quot; { rx+=\$3; tx+=\$11 } END { print rx+0, tx+0 }' /proc/net/dev; }&quot; \
          &quot;human_rate() { awk -v b=\&quot;\$1\&quot; 'BEGIN { split(\&quot;B/s KB/s MB/s GB/s TB/s\&quot;, u); i=1; while (b &amp;gt;= 1024 &amp;amp;&amp;amp; i &amp;lt; 5) { b/=1024; i++ } printf \&quot;%.1f%s\&quot;, b, u[i] }'; }&quot; \
          &quot;read cpu_total_1 cpu_idle_1 &amp;lt; &amp;lt;(read_cpu)&quot; \
          &quot;read rx_1 tx_1 &amp;lt; &amp;lt;(read_net)&quot; \
          &quot;sleep 1&quot; \
          &quot;read cpu_total_2 cpu_idle_2 &amp;lt; &amp;lt;(read_cpu)&quot; \
          &quot;read rx_2 tx_2 &amp;lt; &amp;lt;(read_net)&quot; \
          &quot;cpu_pct=\$(awk -v t1=\&quot;\$cpu_total_1\&quot; -v i1=\&quot;\$cpu_idle_1\&quot; -v t2=\&quot;\$cpu_total_2\&quot; -v i2=\&quot;\$cpu_idle_2\&quot; 'BEGIN { dt=t2-t1; di=i2-i1; if (dt &amp;lt;= 0) printf \&quot;0.0%%\&quot;; else printf \&quot;%.1f%%\&quot;, (dt-di)*100/dt }')&quot; \
          &quot;rx_rate=\$(human_rate \$((rx_2 - rx_1)))&quot; \
          &quot;tx_rate=\$(human_rate \$((tx_2 - tx_1)))&quot; \
          &quot;for d in $remote_dirs; do if ! cd \&quot;\$d\&quot; 2&amp;gt;/dev/null; then printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \&quot;\$d\&quot; '-' '-' '-' \&quot;\$cpu_pct\&quot; \&quot;\$rx_rate\&quot; \&quot;\$tx_rate\&quot; 'MISSING_DIR'; continue; fi; next=\$(wc -l &amp;lt; next 2&amp;gt;/dev/null || echo 0); completed=\$(wc -l &amp;lt; completed 2&amp;gt;/dev/null || echo 0); failed=\$(wc -l &amp;lt; failed 2&amp;gt;/dev/null || echo 0); status=\$(cat status 2&amp;gt;/dev/null || echo no-status); printf '%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n' \&quot;\$d\&quot; \&quot;\$next\&quot; \&quot;\$completed\&quot; \&quot;\$failed\&quot; \&quot;\$cpu_pct\&quot; \&quot;\$rx_rate\&quot; \&quot;\$tx_rate\&quot; \&quot;\$status\&quot;; done&quot;
      )&quot; \
      --query 'Command.CommandId' \
      --output text
  )&quot;

  while true; do
    status=&quot;$(
      aws ssm get-command-invocation \
        --region &quot;$AWS_REGION&quot; \
        --instance-id &quot;$instance_id&quot; \
        --command-id &quot;$cmd_id&quot; \
        --query Status \
        --output text 2&amp;gt;/dev/null || true
    )&quot;
    case &quot;$status&quot; in Success|Failed|Cancelled|TimedOut|Cancelling) break ;; esac
    sleep 1
  done

  output=&quot;$(
    aws ssm get-command-invocation \
      --region &quot;$AWS_REGION&quot; \
      --instance-id &quot;$instance_id&quot; \
      --command-id &quot;$cmd_id&quot; \
      --query StandardOutputContent \
      --output text 2&amp;gt;/dev/null || true
  )&quot;

  while IFS=$'\t' read -r dir next completed failed cpu_pct rx_rate tx_rate status_line; do
    [ -n &quot;${dir:-}&quot; ] || continue
    printf &quot;%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n&quot; &quot;$instance_id&quot; &quot;$dir&quot; &quot;$next&quot; &quot;$completed&quot; &quot;$failed&quot; &quot;$cpu_pct&quot; &quot;$rx_rate&quot; &quot;$tx_rate&quot; &quot;$status_line&quot;
  done &amp;lt;&amp;lt;&amp;lt; &quot;$output&quot;
}

tmp_dir=&quot;$(mktemp -d)&quot;
trap 'rm -rf &quot;$tmp_dir&quot;' EXIT

i=0
while IFS=$'\t' read -r instance_id remote_dirs; do
  [ -n &quot;${instance_id:-}&quot; ] || continue
  i=$((i + 1))
  monitor_instance &quot;$instance_id&quot; &quot;$remote_dirs&quot; &amp;gt; &quot;$tmp_dir/$i.out&quot; &amp;amp;
done &amp;lt; &amp;lt;(worker_instances)
wait

printf &quot;%-22s %-8s %8s %10s %8s %7s %10s %10s  %s\n&quot; &quot;INSTANCE&quot; &quot;DIR&quot; &quot;NEXT&quot; &quot;COMPLETED&quot; &quot;FAILED&quot; &quot;CPU&quot; &quot;RX/s&quot; &quot;TX/s&quot; &quot;STATUS&quot;
total_next=0
total_completed=0
total_failed=0

for f in &quot;$tmp_dir&quot;/*.out; do
  [ -e &quot;$f&quot; ] || continue
  while IFS=$'\t' read -r instance_id dir next completed failed cpu_pct rx_rate tx_rate status_line; do
    [[ &quot;$next&quot; =~ ^[0-9]+$ ]] &amp;amp;&amp;amp; total_next=$((total_next + next))
    [[ &quot;$completed&quot; =~ ^[0-9]+$ ]] &amp;amp;&amp;amp; total_completed=$((total_completed + completed))
    [[ &quot;$failed&quot; =~ ^[0-9]+$ ]] &amp;amp;&amp;amp; total_failed=$((total_failed + failed))
    printf &quot;%-22s %-8s %8s %10s %8s %7s %10s %10s  %s\n&quot; &quot;$instance_id&quot; &quot;$dir&quot; &quot;$next&quot; &quot;$completed&quot; &quot;$failed&quot; &quot;$cpu_pct&quot; &quot;$rx_rate&quot; &quot;$tx_rate&quot; &quot;$status_line&quot;
  done &amp;lt; &quot;$f&quot;
done

echo
echo &quot;TOTAL next=$total_next completed=$total_completed failed=$total_failed&quot;&lt;/code&gt;&lt;/pre&gt;
&lt;h3 data-ke-size=&quot;size23&quot;&gt;샘플 실행 흐름&lt;/h3&gt;
&lt;pre class=&quot;routeros&quot;&gt;&lt;code&gt;# 1. queue 준비
cat &amp;gt; target_process.queue &amp;lt;&amp;lt;'EOF'
target-001    tenant-a    2026-04-01    {&quot;priority&quot;:&quot;high&quot;}
target-002    tenant-b    2026-04-02    {&quot;priority&quot;:&quot;normal&quot;}
target-003    tenant-c    2026-04-03    {&quot;priority&quot;:&quot;low&quot;}
EOF

# 2. workers 파일 준비
: &amp;gt; workers
while read -r id; do
  printf '%s /1\n%s /2\n%s /3\n' &quot;$id&quot; &quot;$id&quot; &quot;$id&quot; &amp;gt;&amp;gt; workers
done &amp;lt; process-workers.instances

# 3. worker 배포 후 master 실행
WORKERS_FILE=workers \
QUEUE_FILE=target_process.queue \
MAX_NEXT=5 \
REFILL_PARALLELISM=10 \
INTERVAL_SECONDS=10 \
scripts/process-master-refill.sh

# 4. 별도 터미널에서 monitor
watch -n 5 'WORKERS_FILE=workers ./monitor-process-workers.sh'&lt;/code&gt;&lt;/pre&gt;
&lt;div id=&quot;gtx-trans&quot; style=&quot;position: absolute; left: 457px; top: 16141.1px;&quot;&gt;
&lt;div class=&quot;gtx-trans-icon&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;/div&gt;</description>
      <category>개발/AWS</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/106</guid>
      <comments>https://hbs.pe.kr/entry/EC2-MasterWorker-Process-Queue#entry106comment</comments>
      <pubDate>Wed, 29 Apr 2026 14:46:23 +0900</pubDate>
    </item>
    <item>
      <title>2026-04 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2026-04-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1775622760275&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;2021년부터 지속하고있는 내 투자 규칙이다.매수 규칙이 2023년 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pbS1T/dJMb8WMqq2X/C76OatkDlKAMUW3zxH3v71/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/SSpRl/dJMb8TCas38/QHQVhpjXkKy478pohkoH5k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/euYINn/dJMb9bv28oa/yiw9Ol3Oq984B2cLOnd910/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pbS1T/dJMb8WMqq2X/C76OatkDlKAMUW3zxH3v71/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/SSpRl/dJMb8TCas38/QHQVhpjXkKy478pohkoH5k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/euYINn/dJMb9bv28oa/yiw9Ol3Oq984B2cLOnd910/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2021년부터 지속하고있는 내 투자 규칙이다.매수 규칙이 2023년 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;2회+ 연속&lt;span&gt;&amp;nbsp;&lt;/span&gt;음봉 = x4+를 TQQQ 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전쟁이 격화되고있다. 많이 내려온 TQQQ를 4배수로 매수했다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>qqq</category>
      <category>SCHD</category>
      <category>TQQQ</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/105</guid>
      <comments>https://hbs.pe.kr/entry/2026-04-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry105comment</comments>
      <pubDate>Wed, 8 Apr 2026 13:33:16 +0900</pubDate>
    </item>
    <item>
      <title>2026-03 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2026-03-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1773147796724&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;2021년부터 지속하고있는 내 투자 규칙이다.매수 규칙이 2023년 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bcjj9w/dJMb9cBGlSE/8ZipS3F90gaWUz0SaU79vk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bTKZjN/dJMb85WRxEd/9MEhKoqXML7M6s5pZrlkqK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bjHkh8/dJMb88eYUcu/XaK3bsliPziidd05iHKEZK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bcjj9w/dJMb9cBGlSE/8ZipS3F90gaWUz0SaU79vk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bTKZjN/dJMb85WRxEd/9MEhKoqXML7M6s5pZrlkqK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bjHkh8/dJMb88eYUcu/XaK3bsliPziidd05iHKEZK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2021년부터 지속하고있는 내 투자 규칙이다.매수 규칙이 2023년 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1회&amp;nbsp;전월&amp;nbsp;음봉&amp;nbsp;=&amp;nbsp;x1를&amp;nbsp;SCHD,&amp;nbsp;1x를&amp;nbsp;TQQQ&amp;nbsp;매수 &lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SCHD는 계속 상승중이고, 나스닥이 이란 전쟁여파로 내리막중이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;26년 1~2월간 기록적인 SCHD 상승률 덕에 계좌가 빵빵하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;안먹어도 배부를정도...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;새해니 연금저축펀드, IRP, ISA를 새롭게 한도까지 채우기 시작한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;ISA는 3년 만기가 되어 만기해지 후 연저펀 1,2 계좌에 분산하여 납입했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;연금은 IRP와 합쳐 1년에 1800까지밖에 불입이 불가능하지만 ISA 만기자금의 경우 예외로 만기 금액의 100%를 불입시켜준다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해 세금이연을 누리면서 투자를 이어나갈 수 있다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>qqq</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/104</guid>
      <comments>https://hbs.pe.kr/entry/2026-03-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry104comment</comments>
      <pubDate>Tue, 10 Mar 2026 22:07:24 +0900</pubDate>
    </item>
    <item>
      <title>2026-02 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2026-02-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1770428365982&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;2021년부터 지속하고있는 내 투자 규칙이다.매수 규칙이 2023년 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pbbGc/dJMb8PGrJCO/VhWkqrKN5FVMiL7sDnfEwk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/KHudy/dJMb8Weu91G/xpD8puZ36LGyhUFksoitc1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dyXIKp/dJMb8T9U0FH/ArauzSw1d8YbQ54YMeEkh1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pbbGc/dJMb8PGrJCO/VhWkqrKN5FVMiL7sDnfEwk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/KHudy/dJMb8Weu91G/xpD8puZ36LGyhUFksoitc1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dyXIKp/dJMb8T9U0FH/ArauzSw1d8YbQ54YMeEkh1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;2021년부터 지속하고있는 내 투자 규칙이다.매수 규칙이 2023년 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock floatRight&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;238&quot; data-origin-height=&quot;229&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2M5k6/dJMcadAQhEJ/BrKKFh4gRg7IOKcoI9mkqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2M5k6/dJMcadAQhEJ/BrKKFh4gRg7IOKcoI9mkqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2M5k6/dJMcadAQhEJ/BrKKFh4gRg7IOKcoI9mkqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2M5k6%2FdJMcadAQhEJ%2FBrKKFh4gRg7IOKcoI9mkqK%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;137&quot; height=&quot;229&quot; data-origin-width=&quot;238&quot; data-origin-height=&quot;229&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SCHD의 기록적인 상승이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 어느정도 예견되어있었다. 확실한 배당만 주는 100개주식을 모아둔 ETF인데 배당률이 최근 4%에 육박할 정도로 주가가 억눌려있었다. SCHD의 평균은 3% 초중반까지다. 명백한 저평가 구간이며 이를 기반한 상승 여력이 30%에 달했다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;939&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/xvGqM/dJMcahDhWNC/lOnO7F8bgKmhgWuAzqsHy1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/xvGqM/dJMcahDhWNC/lOnO7F8bgKmhgWuAzqsHy1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/xvGqM/dJMcahDhWNC/lOnO7F8bgKmhgWuAzqsHy1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FxvGqM%2FdJMcahDhWNC%2FlOnO7F8bgKmhgWuAzqsHy1%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;502&quot; height=&quot;939&quot; data-origin-width=&quot;1750&quot; data-origin-height=&quot;939&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나스닥과 AI 관련 기술주 위주의 테마쪽으로만 자금이 쏠려 가치주가 억눌려있었던 것인데, 이제 순환매로 눌려있던 가치주로 자금이 흘러들어온다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사람들은 주가가 눌려있는것이 안좋다고 생각한다. &lt;br /&gt;하지만 배당주는 다르다. 회사의 이익잉여금 기반으로 배당을 하니, 저렴하게 살 수 있다면 무조건 이익이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1주마다 100원을 주는 주식을 1000원에 팔다가 500원에 팔면 바겐세일인거다. 왜냐면 배당은 100원 그대로도 아니고 오히려 늘어나 101원으로 늘어가니까.. 레버리지, 커버드콜이 끼어있지 않은 순수 1배짜리 배당 ETF는 배당률과 배당금을 보고 수량만 모아가면 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SCHD의 20년간 연평균 토탈리턴은 약 10% 전후로, 최근 눌려있던 주가 상황을 감안하면 거의 배당액(3%) 수준으로 눌려있고 반대로 말하면 한번에 크게 상승할 타이밍이 다가오고 있었고, 이를 위해 수량을 많이 모아두고있는 상황이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;뭐, 될거같으니까 룰을 만들어 오래 모아오고 있는데 막상 이뤄지니 재밌네.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배당주 특징은 기록적인 MDD가 -10~-20% 수준으로, QQQ나 S&amp;amp;P500 같은 -50~-60% 보다 훨씬 낮다.&lt;br /&gt;즉, 여기서 폭락장이 발생해도 내 수익률이 음전할 가능성이 이젠 없다는 말이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그야말로 목돈을 집어넣고 굴리기에 이것보다 최적인 상황이 있을까..?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;재태크는 재정으로 인생의 방향을 결정하는 일이다. 인생의 방향을 좌지우지 하려면 작은 금액으로 100%, 1000%하는것은 의미가 없고, 로또식 운에 맡기는 식으로 전재산을 굴릴 수도 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;작은 수익률도 큰 금액으로 움직일 수 있게 크게 굴리면서, 따라오는 리스크는 시간에 녹여 상쇄시켜야한다. 시간을 줄이려는것은 리스크를 안는다는 것이다. 반대로, 시간을 늘리면 리스크는 한없이 사라지며 거의 확정적인 수익률 그래프를 따라가도록 셋팅할 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;장기투자에서 필요한 것은 인내심이고 그것이 가장 어려운 것이다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/103</guid>
      <comments>https://hbs.pe.kr/entry/2026-02-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry103comment</comments>
      <pubDate>Sat, 7 Feb 2026 10:52:46 +0900</pubDate>
    </item>
    <item>
      <title>ZZZ 강습전 모독자 킬 (빛아자)</title>
      <link>https://hbs.pe.kr/entry/ZZZ-%EA%B0%95%EC%8A%B5%EC%A0%84-%EB%AA%A8%EB%8F%85%EC%9E%90-%ED%82%AC-%EB%B9%9B%EC%95%84%EC%9E%90</link>
      <description>&lt;p&gt;&lt;iframe src=&quot;https://www.youtube.com/embed/X8sUHuXlEQc?si=VUNFd1Pq0TIbnWsH&quot; width=&quot;560&quot; height=&quot;315&quot; frameborder=&quot;&quot; allowfullscreen=&quot;true&quot;&gt;&lt;/iframe&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아스트라 1돌파 꽝꽝이. 디스크 셋팅을 고요에서 달빛 4로 변경&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자오 전무에 고요 4셋&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;엽빛나 2돌 전무&lt;/p&gt;</description>
      <category>일상/갬성</category>
      <category>zzz</category>
      <category>강습전</category>
      <category>모독자</category>
      <category>젠레스존제로</category>
      <category>젠존제</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/102</guid>
      <comments>https://hbs.pe.kr/entry/ZZZ-%EA%B0%95%EC%8A%B5%EC%A0%84-%EB%AA%A8%EB%8F%85%EC%9E%90-%ED%82%AC-%EB%B9%9B%EC%95%84%EC%9E%90#entry102comment</comments>
      <pubDate>Thu, 22 Jan 2026 08:40:58 +0900</pubDate>
    </item>
    <item>
      <title>2026-01 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2026-01-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1767852623659&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cAqRv8/hyZRe39pSu/PE4PGFbfM0kqZH5TDWVrW0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/HDR1a/hyZPMBGKls/j5GZxE8kCkcxJhatYx2rU1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/i6ZYa/hyZRqKhO7K/c9xkLoWTJpBQ3Esd8nPYMK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cAqRv8/hyZRe39pSu/PE4PGFbfM0kqZH5TDWVrW0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/HDR1a/hyZPMBGKls/j5GZxE8kCkcxJhatYx2rU1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/i6ZYa/hyZRqKhO7K/c9xkLoWTJpBQ3Esd8nPYMK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 음봉 = x1를 SCHD, 1x를 TQQQ 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;원래 지난달이 음봉이었는데 실수했다. 이번달은 슈드와 나스닥 레버리지를 매수했다.&lt;br /&gt;주식 계좌는 폭발적으로 성장하고있다.&lt;br /&gt;적립식 투자인데도 현재 28%가량 토탈리턴 수익률을 기록중인데, 초기 자금의 거치식 수익률로 환산해보면 거의 50%를 넘는 상태라고 볼 수 있다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;242&quot; data-origin-height=&quot;264&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bBXXnF/dJMcaaxeZL3/v5ZQZbZ74voPRIQzUB0Ub1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bBXXnF/dJMcaaxeZL3/v5ZQZbZ74voPRIQzUB0Ub1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bBXXnF/dJMcaaxeZL3/v5ZQZbZ74voPRIQzUB0Ub1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbBXXnF%2FdJMcaaxeZL3%2Fv5ZQZbZ74voPRIQzUB0Ub1%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;127&quot; height=&quot;139&quot; data-origin-width=&quot;242&quot; data-origin-height=&quot;264&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;회사 일로 계속 스트레스 받는 상황이다.&lt;br /&gt;내가 내린 결정, 과연 옳은 결정인가? 아닌가? 앞날을 한치 앞도 예측할 수 없다.&lt;br /&gt;내년 이맘때쯤 다시 지금을 되돌아보고 소회를 남겨봐야겠다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/101</guid>
      <comments>https://hbs.pe.kr/entry/2026-01-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry101comment</comments>
      <pubDate>Thu, 8 Jan 2026 15:12:32 +0900</pubDate>
    </item>
    <item>
      <title>Databricks SQL을 위한 경량 Node.js 클라이언트 라이브러리 개발기</title>
      <link>https://hbs.pe.kr/entry/Databricks-SQL%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B2%BD%EB%9F%89-Nodejs-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EA%B0%9C%EB%B0%9C%EA%B8%B0</link>
      <description>&lt;h2&gt;들어가며&lt;/h2&gt;
&lt;p&gt;MCP (Model Context Protocol) Server를 개발하면서 Databricks SQL로 대용량 데이터셋을 쿼리해야 하는 요구사항이 들어왔습니다. 자연스럽게 공식 Databricks Node.js SDK를 사용하려 했지만, 곧 문제에 부딪혔습니다. 대용량 결과를 처리할 방법이 없었습니다.&lt;/p&gt;
&lt;p&gt;이 글에서는 이 문제를 해결하기 위해 두 개의 라이브러리(&lt;a href=&quot;https://github.com/bitofsky/merge-streams&quot;&gt;@bitofsky/merge-streams&lt;/a&gt;, &lt;a href=&quot;https://github.com/bitofsky/databricks-sql&quot;&gt;@bitofsky/databricks-sql&lt;/a&gt;)를 개발한 과정과, 그 과정에서 얻은 인사이트를 공유하고자 합니다.&lt;/p&gt;
&lt;h2&gt;문제: SDK External Links 미지원&lt;/h2&gt;
&lt;p&gt;SDK에선 fetchChunk로 대량 result set을 부분적으로 처리하도록 callback을 제공하지만, 대량 데이터를 MCP Client로 이렇게 내려줄 수는 없습니다. 이를 위해선 External Links가 필요하지만 이는 SDK에서 지원되지 않으며 API에서만 사용이 가능합니다.&lt;/p&gt;
&lt;h3&gt;API INLINE vs EXTERNAL_LINKS&lt;/h3&gt;
&lt;p&gt;Databricks Statement Execution API는 쿼리 결과를 반환하는 두 가지 방식을 제공합니다:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;INLINE 방식&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 전체 결과가 응답에 포함됨
{
  &amp;quot;result&amp;quot;: {
    &amp;quot;data_array&amp;quot;: [
      [1, &amp;quot;Alice&amp;quot;, 30],
      [2, &amp;quot;Bob&amp;quot;, 25],
      // ... 모든 행
    ]
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;제한사항&lt;/strong&gt;: 최대 25MB까지만 지원&lt;/p&gt;
&lt;p&gt;이 방식의 문제는 명확합니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;25MB 이상의 결과는 받을 수 없음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;EXTERNAL_LINKS 방식&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 결과가 여러 청크로 분할되어 presigned URL로 제공됨
{
  &amp;quot;result&amp;quot;: {
    &amp;quot;external_links&amp;quot;: [
      { &amp;quot;external_link&amp;quot;: &amp;quot;https://s3.../chunk_0.json&amp;quot;, ... },
      { &amp;quot;external_link&amp;quot;: &amp;quot;https://s3.../chunk_1.json&amp;quot;, ... },
      // ... 수십~수백 개의 청크
    ]
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;제한사항&lt;/strong&gt;: 최대 100GB까지 지원 (INLINE의 4000배!)&lt;/p&gt;
&lt;p&gt;이 방식의 장점:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;대용량 결과 처리 가능 (최대 100GB)&lt;/li&gt;
&lt;li&gt;메모리 효율적 (스트리밍 처리)&lt;/li&gt;
&lt;li&gt;각 청크를 병렬로 다운로드 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;선택의 기로&lt;/h3&gt;
&lt;p&gt;두 가지 선택지가 있었습니다:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;SDK를 사용하고 큰 Result 결과를 포기&lt;/li&gt;
&lt;li&gt;Databricks API를 직접 구현하여 External Links 사용&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;MCP Server의 요구사항을 생각해보니:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;수백만 건의 레코드를 다뤄야 함&lt;/li&gt;
&lt;li&gt;Databricks가 지원하는 최대 100GB까지 반환 가능하게 하고 싶음&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;선택은 명확했습니다. Databricks API를 사용한 라이브러리를 직접 구현하기로 결정했습니다.&lt;br&gt;직접 구현된 라이브러리를 사용하면서 공식 SDK도 병행하게 되면 유지보수가 복잡해질 수 있기 때문에, 라이브러리는 공식 SDK의 거의 모든 기능을 대체하도록 설계했습니다.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;쿼리 실행 및 Statement 상태 추적&lt;/li&gt;
&lt;li&gt;결과 스트리밍&lt;/li&gt;
&lt;li&gt;에러 처리 &amp;amp; 자동 재시도&lt;/li&gt;
&lt;li&gt;Result Set 파싱&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;새로운 문제: 청크 지옥&lt;/h2&gt;
&lt;p&gt;Databricks API를 직접 구현하니 External Links를 사용할 수 있게 되었습니다. 하지만 새로운 문제가 나타났습니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chunk_0.arrow (presigned URL)
chunk_1.arrow (presigned URL)
chunk_2.arrow (presigned URL)
...
chunk_89.arrow (presigned URL)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;100만 건 쿼리 결과가 90개의 청크로 쪼개져 왔습니다. 이제 무엇을 해야 할까요?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;90개의 URL을 클라이언트에 그대로 전달?&lt;ul&gt;
&lt;li&gt;90개의 Presigned URL이 LLM Context를 순식간에 고갈시킴&lt;/li&gt;
&lt;li&gt;클라이언트가 90번의 HTTP 요청을 해야 함&lt;/li&gt;
&lt;li&gt;각 청크를 순서대로 올바르게 병합하거나 고려하여 쿼리해야 함&lt;/li&gt;
&lt;li&gt;포맷별 처리 로직 필요 (CSV 헤더? JSON 배열? Arrow EOS 마커?)&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;서버에서 순서와 포멧을 유지한 올바른 병합 후 단일 URL 제공?&lt;ul&gt;
&lt;li&gt;훨씬 나은 사용자 경험&lt;/li&gt;
&lt;li&gt;하지만 직접 구현해야 함&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;명백히 두 번째가 더 나은 선택이었습니다.&lt;/p&gt;
&lt;h2&gt;또 다른 문제: 압축 미지원&lt;/h2&gt;
&lt;p&gt;서버에서 병합하기로 결정했지만, 곧 또 다른 제약을 발견했습니다. &lt;strong&gt;Databricks의 External Links는 압축을 지원하지 않습니다.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;External Links는 최대 100GB까지 지원하지만, 모두 압축되지 않은 상태입니다:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chunk_0.csv (20MB, 압축되지 않음)
chunk_1.csv (20MB, 압축되지 않음)
...
chunk_89.csv (20MB, 압축되지 않음)

총 크기: 1.8GB (최대 100GB까지 가능)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;SQL 쿼리 결과는 대부분 문자열 데이터입니다. 이런 데이터는 압축률이 매우 높습니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSV: 컬럼명 반복, 유사한 패턴&lt;/li&gt;
&lt;li&gt;JSON: 키 이름 반복, 공백 문자&lt;/li&gt;
&lt;li&gt;실제 압축률: &lt;strong&gt;평균 1/10 이하&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;클라이언트에게 1.8GB 파일을 다운로드하게 할 것인가, 아니면 180MB만 다운로드하게 할 것인가?&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;병합 과정에서 gzip 압축을 적용하면&lt;/strong&gt; 이 문제를 해결할 수 있습니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;클라이언트 다운로드 시간 10배 단축&lt;/li&gt;
&lt;li&gt;네트워크 비용 90% 절감&lt;/li&gt;
&lt;li&gt;더 나은 사용자 경험&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;리서치: 포맷별 병합 문제&lt;/h2&gt;
&lt;p&gt;청크를 단순히 연결하면 될까요? 아닙니다. 각 포맷마다 고유한 문제가 있습니다.&lt;br&gt;Databricks API는 3가지 주요 포맷을 지원합니다:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSV&lt;/li&gt;
&lt;li&gt;JSON_ARRAY&lt;/li&gt;
&lt;li&gt;ARROW_STREAM&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;각 포맷별 병합 문제를 살펴보겠습니다.&lt;/p&gt;
&lt;h3&gt;CSV: 중복 헤더 문제&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;# chunk_0.csv
name,age
Alice,30
Bob,25

# chunk_1.csv
name,age
Charlie,35
David,40&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;단순 연결하면:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;name,age
Alice,30
Bob,25
name,age        ← 중복!
Charlie,35
David,40&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;해결&lt;/strong&gt;: 첫 번째 청크의 헤더만 유지하고 나머지는 스킵해야 합니다.&lt;/p&gt;
&lt;h3&gt;JSON_ARRAY: 유효하지 않은 JSON&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;// chunk_0.json
[{&amp;quot;id&amp;quot;:1},{&amp;quot;id&amp;quot;:2}]

// chunk_1.json
[{&amp;quot;id&amp;quot;:3},{&amp;quot;id&amp;quot;:4}]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;단순 연결하면:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;[{&amp;quot;id&amp;quot;:1},{&amp;quot;id&amp;quot;:2}][{&amp;quot;id&amp;quot;:3},{&amp;quot;id&amp;quot;:4}]  // 유효하지 않음!&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;해결&lt;/strong&gt;: 브래킷을 제거하고 쉼표로 연결한 뒤 전체를 배열로 감싸야 합니다.&lt;/p&gt;
&lt;h3&gt;ARROW_STREAM: EOS 마커 문제&lt;/h3&gt;
&lt;p&gt;Arrow IPC 스트림은 각 청크가 독립적인 스트림입니다:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;chunk_0: [Schema][RecordBatch][RecordBatch][EOS]
chunk_1: [Schema][RecordBatch][RecordBatch][EOS]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;대부분의 Arrow 리더는 첫 번째 EOS 마커에서 읽기를 중단합니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;해결&lt;/strong&gt;: 각 청크에서 RecordBatch만 추출하여 새로운 단일 IPC 스트림으로 재인코딩해야 합니다.&lt;/p&gt;
&lt;h2&gt;해결책: 두 개의 라이브러리&lt;/h2&gt;
&lt;p&gt;이 문제를 해결하기 위해 두 개의 라이브러리를 분리하여 개발했습니다.&lt;/p&gt;
&lt;h3&gt;1. &lt;a href=&quot;https://github.com/bitofsky/merge-streams&quot;&gt;@bitofsky/merge-streams&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;범용 스트림 병합 라이브러리. Databricks에 종속되지 않으며, CSV, JSON_ARRAY, ARROW_STREAM 포맷의 청크를 올바르게 병합합니다.&lt;/p&gt;
&lt;h3&gt;2. &lt;a href=&quot;https://github.com/bitofsky/databricks-sql&quot;&gt;@bitofsky/databricks-sql&lt;/a&gt;&lt;/h3&gt;
&lt;p&gt;Databricks 전용 SQL 클라이언트. Databricks API를 직접 호출하고 &lt;code&gt;merge-streams&lt;/code&gt;를 활용하여 External Links를 처리합니다.&lt;/p&gt;
&lt;h2&gt;@bitofsky/merge-streams: 포맷 인식 스트림 병합&lt;/h2&gt;
&lt;h3&gt;핵심 가치&lt;/h3&gt;
&lt;blockquote data-ke-style=&quot;style1&quot;&gt;&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;font-family: 'Noto Serif KR';&quot;&gt;&lt;p&gt;&amp;quot;When Databricks gives you 90+ presigned URLs, merge them into one.&amp;quot;&lt;/p&gt;
&lt;/span&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;이 라이브러리는 하나의 문제에 집중합니다: 여러 청크 스트림을 포맷에 맞게 올바르게 병합하는 것.&lt;/p&gt;
&lt;h3&gt;주요 특징&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. 포맷별 병합&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;import { mergeStreamsFromUrls } from &amp;#39;@bitofsky/merge-streams&amp;#39;
import { createWriteStream } from &amp;#39;fs&amp;#39;

// CSV 병합 - 자동으로 중복 헤더 제거
await mergeStreamsFromUrls(&amp;#39;CSV&amp;#39;, {
  urls: [
    &amp;#39;https://example.com/chunk_0.csv&amp;#39;,
    &amp;#39;https://example.com/chunk_1.csv&amp;#39;,
    &amp;#39;https://example.com/chunk_2.csv&amp;#39;,
  ],
  output: createWriteStream(&amp;#39;merged.csv&amp;#39;),
})

// JSON 병합 - 올바른 JSON 배열 생성
await mergeStreamsFromUrls(&amp;#39;JSON_ARRAY&amp;#39;, {
  urls: [/* ... */],
  output: createWriteStream(&amp;#39;merged.json&amp;#39;),
})

// Arrow 병합 - RecordBatch 재인코딩
await mergeStreamsFromUrls(&amp;#39;ARROW_STREAM&amp;#39;, {
  urls: [/* ... */],
  output: createWriteStream(&amp;#39;merged.arrow&amp;#39;),
})&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;2. 메모리 효율적 스트리밍&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;전체 파일을 메모리에 로드하지 않습니다. 청크별로 스트리밍 처리하므로:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;테스트: 1GB 데이터 (50개 청크)
- 전체 로드 방식: ~1GB 메모리
- merge-streams: ~30MB 메모리
- 절감: 약 97%&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;3. Pre-connection 최적화&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 현재 청크 스트리밍 중에 다음 청크 연결을 미리 시작
현재 청크:  chunk_0 =====&amp;gt; output
다음 청크:  chunk_1 [connecting...]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;이 최적화로 청크 간 HTTP Connection 수립에 필요한 대기 시간이 거의 제거됩니다:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;순차 처리: 50개 × 200ms 대기 = 10초
Pre-connection: 첫 청크 200ms + 나머지 ~0ms = 약 1초
개선: 약 10배&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;4. 진행 상황 추적&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;await mergeStreamsFromUrls(&amp;#39;CSV&amp;#39;, {
  urls,
  output,
  onProgress: ({ inputIndex, totalInputs, inputedBytes, mergedBytes }) =&amp;gt; {
    const percent = ((inputIndex + 1) / totalInputs * 100).toFixed(1)
    console.log(`Progress: ${percent}% (${(inputedBytes / 1024 / 1024).toFixed(2)} MB read)`)
  },
})&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;5. 취소 가능한 작업&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const controller = new AbortController()
setTimeout(() =&amp;gt; controller.abort(), 5000) // 5초 후 취소

await mergeStreamsFromUrls(&amp;#39;CSV&amp;#39;, {
  urls,
  output,
  signal: controller.signal,
})&lt;/code&gt;&lt;/pre&gt;&lt;h3&gt;실제 사용 예: Databricks + S3 + gzip compression&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import { mergeStreamsFromUrls } from &amp;#39;@bitofsky/merge-streams&amp;#39;
import { Upload } from &amp;#39;@aws-sdk/lib-storage&amp;#39;
import { createGzip } from &amp;#39;zlib&amp;#39;

// Databricks External Links 병합 후 S3에 압축 업로드
const gzip = createGzip()
const passThrough = new PassThrough()

const upload = new Upload({
  client: s3,
  params: {
    Bucket: &amp;#39;my-bucket&amp;#39;,
    Key: &amp;#39;merged-data.csv.gz&amp;#39;,
    Body: passThrough,
    ContentEncoding: &amp;#39;gzip&amp;#39;,
  },
})

const [ result ] = await Promise.all([
  mergeStreamsFromUrls(&amp;#39;CSV&amp;#39;, {
    urls: databricksChunkUrls,
    output: gzip,
  }),
  pipeline(gzip, passThrough),
  upload.done(),
])

// 이제 단일 S3 URL을 클라이언트에 제공
result.externalLinks[0].external_link;&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;@bitofsky/databricks-sql: 경량 Databricks API 클라이언트&lt;/h2&gt;
&lt;h3&gt;설계 목표&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;공식 SDK 없이 Databricks SQL 직접 사용&lt;/li&gt;
&lt;li&gt;최적화된 폴링 메커니즘&lt;/li&gt;
&lt;li&gt;메모리 효율적인 스트리밍&lt;/li&gt;
&lt;li&gt;External Links 완전 지원&lt;/li&gt;
&lt;li&gt;Query Metrics 통합&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;주요 기능&lt;/h3&gt;
&lt;p&gt;&lt;strong&gt;1. 최적화된 폴링 메커니즘&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Databricks Statement Execution API는 &lt;code&gt;wait_timeout&lt;/code&gt; 파라미터를 지원합니다. 서버에서 최대 50초까지 대기하며, 결과가 준비되면 즉시 응답합니다.&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// wait_timeout=50s로 폴링 최소화
const result = await executeStatement(query, auth)

// 진행 상황을 보고 싶다면?
const result = await executeStatement(query, auth, {
  wait_timeout: &amp;#39;0s&amp;#39;, // 즉시 응답
  onProgress: (result) =&amp;gt; {
    console.log(`State: ${result.status.state}`)
  },
})&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;2. Query Metrics 지원&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Query History API를 통합하여 실시간 실행 메트릭을 제공합니다:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const result = await executeStatement(query, auth, {
  enableMetrics: true,
  onProgress: (result, metrics) =&amp;gt; {
    console.log(`State: ${result.status.state}`)
    if (metrics) {
      console.log(`  Time: ${metrics.execution_time_ms}ms`)
      console.log(`  Rows: ${metrics.rows_produced_count}`)
      console.log(`  Bytes: ${metrics.read_bytes}`)
    }
  },
})&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;3. 다양한 결과 소비 방식&lt;/strong&gt;&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// 1. 전체 수집 (소규모 결과)
const rows = await fetchAll(result, auth, { format: &amp;#39;JSON_OBJECT&amp;#39; })
console.log(rows) // [{ id: 1, name: &amp;quot;Alice&amp;quot; }, ...]

// 2. 스트리밍 (대규모 결과)
await fetchRow(result, auth, {
  format: &amp;#39;JSON_OBJECT&amp;#39;,
  onEachRow: (row) =&amp;gt; {
    console.log(row.id, row.name)
    // DB에 삽입, 파일에 쓰기 등
  },
})

// 3. 바이너리 스트림 (파일 저장)
const stream = fetchStream(result, auth)
await pipeline(stream, createWriteStream(&amp;#39;output.csv&amp;#39;))&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;4. JSON_OBJECT: 스키마 기반 행 매핑&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Databricks는 기본적으로 배열 형식으로 결과를 반환합니다:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;// JSON_ARRAY 형식
[1, &amp;quot;Alice&amp;quot;, 30, &amp;quot;2024-01-01T00:00:00Z&amp;quot;]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;code&gt;JSON_OBJECT&lt;/code&gt; 옵션으로 스키마 기반 객체로 변환할 수 있습니다:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const rows = await fetchAll(result, auth, {
  format: &amp;#39;JSON_OBJECT&amp;#39;,
})

// 결과
[
  {
    id: 1n,               // BIGINT → bigint
    name: &amp;quot;Alice&amp;quot;,        // STRING → string
    age: 30,              // INT → number
    created_at: &amp;quot;2024-01-01T00:00:00.000Z&amp;quot; // TIMESTAMP → ISO 8601 Format string
  }
]&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;커스텀 변환도 가능합니다:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const rows = await fetchAll(result, auth, {
  format: &amp;#39;JSON_OBJECT&amp;#39;,
  encodeBigInt: (v: bigint) =&amp;gt; Number(v),      // bigint → number
  encodeTimestamp: (v: string) =&amp;gt; new Date(v), // string → Date
})&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;5. mergeExternalLinks: 단일 URL로 병합 + 압축&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;External Links를 S3 등에 업로드하고 단일 presigned URL을 반환합니다. 여기서 핵심은 &lt;strong&gt;병합 과정에서 압축을 적용할 수 있다&lt;/strong&gt;는 점입니다.&lt;/p&gt;
&lt;p&gt;Databricks External Links는 압축을 지원하지 않지만, 이 라이브러리를 사용하면 병합과 동시에 gzip 압축을 적용할 수 있습니다. 특히 CSV나 JSON 같은 텍스트 기반 포맷은 압축률이 매우 높아서 &lt;strong&gt;파일 크기를 1/10 이하로 줄일 수 있습니다&lt;/strong&gt;:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;const result = await executeStatement(
  &amp;#39;SELECT * FROM large_table LIMIT 100000&amp;#39;,
  auth,
  { disposition: &amp;#39;EXTERNAL_LINKS&amp;#39;, format: &amp;#39;CSV&amp;#39; }
)

const merged = await mergeExternalLinks(result, auth, {
  mergeStreamToExternalLink: async (stream) =&amp;gt; {
    // S3에 gzip 압축 업로드
    const key = `merged-${Date.now()}.csv.gz`
    const gzip = createGzip()
    const passThrough = new PassThrough()

    const upload = new Upload({
      client: s3,
      params: {
        Bucket: bucket,
        Key: key,
        Body: passThrough,
        ContentType: &amp;#39;text/csv&amp;#39;,
        ContentEncoding: &amp;#39;gzip&amp;#39;,
      },
    })

    await Promise.all([
      pipeline(stream, gzip, passThrough),
      upload.done(),
    ])

    // presigned URL 생성
    const externalLink = await getSignedUrl(
      s3,
      new GetObjectCommand({ Bucket: bucket, Key: key }),
      { expiresIn: 3600 }
    )

    const head = await s3.send(new HeadObjectCommand({ Bucket: bucket, Key: key }))

    return {
      externalLink,
      byte_count: head.ContentLength ?? 0,
      expiration: new Date(Date.now() + 3600000).toISOString(),
    }
  },
})

// 이제 하나의 압축된 URL만 반환
console.log(merged.result.external_links[0].external_link)
// https://my-bucket.s3.amazonaws.com/merged-...csv.gz?X-Amz-...

// 실제 효과 예시:
// Databricks External Links: 90개 청크 × 20MB = 1.8GB (압축 안됨)
// 병합 + gzip: 단일 파일 180MB (약 90% 절감)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;6. Partial External Links 자동 처리&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Databricks가 일부 청크 메타데이터만 반환하는 경우가 있습니다:&lt;/p&gt;
&lt;pre&gt;&lt;code&gt;{
  &amp;quot;external_links&amp;quot;: [
    { &amp;quot;external_link&amp;quot;: &amp;quot;https://...&amp;quot;, &amp;quot;chunk_index&amp;quot;: 0 },
    null, // chunk_index 1은 누락
    null, // chunk_index 2는 누락
    // ...
  ]
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;라이브러리가 자동으로 누락된 청크를 &lt;code&gt;getStatementResultChunks&lt;/code&gt; API로 가져옵니다. 사용자는 신경 쓸 필요가 없습니다.&lt;/p&gt;
&lt;h3&gt;간단한 사용 예&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;import { executeStatement, fetchAll } from &amp;#39;@bitofsky/databricks-sql&amp;#39;

const auth = {
  token: process.env.DATABRICKS_TOKEN!,
  host: process.env.DATABRICKS_HOST!, // e.g., abc.cloud.databricks.com
  httpPath: process.env.DATABRICKS_HTTP_PATH!, // e.g., /sql/1.0/warehouses/...
}

// 쿼리 실행
const result = await executeStatement(&amp;#39;SELECT * FROM my_table LIMIT 10&amp;#39;, auth)

// 결과 가져오기
const rows = await fetchAll(result, auth, { format: &amp;#39;JSON_OBJECT&amp;#39; })
console.log(rows)&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;실제 적용 사례&lt;/h2&gt;
&lt;h3&gt;1. MCP Server 통합&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;class DatabricksMCPServer {
  async executeQuery(query: string): Promise&amp;lt;QueryResponse&amp;gt; {
    // 쿼리 실행
    const result = await executeStatement(query, this.auth, {
      disposition: &amp;#39;EXTERNAL_LINKS&amp;#39;,
      format: &amp;#39;JSON_ARRAY&amp;#39;,
      enableMetrics: true,
      onProgress: (result, metrics) =&amp;gt; {
        this.sendProgressUpdate({
          state: result.status.state,
          rowsProduced: metrics?.rows_produced_count,
        })
      },
    })

    // 결과 크기에 따라 처리 방식 결정
    const rowCount = result.result?.row_count ?? 0

    if (rowCount &amp;lt; 1000) {
      // 작은 결과: 직접 반환
      const rows = await fetchAll(result, this.auth, {
        format: &amp;#39;JSON_OBJECT&amp;#39;,
      })
      return { type: &amp;#39;inline&amp;#39;, data: rows }
    } else {
      // 큰 결과: S3에 업로드 후 URL 반환
      const merged = await mergeExternalLinks(result, this.auth, {
        mergeStreamToExternalLink: async (stream) =&amp;gt; {
          return await this.uploadToS3(stream)
        },
      })
      return {
        type: &amp;#39;external&amp;#39;,
        url: merged.result.external_links[0].external_link,
        rowCount,
      }
    }
  }
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;MCP 클라이언트는 이제:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;작은 결과는 즉시 받아서 사용&lt;/li&gt;
&lt;li&gt;큰 결과는 하나의 URL로 다운로드&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;2. 월간 리포트 생성 (압축으로 이메일 첨부 용량 절감)&lt;/h3&gt;
&lt;pre&gt;&lt;code&gt;async function generateMonthlyReport(year: number, month: number) {
  const result = await executeStatement(
    `
    SELECT
      date_trunc(&amp;#39;day&amp;#39;, order_date) as day,
      product_category,
      SUM(revenue) as total_revenue
    FROM sales
    WHERE YEAR(order_date) = :year AND MONTH(order_date) = :month
    GROUP BY day, product_category
    ORDER BY day, product_category
    `,
    auth,
    {
      disposition: &amp;#39;EXTERNAL_LINKS&amp;#39;,
      format: &amp;#39;CSV&amp;#39;,
      parameters: [
        { name: &amp;#39;year&amp;#39;, value: String(year), type: &amp;#39;INT&amp;#39; },
        { name: &amp;#39;month&amp;#39;, value: String(month), type: &amp;#39;INT&amp;#39; },
      ],
    }
  )

  // CSV 압축 및 저장
  // Databricks는 압축을 지원하지 않지만, 병합 과정에서 gzip 적용
  const filename = `/tmp/report-${year}-${month}.csv.gz`
  const stream = fetchStream(result, auth)
  await pipeline(stream, createGzip(), createWriteStream(filename))

  // 압축 효과: 200MB → 20MB (이메일 첨부 제한 해결)
  const stats = await fs.stat(filename)
  console.log(`Report size: ${(stats.size / 1024 / 1024).toFixed(2)} MB (compressed)`)

  // 이메일 전송
  await sendEmail({
    to: &amp;#39;team@example.com&amp;#39;,
    subject: `Monthly Report ${year}-${month}`,
    attachments: [{ filename, path: filename }],
  })
}&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;개발 과정에서 배운 것들&lt;/h2&gt;
&lt;h3&gt;1. Arrow IPC 스트림의 복잡성&lt;/h3&gt;
&lt;p&gt;Apache Arrow는 강력하지만 학습 곡선이 있습니다. RecordBatch vs Table의 차이, IPC 스트림 포맷, EOS 마커 등을 이해하는 데 시간이 걸렸습니다만, AI 도구의 도움으로 빠르게 학습해 적용할 수 있었습니다.&lt;/p&gt;
&lt;h3&gt;2. 스트림 파이프라인 디버깅&lt;/h3&gt;
&lt;p&gt;Node.js 스트림은 강력하지만 디버깅이 어렵습니다. 특히:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;메모리 누수 추적&lt;/li&gt;
&lt;li&gt;백프레셔 처리&lt;/li&gt;
&lt;li&gt;에러 전파 보장&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;이를 해결하기 위해 통합 테스트를 많이 작성했습니다.&lt;/p&gt;
&lt;h3&gt;3. Databricks API의 비문서화된 동작&lt;/h3&gt;
&lt;p&gt;일부 API 동작이 문서화되지 않았습니다. 예를 들어:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Query History API의 메트릭 인자&lt;/li&gt;
&lt;li&gt;청크 갯수, 크기 결정 로직&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;결론&lt;/h2&gt;
&lt;p&gt;공식 SDK의 제약으로 시작된 프로젝트가 두 개의 오픈소스 라이브러리로 완성되었습니다.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;@bitofsky/merge-streams&lt;/strong&gt;는:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;CSV, JSON, Arrow 포맷의 청크를 올바르게 병합&lt;/li&gt;
&lt;li&gt;메모리 효율적인 스트리밍&lt;/li&gt;
&lt;li&gt;Pre-connection 최적화&lt;/li&gt;
&lt;li&gt;범용적으로 사용 가능&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;@bitofsky/databricks-sql&lt;/strong&gt;는:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Databricks API 직접 호출&lt;/li&gt;
&lt;li&gt;최적화된 폴링 메커니즘&lt;/li&gt;
&lt;li&gt;다양한 결과 소비 방식&lt;/li&gt;
&lt;li&gt;External Links 완전 지원&lt;/li&gt;
&lt;li&gt;Query Metrics 통합&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;비슷한 문제를 겪고 있다면, 이 라이브러리들이 도움이 되길 바랍니다.&lt;br&gt;아직 Production Ready를 보장하지는 않습니다. Production 환경에서 사용하려면 먼저 충분한 테스트를 권장합니다.&lt;/p&gt;</description>
      <category>개발/NodeJS</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/100</guid>
      <comments>https://hbs.pe.kr/entry/Databricks-SQL%EC%9D%84-%EC%9C%84%ED%95%9C-%EA%B2%BD%EB%9F%89-Nodejs-%ED%81%B4%EB%9D%BC%EC%9D%B4%EC%96%B8%ED%8A%B8-%EB%9D%BC%EC%9D%B4%EB%B8%8C%EB%9F%AC%EB%A6%AC-%EA%B0%9C%EB%B0%9C%EA%B8%B0#entry100comment</comments>
      <pubDate>Mon, 5 Jan 2026 12:10:11 +0900</pubDate>
    </item>
    <item>
      <title>젠레스 존 제로 - 강습전 엽석연 65000 킬</title>
      <link>https://hbs.pe.kr/entry/%EC%A0%A0%EB%A0%88%EC%8A%A4-%EC%A1%B4-%EC%A0%9C%EB%A1%9C-%EA%B0%95%EC%8A%B5%EC%A0%84-%EC%97%BD%EC%84%9D%EC%97%B0-65000-%ED%82%AC</link>
      <description>&lt;h2 style=&quot;color: #ffffff; text-align: start;&quot; data-ke-size=&quot;size26&quot;&gt;젠레스 존 제&lt;/h2&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;zzz 엽석연 킬.png&quot; data-origin-width=&quot;2529&quot; data-origin-height=&quot;1404&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/HBGMu/dJMcac2Nkf0/i0vmFWRxZxLVckJWPeZFWK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/HBGMu/dJMcac2Nkf0/i0vmFWRxZxLVckJWPeZFWK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/HBGMu/dJMcac2Nkf0/i0vmFWRxZxLVckJWPeZFWK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FHBGMu%2FdJMcac2Nkf0%2Fi0vmFWRxZxLVckJWPeZFWK%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;2529&quot; height=&quot;1404&quot; data-filename=&quot;zzz 엽석연 킬.png&quot; data-origin-width=&quot;2529&quot; data-origin-height=&quot;1404&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;케릭터&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;빛나 2돌 전무&lt;/li&gt;
&lt;li&gt;다이아린 명함 스팀오븐&lt;/li&gt;
&lt;li&gt;자오 명전&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;빛나 2돌에서 엽석연 공략 팁&lt;/p&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;자오 디스크가 4고요라면 고요 스택을 반드시 신경써야함. 변신 전 무조건 자오 장막 또는 스킬로 빠른 지원해서 버프 유지&lt;/li&gt;
&lt;li&gt;첫 엽석연 패턴때 패링을 최대한 쳐서 데시벨 확보해야 소베크 미야즈마 실드 두르기 전에 최대한 극딜 가능
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;2돌 명심경&lt;/li&gt;
&lt;li&gt;자오 장막 + 강특 명심경&lt;/li&gt;
&lt;li&gt;궁 명심경&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;</description>
      <category>일상/갬성</category>
      <category>zzz</category>
      <category>게임</category>
      <category>젠레스존제로</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/99</guid>
      <comments>https://hbs.pe.kr/entry/%EC%A0%A0%EB%A0%88%EC%8A%A4-%EC%A1%B4-%EC%A0%9C%EB%A1%9C-%EA%B0%95%EC%8A%B5%EC%A0%84-%EC%97%BD%EC%84%9D%EC%97%B0-65000-%ED%82%AC#entry99comment</comments>
      <pubDate>Thu, 1 Jan 2026 15:48:32 +0900</pubDate>
    </item>
    <item>
      <title>젠레스 존 제로 - 폐지 주워 엽빛나 뽑기</title>
      <link>https://hbs.pe.kr/entry/%EC%A0%A0%EB%A0%88%EC%8A%A4-%EC%A1%B4-%EC%A0%9C%EB%A1%9C-%ED%8F%90%EC%A7%80-%EC%A3%BC%EC%9B%8C-%EC%97%BD%EB%B9%9B%EB%82%98-%EB%BD%91%EA%B8%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1881&quot; data-origin-height=&quot;1025&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/4SlV4/dJMcacaF2EW/xphCumoD6MbipZjrgOkl91/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/4SlV4/dJMcacaF2EW/xphCumoD6MbipZjrgOkl91/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/4SlV4/dJMcacaF2EW/xphCumoD6MbipZjrgOkl91/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F4SlV4%2FdJMcacaF2EW%2FxphCumoD6MbipZjrgOkl91%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;1881&quot; height=&quot;1025&quot; data-origin-width=&quot;1881&quot; data-origin-height=&quot;1025&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런일이..?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1804&quot; data-origin-height=&quot;997&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dF7ryy/dJMcahiKIL2/pXdMJpATdtT65cOwNFHIQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dF7ryy/dJMcahiKIL2/pXdMJpATdtT65cOwNFHIQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dF7ryy/dJMcahiKIL2/pXdMJpATdtT65cOwNFHIQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdF7ryy%2FdJMcahiKIL2%2FpXdMJpATdtT65cOwNFHIQk%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;1804&quot; height=&quot;997&quot; data-origin-width=&quot;1804&quot; data-origin-height=&quot;997&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1854&quot; data-origin-height=&quot;1036&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bevSEa/dJMb99ZkAIo/HetkYh2njMZt23kLEK4SF1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bevSEa/dJMb99ZkAIo/HetkYh2njMZt23kLEK4SF1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bevSEa/dJMb99ZkAIo/HetkYh2njMZt23kLEK4SF1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbevSEa%2FdJMb99ZkAIo%2FHetkYh2njMZt23kLEK4SF1%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;1854&quot; height=&quot;1036&quot; data-origin-width=&quot;1854&quot; data-origin-height=&quot;1036&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;폐지 400개 모아 2돌파 전무 달성&lt;/p&gt;</description>
      <category>일상/갬성</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/98</guid>
      <comments>https://hbs.pe.kr/entry/%EC%A0%A0%EB%A0%88%EC%8A%A4-%EC%A1%B4-%EC%A0%9C%EB%A1%9C-%ED%8F%90%EC%A7%80-%EC%A3%BC%EC%9B%8C-%EC%97%BD%EB%B9%9B%EB%82%98-%EB%BD%91%EA%B8%B0#entry98comment</comments>
      <pubDate>Tue, 30 Dec 2025 11:36:56 +0900</pubDate>
    </item>
    <item>
      <title>옛날 DOS 시절 게임을 플레이 할 수 있구나</title>
      <link>https://hbs.pe.kr/entry/%EC%98%9B%EB%82%A0-DOS-%EC%8B%9C%EC%A0%88-%EA%B2%8C%EC%9E%84%EC%9D%84-%ED%94%8C%EB%A0%88%EC%9D%B4-%ED%95%A0-%EC%88%98-%EC%9E%88%EA%B5%AC%EB%82%98</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;1521&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/kCqN6/dJMb99LIxU0/L4ywvRuO5dED2gi9zehaYK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/kCqN6/dJMb99LIxU0/L4ywvRuO5dED2gi9zehaYK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/kCqN6/dJMb99LIxU0/L4ywvRuO5dED2gi9zehaYK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FkCqN6%2FdJMb99LIxU0%2FL4ywvRuO5dED2gi9zehaYK%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;1323&quot; height=&quot;1521&quot; data-origin-width=&quot;1323&quot; data-origin-height=&quot;1521&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://archive.org/&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://archive.org/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;인터넷 아카이브 사이트에서 옛날 추억의 DOS 에뮬레이터를 웹브라우져로 바로 플레이 할 수 있도록 하고있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내 유년시절 사회과부도 지도를 달달 외우게 만든 대항해시대2도 여기 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;옛날 시절 생각이 많이 난다. ㅎㅎ&lt;/p&gt;</description>
      <category>게임</category>
      <category>게임</category>
      <category>대항해시대</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/97</guid>
      <comments>https://hbs.pe.kr/entry/%EC%98%9B%EB%82%A0-DOS-%EC%8B%9C%EC%A0%88-%EA%B2%8C%EC%9E%84%EC%9D%84-%ED%94%8C%EB%A0%88%EC%9D%B4-%ED%95%A0-%EC%88%98-%EC%9E%88%EA%B5%AC%EB%82%98#entry97comment</comments>
      <pubDate>Fri, 19 Dec 2025 09:03:16 +0900</pubDate>
    </item>
    <item>
      <title>2025-12 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2025-12-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1765083149762&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bfhRJs/hyZPewsnyd/I1drUCjWVeR0ixC8UUtwbk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b6EX9a/hyZOUl1P6w/OpjEXzSPY1UvH7JdVttF0k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/eRwcTs/hyZOZt8qFg/1yBNF8TWZlKkckPIT6CkS0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bfhRJs/hyZPewsnyd/I1drUCjWVeR0ixC8UUtwbk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b6EX9a/hyZOUl1P6w/OpjEXzSPY1UvH7JdVttF0k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/eRwcTs/hyZOZt8qFg/1yBNF8TWZlKkckPIT6CkS0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SCHD가 오르고있다. 현재 전체 계좌의 총 입금액 대비 현재 가치 비율을 누적 수익율로 계산했을때 약 +26%의 수익을 기록중이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignLeft&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;242&quot; data-origin-height=&quot;237&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/E9MXY/dJMcacuQs2C/U14WHzy1qrxl5O272EvXVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/E9MXY/dJMcacuQs2C/U14WHzy1qrxl5O272EvXVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/E9MXY/dJMcacuQs2C/U14WHzy1qrxl5O272EvXVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FE9MXY%2FdJMcacuQs2C%2FU14WHzy1qrxl5O272EvXVk%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;242&quot; height=&quot;237&quot; data-origin-width=&quot;242&quot; data-origin-height=&quot;237&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;아무 생각 없이 월 1회 기계적 매매만으로도 매우 잘 워킹하는 투자 모델이라는 것이 검증되고 있다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>매국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/96</guid>
      <comments>https://hbs.pe.kr/entry/2025-12-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry96comment</comments>
      <pubDate>Sun, 7 Dec 2025 13:58:23 +0900</pubDate>
    </item>
    <item>
      <title>2025-11 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2025-11-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1763338099733&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/ME8ta/hyZNOrXWye/P2lTkkyceh7zAWbaT4oTSK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hocxh/hyZNLH3h6f/uaiNSc5BG1OlZ3hOSjjS4K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bp0TMD/hyZNMASgdF/pTTz1N9PWKASSiLST4Q6Y1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/ME8ta/hyZNOrXWye/P2lTkkyceh7zAWbaT4oTSK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/hocxh/hyZNLH3h6f/uaiNSc5BG1OlZ3hOSjjS4K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bp0TMD/hyZNMASgdF/pTTz1N9PWKASSiLST4Q6Y1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나스닥 우상향이 계속되어 계속 슈드만 모으는 상황인데, 최근 한달 크게 올랐다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나스닥 상승은 포모를 일으킬 수 있었겠지만 올 초 TQQQ로 큰 이익을 본 상황이라 포모가 오지 않는게 장점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올초 컸던 낙폭을 이제 거의 회복했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;시드가 큰 만큼 이렇게 한번 점프 할 때 마다 목돈이 들어오는 느낌이 기분 좋다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/95</guid>
      <comments>https://hbs.pe.kr/entry/2025-11-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry95comment</comments>
      <pubDate>Mon, 17 Nov 2025 09:10:01 +0900</pubDate>
    </item>
    <item>
      <title>2025-10 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2025-10-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1760078211923&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/br83YN/hyZJ7en2N4/KzFIpFizhHEFrDh14mmSnK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/4FfGU/hyZKFBAGQ8/YKDUxrSNknfs5kAgQIMMVK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/HOkuJ/hyZKFuOIDG/F1r7MK5JM23vZqiRShgTHK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/br83YN/hyZJ7en2N4/KzFIpFizhHEFrDh14mmSnK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/4FfGU/hyZKFBAGQ8/YKDUxrSNknfs5kAgQIMMVK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/HOkuJ/hyZKFuOIDG/F1r7MK5JM23vZqiRShgTHK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배당이 제법 들어왔다. 무념무상... 나무아미타불...&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/94</guid>
      <comments>https://hbs.pe.kr/entry/2025-10-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry94comment</comments>
      <pubDate>Fri, 10 Oct 2025 15:37:18 +0900</pubDate>
    </item>
    <item>
      <title>2025-09 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2025-09-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1757896407193&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cEEwG6/hyZJxv1Lhw/SeGyLnYkrPeALgsBcCpLMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/43bzW/hyZJnGWp68/f8i0GjxG1HCLmiGjGkM7Tk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bfTjp4/hyZJsapBoo/fphB8lpn7AFk87kCNX5CFK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cEEwG6/hyZJxv1Lhw/SeGyLnYkrPeALgsBcCpLMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/43bzW/hyZJnGWp68/f8i0GjxG1HCLmiGjGkM7Tk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bfTjp4/hyZJsapBoo/fphB8lpn7AFk87kCNX5CFK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;계속 슈드만 적립하게 되네...&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;작년 10월 24% Total Return을 피크로 찍은 후 연초에 박살나 8%까지 하락했다가 TQQQ 60+% 매도로 꽤 복구해 현재 16%의 총수익률을 기록하고 있다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/93</guid>
      <comments>https://hbs.pe.kr/entry/2025-09-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry93comment</comments>
      <pubDate>Mon, 15 Sep 2025 09:45:52 +0900</pubDate>
    </item>
    <item>
      <title>2025-08 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2025-08-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1756075222812&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/8iSHe/hyZCZ7ZRz7/wrV94IXrrKKkolkBCwlPpk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bftOne/hyZDcsKzTe/e1iDZ3hhnKHWV0KpRlbi11/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/P0SYJ/hyZC3bwbcD/rgBiyuyJgyBkC47K0bC6MK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/8iSHe/hyZCZ7ZRz7/wrV94IXrrKKkolkBCwlPpk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bftOne/hyZDcsKzTe/e1iDZ3hhnKHWV0KpRlbi11/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/P0SYJ/hyZC3bwbcD/rgBiyuyJgyBkC47K0bC6MK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&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;ul style=&quot;list-style-type: disc; color: #333333; text-align: start;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;오른다 오른다&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/92</guid>
      <comments>https://hbs.pe.kr/entry/2025-08-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry92comment</comments>
      <pubDate>Mon, 25 Aug 2025 07:40:47 +0900</pubDate>
    </item>
    <item>
      <title>2025-07 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2025-07-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1752189405891&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bS5g01/hyZjmhKoHX/knS6SkVfkchZzkFWibmKm0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/jFbjx/hyZjv6TS93/XZHUOHjPH0lkwTRayEutMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bnPWD6/hyZjDYbNwd/vQvyVUQdH1a0fHlt5iZav1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bS5g01/hyZjmhKoHX/knS6SkVfkchZzkFWibmKm0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/jFbjx/hyZjv6TS93/XZHUOHjPH0lkwTRayEutMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bnPWD6/hyZjDYbNwd/vQvyVUQdH1a0fHlt5iZav1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li&gt;1회 전월 양봉 = x1를 SCHD&amp;nbsp;&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오랜 평행선을 마친듯 이제 서서히 반등한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/91</guid>
      <comments>https://hbs.pe.kr/entry/2025-07-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry91comment</comments>
      <pubDate>Fri, 11 Jul 2025 08:17:46 +0900</pubDate>
    </item>
    <item>
      <title>2025-06 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2025-06-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1752189333125&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bS5g01/hyZjmhKoHX/knS6SkVfkchZzkFWibmKm0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/jFbjx/hyZjv6TS93/XZHUOHjPH0lkwTRayEutMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bnPWD6/hyZjDYbNwd/vQvyVUQdH1a0fHlt5iZav1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bS5g01/hyZjmhKoHX/knS6SkVfkchZzkFWibmKm0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/jFbjx/hyZjv6TS93/XZHUOHjPH0lkwTRayEutMK/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bnPWD6/hyZjDYbNwd/vQvyVUQdH1a0fHlt5iZav1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번달은 2분기 배당달이다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/90</guid>
      <comments>https://hbs.pe.kr/entry/2025-06-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry90comment</comments>
      <pubDate>Fri, 11 Jul 2025 08:16:20 +0900</pubDate>
    </item>
    <item>
      <title>ZZZ 운규 1번 디스크 종결</title>
      <link>https://hbs.pe.kr/entry/ZZZ-%EC%9A%B4%EA%B7%9C-1%EB%B2%88-%EB%94%94%EC%8A%A4%ED%81%AC-%EC%A2%85%EA%B2%B0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;zzz.png&quot; data-origin-width=&quot;2239&quot; data-origin-height=&quot;1246&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/tLv3b/btsOwHENNxX/DOFnAdlEvzuKZGsINEnmD1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/tLv3b/btsOwHENNxX/DOFnAdlEvzuKZGsINEnmD1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/tLv3b/btsOwHENNxX/DOFnAdlEvzuKZGsINEnmD1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FtLv3b%2FbtsOwHENNxX%2FDOFnAdlEvzuKZGsINEnmD1%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;2239&quot; height=&quot;1246&quot; data-filename=&quot;zzz.png&quot; data-origin-width=&quot;2239&quot; data-origin-height=&quot;1246&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런게 나오네...&lt;/p&gt;</description>
      <category>일상/갬성</category>
      <category>zzz</category>
      <category>젠존제</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/89</guid>
      <comments>https://hbs.pe.kr/entry/ZZZ-%EC%9A%B4%EA%B7%9C-1%EB%B2%88-%EB%94%94%EC%8A%A4%ED%81%AC-%EC%A2%85%EA%B2%B0#entry89comment</comments>
      <pubDate>Thu, 12 Jun 2025 08:05:12 +0900</pubDate>
    </item>
    <item>
      <title>BMW 에어컨 냄새 잡기</title>
      <link>https://hbs.pe.kr/entry/BMW-%EC%97%90%EC%96%B4%EC%BB%A8-%EB%83%84%EC%83%88-%EC%9E%A1%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;어느 차든 여름철 에어컨을 신나게 쓰다보면 시큼한 냄새가 날 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차마다 냄새를 잡는 방법이 다양한데,&amp;nbsp;통상 많이 알려진 방법은 내리기전 송풍모드를 하거나 전원을 끄고 독립환품을 켜서 말리라는 팁이 많은데...&lt;br /&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;h2 data-ke-size=&quot;size26&quot;&gt;원인&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;에어컨 가동으로 실외보다 급격히 낮아진 온도로 인한 냉방 라인, 에바포레이터 결로에서 발생한 수분에서 증식한 곰팡이&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제점&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;내리기전 5분정도 송풍으로는 제대로 습기가 안마름. 독립환풍은 차량 내부 습기 자체를 해결해주진 못함&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;해결책&lt;/h2&gt;
&lt;ol style=&quot;list-style-type: decimal;&quot; data-ke-list-type=&quot;decimal&quot;&gt;
&lt;li&gt;독립환풍 메뉴 진입&lt;/li&gt;
&lt;li&gt;단축버튼 중 하나를 꾹 눌러 독립환풍을 내가 원하는 번호로 지정&lt;/li&gt;
&lt;li&gt;운행 &amp;amp; 운행 종료 (엔진온도 충분히 오른 것 확인)&lt;/li&gt;
&lt;li&gt;시동 끔&lt;/li&gt;
&lt;li&gt;단축버튼을 눌러 &lt;u&gt;&lt;b&gt;독립환풍 활성화&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;&lt;u&gt;&lt;b&gt;자동 에어컨 OFF &amp;amp; 온도 최대 (28도)&lt;/b&gt;&lt;/u&gt;&lt;/li&gt;
&lt;li&gt;내기모드로 변경 (송풍구 막지 않음)&lt;/li&gt;
&lt;li&gt;하차&lt;/li&gt;
&lt;/ol&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;목적&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;BMW 독립환풍으로 차량 전원을 끄고 내려도 15분간 냉난방이 동작하도록 합니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 상태에서 자동 에어컨을 끄고 내기모드에서 수동 28도 최대로 올리면 운행으로 뜨겁게 달궈진 엔진잔열로 환기 온도를 최대치까지 끌어올려주며 실내와 냉난방 라인 전체가 뜨겁게 베이킹됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이를 통해 실내가 뽀송해지고 냄새를 없앰은 물론, 곰팡이 증식도 어렵게 되어 냄새가 금방 잡히고 재발이 쉽게 되지 않습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;매일 할 필요는 없고 에어컨을 좀 쓰기 시작하면 2~3일에 한번 정도만 해주어도 체감상 냄새가 아예 나지 않았습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차량용 방향제는 냄새를 오히려 악화시키는 주범이니 방향제도 쓰지 않는게 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이렇게만 관리해주어도 방향제 없이 항상 산뜻한 실내 공기 환경을 만들 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;냄새가 심한 경우 처음엔 매 운행마다 해주면 금방 잡힙니다.&lt;/p&gt;</description>
      <category>일상/Car</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/88</guid>
      <comments>https://hbs.pe.kr/entry/BMW-%EC%97%90%EC%96%B4%EC%BB%A8-%EB%83%84%EC%83%88-%EC%9E%A1%EA%B8%B0#entry88comment</comments>
      <pubDate>Mon, 26 May 2025 09:32:53 +0900</pubDate>
    </item>
    <item>
      <title>2025-05 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2025-05-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1747175269578&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cm9jhs/hyYTahHof0/FoMHcVZjw31xYY9yT2Imu1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bJI29f/hyYU3CpMgC/xUD3ibW0Bz2RtOKHWzcXU1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cmw3QP/hyYRpf2VIl/5bKpdguVQABDRv9fL8D0hK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cm9jhs/hyYTahHof0/FoMHcVZjw31xYY9yT2Imu1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bJI29f/hyYU3CpMgC/xUD3ibW0Bz2RtOKHWzcXU1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cmw3QP/hyYRpf2VIl/5bKpdguVQABDRv9fL8D0hK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;사실 양봉은 아닌데 거의 전월과 차이 없어 양봉으로 보고 SCHD를 매수했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;3~4월 집중 매수했던 TQQQ 평단이 5만원대로, +60%가 넘는 수익률을 기록을 끝으로 매도했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;룰 대로라면 30%대에서 매도했어야 하는데, 워낙 낮은 저점을 잡은걸로 보여 좀 더 지켜보았다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>TQQQ</category>
      <category>미국주식</category>
      <category>투차</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/87</guid>
      <comments>https://hbs.pe.kr/entry/2025-05-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry87comment</comments>
      <pubDate>Wed, 14 May 2025 07:30:23 +0900</pubDate>
    </item>
    <item>
      <title>TMAP 운전 점수 99점</title>
      <link>https://hbs.pe.kr/entry/TMAP-%EC%9A%B4%EC%A0%84-%EC%A0%90%EC%88%98-99%EC%A0%90</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;2037&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/AGkj4/btsNSGZ2A6w/Fac6rR0ZQNZaDd7K0zOmQk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/AGkj4/btsNSGZ2A6w/Fac6rR0ZQNZaDd7K0zOmQk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/AGkj4/btsNSGZ2A6w/Fac6rR0ZQNZaDd7K0zOmQk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FAGkj4%2FbtsNSGZ2A6w%2FFac6rR0ZQNZaDd7K0zOmQk%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;400&quot; height=&quot;696&quot; data-origin-width=&quot;1170&quot; data-origin-height=&quot;2037&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;자동차보험 갱신 시즌이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;갱신하려고보니 점수가 엉망이어서 티맵을 탈퇴 후 재가입 한 다음 한달간 열심히 500km를 달렸다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특수한 상황이 잘 나오지 않아서 점수관리가 용이한 출퇴근시에만 티맵 네비를 백그라운드에 그냥 켜서 두고, 메인은 네이버 네비를 사용했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;티맵 운전점수는 급가속, 급정거시에 대량의 점수 하락이 있지만 과속(제한속도 15km+ 오버)의 경우엔 점수가 떨어지지 않는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;때문에 점수 관리를 한다고 틀딱운전을 하면서 차량 흐름을 답답하게 할 필요는 없다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다만 속도를 규정보다 높였을 때 신호나 상황에따라 급정거(3초내 30km이상 감속)로 인식될 케이스가 더 많이 발생하니 그 부분을 조심했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;500km 주행동안 급정거 1회 (커브 구간에서 앞에 차량이 서있는걸 상당히 근접해서 발견...)를 기록해 99점을 달성했고 애니카 할인 19%를 받았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이제 1년간 티맵 안켠다^_^&lt;/p&gt;</description>
      <category>일상/Car</category>
      <category>TMAP</category>
      <category>운전점수</category>
      <category>자동차보험</category>
      <category>티맵</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/86</guid>
      <comments>https://hbs.pe.kr/entry/TMAP-%EC%9A%B4%EC%A0%84-%EC%A0%90%EC%88%98-99%EC%A0%90#entry86comment</comments>
      <pubDate>Sat, 10 May 2025 16:11:06 +0900</pubDate>
    </item>
    <item>
      <title>2025-04 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2025-04-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1744296063827&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bVpdeI/hyYFz2tXjU/b72kWUO1rfQodpbCDxffXk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b3tMGL/hyYA53tLNv/Cwbuhb7QtuyVQi5KG2jdD0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/FBvEj/hyYBbQa1vr/GqcSPYx0MCkGDBx30dKwQ1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bVpdeI/hyYFz2tXjU/b72kWUO1rfQodpbCDxffXk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b3tMGL/hyYA53tLNv/Cwbuhb7QtuyVQi5KG2jdD0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/FBvEj/hyYBbQa1vr/GqcSPYx0MCkGDBx30dKwQ1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;2회+ 연속 음봉&lt;span&gt;&amp;nbsp;&lt;/span&gt;= x4+를 TQQQ 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;트럼프가 미쳤다. 관세전쟁 여파로 한때 거의 작년 한해 올랐던 상승분 대부분이 다시 내려갔다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SCHD는 민감종목이 아닌데, 관세에는 직격을 맞는 기업들이 많아 특히 데미지가 큰 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 많이 내려간 TQ를 대량매수했는데 +25% 이상을 킵하고있으나, 관세 이슈가 향후 어떻게 되느냐에 따라 이것도 다시 반납하고 장기 분할매수 전략을 취할 수도 있어보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 가용현금과 채권이 좀 있고, 여차하면 SCHD를 팔고 저가 줍줍도 고려하고있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;하락장에선 현금이 왕이다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>qqq</category>
      <category>SCHD</category>
      <category>TQQQ</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/85</guid>
      <comments>https://hbs.pe.kr/entry/2025-04-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D#entry85comment</comments>
      <pubDate>Thu, 10 Apr 2025 23:43:33 +0900</pubDate>
    </item>
    <item>
      <title>ZZZ 요즘 꾸준히 하는 게임 젠레스존제로</title>
      <link>https://hbs.pe.kr/entry/ZZZ-%EC%9A%94%EC%A6%98-%EA%BE%B8%EC%A4%80%ED%9E%88-%ED%95%98%EB%8A%94-%EA%B2%8C%EC%9E%84-%EC%A0%A0%EB%A0%88%EC%8A%A4%EC%A1%B4%EC%A0%9C%EB%A1%9C</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;zzz.png&quot; data-origin-width=&quot;2564&quot; data-origin-height=&quot;1184&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vPps0/btsNhNkKW7E/fKEMiprEyyPlTaq3lJA7gK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vPps0/btsNhNkKW7E/fKEMiprEyyPlTaq3lJA7gK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vPps0/btsNhNkKW7E/fKEMiprEyyPlTaq3lJA7gK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FvPps0%2FbtsNhNkKW7E%2FfKEMiprEyyPlTaq3lJA7gK%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;2564&quot; height=&quot;1184&quot; data-filename=&quot;zzz.png&quot; data-origin-width=&quot;2564&quot; data-origin-height=&quot;1184&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;강습전 패턴 깎는 중인데 명전 미야비로 마리오네트 53165점 달성!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;명전으로 킬하는 굇수 수준에선 아직 실수가 많아 보완될 여지가 있다..!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;무소과금으로 1%대 달성!&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;852&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/66ah1/btsNjCKMxi7/2UtCf6rFD7H5tJHBV4MsjK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/66ah1/btsNjCKMxi7/2UtCf6rFD7H5tJHBV4MsjK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/66ah1/btsNjCKMxi7/2UtCf6rFD7H5tJHBV4MsjK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F66ah1%2FbtsNjCKMxi7%2F2UtCf6rFD7H5tJHBV4MsjK%2Fimg.webp&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;1000&quot; height=&quot;852&quot; data-origin-width=&quot;1000&quot; data-origin-height=&quot;852&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;</description>
      <category>일상/갬성</category>
      <category>강습전</category>
      <category>젠레스존제로</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/84</guid>
      <comments>https://hbs.pe.kr/entry/ZZZ-%EC%9A%94%EC%A6%98-%EA%BE%B8%EC%A4%80%ED%9E%88-%ED%95%98%EB%8A%94-%EA%B2%8C%EC%9E%84-%EC%A0%A0%EB%A0%88%EC%8A%A4%EC%A1%B4%EC%A0%9C%EB%A1%9C#entry84comment</comments>
      <pubDate>Thu, 10 Apr 2025 23:40:08 +0900</pubDate>
    </item>
    <item>
      <title>2025-03 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2025-03-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1741927813579&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/VZFCK/hyYqP6QsI2/4Js2KIhWMkeU3C2FRDOMl1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/606BX/hyYqOfOmdR/x6boc2ufbgWqCyUav4j50k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bOy6MN/hyYqK5wX10/81PF6AXEpPcHuLVKm3yk61/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/VZFCK/hyYqP6QsI2/4Js2KIhWMkeU3C2FRDOMl1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/606BX/hyYqOfOmdR/x6boc2ufbgWqCyUav4j50k/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bOy6MN/hyYqK5wX10/81PF6AXEpPcHuLVKm3yk61/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 음봉 = x1를 SCHD, 1x를 TQQQ 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당분간 내려가지 않을까..?&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>qqq</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/83</guid>
      <comments>https://hbs.pe.kr/entry/2025-03-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry83comment</comments>
      <pubDate>Fri, 14 Mar 2025 13:50:56 +0900</pubDate>
    </item>
    <item>
      <title>G30 520D 공임나라 분당수내점 엔진오일 교환</title>
      <link>https://hbs.pe.kr/entry/G30-520D-%EA%B3%B5%EC%9E%84%EB%82%98%EB%9D%BC-%EB%B6%84%EB%8B%B9%EC%88%98%EB%82%B4%EC%A0%90-%EC%97%94%EC%A7%84%EC%98%A4%EC%9D%BC-%EA%B5%90%ED%99%98</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_8247.jpeg&quot; data-origin-width=&quot;2100&quot; data-origin-height=&quot;1576&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/2DWET/btsMytCgfeD/StjKHnV1PvkTD06MlbGHRk/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/2DWET/btsMytCgfeD/StjKHnV1PvkTD06MlbGHRk/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/2DWET/btsMytCgfeD/StjKHnV1PvkTD06MlbGHRk/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F2DWET%2FbtsMytCgfeD%2FStjKHnV1PvkTD06MlbGHRk%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;2100&quot; height=&quot;1576&quot; data-filename=&quot;IMG_8247.jpeg&quot; data-origin-width=&quot;2100&quot; data-origin-height=&quot;1576&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차일피일 미루다 1만키로가 다되어서야 오일교환을 진행했습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;총 비용은 오일 6L, 오일필터, 에어클리너가 총 8만원정도에 공임 3.3만원이 들었습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공임도 저렴한데 작업도 빠르고 서비스로 엔진룸 클리닝과 공기압도 봐주시고 좋습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>일상/Car</category>
      <category>520D</category>
      <category>BMW</category>
      <category>공임나라</category>
      <category>엔진오일</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/82</guid>
      <comments>https://hbs.pe.kr/entry/G30-520D-%EA%B3%B5%EC%9E%84%EB%82%98%EB%9D%BC-%EB%B6%84%EB%8B%B9%EC%88%98%EB%82%B4%EC%A0%90-%EC%97%94%EC%A7%84%EC%98%A4%EC%9D%BC-%EA%B5%90%ED%99%98#entry82comment</comments>
      <pubDate>Mon, 3 Mar 2025 01:19:58 +0900</pubDate>
    </item>
    <item>
      <title>2025-02 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2025-02-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1738808338016&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/b1tGz1/hyYb8SkwTP/KzGrglsZKki7kk5k6wd611/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Jih3R/hyX72lX869/H8oqETtdyyBWIN4kzkyPe0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/p8Afj/hyX7REJNGi/Sz8lNNTL2guJjDN7nK1OL1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/b1tGz1/hyYb8SkwTP/KzGrglsZKki7kk5k6wd611/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Jih3R/hyX72lX869/H8oqETtdyyBWIN4kzkyPe0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/p8Afj/hyX7REJNGi/Sz8lNNTL2guJjDN7nK1OL1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD&lt;span&gt;&amp;nbsp;&lt;/span&gt;매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;정부의 똥볼로 연금계좌, ISA에서 국내상장 미국배당금이 15% 줄었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한심하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;일단, 해당 계좌의 주 목적인 연금납입분의 세액공제와 양도소득의 비과세와 연금소득세이므로 당분간은 기존 전략을 유지한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>qqq</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>적립식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/81</guid>
      <comments>https://hbs.pe.kr/entry/2025-02-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry81comment</comments>
      <pubDate>Thu, 6 Feb 2025 11:21:10 +0900</pubDate>
    </item>
    <item>
      <title>2025-01 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2025-01-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1736259991765&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/nrvJh/hyXWpOF9qZ/s36jomqK1BHJOZGwdJZKO0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/oP3k1/hyX0mQhFK2/E54WK4zsKkQOD2TNKNknA1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Osy9G/hyX0xdcBcg/pVkcIMO2b7HKJ423wdJ3K1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/nrvJh/hyXWpOF9qZ/s36jomqK1BHJOZGwdJZKO0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/oP3k1/hyX0mQhFK2/E54WK4zsKkQOD2TNKNknA1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/Osy9G/hyX0xdcBcg/pVkcIMO2b7HKJ423wdJ3K1/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD&lt;span&gt;&amp;nbsp;&lt;/span&gt;매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;본래 새 한해가 시작되었으니 다시 연저펀과 ISA부터 채웠어야 했는데 깜빡하고 일반계좌로 구매했다. ;;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;22년 1월부터 시작한 월적립식 투자가 벌써 3년차에 다다른 시점이어서 중간 평가를 해보았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 누적 입금액 대비 현재 평가액 (배당재투자 포함)은 +19.76% 수익으로, 연평균 수익률 약 6.58%를 기록중이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;적립식 투자기 때문에 지속적으로 누적금으로 인해 평단가가 상승한 것을 감안해야하며, 선입선출식으로 보고 최초 구매한 주식만 평가해보면 현재 약 +40%... 연평균 13%대 수익률을 기록중이라고 볼 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이는 최초 계획했던 수익율을 살짝 초과하고 있는 수치다. (8~12% 예상)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재까진 잘 워킹하고 있다고 생각하며, 현재의 상승이 이후 있을 큰 하락기에도 버텨내기 위해서 계속 일정수준의 안전자산 비율을 확보해 두려고 한다. (현재 주식:안전자산은 7:3 수준)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>qqq</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>적립식투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/80</guid>
      <comments>https://hbs.pe.kr/entry/2025-01-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry80comment</comments>
      <pubDate>Tue, 7 Jan 2025 23:37:24 +0900</pubDate>
    </item>
    <item>
      <title>520D 타이어 교체 - 컨티넨탈 올시즌 콘택트2</title>
      <link>https://hbs.pe.kr/entry/520D-%ED%83%80%EC%9D%B4%EC%96%B4-%EA%B5%90%EC%B2%B4-%EC%BB%A8%ED%8B%B0%EB%84%A8%ED%83%88-%EC%98%AC%EC%8B%9C%EC%A6%8C-%EC%BD%98%ED%83%9D%ED%8A%B82</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7990.JPEG&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1536&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/09in1/btsK7aC4uc5/xu6uxm842syGB0h8Nrkwp1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/09in1/btsK7aC4uc5/xu6uxm842syGB0h8Nrkwp1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/09in1/btsK7aC4uc5/xu6uxm842syGB0h8Nrkwp1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F09in1%2FbtsK7aC4uc5%2Fxu6uxm842syGB0h8Nrkwp1%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;2048&quot; height=&quot;1536&quot; data-filename=&quot;IMG_7990.JPEG&quot; data-origin-width=&quot;2048&quot; data-origin-height=&quot;1536&quot;/&gt;&lt;/span&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;IMG_7996.JPEG&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;2048&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/0mc5h/btsK8oNXPzd/xHrHtrbXUCrvMRYmXVDSd1/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/0mc5h/btsK8oNXPzd/xHrHtrbXUCrvMRYmXVDSd1/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/0mc5h/btsK8oNXPzd/xHrHtrbXUCrvMRYmXVDSd1/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F0mc5h%2FbtsK8oNXPzd%2FxHrHtrbXUCrvMRYmXVDSd1%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;1536&quot; height=&quot;2048&quot; data-filename=&quot;IMG_7996.JPEG&quot; data-origin-width=&quot;1536&quot; data-origin-height=&quot;2048&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;애마 520D 타이어를 바꿔주었다. 기존에는 올시즌 타이어 4짝을 사용중이었는데, 이번에 컨티넨탈에서 새로나온 올웨더인 올시즌 콘택트 2로 변경했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;타이어 이름이 이상하긴 한데, 삼봉마크가 달린 올웨더가 맞다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제는, 내차 후륜이 275 40이라 림폭이 245 45인 전륜과 다른데, 올시즌 콘택트2는 275 사이즈가 없다. (CC2도 이사이즈가 없고...)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래서 고민하다가, 그냥 뒷쪽은 컨티넨탈 DWS 06+로 달고 앞쪽만 올시즌 콘택트2를 장착시켰다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;DWS도 올시즌이긴 하지만 올시즌중에서는 겨울철 성능이 상급인 놈이고 차도 4륜이라 요정도만 해도 서울 경기권은 별 무리 없지 않을까 생각한 절충안이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;부디 안전하게 겨울 날 수 있기를!&lt;/p&gt;</description>
      <category>일상/Car</category>
      <category>BMW</category>
      <category>올시즌</category>
      <category>올웨더</category>
      <category>콘티넨탈</category>
      <category>타이어</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/79</guid>
      <comments>https://hbs.pe.kr/entry/520D-%ED%83%80%EC%9D%B4%EC%96%B4-%EA%B5%90%EC%B2%B4-%EC%BB%A8%ED%8B%B0%EB%84%A8%ED%83%88-%EC%98%AC%EC%8B%9C%EC%A6%8C-%EC%BD%98%ED%83%9D%ED%8A%B82#entry79comment</comments>
      <pubDate>Wed, 4 Dec 2024 18:45:15 +0900</pubDate>
    </item>
    <item>
      <title>2024-12 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2024-12-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1733302830008&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/lhZGh/hyXGMwn3EU/J0FZjvocb9THJRavhn7u00/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b0Innm/hyXGNhKs8G/Pv5trH2KR8GXnKzMXS2uY0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dnZ8sd/hyXGy5YEcf/651XJQkNJLPRNQ4v5Bcj00/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/lhZGh/hyXGMwn3EU/J0FZjvocb9THJRavhn7u00/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/b0Innm/hyXGNhKs8G/Pv5trH2KR8GXnKzMXS2uY0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/dnZ8sd/hyXGy5YEcf/651XJQkNJLPRNQ4v5Bcj00/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;한해가 간다. 올한해가 지나기전 막판, 계엄령이 터져 식겁하고있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;2024년 맞나?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;쨌는, 올해 투자 자체는 역대급 한해였다고 정리할 수 있다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>qqq</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/78</guid>
      <comments>https://hbs.pe.kr/entry/2024-12-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry78comment</comments>
      <pubDate>Wed, 4 Dec 2024 18:01:26 +0900</pubDate>
    </item>
    <item>
      <title>2024-11 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2024-11-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1731071342875&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/66yzq/hyXsPHmOWw/oapIYzYjXVLwPZft7hiHzk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/vsIBz/hyXwj7ProX/FZ1MVL1YuQkfHSFkKdrFv0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/boo5Dm/hyXs0B5vaS/B4OCiy4ioQkd7rsDbUZLD0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/66yzq/hyXsPHmOWw/oapIYzYjXVLwPZft7hiHzk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/vsIBz/hyXwj7ProX/FZ1MVL1YuQkfHSFkKdrFv0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/boo5Dm/hyXs0B5vaS/B4OCiy4ioQkd7rsDbUZLD0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;본래 음봉인데 실수했다. 크게 안떨어져서 그냥 둠.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;SCHD 수익률이 어마어마해졌다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>TQQQ</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/77</guid>
      <comments>https://hbs.pe.kr/entry/2024-11-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry77comment</comments>
      <pubDate>Fri, 8 Nov 2024 22:09:54 +0900</pubDate>
    </item>
    <item>
      <title>2024-10 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2024-10-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1728549221402&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/cNLJgR/hyXeg5Wafp/pLDIKjtgIVARa37Gav0IDk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/BTdsj/hyXeaEGnqg/ou3S8FJ4ws8OOFKyFdwc00/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/9mAcu/hyXefzd24u/CwpjoXmLNJ8QhmMPXXQCiK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/cNLJgR/hyXeg5Wafp/pLDIKjtgIVARa37Gav0IDk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/BTdsj/hyXeaEGnqg/ou3S8FJ4ws8OOFKyFdwc00/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/9mAcu/hyXefzd24u/CwpjoXmLNJ8QhmMPXXQCiK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;SCHD를 1배율로 매수했다.&lt;/span&gt;&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그리고 TQQQ도 수익률 35%에서 전량 매도 후 SCHD를 매입했다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>TQQQ</category>
      <category>나스닥</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/76</guid>
      <comments>https://hbs.pe.kr/entry/2024-10-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry76comment</comments>
      <pubDate>Thu, 10 Oct 2024 17:34:38 +0900</pubDate>
    </item>
    <item>
      <title>Razer Viper V2 Pro AS는 웨이코스 = 쓰레기</title>
      <link>https://hbs.pe.kr/entry/Razer-Viper-V2-Pro-AS%EB%8A%94-%EC%9B%A8%EC%9D%B4%EC%BD%94%EC%8A%A4-%EC%93%B0%EB%A0%88%EA%B8%B0</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;마우스 성능은 괜찮은편인데 가격에 비하면 물음표&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;결정적으로 AS가 쓰레기. AS만 좋아도 가격 비싼걸 감수해봄직 한데 마우스 자체가 소모품이라 AS가 쓰레기면 안사는게 답.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그런데 레이저 제품 국내 유통이 웨이코스면 뭐다? 하 말해 뭐해...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;차라리 로지텍 G9 여러개 굴릴때 종종 이용했던 로지텍 AS가 천사로 보일정도다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;주변에서 누가 산다고 하면 도시락 싸들고 다니면서 말림^^&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;잊지마라 웨이코스는 웨이코스다.&lt;/p&gt;</description>
      <category>일상</category>
      <category>as</category>
      <category>Razer</category>
      <category>Viper</category>
      <category>웨이코스</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/75</guid>
      <comments>https://hbs.pe.kr/entry/Razer-Viper-V2-Pro-AS%EB%8A%94-%EC%9B%A8%EC%9D%B4%EC%BD%94%EC%8A%A4-%EC%93%B0%EB%A0%88%EA%B8%B0#entry75comment</comments>
      <pubDate>Fri, 27 Sep 2024 12:01:57 +0900</pubDate>
    </item>
    <item>
      <title>2024-09 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2024-09-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1725511718601&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/osNxx/hyWZnQQBKh/dkCnYpzETIhn4DildpPPWk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cGXMgN/hyWZd1JHmA/DSqRrvw2jlev0EcTk0E1Nk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/c8zrK1/hyWZncdrIW/rZP3ufguKJWgJOAgcPioGk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/osNxx/hyWZnQQBKh/dkCnYpzETIhn4DildpPPWk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/cGXMgN/hyWZd1JHmA/DSqRrvw2jlev0EcTk0E1Nk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/c8zrK1/hyWZncdrIW/rZP3ufguKJWgJOAgcPioGk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번달은 지난달 샀던 TQQQ가 +35%까지 순간 크게 올랐으나 9월이 되자 귀신같이 떨어져 아직 30% 미만을 유지하고있다. 따라서 매도를 보류하고 당분간 더 보유한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SCHD를 1배율로 매수했다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>qqq</category>
      <category>SCHD</category>
      <category>TQQQ</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/74</guid>
      <comments>https://hbs.pe.kr/entry/2024-09-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry74comment</comments>
      <pubDate>Thu, 5 Sep 2024 13:50:06 +0900</pubDate>
    </item>
    <item>
      <title>젠레스 존 제로 - 시유 분쟁구간 8단계 S 클리어</title>
      <link>https://hbs.pe.kr/entry/%EC%A0%A0%EB%A0%88%EC%8A%A4-%EC%A1%B4-%EC%A0%9C%EB%A1%9C-%EC%8B%9C%EC%9C%A0-%EB%B6%84%EC%9F%81%EA%B5%AC%EA%B0%84-8%EB%8B%A8%EA%B3%84-S-%ED%81%B4%EB%A6%AC%EC%96%B4</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;zzz1.jpg&quot; data-origin-width=&quot;2538&quot; data-origin-height=&quot;1416&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/p3KGr/btsI4tE3U3j/9zl3U9GVmGnljJSJwD1WdK/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/p3KGr/btsI4tE3U3j/9zl3U9GVmGnljJSJwD1WdK/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/p3KGr/btsI4tE3U3j/9zl3U9GVmGnljJSJwD1WdK/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fp3KGr%2FbtsI4tE3U3j%2F9zl3U9GVmGnljJSJwD1WdK%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;2538&quot; height=&quot;1416&quot; data-filename=&quot;zzz1.jpg&quot; data-origin-width=&quot;2538&quot; data-origin-height=&quot;1416&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;zzz2.jpg&quot; data-origin-width=&quot;2534&quot; data-origin-height=&quot;1405&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/b3Zmic/btsI4ltNCmU/5HjqBL4omXMkrfGRNAOPk0/img.jpg&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/b3Zmic/btsI4ltNCmU/5HjqBL4omXMkrfGRNAOPk0/img.jpg&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/b3Zmic/btsI4ltNCmU/5HjqBL4omXMkrfGRNAOPk0/img.jpg&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fb3Zmic%2FbtsI4ltNCmU%2F5HjqBL4omXMkrfGRNAOPk0%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;2534&quot; height=&quot;1405&quot; data-filename=&quot;zzz2.jpg&quot; data-origin-width=&quot;2534&quot; data-origin-height=&quot;1405&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;업데이트 이후 S 등급 기준이 시간보단 전투불능이 안되는쪽으로 변경된 것 같다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;8단계-2스테이지는 아예 정신없이 공격이 들어오는데... 콜리다의 경우 회피 반격의 무적이 상당히 긴편이라 회피 반격을 무한으로 쓰면서 그로기를 쌓다가 극딜타임에 딜하는걸 반복하는걸로 깼다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어렵네...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;청의 뽑고싶다. 근데 소과금 유져라 뽑는게 쉽지는 않네...&lt;/p&gt;</description>
      <category>게임</category>
      <category>zzz</category>
      <category>게임</category>
      <category>젠레스존제로</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/73</guid>
      <comments>https://hbs.pe.kr/entry/%EC%A0%A0%EB%A0%88%EC%8A%A4-%EC%A1%B4-%EC%A0%9C%EB%A1%9C-%EC%8B%9C%EC%9C%A0-%EB%B6%84%EC%9F%81%EA%B5%AC%EA%B0%84-8%EB%8B%A8%EA%B3%84-S-%ED%81%B4%EB%A6%AC%EC%96%B4#entry73comment</comments>
      <pubDate>Thu, 15 Aug 2024 14:42:19 +0900</pubDate>
    </item>
    <item>
      <title>젠레스 존 제로 - 메마른 꽃밭 11 강도 클리어 기념</title>
      <link>https://hbs.pe.kr/entry/%EC%A0%A0%EB%A0%88%EC%8A%A4-%EC%A1%B4-%EC%A0%9C%EB%A1%9C-%EB%A9%94%EB%A7%88%EB%A5%B8-%EA%BD%83%EB%B0%AD-11-%EA%B0%95%EB%8F%84-%ED%81%B4%EB%A6%AC%EC%96%B4-%EA%B8%B0%EB%85%90</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;zzz.png&quot; data-origin-width=&quot;3824&quot; data-origin-height=&quot;2124&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bB7IVo/btsITazmdfV/gkdeSUEcrO2jo4XnVHgRik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bB7IVo/btsITazmdfV/gkdeSUEcrO2jo4XnVHgRik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bB7IVo/btsITazmdfV/gkdeSUEcrO2jo4XnVHgRik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbB7IVo%2FbtsITazmdfV%2FgkdeSUEcrO2jo4XnVHgRik%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;3824&quot; height=&quot;2124&quot; data-filename=&quot;zzz.png&quot; data-origin-width=&quot;3824&quot; data-origin-height=&quot;2124&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-filename=&quot;zzz2.png&quot; data-origin-width=&quot;3707&quot; data-origin-height=&quot;2123&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ZiH9x/btsIVaLb72L/J59xWBJeBDLoCn8LipzwqK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ZiH9x/btsIVaLb72L/J59xWBJeBDLoCn8LipzwqK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ZiH9x/btsIVaLb72L/J59xWBJeBDLoCn8LipzwqK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FZiH9x%2FbtsIVaLb72L%2FJ59xWBJeBDLoCn8LipzwqK%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;3707&quot; height=&quot;2123&quot; data-filename=&quot;zzz2.png&quot; data-origin-width=&quot;3707&quot; data-origin-height=&quot;2123&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어휴 힘들다...!&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;나이가 들었는지 이제 액션게임 최고 난이도는 순발력이 부치는 느낌이 든다 ㅠ&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그래도 몇트 끝에 결국 클리어^^&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현질을 거의 안해서 레벨과 템이 덜맞춰진 상태라 그런건가...&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>게임</category>
      <category>zzz</category>
      <category>게임</category>
      <category>젠레스존제로</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/72</guid>
      <comments>https://hbs.pe.kr/entry/%EC%A0%A0%EB%A0%88%EC%8A%A4-%EC%A1%B4-%EC%A0%9C%EB%A1%9C-%EB%A9%94%EB%A7%88%EB%A5%B8-%EA%BD%83%EB%B0%AD-11-%EA%B0%95%EB%8F%84-%ED%81%B4%EB%A6%AC%EC%96%B4-%EA%B8%B0%EB%85%90#entry72comment</comments>
      <pubDate>Sun, 4 Aug 2024 19:41:37 +0900</pubDate>
    </item>
    <item>
      <title>2024-08 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2024-08-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1722753433502&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/NqfSK/hyWKAWYkOY/I2P8Vhj2bEK0UY21LL9us0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/m9W9n/hyWKGJFMzB/a72NH5WAP6zW5mbblsZQZ0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/JvuAQ/hyWKuJerMG/kamUPuyLh8DAKL2ADqCWKK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/NqfSK/hyWKAWYkOY/I2P8Vhj2bEK0UY21LL9us0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/m9W9n/hyWKGJFMzB/a72NH5WAP6zW5mbblsZQZ0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/JvuAQ/hyWKuJerMG/kamUPuyLh8DAKL2ADqCWKK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 음봉 = x1를 SCHD, 1x를 TQQQ 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;거의 3년 미국 투자 기간 중 역대급 SCHD 상승장이었던 7월이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;배당을 포함한 TR 수익률이 이제 25%를 넘었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전월 나스닥은 하락장이었으므로 TQ를 절반 비중으로 매수한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;당분간 미국 하락장이 예상되는데 연속 하락이 진행될경우 점차 TQ 매수 비중을 늘리게된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>TQQQ</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/71</guid>
      <comments>https://hbs.pe.kr/entry/2024-08-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry71comment</comments>
      <pubDate>Sun, 4 Aug 2024 15:39:34 +0900</pubDate>
    </item>
    <item>
      <title>2024-07 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2024-07-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1720047376284&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/erTAum/hyWvTvLvC6/vZUoGbZXwYCgZs7HhWBXq0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/mNZrG/hyWvU2vYea/1Ov93RJLAkOfvS6UWkw9Yk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/H38Km/hyWvKFAwcI/kvFOomgXS5NcPULPUi7FDk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/erTAum/hyWvTvLvC6/vZUoGbZXwYCgZs7HhWBXq0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/mNZrG/hyWvU2vYea/1Ov93RJLAkOfvS6UWkw9Yk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/H38Km/hyWvKFAwcI/kvFOomgXS5NcPULPUi7FDk/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QQQ의 양/음봉 여부에 따른 SCHD, TQQQ 선택 매매1회 전월 양봉 = x1&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;TQQQ 30% 수익률 달성시 = 매매일에 전량매도 후 SCHD로 분배&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;5월 나스닥 하락에 매수했던 TQQQ를 수익률 41%에서 매도했다. 매도금 달러는 환전 없이 전액 SCHD 해외판으로 즉시 매수했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;월중 50%까지 치솟았지만 감정을 배제한 기계적 매매를 위해 월말까지 기다렸고 월말 영업일에 일괄 매도를 진행했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이미 1월 매도했던 TQQQ 수익으로 인해 해외주식 양도소득세 공제금은 이미 초과했기 때문에 이번달 수익은 전액 22% 과세대상이다.   기쁘면서 슬픔&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;올해는 줄창 SCHD 평행선에 수량만 늘리는 중이고, 수익은 나스닥에서 발생하고있다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>qqq</category>
      <category>SCHD</category>
      <category>TQQQ</category>
      <category>나스닥</category>
      <category>미국주식</category>
      <category>투자</category>
      <category>해외주식</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/70</guid>
      <comments>https://hbs.pe.kr/entry/2024-07-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry70comment</comments>
      <pubDate>Thu, 4 Jul 2024 08:02:12 +0900</pubDate>
    </item>
    <item>
      <title>Kubernetes AWS EKS 1.30 Update Considerations (ENG)</title>
      <link>https://hbs.pe.kr/entry/Kubernetes-AWS-EKS-130-Update-Considerations-ENG</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;There may be issues arising from changes not mentioned in the &lt;a href=&quot;https://kubernetes.io/blog/2024/04/17/kubernetes-v1-30-release/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Kubernetes 1.30 release notes&lt;/a&gt; and the EKS 1.30 release notes.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Particularly, if you are using &lt;a href=&quot;https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;EKS Managed Node Group&lt;/a&gt;, after updating to 1.30, pods may not function correctly due to failures in EKS Addon or AWS Credentials acquisition, or IMDS (Instance Meta Data Service) access failures.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Here is the &lt;a href=&quot;https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions-standard.html#kubernetes-1.30&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;official AWS EKS 1.30 Update document&lt;/a&gt;.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;From 1.30, the default AMI image will change from AL2 to AL2023, and a link to a comparison document between AL2 and AL2023 is provided. However, it does not specify exactly what problems might arise due to the image change.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;447&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bT4rXv/btsH7BiJ8bu/y0xoETxjdX9LoX1AaQbHo1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bT4rXv/btsH7BiJ8bu/y0xoETxjdX9LoX1AaQbHo1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bT4rXv/btsH7BiJ8bu/y0xoETxjdX9LoX1AaQbHo1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbT4rXv%2FbtsH7BiJ8bu%2Fy0xoETxjdX9LoX1AaQbHo1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;447&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;447&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Let's also look at the document &lt;a href=&quot;https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Comparing AL2 and AL2023&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1063&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mktOf/btsH5WaO9L5/9CMfNvkHWBCpsDlDDWqock/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mktOf/btsH5WaO9L5/9CMfNvkHWBCpsDlDDWqock/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mktOf/btsH5WaO9L5/9CMfNvkHWBCpsDlDDWqock/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmktOf%2FbtsH5WaO9L5%2F9CMfNvkHWBCpsDlDDWqock%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;1063&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1063&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;It is a long and verbose change note and does not highlight any specific problematic areas. Since this is a base image change for EC2 node hosts, it should not significantly impact existing workloads running as Kubernetes pod images.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Looking at the Security updates of the changes, there is an item called IMDSv2.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/vw0pQ/btsH62VouxR/0eoZi3RuANRRSaOW60kA80/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/vw0pQ/btsH62VouxR/0eoZi3RuANRRSaOW60kA80/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/vw0pQ/btsH62VouxR/0eoZi3RuANRRSaOW60kA80/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fvw0pQ%2FbtsH62VouxR%2F0eoZi3RuANRRSaOW60kA80%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;368&quot; height=&quot;358&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;To briefly explain what IMDS is, it stands for AWS Instance Metadata Service, which is an AWS service that allows an EC2 instance to access its metadata. This includes information such as the instance's name, instance type, which network VPC it is in, startup scripts, and so on, accessible through a fixed address (&lt;a href=&quot;http://169.254.169.254/latest/meta-data/&quot;&gt;http://169.254.169.254/latest/meta-data/&lt;/a&gt;).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Thus, it is used to obtain information related to the EC2, and particularly in AWS EKS, addons use IMDS to automatically understand and operate based on various environment information.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;One commonly used EKS Addon, the AWS Load Balancer Controller, also operates by querying VPC information through IMDS without separate input as the default installation option.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IMDS has v1 and v2; v1 is always accessible without security measures, while v2 includes added security measures.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;In v2, token authentication is used, and it is designed to limit the number of network hops the caller can go through, ensuring it doesn't exceed a certain number of network interfaces.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Let's look at the Security updates - IMDSv2 section of this document.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;312&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cWLhRr/btsH7DnhGYt/1YjDA6rykosxX81HAIKpkk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cWLhRr/btsH7DnhGYt/1YjDA6rykosxX81HAIKpkk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cWLhRr/btsH7DnhGYt/1YjDA6rykosxX81HAIKpkk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcWLhRr%2FbtsH7DnhGYt%2F1YjDA6rykosxX81HAIKpkk%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;312&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;312&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;It states that from the AL2023 image, instances will run with IMDSv2-only, and to support container workloads, the default hop limit is set to 2.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;When requesting IMDS from a virtual container environment, it first goes through the virtual host network from the container, reaching the IMDS endpoint, and this step results in a hop of 2. Thus, if the IMDSv2 hop is set to 1, the HTTP request will fail.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Due to this issue, AL2023 changes the default hop setting to 2 to avoid problems on EC2s running containers like EKS.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;However, there is an unmentioned trap in this document when an EC2 for EKS nodes starts with a Managed Node Group.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Managed Node Group includes IMDS settings in its Launch Template.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/c20Jx2/btsH7TjaCPw/UELrsvzKeFfLGzahaN8Rd0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/c20Jx2/btsH7TjaCPw/UELrsvzKeFfLGzahaN8Rd0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/c20Jx2/btsH7TjaCPw/UELrsvzKeFfLGzahaN8Rd0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fc20Jx2%2FbtsH7TjaCPw%2FUELrsvzKeFfLGzahaN8Rd0%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;872&quot; height=&quot;554&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;554&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;If you haven't modified the Metadata settings yourself, the AWS Default settings will be used.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;So you might think there won't be an issue because of the Default setting, but it's a trap. If no AMI and Metadata settings are made in the Launch Template for Managed Node Group, after updating to EKS 1.30, EC2 nodes will start with AMI automatically changed to AL2023 and Metadata version set to IMDSv2 Required.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;823&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/NQ9Sq/btsH5JQibTc/PGabdUcKeE3csq5I5PZ5ik/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/NQ9Sq/btsH5JQibTc/PGabdUcKeE3csq5I5PZ5ik/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/NQ9Sq/btsH5JQibTc/PGabdUcKeE3csq5I5PZ5ik/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FNQ9Sq%2FbtsH5JQibTc%2FPGabdUcKeE3csq5I5PZ5ik%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;690&quot; height=&quot;823&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;823&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Up to this point, it follows the AL2023 document, but the trap is the hop. The hop is set to 1. As described above, accessing IMDS from within a container requires hop 2 due to the host network traversal. Thus, AL2023 AMI's default is also changed to hop 2. But EC2 created by Managed Node Group starts with IMDSv2 and hop 1.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;You cannot see this hop count in the EC2 console. After upgrading to 1.30, while troubleshooting issues like pods failing to get AWS credentials or the AWS Load Balancer Controller failing to get vpcId or pods continuously restarting, you will realize that the problem is the hop.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Let's see where this problem is being tracked.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;First, there is an explanation in the GitHub issue announcing the release of AL2023.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/awslabs/amazon-eks-ami/issues/1696&quot;&gt;Amazon Linux 2023 (AL2023) is now generally available for MNG, Karpenter, and self-managed nodes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1665&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/MTUu2/btsH70iguMp/7sZnOT9GOruEakVMsOYUO1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/MTUu2/btsH70iguMp/7sZnOT9GOruEakVMsOYUO1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/MTUu2/btsH70iguMp/7sZnOT9GOruEakVMsOYUO1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FMTUu2%2FbtsH70iguMp%2F7sZnOT9GOruEakVMsOYUO1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;1665&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;1665&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;You can also find a statement in the EKS Managed Node Group documentation.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html&quot;&gt;Customizing managed nodes with launch templates - Amazon EKS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;149&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/coUSbo/btsH5JJxxnM/Y4bbiFtfjW5CmNGWZrEjp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/coUSbo/btsH5JJxxnM/Y4bbiFtfjW5CmNGWZrEjp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/coUSbo/btsH5JJxxnM/Y4bbiFtfjW5CmNGWZrEjp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcoUSbo%2FbtsH5JJxxnM%2FY4bbiFtfjW5CmNGWZrEjp1%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;149&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;149&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;There is also an issue with the AWS Load Balancer Controller.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/kubernetes-sigs/aws-load-balancer-controller/issues/3695&quot;&gt;Does not work on Fresh EKS Cluster with Amazon Linux 2023 AMI Type Nodes&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;371&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ct3P1M/btsH6ZYF3oU/z2R12Cz7Q5u3jy3c5rpCkK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ct3P1M/btsH6ZYF3oU/z2R12Cz7Q5u3jy3c5rpCkK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ct3P1M/btsH6ZYF3oU/z2R12Cz7Q5u3jy3c5rpCkK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fct3P1M%2FbtsH6ZYF3oU%2Fz2R12Cz7Q5u3jy3c5rpCkK%2Fimg.png&quot; onerror=&quot;this.onerror=null; this.src='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png'; this.srcset='//t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png';&quot; loading=&quot;lazy&quot; width=&quot;1280&quot; height=&quot;371&quot; data-origin-width=&quot;1280&quot; data-origin-height=&quot;371&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;There is also a statement in the AL2023 release blog.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/blogs/containers/amazon-eks-optimized-amazon-linux-2023-ami-now-generally-available/&quot;&gt;Amazon EKS optimized Amazon Linux 2023 AMI now generally available&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/30Bnl/btsH5WBRiHd/kPCKSz6VKsHBtk4SU5INyk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/30Bnl/btsH5WBRiHd/kPCKSz6VKsHBtk4SU5INyk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/30Bnl/btsH5WBRiHd/kPCKSz6VKsHBtk4SU5INyk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2F30Bnl%2FbtsH5WBRiHd%2FkPCKSz6VKsHBtk4SU5INyk%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;1181&quot; height=&quot;642&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;There is no mention of problems arising from the hop limit with AL2023 in the 1.30 release note, deprecated note, or any major update check points. It's ridiculous that they made even their own EKS Addon fail to work immediately after the update due to the hop limit.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Only Managed Node Group sets hop to 1, while other EC2 instances are created with hop 2 (like Karpenter, etc.).&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;This means that in an environment where EC2 is launched in various ways, whether the pod works or not depends on who launched the EC2. Hahaha :) Are they idiots?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;The solution is simple. The problem is difficult to identify. Just set the hop to 2 in the Launch Template used by the Managed Node Group.&lt;/p&gt;</description>
      <category>개발/Kubernetes</category>
      <category>1.30</category>
      <category>AWS</category>
      <category>eks</category>
      <category>Kubernetes</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/69</guid>
      <comments>https://hbs.pe.kr/entry/Kubernetes-AWS-EKS-130-Update-Considerations-ENG#entry69comment</comments>
      <pubDate>Fri, 21 Jun 2024 08:52:56 +0900</pubDate>
    </item>
    <item>
      <title>Kubernetes AWS EKS 1.30 업데이트 고려사항</title>
      <link>https://hbs.pe.kr/entry/Kubernetes-AWS-EKS-130-Update-Considerations</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://kubernetes.io/blog/2024/04/17/kubernetes-v1-30-release/&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Kubernetes 1.30 릴리즈 노트&lt;/a&gt;와 EKS 1.30 릴리즈 노트에 명시되지 않은 변화점으로 인해 문제가 발생할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;특히 &lt;a href=&quot;https://docs.aws.amazon.com/eks/latest/userguide/managed-node-groups.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;EKS Managed Node Group&lt;/a&gt;을 사용하고 있다면 1.30으로 업데이트 후, EKS Addon이나 AWS Credentials 획득 실패, IMDS (Instance Meta Data Service) 엑세스 실패등으로 pod들이 정상 동작 하지 않을 수 있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;다음은 &lt;a href=&quot;https://docs.aws.amazon.com/eks/latest/userguide/kubernetes-versions-standard.html#kubernetes-1.30&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;AWS 공식 EKS 1.30 Update 문서&lt;/a&gt;입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.30부터 AMI 기본 이미지가 AL2에서 AL2023으로 변경된다고 하고있으며, AL2와 AL2023 비교 문서의 링크를 제공하고 있습니다. 그러나 이미지 변경으로 인해 정확히 무슨 문제가 발생할 수 있는지는 표시하고 있지 않습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2748&quot; data-origin-height=&quot;960&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ctnQvN/btsH66Q1OiT/BCPxjNrfHt9D88LyyN8lN0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ctnQvN/btsH66Q1OiT/BCPxjNrfHt9D88LyyN8lN0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ctnQvN/btsH66Q1OiT/BCPxjNrfHt9D88LyyN8lN0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FctnQvN%2FbtsH66Q1OiT%2FBCPxjNrfHt9D88LyyN8lN0%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;2748&quot; height=&quot;960&quot; data-origin-width=&quot;2748&quot; data-origin-height=&quot;960&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/linux/al2023/ug/compare-with-al2.html&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;Comparing AL2 and AL2023 문서&lt;/a&gt;도 살펴봅시다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2156&quot; data-origin-height=&quot;1791&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ye0ti/btsH62HPtso/RoRh1ivTnRx5ozjYiHtutk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ye0ti/btsH62HPtso/RoRh1ivTnRx5ozjYiHtutk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ye0ti/btsH62HPtso/RoRh1ivTnRx5ozjYiHtutk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fye0ti%2FbtsH62HPtso%2FRoRh1ivTnRx5ozjYiHtutk%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;2156&quot; height=&quot;1791&quot; data-origin-width=&quot;2156&quot; data-origin-height=&quot;1791&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;길고 장황한 change note이며 딱히 문제점이 있을만한 부분을 강조하고 있지도 않습니다.&lt;br /&gt;그리고 이건 ec2 노드 호스트의 베이스 이미지 변경이므로, k8s의 pod 이미지로 도는 기존 워크로드에 큰 영향이 가지 않아야 하는게 정상이기도 합니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;변경사항의 Security updates를 보면 IMDSv2 라는 항목이 있습니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/elcSLS/btsH6hZ6W1q/nOJ9OrKhIZcA1AKHs7AJ7k/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/elcSLS/btsH6hZ6W1q/nOJ9OrKhIZcA1AKHs7AJ7k/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/elcSLS/btsH6hZ6W1q/nOJ9OrKhIZcA1AKHs7AJ7k/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FelcSLS%2FbtsH6hZ6W1q%2FnOJ9OrKhIZcA1AKHs7AJ7k%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;368&quot; height=&quot;358&quot; data-origin-width=&quot;368&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;IMDS가 무엇인지 간단히 설명하자면, AWS 인스턴스 메타데이터 서비스의 약자이며 EC2 인스턴스가 자신의 메타데이터에 접근할 수 있도록 제공하는 AWS 서비스입니다. 현재 EC2 환경 내에서 스스로의 이름, 인스턴스 종류, 어느 네트워크 VPC에 떠있는지, 시작 스크립트는 무엇인지 등등을 알 수 있도록 고정된 주소(http://169.254.169.254/latest/meta-data/) 를 통해 이러한 정보를 제공합니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;즉, 이를 통해 EC2와 연관된 정보들을 획득하는데 사용하며, 특히 AWS EKS에서는 Addon들이 IMDS를 통해 여러 환경 정보를 스스로 파악해 동작하게 됩니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;EKS Addon 중 많이 사용하게되는 aws load balancer controller 역시 그 중 하나로, VPC 정보를 별도 입력 없이 IMDS를 통해 질의하여 동작하는것이 기본 설치 옵션에서의 동작 방식입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;IMDS는 v1과 v2가 있으며 보안 조치 없이 항상 엑세스 가능한것이 v1, 보안 처리가 추가된것이 v2입니다.&lt;/p&gt;
&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;v2에서는 특히 토큰 인증을 사용하며, 네트워크 홉 제한을 통해 호출자가 몇 단계 이상의 네트워크 인터페이스를 거치지 못하도록 제한하도록 되어있습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문서의 Security updates - IMDSv2&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;2794&quot; data-origin-height=&quot;683&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/mUy5a/btsH51XsUlR/rtMepgxwBtrUeZKq41EM2K/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/mUy5a/btsH51XsUlR/rtMepgxwBtrUeZKq41EM2K/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/mUy5a/btsH51XsUlR/rtMepgxwBtrUeZKq41EM2K/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FmUy5a%2FbtsH51XsUlR%2FrtMepgxwBtrUeZKq41EM2K%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;2794&quot; height=&quot;683&quot; data-origin-width=&quot;2794&quot; data-origin-height=&quot;683&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기본적으로 AL2023 이미지부터 IMDSv2-only 로 인스턴스가 실행되며, 컨테이너 워크로드 서포트 허용을 위해 default hop limit이 2로 설정된다고 명시하고 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;가상 컨테이너 환경 안에서 IMDS를 요청하면 먼저 컨테이너에서 가상 호스트 네트워크를 거쳐 IMDS endpoint로 들어가며, 이 거치는 단계로 인해 hop이 2가 됩니다. 즉, IMDSv2 hop이 1이라면 http 요청에 실패하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이런 문제가 있기 때문에 AL2023은 기본 hop 설정을 2로 변경해서 EKS와 같이 컨테이너들을 실행하는 EC2들에서 문제가 없도록 제공한다고 씌여있는 겁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나, 이 문서에 표시되지 않은 함정이 있는데 바로 Managed Node Group으로 EKS 노드용 EC2가 시작되었을때입니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;Managed Node Group은 Launch Template 설정에 IMDS 설정이 포함됩니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;554&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cAPRcr/btsH6Ob2KeY/YZc64irKKmek2ho2pTLaHk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cAPRcr/btsH6Ob2KeY/YZc64irKKmek2ho2pTLaHk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cAPRcr/btsH6Ob2KeY/YZc64irKKmek2ho2pTLaHk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcAPRcr%2FbtsH6Ob2KeY%2FYZc64irKKmek2ho2pTLaHk%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;872&quot; height=&quot;554&quot; data-origin-width=&quot;872&quot; data-origin-height=&quot;554&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기서 Metadata 설정을 직접 수정하지 않았다면 AWS Default 설정을 사용하게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그럼 Default 설정이니 문제가 없겠네? 싶을 수 있는데 함정입니다. Managed Node Group에서 Launch Template에 AMI와 Metadata 설정을 하지 않은 경우 EKS 1.30 업데이트되고 뜨는 EC2 노드부터 AMI는 자동으로 AL2023으로 변경되고, Metadata version도 AL2023의 기본값인 IMDSv2 Required로 시작합니다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;823&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bt4WtU/btsH6ZxB6fk/mXsxQYuWug7KafSIW2ORw0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bt4WtU/btsH6ZxB6fk/mXsxQYuWug7KafSIW2ORw0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bt4WtU/btsH6ZxB6fk/mXsxQYuWug7KafSIW2ORw0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fbt4WtU%2FbtsH6ZxB6fk%2FmXsxQYuWug7KafSIW2ORw0%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;690&quot; height=&quot;823&quot; data-origin-width=&quot;690&quot; data-origin-height=&quot;823&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여기까진 AL2023의 문서 그대로입니다만, 함정은 hop입니다. hop이 1로 뜹니다. 위에 서술했듯, Container 내에서 IMDS에 접근하려면 호스트 네트워크를 거치므로 무조건 hop 2가 필요합니다. 그래서 AL2023 AMI의 기본값도 hop 2로 변경한 것이죠. 그런데 Managed Node Group으로 생성된 EC2는 AL2023으로 뜨면서 IMDS는 v2로 띄우고 hop은 1로 띄웁니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EC2 console 안에서는 이 hop 수를 볼수도 없습니다. 그냥 1.30으로 올린 다음부터 pod안에서 aws credential을 가져오지 못하거나, aws load balancer controller에서 vpcId를 읽지 못하는 오류가 발생하거나 pod가 무한 재시작 되는 상황에서 문제를 추적하다 보면 이 hop에 문제가 있다는 것을 알게 됩니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;어디에서 이 문제를 추적하고 있는지 찾아보았습니다.&lt;/p&gt;
&lt;hr contenteditable=&quot;false&quot; data-ke-type=&quot;horizontalRule&quot; data-ke-style=&quot;style3&quot; /&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선 AL2023 출시를 공지한 github 이슈에서 이에 대한 설명이 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/awslabs/amazon-eks-ami/issues/1696&quot;&gt;Amazon Linux 2023 (AL2023) is now generally available for MNG, Karpenter, and self managed nodes &amp;middot; Issue #1696 &amp;middot; awslabs/amazon-eks-ami (github.com)&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718926169758&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;Amazon Linux 2023 (AL2023) is now generally available for MNG, Karpenter, and self managed nodes &amp;middot; Issue #1696 &amp;middot; awslabs/amazo&quot; data-og-description=&quot;Today, we are announcing general availability of Amazon Linux 2023 (AL2023) on Amazon Elastic Kubernetes Service (EKS). AL2023 is the next generation of Amazon Linux from Amazon Web Services and is...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/awslabs/amazon-eks-ami/issues/1696&quot; data-og-url=&quot;https://github.com/awslabs/amazon-eks-ami/issues/1696&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bGoowl/hyWoKe9Vvu/SVz6k7iNNdNWV0Dkhqtyy0/img.png?width=1200&amp;amp;height=600&amp;amp;face=1003_125_1048_173&quot;&gt;&lt;a href=&quot;https://github.com/awslabs/amazon-eks-ami/issues/1696&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/awslabs/amazon-eks-ami/issues/1696&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bGoowl/hyWoKe9Vvu/SVz6k7iNNdNWV0Dkhqtyy0/img.png?width=1200&amp;amp;height=600&amp;amp;face=1003_125_1048_173');&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;Amazon Linux 2023 (AL2023) is now generally available for MNG, Karpenter, and self managed nodes &amp;middot; Issue #1696 &amp;middot; awslabs/amazo&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Today, we are announcing general availability of Amazon Linux 2023 (AL2023) on Amazon Elastic Kubernetes Service (EKS). AL2023 is the next generation of Amazon Linux from Amazon Web Services and is...&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;1870&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/cRQ6bF/btsH7i4NNZN/0nPP4fsQqpoLdwhEpwn3Nk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/cRQ6bF/btsH7i4NNZN/0nPP4fsQqpoLdwhEpwn3Nk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/cRQ6bF/btsH7i4NNZN/0nPP4fsQqpoLdwhEpwn3Nk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FcRQ6bF%2FbtsH7i4NNZN%2F0nPP4fsQqpoLdwhEpwn3Nk%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;1437&quot; height=&quot;1870&quot; data-origin-width=&quot;1437&quot; data-origin-height=&quot;1870&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;EKS - Managed Node Group 설명서의 항목에서도 다음 문구를 발견할 수 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://docs.aws.amazon.com/eks/latest/userguide/launch-templates.html&quot;&gt;Customizing managed nodes with launch templates - Amazon EKS&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;2643&quot; data-origin-height=&quot;309&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dUpdvu/btsH6udOwxv/0ruVy9iBS1HxkiBLRakR51/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dUpdvu/btsH6udOwxv/0ruVy9iBS1HxkiBLRakR51/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dUpdvu/btsH6udOwxv/0ruVy9iBS1HxkiBLRakR51/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdUpdvu%2FbtsH6udOwxv%2F0ruVy9iBS1HxkiBLRakR51%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;2643&quot; height=&quot;309&quot; data-origin-width=&quot;2643&quot; data-origin-height=&quot;309&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;aws load balancer controller 이슈도 하나 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/kubernetes-sigs/aws-load-balancer-controller/issues/3695#issuecomment-2151502349&quot;&gt;Does not work on Fresh EKS Cluster with Amazon Linux 2023 AMI Type Nodes &amp;middot; Issue #3695 &amp;middot; kubernetes-sigs/aws-load-balancer-controller (github.com)&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1425&quot; data-origin-height=&quot;414&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/DYvms/btsH6ePO1my/HniJMc91kDg1kOkA3fufp1/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/DYvms/btsH6ePO1my/HniJMc91kDg1kOkA3fufp1/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/DYvms/btsH6ePO1my/HniJMc91kDg1kOkA3fufp1/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FDYvms%2FbtsH6ePO1my%2FHniJMc91kDg1kOkA3fufp1%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;1425&quot; height=&quot;414&quot; data-origin-width=&quot;1425&quot; data-origin-height=&quot;414&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;AL2023 출시 블로그에도 문구가 있습니다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://aws.amazon.com/ko/blogs/containers/amazon-eks-optimized-amazon-linux-2023-amis-now-available/&quot;&gt;Amazon EKS 최적화 Amazon Linux 2023 AMI 정식 출시 | 컨테이너&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;642&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/ehgaKq/btsH7VH2D0A/kCtRNTPI4mKX7argGC2xo0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/ehgaKq/btsH7VH2D0A/kCtRNTPI4mKX7argGC2xo0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/ehgaKq/btsH7VH2D0A/kCtRNTPI4mKX7argGC2xo0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FehgaKq%2FbtsH7VH2D0A%2FkCtRNTPI4mKX7argGC2xo0%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;1181&quot; height=&quot;642&quot; data-origin-width=&quot;1181&quot; data-origin-height=&quot;642&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;1.30 release note나 deprecated note 등 주요 업데이트 확인 포인트에는 일언반구도 AL2023과 hop 제한으로 문제가 생긴다는 언급이 없습니다. &lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;어처구니 없게 지들이 만든 EKS Addon에서조차 hop 제한으로 업데이트만 하면 바로 동작하지 않게 만들어 놓았죠.&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #333333; text-align: start;&quot;&gt;Managed Node Group에서만 hop 1로 걸고, 다른 EC2 생성에서는 hop 2로 생성이 됩니다. (카펜터등)&lt;/span&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;즉, 여러 방식으로 EC2를 띄우는 환경이라면 EC2를 누가 띄웠냐에 따라 pod가 동작 했다가 안했다가 한다는 말입니다. 하하 :) 병신들이냐 진짜?&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해결법은 간단합니다. 이게 문제라는걸 알기 어려워서 문제인거고, Managed Node Group에서 사용하는 Launch Template에서 hop을 2로 설정하면 됩니다.&lt;/p&gt;</description>
      <category>개발/Kubernetes</category>
      <category>AWS</category>
      <category>eks</category>
      <category>Kubernetes</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/68</guid>
      <comments>https://hbs.pe.kr/entry/Kubernetes-AWS-EKS-130-Update-Considerations#entry68comment</comments>
      <pubDate>Fri, 21 Jun 2024 08:44:39 +0900</pubDate>
    </item>
    <item>
      <title>2024-06 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2024-06-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1718596135219&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, QLD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QLD의 양/음봉 여부에 따른 QLD/TQQQ 선택 매매1회 전월 양봉 =&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/pMMsA/hyWlhx4Ena/47G46z4QOfJMmCiuDMlCv0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bH55Nw/hyWoPfCn1b/PK2KHk77pgyLCvXdcJpE5K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bX5gja/hyWoMJXE28/ABvpngF5smmKM4KVPVU4LK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/pMMsA/hyWlhx4Ena/47G46z4QOfJMmCiuDMlCv0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bH55Nw/hyWoPfCn1b/PK2KHk77pgyLCvXdcJpE5K/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bX5gja/hyWoMJXE28/ABvpngF5smmKM4KVPVU4LK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK)월 적립식 투자규칙매월 1일 매매SCHD, QLD, TQQQ를 기계식 매수SCHD를 적립하면서 동시에 QLD의 양/음봉 여부에 따른 QLD/TQQQ 선택 매매1회 전월 양봉 =&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;24년도 연금저축펀드와 IRP 세액공제분 납입한도가 모두 차서 이제 ISA에서 TIGER미국배당다우존스를 매수했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;전월에 매입한 TQQQ 상승세가 무섭다. 벌써 +40%... 이거 맞니?&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>TQQQ</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/67</guid>
      <comments>https://hbs.pe.kr/entry/2024-06-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry67comment</comments>
      <pubDate>Mon, 17 Jun 2024 12:50:50 +0900</pubDate>
    </item>
    <item>
      <title>2024-05 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2024-05-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1715255789166&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK) 월 적립식 투자규칙 매월 1일 매매 SCHD, QLD, TQQQ를 기계식 매수 SCHD를 적립하면서 동시에 QLD의 양/음봉 여부에 따른 QLD/TQQQ 선택 매매 1회 전월 양&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sfoQp/hyVud4jgC4/ei5jBfeGZK40T70g1dorIk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bw1f88/hyVxwHT774/ytaUZy5ZHe2RKMPW8iQXO0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bEMmiC/hyVulH2HK6/72VZw6OYNH7sRq9721RFSK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sfoQp/hyVud4jgC4/ei5jBfeGZK40T70g1dorIk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bw1f88/hyVxwHT774/ytaUZy5ZHe2RKMPW8iQXO0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bEMmiC/hyVulH2HK6/72VZw6OYNH7sRq9721RFSK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK) 월 적립식 투자규칙 매월 1일 매매 SCHD, QLD, TQQQ를 기계식 매수 SCHD를 적립하면서 동시에 QLD의 양/음봉 여부에 따른 QLD/TQQQ 선택 매매 1회 전월 양&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 음봉 = x2를 SCHD, TQQQ 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;전달 나스닥이 오랜만에 음봉으로 돌아갔다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;그동안 제법 쌓인 현금을 통해 2배수 금액을 SCHD와 TQQQ 매수를 진행했다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>TQQQ</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/66</guid>
      <comments>https://hbs.pe.kr/entry/2024-05-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry66comment</comments>
      <pubDate>Thu, 9 May 2024 20:58:15 +0900</pubDate>
    </item>
    <item>
      <title>2024-04 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2024-04-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p style=&quot;color: #333333; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1712204011070&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sfoQp/hyVud4jgC4/ei5jBfeGZK40T70g1dorIk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bw1f88/hyVxwHT774/ytaUZy5ZHe2RKMPW8iQXO0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bEMmiC/hyVulH2HK6/72VZw6OYNH7sRq9721RFSK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK) 월 적립식 투자규칙 매월 1일 매매 SCHD, QLD, TQQQ를 기계식 매수 SCHD를 적립하면서 동시에 QLD의 양/음봉 여부에 따른 QLD/TQQQ 선택 매매 1회 전월 양&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sfoQp/hyVud4jgC4/ei5jBfeGZK40T70g1dorIk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bw1f88/hyVxwHT774/ytaUZy5ZHe2RKMPW8iQXO0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bEMmiC/hyVulH2HK6/72VZw6OYNH7sRq9721RFSK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK) 월 적립식 투자규칙 매월 1일 매매 SCHD, QLD, TQQQ를 기계식 매수 SCHD를 적립하면서 동시에 QLD의 양/음봉 여부에 따른 QLD/TQQQ 선택 매매 1회 전월 양&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;3월도 나스닥은 상승장이었다. 현금을 쌓는다. 최근 계속 연속 상승이었으므로 나스닥은 다 팔고 이제 SCHD와 현금만 쌓이고 있다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현금은 KOFR 금리 ETF와 ACE 만기자동연장회사채에 나눠 돌린다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;벌써 SCHD의 총 수익률은 20% 가까이 된다. SCHD의 최대 MDD (금융위기)가 20%~30%선이니 이제 왠만한 일로 미장이 박살나도 순익 구간이 깨질 확률이 적어졌다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;배당주가 수익률도 높다니... 사기는 사기다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/65</guid>
      <comments>https://hbs.pe.kr/entry/2024-04-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry65comment</comments>
      <pubDate>Thu, 4 Apr 2024 13:15:13 +0900</pubDate>
    </item>
    <item>
      <title>Typescript compilerHost를 사용해 컴파일 할 때 주의사항</title>
      <link>https://hbs.pe.kr/entry/Typescript-compilerHost%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4-%EC%BB%B4%ED%8C%8C%EC%9D%BC-%ED%95%A0-%EB%95%8C-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;Typescript compilerHost는 현재 app의 pwd 경로를 기준으로 @types/node 등의 기본 의존성 타입을 찾는다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 mono repo와 같은 복잡한 구조인 경우 실행되는 app의 경로를 잘 지정하거나, compilerHost.getCurrentDirectory를 overwrite 하여 정확한 경로를 수동으로 지정해줄 필요가 있다.&lt;/p&gt;
&lt;pre id=&quot;code_1710863153308&quot; class=&quot;javascript&quot; style=&quot;background-color: #f8f8f8; color: #383a42; text-align: start;&quot; data-ke-type=&quot;codeblock&quot; data-ke-language=&quot;typescript&quot;&gt;&lt;code&gt;// typescript는 cwd를 기준으로 node_modules/typescript/lib을 기본 lib 경로로 사용한다. 정확히 바라보도록 설정해준다.
compilerHost.getCurrentDirectory = () =&amp;gt; {
  console.log(`compilerHost.getCurrentDirectory`, __dirname, path.resolve(__dirname, `../`));
  return path.resolve(__dirname, `../`);
}&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;개삽질 history...&lt;/p&gt;</description>
      <category>개발/NodeJS</category>
      <category>nodejs</category>
      <category>TypeScript</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/64</guid>
      <comments>https://hbs.pe.kr/entry/Typescript-compilerHost%EB%A5%BC-%EC%82%AC%EC%9A%A9%ED%95%B4-%EC%BB%B4%ED%8C%8C%EC%9D%BC-%ED%95%A0-%EB%95%8C-%EC%A3%BC%EC%9D%98%EC%82%AC%ED%95%AD#entry64comment</comments>
      <pubDate>Wed, 20 Mar 2024 00:46:09 +0900</pubDate>
    </item>
    <item>
      <title>Docker / Buildkit 에서 SOURCE_DATE_EPOCH와 rewrite-timestamp 설정</title>
      <link>https://hbs.pe.kr/entry/Docker-Buildkit-%EC%97%90%EC%84%9C-SOURCEDATEEPOCH%EC%99%80-rewrite-timestamp-%EC%84%A4%EC%A0%95</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;Docker&amp;nbsp;/&amp;nbsp;Buildkit&amp;nbsp;에서&amp;nbsp;SOURCE_DATE_EPOCH와&amp;nbsp;rewrite-timestamp&amp;nbsp;설정&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;컨테이너 이미지를 빌드하는 과정에서 동일한 이미지 레이어 구성을 가졌음에도 불구하고 빌드 캐시를 활용하지 않는 경우, 최종 이미지의 해시값이 매번 변경되는 현상이 발생한다. 이러한 변화는 이미지 매니페스트와 각 빌드 단계에서 생성되는 레이어에 현재 빌드 시간이 포함되어 있기 때문으로, 캐시를 재활용하지 않을 경우 동일한 컨텍스트, 소스, 도커파일이라 하더라도 매번 다른 이미지가 생성된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;기술적 배경을 살펴보면, 도커파일 내에서 apt와 같은 패키지 매니저를 통해 원격 설치를 진행하는 경우, 매 호출 시 동일한 명령어로 이미지를 구성하더라도 실제 파일 시스템에는 변경 사항이 발생할 수 있어 이와 같은 동작이 이루어진다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 대다수의 시스템은 최종 서버 빌드를 위해 이러한 패키지 설치 단계를 별도의 이미지로 미리 생성하여 사용하는 경우가 많으며, 이 경우 빌드 캐시의 무효화나 빌드 시스템의 병렬 처리로 인해 각 빌드마다 동일한 이미지가 생성되지 않는 현상으로 인해 스토리지 및 네트워크 사용량이 증가하고, 해시 변경을 감지하는 후처리 작업이 더욱 복잡해지는 문제가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이러한 문제에 대응하기 위해, &lt;a href=&quot;https://github.com/moby/buildkit/issues/1058&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;많은 요구자들은 오랫동안 이미지 스냅샷과 메타데이터의 타임스탬프를 유닉스 타임 0으로 설정하는 것을 요청&lt;/a&gt;해왔으며, 이제서야 이러한 요구가 반영된 v0.13.0 버전의 빌드킷 업데이트가 이루어졌다. &lt;a href=&quot;https://github.com/moby/buildkit/blob/v0.11/docs/build-repro.md#source_date_epoch&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;v0.11.0에서는 SOURCE_DATE_EPOCH 인식 기능이 추가&lt;/a&gt;되었으며, &lt;a href=&quot;https://github.com/moby/buildkit/blob/v0.13.0/docs/build-repro.md#source_date_epoch&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;v0.13.0에서는 rewrite-timestamp 내보내기 옵션이 추가&lt;/a&gt;되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;SOURCE_DATE_EPOCH에 대한 자세한 정보는 다음 링크에서 확인할 수 있다: &lt;a href=&quot;https://reproducible-builds.org/docs/source-date-epoch/&quot;&gt;https://reproducible-builds.org/docs/source-date-epoch/&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이것들과 함께 touch로 context 파일의 타임스템프들을 모두 동일하게 초기화 하면, 몇번 빌드하던지 모두 같은 이미지 해시가 만들어지게 된다.&lt;/p&gt;
&lt;pre id=&quot;code_1710324787663&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# Dockerfile
# syntax=docker/dockerfile:1.5
FROM ubuntu:22.04@sha256:aa772c98400ef833586d1d517d3e8de670f7e712bf581ce6053165081773259d
RUN echo &quot;Hello World&quot; &amp;gt; hello.txt &amp;amp; touch -t 197001010000.00 hello.txt

# bash
docker buildx create --use --driver-opt image=moby/buildkit:v0.13.0
docker buildx build --no-cache --build-arg SOURCE_DATE_EPOCH=0 --output type=image,push=false,rewrite-timestamp=true .
[+] Building 1.1s (8/8) FINISHED                                                                                                                                          
 =&amp;gt; [internal] load build definition from Dockerfile                                                                                                                 0.0s
 =&amp;gt; =&amp;gt; transferring dockerfile: 232B                                                                                                                                 0.0s
 =&amp;gt; resolve image config for docker-image://docker.io/docker/dockerfile:1.5                                                                                          0.3s
 =&amp;gt; CACHED docker-image://docker.io/docker/dockerfile:1.5@sha256:39b85bbfa7536a5feceb7372a0817649ecb2724562a38360f4d6a7782a409b14                                    0.0s
 =&amp;gt; =&amp;gt; resolve docker.io/docker/dockerfile:1.5@sha256:39b85bbfa7536a5feceb7372a0817649ecb2724562a38360f4d6a7782a409b14                                               0.0s
 =&amp;gt; [internal] load .dockerignore                                                                                                                                    0.0s
 =&amp;gt; =&amp;gt; transferring context: 2B                                                                                                                                      0.0s
 =&amp;gt; [internal] load metadata for docker.io/library/ubuntu:22.04@sha256:aa772c98400ef833586d1d517d3e8de670f7e712bf581ce6053165081773259d                              0.0s
 =&amp;gt; CACHED [1/2] FROM docker.io/library/ubuntu:22.04@sha256:aa772c98400ef833586d1d517d3e8de670f7e712bf581ce6053165081773259d                                         0.0s
 =&amp;gt; =&amp;gt; resolve docker.io/library/ubuntu:22.04@sha256:aa772c98400ef833586d1d517d3e8de670f7e712bf581ce6053165081773259d                                                0.0s
 =&amp;gt; [2/2] RUN echo &quot;Hello World&quot; &amp;gt; hello.txt &amp;amp; touch -t 197001010000.00 hello.txt                                                                                    0.1s
 =&amp;gt; exporting to image                                                                                                                                               0.2s
 =&amp;gt; =&amp;gt; exporting layers                                                                                                                                              0.2s
 =&amp;gt; =&amp;gt; exporting manifest sha256:8be4c0a2a57b95ba10ccf6edc234b2969e46eeea549054ab322243faa44b9ef3                                                                    0.0s
 =&amp;gt; =&amp;gt; exporting config sha256:47c62c5eb5f254e29365ceda2a043bd48ffccf48f48e7caacad9428db7440a6e&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;위와 같은 Dockerfile에서 docker build를 하면 이제 항상 동일한 manifest sha가 생성될 것이다. (sha256:8be4c0a2a57b95ba10ccf6edc234b2969e46eeea549054ab322243faa44b9ef3)&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;현재 남아 있는 문제점으로는, COPY --link 단계에서 타임스탬프 재작성이 이루어지지 않는 것으로 보인다. 이 문제가 해결되기 전까지는 간단한 COPY 명령어를 사용하는 것이 좋을 것으로 보인다.&lt;/p&gt;</description>
      <category>개발/ETC</category>
      <category>build</category>
      <category>buildkit</category>
      <category>Container</category>
      <category>docker</category>
      <category>IMAGE</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/63</guid>
      <comments>https://hbs.pe.kr/entry/Docker-Buildkit-%EC%97%90%EC%84%9C-SOURCEDATEEPOCH%EC%99%80-rewrite-timestamp-%EC%84%A4%EC%A0%95#entry63comment</comments>
      <pubDate>Wed, 13 Mar 2024 17:21:23 +0900</pubDate>
    </item>
    <item>
      <title>2024-03 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2024-03-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&amp;nbsp;noreferrer&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1709767575631&quot; contenteditable=&quot;false&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK) 월 적립식 투자규칙 매월 1일 매매 SCHD, QLD, TQQQ를 기계식 매수 SCHD를 적립하면서 동시에 QLD의 양/음봉 여부에 따른 QLD/TQQQ 선택 매매 1회 전월 양&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/sfoQp/hyVud4jgC4/ei5jBfeGZK40T70g1dorIk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bw1f88/hyVxwHT774/ytaUZy5ZHe2RKMPW8iQXO0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bEMmiC/hyVulH2HK6/72VZw6OYNH7sRq9721RFSK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/sfoQp/hyVud4jgC4/ei5jBfeGZK40T70g1dorIk/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bw1f88/hyVxwHT774/ytaUZy5ZHe2RKMPW8iQXO0/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/bEMmiC/hyVulH2HK6/72VZw6OYNH7sRq9721RFSK/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;매수 규칙이 11월부터 변경되었다. (기존 규칙 LINK) 월 적립식 투자규칙 매월 1일 매매 SCHD, QLD, TQQQ를 기계식 매수 SCHD를 적립하면서 동시에 QLD의 양/음봉 여부에 따른 QLD/TQQQ 선택 매매 1회 전월 양&lt;/p&gt;
&lt;p class=&quot;og-host&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2월도 나스닥은 상승장이었다. 현금을 쌓는다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;현금은 KOFR 금리 ETF와 ACE 만기자동연장회사채에 나눠 돌린다.&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/62</guid>
      <comments>https://hbs.pe.kr/entry/2024-03-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry62comment</comments>
      <pubDate>Thu, 7 Mar 2024 08:28:00 +0900</pubDate>
    </item>
    <item>
      <title>pnpm 심볼릭 링크 버그 수정하기</title>
      <link>https://hbs.pe.kr/entry/pnpm-%EC%8B%AC%EB%B3%BC%EB%A6%AD-%EB%A7%81%ED%81%AC-%EB%B2%84%EA%B7%B8-%EC%88%98%EC%A0%95%ED%95%98%EA%B8%B0</link>
      <description>&lt;h2 data-ke-size=&quot;size26&quot;&gt;개요&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;최근 내부 저장소의 기본 의존성을 최신 버전으로 업그레이드한 이후, 특정 서버가 런타임 중에 중단되기 시작했다.&lt;/p&gt;
&lt;pre id=&quot;code_1708916895440&quot; class=&quot;bash&quot; data-ke-language=&quot;bash&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;ERROR 1: uncaughtException : Error: libtensorflow.so.2: cannot open shared object file: No such file or directory&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;TensorFlow의 Node.js 버전은 모듈 설치 후 설치 스크립트에 의해 운영 체제별로 의존성을 다운로드하거나 소스 코드에서 빌드되며, 결국 빌드된 바이너리 파일을 심볼릭 링크로 연결한 특정 경로를 생성한다. TensorFlow Node.js API는 이러한 심볼릭 링크를 참조한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 모듈의 내부 작동 방식은 사용자가 알 필요가 없어야 한다. 정상적으로 빌드가 완료되면 그냥 작동해야 하지만, 문제가 발생하면 사용자도 이를 알게 된다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;358&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bGR4O0/btsFiqx9sfy/2FiNJY27GL1H8WawK9FXVk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bGR4O0/btsFiqx9sfy/2FiNJY27GL1H8WawK9FXVk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bGR4O0/btsFiqx9sfy/2FiNJY27GL1H8WawK9FXVk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbGR4O0%2FbtsFiqx9sfy%2F2FiNJY27GL1H8WawK9FXVk%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;400&quot; height=&quot;146&quot; data-origin-width=&quot;984&quot; data-origin-height=&quot;358&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pnpm을 사용하여 모듈을 처음 설치할 때, 모든 파일과 그 인덱스를 캐시 저장소에 기록한다. 두 번째 설치부터는 이 인덱스를 사용하여 파일을 복원한다. 그러나 pnpm 8.7 버전부터 심볼릭 링크된 파일이 인덱스에 포함되지 않는 문제를 발견했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이로 인해 CI/CD 빌드 런타임에서 캐시가 없는 상태로 처음 설치할 때는 심볼릭 링크가 생성되어 정상적으로 작동하지만, 빌드 캐시에서 복원하는 두 번째 설치부터는 심볼릭 링크가 누락되어 런타임 오류가 발생한다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 pnpm에 보고했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/pnpm/pnpm/issues/7691&quot;&gt;https://github.com/pnpm/pnpm/issues/7691&lt;/a&gt;&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 비슷한 이슈는 이전부터 존재했고, 아직도 해결되지 않고 있으며 담당자도 뭔가 삽을 푸고있는 것으로 보였다. 이런게 직접 나설 때이다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;367&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/bnRCqe/btsFgO0wJgD/GR9orqzrTUAgQ23Pnc4jNk/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/bnRCqe/btsFgO0wJgD/GR9orqzrTUAgQ23Pnc4jNk/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/bnRCqe/btsFgO0wJgD/GR9orqzrTUAgQ23Pnc4jNk/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FbnRCqe%2FbtsFgO0wJgD%2FGR9orqzrTUAgQ23Pnc4jNk%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;481&quot; height=&quot;367&quot; data-origin-width=&quot;481&quot; data-origin-height=&quot;367&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;이슈 추적&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;문제의 원인은 심볼릭 링크가 .json 파일 인덱스에 기록되지 않는 것이었다. 따라서 심볼릭 링크를 기록하는 부분을 조사하기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;pnpm 프로젝트를 다운로드하여 문제를 추적하기 시작했다. 모듈 설치가 완료된 후 내부 디렉토리를 캐싱하는 코드를 찾았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 코드는 &lt;a href=&quot;https://github.com/pnpm/pnpm/blob/main/store/cafs/src/addFilesFromDir.ts&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot;&gt;/store/cafs/src/addFilesFromDir.ts&lt;/a&gt;에 위치해 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;테스트 케이스를 작성하여 문제를 재현해보았다.&lt;/p&gt;
&lt;pre id=&quot;code_1708917030515&quot; class=&quot;typescript&quot; data-ke-language=&quot;typescript&quot; data-ke-type=&quot;codeblock&quot;&gt;&lt;code&gt;# test directory 설정
~/pnpm/store/cafs/test/fixtures/include-symlink$ ls -li
10272393 lrwxrwxrwx 1 bitofsky bitofsky 10 Feb 23 16:09 link.txt -&amp;gt; origin.txt
10272392 -rw-rw-r-- 1 bitofsky bitofsky  2 Feb 23 16:06 origin.txt

# jest test 추가
test('recognize files in a directory with symbolic links', () =&amp;gt; {
  const storeDir = tempy.directory()
  const srcDir = path.join(__dirname, 'fixtures/include-symlink')
  const addFiles = () =&amp;gt; createCafs(storeDir).addFilesFromDir(srcDir)

  const { filesIndex } = addFiles()

  expect(filesIndex['origin.txt']).toBeDefined()
  expect(filesIndex['link.txt']).toBeDefined()
})&lt;/code&gt;&lt;/pre&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전&amp;nbsp;8.6에서는&amp;nbsp;테스트가&amp;nbsp;통과했지만,&amp;nbsp;8.7&amp;nbsp;이후&amp;nbsp;버전에서는&amp;nbsp;실패했다.&amp;nbsp;반면&amp;nbsp;9.x&amp;nbsp;알파&amp;nbsp;버전에서는&amp;nbsp;다시&amp;nbsp;통과했다.&lt;/p&gt;
&lt;h2 data-ke-size=&quot;size26&quot;&gt;문제 해결&lt;/h2&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;addFilesFromDir에서 파일 인덱스 목록을 반환하는 과정에 문제가 있음을 확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;버전별 코드 변경 사항을 검토했고, 문제를 식별한 후, 9.x 알파 버전에서 이미 해결된 사실을 확인했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그러나 해결이 이 문제를 해결하기 위함이 아니라 코드 개선중 얼떨결에 해결된 것으로 보이며 문제 인식이 없는 한 하위 버전에 자동으로 백포트 하지는 않을 것 같았다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;따라서 8버전에도 이 수정 사항을 백포트하면 될것으로 판단해 pr을 올리는 대신 코멘트를 작성하기로 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://github.com/pnpm/pnpm/issues/7691#issuecomment-1961697431&quot;&gt;https://github.com/pnpm/pnpm/issues/7691#issuecomment-1961697431&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1708917073689&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;pnpm store doesn't have symlink files after version 8.7 &amp;middot; Issue #7691 &amp;middot; pnpm/pnpm&quot; data-og-description=&quot;Verify latest release I verified that the issue exists in the latest pnpm release pnpm version v8.7.0~ Which area(s) of pnpm are affected? (leave empty if unsure) Store Link to the code that reprod...&quot; data-og-host=&quot;github.com&quot; data-og-source-url=&quot;https://github.com/pnpm/pnpm/issues/7691#issuecomment-1961697431&quot; data-og-url=&quot;https://github.com/pnpm/pnpm/issues/7691&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/RHdzQ/hyVqnrm8yg/dvHiAwpkjiV9nI7lkC2s9K/img.png?width=1200&amp;amp;height=600&amp;amp;face=0_0_1200_600&quot;&gt;&lt;a href=&quot;https://github.com/pnpm/pnpm/issues/7691#issuecomment-1961697431&quot; target=&quot;_blank&quot; rel=&quot;noopener&quot; data-source-url=&quot;https://github.com/pnpm/pnpm/issues/7691#issuecomment-1961697431&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/RHdzQ/hyVqnrm8yg/dvHiAwpkjiV9nI7lkC2s9K/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;pnpm store doesn't have symlink files after version 8.7 &amp;middot; Issue #7691 &amp;middot; pnpm/pnpm&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; data-ke-size=&quot;size16&quot;&gt;Verify latest release I verified that the issue exists in the latest pnpm release pnpm version v8.7.0~ Which area(s) of pnpm are affected? (leave empty if unsure) Store Link to the code that reprod...&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&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;1733&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/oKPsm/btsFgMohM9B/0XXcAnRTmKhh3KOwgsiUIK/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/oKPsm/btsFgMohM9B/0XXcAnRTmKhh3KOwgsiUIK/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/oKPsm/btsFgMohM9B/0XXcAnRTmKhh3KOwgsiUIK/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FoKPsm%2FbtsFgMohM9B%2F0XXcAnRTmKhh3KOwgsiUIK%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;1198&quot; height=&quot;1733&quot; data-origin-width=&quot;1198&quot; data-origin-height=&quot;1733&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;근본&amp;nbsp;원인은&amp;nbsp;nodejs&amp;nbsp;fs&amp;nbsp;내장&amp;nbsp;모듈에서&amp;nbsp;제공하는&amp;nbsp;readdir과&amp;nbsp;stat&amp;nbsp;메소드에서&amp;nbsp;반환하는&amp;nbsp;파일의&amp;nbsp;속성을&amp;nbsp;조사하는&amp;nbsp;객체의&amp;nbsp;차이에서&amp;nbsp;발생했다.&lt;br /&gt;&lt;br /&gt;readdir에서&amp;nbsp;withFileTypes:&amp;nbsp;true를&amp;nbsp;주고&amp;nbsp;디렉토리를&amp;nbsp;읽으면&amp;nbsp;디렉토리&amp;nbsp;내부의&amp;nbsp;파일&amp;nbsp;목록을&amp;nbsp;제공하는데&amp;nbsp;이&amp;nbsp;파일&amp;nbsp;각각은&amp;nbsp;Dirent&amp;nbsp;object이다.&lt;br /&gt;&lt;br /&gt;그러나&amp;nbsp;stat&amp;nbsp;메소드에서&amp;nbsp;해당&amp;nbsp;파일을&amp;nbsp;직접&amp;nbsp;읽으면&amp;nbsp;Stats&amp;nbsp;object가&amp;nbsp;반환된다.&lt;br /&gt;&lt;br /&gt;8.7&amp;nbsp;이전에선&amp;nbsp;readdir()&amp;nbsp;&amp;rarr;&amp;nbsp;stat()&amp;nbsp;과정을&amp;nbsp;통해&amp;nbsp;Stats&amp;nbsp;object로부터&amp;nbsp;isFile()&amp;nbsp;을&amp;nbsp;체크했는데&amp;nbsp;이&amp;nbsp;메소드는&amp;nbsp;심볼릭&amp;nbsp;링크를&amp;nbsp;true로&amp;nbsp;반환했다.&lt;br /&gt;&lt;br /&gt;8.7&amp;nbsp;이후에선&amp;nbsp;성능&amp;nbsp;개선&amp;nbsp;목적&amp;nbsp;때문인지,&amp;nbsp;readdir(&amp;nbsp;withFileTypes:&amp;nbsp;true&amp;nbsp;)&amp;nbsp;로&amp;nbsp;하고&amp;nbsp;반환되는&amp;nbsp;file&amp;nbsp;Dirent&amp;nbsp;object로부터&amp;nbsp;isFile()을&amp;nbsp;체크했는데,&amp;nbsp;pnpm&amp;nbsp;개발자가&amp;nbsp;간과한&amp;nbsp;것은&amp;nbsp;심볼릭&amp;nbsp;링크된&amp;nbsp;파일의&amp;nbsp;경우&amp;nbsp;여기서&amp;nbsp;false가&amp;nbsp;반환된다는&amp;nbsp;점이다.&amp;nbsp;그래서&amp;nbsp;8.7&amp;nbsp;이후부터는&amp;nbsp;심볼릭&amp;nbsp;링크된&amp;nbsp;파일이&amp;nbsp;사라진&amp;nbsp;것이었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;해당 이슈에 대한 담당자의 인지 후, 수정된 버그 픽스가 곧 배포되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 버그는 오랫동안 지속되었으나, 캐시가 생성된 상태에서 버전 업데이트가 이루어지면 심볼릭 링크가 이미 인덱스에 기록된 캐시를 재사용하기 때문에 새로운 빌드 캐시에서만 문제가 발생해 명확하게 드러나지 않았던 것으로 보인다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;오늘도 지옥불에서 해피 코딩&lt;/p&gt;</description>
      <category>개발/NodeJS</category>
      <category>Bug</category>
      <category>Link</category>
      <category>nodejs</category>
      <category>opensource</category>
      <category>pnpm</category>
      <category>Symbolic</category>
      <category>tensorflow</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/61</guid>
      <comments>https://hbs.pe.kr/entry/pnpm-%EC%8B%AC%EB%B3%BC%EB%A6%AD-%EB%A7%81%ED%81%AC-%EB%B2%84%EA%B7%B8-%EC%88%98%EC%A0%95%ED%95%98%EA%B8%B0#entry61comment</comments>
      <pubDate>Mon, 26 Feb 2024 12:12:26 +0900</pubDate>
    </item>
    <item>
      <title>SYN FLOOD 공격 및 대응 사례</title>
      <link>https://hbs.pe.kr/entry/SYN-FLOOD-%EA%B3%B5%EA%B2%A9-%EB%B0%8F-%EB%8C%80%EC%9D%91-%EC%82%AC%EB%A1%80-%EA%B3%B5%EC%9C%A0</link>
      <description>&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/EuRUg/btsEDgwbB4i/SvXUV5ZQpEtTV4umiwdkBK/img.webp&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/EuRUg/btsEDgwbB4i/SvXUV5ZQpEtTV4umiwdkBK/img.webp&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/EuRUg/btsEDgwbB4i/SvXUV5ZQpEtTV4umiwdkBK/img.webp&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FEuRUg%2FbtsEDgwbB4i%2FSvXUV5ZQpEtTV4umiwdkBK%2Fimg.webp&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;400&quot; height=&quot;400&quot; data-origin-width=&quot;1024&quot; data-origin-height=&quot;1024&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;서론&lt;/b&gt;&lt;br /&gt;최근 우리 서비스는 네트워크 이상 현상과 그로 인해 발생한 장애를 경험했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제는 특정 시간대에 집중적으로 발생했으며, AWS GlobalAccelerator, ELB (L4 NLB), EKS 구성을 통해 제공되는 서비스에 영향을 미쳤다. 문제는 사용자 수의 급격한 감소와 서비스 오동작으로 나타났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여러 시스템 지표와 로그 분석 결과 SYN FLOOD 공격으로 인한 것으로 강하게 의심되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;SYN FLOOD 공격의 원리&lt;/b&gt;&lt;br /&gt;SYN FLOOD 공격은 TCP 연결 과정에서의 취약점을 이용하는 DoS (Denial of Service) 공격 유형 중 하나다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공격자는 대량의 SYN 요청을 목표 서버에 보내 서버의 반응을 기다리는 SYN-RECEIVED 상태의 연결을 대량으로 생성하게 만든다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서버는 이러한 미완성 연결에 대해 자원을 할당하며, 이 과정에서 너무 많은 요청이 들어오면 정상적인 트래픽을 처리할 수 없게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;신규 커넥션 연결 뿐 아니라, 기존 연결되어있는 소켓에도 문제가 발생하게 된다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;여타 DDoS 유형의 공격과 차이점은, 신규 연결은 폭발적으로 증가하지만 송수신 트래픽은 급감하는 지표가 관찰된다는 점이다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;실제 사례 분석&lt;/b&gt;&lt;br /&gt;우리 서비스에서 발생한 문제는 사용자의 급격한 감소와 서비스의 오동작으로 나타났다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이 문제를 분석한 결과, AWS의 NLB에서 Pod 타겟에 대한 deregister &amp;rarr; register 호출이 지속적으로 감지되었으며, 이는 SYN Flood 공격으로 인한 네트워크 트래픽 이슈가 발생했고 그로인한 health check 실패가 트리거로 작용해 LoadBalancer에서 서비스 Pod가 Deregister된 것이 문제였다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;공격으로 인해 NLB를 관리하는 aws-loadbalancer-controller에서 타겟 노드들이 비정상으로 인식되어 deregister되었으며 Pod 자체의 비정상 동작보다도 NLB에서 Pod들이 제거되어 서비스 트래픽을 아예 받지 못하는 상황이 된 것이 문제였다.&lt;/p&gt;
&lt;p&gt;&lt;figure class=&quot;imageblock alignCenter&quot; data-ke-mobileStyle=&quot;widthOrigin&quot; data-origin-width=&quot;963&quot; data-origin-height=&quot;711&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/LCCc9/btsEEEQyn2I/ZFsKbKW4ujxwFoKkjfRnF0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/LCCc9/btsEEEQyn2I/ZFsKbKW4ujxwFoKkjfRnF0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/LCCc9/btsEEEQyn2I/ZFsKbKW4ujxwFoKkjfRnF0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FLCCc9%2FbtsEEEQyn2I%2FZFsKbKW4ujxwFoKkjfRnF0%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;400&quot; height=&quot;711&quot; data-origin-width=&quot;963&quot; data-origin-height=&quot;711&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;2144&quot; data-origin-height=&quot;1009&quot;&gt;&lt;span data-url=&quot;https://blog.kakaocdn.net/dn/dqlrFP/btsECnvMzXk/HU4payZw4OFldNykYIDDz0/img.png&quot; data-phocus=&quot;https://blog.kakaocdn.net/dn/dqlrFP/btsECnvMzXk/HU4payZw4OFldNykYIDDz0/img.png&quot;&gt;&lt;img src=&quot;https://blog.kakaocdn.net/dn/dqlrFP/btsECnvMzXk/HU4payZw4OFldNykYIDDz0/img.png&quot; srcset=&quot;https://img1.daumcdn.net/thumb/R1280x0/?scode=mtistory2&amp;fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2FdqlrFP%2FbtsECnvMzXk%2FHU4payZw4OFldNykYIDDz0%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;2144&quot; height=&quot;1009&quot; data-origin-width=&quot;2144&quot; data-origin-height=&quot;1009&quot;/&gt;&lt;/span&gt;&lt;/figure&gt;
&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;방어 기술 및 대응 조치&lt;/b&gt;&lt;br /&gt;이 문제에 대응하기 위해 몇 가지 조치를 취했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;우선, AWS 엔지니어와 협의를 통해 AWS Shield Advanced를 활성화하여 SYN Flood 공격으로부터의 보호와 알람을 강화했다. 이 서비스는 공격을 완전히 차단할 수는 없지만, 미티게이션을 통해 증상을 완화시키는데 도움을 줄 수 있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;추가로, 서비스의 상태를 기반으로 연관 서비스에 서킷브레이크 되는 기능을 개발해 도입했다.&lt;br /&gt;이 기능은 단시간에 특정 서비스 트래픽이 발생하는 경우 서비스 레벨에서 일정 시간 기능을 멈추도록 하는 완화 기능을 제공하도록 했다. 서킷브레이크가 동작하면 Grafana와 Slack 등을 통해 담당자에게 알림을 보내어, 신속하게 상황을 인식하고 대응할 수 있도록 했다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;그리고 서킷브레이크를 라이브 환경에 적용한 다음날 바로 이루어진 재공격으로 의심되는 트래픽에서 크게 효과를 보았으며, 서비스 장애를 막는데 큰 도움이 되었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;서비스에 별다른 타격이 없다고 생각했는지, 공격자들이 더이상 이 서비스로 공격하는 행위를 보지 못하고있다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;&lt;b&gt;결론 및 교훈&lt;/b&gt;&lt;br /&gt;SYN FLOOD 공격은 네트워크 보안에 큰 위협이 되며, 이에 대한 효과적인 대응 방안을 마련하는 것이 중요하다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;이번 사례를 통해, 공격에 대한 신속한 인지와 적절한 대응 조치가 서비스의 안정성을 유지하는 데 필수적임을 다시 한번 확인할 수 있었다.&lt;/p&gt;
&lt;p data-ke-size=&quot;size16&quot;&gt;또한, 지속적인 모니터링과 예방 조치의 중요성을 재확인하며, 네트워크 보안을 강화하기 위한 노력을 계속해야 할 필요성을 느꼈다.&lt;/p&gt;</description>
      <category>개발/AWS</category>
      <category>AWS</category>
      <category>ddos</category>
      <category>dos</category>
      <category>eks</category>
      <category>ELB</category>
      <category>GlobalAccelerator</category>
      <category>NLB</category>
      <category>SYNFLOOD</category>
      <category>공격</category>
      <category>대응</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/60</guid>
      <comments>https://hbs.pe.kr/entry/SYN-FLOOD-%EA%B3%B5%EA%B2%A9-%EB%B0%8F-%EB%8C%80%EC%9D%91-%EC%82%AC%EB%A1%80-%EA%B3%B5%EC%9C%A0#entry60comment</comments>
      <pubDate>Thu, 8 Feb 2024 14:41:19 +0900</pubDate>
    </item>
    <item>
      <title>2024-02 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2024-02-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1706847909151&quot; style=&quot;color: #333333; text-align: start;&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bCC2Fo/hyUyuZblke/6DKGvmio0GfSSsbk1CxAs1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/lZbhp/hyUyteUrVM/J0NCBMoeRVvF6vCpMS6vA1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/i4uxT/hyUyp4CxJb/N6Z36yJ9iHnk25M34xfJx0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-description=&quot;기존 규칙: https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-%EC%8B%9C%EC%9E%91 매수 규칙이 11월부터 변경되었다. 월 적립식 투자규칙 매월 1일 매매 SCHD, QLD, TQQQ를 기계식 매수 SC&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-type=&quot;article&quot; data-ke-align=&quot;alignCenter&quot; data-ke-type=&quot;opengraph&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bCC2Fo/hyUyuZblke/6DKGvmio0GfSSsbk1CxAs1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/lZbhp/hyUyteUrVM/J0NCBMoeRVvF6vCpMS6vA1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/i4uxT/hyUyp4CxJb/N6Z36yJ9iHnk25M34xfJx0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;기존 규칙: https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-%EC%8B%9C%EC%9E%91 매수 규칙이 11월부터 변경되었다. 월 적립식 투자규칙 매월 1일 매매 SCHD, QLD, TQQQ를 기계식 매수 SC&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;1월도 나스닥은 상승장이었다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&amp;nbsp;&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>미국배당다우존스</category>
      <category>미국주식</category>
      <category>월적립</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/59</guid>
      <comments>https://hbs.pe.kr/entry/2024-02-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry59comment</comments>
      <pubDate>Fri, 2 Feb 2024 13:27:44 +0900</pubDate>
    </item>
    <item>
      <title>2024-01 월 적립식 투자</title>
      <link>https://hbs.pe.kr/entry/2024-01-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90</link>
      <description>&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;a href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&lt;/a&gt;&lt;/p&gt;
&lt;figure id=&quot;og_1705278620166&quot; style=&quot;color: #333333; text-align: start;&quot; data-ke-type=&quot;opengraph&quot; data-ke-align=&quot;alignCenter&quot; data-og-type=&quot;article&quot; data-og-title=&quot;월 적립식 투자 - 2023-11월 규칙 변경&quot; data-og-description=&quot;기존 규칙: https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-%EC%8B%9C%EC%9E%91 매수 규칙이 11월부터 변경되었다. 월 적립식 투자규칙 매월 1일 매매 SCHD, QLD, TQQQ를 기계식 매수 SC&quot; data-og-host=&quot;hbs.pe.kr&quot; data-og-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-url=&quot;https://hbs.pe.kr/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-og-image=&quot;https://scrap.kakaocdn.net/dn/bCC2Fo/hyUyuZblke/6DKGvmio0GfSSsbk1CxAs1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/lZbhp/hyUyteUrVM/J0NCBMoeRVvF6vCpMS6vA1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/i4uxT/hyUyp4CxJb/N6Z36yJ9iHnk25M34xfJx0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400&quot;&gt;&lt;a style=&quot;color: #000000;&quot; href=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot; data-source-url=&quot;https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-2023-11%EC%9B%94-%EA%B7%9C%EC%B9%99-%EB%B3%80%EA%B2%BD&quot;&gt;
&lt;div class=&quot;og-image&quot; style=&quot;background-image: url('https://scrap.kakaocdn.net/dn/bCC2Fo/hyUyuZblke/6DKGvmio0GfSSsbk1CxAs1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/lZbhp/hyUyteUrVM/J0NCBMoeRVvF6vCpMS6vA1/img.png?width=800&amp;amp;height=800&amp;amp;face=0_0_800_800,https://scrap.kakaocdn.net/dn/i4uxT/hyUyp4CxJb/N6Z36yJ9iHnk25M34xfJx0/img.png?width=400&amp;amp;height=400&amp;amp;face=0_0_400_400');&quot;&gt;&amp;nbsp;&lt;/div&gt;
&lt;div class=&quot;og-text&quot;&gt;
&lt;p class=&quot;og-title&quot; style=&quot;color: #000000;&quot; data-ke-size=&quot;size16&quot;&gt;월 적립식 투자 - 2023-11월 규칙 변경&lt;/p&gt;
&lt;p class=&quot;og-desc&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;기존 규칙: https://bitofsky.tistory.com/entry/%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90-%EC%8B%9C%EC%9E%91 매수 규칙이 11월부터 변경되었다. 월 적립식 투자규칙 매월 1일 매매 SCHD, QLD, TQQQ를 기계식 매수 SC&lt;/p&gt;
&lt;p class=&quot;og-host&quot; style=&quot;color: #909090;&quot; data-ke-size=&quot;size16&quot;&gt;hbs.pe.kr&lt;/p&gt;
&lt;/div&gt;
&lt;/a&gt;&lt;/figure&gt;
&lt;ul style=&quot;list-style-type: disc; color: #000000; text-align: left;&quot; data-ke-list-type=&quot;disc&quot;&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;TQQQ 수익 30% 초과 = 전량 매도&lt;/li&gt;
&lt;li style=&quot;list-style-type: disc; color: #000000;&quot;&gt;1회 전월 양봉 = x1를 SCHD 매수&lt;/li&gt;
&lt;/ul&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;2023년 한해는 2022년의 손실을 모두 복구하고 +8%가량 이익을 보고 마무리 되었다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;주력인 SCHD는 약세여서 이익이 크지 않았지만 TQQQ를 활용한 레버리지 룰에서 수익이 30%이상 발생하여 이익을 키울 수 있었다.&lt;/p&gt;
&lt;p style=&quot;color: #555555; text-align: start;&quot; data-ke-size=&quot;size16&quot;&gt;&lt;span style=&quot;color: #555555; text-align: start;&quot;&gt;나스닥은 상승장이었다.&lt;/span&gt;&lt;/p&gt;</description>
      <category>투자 | 재태크/월 적립식 투자</category>
      <category>SCHD</category>
      <category>TQQQ</category>
      <category>미국주식</category>
      <category>투자</category>
      <author>bitofsky</author>
      <guid isPermaLink="true">https://hbs.pe.kr/58</guid>
      <comments>https://hbs.pe.kr/entry/2024-01-%EC%9B%94-%EC%A0%81%EB%A6%BD%EC%8B%9D-%ED%88%AC%EC%9E%90#entry58comment</comments>
      <pubDate>Mon, 15 Jan 2024 09:33:57 +0900</pubDate>
    </item>
  </channel>
</rss>